From 3585e000b66a857ebf14895ea6e448fac8f6469e Mon Sep 17 00:00:00 2001 From: Eric Rowell Date: Wed, 2 May 2012 00:35:32 -0700 Subject: [PATCH] added new Kinetic.Sprite shape that enables you to easily add animated sprites to the stage --- Thorfile | 2 +- dist/kinetic-core.js | 94 +++++++++++++++++++++++++++++++++- dist/kinetic-core.min.js | 6 +-- src/shapes/Sprite.js | 91 +++++++++++++++++++++++++++++++++ tests/js/Test.js | 2 +- tests/js/unitTests.js | 105 ++++++++++++++++++++++++++++++++++++++ tests/scorpion-sprite.png | Bin 0 -> 26550 bytes 7 files changed, 294 insertions(+), 6 deletions(-) create mode 100644 src/shapes/Sprite.js create mode 100644 tests/scorpion-sprite.png diff --git a/Thorfile b/Thorfile index 3ed322a9..e185b433 100644 --- a/Thorfile +++ b/Thorfile @@ -5,7 +5,7 @@ class Build < Thor FILES = [ "license.js", "src/GlobalObject.js", "src/Node.js", "src/Container.js", "src/Stage.js", "src/Layer.js", "src/Group.js", "src/Shape.js", "src/shapes/Rect.js", "src/shapes/Circle.js", "src/shapes/Image.js", - "src/shapes/Polygon.js", "src/shapes/RegularPolygon.js", "src/shapes/Star.js", "src/shapes/Text.js", + "src/shapes/Sprite.js", "src/shapes/Polygon.js", "src/shapes/RegularPolygon.js", "src/shapes/Star.js", "src/shapes/Text.js", "src/shapes/Line.js", "src/util/Transform.js", "src/util/Transition.js" ] diff --git a/dist/kinetic-core.js b/dist/kinetic-core.js index 0cdeaa60..4317dc14 100644 --- a/dist/kinetic-core.js +++ b/dist/kinetic-core.js @@ -3,7 +3,7 @@ * http://www.kineticjs.com/ * Copyright 2012, Eric Rowell * Licensed under the MIT or GPL Version 2 licenses. - * Date: Apr 28 2012 + * Date: May 02 2012 * * Copyright (C) 2011 - 2012 by Eric Rowell * @@ -2907,6 +2907,98 @@ Kinetic.Image.prototype = { // extend Shape Kinetic.GlobalObject.extend(Kinetic.Image, Kinetic.Shape); +/////////////////////////////////////////////////////////////////////// +// Sprite +/////////////////////////////////////////////////////////////////////// +/** + * Sprite constructor + * @constructor + * @augments Kinetic.Shape + * @param {Object} config + */ +Kinetic.Sprite = function(config) { + this.setDefaultAttrs({ + index: 0, + frameRate: 17 + }); + + config.drawFunc = function() { + if(this.image !== undefined) { + var context = this.getContext(); + var anim = this.attrs.animation; + var index = this.attrs.index; + var f = this.attrs.animations[anim][index]; + + context.beginPath(); + context.rect(0, 0, f.width, f.height); + context.closePath(); + context.drawImage(this.image, f.x, f.y, f.width, f.height, 0, 0, f.width, f.height); + } + }; + // call super constructor + Kinetic.Shape.apply(this, [config]); +}; +/* + * Sprite methods + */ +Kinetic.Sprite.prototype = { + /** + * start sprite animation + */ + start: function() { + var that = this; + var layer = this.getLayer(); + this.interval = setInterval(function() { + that._updateIndex(); + layer.draw(); + if(that.afterFrameFunc && that.attrs.index === that.afterFrameIndex) { + that.afterFrameFunc(); + } + }, 1000 / this.attrs.frameRate) + }, + /** + * stop sprite animation + */ + stop: function() { + clearInterval(this.interval); + }, + /** + * set after frame event handler + * @param {Integer} index frame index + * @param {Function} func function to be executed after frame has been drawn + */ + afterFrame: function(index, func) { + this.afterFrameIndex = index; + this.afterFrameFunc = func; + }, + /** + * set animation key + * @param {String} anim animation key + */ + setAnimation: function(anim) { + this.attrs.animation = anim; + }, + /** + * set animation frame index + * @param {Integer} index frame index + */ + setIndex: function(index) { + this.attrs.index = index; + }, + _updateIndex: function() { + var i = this.attrs.index; + var a = this.attrs.animation; + if(i < this.attrs.animations[a].length - 1) { + this.attrs.index++; + } + else { + this.attrs.index = 0; + } + } +}; +// extend Shape +Kinetic.GlobalObject.extend(Kinetic.Sprite, Kinetic.Shape); + /////////////////////////////////////////////////////////////////////// // Polygon /////////////////////////////////////////////////////////////////////// diff --git a/dist/kinetic-core.min.js b/dist/kinetic-core.min.js index 9671639d..4f75962f 100644 --- a/dist/kinetic-core.min.js +++ b/dist/kinetic-core.min.js @@ -3,7 +3,7 @@ * http://www.kineticjs.com/ * Copyright 2012, Eric Rowell * Licensed under the MIT or GPL Version 2 licenses. - * Date: Apr 28 2012 + * Date: May 02 2012 * * Copyright (C) 2011 - 2012 by Eric Rowell * @@ -25,5 +25,5 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -var Kinetic={};Kinetic.GlobalObject={stages:[],idCounter:0,tempNodes:[],animations:[],animIdCounter:0,dragTimeInterval:0,maxDragTimeInterval:20,frame:{time:0,timeDiff:0,lastTime:0},drag:{moving:!1,node:undefined,offset:{x:0,y:0},lastDrawTime:0},extend:function(a,b){for(var c in b.prototype)b.prototype.hasOwnProperty(c)&&a.prototype[c]===undefined&&(a.prototype[c]=b.prototype[c])},_pullNodes:function(a){var b=this.tempNodes;for(var c=0;c0){this._updateFrameObject(),this._runFrames();var a=this;requestAnimFrame(function(){a._animationLoop()})}else this.frame.lastTime=0},_handleAnimation:function(){var a=this;this.animations.length>0?a._animationLoop():this.frame.lastTime=0},_isElement:function(a){return!!a&&a.nodeType==1},_isFunction:function(a){return!!(a&&a.constructor&&a.call&&a.apply)},_getPoint:function(a){return a.length===1?a[0]:{x:a[0],y:a[1]}}},window.requestAnimFrame=function(a){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),Kinetic.Node=function(a){this.setDefaultAttrs({visible:!0,listening:!0,name:undefined,alpha:1,x:0,y:0,scale:{x:1,y:1},rotation:0,centerOffset:{x:0,y:0},dragConstraint:"none",dragBounds:{},draggable:!1}),this.eventListeners={},this.setAttrs(a)},Kinetic.Node.prototype={on:function(a,b){var c=a.split(" ");for(var d=0;d1?g[1]:"";this.eventListeners[h]||(this.eventListeners[h]=[]),this.eventListeners[h].push({name:i,handler:b})}},off:function(a){var b=a.split(" ");for(var c=0;c1){var h=f[1];for(var i=0;i0&&f[0].getLevel()<=a&&e(f)}var a=this.getLevel(),b=this.getStage(),c=this,d=0;return c.nodeType!=="Stage"&&e(c.getStage().getChildren()),d},getLevel:function(){var a=0,b=this.parent;while(b)a++,b=b.parent;return a},setScale:function(a,b){b?(this.attrs.scale.x=a,this.attrs.scale.y=b):(this.attrs.scale.x=a,this.attrs.scale.y=a)},getScale:function(){return this.attrs.scale},setPosition:function(){var a=Kinetic.GlobalObject._getPoint(arguments);this.attrs.x=a.x,this.attrs.y=a.y},setX:function(a){this.attrs.x=a},setY:function(a){this.attrs.y=a},getX:function(){return this.attrs.x},getY:function(){return this.attrs.y},setDetectionType:function(a){this.attrs.detectionType=a},getDetectionType:function(){return this.attrs.detectionType},getPosition:function(){return{x:this.attrs.x,y:this.attrs.y}},getAbsolutePosition:function(){return this.getAbsoluteTransform().getTranslation()},setAbsolutePosition:function(){var a=Kinetic.GlobalObject._getPoint(arguments),b=this.attrs.rotation,c={x:this.attrs.scale.x,y:this.attrs.scale.y},d={x:this.attrs.centerOffset.x,y:this.attrs.centerOffset.y};this.attrs.rotation=0,this.attrs.scale={x:1,y:1};var e=this.getAbsoluteTransform();e.invert(),e.translate(a.x,a.y),a={x:this.attrs.x+e.getTranslation().x,y:this.attrs.y+e.getTranslation().y},this.setPosition(a.x,a.y),this.rotate(b),this.attrs.scale={x:c.x,y:c.y}},move:function(a,b){this.attrs.x+=a,this.attrs.y+=b},setRotation:function(a){this.attrs.rotation=a},setRotationDeg:function(a){this.attrs.rotation=a*Math.PI/180},getRotation:function(){return this.attrs.rotation},getRotationDeg:function(){return this.attrs.rotation*180/Math.PI},rotate:function(a){this.attrs.rotation+=a},rotateDeg:function(a){this.attrs.rotation+=a*Math.PI/180},listen:function(a){this.attrs.listening=a},moveToTop:function(){var a=this.index;this.parent.children.splice(a,1),this.parent.children.push(this),this.parent._setChildrenIndices()},moveUp:function(){var a=this.index;this.parent.children.splice(a,1),this.parent.children.splice(a+1,0,this),this.parent._setChildrenIndices()},moveDown:function(){var a=this.index;a>0&&(this.parent.children.splice(a,1),this.parent.children.splice(a-1,0,this),this.parent._setChildrenIndices())},moveToBottom:function(){var a=this.index;this.parent.children.splice(a,1),this.parent.children.unshift(this),this.parent._setChildrenIndices()},setZIndex:function(a){var b=this.index;this.parent.children.splice(b,1),this.parent.children.splice(a,0,this),this.parent._setChildrenIndices()},setAlpha:function(a){this.attrs.alpha=a},getAlpha:function(){return this.attrs.alpha},getAbsoluteAlpha:function(){var a=1,b=this;while(b.nodeType!=="Stage")a*=b.attrs.alpha,b=b.parent;return a},draggable:function(a){this.attrs.draggable!==a&&(a?this._initDrag():this._dragCleanup(),this.attrs.draggable=a)},isDragging:function(){var a=Kinetic.GlobalObject;return a.drag.node!==undefined&&a.drag.node._id===this._id&&a.drag.moving},moveTo:function(a){var b=this.parent;b.children.splice(this.index,1),b._setChildrenIndices(),a.children.push(this),this.index=a.children.length-1,this.parent=a,a._setChildrenIndices()},getParent:function(){return this.parent},getLayer:function(){return this.nodeType==="Layer"?this:this.getParent().getLayer()},getStage:function(){return this.nodeType==="Stage"?this:this.getParent()===undefined?undefined:this.getParent().getStage()},getName:function(){return this.attrs.name},setCenterOffset:function(a,b){this.attrs.centerOffset.x=a,this.attrs.centerOffset.y=b},getCenterOffset:function(){return this.attrs.centerOffset},transitionTo:function(a){var b=Kinetic.GlobalObject;this.transAnim!==undefined&&(b._removeAnimation(this.transAnim),this.transAnim=undefined);var c=this.nodeType==="Stage"?this:this.getLayer(),d=this,e=new Kinetic.Transition(this,a),f={func:function(){e.onEnterFrame()},node:c};return this.transAnim=f,b._addAnimation(f),e.onFinished=function(){b._removeAnimation(f),d.transAnim=undefined,a.callback!==undefined&&a.callback(),f.node.draw()},e.start(),b._handleAnimation(),e},setDragConstraint:function(a){this.attrs.dragConstraint=a},getDragConstraint:function(){return this.attrs.dragConstraint},setDragBounds:function(a){this.attrs.dragBounds=a},getDragBounds:function(){return this.attrs.dragBounds},getAbsoluteTransform:function(){var a=new Kinetic.Transform,b=[],c=this.parent;b.unshift(this);while(c)b.unshift(c),c=c.parent;for(var d=0;d0)this.remove(this.children[0])},_remove:function(a){if(a.index!==undefined&&this.children[a.index]._id==a._id){var b=this.getStage();b!==undefined&&(b._removeId(a),b._removeName(a));var c=Kinetic.GlobalObject;for(var d=0;d=0;d--){var e=c[d];if(e.attrs.listening)if(e.nodeType==="Shape"){var f=this._detectEvent(e,b);if(f)return!0}else{var f=this._traverseChildren(e,b);if(f)return!0}}return!1},_handleStageEvent:function(a){var b=Kinetic.GlobalObject;a||(a=window.event),this._setMousePosition(a),this._setTouchPosition(a),this.pathLayer.clear(),this.targetFound=!1;var c=!1;for(var d=this.children.length-1;d>=0;d--){var e=this.children[d];e.attrs.visible&&d>=0&&e.attrs.listening&&this._traverseChildren(e,a)&&(d=-1,c=!0)}!c&&this.mouseoutShape&&(this.mouseoutShape._handleEvents("onmouseout",a),this.mouseoutShape=undefined)},_listen:function(){var a=this;this.content.addEventListener("mousedown",function(b){a.mouseDown=!0,a._handleStageEvent(b)},!1),this.content.addEventListener("mousemove",function(b){a.mouseUp=!1,a.mouseDown=!1,a._handleStageEvent(b)},!1),this.content.addEventListener("mouseup",function(b){a.mouseUp=!0,a.mouseDown=!1,a._handleStageEvent(b),a.clickStart=!1},!1),this.content.addEventListener("mouseover",function(b){a._handleStageEvent(b)},!1),this.content.addEventListener("mouseout",function(b){var c=a.targetShape;c&&(c._handleEvents("onmouseout",b),a.targetShape=undefined),a.mousePos=undefined},!1),this.content.addEventListener("touchstart",function(b){b.preventDefault(),a.touchStart=!0,a._handleStageEvent(b)},!1),this.content.addEventListener("touchmove",function(b){b.preventDefault(),a._handleStageEvent(b)},!1),this.content.addEventListener("touchend",function(b){b.preventDefault(),a.touchEnd=!0,a._handleStageEvent(b)},!1)},_setMousePosition:function(a){var b=a.offsetX||a.clientX-this._getContentPosition().left+window.pageXOffset,c=a.offsetY||a.clientY-this._getContentPosition().top+window.pageYOffset;this.mousePos={x:b,y:c}},_setTouchPosition:function(a){if(a.touches!==undefined&&a.touches.length===1){var b=a.touches[0],c=b.clientX-this._getContentPosition().left+window.pageXOffset,d=b.clientY-this._getContentPosition().top+window.pageYOffset;this.touchPos={x:c,y:d}}},_getContentPosition:function(){var a=this.content,b=0,c=0;while(a&&a.tagName!=="BODY")b+=a.offsetTop-a.scrollTop,c+=a.offsetLeft-a.scrollLeft,a=a.offsetParent;return{top:b,left:c}},_modifyPathContext:function(a){a.stroke=function(){},a.fill=function(){},a.fillRect=function(b,c,d,e){a.rect(b,c,d,e)},a.strokeRect=function(b,c,d,e){a.rect(b,c,d,e)},a.drawImage=function(){},a.fillText=function(){},a.strokeText=function(){}},_endDrag:function(a){var b=Kinetic.GlobalObject;b.drag.node&&b.drag.moving&&(b.drag.moving=!1,b.drag.node._handleEvents("ondragend",a)),b.drag.node=undefined},_prepareDrag:function(){var a=this;this._onContent("mousemove touchmove",function(b){var c=Kinetic.GlobalObject,d=c.drag.node;if(d){var e=new Date,f=e.getTime();if(f-c.drag.lastDrawTime>c.dragTimeInterval){c.drag.lastDrawTime=f;var g=a.getUserPosition(),h=d.attrs.dragConstraint,i=d.attrs.dragBounds,j={x:d.attrs.x,y:d.attrs.y},k={x:g.x-c.drag.offset.x,y:g.y-c.drag.offset.y};i.left!==undefined&&k.xi.right&&(k.x=i.right),i.top!==undefined&&k.yi.bottom&&(k.y=i.bottom),d.setAbsolutePosition(k),h==="horizontal"?d.attrs.y=j.y:h==="vertical"&&(d.attrs.x=j.x),c.drag.node.getLayer().draw(),c.drag.moving||(c.drag.moving=!0,c.drag.node._handleEvents("ondragstart",b)),c.drag.node._handleEvents("ondragmove",b)}}},!1),this._onContent("mouseup touchend mouseout",function(b){a._endDrag(b)})},_buildDOM:function(){this.content.style.position="relative",this.content.style.display="inline-block",this.content.className="kineticjs-content",this.container.appendChild(this.content),this.bufferLayer=new Kinetic.Layer({name:"bufferLayer"}),this.pathLayer=new Kinetic.Layer({name:"pathLayer"}),this.bufferLayer.parent=this,this.pathLayer.parent=this,this._modifyPathContext(this.pathLayer.context),this.bufferLayer.getCanvas().style.display="none",this.pathLayer.getCanvas().style.display="none",this.bufferLayer.canvas.className="kineticjs-buffer-layer",this.content.appendChild(this.bufferLayer.canvas),this.pathLayer.canvas.className="kineticjs-path-layer",this.content.appendChild(this.pathLayer.canvas),this.setSize(this.attrs.width,this.attrs.height)},_addId:function(a){a.attrs.id!==undefined&&(this.ids[a.attrs.id]=a)},_removeId:function(a){a.attrs.id!==undefined&&(this.ids[a.attrs.id]=undefined)},_addName:function(a){var b=a.attrs.name;b!==undefined&&(this.names[b]===undefined&&(this.names[b]=[]),this.names[b].push(a))},_removeName:function(a){if(a.attrs.name!==undefined){var b=this.names[a.attrs.name];if(b!==undefined)for(var c=0;c=a)this._draw(),this.lastDrawTime=c,this.drawTimeout!==undefined&&(clearTimeout(this.drawTimeout),this.drawTimeout=undefined);else if(this.drawTimeout===undefined){var e=this;this.drawTimeout=setTimeout(function(){e.draw()},a+10)}},setThrottle:function(a){this.attrs.throttle=a},getThrottle:function(){return this.attrs.throttle},beforeDraw:function(a){this.beforeDrawFunc=a},afterDraw:function(a){this.afterDrawFunc=a},clear:function(){var a=this.getContext(),b=this.getCanvas();a.clearRect(0,0,b.width,b.height)},getCanvas:function(){return this.canvas},getContext:function(){return this.context},add:function(a){this._add(a)},remove:function(a){this._remove(a)},_draw:function(){this.beforeDrawFunc!==undefined&&this.beforeDrawFunc(),this.clear(),this.attrs.visible&&this._drawChildren(),this.afterDrawFunc!==undefined&&this.afterDrawFunc()}},Kinetic.GlobalObject.extend(Kinetic.Layer,Kinetic.Container),Kinetic.GlobalObject.extend(Kinetic.Layer,Kinetic.Node),Kinetic.Group=function(a){this.nodeType="Group",Kinetic.Container.apply(this,[]),Kinetic.Node.apply(this,[a])},Kinetic.Group.prototype={add:function(a){this._add(a)},remove:function(a){this._remove(a)},_draw:function(){this.attrs.visible&&this._drawChildren()}},Kinetic.GlobalObject.extend(Kinetic.Group,Kinetic.Container),Kinetic.GlobalObject.extend(Kinetic.Group,Kinetic.Node),Kinetic.Shape=function(a){this.setDefaultAttrs({fill:undefined,stroke:undefined,strokeWidth:undefined,lineJoin:undefined,detectionType:"path"}),this.data=[],this.nodeType="Shape",Kinetic.Node.apply(this,[a])},Kinetic.Shape.prototype={getContext:function(){return this.tempLayer.getContext()},getCanvas:function(){return this.tempLayer.getCanvas()},stroke:function(){var a=this.getContext();if(!!this.attrs.stroke||!!this.attrs.strokeWidth){var b=this.attrs.stroke?this.attrs.stroke:"black",c=this.attrs.strokeWidth?this.attrs.strokeWidth:2;a.lineWidth=c,a.strokeStyle=b,a.stroke()}},fillStroke:function(){var a=this.getContext();!this.attrs.fill||(a.fillStyle=this.attrs.fill,a.fill()),this.stroke()},applyLineJoin:function(){var a=this.getContext();this.attrs.lineJoin!==undefined&&(a.lineJoin=this.attrs.lineJoin)},setFill:function(a){this.attrs.fill=a},getFill:function(){return this.attrs.fill},setStroke:function(a){this.attrs.stroke=a},getStroke:function(){return this.attrs.stroke},setLineJoin:function(a){this.attrs.lineJoin=a},getLineJoin:function(){return this.attrs.lineJoin},setStrokeWidth:function(a){this.attrs.strokeWidth=a},getStrokeWidth:function(){return this.attrs.strokeWidth},setDrawFunc:function(a){this.drawFunc=a},saveData:function(){var a=this.getStage(),b=a.attrs.width,c=a.attrs.height,d=a.bufferLayer,e=d.getContext();d.clear(),this._draw(d);var f=e.getImageData(0,0,b,c);this.data=f.data},clearData:function(){this.data=[]},intersects:function(){var a=Kinetic.GlobalObject._getPoint(arguments),b=this.getStage();if(this.attrs.detectionType==="path"){var c=b.pathLayer,d=c.getContext();return this._draw(c),d.isPointInPath(a.x,a.y)}var e=b.attrs.width,f=this.data[(e*a.y+a.x)*4+3];return f!==undefined&&f!==0},_draw:function(a){if(a!==undefined&&this.drawFunc!==undefined){var b=a.getStage(),c=a.getContext(),d=[],e=this.parent;d.unshift(this);while(e)d.unshift(e),e=e.parent;c.save();for(var f=0;f=e.tweens.length&&e.onFinished()}}},Kinetic.Transition.prototype={add:function(a){this.tweens.push(a)},start:function(){for(var a=0;athis.getDuration()?this.looping?(this.rewind(a-this._duration),this.update(),this.broadcastMessage("onLooped",{target:this,type:"onLooped"})):(this._time=this._duration,this.update(),this.stop(),this.broadcastMessage("onFinished",{target:this,type:"onFinished"})):a<0?(this.rewind(),this.update()):(this._time=a,this.update())},getTime:function(){return this._time},setDuration:function(a){this._duration=a===null||a<=0?1e5:a},getDuration:function(){return this._duration},setPosition:function(a){this.prevPos=this._pos,this.propFunc(a),this._pos=a,this.broadcastMessage("onChanged",{target:this,type:"onChanged"})},getPosition:function(a){return a===undefined&&(a=this._time),this.func(a,this.begin,this._change,this._duration)},setFinish:function(a){this._change=a-this.begin},getFinish:function(){return this.begin+this._change},start:function(){this.rewind(),this.startEnterFrame(),this.broadcastMessage("onStarted",{target:this,type:"onStarted"})},rewind:function(a){this.stop(),this._time=a===undefined?0:a,this.fixTime(),this.update()},fforward:function(){this._time=this._duration,this.fixTime(),this.update()},update:function(){this.setPosition(this.getPosition(this._time))},startEnterFrame:function(){this.stopEnterFrame(),this.isPlaying=!0,this.onEnterFrame()},onEnterFrame:function(){this.isPlaying&&this.nextFrame()},nextFrame:function(){this.setTime((this.getTimer()-this._startTime)/1e3)},stop:function(){this.stopEnterFrame(),this.broadcastMessage("onStopped",{target:this,type:"onStopped"})},stopEnterFrame:function(){this.isPlaying=!1},continueTo:function(a,b){this.begin=this._pos,this.setFinish(a),this._duration!=undefined&&this.setDuration(b),this.start()},resume:function(){this.fixTime(),this.startEnterFrame(),this.broadcastMessage("onResumed",{target:this,type:"onResumed"})},yoyo:function(){this.continueTo(this.begin,this._time)},addListener:function(a){return this.removeListener(a),this._listeners.push(a)},removeListener:function(a){var b=this._listeners,c=b.length;while(c--)if(b[c]==a)return b.splice(c,1),!0;return!1},broadcastMessage:function(){var a=[];for(var b=0;b0){this._updateFrameObject(),this._runFrames();var a=this;requestAnimFrame(function(){a._animationLoop()})}else this.frame.lastTime=0},_handleAnimation:function(){var a=this;this.animations.length>0?a._animationLoop():this.frame.lastTime=0},_isElement:function(a){return!!a&&a.nodeType==1},_isFunction:function(a){return!!(a&&a.constructor&&a.call&&a.apply)},_getPoint:function(a){return a.length===1?a[0]:{x:a[0],y:a[1]}}},window.requestAnimFrame=function(a){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),Kinetic.Node=function(a){this.setDefaultAttrs({visible:!0,listening:!0,name:undefined,alpha:1,x:0,y:0,scale:{x:1,y:1},rotation:0,centerOffset:{x:0,y:0},dragConstraint:"none",dragBounds:{},draggable:!1}),this.eventListeners={},this.setAttrs(a)},Kinetic.Node.prototype={on:function(a,b){var c=a.split(" ");for(var d=0;d1?g[1]:"";this.eventListeners[h]||(this.eventListeners[h]=[]),this.eventListeners[h].push({name:i,handler:b})}},off:function(a){var b=a.split(" ");for(var c=0;c1){var h=f[1];for(var i=0;i0&&f[0].getLevel()<=a&&e(f)}var a=this.getLevel(),b=this.getStage(),c=this,d=0;return c.nodeType!=="Stage"&&e(c.getStage().getChildren()),d},getLevel:function(){var a=0,b=this.parent;while(b)a++,b=b.parent;return a},setScale:function(a,b){b?(this.attrs.scale.x=a,this.attrs.scale.y=b):(this.attrs.scale.x=a,this.attrs.scale.y=a)},getScale:function(){return this.attrs.scale},setPosition:function(){var a=Kinetic.GlobalObject._getPoint(arguments);this.attrs.x=a.x,this.attrs.y=a.y},setX:function(a){this.attrs.x=a},setY:function(a){this.attrs.y=a},getX:function(){return this.attrs.x},getY:function(){return this.attrs.y},setDetectionType:function(a){this.attrs.detectionType=a},getDetectionType:function(){return this.attrs.detectionType},getPosition:function(){return{x:this.attrs.x,y:this.attrs.y}},getAbsolutePosition:function(){return this.getAbsoluteTransform().getTranslation()},setAbsolutePosition:function(){var a=Kinetic.GlobalObject._getPoint(arguments),b=this.attrs.rotation,c={x:this.attrs.scale.x,y:this.attrs.scale.y},d={x:this.attrs.centerOffset.x,y:this.attrs.centerOffset.y};this.attrs.rotation=0,this.attrs.scale={x:1,y:1};var e=this.getAbsoluteTransform();e.invert(),e.translate(a.x,a.y),a={x:this.attrs.x+e.getTranslation().x,y:this.attrs.y+e.getTranslation().y},this.setPosition(a.x,a.y),this.rotate(b),this.attrs.scale={x:c.x,y:c.y}},move:function(a,b){this.attrs.x+=a,this.attrs.y+=b},setRotation:function(a){this.attrs.rotation=a},setRotationDeg:function(a){this.attrs.rotation=a*Math.PI/180},getRotation:function(){return this.attrs.rotation},getRotationDeg:function(){return this.attrs.rotation*180/Math.PI},rotate:function(a){this.attrs.rotation+=a},rotateDeg:function(a){this.attrs.rotation+=a*Math.PI/180},listen:function(a){this.attrs.listening=a},moveToTop:function(){var a=this.index;this.parent.children.splice(a,1),this.parent.children.push(this),this.parent._setChildrenIndices()},moveUp:function(){var a=this.index;this.parent.children.splice(a,1),this.parent.children.splice(a+1,0,this),this.parent._setChildrenIndices()},moveDown:function(){var a=this.index;a>0&&(this.parent.children.splice(a,1),this.parent.children.splice(a-1,0,this),this.parent._setChildrenIndices())},moveToBottom:function(){var a=this.index;this.parent.children.splice(a,1),this.parent.children.unshift(this),this.parent._setChildrenIndices()},setZIndex:function(a){var b=this.index;this.parent.children.splice(b,1),this.parent.children.splice(a,0,this),this.parent._setChildrenIndices()},setAlpha:function(a){this.attrs.alpha=a},getAlpha:function(){return this.attrs.alpha},getAbsoluteAlpha:function(){var a=1,b=this;while(b.nodeType!=="Stage")a*=b.attrs.alpha,b=b.parent;return a},draggable:function(a){this.attrs.draggable!==a&&(a?this._initDrag():this._dragCleanup(),this.attrs.draggable=a)},isDragging:function(){var a=Kinetic.GlobalObject;return a.drag.node!==undefined&&a.drag.node._id===this._id&&a.drag.moving},moveTo:function(a){var b=this.parent;b.children.splice(this.index,1),b._setChildrenIndices(),a.children.push(this),this.index=a.children.length-1,this.parent=a,a._setChildrenIndices()},getParent:function(){return this.parent},getLayer:function(){return this.nodeType==="Layer"?this:this.getParent().getLayer()},getStage:function(){return this.nodeType==="Stage"?this:this.getParent()===undefined?undefined:this.getParent().getStage()},getName:function(){return this.attrs.name},setCenterOffset:function(a,b){this.attrs.centerOffset.x=a,this.attrs.centerOffset.y=b},getCenterOffset:function(){return this.attrs.centerOffset},transitionTo:function(a){var b=Kinetic.GlobalObject;this.transAnim!==undefined&&(b._removeAnimation(this.transAnim),this.transAnim=undefined);var c=this.nodeType==="Stage"?this:this.getLayer(),d=this,e=new Kinetic.Transition(this,a),f={func:function(){e.onEnterFrame()},node:c};return this.transAnim=f,b._addAnimation(f),e.onFinished=function(){b._removeAnimation(f),d.transAnim=undefined,a.callback!==undefined&&a.callback(),f.node.draw()},e.start(),b._handleAnimation(),e},setDragConstraint:function(a){this.attrs.dragConstraint=a},getDragConstraint:function(){return this.attrs.dragConstraint},setDragBounds:function(a){this.attrs.dragBounds=a},getDragBounds:function(){return this.attrs.dragBounds},getAbsoluteTransform:function(){var a=new Kinetic.Transform,b=[],c=this.parent;b.unshift(this);while(c)b.unshift(c),c=c.parent;for(var d=0;d0)this.remove(this.children[0])},_remove:function(a){if(a.index!==undefined&&this.children[a.index]._id==a._id){var b=this.getStage();b!==undefined&&(b._removeId(a),b._removeName(a));var c=Kinetic.GlobalObject;for(var d=0;d=0;d--){var e=c[d];if(e.attrs.listening)if(e.nodeType==="Shape"){var f=this._detectEvent(e,b);if(f)return!0}else{var f=this._traverseChildren(e,b);if(f)return!0}}return!1},_handleStageEvent:function(a){var b=Kinetic.GlobalObject;a||(a=window.event),this._setMousePosition(a),this._setTouchPosition(a),this.pathLayer.clear(),this.targetFound=!1;var c=!1;for(var d=this.children.length-1;d>=0;d--){var e=this.children[d];e.attrs.visible&&d>=0&&e.attrs.listening&&this._traverseChildren(e,a)&&(d=-1,c=!0)}!c&&this.mouseoutShape&&(this.mouseoutShape._handleEvents("onmouseout",a),this.mouseoutShape=undefined)},_listen:function(){var a=this;this.content.addEventListener("mousedown",function(b){a.mouseDown=!0,a._handleStageEvent(b)},!1),this.content.addEventListener("mousemove",function(b){a.mouseUp=!1,a.mouseDown=!1,a._handleStageEvent(b)},!1),this.content.addEventListener("mouseup",function(b){a.mouseUp=!0,a.mouseDown=!1,a._handleStageEvent(b),a.clickStart=!1},!1),this.content.addEventListener("mouseover",function(b){a._handleStageEvent(b)},!1),this.content.addEventListener("mouseout",function(b){var c=a.targetShape;c&&(c._handleEvents("onmouseout",b),a.targetShape=undefined),a.mousePos=undefined},!1),this.content.addEventListener("touchstart",function(b){b.preventDefault(),a.touchStart=!0,a._handleStageEvent(b)},!1),this.content.addEventListener("touchmove",function(b){b.preventDefault(),a._handleStageEvent(b)},!1),this.content.addEventListener("touchend",function(b){b.preventDefault(),a.touchEnd=!0,a._handleStageEvent(b)},!1)},_setMousePosition:function(a){var b=a.offsetX||a.clientX-this._getContentPosition().left+window.pageXOffset,c=a.offsetY||a.clientY-this._getContentPosition().top+window.pageYOffset;this.mousePos={x:b,y:c}},_setTouchPosition:function(a){if(a.touches!==undefined&&a.touches.length===1){var b=a.touches[0],c=b.clientX-this._getContentPosition().left+window.pageXOffset,d=b.clientY-this._getContentPosition().top+window.pageYOffset;this.touchPos={x:c,y:d}}},_getContentPosition:function(){var a=this.content,b=0,c=0;while(a&&a.tagName!=="BODY")b+=a.offsetTop-a.scrollTop,c+=a.offsetLeft-a.scrollLeft,a=a.offsetParent;return{top:b,left:c}},_modifyPathContext:function(a){a.stroke=function(){},a.fill=function(){},a.fillRect=function(b,c,d,e){a.rect(b,c,d,e)},a.strokeRect=function(b,c,d,e){a.rect(b,c,d,e)},a.drawImage=function(){},a.fillText=function(){},a.strokeText=function(){}},_endDrag:function(a){var b=Kinetic.GlobalObject;b.drag.node&&b.drag.moving&&(b.drag.moving=!1,b.drag.node._handleEvents("ondragend",a)),b.drag.node=undefined},_prepareDrag:function(){var a=this;this._onContent("mousemove touchmove",function(b){var c=Kinetic.GlobalObject,d=c.drag.node;if(d){var e=new Date,f=e.getTime();if(f-c.drag.lastDrawTime>c.dragTimeInterval){c.drag.lastDrawTime=f;var g=a.getUserPosition(),h=d.attrs.dragConstraint,i=d.attrs.dragBounds,j={x:d.attrs.x,y:d.attrs.y},k={x:g.x-c.drag.offset.x,y:g.y-c.drag.offset.y};i.left!==undefined&&k.xi.right&&(k.x=i.right),i.top!==undefined&&k.yi.bottom&&(k.y=i.bottom),d.setAbsolutePosition(k),h==="horizontal"?d.attrs.y=j.y:h==="vertical"&&(d.attrs.x=j.x),c.drag.node.getLayer().draw(),c.drag.moving||(c.drag.moving=!0,c.drag.node._handleEvents("ondragstart",b)),c.drag.node._handleEvents("ondragmove",b)}}},!1),this._onContent("mouseup touchend mouseout",function(b){a._endDrag(b)})},_buildDOM:function(){this.content.style.position="relative",this.content.style.display="inline-block",this.content.className="kineticjs-content",this.container.appendChild(this.content),this.bufferLayer=new Kinetic.Layer({name:"bufferLayer"}),this.pathLayer=new Kinetic.Layer({name:"pathLayer"}),this.bufferLayer.parent=this,this.pathLayer.parent=this,this._modifyPathContext(this.pathLayer.context),this.bufferLayer.getCanvas().style.display="none",this.pathLayer.getCanvas().style.display="none",this.bufferLayer.canvas.className="kineticjs-buffer-layer",this.content.appendChild(this.bufferLayer.canvas),this.pathLayer.canvas.className="kineticjs-path-layer",this.content.appendChild(this.pathLayer.canvas),this.setSize(this.attrs.width,this.attrs.height)},_addId:function(a){a.attrs.id!==undefined&&(this.ids[a.attrs.id]=a)},_removeId:function(a){a.attrs.id!==undefined&&(this.ids[a.attrs.id]=undefined)},_addName:function(a){var b=a.attrs.name;b!==undefined&&(this.names[b]===undefined&&(this.names[b]=[]),this.names[b].push(a))},_removeName:function(a){if(a.attrs.name!==undefined){var b=this.names[a.attrs.name];if(b!==undefined)for(var c=0;c=a)this._draw(),this.lastDrawTime=c,this.drawTimeout!==undefined&&(clearTimeout(this.drawTimeout),this.drawTimeout=undefined);else if(this.drawTimeout===undefined){var e=this;this.drawTimeout=setTimeout(function(){e.draw()},a+10)}},setThrottle:function(a){this.attrs.throttle=a},getThrottle:function(){return this.attrs.throttle},beforeDraw:function(a){this.beforeDrawFunc=a},afterDraw:function(a){this.afterDrawFunc=a},clear:function(){var a=this.getContext(),b=this.getCanvas();a.clearRect(0,0,b.width,b.height)},getCanvas:function(){return this.canvas},getContext:function(){return this.context},add:function(a){this._add(a)},remove:function(a){this._remove(a)},_draw:function(){this.beforeDrawFunc!==undefined&&this.beforeDrawFunc(),this.clear(),this.attrs.visible&&this._drawChildren(),this.afterDrawFunc!==undefined&&this.afterDrawFunc()}},Kinetic.GlobalObject.extend(Kinetic.Layer,Kinetic.Container),Kinetic.GlobalObject.extend(Kinetic.Layer,Kinetic.Node),Kinetic.Group=function(a){this.nodeType="Group",Kinetic.Container.apply(this,[]),Kinetic.Node.apply(this,[a])},Kinetic.Group.prototype={add:function(a){this._add(a)},remove:function(a){this._remove(a)},_draw:function(){this.attrs.visible&&this._drawChildren()}},Kinetic.GlobalObject.extend(Kinetic.Group,Kinetic.Container),Kinetic.GlobalObject.extend(Kinetic.Group,Kinetic.Node),Kinetic.Shape=function(a){this.setDefaultAttrs({fill:undefined,stroke:undefined,strokeWidth:undefined,lineJoin:undefined,detectionType:"path"}),this.data=[],this.nodeType="Shape",Kinetic.Node.apply(this,[a])},Kinetic.Shape.prototype={getContext:function(){return this.tempLayer.getContext()},getCanvas:function(){return this.tempLayer.getCanvas()},stroke:function(){var a=this.getContext();if(!!this.attrs.stroke||!!this.attrs.strokeWidth){var b=this.attrs.stroke?this.attrs.stroke:"black",c=this.attrs.strokeWidth?this.attrs.strokeWidth:2;a.lineWidth=c,a.strokeStyle=b,a.stroke()}},fillStroke:function(){var a=this.getContext();!this.attrs.fill||(a.fillStyle=this.attrs.fill,a.fill()),this.stroke()},applyLineJoin:function(){var a=this.getContext();this.attrs.lineJoin!==undefined&&(a.lineJoin=this.attrs.lineJoin)},setFill:function(a){this.attrs.fill=a},getFill:function(){return this.attrs.fill},setStroke:function(a){this.attrs.stroke=a},getStroke:function(){return this.attrs.stroke},setLineJoin:function(a){this.attrs.lineJoin=a},getLineJoin:function(){return this.attrs.lineJoin},setStrokeWidth:function(a){this.attrs.strokeWidth=a},getStrokeWidth:function(){return this.attrs.strokeWidth},setDrawFunc:function(a){this.drawFunc=a},saveData:function(){var a=this.getStage(),b=a.attrs.width,c=a.attrs.height,d=a.bufferLayer,e=d.getContext();d.clear(),this._draw(d);var f=e.getImageData(0,0,b,c);this.data=f.data},clearData:function(){this.data=[]},intersects:function(){var a=Kinetic.GlobalObject._getPoint(arguments),b=this.getStage();if(this.attrs.detectionType==="path"){var c=b.pathLayer,d=c.getContext();return this._draw(c),d.isPointInPath(a.x,a.y)}var e=b.attrs.width,f=this.data[(e*a.y+a.x)*4+3];return f!==undefined&&f!==0},_draw:function(a){if(a!==undefined&&this.drawFunc!==undefined){var b=a.getStage(),c=a.getContext(),d=[],e=this.parent;d.unshift(this);while(e)d.unshift(e),e=e.parent;c.save();for(var f=0;f=e.tweens.length&&e.onFinished()}}},Kinetic.Transition.prototype={add:function(a){this.tweens.push(a)},start:function(){for(var a=0;athis.getDuration()?this.looping?(this.rewind(a-this._duration),this.update(),this.broadcastMessage("onLooped",{target:this,type:"onLooped"})):(this._time=this._duration,this.update(),this.stop(),this.broadcastMessage("onFinished",{target:this,type:"onFinished"})):a<0?(this.rewind(),this.update()):(this._time=a,this.update())},getTime:function(){return this._time},setDuration:function(a){this._duration=a===null||a<=0?1e5:a},getDuration:function(){return this._duration},setPosition:function(a){this.prevPos=this._pos,this.propFunc(a),this._pos=a,this.broadcastMessage("onChanged",{target:this,type:"onChanged"})},getPosition:function(a){return a===undefined&&(a=this._time),this.func(a,this.begin,this._change,this._duration)},setFinish:function(a){this._change=a-this.begin},getFinish:function(){return this.begin+this._change},start:function(){this.rewind(),this.startEnterFrame(),this.broadcastMessage("onStarted",{target:this,type:"onStarted"})},rewind:function(a){this.stop(),this._time=a===undefined?0:a,this.fixTime(),this.update()},fforward:function(){this._time=this._duration,this.fixTime(),this.update()},update:function(){this.setPosition(this.getPosition(this._time))},startEnterFrame:function(){this.stopEnterFrame(),this.isPlaying=!0,this.onEnterFrame()},onEnterFrame:function(){this.isPlaying&&this.nextFrame()},nextFrame:function(){this.setTime((this.getTimer()-this._startTime)/1e3)},stop:function(){this.stopEnterFrame(),this.broadcastMessage("onStopped",{target:this,type:"onStopped"})},stopEnterFrame:function(){this.isPlaying=!1},continueTo:function(a,b){this.begin=this._pos,this.setFinish(a),this._duration!=undefined&&this.setDuration(b),this.start()},resume:function(){this.fixTime(),this.startEnterFrame(),this.broadcastMessage("onResumed",{target:this,type:"onResumed"})},yoyo:function(){this.continueTo(this.begin,this._time)},addListener:function(a){return this.removeListener(a),this._listeners.push(a)},removeListener:function(a){var b=this._listeners,c=b.length;while(c--)if(b[c]==a)return b.splice(c,1),!0;return!1},broadcastMessage:function(){var a=[];for(var b=0;b^TfG?e*$a zb>F&mJ4#tm1_hA-5dZ)bIax_n0DzDM|DJ+}1^>@jlsyE0AvnwGxB&nX*1rz~ke!PM z0EkL95)#VF)=utDZq`oDq;e7xq|UBRmNxbl0N}lvr)H(Dc8nwRuz4#k9|=m8cT)WT zPpT>&1Hw+CrYA!{{}f49wDLiv7eh)4nsB%<5-L6(6#GGi5jh%h8E%j4YkWv?Wc29E zwqLQ`V#mY5#NVbR;lrw%yv8ZG9(d$*Sq>F05ORh1M~vSgzXpc3_n1Y45GkDjbofSd zGPgGh2;ebLP>_MV2d)c%@Sa102YNo|^so{|yrZ3nXX!(LLLqwGlX&IfLD+z(Z@hRZ zASw+3%FCoy0}7!5<1sVST|k)$FsAu(Fb9D09<%%)0KHVQ4-kb(04bJ5q$FT108~wB zMoR(OtN^y9`~V-Y%mlE?X<5nwbuB>8Bsx+90FMl?szip-0nmPc@h}C2HxQZyU`twj$eFfk(_`THD}{F0c;4a}hKWJx$S>{EFIeS#B!&975nfo+;q6#^qJ)6Mi z_tJI*AwY`_!(*9{twutaMr%{V!{cU!J(BgxLSx2Il8!`TtB}hlamli&Myr!*$P!-* zxkBf@+VtGn=aSg2oJz z>OtU!_7W#G`6wo><7oiTl$|X?Tb7Yx z5iG-FVt|JdGfIM;rZo{#uD(Ql7IRj5)=`z>n6V;SAwp1 zby2fwtx7~W7ND>c67DW9qls##SClt+BGDtA&B zDGAhhi-OhZSLj!gC{Zb_H`?tOB1JO8Z}es)vqPy2_Xy$|pst@-@%N-}&wL|pj}iJ_ zQN$;~@rgsLQS~O(QUq={)8#SOT@m4swk+c&FnSaFl5U5Nu#{7wmCZum?t6Mhx^|^( zrAnpDX(xBhd0Ad*r&PPnOAxBquTM1kG%{8RlQ4OQYAb3RWr$@spN07EYM8&#*H`g9&X69urmslPcqm)*%AYr{4oQ^KwxPvQvgU!{ zx>5lJ0fk=^;}c&e7PGi=gxHqY4|5K4mU6aQjCH+r8Jo+Se_F^j?CF;3Tr_t$hUxO@ zeACv@HE5Ks&a0+cY_D!F!zgQ2Oi`@NU$pA4yJ{Y3u4uup+h2xVt7&#<4luDY#kFb~ ztm(f<=}ZY|3y6CYfK1Yn851QRJjR?M%$!3wv@zVd_sRXv#bDca_AW1{F{kgme699^ z`@-fTV!dFTvw$vNhr?~Ue^}zT%KnT9Qb8K4-Bwkgl7v!_Rns8_iy2FjR`pU{%Qvs@ z4t40JUuPLEn`akPWeV*TM}O=-p${A-)Dd_5EXpK!_3K~NgLEK<-nuG zX*iPulbHTMWSX#uFs*Qrc;`rMf*H09F0Yw&3AZiDXUTNQ%^WK>CB9mwPh9lE->3lRV04%eo5f3y)OBf>=;0cyEVL}UC!$9A(kt^BCeFtjN7oX0 zaxV+s&oTQjx09Q{h0AL(5o;fGR@w432)g*JA?|*FVF=fRtrGkh-AwPWpj3ITl~EJe zN$vaDF37NVG`P13!tNAF193kr;B z`-Blrqup8SsXrp1)R{dF>`(k#Z$z1uj8KcY++5Wr!uI& zNV@*!U3xL0aHD9%9P&oeS22wJ?2oLLts+>`ltJK!`eQU)=#bMT7Dyk6ZaFrzbSJ{zuI%#vuj%Q z?OHE4fDH?o`kQo@fF=Qxkd-hNjuL*F&nwKw zw)){&TpX6b$A#0S$(hWVqKxZ|lx_$AZ*M0(r}(vNLw!RZ zyGFb@*bHwqU(S2I*1d=?i?`5}_WVh|(7szg)!(U2m%XImr=+|?LuKB)nsG3#f$=7( znXKw(0Pv*(08j`3JiUXzj{(4g6#!0*0f0Xf0C1g>jRvIwK!00KQcT@@^{n%Yz5Y@F z%VT|h{pEM~Xp@HOL+g!&&hZeoC0RpWv9%TsrT9UU&LU~;5(2XsWn0GSR6vJLC_CCq{f8xv#=gqx=hg&dBj&ghR} zJTSWFBoFyx99|c%}X|rhJXsfrcE|A{wD%i0H#MeRM}7L zH35hQJ6IDQ$Urm&U(iky@?iK*c8$;gUb`rK#Ur2D+0M|=5Wa}eO};0xcpQn5aqRi! z?44Kd`MV?OT$r(I(c0Zg)XfixrCAsx}iKGNkUHdIo9o-vHJyZly zacX&Vv~i+wI({T`)`ds1-@Vcx|w9 z@xpbdcqK!n_3^@#6cDnm*ucjl{EBY(lOQ>((8J)2#xWGWVh{a6Ukur}0SI)w%G0h{ z36zTWM+NOCY#;i&jJQ`rod#1sa58b@a5YpXct^tybVp z7f#91n@`$ugKxee#ws@JWoXI+*>yBx6GY}IdG0HEdn(upK>?tPv*JaW1cXfjc%BXH zZJ)NPA!sk_OpoWjE4f2}x*$HBGGGsq>mj`>65ZX7?7IP9Wy#^l;WmqW&aF9Fey!mG-T~v8 z=Pp8IL5s+s)=+b_-JUd2ci9c;Vl3f5 zztxf6OgRAw^o4lqw!7`P0J6{x?*X<_PZWl3dgtoXd#o>r0sB{ER~{_4wgjZahG<_8 z2~)lef;~J1(8}4u%+;mTYQP4ug+FxRlFVM@@{StuXfBDE55AT`kls(UcW;gK$`-7* z7l!Y8vBW_;Kl*RmsMI>b`ZK@1y_J2?d5R)XeNU=Mztk*~XQM>?3mK4sC4xH?$!Xt_ z^OW7p{zB46@$0XKK)%7eJ4$rbd~O*f`^%r_elKf7JAs?*=!b&E+fj6ER{8HZ-6?&K z`miIcUo=t1Wpj+NQVHHTa7&a65M+zYZdUWKL|DOwg-U+WdK*n3v7zCmZwNNGzB#<2 zFp(`1#^Z{lwQ3BGzV_gATk4)#Fk8#LpzF-~fga}^r`}kapm~P6jXL@d~*o8YZ0ls>RLK2mase4Co;O$?Keg_j~M!HoGkD3%- zU8iV96o)3FVS`MoS*}k!dF%_0 zKq}xkZ>W?TEdV!1r))AoH=cRcOd{c-bXDcnV@5qu7}P?dGa~j-jW6TEgQcD@}Fl=4jCC=+`z;F4U5m%MkH z&e~7{bXzpAh(Q_v%BNd%(K7#5BOE1))1y7;JL_nn+Z?~lpk{PNsQmI$IN4FIlG`ce zV89+8Yz12}OfUwT`D^$U<#<kS(@}j~c$j zlo+B^sYQvyHlWWDO9}@ zH1dPA$&j<^X%*O>4nLovxFeFbW+)@AB3t43Z!J*=SCd^Mw>m`%qQLl z@((HlLANzk;rh6hSTMaI5#!X&b)E-mDxiQv2Ut+}$o>@|*W3L)RWoDs!#40I^J{2Y zmft-09l`;9{x8cR$V{GnYiRqVy(7VP>36>}z!j}v-m1@%eJv|=g3+QXXhbZT10K!x zKG?)}7eZIlK6X2EEo(e zsDCA~VVA&iQcCdcAz6)SJ5cN_cIrZZD$Nl7RC*cUvG%lisf2s1x(JJXwM?C$sXapr zm0(+_szsAQ?mhPRz=rkdll=A4Rsr+oxD{4Yd;$O6wr^zB&wRsB^t!Jq8ZDaR6X_7H z0bw-|yem9~rV8n28=^q-!=gJ%mGv?}I&1CXY8ruw;wQwWWpZ%#e4qzGor@uZa&Eu_ zq6h_{2RF9RmN#dygCzA(AFK2AcQ?kD2nVf1LB4l!JBDzJzp7gs~Ql5Z4DlugxGTX>zn4;A8 z+ZJxZYhSaMpO4OH;nq%^4AruSyJmh_@a^VUKbUID!}=Vae`;O4`!b?d(cSU9w@m?H zR>{t}Ac&T)|K!}rUA7Ws=t<&`2Rs;A}xp)MMh(z>B2NR z3#)JG0cFOTa;Ruv-&30u;STlci7@2^6JlOL(70dq#n*#Fa8wR4c+g$#%NWX|9Sq#lfmlD6L}T9t|3F8t3J4T6hEEeP6~ne0^YKNM8i({T^%asxw{jNa64;C3I((T& zuzUiVD1w z$NmlxSSeI6*sO>XV-G8ezqV7@hmRYrGa!zs&4$F=vpp*dMBJUYaf;{$1-;R;7+ z{b#nuoz7E8^!aQSbw-aDU)omGj^D}jh_8I`I6Y5>@A+h>skoNeP;ZjiYH@Lqnb|6X zqaya{a&>i8s_oMk4*bzhGV1WkFxsZ;L`6~v<@{4ylN#oKu)IWmh3orFXxc7+3i5U= zIYUI5*2JZW0n8|F#wmHDXg5x#tm_ZkW$ByMsSZwMO-@74F&_RKgCmy2X$=cRywqeD{>dLrD1$(%1n>RJ&iv5t{#OB~EHT*F0P(8~K68X-l z0~Txr?78NU$8M~M8R%AHAu1&9XT>tYcA-*m@&_^9u!luKjgl>b;cxsr(2aOG4dmkQ zkd#&uw#)1BU;t*1rjHR1LpYWb2_<$z@HPBi&k!|~@b}Hg{+7U0GB?a)7&5X%5pm{v z#zLg(K_}nXj`3`yq9Use+?I^-><_^7drG7S0Z$>+XqE>@GMXWdt90!p_32ap9St z$8(2j4!7Svuv1iL*)m{@_DBGi)M~(xpDjr$I(E4=-8KoOu)$vbm67ERqgZ~Dyi&@N zOHBY(59=2N9_0~s%z9&5(C?~B&G^Ff7Iduo@O&tP4aVhqbKfP!PH z_HcEu&AvjdicZW2r=aUnU;-pZli7vx92QHABY>MvDN`Bl9E$E2pSw+H%sr7LESXsHVu z*X^{hmG$YztTFa`vfPv3K3F`WO;~M~CO4{O+9kB6vN}^Yd=N&^Uw{idyRvB4)ZN$w*KPmP9OW5VZk3)1QBO_+ElAf5ZRe21y`MIslw>=#4* z-S@K@9Ra!#m1)RE#gj}Ly^dUcu$zCMdv;95sqjN=nF5#KoN*meMr|Z-qFIv9tMX}x zi#rTD2@`1QDN$3{`b;wue@0XxdA=LHBiLGxa|n66%Ekgt>bc69r3Kk@Om;(K1Ey?@ z-uY=aW2yeOwk5wIu1@)RE+~8r}In6%+9ivs3xy! z#H!#=Zs|Mv{-Nkg296R_L9i*^P`_gVTKSNq%tJhsG0Wmj$!8KIO`XnT@al!P}Dx2QaGgbD| zrgJG`ZVt2Q3ejcC?^2P89GdvYE1g<=++X3x3nxn+k$f5$M;q~{>C4ZA*)>tWxUJNs z-oD9WS-b<3R!Po3!d(v}Bqgd3t{5eL)_|*9T|K?_;We+Q&Aymk=LXro3ugnaZ{B&N zOHmv(sNOvpHinh(diIM(QZy}bU_hO=|EQhhNg0c!v*(FxjIT$h3g#p7`RmP}H?_*N zifggN_3hxL^1RC_LC=M@?`<>%T! zF=&{dN@O&=5_MZ8!<%=PfJ-=+hb5-L8Gxc|GJ0sN4i&MEd~m|wbA(^+fG!3aq=xjZ z0ZZJ}{TQ1~g!yRyEZ8I57W>Oj!6j`f$uwBcfX^nety39&^0EB z-t0q^XA5jJ=E?els0@H2R)`*-D4je^Ve(MtzA=_dXK)($4Ob#qO6^*-3~GJ$wjIbi zrRW`2N;&p3`jFMNAk(;o);cVWQ%K?EllLLch?fGlRtJ{`Zim{WI$md?WMGl!(aNQ# zU;)M3#txN_F&UYM&`zCXlHAGzs?{GgG;!{qd20~ZY+kBkYU*p7UUo30$E*0Cmmae& zkPI7SKOX$)$SGHA#5#o@xype7msUb^BO~M+@lJdmJ2!jdTKq8;9O15ymclW2ANc#D z-Mg1!5=s8SvFdRwxHRxO@N{%v>lRde*pIDmbCjW6mun?1c6WhnRy%0+yr-66F1T@j zi}cJGJN#JeQyt5BC0j}UV6cL9kJ5!B1*Uv(b8H}%R6u*|ff8-QNZwC-t^1L==Z!y; z__tb`ElDy2`cVvi$_&L2MH65A8F6qoRVn6UHnZ<8wX=GR|CYher&E&2Up_rTSw8 z(I}SQ)F9p*B?)9Qf^Qll=&XEr%`_`xta|HjAJ(`QvX^zk5dlI%LMt#KfN+_9{!KAg zD%#kzCCxQ=-no*qyi^Muv3e%CWeQB_`X+9SV8tu za(QmVI-Z{13h9`W4K%e<$;JB_DH;dH3_bNY%&{Z0-C!^e^fa>i=^-bxHNWfeEFe-z z?W;j$ua)$*M*YSHBM*zZ`~#xdZ_C@dWQt9xVx1gyE^>a>uB?Lox3ZXkqF*bZGvmGD zGicqk@mrb*-^xG}ZwaHc&u*`3G$t&d3i4hl%^LhO7=JS9@dJ!Y z{*C?n*T1d`>4Fw|@rih0VNcmUPKVzt;(kMJl^;i==b&GUF&p`Dgb>yn7iNMdW&U{` zj5Kyu^xVI2VhWvEY>JH+%(rz9^3_u{8+w_lWi`csNx31KU>*loEu01db6mhk=S2mdDqF=m?*c2GKxz^Wihc zO*&DVeMo&UINV9TS7uDcyJv5rI6%fXv*1^6UzbNNtE?_ow{(l>!m{Tjh%$W*S6}QA zSJ-y;+kIB7rscZZcDvnu_dV7!D>loYm}-V_bs@LE$kf?};Q551Z*ABZ$H!F|^}wr@ z)`zrf1l?1cd&f9V9qP~8^i_R*RMWwfkD&tYF)!Pgr<5h!nlsaVLZ;!X%91gJsK$Ie z#HUIy5_wwuqU2|gN)#u_)+MQ*uf}TpuP~nVOo>0{5;{5 zSy%RfeuYl;;5(QT2u?Cq!<#k~-MtYu4gSH-%FqJ-hw zLFzVJmsKwRN>3F{Cef=;1=Wl_(kwmM3vovK*R3&zs{}O28B}H6TOBqDG}rRG9s(lV3yIPP1HU>d!{Ff@5bBpo?vi3TD5d)K6>`gXJ|vSzWj4V zMyAY8>_NSep^V6Y0`3B3argrn!gqVSZDQ)s+--sG{C)CT?T9_3s*3^c9EuM#%VX0r z=Fj9I>iq+4aBK5TDxTz!h*f>YwYMvykb4GZCu|kqyMm=B<$ZHTtJ5i}7oIO_Jq0~; z0zoE`1OlUC=!C0C42qjzCJ7961pYj$ zm=O9UH1*j^a}na5BKRbxGU|-^DRthH9cF&li9v%-x7*j{CJ|e4-W-8t;9@|8&zF+# zY|!{$N9JHt&{NXE+LR^&pWtpX4>};}IDrL2p;r2;I)`3yTyA*Z4X>Llh|Lmww_aUn z^JM}jU(A-=`2&BdohQUld^wmDj=6Jh`&V^G)l!Az4F}w4nh0v7k=hJ^H-=}Ok0&SD z>pUra`SNZfvPuB7Z&5KEKtzeh(R#AX&VyPp=%qOV2SS;k_9{}!0&{9+xAyWA3huu7 zpeV4A`NfIPag}dhOT)*7I)V}1jkRGC)60)2$x}r}ryb=9WdWgHM};p}xuNnD5MYi( z0hOb@!{UlCK>Jmi1ndSu4q5PQSzAJI+xlr{e9clkaiO|AC7BGRH{rZqq=aNnvBdkCfJJO)vu*?=V7r8H8d4VE>b0E7$;&2_NWhxi%m+3s zTXN7qDUiIf6bFuX?fqkJ&5G8nqZu>)7&<*5Q>mLp?@s|R+KDl|EP}Kg8@!75XL_(M( z!hSbZG~2muTDrj9#G#Sc9B7sVF_d2i+ya&hdh&)Vx&Z;) zQPOSL66~q{`zmfB)jC&@Sj`_y?b@1;IMs*n^6^W+d8RE$v(i%@J`umu=f~0$(I-U0 z(^2u^+u5{Gfi`BUv(LOU%KIyKuRhDgkD(0shNbceP{Ksk&5&1J%V?xPA_FtlRaeS9 zC>;DZRtyV{HwDzj27zRPESlQeqRLyIr*&R25l_jcB~)X_*;KAy7F9(}d-c^C3o<&{%BqE*~2XO}w}+FLAfeR9-)YyL!+xt4N%e7+TOJ5$05R z2hN+*S3p!lDr7@ovqpPUn7%+=(n1K@O&DQSBU%a?tDIzDuV_Rh0u{iL&pqw`~T+sMYU`h#2S@vgdt}D*PoWHNX1(0X23VX>_d$Movt$ey+e~#L`TJt~mK>%19(bOkD@-Im zQlgLp8u|&bt%?+^y~@v3Bq$!>=3Z^7R`FR0erE^rKK&WEJs#XBOJmKwJKQlX!^?8s zmae~KV3B#A)1)p>a(J_L4sD=V?ZG8_E#|BzxU;gXs};xHudvGWuN}k%2CXRQ>$>;t zpR2ZzH8Lxuv@F*Ffnyv?eTObvu7E#tf(rz@wnSjL}71Q}SG*)%osO9lC{gm0!)=po#9%$i{-0Ni9`l2d_m!((8Bj07G6;h1j zmqw&oMZ=?DrJfQKi4Sfx3*sS;@Lt)*G=UJWZ+be`T)?;D!mU{0$=2i231#s}gR9<~ z%{y+vx1B`2{E#Y7p5_9YrkN;o!U<1_%nek}S*F;rOXDrZ9H-mDu&u+042VUf`Zw~= zQ0CPH-)y-;9Uqw778j58m4!lfKrDtD%GH8JdMlb(XC-DmTf==`NcB%cDFrb}Etuh& z^__FVO;R~zo_hGk^7th;zMn8;PtuItM{gD?H(Vi$y-)Rd4uenXu?|bam4NP=I9}XB z0u|DcnFdRo4PK={uhF;~qcY*UMU^sq7rjycGb{pAJ*Hn_M;n;QZTlbf960k>7aMkM z#i4#XqU^5MfIfJ*Rra2T*QJVdHzt%RQKW~TDR#X5h~Mxa!oBxqYu%V^9#}WSBJ=!3 z-J)XVak5OR{EVqUKWU1Dq}-lXv4CF0a6KqsbEw;)8vMRhTlA3ciC3|vsKG-$fk0N% z`pXfmzOt!&4FSoCrbGnLhjvan{&uPup)uxzAzsIe@t5g*GK%C;$YR=hfSsG4yL%U} zgoE*Sp{kwefec1Tt)TFJ*@yy)bxqGQ?XnETOv`KYA24WDg<2hR0q86sy46rC*Hl(e_GVxbjD<(h`h^Soef(yy;S_)Ixhz?KJwjL(9J)9lthzHZ`hNd zF6U|eyHS5zlnH}cM_g=DKTj`_bnQ|cJc?B>zQ!Gp)1cvZQycD2+iZggh)D;x{_67X zlp9Ww=-=0Ac+3TA{}7Bo*D4WTziJt610>xKn=-@N;(1Uhvtp>rQ?BVLhtDwWoXh}h z1oKjLZ49K_9*_FR(-Mb`?lif5Ejvij|5~rI%}JI<%MZBzq?v}#k;6esY@N3%QPobF zLme(Imz$lqk}PBjXKb>!#4K>X!NYj}{QACq1H(FGA23Vvz+8?oxcDpkNa^bGUwxd% zJ~eL`npQv&O6n;YOeuo~WR`&)|4sPLa#Wra?0j&!VaxU1JL32o)PLFuPNL-axOg(0 zk-sX)D-jTav)evxN3;Tda6J%79#Kf_Ty;Joh#AWmO=dUPVE@&=`pLzcJ|VI;k*?e; zf!W!g=X^ca6xmDM0CshTVkOxJ&`iBYN%#m9xv0D=_7%sBkA9{G1Swl18@Xu+)~nf8 z$IFX(%{!+PUnT+Fmit&&-6f0Zzm;9Evj4&-GR5|YZ(u4m2$o7fiIl#G|L+IfI*awP z1=+(kggLE`1|A^jBHwhQvKu z!2fsJ%wjgp#V{rZA;ocuAMU*KD-~c2)&!W8i@;nLFxTJ30mp0d!I*Gqb35V}1A;pI zX`Plwe3bns@Stvw)sOo2PG+#bJu_m>AtcYIOni?i7W$h8<{(f5?rG*8KDzY7s_V#W zA|3_vQscyQT=>D-9JRiIC5pT3w?y;g0f;|uTP8v!JAR0>DhuOnMoE6bjr@rI-bE>c zL6V+*-$ir_k?ToNSynU|>7t7)U!qLH9H&YY=*WS+KQsyvhQt1nTaco#^E$VO3IE`D@3vc?ua$JR16-M0^Rnm z2y`5(a`C~W4;6|8)s!+x1ew)%ny9q4P(4cUd?-<#(2q>NV$b<4%P7oz5u(?#d`zTv zaUo1@!ph*i>22i;Y=S5!?DDm!raSIA4yDgLmm12^KyixWYHC1MXVPEj?i49n{SC|* zbR9|(WQL-y89GuMsf#IuXHCZ`j_F!R>dOICD&frwL66vPKc?9P&K29!Ad;YnbwZi% znnWsbG?$?Kby*ct3e`1Dwk|?tlP$wCZ*-3t4uYEl zrxvGx@LC#E#?y2MESOd-gt<5Q*Dlc`P#?N4$V?GM8n59|rx*=c!M%SA!yUD%ogrz* zt~R6rt6^H&9)E5Nh?4w^A3-*CyBk?(EO1NIw)dbPzb3_#0V;c`j<|WQ%FNQY;;gH< zn%`1|M3_e$Dy-A+h$HXk<&>QAvxlLPUHJOh{y%+;UQ_G;7KN~SA3b0B}x|t zzn}l;T7xMyN0@PLZth8-=WLzPx_909hxRdq5y$Wu(#v0RPsz8`;aKaSH`B`BwB90# zCUR9Ng1@C4?f6}`3fjG|d2(B;n0!SQJ~jx^0seHN&w?XMF4LHvWi4-BKF=VW*aoEZ z4oK`WGuS_{3`>|#^EQGTpR|4j!z-w z82e&!@gG@liBdycINnUkNu1ztf!ru!L?d*b26c(fQ$5g+jv0vj_xhf*pmX7#Ju;~6 zB(_T$4OZ2UrVds!8nIf+4TMzMzD*lBdgB8K)P&WD@gC)$yA+&`jgo&UAFTi6=pVza zha#l4C^puDJUhDL@bQ@kcPpW#{YYm9WQ+fa1}-=Pwi;5;4+2}Bw*HQ%W43=~h_Nu^ zqxFK7n=_~TrRS%${mi@@Nu*83*+{zzjhvJnf@|OYlvA_At(c*RH3!zRjZxmaD;7~q zus<;MTGl=#6^2%P2&2|(gg@J0sqOj4g^mI`Q$J$&vvL&ot+3jF)ZxQ>&xBq|>P%|BBQPQtQTWlr$31h`^^LKcczK#G zpcy*R|EeMh)}mRha^DJ`%EalnD$Nun|5Td??2$1e0bzGzx0NcOwh%CC-!~!Ayk`sDPzw z8DqiyD^nYPuRbW7PiC8UV8f_(j%>y5c3;zf^AVG6sZ`Pd^LLt=BOJH;r-Faw<98U@ z0tCo4?5iWfB&b);F$fkML-6yOwbR^}HmccvyBbX0o5!9{85ZX|@i!qUoGCv@6M(}{ zn+;8NK81hSlc`IQMYMi7&{nFbsg02fx>>VA33TgYIJ|{we^er@2Pr#wT?J7A{5*&6 zW*L}v^IsZG*>f#^Lu(moh6iVp5=~&OE$}?BrVS+Mf;;rVLi*l^X2o#?*}Z&#wCtw(~jES!HUF5p2vIU!XO@jn{$2t zJblo4gGUpu1Nf-cOHUICn!6QD(PoJOm@1;!n-`UPUliKv^eZaU0)zW#n?Bc z=$9N$%~OGj{Z^(^=gzW}whA@BTrdQr-adPm`cp(47ZA)4n&dpL<$Q4U(|ApjvAFRCKQrR(j z4xy?5&d|T+`ju?1Rt~|rpd~lo_}>)bHXmA3tVPc#@2%FBnA*E!a9=tGd9e7;bFpVw zte}JO{<&a#cSqjxG{V31HH|oP#05V!nz3ZHXCA{cTKQQ-3)VnOPlcXL!jrcG79r=^ zG%N&>?vRB325@pnXA)DeYas~vx++IedYsuD?X3{aK)xt< z9260|nkqsbGyu(8uH!~G>fQuBBEYbFqi{|^f?npS$VScj^Sy-q(AkB615o+4co@Rg zY}DaXGck)3;QF*~w)5TzW~?S==A*^Y-dFhJCro5kHWYJc5^h_6vvG66CjKkWeMCfo zKR~ZiiyNtDwy;p1FaO=5Y6PH)2bu$zn@@AuL{c^`f|hNbZ{1Ih=k??rQvDt-G~QIP z_kU2z;Zn-ASp^uB-~BxgMEFvB=0qRu+BR6wO>ujCJU>^_lCH}m<7nh}GWa*$>yP9= z@r0wjeJ+OJ(4eMoOkSyyQdz!YXVbhP^~$(hc8p=u)s7Fc{FP_k%jW-Ik174-VxxUY z88RLHIw)i9^jwkl5;_2ECD@!fG0+)U)jpfD!RY5JF`bfsTS6oBf2%%<-h&s8<-d|!|Mc6>#SZ{ae40__5I z&CU0^|DA=H`X5Dz{Qh@#{9E^Bob2vzTF&NsB1%8Lf9IU&p#|-}DAt|HY0yE*$k%wk zq3b~o|2sEWQe*@s+`fG6?tYKj)Cb$erL+4&MC3=>D&*tFS$|*$+Pl@7Yg!|k@grSH z$)AUoDeKrGEIRobK3|{(AyeL84_CIcx&2uUI0k;j&uoIP7SoFX2(J--JD|d&)HW(Y z!k3r{fJ^kBCH`$KpCARkL|llOQ*o(JYt|IFK|Q$dHu^4Y_Au7!x&cop zDrObR`3F+@%gf6?v8;mdSQamhF(8VBOw}CEI5cVW9Gw8D&TtesxkGl|TYr_=h}!%? z^A|>%E&FTbt%?g=b6n96Z3=Igo&m+^P38&x=NB~^r2uJnURzly_T(_i1PGvyH6C0y zz0=%P@N}ON!anVY-PPB_+-qu}r=>9fAMY?JBfztOj(q>9Y!9DZGt#NtO>+)8MDO#6 z@Of#^bG5ThMHhBFH1S4&%XbZ08YUbS+zQ~Vh3N72-di?re-G@>;j9>6wfp{+fPCWv zb@_OE>%QD7LVRpJLo6HXP|Y8M`|6ADWl9%$*R~N=GzKv7Ep|Z^WP3F-icif*F1-ow zr{BJ;MD02Sn_&Yzx0s3(|LFbRXjnv~8^6^~&792=mj+oHV_l!5wdkrJd2+hj3R%5> z>O#<6U*|{E3T!yXN4n~qvWJ62!3G(eYg%@%ZcEwJe*iW~rZ1!H+#zwDbL$p+HWVjk zj48wKK0G(RzrvN}1E3L;dp@qO&=8_vQFX#Ov@_=|QJ05W(}UQoE3&O}fNolYRsdAu zwv%F4aaYdM^@`s7gtq;OQ_#V=zAz6PHsOh^VIrF+3<~z1tFb!j&?O|VO{d@-LWnbw zNV{p={*|GJ=wYTAlk*uTt84Ieb#VB6qzfE?trJ9$#9OB@yF`+I$(^`&3JReB7^-L0*|Mev^)EMLy}PNJ5 zQYMI88GsTWT}8@eD%ze_Z-fi7APRpjt}#zAv0O?f@I{@gRIzRg=aIpBJdL8HTu zkj|QykoTYwSuK2b;AKYhplAWl=UD%P9V!}JJBPahl;s#O^%OrL>ni_U&!-*9JTE+V z?9kDS@^6{PvME*Nz_R|=#0UErH^s`0;hm6$r02QQ{&uE=s-uehfLCYLc{uLzcEI>ZjJ6Nm&C z|7;{AiKoCH5pS1LF+Ek@qjh~E`uNw#EmHdHPfpAuU09Z|XM1OJUxe0<@RcOIV6kAZ zDp{Lti^s3=kDL(%B|vG(t;*=K)k;VEi*IbZby&U_8Pw;M{gX!^TN39s?bnz28iyzP z5jX$82^@ZZe))9^`wTD3hm2g7p%Pf+M;%kq!tDmu$2@@F%8<{Y0leik=4B-B2Oyw& zynYG;Pfi;@Nss6QjF9v2%P03eL_QuDP7cJcR&$L7?IiOtY|!L$VT&-hM}j4@G~ylbnUd08SY=e;H=+ zJ98AIS$gamJw84zM7dho9Pxo)$4MrVq7y+AhgX+sx@*gtGSzhYQrNQ3fSY{mH$}x% ztZKeLqc80B0;ZQBl)Vy2WfH(403Pyt$sp+yt-j|yG#?tU%R{N~F*|Tk`}6XqTyile zzn(@S72JA->)Xop|D`lkTz@P8fZvs9M%`e(Q-yo#TM@9845E}#(a!vJYl|Hv+H9ZC zsCo4pO?pS@$RqdE|F^nr)Ciw+#mc7jDun1snJscuSEXki_Vs#Y062^IFqU|Izjb1R}={P92G=$1F9vo6!--ZAg z5X6faLA_;Kt3a$AVTN{(QtkyXf)zhrJIR(%gE4R#e-Z;?Wwnji&KsRXJF#Li17M!; zZ9gxW*JH#O-Nf%KJBM48rFPXL#Pi(fOn+ls)S?Be`1OV1r2a{*P0|Jpz;cio#dEZI zkMwZeBwbpZETM=#K?9pZ;a~ax)6!M2Mb)<38M>t#q$H%frMslNyOETTRHR{Oq`Uj2 zyBj2=yOB~r0YNyA-*tY#>}z(-y6;tU{@U~Ve))`DJNoY^&CfUR2e7MQoV?(3xW)BUF8|$`fo~ zF{?R5!^~WA0dQOrGR$ldacS$ee+F}%M38@(m`^_JO6cUKMeuEU>EOyn)!m%~<3hXu z#t3FT-<}XUpVWCo4WuWBccfZ{eDW3fDo0DI37tX0+oRXQa8mdyG+I)KQ?}S_L4V80 z>|7@FB)`v`y#AmCBY4msG)g5)8pOoB>~g~5fWhbaVnTP(#L)>)#a}MKygzR`$p5Vx zEtB3R>U&G>C^cg)^pZP6L(gv_{v-q`{rUlNHdH06r>~bial|2vI{={Je<=m@3VkOF zL{%M_wM-d+HKun&MFB= zIojF_TnxhWN_k&~=zCxw=>pzG86z4WZk3X&61>}NT8R@p=o|x7{4CQasd_P`Mgvk3 zrUk8Y#6K;@C~Lm=P+7u`O>Z`LCVuJa)!Jn%yq!LARB?XeJ5Iw6u-%`x=*eh(#{-_Q zG(uS;mXWdEi=zvnz5S&8j>vdCl+BuGVP`oE*!c7rdqehPA%w%4}RT#FdBG|?OLVoMFrI4f`F}o5@ISyiC@+Ug`(Zl&> zOa`gm6+?XRp_sA6DHdc}&V)R_783Cc)pZ{i5YIZf!}a|$nB|#BxGZLCy3D_UC3F7> z$YMH1XfR?T{l9F}SYKVnrXyZbXHfL%0Te|j^)~LTTewOJXn1p|o02q!dQegc6<3}8>ZN{n&ecP+x7^N@d(R6uOBMBeaK8TP;eor{o z4LP2T8q%do&xS9kBwa{|T8K~|rdd<}J{2v^U-A|!vC58$WZc}3w}QQ={f-Z! zJoJzYOuL-g>RY(p$Um3x#+d&G1uQ1bO9K2iY9K_En6~L%Z`8rbp{xtJGDNJlI`Dk* zc`ET_YBs9Y?0hv+`mx~LZ-?GgIX1j__o9kaeLM@|V?a(f;z|g?&pRPaq!x#z+%7IU zHQzZ4=?9G0-*Zr@t*O8wn%nYSImw(bmkrw=GuI%mHNd5Dmo6_2Qbo&~XYMex;Ogx{ z$c}~UNZ}M(MAMPx?hBVdSGI|XG)4>3M=|+l`qOMZDyBhqm8vh&x@2McoK9$2`r}lM z2*8&C_)5kXeTKOmW!Yg>$cg{GeG>jR)h^0N#6#a#who>p!ZXiq=p^h{r8mj~y+adD zW&ml-0+!!8INtvjo$6fVJ2&L%`rh6u55+RUzj>NAf?|*1_r=D8SBpyY)6)|JvE@V6 zr^ae`;+jH~#2E|?!y~5C`)>(P#up_wjYN(@g-zwINpVA1 z+!KJKDHwtK?iVuGmg=O_`fbn~th(K6bBH&VZqnYR;LP*DK`KN>=e0cY%ZZ<4bB$Iq zp)@0uvHB;CC1df@Vsg4lHTJJe-f38zQc0kK2*{o?95n*S%k3^D5*y|B%99V#Nb%*S zLOsJJC_i}ptOdi_-R-{_Li+9Yf4Q!tRyr7TQV=sNhhfrfVCzt@^QO=h?)|7{RE@oc zNvH5Ol$8EG(#;F-6Nd@4nJUGjE0^W0Bm>qQ$Tq6HYAu{XdK-NXKj!hPuW(@{j(K0K z7>>$q4v(~$=?)N^hiDo{WGCkr$!H~}4KH(-JA5ve9RCI=d8ExygYcdOy3MN88CA6` zzQ;AYyc@W~NuNth5!kv8%nak18m@9m92=*7Yw~L^2fm}xVC&?|8u7_NW5jHOiQK>* z0p0F9S^oNru#Fsi<$N5DDealkZOXpte)v0kZ$tq*c&(IB5%PnPaMH-E&`~n6(1%yl zkPtDd9AOsfrt!bTHNfs$OfW5)B?PCv^Fp8!l&7ptB+Hl{;SlDJwxf%Rfp+{S&NB_J z%TV2)LY;f*bjAtB>!a*ytLG7MZ{ z(*exxFSGn`$>)l%+++vmQ6Xnb%8H{L!pKER^l;bS%8Qr~gywM)5eH9L|XtIQp3lRwxZ-gJ^wBhRI8*4=A7G zph_zxVxKSV4zC2uK4T=9?U#|VO+`?lLNdU*k3v0SDpIzoP4J6#$SSE?5xa+-w2l#Y za!av?ieX;z)Q-x(Fo0hSjWk&0QmBhmrt|oTWF6;6!xz?2E8dmONIWS-ItO-?lC<$& z97qHIT!gH}TdD6(P4&1T_2DkvOnc?@sEJRjEiM%d%zPItgeM3iAcP^qHZvkDQLk?1 z`IIHB)g8SaydLhmT3s(0Op4v*GHQj_3kkk#*X4}Zz}E}jb@q6=mC|z5PV>&k)Ym_@67u6 z_Fxvm5C=AUi9~3{hd^x@0ZSkQVmtoup2x|Tog}in1J?`2mSw<0PvgW9b z9*tBVsaQv_@m`w<2qfkq=+G9V8Gq+y6J2i`?NUvf++ zH@9CGhwr`YcUYtf&G-2FN-(O9T!t7a5eJp$MGX7588zV9l*hDtJFp*AmFkcli}?X0 ztHGj$YpMh{lf9}Dnx3ZCM$$mM>K6WRFT%kmq;nB6fT2-V>x2O|H6BR_^8bgwo#{{D z5^I#}#t$b4bp~86hy@@KR0>uG>iDj_mCJkre*~)t=g^=Kxm=Q>yG4~Irx+e%DI2CR zE9nMJ)_^c|1UY`g-Mu;axXqvb-brQe1kNYqAhBPg+S@eTigLZnB#nB zkmc=kwxMxiE(Y^2 zD@X#Xhl5rj@x%hPBFjaucUfVPa8%17HGl%_ZKI)BaxhQK=14u&=ZIkg`17~*h9m+L zg*VQd^_-Z*D`Xn;OepvmB41|J%FGHzuZIJd9MM}u0kr3+GYy1sCBXg67=>{0njPK% z>4+})==LAP*~$-}N=D0Y6BUd`1^yZv=s7yuScWVI9bJ`$0AVV(m{2}SaGpz+uT;f4=Lm18zTi%TK~_ai}g8ML;lkN!C18+z8Pc|4*G zp$H8Ddwcp?Z5BxmH=H^}u1pP~z)t>Lt!Jf@?Uo|>p$96RKT01VCRK)+Eb{1e`c`Y| zhyCVNYb9p5d*76aeI(`B zRq5LV@^z$1ZF~*L^;os7epVTzUTs0C4_tIoN1bACkF0V2q4Acva$B19ZYqvNtLK&f;-D(BN3utrz4L4O6=r|%a-`ZQb_2!$vU+c0a%-Dor6CH_j50c7 z!i6B7TZA+jy0(m?U9}=IbM3-6F4s}@lWCW9i1t_y$=~dP79-ZyBVS{lD(t+7%fICF=mq;|Cn`jslPDNxa+zO>s;0v`00j17~}51yVH-R zeX717UxGCh-VM?)PbBQu(8)s-?;~5H3=u2w*s?s|>T+XKoykjff~u?nZ2_m0J(Nq% z-l(cGuP1h7n1dOk_ZW0CFvexKxv=Zg55Fw3o;wkmy6dIv-f8|~$o0oa10L~yRLH_y z${iuyRQAL8dL^+p-iiZ?lOWWCGJ;#W0n_+QVDIZK+7}U`b^GADKb~*YLgyGjHAxO( zCY^_&o2=rrNRc5jWhuOQOkeySmoZfavCYf6{?pPBy^J`OWN+c8YV#=}?ZPvnw%#6%TKGk5$b*ZBx@yauDdhg%LiG=|cp!?$z@QiQ z-PYuW8@le&#OA~)g$zzc`U+0*u18JYm|vfPvL41mb}-vTX9u)nnI)wKHerDwUgD^i zsHd{+NnB+o9*c0s^}=O6_Hbn~7UP^R_~^66VUuVevSJ{kIV0Zm}4d!_};(K){y2u1%Y1Id37}xFB zV#}KhGfX>rQnpdHe^b|$8VTz2!6c`4)H3bmCe>Ua0;(tyTv{gAgA-9; zDZ~9d`6$yg&()cvCfG>8=ZNu*uQxS3y;e+weQdU4nkS_7fz4ZxXeIQztA?dWZ}WDx zHov)%=@Uv!fh9-CyeR38Q-R3}GOFSXeOQ~V{_HVn9tg_x7{51v6z8io_d}J({HkJ$ zg6SY|ffg6b!P3{A^T8(JjS~7~+TPr#`RD3jTF4J{A!1+HIBE|)DWN{)%7f`Wn z3;0I7>I<2XG&&Zkk9V@pv*a`G*{{r%t*G)+=K+S7%47G^v7c%p1ggC^Y1adaq~yU06a;nY1P!T;pFU6yNZ>B)(H9+&Lw7i z*<*gX&{yBe@T2J{sU`g6I(MzE5}@9+m@;u~aEh$zR*0`snU&Pa&99si?|qC64%Y9F zq-oVVe4z10EdHH}p|BS%O$q}OMuXmeKVnzf#7ZXZy|?+w;&3249=l!~V`-X#R2A!s zj85(gyLR`!KL>Vzr7Y7$ZpzPIOiA1fmi((tge+5zApX&mC5m=GqJV=UEqmOI#~!}5 zE1Qg`mDRK60Pkr1qz)J=W?T1%7Lvl+e)5T7;Bk82b=o-g_M&;KcH)2lx1!*SE{5K3 zfj}uZO!^7p|2&+v8#kn>3_0m(<^ydKHdPTCq_Q{Han%f*y(olMXp!ZnDTl&nQw!P3 z!Mw5Y&;lQ)Q-4EH3IorSU4w&HYGhj44t}hI`Bz`3MxEHO!iq9k(M6_X4(N6O$sVzd zS^L=NDqG} zP~EIYxO4G{2TCchuLnyc7+cBtjHJ|i#uh?7Kh?}V+i>!qs%Bk17IaZ-ngI`L9r314 zwW-(P$y9YLt2yiw(eMjBT{OKJ)s~bB+(H7|eGS%@^CpxBOqGyA8s^{iTBORU^>VyL zG$I9B(ss}}eyQs(eVO_^2no}vmq0P0@xZ^pX?BGF7UBMhzs#DbBp=QhUM^5B?#_UA z!xQ*qRf~~g;^!MkuC94{?=YKLg?fzD3I25q5r%Zlri@pKUhbCVc*VWqzi>!n*2bAp z%W#ALSJm+>p{-?gZU69E2jbe^ORUPu7|#HwuWat$rj1POiRh27PZul)S>HME7{jJg zFwhjVohQ^obo4}T`AZioElwkF#i+EN?tAI~PM&(;gwX~}w(^aGS<5G-Y~luKGig*t z@Y~B2mB){Lvzwh0-h_3ObIhnnV-yv$BMu?|TQPNb-l(Qo%z#ZiMOcrz5_+DE2Q_ivALOV=j&}} ziQ|^)M17B@mH2$qGs^bq+TVwbe#&gCV1ko(xLQLG9<5#Uf|u)w!7;UssgE@HJ-JedN6u^P zfhbp!W+Ncb{=r0w`gb~uxf3<>+?t`= z#Ihg}FTsvZ4t%oJD|<8uyBC>13w$eJ6(#pVTQaQ;G?~%Zacj%k2r>$DhwYr5&zodl z8v}6B!?E6G+*Gp;+0*{A6xGyQPmQF{!c`XKa7*h1A@3t@?5ijF-AcjtZ-)PNZ26c` zEusS7+d4*?2_5m~{^-D>0ZV!I_aitOwko$N%f)DXU-fvXxplY@CG#7lCr3(KDbhZ;w91u~Bv7{iQ1W0GS=~byT2T1=cd-iv zG7kBWqp*O-q)FkktA!1%c5UNbjx0vH!%cl_5e36X@+0b|HUG>Fdxs`DYnk>-n>P={ z!E$A?#YpX^BBt*ss)xMET9F#7V|3+*J+|*8SP})0x1VvZ5=WpSUpVnM^e2_jGm!5j zf_k`oE-+XU@J$1oa1sD8vh$!I=@}aOvw~&-a%R$(ms)OBX{7FOC;xx}IApzacyfFw z<$sX*<4YcQlr@$gTg8b~HOIX$xD8)&NnYa+{~xjWzQw72xqZ0E=-r_oX?k5Miw0KW zNH%bDjD3Go)KU|*1Vx)=Qw_OD^CVi&U(zvL(V8^3(QxaB_kg|WV9QWDQ z?DD=gu2v8iJ{hU~t4dIHB-%pOTTfX@m^Ha}qT!U$sIXIYtK7n2C5bXDI|9g#=9Qoj zQ%xFYmyUE5HR5>ET<0Q`rzhDETO~aFm|()W9JV=|9NvFthkKh1KWfwR6Uo*0I@Bxj z6$M;6xvS?Sc**b&mfZjFEe^}{D^uDtK?x5jg^+P-l2cTfJS>ClmAEo8GLmv z_S>w^YmPNo9;Jek`M9)XSu_b!ja>h5n}v1&8z-Bz4$ zKfc%JK2|2+@!#_1Pq}mZEe1{~l;GrNOui8`{e9$eWn+7Y(VNepJ z(Pwk8Sl$df9=|$8)g(y>ymNpahu5($?kf;C!R5JL=U0LRHMyQvwXBMU!%zL zhLLY!DlU#UUgbt=zn%)V6egyF)W_nMPgp$mQf7{dd4Frl-;CNwd{g@sq`JwvkB+LCdn}0c z5&~TRhbsOu@DA_VPtzxgVZF~9dvA6oJ|?(I)6UY;$p6V!P;|ek!THwpfG;zf}Mj*TKH%U$$YjkXSE- zljMlB;`4qHnBAn`O`zs_PFhXh$+#_xagTleoJ~{ z%fB0NajG^=WZ&WcahamTo*Ruckpg$QYcmi}<8gE3wKH}3ODw0^~4m9%n_0}`9oUO?4b>?5?lrjl<`+oO} zs+O>*Dy<^i=E{HP0vugu5mCUPO>!l$^?eQQbZ}BOibz|ye-;n&qzp?DJLPl34<2YL zFk|?v*QJpgzWgiB0@fD5wu(hz*q|_Qllb8XeoJK^eSXX&z#mPfAQ$gCzS$*4V!mk) z7>F9ydg})lF(K@2S@D;j^g5Is$UiPKss3bJeaqAB91I#QjcJhiYNM<$K-FBw@&;U@ zGJA?e`p|*;04Ck7bBnV^X*%aWETX4cc6Mr;<;Xmu_Nj=-?5&QWYQ{|Hq|#@(#&Mim z;3y|`d4M^mEVq9^{Tlb93TVs@R!a*gZ+hmX#+;Y?YDT5{iz(fOg_^6d8k}yw)T0`h z&A`7$ty5iU&1=u4|J=w5&`m9TC62QQT;9R9mGVU3f{N_;-6gVL@O`xc14#@LlTI7%itpfxj*nfvL* zx&KTDy02|puEq*H(UxEm1^tCIl|K(i&i@^jDOR?Uf`854B3tb8fSL?Bp2Co!ePim2 zGd$haFIJXG+O!#7&s*hx_5=g7=gFx13{NH<9ES(QkMG&$PFwt!On&RE1{g-T`x2*>;ETH>Sk60hm zyHZz){TVqFoRxPi>=D-;*3cWXIyR1+t!h91J(P>f!BCI;4_nZ}Um{07C>$4eh&ymm zx_&ad9ZL$$<4>1cQ8+r5f#myN5aq-mv~RsBzTdwtRi*ciHoqZ!j!TK$*yS)Z$5Vk? zRZ3Y%j=sxl+Tb^M1^1AS9kLZav-;6oSz!420?X)8G{F;R)`gXf$q{)ta@@rYd+OMC ztIPlPi%G!l%VjjPh@FHj$OvoDfzR8jKFVyY6BquIx%mx4|1JAHO;)0fn4ITl2!S0& V#VgD7Z=e_*q9CIxT_b50`hT5z_1ORb literal 0 HcmV?d00001