diff --git a/build/parser/bodymovin_parser.jsx b/build/parser/bodymovin_parser.jsx
index 673bc80..4e9a17a 100644
--- a/build/parser/bodymovin_parser.jsx
+++ b/build/parser/bodymovin_parser.jsx
@@ -582,7 +582,7 @@
             var layerInfo = pendingItem.lInfo;
             var frameRate = pendingItem.frameRate;
             var lType = extrasInstance.layerType(layerInfo);
-            if(lType == 'AudioLayer' || lType == 'CameraLayer' || layerInfo.enabled == false){
+            if(lType == 'AudioLayer' || lType == 'CameraLayer' || (layerInfo.enabled == false && !layerInfo.isTrackMatte)){
                 //TODO add audios
                 layerOb.enabled = false;
                 extrasInstance.setTimeout(analyzeNextLayer,100);
@@ -831,16 +831,38 @@
 
     function createLayers(compo, layersData, frameRate){
         var i, len = compo.layers.length;
+        var pendingType;
         for(i = 0;i<len;i++){
             var layerOb = {};
             var layerInfo = compo.layers[i+1];
             var lType = extrasInstance.layerType(layerInfo);
+            //$.writeln('layerInfo.isTrackMatte: ',layerInfo.isTrackMatte);
+            //$.writeln('layerInfo.hasTrackMatte: ',layerInfo.hasTrackMatte);
             layersData.push(layerOb);
-            if(lType == 'AudioLayer' || lType == 'CameraLayer' || layerInfo.enabled == false){
+            if(lType == 'AudioLayer' || lType == 'CameraLayer' || (layerInfo.enabled == false && !layerInfo.isTrackMatte)){
                 //TODO add audios
                 layerOb.enabled = false;
                 continue;
             }
+            if(layerInfo.hasTrackMatte){
+                switch(layerInfo.trackMatteType){
+                    case TrackMatteType.ALPHA:
+                        pendingType = 1;
+                        break;
+                    case TrackMatteType.ALPHA_INVERTED:
+                        pendingType = 2;
+                        break;
+                    case TrackMatteType.LUMA:
+                        pendingType = 3;
+                        break;
+                    case TrackMatteType.LUMA_INVERTED :
+                        pendingType = 4;
+                        break;
+                }
+                layerOb.tt = pendingType;
+            }else if(layerInfo.isTrackMatte){
+                layerOb.td = 1;
+            }
             pendingLayers.push({lInfo:layerInfo,lOb:layerOb,frameRate:frameRate});
             if(lType=='PreCompLayer'){
                 var j = 0, jLen = exportedComps.length, isRendered = false;
@@ -885,7 +907,7 @@
         for(i = 0;i<len;i++){
             var layerInfo = compo.layers[i+1];
             var lType = extrasInstance.layerType(layerInfo);
-            if(lType == 'AudioLayer' || lType == 'CameraLayer' || layerInfo.enabled == false){
+            if(lType == 'AudioLayer' || lType == 'CameraLayer' || (layerInfo.enabled == false && !layerInfo.isTrackMatte)){
                 //TODO add audios
                 continue;
             }
@@ -972,7 +994,7 @@
         var time = layerInfo.startTime;
 
         var lType = extrasInstance.layerType(layerInfo);
-        if(lType == 'AudioLayer' || lType == 'CameraLayer' || layerInfo.enabled == false){
+        if(lType == 'AudioLayer' || lType == 'CameraLayer' || (layerInfo.enabled == false && !layerInfo.isTrackMatte)){
             //TODO add audios
             return;
         }
@@ -1405,8 +1427,6 @@
             instanceOfArrayLength = instanceOfArray.length;
             if(curLayer.guideLayer){
                 return "GuideLayer";
-            }else if(curLayer.isTrackMatte){
-                return "TrackMatteLayer";
             }else if(curLayer.adjustmentLayer){
                 return "AdjustmentLayer";
             }else if (curLayer.nullLayer)
@@ -2527,7 +2547,9 @@
         if(!renderCancelled){
             var dataFile = new File(exportFolder.fullName+'/data.json');
             dataFile.open('w','TEXT','????');
-            dataFile.write(JSON.stringify(compositionData)); //DO NOT ERASE, JSON UNFORMATTED
+            var string = JSON.stringify(compositionData);
+            string = string.replace(/\n/g,'')  ;
+            dataFile.write(string); //DO NOT ERASE, JSON UNFORMATTED
             //dataFile.write(JSON.stringify(compositionData, null, '  ')); //DO NOT ERASE, JSON FORMATTED
             dataFile.close();
         }
diff --git a/build/player/bodymovin.js b/build/player/bodymovin.js
index 8f61b9d..02b3597 100644
--- a/build/player/bodymovin.js
+++ b/build/player/bodymovin.js
@@ -1,3 +1,3 @@
-(function(window){function Matrix(t){var e=this;e._t=e.transform,e.a=e.d=1,e.b=e.c=e.e=e.f=0,e.props=[1,0,0,1,0,0],e.cssParts=["matrix(","",")"],e.a1=e.b1=e.c1=e.d1=e.e1=e.f1=0,e.context=t,e.cos=e.sin=0,t&&t.setTransform(1,0,0,1,0,0)}function BM_CanvasRenderingContext2D(t){this.renderer=t}function matrixManagerFunction(){var t=new Matrix,e=function(t,e,a,i,s,r,n,o,h){var l,p,m,d,c,f,u;return l=$M([[1,0,0,0],[0,Math.cos(t),Math.sin(-t),0],[0,Math.sin(t),Math.cos(t),0],[0,0,0,1]]),p=$M([[Math.cos(e),0,Math.sin(e),0],[0,1,0,0],[Math.sin(-e),0,Math.cos(e),0],[0,0,0,1]]),m=$M([[Math.cos(a),Math.sin(-a),0,0],[Math.sin(a),Math.cos(a),0,0],[0,0,1,0],[0,0,0,1]]),c=$M([[i,0,0,0],[0,s,0,0],[0,0,r,0],[0,0,0,1]]),f=l.x(p).x(m).x(c),f=f.transpose(),u=$M([[1,0,0,0],[0,1,0,0],[0,0,1,0],[n,o,h,1]]),f=f.x(u),d="matrix3d(",d+=f.e(1,1).toFixed(5)+","+f.e(1,2).toFixed(5)+","+f.e(1,3).toFixed(5)+","+f.e(1,4).toFixed(5)+",",d+=f.e(2,1).toFixed(5)+","+f.e(2,2).toFixed(5)+","+f.e(2,3).toFixed(5)+","+f.e(2,4).toFixed(5)+",",d+=f.e(3,1).toFixed(5)+","+f.e(3,2).toFixed(5)+","+f.e(3,3).toFixed(5)+","+f.e(3,4).toFixed(5)+",",d+=f.e(4,1).toFixed(5)+","+f.e(4,2).toFixed(5)+","+f.e(4,3).toFixed(5)+","+f.e(4,4).toFixed(5),d+=")"},a=function(e,a,i,s,r){return t.reset().translate(s,r).rotate(e).scale(a,i).toCSS()},i=function(e,a,i,s,r){return t.reset().translate(s,r).rotate(e).scale(a,i).toArray()},s=function(t){return a(t.r,t.s[0],t.s[1],t.p[0],t.p[1])},r=function(t,i){return i?e(-t.tr.r[0],t.tr.r[1],t.tr.r[2],t.tr.s[0],t.tr.s[1],t.tr.s[2],t.tr.p[0],t.tr.p[1],t.tr.p[2]):a(t.tr.r[2],t.tr.s[0],t.tr.s[1],t.tr.p[0],t.tr.p[1])},n=function(t,i){return i?e(-t.r[0],t.r[1],t.r[2],t.s[0],t.s[1],t.s[2],t.p[0],t.p[1],t.p[2]):a(t.r[2],t.s[0],t.s[1],t.p[0],t.p[1])},o=function(t,e){return e?null:i(t.r[2],t.s[0],t.s[1],t.p[0],t.p[1])};return{get2DMatrix:s,getMatrix:r,getMatrix2:n,getMatrixArray:o,getMatrixArrayFromParams:i,getMatrix2FromParams:a}}function styleDiv(t){t.style.position="absolute",t.style.top=0,t.style.left=0,t.style.display="block",t.style.verticalAlign="top",t.style.backfaceVisibility=t.style.webkitBackfaceVisibility="hidden",styleUnselectableDiv(t)}function styleUnselectableDiv(t){t.style.userSelect="none",t.style.MozUserSelect="none",t.style.webkitUserSelect="none",t.style.oUserSelect="none"}function randomString(t,e){void 0===e&&(e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");var a,i="";for(a=t;a>0;--a)i+=e[Math.round(Math.random()*(e.length-1))];return i}function componentToHex(t){var e=t.toString(16);return 1==e.length?"0"+e:e}function fillToRgba(t,e){if(!cachedColors[t]){var a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);cachedColors[t]=parseInt(a[1],16)+","+parseInt(a[2],16)+","+parseInt(a[3],16)}return"rgba("+cachedColors[t]+","+e+")"}function createElement(t,e,a){if(!e){var i=Object.create(t.prototype,a),s={};return i&&"[object Function]"===s.toString.call(i.init)&&i.init(),i}e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.prototype.parent=t.prototype}function defineDescriptor(t,e,a,i){var s={writable:!1,configurable:!1,enumerable:!1,value:a};if(i)for(var r in i)s[r]=i[r];var n={};t&&"[object Function]"===n.toString.call(t)&&(t=t.prototype),Object.defineProperty(t,e,s)}function defineAccessor(t,e,a){var i,s={enumerable:!1,configurable:!1,get:function(){return i},set:function(t){i=t}};if(a)for(var r in a)s[r]=a[r];var n={};t&&"[object Function]"===n.toString.call(t)&&(t=t.prototype),Object.defineProperty(t,e,s)}function bezFunction(){function t(t,e,a,i,s,r){return o.abs((a-t)*(r-e)-(s-t)*(i-e))<1e-5}function e(t){return n[t].fnc}function a(t,e,a,i,s){if(s||(s=("bez_"+t+"_"+e+"_"+a+"_"+i).replace(/\./g,"p")),n[s])return n[s];var r,o,h,l,p,m;return n[s]=function(s,n,d,c,f){var u=n/f;s=u;for(var y,g=0;++g<14&&(h=3*t,o=3*(a-t)-h,r=1-h-o,y=s*(h+s*(o+s*r))-u,!(Math.abs(y)<.001));)s-=y/(h+s*(2*o+3*r*s));m=3*e,p=3*(i-e)-m,l=1-m-p;var v=s*(m+s*(p+s*l));return c*v+d},n[s]}function i(e){var a,i,s,r,n,o,h,l=e.s,p=e.e,m=e.to,d=e.ti,c=500,f=0,u=null,y={points:[],segmentLength:0};for((l[0]!=p[0]||l[1]!=p[1])&&t(l[0],l[1],p[0],p[1],l[0]+m[0],l[1]+m[1])&&t(l[0],l[1],p[0],p[1],p[0]+d[0],p[1]+d[1])&&(c=2),s=m.length,a=0;c>a;a+=1){for(h=[],n=a/(c-1),o=0,i=0;s>i;i+=1)r=Math.pow(1-n,3)*l[i]+3*Math.pow(1-n,2)*n*(l[i]+m[i])+3*(1-n)*Math.pow(n,2)*(p[i]+d[i])+Math.pow(n,3)*p[i],h.push(r),null!==u&&(o+=Math.pow(h[i]-u[i],2));o=Math.sqrt(o),f+=o,y.points.push({partialLength:o,cumulatedLength:f,point:h}),u=h}y.segmentLength=f,e.bezierData=y}function s(t,e){var a=e.segments,i=a.length,s=Math.floor((i-1)*t),r=t*e.addedLength,n=0;if(r==a[s].l)return a[s].p;for(var o=a[s].l>r?-1:1,h=!0;h;)a[s].l<=r&&a[s+1].l>r?(n=(r-a[s].l)/(a[s+1].l-a[s].l),h=!1):s+=o,(0>s||s>=i-1)&&(h=!1);return a[s].p+(a[s+1].p-a[s].p)*n}function r(t,e,a,i,r,n,o){var h={pt1:[],pt2:[],pt3:[],pt4:[]};r=0>r?0:r;var l=s(r,o);n=n>1?1:n;var p,m=s(n,o),d=t.length,c=1-l,f=1-m,u=[],y=[],g=[],v=[];for(p=0;d>p;p+=1)u[p]=c*c*c*t[p]+(l*c*c+c*l*c+c*c*l)*a[p]+(l*l*c+c*l*l+l*c*l)*i[p]+l*l*l*e[p],y[p]=c*c*f*t[p]+(l*c*f+c*l*f+c*c*m)*a[p]+(l*l*f+c*l*m+l*c*m)*i[p]+l*l*m*e[p],g[p]=c*f*f*t[p]+(l*f*f+c*m*f+c*f*m)*a[p]+(l*m*f+c*m*m+l*f*m)*i[p]+l*m*m*e[p],v[p]=f*f*f*t[p]+(m*f*f+f*m*f+f*f*m)*a[p]+(m*m*f+f*m*m+m*f*m)*i[p]+m*m*m*e[p];return h.pt1=u,h.pt2=v,h.pt3=y,h.pt4=g,h}var n=[],o=Math,h=function(){var e={};return function(a,i,s,r){var n=(a.join("_")+"_"+i.join("_")+"_"+s.join("_")+"_"+r.join("_")).replace(/\./g,"p");if(e[n])return e[n];var o,h,l,p,m,d,c=100,f=0,u=[],y=[],g={addedLength:0,segments:[]};for((a[0]!=i[0]||a[1]!=i[1])&&t(a[0],a[1],i[0],i[1],s[0],s[1])&&t(a[0],a[1],i[0],i[1],r[0],r[1])&&(c=2),l=s.length,o=0;c>o;o+=1){for(m=o/(c-1),d=0,h=0;l>h;h+=1)p=Math.pow(1-m,3)*a[h]+3*Math.pow(1-m,2)*m*s[h]+3*(1-m)*Math.pow(m,2)*r[h]+Math.pow(m,3)*i[h],u[h]=p,null!==y[h]&&(d+=Math.pow(u[h]-y[h],2)),y[h]=u[h];d&&(d=Math.sqrt(d),f+=d),g.segments.push({l:f,p:m})}return g.addedLength=f,e[n]=g,g}}();return{getEasingCurve:a,getEasingCurveByIndex:e,getBezierLength:h,getNewSegment:r,buildBezierData:i}}function dataFunctionManager(){function t(t,e,a){var i,s=h(t,e,a),r=[];for(i=0;e>i;i+=1)r.push(Math.floor(s[i]*x));return r}function e(t,e){var a,i,s,r=t.length;for(a=0;r>a;a+=1)if(void 0!==t[a].t)if(t[a].s instanceof Array)for(s=t[a].s.length,i=0;s>i;i+=1)t[a].s[i]*=e,void 0!==t[a].e&&(t[a].e[i]*=e);else t[a].s&&(t[a].s*=e,t[a].e&&(t[a].e*=e));else t[a]=t[a]*e}function a(n,h){h||(h=n);var l,p,m,d,c,f,u,y,g,v,x=n.length;for(f=0;x>f;f+=1){if(m=n[f],l=m.outPoint-m.startTime,p=m.startTime,m.layerName=o(m.layerName),m.parent&&(m.parent=o(m.parent)),m.tt&&(n[f-1].td=m.tt),m.renderedFrame={},m.renderedData={},d=[],c=-1,m.tm&&(m.trmp=m.tm,m.tm=t(m.tm,l,p)),m.ks.o instanceof Array?e(m.ks.o,.01):m.ks.o/=100,m.ks.s instanceof Array?e(m.ks.s,.01):m.ks.s/=100,m.ks.r instanceof Array?e(m.ks.r,E):m.ks.r*=E,m.hasMask){var b=m.masksProperties;for(y=b.length,u=0;y>u;u+=1)if(b[u].pt.i)r(b[u].pt);else for(v=b[u].pt.length,g=0;v>g;g+=1)b[u].pt[g].s&&r(b[u].pt[g].s[0]),b[u].pt[g].e&&r(b[u].pt[g].e[0])}"PreCompLayer"==m.type?m.refId&&!m.layers?m.layers=i(m.refId,h):a(m.layers,h):"ShapeLayer"==m.type&&s(m.shapes)}}function i(t,e,a){a||(a=e);var s,r=e.length;for(s=0;r>s;s+=1){if(e[s].compId==t)return e[s].layers||(e[s].layers=i(e[s].refId,a)),e[s].layers;if("PreCompLayer"==e[s].type){var n=i(t,e[s].layers,a);if(n)return n}}return null}function s(t,a){var i,n,o,h,l=t.length,p=a?a:!1;for(i=l-1;i>=0;i-=1)if(t[i].renderedData=[],"tm"==t[i].ty&&(p=!0),"fl"==t[i].ty||"st"==t[i].ty)t[i].o instanceof Array?e(t[i].o,.01):t[i].o*=.01;else if("sh"==t[i].ty)if(t[i].trimmed=p,t[i].ks.i)r(t[i].ks);else for(o=t[i].ks.length,n=0;o>n;n+=1)t[i].ks[n].s&&(r(t[i].ks[n].s[0]),r(t[i].ks[n].e[0]));else"gr"==t[i].ty?s(t[i].it,p):"tr"==t[i].ty?(h=t[i],h.renderedData=[],h.o instanceof Array?e(h.o,.01):h.o/=100,h.s instanceof Array?e(h.s,.01):h.s/=100,h.r instanceof Array?e(h.r,E):h.r*=E):"rc"==t[i].ty&&(t[i].trimmed=p,t[i].trimmed=!0)}function r(t){var e,a=t.i.length;for(e=0;a>e;e+=1)t.i[e][0]+=t.v[e][0],t.i[e][1]+=t.v[e][1],t.o[e][0]+=t.v[e][0],t.o[e][1]+=t.v[e][1]}function n(t){C[t._id]={data:t,renderedFrames:[]},x=t.animation.frameRate,a(t.animation.layers)}function o(t){return t=t.replace(/ /g,"_"),t=t.replace(/-/g,"_"),t=t.replace(/\./g,"_"),t=t.replace(/\//g,"_")}function h(t,e,a){var i,s,r=[];if(!(t instanceof Array)||null===t[0].t)return r.push(t),r;var n,o;r=[];var h,l,p,m=[];s=t.length;var d,c,f;for(i=0;s>i;i+=1)n=t[i],n.t-=a;var u=0,y=0;for(i=0;e>i;i+=1){h=u;for(var g=!1;s-1>h;){if(n=t[h],o=t[h+1],i<n.t&&0===h){for(p=n.s.length,m=[],l=0;p>l;l+=1)m.push(n.s[l]);r.push(m),g=!0,u!=h&&(u=h,y=0);break}if(i>=n.t&&i<o.t){if(m=[],n.to){d=bez.getEasingCurve(n.o.x,n.o.y,n.i.x,n.i.y)("",i-n.t,0,1,o.t-n.t),c=n.bezierData;var v,x,b=c.segmentLength*d;for(l=y;l<c.points.length;){if(0===i||0===b||0===d){m=c.points[l].point,y=l;break}if(l==c.points.length-1)m=c.points[l].point;else if(b>c.points[l].partialLength&&b<c.points[l+1].partialLength){for(v=c.points[l].point.length,x=(b-c.points[l].partialLength)/(c.points[l+1].partialLength-c.points[l].partialLength),f=0;v>f;f+=1)m.push(c.points[l].point[f]+(c.points[l+1].point[f]-c.points[l].point[f])*x);y=l;break}l+=1}}else{var C,E,D,S;n.s.forEach(function(t,e){if(1!==n.h&&(n.o.x instanceof Array?(C=n.o.x[e],E=n.o.y[e],D=n.i.x[e],S=n.i.y[e]):(C=n.o.x,E=n.o.y,D=n.i.x,S=n.i.y),d=bez.getEasingCurve(C,E,D,S)("",i-n.t,0,1,o.t-n.t)),t.i){var a={i:[],o:[],v:[]};t.i.forEach(function(i,s){var r=[],o=[],h=[];i.forEach(function(a,i){1===n.h?(r.push(a),o.push(t.o[s][i]),h.push(t.v[s][i])):(r.push(a+(n.e[e].i[s][i]-a)*d),o.push(t.o[s][i]+(n.e[e].o[s][i]-t.o[s][i])*d),h.push(t.v[s][i]+(n.e[e].v[s][i]-t.v[s][i])*d))}),a.i.push(r),a.o.push(o),a.v.push(h)}),m.push(a)}else m.push(1===n.h?t:t+(n.e[e]-t)*d)})}r.push(m),g=!0,u!=h&&(u=h,y=0);break}h+=1}g===!1&&(n=t[t.length-2],m=[],n.e.forEach(function(t){m.push(t)}),r.push(m))}for(h=r.length;e>h;)r.push(m),h+=1;return r}function l(t,e,a,i){var s,r,n,o,h,l;if(!t.length)return"p"==i.type?(w.px=t,w.py=t):"s"==i.type?(w.sx=t,w.sy=t):("r"==i.type||"px"==i.type||"py"==i.type)&&(w[i.type]=t),i.toArray?[t]:t;if(void 0===t[0].t)return"p"==i.type?(w.px=t[0],w.py=t[1]):"s"==i.type?(w.sx=t[0],w.sy=t[1]):("r"==i.type||"px"==i.type||"py"==i.type)&&(w[i.type]=t[0]),t;h=0,l=t.length-1;for(var p=1,m=!0;!(!m||(s=t[h],r=t[h+1],h==l-1&&e>=r.t-a)||r.t-a>e&&1==p);){if(r.t-a<e&&-1==p){h+=1,s=t[h],r=t[h+1];break}l-1>h&&1==p||h>0&&-1==p?h+=p:m=!1}s.to&&!s.bezierData&&bez.buildBezierData(s);var d,c,f,u,y,g=0;if("default"==i.type&&(n=[]),s.to){if(o=s.bezierData,e>=r.t-a)return"p"==i.type?(w.px=o.points[o.points.length-1].point[0],w.py=o.points[o.points.length-1].point[1]):"s"==i.type?(w.sx=o.points[o.points.length-1].point[0],w.sy=o.points[o.points.length-1].point[1]):("r"==i.type||"px"==i.type||"py"==i.type)&&(w[i.type]=o.points[o.points.length-1].point[0]),o.points[o.points.length-1].point;if(e<s.t-a)return"p"==i.type?(w.px=o.points[0].point[0],w.py=o.points[0].point[1]):"s"==i.type?(w.sx=o.points[0].point[0],w.sy=o.points[0].point[1]):("r"==i.type||"px"==i.type||"py"==i.type)&&(w[i.type]=o.points[0].point[0]),o.points[0].point;s.__fnct?y=s.__fnct:(y=bez.getEasingCurve(s.o.x,s.o.y,s.i.x,s.i.y,s.n),s.__fnct=y),f=y("",e-(s.t-a),0,1,r.t-a-(s.t-a));var v,x=o.segmentLength*f,b=0;for(p=1,m=!0,u=o.points.length;m;){if(b+=o.points[g].partialLength*p,0===x||0===f){"p"==i.type?(w.px=o.points[g].point[0],w.py=o.points[g].point[1]):"s"==i.type?(w.sx=o.points[g].point[0],w.sy=o.points[g].point[1]):"r"==i.type||"px"==i.type||"py"==i.type?w[i.type]=o.points[g].point[0]:n=o.points[g].point;break}if(g==o.points.length-1){"p"==i.type?(w.px=o.points[g].point[0],w.py=o.points[g].point[1]):"s"==i.type?(w.sx=o.points[g].point[0],w.sy=o.points[g].point[1]):"r"==i.type||"px"==i.type||"py"==i.type?w[i.type]=o.points[g].point[0]:n=o.points[g].point;break}if(x>b&&x<b+o.points[g+1].partialLength){if(v=(x-b)/o.points[g+1].partialLength,"p"==i.type)w.px=o.points[g].point[0]+(o.points[g+1].point[0]-o.points[g].point[0])*v,w.py=o.points[g].point[1]+(o.points[g+1].point[1]-o.points[g].point[1])*v;else if("s"==i.type)w.sx=o.points[g].point[0]+(o.points[g+1].point[0]-o.points[g].point[0])*v,w.sy=o.points[g].point[1]+(o.points[g+1].point[1]-o.points[g].point[1])*v;else if("r"==i.type||"px"==i.type||"py"==i.type)w[i.type]=o.points[g].point[0]+(o.points[g+1].point[0]-o.points[g].point[0])*v;else for(c=o.points[g].point.length,d=0;c>d;d+=1)n.push(o.points[g].point[d]+(o.points[g+1].point[d]-o.points[g].point[d])*v);break}u-1>g&&1==p||g>0&&-1==p?g+=p:m=!1}}else{var C,E,D,S,M=!1;for(l=s.s.length,h=0;l>h;h+=1)1!==s.h&&(s.o.x instanceof Array?(M=!0,C=s.o.x[h]?s.o.x[h]:s.o.x[0],E=s.o.y[h]?s.o.y[h]:s.o.y[0],D=s.i.x[h]?s.i.x[h]:s.i.x[0],S=s.i.y[h]?s.i.y[h]:s.i.y[0],s.__fnct||(s.__fnct=[])):(M=!1,C=s.o.x,E=s.o.y,D=s.i.x,S=s.i.y),M?s.__fnct[h]?y=s.__fnct[h]:(y=bez.getEasingCurve(C,E,D,S),s.__fnct[h]=y):s.__fnct?y=s.__fnct:(y=bez.getEasingCurve(C,E,D,S),s.__fnct=y),f=e>=r.t-a?1:e<s.t-a?0:y("",e-(s.t-a),0,1,r.t-a-(s.t-a))),1===s.h?"p"==i.type?0===h?w.px=s.s[h]:1==h&&(w.py=s.s[h]):"s"==i.type?0===h?w.sx=s.s[h]:1==h&&(w.sy=s.s[h]):"px"==i.type||"py"==i.type||"r"==i.type?w[i.type]=s.s[h]:n.push(s.s[h]):"p"==i.type?0===h?w.px=s.s[h]+(s.e[h]-s.s[h])*f:1==h&&(w.py=s.s[h]+(s.e[h]-s.s[h])*f):"s"==i.type?0===h?w.sx=s.s[h]+(s.e[h]-s.s[h])*f:1==h&&(w.sy=s.s[h]+(s.e[h]-s.s[h])*f):"px"==i.type||"py"==i.type||"r"==i.type?w[i.type]=s.s[h]+(s.e[h]-s.s[h])*f:n.push(s.s[h]+(s.e[h]-s.s[h])*f)}return n}function p(t,e){if(!t.__lengths){t.__lengths=[],t.__totalLength=0;var a,i=t.v,s=t.o,r=t.i,n=i.length;for(a=0;n-1>a;a+=1)t.__lengths.push(bez.getBezierLength(i[a],i[a+1],s[a],r[a+1])),t.__totalLength+=t.__lengths[a].addedLength;e&&(t.__lengths.push(bez.getBezierLength(i[a],i[0],s[a],r[0])),t.__totalLength+=t.__lengths[a].addedLength)}}function m(t,e,a,i,s,r){var n=r&&r.length>0,o={};o.closed=s?t.cl:t.closed;var h=s?t.pt:t.ks;if(h.v)return o.pathNodes=n?S(h,o.closed,r,!1):"svg"==i?h:h,o;t={i:[],o:[],v:[]};var l,p,m,d,c,f,u,y=[];if(e<h[0].t-a){if(!h.__minValue){for(p=h[0].s[0].i.length,l=0;p>l;l+=1){for(c=[],f=[],u=[],d=h[0].s[0].i[l].length,m=0;d>m;m+=1)c.push(h[0].s[0].i[l][m]),f.push(h[0].s[0].o[l][m]),u.push(h[0].s[0].v[l][m]);t.i.push(c),t.o.push(f),t.v.push(u)}y.push(t),"svg"!=i||n?h.__minValue=y[0]:h.__minValueN=y[0]}return o.pathNodes=n?S(h.__minValue,o.closed,r,!1):"svg"==i?h.__minValueN:h.__minValue,o}if(e>h[h.length-1].t-a){if(!h.__maxValue){var g=h.length-2;for(p=h[g].s[0].i.length,l=0;p>l;l+=1){for(c=[],f=[],u=[],d=h[g].s[0].i[l].length,m=0;d>m;m+=1)c.push(h[g].e[0].i[l][m]),f.push(h[g].e[0].o[l][m]),u.push(h[g].e[0].v[l][m]);t.i.push(c),t.o.push(f),t.v.push(u)}y.push(t),"svg"!=i||n?h.__maxValue=y[0]:h.__maxValueN=y[0]}return o.pathNodes=n?S(h.__maxValue,o.closed,r,!1):"svg"==i?h.__maxValueN:h.__maxValue,o}for(var v,x,b=0,C=h.length-1,E=1,D=!0;D&&(v=h[b],x=h[b+1],!(x.t-a>e&&1==E));)C-1>b&&1==E||b>0&&-1==E?b+=E:D=!1;var w,M,F,I,A;if(1!==v.h){w=v.o.x,M=v.o.y,F=v.i.x,I=v.i.y;var P;v.__fnct?P=v.__fnct:(P=bez.getEasingCurve(w,M,F,I),v.__fnct=P),A=P("",e-(v.t-a),0,1,x.t-a-(v.t-a)),e>=x.t-a?A=1:e<v.t-a&&(A=0)}if(1===v.h&&v.__hValue)y.push(v.__hValue);else for(t={i:[],o:[],v:[]},p=v.s[0].i.length,l=0;p>l;l+=1){for(c=[],f=[],u=[],d=v.s[0].i[l].length,m=0;d>m;m+=1)1===v.h?(c.push(v.s[0].i[l][m]),f.push(v.s[0].o[l][m]),u.push(v.s[0].v[l][m])):(c.push(v.s[0].i[l][m]+(v.e[0].i[l][m]-v.s[0].i[l][m])*A),f.push(v.s[0].o[l][m]+(v.e[0].o[l][m]-v.s[0].o[l][m])*A),u.push(v.s[0].v[l][m]+(v.e[0].v[l][m]-v.s[0].v[l][m])*A));t.i.push(c),t.o.push(f),t.v.push(u),1===v.h&&(v.__hValue=t),y.push(t)}return o.pathNodes=n?S(y[0],o.closed,r,!1):"svg"==i?y[0]:y[0],o}function d(t,e,a){var i,s,r,n,o,h,p,c,u,y=t.length;for(c=0;y>c;c+=1)if(u=t[c],n=e-u.startTime,!u.an[n]){if(i={},D.arrayFlag=!1,D.type="default",i.a=l(u.ks.a,n,u.startTime,D),i.o=l(u.ks.o,n,u.startTime,D),D.arrayFlag=!1,u.ks.p.s?(D.type="px",l(u.ks.p.x,n,u.startTime,D),D.type="py",l(u.ks.p.y,n,u.startTime,D)):(D.type="p",l(u.ks.p,n,u.startTime,D)),D.arrayFlag=!0,D.type="r",l(u.ks.r,n,u.startTime,D),D.arrayFlag=!0,D.type="s",l(u.ks.s,n,u.startTime,D),p={},p.an={tr:i},D.arrayFlag=!1,D.type="default",p.an.matrixArray="canvas"==a?b.getMatrixArrayFromParams(w.r,w.sx,w.sy,w.px,w.py):b.getMatrixArrayFromParams(w.r,w.sx,w.sy,w.px,w.py),u.renderedData[n]=p,u.hasMask){s=u.masksProperties,h=s.length;var g;for(o=0;h>o;o+=1)if(s[o].paths||(s[o].paths=[],s[o].opacity=[]),"f"==s[o].mode&&o>0&&"svg"==a){var v=g.paths[n];v.pathNodes=v.pathNodes.constructor===Array?v.pathNodes:[v.pathNodes],v.pathNodes.push(m(s[o],n,u.startTime,a,!0).pathNodes)}else s[o].paths[n]=m(s[o],n,u.startTime,a,!0),s[o].opacity[n]=l(s[o].o,n,u.startTime,D),s[o].opacity[n]=s[o].opacity[n]instanceof Array?s[o].opacity[n][0]/100:s[o].opacity[n]/100,g=s[o]}e<u.inPoint||e>u.outPoint||("PreCompLayer"==u.type?(r=u.tm?u.tm[n]<0?0:n>=u.tm.length?u.tm[u.tm.length-1]:u.tm[n]:n,void 0===r&&(r=l(u.trmp,n,0,D)[0]*x,u.tm[n]=r),d(u.layers,r,a)):"ShapeLayer"==u.type&&f(u.shapes,n,u.startTime,a))}}function c(t,e,a){var i=[],s=[],r=[],n=a/2;return a*=1,i.push([t[0]+e[0]/2,t[1]-e[1]/2+a]),r.push(i[0]),s.push([t[0]+e[0]/2,t[1]-e[1]/2+n]),i.push([t[0]+e[0]/2,t[1]+e[1]/2-a]),r.push([t[0]+e[0]/2,t[1]+e[1]/2-n]),s.push(i[1]),i.push([t[0]+e[0]/2-a,t[1]+e[1]/2]),r.push(i[2]),s.push([t[0]+e[0]/2-n,t[1]+e[1]/2]),i.push([t[0]-e[0]/2+a,t[1]+e[1]/2]),r.push([t[0]-e[0]/2+n,t[1]+e[1]/2]),s.push(i[3]),i.push([t[0]-e[0]/2,t[1]+e[1]/2-a]),r.push(i[4]),s.push([t[0]-e[0]/2,t[1]+e[1]/2-n]),i.push([t[0]-e[0]/2,t[1]-e[1]/2+a]),r.push([t[0]-e[0]/2,t[1]-e[1]/2+n]),s.push(i[5]),i.push([t[0]-e[0]/2+a,t[1]-e[1]/2]),r.push(i[6]),s.push([t[0]-e[0]/2+n,t[1]-e[1]/2]),i.push([t[0]+e[0]/2-a,t[1]-e[1]/2]),r.push([t[0]+e[0]/2-n,t[1]-e[1]/2]),s.push(i[7]),{v:i,o:r,i:s,c:!0}}function f(t,e,a,i,s){var r,n,o,h,p,d,y,g,v,x,C=t.length;s||(s=[]);var E,M,F,I,A;for(r=C-1;r>=0;r-=1)if(n=t[r],"sh"==n.ty)n.renderedData[e]={path:m(n,e,a,i,!1,s)};else if("fl"==n.ty)o=l(n.c,e,a,D),h=l(n.o,e,a,D),n.renderedData[e]={opacity:h instanceof Array?h[0]:h},"canvas"==i?(u(o),n.renderedData[e].color=o):n.renderedData[e].color=rgbToHex(Math.round(o[0]),Math.round(o[1]),Math.round(o[2]));else if("rc"==n.ty)p=l(n.p,e,a,D),d=l(n.s,e,a,D),y=l(n.r,e,a,D),n.trimmed?(n.renderedData[e]={path:{closed:!0}},n.renderedData[e].path.pathNodes=S(c(p,d,y),!0,s,!1)):n.renderedData[e]={position:p,size:d,roundness:y};else if("el"==n.ty){if(p=l(n.p,e,a,D),d=l(n.s,e,a,D),n.renderedData[e]={p:p,size:d},"svg"==i){var P={v:[],i:[],o:[]};P.v.push([p[0],p[1]-d[1]/2]),P.o.push([p[0]-d[0]/2*.55,p[1]-d[1]/2]),P.i.push([p[0]+d[0]/2*.55,p[1]-d[1]/2]),P.v.push([p[0]-d[0]/2,p[1]]),P.o.push([p[0]-d[0]/2,p[1]+d[1]/2*.55]),P.i.push([p[0]-d[0]/2,p[1]-d[1]/2*.55]),P.v.push([p[0],p[1]+d[1]/2]),P.o.push([p[0]+d[0]/2*.55,p[1]+d[1]/2]),P.i.push([p[0]-d[0]/2*.55,p[1]+d[1]/2]),P.v.push([p[0]+d[0]/2,p[1]]),P.o.push([p[0]+d[0]/2,p[1]-d[1]/2*.55]),P.i.push([p[0]+d[0]/2,p[1]+d[1]/2*.55]),n.renderedData[e].path={pathNodes:P},n.closed=!0}}else if("st"==n.ty){if(g=l(n.c,e,a,D),v=l(n.o,e,a,D),x=l(n.w,e,a,D),n.renderedData[e]={opacity:v instanceof Array?v[0]:v,width:x instanceof Array?x[0]:x},n.d){var _=[];A=n.d.length;var T;for(I=0;A>I;I+=1)T=l(n.d[I].v,e,a,D),_.push({v:T instanceof Array?T[0]:T,n:n.d[I].n});n.renderedData[e].dashes=_}"canvas"==i?(u(g),n.renderedData[e].color=g):n.renderedData[e].color=rgbToHex(Math.round(g[0]),Math.round(g[1]),Math.round(g[2]))}else if("tr"==n.ty)n.renderedData[e]={a:l(n.a,e,a,D),o:l(n.o,e,a,D)},D.arrayFlag=!0,D.type="s",l(n.s,e,a,D),D.arrayFlag=!0,D.type="r",l(n.r,e,a,D),D.arrayFlag=!1,D.type="p",l(n.p,e,a,D),D.arrayFlag=!1,D.type="default",n.renderedData[e].mtArr="canvas"==i?b.getMatrixArrayFromParams(w.r,w.sx,w.sy,w.px,w.py):b.getMatrixArrayFromParams(w.r,w.sx,w.sy,w.px,w.py);else if("tm"==n.ty){E=l(n.s,e,a,D),M=l(n.e,e,a,D),F=l(n.o,e,a,D);var k={s:E,e:M,o:F};s.push(k),n.renderedData[e]=k}else"gr"==n.ty&&f(n.it,e,a,i,s)}function u(t){var e,a=t.length;for(e=0;a>e;e+=1)t[e]=Math.round(t[e])}function y(t,e){for(var a=1;a>0;){if(e+=1,e>=t.data.animation.totalFrames){t.renderFinished=!0;break}t.renderedFrames[e]||(g(t.data._id,e),a-=1)}}function g(t,e){return 2==C[t].renderedFrames[e]?void(C[t].renderFinished||y(C[t],e)):(x=C[t].data.animation.frameRate,C[t].renderedFrames[e]=2,void d(C[t].data.animation.layers,e,C[t].data._animType))}function v(t){var e,a=C[t].data,i=a.animation.totalFrames,s=[];for(e=0;i>e;e+=1)s.push({num:e,data:g(t,e)})}var x=0,b=new MatrixManager,C={},E=Math.PI/180,D={arrayFlag:!1},S=function(){function t(t,r,n,p){i[o]=r,e[o+1]=n,a[o+1]=p,h?a[o]=t:(l+=" M"+t.join(","),h=!0,s[o]=t),l+=" C"+r.join(",")+" "+n.join(",")+" "+p.join(","),o+=1}var e,a,i,s,r,n,o,h=!1,l="";return function(m,d,c,f){p(m,d);var u,y=c.length,g=m;a=e=i=s=null;var v,x,b,C,E;for(u=y-1;u>=0;u-=1){var D=[],S=c[u].o%360/360;if(0!==S||0!==c[u].s||100!=c[u].e){l="",h=!1,e=[],i=[],a=[],s=[],r=[],n=0,0>S&&(S+=1);var w=c[u].s/100+S,M=c[u].e/100+S;if(w==M)return f?"":{};if(w>M){var F=w;w=M,M=F}1>=M?D.push({s:g.__totalLength*w,e:g.__totalLength*M}):w>=1?D.push({s:g.__totalLength*(w-1),e:g.__totalLength*(M-1)}):(D.push({s:g.__totalLength*w,e:g.__totalLength}),D.push({s:0,e:g.__totalLength*(M-1)})),v=[],x=[],b=[];var I;v=g.v,x=g.o,b=g.i,I=g.__lengths,E=v.length;var A,P,_=0,T=0,k=D.length;for(o=0,A=0;k>A;A+=1){for(_=0,C=1;E>C;C++)if(T=I[C-1].addedLength,_+T<D[A].s)_+=T;else{if(_>D[A].e)break;D[A].s<=_&&D[A].e>=_+T?t(v[C-1],x[C-1],b[C],v[C],I[C-1]):(P=bez.getNewSegment(v[C-1],v[C],x[C-1],b[C],(D[A].s-_)/T,(D[A].e-_)/T,I[C-1]),t(P.pt1,P.pt3,P.pt4,P.pt2)),_+=T}d!==!1?_<=D[A].e&&(T=I[C-1].addedLength,D[A].s<=_&&D[A].e>=_+T?t(v[C-1],x[C-1],b[0],v[0],I[C-1]):(P=bez.getNewSegment(v[C-1],v[0],x[C-1],b[0],(D[A].s-_)/T,(D[A].e-_)/T,I[C-1]),t(P.pt1,P.pt3,P.pt4,P.pt2))):h=!1}d=!1}}if(a?(v=a,x=i,b=e):(v=g.v,x=g.o,b=g.i,s=[]),E=v.length,f){for(l="",C=1;E>C;C++)s[C-1]?l+="M"+s[C-1].join(","):1==C&&(l+="M"+v[0].join(",")),l+=" C"+x[C-1].join(",")+" "+b[C].join(",")+" "+v[C].join(",");return d!==!1&&(l+=" C"+x[C-1].join(",")+" "+b[0].join(",")+" "+v[0].join(",")),l}return{i:b,o:x,v:v,s:s,c:d}}}(),w={r:0,sx:1,sy:1,px:1,py:1},M={};return M.completeData=n,M.renderFrame=g,M.renderAllFrames=v,M}function SVGRenderer(t){this.animationItem=t,this.layers=null,this.lastFrame=-1,this.globalData={frameNum:-1},this.elements=[]}function CanvasRenderer(t,e){this.animationItem=t,this.renderConfig=e?e:{clearCanvas:!0,context:null,scaleMode:"fit"},this.lastFrame=-1,this.globalData={frameNum:-1},this.contextData={saved:new Array(15),savedOp:new Array(15),cArrPos:0,cTr:new Matrix,cO:1};var a,i=15;for(a=0;i>a;a+=1)this.contextData.saved[a]=new Array(6);this.elements=[]}function MaskElement(t){this.data=null,this.element=null,this.globalData=t,this.paths=[]}function ICompElement(t,e,a,i){this.parent.constructor.call(this,t,e,a,i),this.layers=t.layers}function IImageElement(t,e,a,i){this.animationItem=e,this.assets=this.animationItem.getAssets(),this.path=this.animationItem.getPath(),this.parent.constructor.call(this,t,e,a,i)}function IShapeElement(t,e,a,i){this.shapes=[],this.parent.constructor.call(this,t,e,a,i)}function ShapeItemElement(t,e,a){this.stylesList=[],this.viewData=[],this.shape=e,this.data=t,this.globalData=a,this.searchShapes(this.data,this.viewData),styleUnselectableDiv(this.shape)}function ISolidElement(t,e,a,i){this.parent.constructor.call(this,t,e,a,i)}function ITextElement(t,e,a,i){this.parent.constructor.call(this,t,e,a,i)}function CVBaseElement(t,e){this.data=t,this.globalData=e,this.canvasContext=e.canvasContext,this.currentAnimData=null,this.renderFrame=!1,this.ownMatrix=new Matrix,this.finalTransform={mat:new Matrix,opacity:1},this.init()}function CVCompElement(t,e){this.parent.constructor.call(this,t,e),this.layers=t.layers}function CVImageElement(t,e){this.animationItem=e.renderer.animationItem,this.assets=this.animationItem.getAssets(),this.path=this.animationItem.getPath(),this.parent.constructor.call(this,t,e),this.animationItem.pendingElements+=1}function CVShapeElement(t,e){this.shapes=[],this.parent.constructor.call(this,t,e)}function CVShapeItemElement(t,e,a){this.data=t,this.globalData=a,this.canvasContext=a.canvasContext,this.frameNum=-1,this.dataLength=this.data.length,this.mainFlag=e,this.stylesList=[],this.ownStylesList=[],this.stylesPool=[],this.currentStylePoolPos=0,this.transform={opacity:1,mat:new Matrix},this.mat=new Matrix;var i,s=this.dataLength-1;this.renderedPaths=new Array(this.globalData.totalFrames);var r;for(i=s;i>=0;i-=1)"gr"==this.data[i].ty?this.data[i].item=new CVShapeItemElement(this.data[i].it,!1,this.globalData):("st"==this.data[i].ty||"fl"==this.data[i].ty)&&(r={type:"fill",styleOpacity:0,opacity:0,value:"rgba(0,0,0,0)",closed:!1},"fl"==this.data[i].ty?r.type="fill":(r.type="stroke",r.width=0),this.stylesPool.push(r))}function CVSolidElement(t,e){this.parent.constructor.call(this,t,e)}function CVTextElement(t,e){this.parent.constructor.call(this,t,e)}function CVMaskElement(){}var svgNS="http://www.w3.org/2000/svg";Matrix.prototype={concat:function(t){return this.clone()._t(t.a,t.b,t.c,t.d,t.e,t.f)},flipX:function(){return this._t(-1,0,0,1,0,0)},flipY:function(){return this._t(1,0,0,-1,0,0)},reflectVector:function(t,e){var a=this.applyToPoint(0,1),i=2*(a.x*t+a.y*e);return t-=i*a.x,e-=i*a.y,{x:t,y:e}},reset:function(){return this.setTransform(1,0,0,1,0,0)},rotate:function(t){return 0===t?this:(this.cos=Math.cos(t),this.sin=Math.sin(t),this._t(this.cos,this.sin,-this.sin,this.cos,0,0))},rotateFromVector:function(t,e){return this.rotate(Math.atan2(e,t))},rotateDeg:function(t){return this.rotate(t*Math.PI/180)},scaleU:function(t){return this._t(t,0,0,t,0,0)},scale:function(t,e){return 1==t&&1==e?this:this._t(t,0,0,e,0,0)},scaleX:function(t){return this._t(t,0,0,1,0,0)},scaleY:function(t){return this._t(1,0,0,t,0,0)},shear:function(t,e){return this._t(1,e,t,1,0,0)},shearX:function(t){return this._t(1,0,t,1,0,0)},shearY:function(t){return this._t(1,t,0,1,0,0)},skew:function(t,e){return this.shear(Math.tan(t),Math.tan(e))},skewX:function(t){return this.shearX(Math.tan(t))},skewY:function(t){return this.shearY(Math.tan(t))},setTransform:function(t,e,a,i,s,r){return this.props[0]=t,this.props[1]=e,this.props[2]=a,this.props[3]=i,this.props[4]=s,this.props[5]=r,this._x()},translate:function(t,e){return this._t(1,0,0,1,t,e)},translateX:function(t){return this._t(1,0,0,1,t,0)},translateY:function(t){return this._t(1,0,0,1,0,t)},transform:function(t,e,a,i,s,r){return this.a1=this.props[0],this.b1=this.props[1],this.c1=this.props[2],this.d1=this.props[3],this.e1=this.props[4],this.f1=this.props[5],this.props[0]=this.a1*t+this.c1*e,this.props[1]=this.b1*t+this.d1*e,this.props[2]=this.a1*a+this.c1*i,this.props[3]=this.b1*a+this.d1*i,this.props[4]=this.a1*s+this.c1*r+this.e1,this.props[5]=this.b1*s+this.d1*r+this.f1,this._x()},divide:function(t){if(!t.isInvertible())throw"Input matrix is not invertible";var e=t.inverse();return this._t(e.a,e.b,e.c,e.d,e.e,e.f)},divideScalar:function(t){var e=this;return e.a/=t,e.b/=t,e.c/=t,e.d/=t,e.e/=t,e.f/=t,e._x()},inverse:function(){if(this.isIdentity())return new Matrix;if(this.isInvertible()){var t=this,e=t.a,a=t.b,i=t.c,s=t.d,r=t.e,n=t.f,o=new Matrix,h=e*s-a*i;return o.a=s/h,o.b=-a/h,o.c=-i/h,o.d=e/h,o.e=(i*n-s*r)/h,o.f=-(e*n-a*r)/h,o}throw"Matrix is not invertible."},interpolate:function(t,e,a){var i=this,s=a?new Matrix(a):new Matrix;return s.a=i.a+(t.a-i.a)*e,s.b=i.b+(t.b-i.b)*e,s.c=i.c+(t.c-i.c)*e,s.d=i.d+(t.d-i.d)*e,s.e=i.e+(t.e-i.e)*e,s.f=i.f+(t.f-i.f)*e,s._x()},interpolateAnim:function(t,e,a){var i=this,s=a?new Matrix(a):new Matrix,r=i.decompose(),n=t.decompose(),o=r.rotation+(n.rotation-r.rotation)*e,h=r.translate.x+(n.translate.x-r.translate.x)*e,l=r.translate.y+(n.translate.y-r.translate.y)*e,p=r.scale.x+(n.scale.x-r.scale.x)*e,m=r.scale.y+(n.scale.y-r.scale.y)*e;return s.translate(h,l),s.rotate(o),s.scale(p,m),s._x()},decompose:function(t){var e=this.props[0],a=this.props[1],i=this.props[2],s=this.props[3],r=Math.acos,n=Math.atan,o=Math.sqrt,h=Math.PI,l={x:this.props[4],y:this.props[5]},p=0,m={x:1,y:1},d={x:0,y:0},c=e*s-a*i;if(t)e?(d={x:n(i/e),y:n(a/e)},m={x:e,y:c/e}):a?(p=.5*h,m={x:a,y:c/a},d.x=n(s/a)):(m={x:i,y:s},d.x=.25*h);else if(e||a){var f=o(e*e+a*a);p=a>0?r(e/f):-r(e/f),m={x:f,y:c/f},d.x=n((e*i+a*s)/(f*f))}else if(i||s){var u=o(i*i+s*s);p=.5*h-(s>0?r(-i/u):-r(i/u)),m={x:c/u,y:u},d.y=n((e*i+a*s)/(u*u))}else m={x:0,y:0};return{scale:m,translate:l,rotation:p,skew:d}},determinant:function(){return this.a*this.d-this.b*this.c},applyToPoint:function(t,e){return{x:t*this.props[0]+e*this.props[2]+this.props[4],y:t*this.props[1]+e*this.props[3]+this.props[5]}},applyToPointStringified:function(t,e){return t*this.props[0]+e*this.props[2]+this.props[4]+","+(t*this.props[1]+e*this.props[3]+this.props[5])},applyToArray:function(t){var e,a,i=0,s=[];if("number"==typeof t[0])for(a=t.length;a>i;)e=this.applyToPoint(t[i++],t[i++]),s.push(e.x,e.y);else for(a=t.length,i=0;a>i;i++)s.push(this.applyToPoint(t[i].x,t[i].y));return s},applyToTypedArray:function(t,e){for(var a,i=0,s=t.length,r=e?new Float64Array(s):new Float32Array(s);s>i;)a=this.applyToPoint(t[i],t[i+1]),r[i++]=a.x,r[i++]=a.y;return r},applyToContext:function(t){var e=this;return t.setTransform(e.a,e.b,e.c,e.d,e.e,e.f),e},isIdentity:function(){var t=this;return t._q(t.a,1)&&t._q(t.b,0)&&t._q(t.c,0)&&t._q(t.d,1)&&t._q(t.e,0)&&t._q(t.f,0)},isInvertible:function(){return!this._q(this.determinant(),0)},isValid:function(){return!this._q(this.a*this.d,0)},clone:function(t){var e=this,a=new Matrix;return a.a=e.a,a.b=e.b,a.c=e.c,a.d=e.d,a.e=e.e,a.f=e.f,t||(a.context=e.context),a},isEqual:function(t){var e=this,a=e._q;return a(e.a,t.a)&&a(e.b,t.b)&&a(e.c,t.c)&&a(e.d,t.d)&&a(e.e,t.e)&&a(e.f,t.f)},toArray:function(){return[this.props[0],this.props[1],this.props[2],this.props[3],this.props[4],this.props[5]]},toCSS:function(){return this.cssParts[1]=this.props.join(","),this.cssParts.join("")},toJSON:function(){var t=this;return'{"a":'+t.a+',"b":'+t.b+',"c":'+t.c+',"d":'+t.d+',"e":'+t.e+',"f":'+t.f+"}"},toString:function(){return""+this.toArray()},_q:function(t,e){return Math.abs(t-e)<1e-14},_x:function(){return this.context&&this.context.setTransform(this.a,this.b,this.c,this.d,this.e,this.f),this}},void 0===CanvasRenderingContext2D.prototype.ellipse&&(CanvasRenderingContext2D.prototype.ellipse=function(t,e,a,i,s,r,n,o){this.save(),this.translate(t,e),this.rotate(s),this.scale(a,i),this.arc(0,0,1,r,n,o),this.restore()});var BM_Path2D;!function(){function t(t){if(this.ops_=[],void 0!==t)if("string"==typeof t)try{this.ops_=parser.parse(t)}catch(e){}else{if(!t.hasOwnProperty("ops_"))throw"Error: "+typeof t+"is not a valid argument to Path";this.ops_=t.ops_.slice(0)}}function e(t){return function(){var e,a=arguments.length,i=[];for(e=0;a>e;e+=1)i.push(arguments[e]);this.ops_.push({type:t,args:i})}}for(var a=CanvasRenderingContext2D.prototype,i=BM_CanvasRenderingContext2D.prototype,s=["closePath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","rect","arc","arcTo","ellipse"],r=0;r<s.length;r++){var n=s[r];t.prototype[n]=e(n)}t.prototype.addPath=function(t,e){var a=!1;!e||1==e[0]&&0===e[1]&&0===e[2]&&1==e[3]&&0===e[4]&&0===e[5]||(a=!0,this.ops_.push({type:"save",args:[]}),this.ops_.push({type:"transform",args:[e[0],e[1],e[2],e[3],e[4],e[5]]})),this.ops_=this.ops_.concat(t.ops_),a&&this.ops_.push({type:"restore",args:[]})};var o=a.fill,h=a.stroke,l=a.clip;i.fill=function(e){if(e instanceof t){this.renderer.canvasContext.beginPath();for(var a=0,i=e.ops_.length;i>a;a++){var s=e.ops_[a];"transform"==s.type?this.renderer.ctxTransform(s.args):"save"==s.type?this.renderer.save():"restore"==s.type?this.renderer.restore():this.renderer.canvasContext[s.type].apply(this.renderer.canvasContext,s.args)}i=arguments.length;var r=[];for(a=1;i>a;a+=1)r.push(arguments[a]);o.apply(this.renderer.canvasContext,r)}else o.apply(this.renderer.canvasContext,arguments)},i.stroke=function(e){if(e instanceof t){this.renderer.canvasContext.beginPath();
-for(var a=0,i=e.ops_.length;i>a;a++){var s=e.ops_[a];this.renderer.canvasContext[s.type].apply(this.renderer.canvasContext,s.args)}h.call(this.renderer.canvasContext)}else h.call(this.renderer.canvasContext)},i.clip=function(e){if(e instanceof t){this.renderer.canvasContext.beginPath();for(var a=0,i=e.ops_.length;i>a;a++){var s=e.ops_[a];this.renderer.canvasContext[s.type].apply(this.renderer.canvasContext,s.args)}i=arguments.length;var r=[];for(a=1;i>a;a+=1)r.push(arguments[a]);l.apply(this.renderer.canvasContext,r)}else l.apply(this.renderer.canvasContext,arguments)},BM_Path2D=t}();var MatrixManager=matrixManagerFunction;!function(){for(var t=0,e=["ms","moz","webkit","o"],a=0;a<e.length&&!window.requestAnimationFrame;++a)window.requestAnimationFrame=window[e[a]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[a]+"CancelAnimationFrame"]||window[e[a]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e){var a=(new Date).getTime(),i=Math.max(0,16-(a-t)),s=window.setTimeout(function(){e(a+i)},i);return t=a+i,s}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(t){clearTimeout(t)})}();var subframeEnabled=!1,cachedColors={},rgbToHex=function(){var t,e,a=[];for(t=0;256>t;t+=1)e=t.toString(16),a[t]=1==e.length?"0"+e:e;return function(t,e,i){return 0>t&&(t=0),0>e&&(e=0),0>i&&(i=0),"#"+a[t]+a[e]+a[i]}}(),fillColorToString=function(){var t=[];return function(e,a){return t[e[0]]||(t[e[0]]=[]),t[e[0]][e[1]]||(t[e[0]][e[1]]=[]),t[e[0]][e[1]][e[2]]||(void 0!==a&&(e[3]=a),t[e[0]][e[1]][e[2]]="rgba("+e.join(",")+")"),t[e[0]][e[1]][e[2]]}}(),bez=bezFunction(),dataManager=dataFunctionManager();SVGRenderer.prototype.buildItems=function(t,e,a){var i,s=0,r=t.length;for(a||(a=this.elements),e||(e=this.animationItem.container),i=r-1;i>=0;i--){if("StillLayer"==t[i].type)s++,a[i]=this.createImage(t[i],e);else if("PreCompLayer"==t[i].type){a[i]=this.createComp(t[i],e);var n=[];this.buildItems(t[i].layers,a[i].getDomElement(),n),a[i].setElements(n)}else a[i]="SolidLayer"==t[i].type?this.createSolid(t[i],e):"ShapeLayer"==t[i].type?this.createShape(t[i],e):"TextLayer"==t[i].type?this.createText(t[i],e):this.createBase(t[i],e);t[i].td&&a[i+1].setMatte(a[i].layerId)}},SVGRenderer.prototype.createBase=function(t,e){return new BaseElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createShape=function(t,e){return new IShapeElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createText=function(t,e){return new ITextElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createImage=function(t,e){return new IImageElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createComp=function(t,e){return new ICompElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createSolid=function(t,e){return new ISolidElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.configAnimation=function(t){this.animationItem.container=document.createElementNS(svgNS,"svg"),this.animationItem.container.setAttribute("xmlns","http://www.w3.org/2000/svg"),this.animationItem.container.setAttribute("width",t.animation.compWidth),this.animationItem.container.setAttribute("height",t.animation.compHeight),this.animationItem.container.setAttribute("viewBox","0 0 "+t.animation.compWidth+" "+t.animation.compHeight),this.animationItem.container.setAttribute("preserveAspectRatio","xMidYMid meet"),this.animationItem.container.style.width="100%",this.animationItem.container.style.height="100%",this.animationItem.container.style.transformOrigin=this.animationItem.container.style.mozTransformOrigin=this.animationItem.container.style.webkitTransformOrigin=this.animationItem.container.style["-webkit-transform"]="0px 0px 0px",this.animationItem.wrapper.appendChild(this.animationItem.container);var e=document.createElementNS(svgNS,"defs");this.globalData.defs=e,this.animationItem.container.appendChild(e);var a=document.createElementNS(svgNS,"clipPath"),i=document.createElementNS(svgNS,"rect");i.setAttribute("width",t.animation.compWidth),i.setAttribute("height",t.animation.compHeight),i.setAttribute("x",0),i.setAttribute("y",0),a.setAttribute("id","animationMask"),a.appendChild(i);var s=document.createElementNS(svgNS,"g");s.setAttribute("clip-path","url(#animationMask)"),this.animationItem.container.appendChild(s),e.appendChild(a),this.animationItem.container=s,this.layers=t.animation.layers},SVGRenderer.prototype.buildStage=function(t,e,a){var i,s,r=e.length;for(a||(a=this.elements),i=r-1;i>=0;i--)s=e[i],s.parent&&this.buildItemParenting(s,a[i],e,s.parent,a),a[i].setMainElement(),"PreCompLayer"==s.type&&this.buildStage(a[i].getComposingElement(),s.layers,a[i].getElements())},SVGRenderer.prototype.buildItemParenting=function(t,e,a,i,s){t.parents||(t.parents=[]);for(var r=0,n=a.length;n>r;){if(a[r].layerName==i){e.getHierarchy().push(s[r]),a[r].parent&&this.buildItemParenting(t,e,a,a[r].parent,s);break}r+=1}},SVGRenderer.prototype.updateContainerSize=function(){},SVGRenderer.prototype.renderFrame=function(t){if(this.lastFrame!=t){this.lastFrame=t,this.globalData.frameNum=t;var e,a=this.layers.length;for(e=0;a>e;e++)this.elements[e].prepareFrame(t-this.layers[e].startTime);for(e=0;a>e;e++)this.elements[e].renderFrame(t-this.layers[e].startTime)}},CanvasRenderer.prototype.buildItems=function(t,e){e||(e=this.elements);var a,i=0,s=t.length;for(a=0;s>a;a++)if("StillLayer"==t[a].type)i++,e.push(this.createImage(t[a]));else if("PreCompLayer"==t[a].type){e.push(this.createComp(t[a]));var r=[];this.buildItems(t[a].layers,r),e[e.length-1].setElements(r)}else e.push("SolidLayer"==t[a].type?this.createSolid(t[a]):"ShapeLayer"==t[a].type?this.createShape(t[a]):"TextLayer"==t[a].type?this.createText(t[a]):this.createBase(t[a]))},CanvasRenderer.prototype.createBase=function(t){return new CVBaseElement(t,this.globalData)},CanvasRenderer.prototype.createShape=function(t){return new CVShapeElement(t,this.globalData)},CanvasRenderer.prototype.createText=function(t){return new CVTextElement(t,this.globalData)},CanvasRenderer.prototype.createImage=function(t){return new CVImageElement(t,this.globalData)},CanvasRenderer.prototype.createComp=function(t){return new CVCompElement(t,this.globalData)},CanvasRenderer.prototype.createSolid=function(t){return new CVSolidElement(t,this.globalData)},CanvasRenderer.prototype.ctxTransform=function(t){if(!this.renderConfig.clearCanvas)return void this.canvasContext.transform(t[0],t[1],t[2],t[3],t[4],t[5]);this.contextData.cTr.transform(t[0],t[1],t[2],t[3],t[4],t[5]);var e=this.contextData.cTr.props;this.canvasContext.setTransform(e[0],e[1],e[2],e[3],e[4],e[5])},CanvasRenderer.prototype.ctxOpacity=function(t){return this.renderConfig.clearCanvas?(this.contextData.cO*=t,void(this.canvasContext.globalAlpha=this.contextData.cO)):void(this.canvasContext.globalAlpha*=t)},CanvasRenderer.prototype.reset=function(){return this.renderConfig.clearCanvas?(this.contextData.cArrPos=0,this.contextData.cTr.reset(),void(this.contextData.cO=1)):void this.canvasContext.restore()},CanvasRenderer.prototype.save=function(t){if(!this.renderConfig.clearCanvas)return void this.canvasContext.save();t&&this.canvasContext.save();var e=this.contextData.cTr.props;null===this.contextData.saved[this.contextData.cArrPos]&&(this.contextData.saved[this.contextData.cArrPos]=new Array(6));var a,i=6,s=this.contextData.saved[this.contextData.cArrPos];for(a=0;i>a;a+=1)s[a]=e[a];this.contextData.savedOp[this.contextData.cArrPos]=this.contextData.cO,this.contextData.cArrPos+=1},CanvasRenderer.prototype.restore=function(t){if(!this.renderConfig.clearCanvas)return void this.canvasContext.restore();t&&this.canvasContext.restore(),this.contextData.cArrPos-=1;var e,a=this.contextData.saved[this.contextData.cArrPos],i=6,s=this.contextData.cTr.props;for(e=0;i>e;e+=1)s[e]=a[e];this.canvasContext.setTransform(a[0],a[1],a[2],a[3],a[4],a[5]),a=this.contextData.savedOp[this.contextData.cArrPos],this.contextData.cO=a,this.canvasContext.globalAlpha=a},CanvasRenderer.prototype.configAnimation=function(t){this.animationItem.wrapper?(this.animationItem.container=document.createElement("canvas"),this.animationItem.container.style.width="100%",this.animationItem.container.style.height="100%",this.animationItem.container.style.transformOrigin=this.animationItem.container.style.mozTransformOrigin=this.animationItem.container.style.webkitTransformOrigin=this.animationItem.container.style["-webkit-transform"]="0px 0px 0px",this.animationItem.wrapper.appendChild(this.animationItem.container),this.canvasContext=this.animationItem.container.getContext("2d")):this.canvasContext=this.renderConfig.context,this.globalData.canvasContext=this.canvasContext,this.globalData.bmCtx=new BM_CanvasRenderingContext2D(this),this.globalData.renderer=this,this.globalData.totalFrames=Math.floor(t.animation.totalFrames),this.globalData.compWidth=t.animation.compWidth,this.globalData.compHeight=t.animation.compHeight,this.layers=t.animation.layers,this.transformCanvas={},this.transformCanvas.w=t.animation.compWidth,this.transformCanvas.h=t.animation.compHeight,this.updateContainerSize()},CanvasRenderer.prototype.updateContainerSize=function(){var t,e;if(this.animationItem.wrapper&&this.animationItem.container?(t=this.animationItem.wrapper.offsetWidth,e=this.animationItem.wrapper.offsetHeight,this.animationItem.container.setAttribute("width",t),this.animationItem.container.setAttribute("height",e)):(t=this.canvasContext.canvas.width,e=this.canvasContext.canvas.height),"fit"==this.renderConfig.scaleMode){var a=t/e,i=this.transformCanvas.w/this.transformCanvas.h;i>a?(this.transformCanvas.sx=t/this.transformCanvas.w,this.transformCanvas.sy=t/this.transformCanvas.w,this.transformCanvas.tx=0,this.transformCanvas.ty=(e-this.transformCanvas.h*(t/this.transformCanvas.w))/2):(this.transformCanvas.sx=e/this.transformCanvas.h,this.transformCanvas.sy=e/this.transformCanvas.h,this.transformCanvas.tx=(t-this.transformCanvas.w*(e/this.transformCanvas.h))/2,this.transformCanvas.ty=0)}else this.transformCanvas.sx=1,this.transformCanvas.sy=1,this.transformCanvas.tx=0,this.transformCanvas.ty=0;this.transformCanvas.props=[this.transformCanvas.sx,0,0,this.transformCanvas.sy,this.transformCanvas.tx,this.transformCanvas.ty],this.clipper=new BM_Path2D,this.clipper.rect(0,0,this.transformCanvas.w,this.transformCanvas.h)},CanvasRenderer.prototype.buildStage=function(t,e,a){a||(a=this.elements);var i,s,r=e.length;for(i=r-1;i>=0;i--)s=e[i],s.parent&&this.buildItemHierarchy(s,a[i],e,s.parent,a),"PreCompLayer"==s.type&&this.buildStage(null,s.layers,a[i].getElements())},CanvasRenderer.prototype.buildItemHierarchy=function(t,e,a,i,s){for(var r=0,n=a.length;n>r;){if(a[r].layerName==i){e.getHierarchy().push(s[r]),void 0===a[r].parent||this.buildItemHierarchy(t,e,a,a[r].parent,s);break}r+=1}},CanvasRenderer.prototype.prepareFrame=function(t){var e,a=this.elements.length;for(e=0;a>e;e++)this.elements[e].prepareFrame(t-this.layers[e].startTime)},CanvasRenderer.prototype.draw=function(){var t,e=this.layers.length;for(t=e-1;t>=0;t-=1)this.elements[t].draw()},CanvasRenderer.prototype.renderFrame=function(t){(this.lastFrame!=t||this.renderConfig.clearCanvas!==!0)&&(this.lastFrame=t,this.globalData.frameNum=t-this.animationItem.firstFrame,this.renderConfig.clearCanvas===!0?(this.reset(),this.canvasContext.canvas.width=this.canvasContext.canvas.width):this.save(),this.ctxTransform(this.transformCanvas.props),this.globalData.bmCtx.clip(this.clipper),this.prepareFrame(t),this.draw(),this.renderConfig.clearCanvas!==!0&&this.restore())},MaskElement.prototype.init=function(){this.registeredEffects=[],this.masksProperties=this.data.masksProperties,this.totalMasks=this.masksProperties.length;var t=this.element.maskedElement,e=this.globalData.defs,a=0,i=this.masksProperties.length;this.layerSize=this.element.getLayerSize(),this.maskElement=document.createElementNS(svgNS,"clipPath");var s,r=this.data.masksProperties;for(a=0;i>a;a++)r[a].inv&&!this.solidPath&&(this.solidPath=this.createLayerSolidPath()),"f"==r[a].mode&&a>0||(s=document.createElementNS(svgNS,"path"),r[a].cl?s.setAttribute("fill","#ffffff"):(s.setAttribute("fill","none"),s.setAttribute("stroke","#ffffff"),s.setAttribute("stroke-width","1"),s.setAttribute("stroke-miterlimit","10")),s.setAttribute("clip-rule","nonzero"),this.maskElement.appendChild(s),r[a].elem=s,r[a].lastPath="");var n=randomString(10);this.maskElement.setAttribute("id",n),t.setAttribute("clip-path","url(#"+n+")"),e.appendChild(this.maskElement)},MaskElement.prototype.renderFrame=function(t){var e,a=this.data.masksProperties.length;for(e=0;a>e;e++)"f"==this.data.masksProperties[e].mode&&e>0||this.drawPath(this.data.masksProperties[e],this.data.masksProperties[e].paths[t].pathNodes)},MaskElement.prototype.processMaskFromEffects=function(t,e){var a,i=this.registeredEffects.length;for(a=0;i>a;a++)this.registeredEffects[a].renderMask(t,e)},MaskElement.prototype.registerEffect=function(t){this.registeredEffects.push(t)},MaskElement.prototype.getMaskelement=function(){return this.maskElement},MaskElement.prototype.createLayerSolidPath=function(){var t="M0,0 ";return t+="h"+this.layerSize.w,t+="v"+this.layerSize.h,t+="h"+-this.layerSize.w,t+="v"+-this.layerSize.h},MaskElement.prototype.drawPath=function(t,e){var a,i,s="";if(e.constructor===Array){var r,n,o=e.length,h="";for(r=0;o>r;r+=1){if(h="",n=e[r],!n.__renderedString){for(i=n.v.length,a=1;i>a;a+=1)1==a&&(h+=" M"+n.v[0][0]+","+n.v[0][1]),h+=" C"+n.o[a-1][0]+","+n.o[a-1][1]+" "+n.i[a][0]+","+n.i[a][1]+" "+n.v[a][0]+","+n.v[a][1];t.cl&&(h+=" C"+n.o[a-1][0]+","+n.o[a-1][1]+" "+n.i[0][0]+","+n.i[0][1]+" "+n.v[0][0]+","+n.v[0][1]),n.__renderedString=h}s+=n.__renderedString}}else if(e.__renderedString)s=e.__renderedString;else{for(i=e.v.length,a=1;i>a;a+=1)1==a&&(s+=" M"+e.v[0][0]+","+e.v[0][1]),s+=" C"+e.o[a-1][0]+","+e.o[a-1][1]+" "+e.i[a][0]+","+e.i[a][1]+" "+e.v[a][0]+","+e.v[a][1];t.cl&&(s+=" C"+e.o[a-1][0]+","+e.o[a-1][1]+" "+e.i[0][0]+","+e.i[0][1]+" "+e.v[0][0]+","+e.v[0][1]),e.__renderedString=s}t.lastPath!==s&&(t.inv?t.elem.setAttribute("d",this.solidPath+s):t.elem.setAttribute("d",s),t.lastPath=s)};var BaseElement=function(t,e,a,i){this.animationItem=e,this.globalData=i,this.data=t,this.ownMatrix=new Matrix,this.finalTransform={mat:new Matrix,op:1},this.matteElement=null,this.renderedFrames=[],this.lastData={},this.parentContainer=a,this.layerId=randomString(10),this.init()};BaseElement.prototype.init=function(){this.createElements(),this.data.hasMask&&this.addMasks(this.data),this.data.eff&&this.createEffectsManager(this.data)},BaseElement.prototype.createElements=function(){this.data.hasMask?(this.layerElement=document.createElementNS(svgNS,"g"),this.data.tt?(this.matteElement=document.createElementNS(svgNS,"g"),this.matteElement.appendChild(this.layerElement),this.parentContainer.appendChild(this.matteElement)):this.parentContainer.appendChild(this.layerElement),this.maskedElement=this.layerElement):this.data.td?(this.layerElement=document.createElementNS(svgNS,"mask"),this.layerElement.setAttribute("id",this.layerId),3==this.data.td?this.layerElement.setAttribute("mask-type","luminance"):this.layerElement.setAttribute("mask-type","alpha"),this.globalData.defs.appendChild(this.layerElement)):this.data.tt?(this.matteElement=document.createElementNS(svgNS,"g"),this.matteElement.setAttribute("id",this.layerId),this.parentContainer.appendChild(this.matteElement),this.layerElement=this.matteElement):this.layerElement=this.parentContainer},BaseElement.prototype.prepareFrame=function(t){this.currentAnimData=this.data.renderedData[t].an;var e=this.currentAnimData.matrixArray;this.ownMatrix.reset().transform(e[0],e[1],e[2],e[3],e[4],e[5]).translate(-this.currentAnimData.tr.a[0],-this.currentAnimData.tr.a[1])},BaseElement.prototype.renderFrame=function(t,e){if("NullLayer"!=this.data.type){if(this.data.inPoint-this.data.startTime<=t&&this.data.outPoint-this.data.startTime>=t?(this.isVisible!==!0&&(this.isVisible=!0),this.finalTransform.opacity=1):(this.isVisible!==!1&&(this.isVisible=!1),this.finalTransform.opacity=0),this.data.eff&&this.effectsManager.renderFrame(t,this.currentAnimData.mk),t===this.data.renderedFrame.num)return this.isVisible;this.data.hasMask&&this.maskManager.renderFrame(t),this.finalTransform.opacity*=this.currentAnimData.tr.o;var a,i=this.finalTransform.mat;if(e&&(a=e.mat.props,i.reset().transform(a[0],a[1],a[2],a[3],a[4],a[5]),this.finalTransform.opacity*=e.opacity),this.hierarchy){var s,r=this.hierarchy.length;for(e||i.reset(),s=r-1;s>=0;s-=1)a=this.hierarchy[s].ownMatrix.props,i.transform(a[0],a[1],a[2],a[3],a[4],a[5]);a=this.ownMatrix.props,i.transform(a[0],a[1],a[2],a[3],a[4],a[5])}else this.isVisible&&(e?(a=this.ownMatrix.props,i.transform(a[0],a[1],a[2],a[3],a[4],a[5])):this.finalTransform.mat=this.ownMatrix);if(this.data.hasMask){this.renderedFrames[this.globalData.frameNum]||(this.renderedFrames[this.globalData.frameNum]={tr:"matrix("+i.props.join(",")+")",o:this.finalTransform.opacity});var n=this.renderedFrames[this.globalData.frameNum];this.lastData.tr!=n.tr&&(this.lastData.tr=n.tr,this.layerElement.setAttribute("transform",n.tr)),this.lastData.o!==n.o&&(this.lastData.o=n.o,this.layerElement.setAttribute("opacity",n.o))}return this.isVisible}},BaseElement.prototype.getDomElement=function(){return this.layerElement},BaseElement.prototype.setMainElement=function(){this.mainElement=this.layerElement},BaseElement.prototype.getMaskManager=function(){return this.maskManager},BaseElement.prototype.addMasks=function(t){var e={data:{value:t},element:{value:this},globalData:{value:this.globalData}};this.maskManager=createElement(MaskElement,null,e)},BaseElement.prototype.createEffectsManager=function(t){var e={effects:{value:t.eff},element:{value:this}};this.effectsManager=createElement(EffectsManager,null,e)},BaseElement.prototype.getType=function(){return this.type},BaseElement.prototype.getLayerSize=function(){return"TextLayer"==this.data.type?{w:this.data.textData.width,h:this.data.textData.height}:{w:this.data.width,h:this.data.height}},BaseElement.prototype.getHierarchy=function(){return this.hierarchy||(this.hierarchy=[]),this.hierarchy},BaseElement.prototype.setMatte=function(t){this.matteElement.setAttribute("mask","url(#"+t+")")},BaseElement.prototype.hide=function(){},createElement(BaseElement,ICompElement),ICompElement.prototype.getComposingElement=function(){return this.layerElement},ICompElement.prototype.hide=function(){if(!this.hidden){var t,e=this.elements.length;for(t=0;e>t;t+=1)this.elements[t].hide();this.hidden=!0}},ICompElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);if(a===!1)return void this.hide();this.hidden=!1;var i,s=this.layers.length,r=this.data.tm?this.data.tm[t]<0?0:t>=this.data.tm.length?this.data.tm[this.data.tm.length-1]:this.data.tm[t]:t;for(i=0;s>i;i+=1)this.elements[i].prepareFrame(r-this.layers[i].startTime);for(i=0;s>i;i+=1)this.data.hasMask?this.elements[i].renderFrame(r-this.layers[i].startTime):this.elements[i].renderFrame(r-this.layers[i].startTime,this.finalTransform)},ICompElement.prototype.setElements=function(t){this.elements=t},ICompElement.prototype.getElements=function(){return this.elements},createElement(BaseElement,IImageElement),IImageElement.prototype.createElements=function(){var t=this,e=function(){t.image.setAttributeNS("http://www.w3.org/1999/xlink","href",t.path+t.assets[t.data.assetId].path),t.maskedElement=t.image,t.animationItem.elementLoaded()},a=new Image;a.addEventListener("load",e,!1),a.addEventListener("error",e,!1),a.src=this.path+this.assets[this.data.assetId].path,this.parent.createElements.call(this),this.image=document.createElementNS(svgNS,"image"),this.image.setAttribute("width",this.data.width+"px"),this.image.setAttribute("height",this.data.height+"px"),this.layerElement.appendChild(this.image)},IImageElement.prototype.hide=function(){this.hidden||this.data.hasMask||(this.image.setAttribute("opacity","0"),this.hidden=!0)},IImageElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);if(a===!1)return void this.hide();if(this.hidden=!1,!this.data.hasMask){this.renderedFrames[this.globalData.frameNum]||(this.renderedFrames[this.globalData.frameNum]={tr:"matrix("+this.finalTransform.mat.props.join(",")+")",o:this.finalTransform.opacity});var i=this.renderedFrames[this.globalData.frameNum];this.lastData.tr!=i.tr&&(this.lastData.tr=i.tr,this.image.setAttribute("transform",i.tr)),this.lastData.o!==i.o&&(this.lastData.o=i.o,this.image.setAttribute("opacity",i.o))}},createElement(BaseElement,IShapeElement),IShapeElement.prototype.createElements=function(){this.parent.createElements.call(this),this.mainShape=new ShapeItemElement(this.data.shapes,this.layerElement,this.globalData)},IShapeElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);return a===!1?void this.hide():void this.renderShapes(t)},IShapeElement.prototype.hide=function(){this.hidden||(this.mainShape.hideShape(),this.hidden=!0)},IShapeElement.prototype.renderShapes=function(t){this.hidden=!1,this.data.hasMask?this.mainShape.renderShape(t,{opacity:1,mat:new Matrix}):this.mainShape.renderShape(t,this.finalTransform)},ShapeItemElement.prototype.searchShapes=function(t,e){var a,i,s,r=t.length-1,n=[];for(a=r;a>=0;a-=1)if("fl"==t[a].ty||"st"==t[a].ty){e[a]={renderedFrames:[],lastData:{c:"",o:-1,w:""}};var o=document.createElementNS(svgNS,"path");this.shape.appendChild(o),this.stylesList.push({pathElement:o,type:t[a].ty,d:""}),e[a].style=this.stylesList[this.stylesList.length-1],n.push(e[a].style)}else if("gr"==t[a].ty)e[a]={it:[]},this.searchShapes(t[a].it,e[a].it);else if("tr"==t[a].ty)e[a]={transform:{mat:new Matrix,opacity:1}};else if("sh"==t[a].ty||"rc"==t[a].ty||"el"==t[a].ty)for(e[a]={elements:[],renderedFrames:[],styles:[],lastData:{d:"",o:"",tr:""}},s=this.stylesList.length,i=0;s>i;i+=1)this.stylesList[i].closed||(e[a].styles.push(this.stylesList[i]),"st"==this.stylesList[i].type&&(this.stylesList[i].pathElement.setAttribute("fill-opacity",0),this.stylesList[i].pathElement.setAttribute("stroke-linejoin","round"),this.stylesList[i].pathElement.setAttribute("stroke-linecap","round")));for(r=n.length,a=0;r>a;a+=1)n[a].closed=!0},ShapeItemElement.prototype.getElement=function(){return this.shape},ShapeItemElement.prototype.hideShape=function(){var t,e=this.stylesList.length;for(t=e-1;t>=0;t-=1)this.stylesList[t].pathElement.setAttribute("d","")},ShapeItemElement.prototype.renderShape=function(t,e,a,i){var s,r;if(!a)for(a=this.data,r=this.stylesList.length,s=0;r>s;s+=1)this.stylesList[s].d="";i||(i=this.viewData),this.frameNum=t,r=a.length-1;var n,o;for(n=e,s=r;s>=0;s-=1)if("tr"==a[s].ty){var h=a[s].renderedData[t].mtArr;if(n=i[s].transform,o=n.mat,o.reset(),e){var l=e.mat.props;n.opacity=e.opacity,n.opacity*=a[s].renderedData[t].o,o.transform(l[0],l[1],l[2],l[3],l[4],l[5])}else n.opacity=a[s].renderedData[t].o;o.transform(h[0],h[1],h[2],h[3],h[4],h[5]).translate(-a[s].renderedData[t].a[0],-a[s].renderedData[t].a[1])}else"sh"==a[s].ty?this.renderPath(a[s],i[s],t,n):"el"==a[s].ty?this.renderPath(a[s],i[s],t,n):"rc"==a[s].ty?a[s].trimmed?this.renderPath(a[s],i[s],t,n):this.renderRect(a[s],i[s],t,n):"fl"==a[s].ty?this.renderFill(a[s],i[s],t,n):"st"==a[s].ty?this.renderStroke(a[s],i[s],t,n):"gr"==a[s].ty?this.renderShape(t,n,a[s].it,i[s].it):"tm"==a[s].ty;for(r=this.stylesList.length,s=0;r>s;s+=1)this.stylesList[s].pathElement.setAttribute("d",this.stylesList[s].d)},ShapeItemElement.prototype.renderPath=function(t,e,a,i){var s,r;if(!e.renderedFrames[this.globalData.frameNum]){var n=t.renderedData[a].path.pathNodes;if(!n.v)return;s=n.v.length;var o=n.s?n.s:[],h="";for(r=1;s>r;r+=1)o[r-1]?h+=" M"+i.mat.applyToPointStringified(o[r-1][0],o[r-1][1]):1==r&&(h+=" M"+i.mat.applyToPointStringified(n.v[0][0],n.v[0][1])),h+=" C"+i.mat.applyToPointStringified(n.o[r-1][0],n.o[r-1][1])+" "+i.mat.applyToPointStringified(n.i[r][0],n.i[r][1])+" "+i.mat.applyToPointStringified(n.v[r][0],n.v[r][1]);!t.closed||t.trimmed&&!n.c||(h+=" C"+i.mat.applyToPointStringified(n.o[r-1][0],n.o[r-1][1])+" "+i.mat.applyToPointStringified(n.i[0][0],n.i[0][1])+" "+i.mat.applyToPointStringified(n.v[0][0],n.v[0][1])),e.renderedFrames[this.globalData.frameNum]={dTr:h}}var l=e.renderedFrames[this.globalData.frameNum];for(s=e.styles.length,r=0;s>r;r+=1)e.styles[r].d+=l.dTr},ShapeItemElement.prototype.renderFill=function(t,e,a,i){var s=t.renderedData[a],r=e.style;e.renderedFrames[this.globalData.frameNum]||(e.renderedFrames[this.globalData.frameNum]={c:s.color,o:s.opacity*i.opacity});var n=e.renderedFrames[this.globalData.frameNum],o=n.c,h=n.o;e.lastData.c!=o&&r.pathElement.setAttribute("fill",o),e.lastData.o!=h&&r.pathElement.setAttribute("fill-opacity",h),e.lastData.c=o,e.lastData.o=h},ShapeItemElement.prototype.renderStroke=function(t,e,a,i){var s=t.renderedData[a],r=e.style;e.renderedFrames[this.globalData.frameNum]||(e.renderedFrames[this.globalData.frameNum]={c:s.color,o:s.opacity*i.opacity,w:s.width},s.dashes&&(e.renderedFrames[this.globalData.frameNum].d=s.dashes));var n,o,h=e.renderedFrames[this.globalData.frameNum],l=h.c,p=h.o,m=h.w,d=h.d;if(d){var c,f=d.length;for(n="",o="",c=0;f>c;c+=1)"o"!=d[c].n?n+=" "+d[c].v:o+=d[c].v}e.lastData.c!=l&&r.pathElement.setAttribute("stroke",l),e.lastData.o!=p&&r.pathElement.setAttribute("stroke-opacity",p),e.lastData.w!=m&&r.pathElement.setAttribute("stroke-width",m),d&&(e.lastData.da!=n&&r.pathElement.setAttribute("stroke-dasharray",n),e.lastData["do"]!=o&&r.pathElement.setAttribute("stroke-dashoffset",o)),e.lastData.c=l,e.lastData.o=p,e.lastData.w=m,d&&(e.lastData.da=n,e.lastData["do"]=o)},createElement(BaseElement,ISolidElement),ISolidElement.prototype.createElements=function(){this.parent.createElements.call(this);var t=document.createElementNS(svgNS,"rect");t.setAttribute("width",this.data.width),t.setAttribute("height",this.data.height),t.setAttribute("fill",this.data.color),this.layerElement.appendChild(t),this.rectElement=t},ISolidElement.prototype.hide=function(){this.hidden||this.data.hasMask||(this.rectElement.setAttribute("opacity","0"),this.hidden=!0)},ISolidElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);if(a===!1)return void this.hide();if(this.hidden&&(this.lastData.o=-1,this.hidden=!1),!this.data.hasMask){this.renderedFrames[this.globalData.frameNum]||(this.renderedFrames[this.globalData.frameNum]={tr:"matrix("+this.finalTransform.mat.props.join(",")+")",o:this.finalTransform.opacity});var i=this.renderedFrames[this.globalData.frameNum];this.lastData.tr!=i.tr&&(this.lastData.tr=i.tr,this.rectElement.setAttribute("transform",i.tr)),this.lastData.o!==i.o&&(this.lastData.o=i.o,this.rectElement.setAttribute("opacity",i.o))}},createElement(BaseElement,ITextElement),ITextElement.prototype.createElements=function(){this.svgElem=document.createElementNS(svgNS,"g");var t=document.createElementNS(svgNS,"text");t.textContent=this.data.textData.text,t.setAttribute("fill",this.data.textData.fillColor),t.setAttribute("x","0"),t.setAttribute("y",this.data.textData.height-(this.data.textData.fontSize-this.data.textData.height)/2),this.svgElem.setAttribute("width",this.data.textData.width),this.svgElem.setAttribute("height",this.data.textData.height),this.svgElem.style.transform=this.svgElem.style.webkitTransform="translate("+this.data.textData.xOffset+"px,"+this.data.textData.yOffset+"px)",t.setAttribute("font-size",this.data.textData.fontSize),t.setAttribute("font-family","Arial, sans-serif"),this.svgElem.appendChild(t),this.parent.createElements.call(this),this.anchorElement.appendChild(this.svgElem),this.maskedElement=t},CVBaseElement.prototype.init=function(){this.createElements(),this.data.hasMask&&this.addMasks(this.data),this.data.eff&&this.createEffectsManager(this.data)},CVBaseElement.prototype.createElements=function(){},CVBaseElement.prototype.prepareFrame=function(t){this.currentAnimData=this.data.renderedData[t].an;var e=this.currentAnimData.matrixArray;return this.ownMatrix.reset().transform(e[0],e[1],e[2],e[3],e[4],e[5]).translate(-this.currentAnimData.tr.a[0],-this.currentAnimData.tr.a[1]),this.data.inPoint-this.data.startTime<=t&&this.data.outPoint-this.data.startTime>=t?(this.renderFrame=!0,this.finalTransform.opacity=1,void(this.data.hasMask&&this.maskManager.prepareFrame(t))):(this.renderFrame=!1,this.finalTransform.opacity=0,!1)},CVBaseElement.prototype.draw=function(t){if("NullLayer"!=this.data.type){if(!this.renderFrame)return!1;var e,a=(this.canvasContext,this.finalTransform.mat);if(this.finalTransform.opacity*=this.currentAnimData.tr.o,t&&(e=t.mat.props,a.reset().transform(e[0],e[1],e[2],e[3],e[4],e[5]),this.finalTransform.opacity*=t.opacity),this.hierarchy){var i,s=this.hierarchy.length;for(t||a.reset(),i=s-1;i>=0;i-=1)e=this.hierarchy[i].ownMatrix.props,a.transform(e[0],e[1],e[2],e[3],e[4],e[5]);e=this.ownMatrix.props,a.transform(e[0],e[1],e[2],e[3],e[4],e[5])}else this.renderFrame&&(t?(e=this.ownMatrix.props,a.transform(e[0],e[1],e[2],e[3],e[4],e[5])):this.finalTransform.mat=this.ownMatrix);this.data.hasMask&&(this.globalData.renderer.save(!0),this.maskManager.draw(this.finalTransform))}},CVBaseElement.prototype.getCurrentAnimData=function(){return this.currentAnimData},CVBaseElement.prototype.addMasks=function(t){var e={data:{value:t},element:{value:this},globalData:{value:this.globalData}};this.maskManager=createElement(CVMaskElement,null,e)},CVBaseElement.prototype.createEffectsManager=function(t){var e={effects:{value:t.eff},element:{value:this}};this.effectsManager=createElement(EffectsManager,null,e)},CVBaseElement.prototype.getType=function(){return this.type},CVBaseElement.prototype.getHierarchy=function(){return this.hierarchy||(this.hierarchy=[]),this.hierarchy},CVBaseElement.prototype.getLayerSize=function(){return"TextLayer"==this.data.type?{w:this.data.textData.width,h:this.data.textData.height}:{w:this.data.width,h:this.data.height}},createElement(CVBaseElement,CVCompElement),CVCompElement.prototype.prepareFrame=function(t){var e=this.parent.prepareFrame.call(this,t);if(e!==!1){var a,i=this.elements.length,s=this.data.tm?this.data.tm[t]<0?0:t>=this.data.tm.length?this.data.tm[this.data.tm.length-1]:this.data.tm[t]:t;for(a=0;i>a;a+=1)this.elements[a].prepareFrame(s-this.layers[a].startTime)}},CVCompElement.prototype.draw=function(t){if(this.parent.draw.call(this,t)!==!1){var e,a=this.layers.length;for(e=a-1;e>=0;e-=1)this.elements[e].draw(this.finalTransform);this.data.hasMask&&this.globalData.renderer.restore(!0)}},CVCompElement.prototype.setElements=function(t){this.elements=t},CVCompElement.prototype.getElements=function(){return this.elements},createElement(CVBaseElement,CVImageElement),CVImageElement.prototype.createElements=function(){var t=this,e=function(){t.animationItem.elementLoaded()},a=function(){t.failed=!0,t.animationItem.elementLoaded()};this.img=new Image,this.img.addEventListener("load",e,!1),this.img.addEventListener("error",a,!1),this.img.src=this.path+this.assets[this.data.assetId].path,this.parent.createElements.call(this)},CVImageElement.prototype.draw=function(t){if(!this.failed&&this.parent.draw.call(this,t)!==!1){var e=this.canvasContext;this.globalData.renderer.save();var a=this.finalTransform.mat.props;this.globalData.renderer.ctxTransform(a),this.globalData.renderer.ctxOpacity(this.finalTransform.opacity),e.drawImage(this.img,0,0),this.globalData.renderer.restore(this.data.hasMask)}},createElement(CVBaseElement,CVShapeElement),CVShapeElement.prototype.createElements=function(){this.parent.createElements.call(this),this.mainShape=new CVShapeItemElement(this.data.shapes,!0,this.globalData)},CVShapeElement.prototype.prepareFrame=function(t){var e=this.parent.prepareFrame.call(this,t);e!==!1&&this.mainShape.prepareFrame(t)},CVShapeElement.prototype.draw=function(t){this.parent.draw.call(this,t)!==!1&&(this.drawShapes(this.finalTransform),this.data.hasMask&&this.globalData.renderer.restore(!0))
-},CVShapeElement.prototype.drawShapes=function(t){this.mainShape.renderShape(t)},CVShapeItemElement.prototype.drawPaths=function(t){var e,a;t?(a=[],e=this.stylesList):e=this.renderedPaths[this.globalData.frameNum];var i,s=e.length,r=this.canvasContext;for(this.globalData.renderer.save(),r.lineCap="round",r.lineJoin="round",i=0;s>i;i+=1)"stroke"==e[i].type?(1!=e[i].opacity&&(this.globalData.renderer.save(),this.globalData.renderer.ctxOpacity(e[i].opacity)),r.strokeStyle=e[i].value,r.lineWidth=e[i].width,e[i].dasharray?(r.setLineDash(e[i].dasharray),r.lineDashOffset=e[i].dashoffset):(r.setLineDash([]),r.lineDashOffset=0),this.globalData.bmCtx.stroke(e[i].path),1!=e[i].opacity&&this.globalData.renderer.restore(),t&&(a.push({type:e[i].type,opacity:e[i].opacity,value:e[i].value,width:e[i].width,path:e[i].path}),e[i].dasharray&&(a[a.length-1].dasharray=e[i].dasharray,a[a.length-1].dashoffset=e[i].dashoffset))):"fill"==e[i].type&&(1!=e[i].opacity&&(this.globalData.renderer.save(),this.globalData.renderer.ctxOpacity(e[i].opacity)),r.fillStyle=e[i].value,this.globalData.bmCtx.fill(e[i].path),1!=e[i].opacity&&this.globalData.renderer.restore(),t&&a.push({type:e[i].type,opacity:e[i].opacity,value:e[i].value,path:e[i].path}));this.globalData.renderer.restore(),t&&(this.renderedPaths[this.globalData.frameNum]=a)},CVShapeItemElement.prototype.prepareFrame=function(t){this.frameNum=t;var e,a=this.dataLength-1;for(e=a;e>=0;e-=1)"gr"==this.data[e].ty&&this.data[e].item.prepareFrame(t)},CVShapeItemElement.prototype.renderShape=function(t,e){if(this.renderedPaths[this.globalData.frameNum])return void this.drawPaths(!1);this.transform.opacity=1;var a,i;for(this.ownStylesList.length=0,this.currentStylePoolPos=0,e?this.stylesList=e:this.stylesList.length=0,t?(this.transform.mat.props[0]=t.mat.props[0],this.transform.mat.props[1]=t.mat.props[1],this.transform.mat.props[2]=t.mat.props[2],this.transform.mat.props[3]=t.mat.props[3],this.transform.mat.props[4]=t.mat.props[4],this.transform.mat.props[5]=t.mat.props[5],this.transform.opacity*=t.opacity):(this.transform.mat.props[0]=this.transform.mat.props[3]=1,this.transform.mat.props[1]=this.transform.mat.props[2]=this.transform.mat.props[4]=this.transform.mat.props[5]=0),i=this.dataLength-1,a=i;a>=0;a-=1)"gr"==this.data[a].ty?this.data[a].item.renderShape(this.transform,this.stylesList):"tr"==this.data[a].ty?this.renderTransform(this.data[a]):"sh"==this.data[a].ty?this.renderPath(this.data[a]):"el"==this.data[a].ty?this.renderEllipse(this.data[a]):"rc"==this.data[a].ty?this.data[a].trimmed?this.renderPath(this.data[a]):this.renderRect(this.data[a]):"fl"==this.data[a].ty?this.renderFill(this.data[a]):"st"==this.data[a].ty&&this.renderStroke(this.data[a]);if(this.mainFlag)this.drawPaths(!0);else for(i=this.ownStylesList.length,a=0;i>a;a+=1)this.ownStylesList[a].closed=!0},CVShapeItemElement.prototype.renderTransform=function(t){var e=t.renderedData[this.frameNum],a=e.mtArr;this.transform.mat.transform(a[0],a[1],a[2],a[3],a[4],a[5]).translate(-e.a[0],-e.a[1]),this.transform.opacity*=e.o},CVShapeItemElement.prototype.renderPath=function(t){if(t.trimmed){var e=this.canvasContext;e.lineCap="round",e.lineJoin="round"}var a=t.renderedData[this.frameNum].path,i=new BM_Path2D,s=a.pathNodes;if(s instanceof Array&&(s=s[0]),s.v){var r,n=s.v.length,o=s.s?s.s:[];for(r=1;n>r;r+=1)o[r-1]?i.moveTo(o[r-1][0],o[r-1][1]):1==r&&i.moveTo(s.v[0][0],s.v[0][1]),i.bezierCurveTo(s.o[r-1][0],s.o[r-1][1],s.i[r][0],s.i[r][1],s.v[r][0],s.v[r][1]);!a.closed||t.trimmed&&!s.c||i.bezierCurveTo(s.o[r-1][0],s.o[r-1][1],s.i[0][0],s.i[0][1],s.v[0][0],s.v[0][1]),this.addPathToStyles(i)}},CVShapeItemElement.prototype.renderEllipse=function(t){var e=new BM_Path2D,a=t.renderedData[this.frameNum];e.moveTo(a.p[0]+a.size[0]/2,a.p[1]),e.ellipse(a.p[0],a.p[1],a.size[0]/2,a.size[1]/2,0,0,2*Math.PI,!1),this.addPathToStyles(e)},CVShapeItemElement.prototype.renderRect=function(t){var e=new BM_Path2D,a=t.renderedData[this.frameNum],i=a.roundness;if(0===i)e.rect(a.position[0]-a.size[0]/2,a.position[1]-a.size[1]/2,a.size[0],a.size[1]);else{var s=a.position[0]-a.size[0]/2,r=a.position[1]-a.size[1]/2,n=a.size[0],o=a.size[1];i instanceof Array&&(i=i[0]),i>n/2&&(i=n/2),i>o/2&&(i=o/2),e.moveTo(s+i,r),e.lineTo(s+n-i,r),e.quadraticCurveTo(s+n,r,s+n,r+i),e.lineTo(s+n,r+o-i),e.quadraticCurveTo(s+n,r+o,s+n-i,r+o),e.lineTo(s+i,r+o),e.quadraticCurveTo(s,r+o,s,r+o-i),e.lineTo(s,r+i),e.quadraticCurveTo(s,r,s+i,r)}this.addPathToStyles(e)},CVShapeItemElement.prototype.addPathToStyles=function(t){var e,a=this.stylesList.length,i=!0,s=0;for(e=a-1;e>=0;e-=1)this.stylesList[e].closed||("stroke"==this.stylesList[e].type?(this.stylesList[e].width>s&&this.stylesList[e].path.addPath(t,this.transform.mat.props),1==this.stylesList[e].styleOpacity&&1==this.stylesList[e].opacity&&(s=this.stylesList[e].width)):i&&"fill"==this.stylesList[e].type&&(this.stylesList[e].path.addPath(t,this.transform.mat.props),1==this.stylesList[e].styleOpacity&&1==this.stylesList[e].opacity&&(i=!1)))},CVShapeItemElement.prototype.renderFill=function(t){var e=t.renderedData[this.frameNum];return t.fillEnabled!==!1?(this.stylesPool[this.currentStylePoolPos].path=new BM_Path2D,this.stylesPool[this.currentStylePoolPos].closed=!1,this.stylesPool[this.currentStylePoolPos].styleOpacity=e.opacity<1?e.opacity:1,this.stylesPool[this.currentStylePoolPos].opacity=this.transform.opacity,this.stylesPool[this.currentStylePoolPos].value=e.opacity<1?fillColorToString(e.color,e.opacity):fillColorToString(e.color),this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),void(this.currentStylePoolPos+=1)):(this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),void(this.currentStylePoolPos+=1))},CVShapeItemElement.prototype.renderStroke=function(t){var e=t.renderedData[this.frameNum];if(this.data.strokeEnabled!==!1){if(this.stylesPool[this.currentStylePoolPos].path=new BM_Path2D,this.stylesPool[this.currentStylePoolPos].closed=!1,this.stylesPool[this.currentStylePoolPos].styleOpacity=e.opacity<1?e.opacity:1,this.stylesPool[this.currentStylePoolPos].width=e.width,this.stylesPool[this.currentStylePoolPos].opacity=this.transform.opacity,this.stylesPool[this.currentStylePoolPos].value=e.opacity<1?fillColorToString(e.color,e.opacity):fillColorToString(e.color),e.dashes){var a,i=e.dashes,s=i.length,r=[],n="";for(a=0;s>a;a+=1)"o"!=i[a].n?r.push(i[a].v):n=i[a].v;this.stylesPool[this.currentStylePoolPos].dasharray=r,this.stylesPool[this.currentStylePoolPos].dashoffset=n}return this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),void(this.currentStylePoolPos+=1)}this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),this.currentStylePoolPos+=1},createElement(CVBaseElement,CVSolidElement),CVSolidElement.prototype.draw=function(t){if(this.parent.draw.call(this,t)!==!1){var e=this.canvasContext;this.globalData.renderer.save();var a=this.finalTransform.mat.props;this.globalData.renderer.ctxTransform(a),this.globalData.renderer.ctxOpacity(this.finalTransform.opacity),e.fillStyle=this.data.color,e.fillRect(0,0,this.data.width,this.data.height),this.globalData.renderer.restore(this.data.hasMask)}},createElement(CVBaseElement,CVTextElement),CVTextElement.prototype.createElements=function(){this.svgElem=document.createElementNS(svgNS,"g");var t=document.createElementNS(svgNS,"text");t.textContent=this.data.textData.text,t.setAttribute("fill",this.data.textData.fillColor),t.setAttribute("x","0"),t.setAttribute("y",this.data.textData.height-(this.data.textData.fontSize-this.data.textData.height)/2),this.svgElem.setAttribute("width",this.data.textData.width),this.svgElem.setAttribute("height",this.data.textData.height),this.svgElem.style.transform=this.svgElem.style.webkitTransform="translate("+this.data.textData.xOffset+"px,"+this.data.textData.yOffset+"px)",t.setAttribute("font-size",this.data.textData.fontSize),t.setAttribute("font-family","Arial, sans-serif"),this.svgElem.appendChild(t),this.parent.createElements.call(this),this.anchorElement.appendChild(this.svgElem),this.maskedElement=t},CVMaskElement.prototype.init=function(){this.registeredEffects=[],this.masksProperties=this.data.masksProperties,this.totalMasks=this.masksProperties.length,this.ctx=this.element.canvasContext,this.layerSize=this.element.getLayerSize(),this.renderedFrames=new Array(this.globalData.totalFrames+1)},CVMaskElement.prototype.prepareFrame=function(t){this.frameNum=t},CVMaskElement.prototype.draw=function(t){var e;if(this.renderedFrames[this.globalData.frameNum])e=this.renderedFrames[this.globalData.frameNum];else{var a,i=new BM_Path2D,s=this.data.masksProperties.length;for(e=new BM_Path2D,a=0;s>a;a++)this.masksProperties[a].inv&&this.createInvertedMask(i,this.data.masksProperties[a].paths[this.frameNum].pathNodes),this.drawShape(i,this.data.masksProperties[a].paths[this.frameNum].pathNodes);e.addPath(i,t.mat.props),this.renderedFrames[this.globalData.frameNum]=e}this.globalData.bmCtx.clip(e)},CVMaskElement.prototype.drawShape=function(t,e){var a,i=e.v.length;for(t.moveTo(e.v[0][0],e.v[0][1]),a=1;i>a;a++)t.bezierCurveTo(e.o[a-1][0],e.o[a-1][1],e.i[a][0],e.i[a][1],e.v[a][0],e.v[a][1]);t.bezierCurveTo(e.o[a-1][0],e.o[a-1][1],e.i[0][0],e.i[0][1],e.v[0][0],e.v[0][1])},CVMaskElement.prototype.createInvertedMask=function(t){t.moveTo(0,0),t.lineTo(this.globalData.compWidth,0),t.lineTo(this.globalData.compWidth,this.globalData.compHeight),t.lineTo(0,this.globalData.compHeight),t.lineTo(0,0)};var animationManager=function(){function t(t){if(!t)return null;for(var e=0;v>e;){if(u[e].elem==t&&null!==u[e].elem)return u[e].animation;e+=1}var a=new AnimationItem;return a.setData(t),u.push({elem:t,animation:a}),v+=1,a}function e(t){var e=new AnimationItem;return e.setParams(t),u.push({elem:null,animation:e}),v+=1,e}function a(t,e){var a;for(a=0;v>a;a+=1)u[a].animation.setSpeed(t,e)}function i(t,e){var a;for(a=0;v>a;a+=1)u[a].animation.setDirection(t,e)}function s(t){var e;for(e=0;v>e;e+=1)u[e].animation.play(t)}function r(t,e){g=!1,y=Date.now();var a;for(a=0;v>a;a+=1)u[a].animation.moveFrame(t,e)}function n(){var t,e=Date.now(),a=e-y;for(t=0;v>t;t+=1)u[t].animation.advanceTime(a);y=e,requestAnimationFrame(n)}function o(t){var e;for(e=0;v>e;e+=1)u[e].animation.pause(t)}function h(t,e,a){var i;for(i=0;v>i;i+=1)u[i].animation.goToAndStop(t,e,a)}function l(t){var e;for(e=0;v>e;e+=1)u[e].animation.stop(t)}function p(t){var e;for(e=0;v>e;e+=1)u[e].animation.togglePause(t)}function m(){var e=document.getElementsByClassName("bodymovin");Array.prototype.forEach.call(e,t)}function d(){var t;for(t=0;v>t;t+=1)u[t].animation.resize()}function c(){y=Date.now(),requestAnimationFrame(n)}var f={},u=[],y=0,g=!0,v=0;return setTimeout(c,0),f.registerAnimation=t,f.loadAnimation=e,f.setSpeed=a,f.setDirection=i,f.play=s,f.moveFrame=r,f.pause=o,f.stop=l,f.togglePause=p,f.searchAnimations=m,f.resize=d,f.start=c,f.goToAndStop=h,f}(),AnimationItem=function(){this.name="",this.path="",this.isLoaded=!1,this.currentFrame=0,this.currentRawFrame=0,this.totalFrames=0,this.frameRate=0,this.frameMult=0,this.playSpeed=1,this.playDirection=1,this.pendingElements=0,this.playCount=0,this.prerenderFramesFlag=!0,this.repeat="indefinite",this.animationData={},this.layers=[],this.assets=[],this.isPaused=!0,this.isScrolling=!1,this.autoplay=!1,this.loop=!0,this.renderer=null,this.animationID=randomString(10),this.renderedFrameCount=0,this.scaleMode="fit",this.math=Math};AnimationItem.prototype.setParams=function(t){var e=this;t.context&&(this.context=t.context),t.wrapper&&(this.wrapper=t.wrapper);var a=t.animType?t.animType:"canvas";switch(a){case"canvas":this.renderer=new CanvasRenderer(this,t.renderer);break;case"svg":this.renderer=new SVGRenderer(this,t.renderer)}if(this.animType=a,""===t.loop||null===t.loop||(this.loop=t.loop===!1?!1:t.loop===!0?!0:parseInt(t.loop)),this.autoplay="autoplay"in t?t.autoplay:!0,this.name=t.name?t.name:"",this.prerenderFramesFlag="prerender"in t?t.prerender:!0,t.animationData)e.configAnimation(t.animationData);else if(t.path){"json"!=t.path.substr(-4)&&("/"!=t.path.substr(-1,1)&&(t.path+="/"),t.path+="data.json");var i=new XMLHttpRequest;this.path=t.path.substr(0,t.path.lastIndexOf("/")+1),i.open("GET",t.path,!0),i.send(),i.onreadystatechange=function(){if(4==i.readyState)if(200==i.status)e.configAnimation(JSON.parse(i.responseText));else try{var t=JSON.parse(i.responseText);e.configAnimation(t)}catch(a){}}}},AnimationItem.prototype.setData=function(t){var e={wrapper:t},a=t.attributes;e.path=a.getNamedItem("data-animation-path")?a.getNamedItem("data-animation-path").value:a.getNamedItem("data-bm-path")?a.getNamedItem("data-bm-path").value:a.getNamedItem("bm-path")?a.getNamedItem("bm-path").value:"",e.animType=a.getNamedItem("data-anim-type")?a.getNamedItem("data-anim-type").value:a.getNamedItem("data-bm-type")?a.getNamedItem("data-bm-type").value:a.getNamedItem("bm-type")?a.getNamedItem("bm-type").value:"canvas";var i=a.getNamedItem("data-anim-loop")?a.getNamedItem("data-anim-loop").value:a.getNamedItem("data-bm-loop")?a.getNamedItem("data-bm-loop").value:a.getNamedItem("bm-loop")?a.getNamedItem("bm-loop").value:"";""===i||(e.loop="false"===i?!1:"true"===i?!0:parseInt(i)),e.name=a.getNamedItem("data-name")?a.getNamedItem("data-name").value:a.getNamedItem("data-bm-name")?a.getNamedItem("data-bm-name").value:a.getNamedItem("bm-name")?a.getNamedItem("bm-name").value:"";var s=a.getNamedItem("data-anim-prerender")?a.getNamedItem("data-anim-prerender").value:a.getNamedItem("data-bm-prerender")?a.getNamedItem("data-bm-prerender").value:a.getNamedItem("bm-prerender")?a.getNamedItem("bm-prerender").value:"";"false"===s&&(e.prerender=!1),this.setParams(e)},AnimationItem.prototype.configAnimation=function(t){this.renderer.configAnimation(t),this.animationData=t,this.animationData._id=this.animationID,this.animationData._animType=this.animType,this.layers=this.animationData.animation.layers,this.assets=this.animationData.assets,this.totalFrames=this.animationData.animation.totalFrames,this.frameRate=this.animationData.animation.frameRate,this.firstFrame=Math.round(this.animationData.animation.ff*this.frameRate),this.frameMult=this.animationData.animation.frameRate/1e3,dataManager.completeData(this.animationData),this.renderer.buildItems(this.animationData.animation.layers),this.updaFrameModifier(),this.checkLoaded()},AnimationItem.prototype.elementLoaded=function(){this.pendingElements--,this.checkLoaded()},AnimationItem.prototype.checkLoaded=function(){this.renderer.buildStage(this.container,this.layers),0===this.pendingElements&&(this.prerenderFramesFlag?(this.prerenderFrames(0),dataManager.renderFrame(this.animationID,this.currentFrame+this.firstFrame),this.renderer.renderFrame(this.currentFrame+this.firstFrame)):(this.isLoaded=!0,this.gotoFrame(),this.autoplay&&this.play()))},AnimationItem.prototype.prerenderFrames=function(t){t||(t=0),this.renderedFrameCount===Math.floor(this.totalFrames)?(this.isLoaded=!0,this.gotoFrame(),this.autoplay&&this.play()):(dataManager.renderFrame(this.animationID,this.renderedFrameCount+this.firstFrame),this.renderedFrameCount+=1,t>10?setTimeout(this.prerenderFrames.bind(this),0):(t+=1,this.prerenderFrames(t)))},AnimationItem.prototype.resize=function(){this.renderer.updateContainerSize()},AnimationItem.prototype.gotoFrame=function(){this.currentFrame=subframeEnabled?this.math.round(100*this.currentRawFrame)/100:this.math.floor(this.currentRawFrame),this.renderFrame()},AnimationItem.prototype.renderFrame=function(){this.isLoaded!==!1&&(dataManager.renderFrame(this.animationID,this.currentFrame+this.firstFrame),this.renderer.renderFrame(this.currentFrame+this.firstFrame))},AnimationItem.prototype.play=function(t){t&&this.name!=t||this.isPaused===!0&&(this.isPaused=!1)},AnimationItem.prototype.pause=function(t){t&&this.name!=t||this.isPaused===!1&&(this.isPaused=!0)},AnimationItem.prototype.togglePause=function(t){t&&this.name!=t||(this.isPaused===!0?(this.isPaused=!1,this.play()):(this.isPaused=!0,this.pause()))},AnimationItem.prototype.stop=function(t){t&&this.name!=t||(this.isPaused=!0,this.currentFrame=this.currentRawFrame=0,this.playCount=0,this.gotoFrame())},AnimationItem.prototype.goToAndStop=function(t,e,a){a&&this.name!=a||(this.setCurrentRawFrameValue(e?t:t*this.frameModifier),this.isPaused=!0)},AnimationItem.prototype.advanceTime=function(t){this.isPaused!==!0&&this.isScrolling!==!0&&this.isLoaded!==!1&&this.setCurrentRawFrameValue(this.currentRawFrame+t*this.frameModifier)},AnimationItem.prototype.updateAnimation=function(t){this.setCurrentRawFrameValue(this.totalFrames*t)},AnimationItem.prototype.moveFrame=function(t,e){e&&this.name!=e||this.setCurrentRawFrameValue(this.currentRawFrame+t)},AnimationItem.prototype.setCurrentRawFrameValue=function(t){if(this.currentRawFrame=t,this.currentRawFrame>=this.totalFrames){if(this.loop===!1)return this.currentRawFrame=this.totalFrames-1,this.gotoFrame(),void this.pause();if(this.playCount+=1,this.loop!==!0&&this.playCount==this.loop)return this.currentRawFrame=this.totalFrames-1,this.gotoFrame(),void this.pause()}else if(this.currentRawFrame<0)return this.playCount-=1,this.playCount<0&&(this.playCount=0),this.loop===!1?(this.currentRawFrame=0,this.gotoFrame(),void this.pause()):(this.currentRawFrame=this.totalFrames+this.currentRawFrame,void this.gotoFrame());this.currentRawFrame=this.currentRawFrame%this.totalFrames,this.gotoFrame()},AnimationItem.prototype.setSpeed=function(t){this.playSpeed=t,this.updaFrameModifier()},AnimationItem.prototype.setDirection=function(t){this.playDirection=0>t?-1:1,this.updaFrameModifier()},AnimationItem.prototype.updaFrameModifier=function(){this.frameModifier=this.frameMult*this.playSpeed*this.playDirection},AnimationItem.prototype.getPath=function(){return this.path},AnimationItem.prototype.getAssets=function(){return this.assets},function(t){function e(t){animationManager.play(t)}function a(t){animationManager.pause(t)}function i(t){animationManager.togglePause(t)}function s(t,e){animationManager.setSpeed(t,e)}function r(t,e){animationManager.setDirection(t,e)}function n(t){animationManager.stop(t)}function o(t){animationManager.moveFrame(t)}function h(){animationManager.searchAnimations()}function l(t){return animationManager.registerAnimation(t)}function p(){animationManager.resize()}function m(){animationManager.start()}function d(t,e,a){animationManager.goToAndStop(t,e,a)}function c(t){subframeEnabled=t}function f(t){return animationManager.loadAnimation(t)}function u(){"complete"===document.readyState&&(clearInterval(g),h())}var y={};y.play=e,y.pause=a,y.togglePause=i,y.setSpeed=s,y.setDirection=r,y.stop=n,y.moveFrame=o,y.searchAnimations=h,y.registerAnimation=l,y.loadAnimation=f,y.setSubframeRendering=c,y.resize=p,y.start=m,y.goToAndStop=d,y.checkReady=u,t.bodymovin=y;var g=setInterval(u,100)}(window);}(window));
\ No newline at end of file
+(function(window){function Matrix(t){var e=this;e._t=e.transform,e.a=e.d=1,e.b=e.c=e.e=e.f=0,e.props=[1,0,0,1,0,0],e.cssParts=["matrix(","",")"],e.a1=e.b1=e.c1=e.d1=e.e1=e.f1=0,e.context=t,e.cos=e.sin=0,t&&t.setTransform(1,0,0,1,0,0)}function BM_CanvasRenderingContext2D(t){this.renderer=t}function matrixManagerFunction(){var t=new Matrix,e=function(t,e,a,i,r,s,n,o,h){var l,p,m,d,c,f,u;return l=$M([[1,0,0,0],[0,Math.cos(t),Math.sin(-t),0],[0,Math.sin(t),Math.cos(t),0],[0,0,0,1]]),p=$M([[Math.cos(e),0,Math.sin(e),0],[0,1,0,0],[Math.sin(-e),0,Math.cos(e),0],[0,0,0,1]]),m=$M([[Math.cos(a),Math.sin(-a),0,0],[Math.sin(a),Math.cos(a),0,0],[0,0,1,0],[0,0,0,1]]),c=$M([[i,0,0,0],[0,r,0,0],[0,0,s,0],[0,0,0,1]]),f=l.x(p).x(m).x(c),f=f.transpose(),u=$M([[1,0,0,0],[0,1,0,0],[0,0,1,0],[n,o,h,1]]),f=f.x(u),d="matrix3d(",d+=f.e(1,1).toFixed(5)+","+f.e(1,2).toFixed(5)+","+f.e(1,3).toFixed(5)+","+f.e(1,4).toFixed(5)+",",d+=f.e(2,1).toFixed(5)+","+f.e(2,2).toFixed(5)+","+f.e(2,3).toFixed(5)+","+f.e(2,4).toFixed(5)+",",d+=f.e(3,1).toFixed(5)+","+f.e(3,2).toFixed(5)+","+f.e(3,3).toFixed(5)+","+f.e(3,4).toFixed(5)+",",d+=f.e(4,1).toFixed(5)+","+f.e(4,2).toFixed(5)+","+f.e(4,3).toFixed(5)+","+f.e(4,4).toFixed(5),d+=")"},a=function(e,a,i,r,s){return t.reset().translate(r,s).rotate(e).scale(a,i).toCSS()},i=function(e,a,i,r,s){return t.reset().translate(r,s).rotate(e).scale(a,i).toArray()},r=function(t){return a(t.r,t.s[0],t.s[1],t.p[0],t.p[1])},s=function(t,i){return i?e(-t.tr.r[0],t.tr.r[1],t.tr.r[2],t.tr.s[0],t.tr.s[1],t.tr.s[2],t.tr.p[0],t.tr.p[1],t.tr.p[2]):a(t.tr.r[2],t.tr.s[0],t.tr.s[1],t.tr.p[0],t.tr.p[1])},n=function(t,i){return i?e(-t.r[0],t.r[1],t.r[2],t.s[0],t.s[1],t.s[2],t.p[0],t.p[1],t.p[2]):a(t.r[2],t.s[0],t.s[1],t.p[0],t.p[1])},o=function(t,e){return e?null:i(t.r[2],t.s[0],t.s[1],t.p[0],t.p[1])};return{get2DMatrix:r,getMatrix:s,getMatrix2:n,getMatrixArray:o,getMatrixArrayFromParams:i,getMatrix2FromParams:a}}function styleDiv(t){t.style.position="absolute",t.style.top=0,t.style.left=0,t.style.display="block",t.style.verticalAlign="top",t.style.backfaceVisibility=t.style.webkitBackfaceVisibility="hidden",styleUnselectableDiv(t)}function styleUnselectableDiv(t){t.style.userSelect="none",t.style.MozUserSelect="none",t.style.webkitUserSelect="none",t.style.oUserSelect="none"}function randomString(t,e){void 0===e&&(e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");var a,i="";for(a=t;a>0;--a)i+=e[Math.round(Math.random()*(e.length-1))];return i}function componentToHex(t){var e=t.toString(16);return 1==e.length?"0"+e:e}function fillToRgba(t,e){if(!cachedColors[t]){var a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);cachedColors[t]=parseInt(a[1],16)+","+parseInt(a[2],16)+","+parseInt(a[3],16)}return"rgba("+cachedColors[t]+","+e+")"}function createElement(t,e,a){if(!e){var i=Object.create(t.prototype,a),r={};return i&&"[object Function]"===r.toString.call(i.init)&&i.init(),i}e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.prototype.parent=t.prototype}function defineDescriptor(t,e,a,i){var r={writable:!1,configurable:!1,enumerable:!1,value:a};if(i)for(var s in i)r[s]=i[s];var n={};t&&"[object Function]"===n.toString.call(t)&&(t=t.prototype),Object.defineProperty(t,e,r)}function defineAccessor(t,e,a){var i,r={enumerable:!1,configurable:!1,get:function(){return i},set:function(t){i=t}};if(a)for(var s in a)r[s]=a[s];var n={};t&&"[object Function]"===n.toString.call(t)&&(t=t.prototype),Object.defineProperty(t,e,r)}function bezFunction(){function t(t,e,a,i,r,s){return l.abs((a-t)*(s-e)-(r-t)*(i-e))<1e-5}function e(t){return h[t].fnc}function a(t,e,a,i,r){if(r||(r=("bez_"+t+"_"+e+"_"+a+"_"+i).replace(/\./g,"p")),h[r])return h[r];var s,n,o,l,p,m;return h[r]=function(r,h,d,c,f){var u=h/f;r=u;for(var y,g=0;++g<14&&(o=3*t,n=3*(a-t)-o,s=1-o-n,y=r*(o+r*(n+r*s))-u,!(Math.abs(y)<.001));)r-=y/(o+r*(2*n+3*s*r));m=3*e,p=3*(i-e)-m,l=1-m-p;var v=r*(m+r*(p+r*l));return c*v+d},h[r]}function i(t){this.segmentLength=0,this.points=new Array(t)}function r(e){var a,r,s,n,o,h,l,p=e.s,m=e.e,d=e.to,c=e.ti,f=500,u=0,y=null;(p[0]!=m[0]||p[1]!=m[1])&&t(p[0],p[1],m[0],m[1],p[0]+d[0],p[1]+d[1])&&t(p[0],p[1],m[0],m[1],m[0]+c[0],m[1]+c[1])&&(f=2);var g=new i(f);for(s=d.length,a=0;f>a;a+=1){for(l=[],o=a/(f-1),h=0,r=0;s>r;r+=1)n=Math.pow(1-o,3)*p[r]+3*Math.pow(1-o,2)*o*(p[r]+d[r])+3*(1-o)*Math.pow(o,2)*(m[r]+c[r])+Math.pow(o,3)*m[r],l.push(n),null!==y&&(h+=Math.pow(l[r]-y[r],2));h=Math.sqrt(h),u+=h,g.points[a]={partialLength:h,cumulatedLength:u,point:l},y=l}g.segmentLength=u,e.bezierData=g}function s(t,e){var a=e.segments,i=a.length,r=Math.floor((i-1)*t),s=t*e.addedLength,n=0;if(s==a[r].l)return a[r].p;for(var o=a[r].l>s?-1:1,h=!0;h;)a[r].l<=s&&a[r+1].l>s?(n=(s-a[r].l)/(a[r+1].l-a[r].l),h=!1):r+=o,(0>r||r>=i-1)&&(h=!1);return a[r].p+(a[r+1].p-a[r].p)*n}function n(){this.pt1=new Array(2),this.pt2=new Array(2),this.pt3=new Array(2),this.pt4=new Array(2)}function o(t,e,a,i,r,o,h){var l=new n;r=0>r?0:r;var p=s(r,h);o=o>1?1:o;var m,d=s(o,h),c=t.length,f=1-p,u=1-d;for(m=0;c>m;m+=1)l.pt1[m]=f*f*f*t[m]+(p*f*f+f*p*f+f*f*p)*a[m]+(p*p*f+f*p*p+p*f*p)*i[m]+p*p*p*e[m],l.pt3[m]=f*f*u*t[m]+(p*f*u+f*p*u+f*f*d)*a[m]+(p*p*u+f*p*d+p*f*d)*i[m]+p*p*d*e[m],l.pt4[m]=f*u*u*t[m]+(p*u*u+f*d*u+f*u*d)*a[m]+(p*d*u+f*d*d+p*u*d)*i[m]+p*d*d*e[m],l.pt2[m]=u*u*u*t[m]+(d*u*u+u*d*u+u*u*d)*a[m]+(d*d*u+u*d*d+d*u*d)*i[m]+d*d*d*e[m];return l}var h=[],l=Math,p=function(){var e={};return function(a,i,r,s){var n=(a.join("_")+"_"+i.join("_")+"_"+r.join("_")+"_"+s.join("_")).replace(/\./g,"p");if(e[n])return e[n];var o,h,l,p,m,d,c=100,f=0,u=[],y=[],g={addedLength:0,segments:[]};for((a[0]!=i[0]||a[1]!=i[1])&&t(a[0],a[1],i[0],i[1],r[0],r[1])&&t(a[0],a[1],i[0],i[1],s[0],s[1])&&(c=2),l=r.length,o=0;c>o;o+=1){for(m=o/(c-1),d=0,h=0;l>h;h+=1)p=Math.pow(1-m,3)*a[h]+3*Math.pow(1-m,2)*m*r[h]+3*(1-m)*Math.pow(m,2)*s[h]+Math.pow(m,3)*i[h],u[h]=p,null!==y[h]&&(d+=Math.pow(u[h]-y[h],2)),y[h]=u[h];d&&(d=Math.sqrt(d),f+=d),g.segments.push({l:f,p:m})}return g.addedLength=f,e[n]=g,g}}();return{getEasingCurve:a,getEasingCurveByIndex:e,getBezierLength:p,getNewSegment:o,buildBezierData:r}}function dataFunctionManager(){function t(t,e,a){var i,r=h(t,e,a),s=[];for(i=0;e>i;i+=1)s.push(Math.floor(r[i]*x));return s}function e(t,e){var a,i,r,s=t.length;for(a=0;s>a;a+=1)if(void 0!==t[a].t)if(t[a].s instanceof Array)for(r=t[a].s.length,i=0;r>i;i+=1)t[a].s[i]*=e,void 0!==t[a].e&&(t[a].e[i]*=e);else t[a].s&&(t[a].s*=e,t[a].e&&(t[a].e*=e));else t[a]=t[a]*e}function a(n,h){h||(h=n);var l,p,m,d,c,f,u,y,g,v,x=n.length;for(f=0;x>f;f+=1){if(m=n[f],l=m.outPoint-m.startTime,p=m.startTime,m.layerName=o(m.layerName),m.parent&&(m.parent=o(m.parent)),m.tt&&(n[f-1].td=m.tt),m.renderedFrame={},m.renderedData={},d=[],c=-1,m.tm&&(m.trmp=m.tm,m.tm=t(m.tm,l,p)),m.ks.o instanceof Array?e(m.ks.o,.01):m.ks.o/=100,m.ks.s instanceof Array?e(m.ks.s,.01):m.ks.s/=100,m.ks.r instanceof Array?e(m.ks.r,E):m.ks.r*=E,m.hasMask){var b=m.masksProperties;for(y=b.length,u=0;y>u;u+=1)if(b[u].pt.i)s(b[u].pt);else for(v=b[u].pt.length,g=0;v>g;g+=1)b[u].pt[g].s&&s(b[u].pt[g].s[0]),b[u].pt[g].e&&s(b[u].pt[g].e[0])}"PreCompLayer"==m.type?m.refId&&!m.layers?m.layers=i(m.refId,h):a(m.layers,h):"ShapeLayer"==m.type&&r(m.shapes)}}function i(t,e,a){a||(a=e);var r,s=e.length;for(r=0;s>r;r+=1){if(e[r].compId==t)return e[r].layers||(e[r].layers=i(e[r].refId,a)),e[r].layers;if("PreCompLayer"==e[r].type){var n=i(t,e[r].layers,a);if(n)return n}}return null}function r(t,a){var i,n,o,h,l=t.length,p=a?a:!1;for(i=l-1;i>=0;i-=1)if(t[i].renderedData=[],"tm"==t[i].ty&&(p=!0),"fl"==t[i].ty||"st"==t[i].ty)t[i].o instanceof Array?e(t[i].o,.01):t[i].o*=.01;else if("sh"==t[i].ty)if(t[i].trimmed=p,t[i].ks.i)s(t[i].ks);else for(o=t[i].ks.length,n=0;o>n;n+=1)t[i].ks[n].s&&(s(t[i].ks[n].s[0]),s(t[i].ks[n].e[0]));else"gr"==t[i].ty?r(t[i].it,p):"tr"==t[i].ty?(h=t[i],h.renderedData=[],h.o instanceof Array?e(h.o,.01):h.o/=100,h.s instanceof Array?e(h.s,.01):h.s/=100,h.r instanceof Array?e(h.r,E):h.r*=E):"rc"==t[i].ty&&(t[i].trimmed=p,t[i].trimmed=!0)}function s(t){var e,a=t.i.length;for(e=0;a>e;e+=1)t.i[e][0]+=t.v[e][0],t.i[e][1]+=t.v[e][1],t.o[e][0]+=t.v[e][0],t.o[e][1]+=t.v[e][1]}function n(t){C[t._id]={data:t,renderedFrames:[]},x=t.animation.frameRate,a(t.animation.layers)}function o(t){return t=t.replace(/ /g,"_"),t=t.replace(/-/g,"_"),t=t.replace(/\./g,"_"),t=t.replace(/\//g,"_")}function h(t,e,a){var i,r,s=[];if(!(t instanceof Array)||null===t[0].t)return s.push(t),s;var n,o;s=[];var h,l,p,m=[];r=t.length;var d,c,f;for(i=0;r>i;i+=1)n=t[i],n.t-=a;var u=0,y=0;for(i=0;e>i;i+=1){h=u;for(var g=!1;r-1>h;){if(n=t[h],o=t[h+1],i<n.t&&0===h){for(p=n.s.length,m=[],l=0;p>l;l+=1)m.push(n.s[l]);s.push(m),g=!0,u!=h&&(u=h,y=0);break}if(i>=n.t&&i<o.t){if(m=[],n.to){d=bez.getEasingCurve(n.o.x,n.o.y,n.i.x,n.i.y)("",i-n.t,0,1,o.t-n.t),c=n.bezierData;var v,x,b=c.segmentLength*d;for(l=y;l<c.points.length;){if(0===i||0===b||0===d){m=c.points[l].point,y=l;break}if(l==c.points.length-1)m=c.points[l].point;else if(b>c.points[l].partialLength&&b<c.points[l+1].partialLength){for(v=c.points[l].point.length,x=(b-c.points[l].partialLength)/(c.points[l+1].partialLength-c.points[l].partialLength),f=0;v>f;f+=1)m.push(c.points[l].point[f]+(c.points[l+1].point[f]-c.points[l].point[f])*x);y=l;break}l+=1}}else{var C,E,D,w;n.s.forEach(function(t,e){if(1!==n.h&&(n.o.x instanceof Array?(C=n.o.x[e],E=n.o.y[e],D=n.i.x[e],w=n.i.y[e]):(C=n.o.x,E=n.o.y,D=n.i.x,w=n.i.y),d=bez.getEasingCurve(C,E,D,w)("",i-n.t,0,1,o.t-n.t)),t.i){var a={i:[],o:[],v:[]};t.i.forEach(function(i,r){var s=[],o=[],h=[];i.forEach(function(a,i){1===n.h?(s.push(a),o.push(t.o[r][i]),h.push(t.v[r][i])):(s.push(a+(n.e[e].i[r][i]-a)*d),o.push(t.o[r][i]+(n.e[e].o[r][i]-t.o[r][i])*d),h.push(t.v[r][i]+(n.e[e].v[r][i]-t.v[r][i])*d))}),a.i.push(s),a.o.push(o),a.v.push(h)}),m.push(a)}else m.push(1===n.h?t:t+(n.e[e]-t)*d)})}s.push(m),g=!0,u!=h&&(u=h,y=0);break}h+=1}g===!1&&(n=t[t.length-2],m=[],n.e.forEach(function(t){m.push(t)}),s.push(m))}for(h=s.length;e>h;)s.push(m),h+=1;return s}function l(t,e,a,i){var r,s,n,o,h,l;if(!t.length)return"p"==i.type?(S.px=t,S.py=t):"s"==i.type?(S.sx=t,S.sy=t):("r"==i.type||"px"==i.type||"py"==i.type)&&(S[i.type]=t),i.toArray?[t]:t;if(void 0===t[0].t)return"p"==i.type?(S.px=t[0],S.py=t[1]):"s"==i.type?(S.sx=t[0],S.sy=t[1]):("r"==i.type||"px"==i.type||"py"==i.type)&&(S[i.type]=t[0]),t;h=0,l=t.length-1;for(var p=1,m=!0;!(!m||(r=t[h],s=t[h+1],h==l-1&&e>=s.t-a)||s.t-a>e&&1==p);){if(s.t-a<e&&-1==p){h+=1,r=t[h],s=t[h+1];break}l-1>h&&1==p||h>0&&-1==p?h+=p:m=!1}r.to&&!r.bezierData&&bez.buildBezierData(r);var d,c,f,u,y,g=0;if("default"==i.type&&(n=[]),r.to){if(o=r.bezierData,e>=s.t-a)return"p"==i.type?(S.px=o.points[o.points.length-1].point[0],S.py=o.points[o.points.length-1].point[1]):"s"==i.type?(S.sx=o.points[o.points.length-1].point[0],S.sy=o.points[o.points.length-1].point[1]):("r"==i.type||"px"==i.type||"py"==i.type)&&(S[i.type]=o.points[o.points.length-1].point[0]),o.points[o.points.length-1].point;if(e<r.t-a)return"p"==i.type?(S.px=o.points[0].point[0],S.py=o.points[0].point[1]):"s"==i.type?(S.sx=o.points[0].point[0],S.sy=o.points[0].point[1]):("r"==i.type||"px"==i.type||"py"==i.type)&&(S[i.type]=o.points[0].point[0]),o.points[0].point;r.__fnct?y=r.__fnct:(y=bez.getEasingCurve(r.o.x,r.o.y,r.i.x,r.i.y,r.n),r.__fnct=y),f=y("",e-(r.t-a),0,1,s.t-a-(r.t-a));var v,x=o.segmentLength*f,b=0;for(p=1,m=!0,u=o.points.length;m;){if(b+=o.points[g].partialLength*p,0===x||0===f){"p"==i.type?(S.px=o.points[g].point[0],S.py=o.points[g].point[1]):"s"==i.type?(S.sx=o.points[g].point[0],S.sy=o.points[g].point[1]):"r"==i.type||"px"==i.type||"py"==i.type?S[i.type]=o.points[g].point[0]:n=o.points[g].point;break}if(g==o.points.length-1){"p"==i.type?(S.px=o.points[g].point[0],S.py=o.points[g].point[1]):"s"==i.type?(S.sx=o.points[g].point[0],S.sy=o.points[g].point[1]):"r"==i.type||"px"==i.type||"py"==i.type?S[i.type]=o.points[g].point[0]:n=o.points[g].point;break}if(x>b&&x<b+o.points[g+1].partialLength){if(v=(x-b)/o.points[g+1].partialLength,"p"==i.type)S.px=o.points[g].point[0]+(o.points[g+1].point[0]-o.points[g].point[0])*v,S.py=o.points[g].point[1]+(o.points[g+1].point[1]-o.points[g].point[1])*v;else if("s"==i.type)S.sx=o.points[g].point[0]+(o.points[g+1].point[0]-o.points[g].point[0])*v,S.sy=o.points[g].point[1]+(o.points[g+1].point[1]-o.points[g].point[1])*v;else if("r"==i.type||"px"==i.type||"py"==i.type)S[i.type]=o.points[g].point[0]+(o.points[g+1].point[0]-o.points[g].point[0])*v;else for(c=o.points[g].point.length,d=0;c>d;d+=1)n.push(o.points[g].point[d]+(o.points[g+1].point[d]-o.points[g].point[d])*v);break}u-1>g&&1==p||g>0&&-1==p?g+=p:m=!1}}else{var C,E,D,w,M=!1;for(l=r.s.length,h=0;l>h;h+=1)1!==r.h&&(r.o.x instanceof Array?(M=!0,C=r.o.x[h]?r.o.x[h]:r.o.x[0],E=r.o.y[h]?r.o.y[h]:r.o.y[0],D=r.i.x[h]?r.i.x[h]:r.i.x[0],w=r.i.y[h]?r.i.y[h]:r.i.y[0],r.__fnct||(r.__fnct=[])):(M=!1,C=r.o.x,E=r.o.y,D=r.i.x,w=r.i.y),M?r.__fnct[h]?y=r.__fnct[h]:(y=bez.getEasingCurve(C,E,D,w),r.__fnct[h]=y):r.__fnct?y=r.__fnct:(y=bez.getEasingCurve(C,E,D,w),r.__fnct=y),f=e>=s.t-a?1:e<r.t-a?0:y("",e-(r.t-a),0,1,s.t-a-(r.t-a))),1===r.h?"p"==i.type?0===h?S.px=r.s[h]:1==h&&(S.py=r.s[h]):"s"==i.type?0===h?S.sx=r.s[h]:1==h&&(S.sy=r.s[h]):"px"==i.type||"py"==i.type||"r"==i.type?S[i.type]=r.s[h]:n.push(r.s[h]):"p"==i.type?0===h?S.px=r.s[h]+(r.e[h]-r.s[h])*f:1==h&&(S.py=r.s[h]+(r.e[h]-r.s[h])*f):"s"==i.type?0===h?S.sx=r.s[h]+(r.e[h]-r.s[h])*f:1==h&&(S.sy=r.s[h]+(r.e[h]-r.s[h])*f):"px"==i.type||"py"==i.type||"r"==i.type?S[i.type]=r.s[h]+(r.e[h]-r.s[h])*f:n.push(r.s[h]+(r.e[h]-r.s[h])*f)}return n}function p(t,e){if(!t.__lengths){t.__lengths=[],t.__totalLength=0;var a,i=t.v,r=t.o,s=t.i,n=i.length;for(a=0;n-1>a;a+=1)t.__lengths.push(bez.getBezierLength(i[a],i[a+1],r[a],s[a+1])),t.__totalLength+=t.__lengths[a].addedLength;e&&(t.__lengths.push(bez.getBezierLength(i[a],i[0],r[a],s[0])),t.__totalLength+=t.__lengths[a].addedLength)}}function m(t,e,a,i,r,s){var n=s&&s.length>0,o={};o.closed=r?t.cl:t.closed;var h=r?t.pt:t.ks;if(h.v)return o.pathNodes=n?w(h,o.closed,s,!1):h,o;t={i:[],o:[],v:[]};var l,p,m,d,c,f,u,y=[];if(e<h[0].t-a){if(!h.__minValue){for(p=h[0].s[0].i.length,l=0;p>l;l+=1){for(c=[],f=[],u=[],d=h[0].s[0].i[l].length,m=0;d>m;m+=1)c.push(h[0].s[0].i[l][m]),f.push(h[0].s[0].o[l][m]),u.push(h[0].s[0].v[l][m]);t.i.push(c),t.o.push(f),t.v.push(u)}y.push(t),h.__minValue=y[0]}return o.pathNodes=n?w(h.__minValue,o.closed,s,!1):h.__minValue,o}if(e>h[h.length-1].t-a){if(!h.__maxValue){var g=h.length-2;for(p=h[g].s[0].i.length,l=0;p>l;l+=1){for(c=[],f=[],u=[],d=h[g].s[0].i[l].length,m=0;d>m;m+=1)c.push(h[g].e[0].i[l][m]),f.push(h[g].e[0].o[l][m]),u.push(h[g].e[0].v[l][m]);t.i.push(c),t.o.push(f),t.v.push(u)}y.push(t),h.__maxValue=y[0]}return o.pathNodes=n?w(h.__maxValue,o.closed,s,!1):h.__maxValue,o}for(var v,x,b=0,C=h.length-1,E=1,D=!0;D&&(v=h[b],x=h[b+1],!(x.t-a>e&&1==E));)C-1>b&&1==E||b>0&&-1==E?b+=E:D=!1;var S,M,F,I,A;if(1!==v.h){S=v.o.x,M=v.o.y,F=v.i.x,I=v.i.y;var P;v.__fnct?P=v.__fnct:(P=bez.getEasingCurve(S,M,F,I),v.__fnct=P),A=P("",e-(v.t-a),0,1,x.t-a-(v.t-a)),e>=x.t-a?A=1:e<v.t-a&&(A=0)}if(1===v.h&&v.__hValue)y.push(v.__hValue);else for(t={i:[],o:[],v:[]},p=v.s[0].i.length,l=0;p>l;l+=1){for(c=[],f=[],u=[],d=v.s[0].i[l].length,m=0;d>m;m+=1)1===v.h?(c.push(v.s[0].i[l][m]),f.push(v.s[0].o[l][m]),u.push(v.s[0].v[l][m])):(c.push(v.s[0].i[l][m]+(v.e[0].i[l][m]-v.s[0].i[l][m])*A),f.push(v.s[0].o[l][m]+(v.e[0].o[l][m]-v.s[0].o[l][m])*A),u.push(v.s[0].v[l][m]+(v.e[0].v[l][m]-v.s[0].v[l][m])*A));t.i.push(c),t.o.push(f),t.v.push(u),1===v.h&&(v.__hValue=t),y.push(t)}return o.pathNodes=n?w(y[0],o.closed,s,!1):y[0],o}function d(t,e,a){var i,r,s,n,o,h,p,c,u,y=t.length;for(c=0;y>c;c+=1)if(u=t[c],n=e-u.startTime,!u.an[n]){if(i={},D.arrayFlag=!1,D.type="default",i.a=l(u.ks.a,n,u.startTime,D),i.o=l(u.ks.o,n,u.startTime,D),D.arrayFlag=!1,u.ks.p.s?(D.type="px",l(u.ks.p.x,n,u.startTime,D),D.type="py",l(u.ks.p.y,n,u.startTime,D)):(D.type="p",l(u.ks.p,n,u.startTime,D)),D.arrayFlag=!0,D.type="r",l(u.ks.r,n,u.startTime,D),D.arrayFlag=!0,D.type="s",l(u.ks.s,n,u.startTime,D),p={},p.an={tr:i},D.arrayFlag=!1,D.type="default",p.an.matrixArray="canvas"==a?b.getMatrixArrayFromParams(S.r,S.sx,S.sy,S.px,S.py):b.getMatrixArrayFromParams(S.r,S.sx,S.sy,S.px,S.py),u.renderedData[n]=p,u.hasMask){r=u.masksProperties,h=r.length;var g;for(o=0;h>o;o+=1)if(r[o].paths||(r[o].paths=[],r[o].opacity=[]),"f"==r[o].mode&&o>0&&"svg"==a){var v=g.paths[n];v.pathNodes=v.pathNodes.constructor===Array?v.pathNodes:[v.pathNodes],v.pathNodes.push(m(r[o],n,u.startTime,a,!0).pathNodes)}else r[o].paths[n]=m(r[o],n,u.startTime,a,!0),r[o].opacity[n]=l(r[o].o,n,u.startTime,D),r[o].opacity[n]=r[o].opacity[n]instanceof Array?r[o].opacity[n][0]/100:r[o].opacity[n]/100,g=r[o]}e<u.inPoint||e>u.outPoint||("PreCompLayer"==u.type?(s=u.tm?u.tm[n]<0?0:n>=u.tm.length?u.tm[u.tm.length-1]:u.tm[n]:n,void 0===s&&(s=l(u.trmp,n,0,D)[0]*x,u.tm[n]=s),d(u.layers,s,a)):"ShapeLayer"==u.type&&f(u.shapes,n,u.startTime,a))}}function c(t,e,a){var i=new Array(8),r=new Array(8),s=new Array(8),n=a/2;return a*=1,i[0]=[t[0]+e[0]/2,t[1]-e[1]/2+a],s[0]=i[0],r[0]=[t[0]+e[0]/2,t[1]-e[1]/2+n],i[1]=[t[0]+e[0]/2,t[1]+e[1]/2-a],s[1]=[t[0]+e[0]/2,t[1]+e[1]/2-n],r[1]=i[1],i[2]=[t[0]+e[0]/2-a,t[1]+e[1]/2],s[2]=i[2],r[2]=[t[0]+e[0]/2-n,t[1]+e[1]/2],i[3]=[t[0]-e[0]/2+a,t[1]+e[1]/2],s[3]=[t[0]-e[0]/2+n,t[1]+e[1]/2],r[3]=i[3],i[4]=[t[0]-e[0]/2,t[1]+e[1]/2-a],s[4]=i[4],r[4]=[t[0]-e[0]/2,t[1]+e[1]/2-n],i[5]=[t[0]-e[0]/2,t[1]-e[1]/2+a],s[5]=[t[0]-e[0]/2,t[1]-e[1]/2+n],r[5]=i[5],i[6]=[t[0]-e[0]/2+a,t[1]-e[1]/2],s[6]=i[6],r[6]=[t[0]-e[0]/2+n,t[1]-e[1]/2],i[7]=[t[0]+e[0]/2-a,t[1]-e[1]/2],s[7]=[t[0]+e[0]/2-n,t[1]-e[1]/2],r[7]=i[7],{v:i,o:s,i:r,c:!0}}function f(t,e,a,i,r){var s,n,o,h,p,d,y,g,v,x,C=t.length;r||(r=[]);var E,M,F,I,A;for(s=C-1;s>=0;s-=1)if(n=t[s],"sh"==n.ty)n.renderedData[e]={path:m(n,e,a,i,!1,r)};else if("fl"==n.ty)o=l(n.c,e,a,D),h=l(n.o,e,a,D),n.renderedData[e]={opacity:h instanceof Array?h[0]:h},"canvas"==i?(u(o),n.renderedData[e].color=o):n.renderedData[e].color=rgbToHex(Math.round(o[0]),Math.round(o[1]),Math.round(o[2]));else if("rc"==n.ty)p=l(n.p,e,a,D),d=l(n.s,e,a,D),y=l(n.r,e,a,D),n.trimmed?(n.renderedData[e]={path:{closed:!0}},n.renderedData[e].path.pathNodes=w(c(p,d,y),!0,r,!1)):n.renderedData[e]={position:p,size:d,roundness:y};else if("el"==n.ty){if(p=l(n.p,e,a,D),d=l(n.s,e,a,D),n.renderedData[e]={p:p,size:d},"svg"==i){var P={v:new Array(4),i:new Array(4),o:new Array(4)};P.v[0]=[p[0],p[1]-d[1]/2],P.o[0]=[p[0]-d[0]/2*.55,p[1]-d[1]/2],P.i[0]=[p[0]+d[0]/2*.55,p[1]-d[1]/2],P.v[1]=[p[0]-d[0]/2,p[1]],P.o[1]=[p[0]-d[0]/2,p[1]+d[1]/2*.55],P.i[1]=[p[0]-d[0]/2,p[1]-d[1]/2*.55],P.v[2]=[p[0],p[1]+d[1]/2],P.o[2]=[p[0]+d[0]/2*.55,p[1]+d[1]/2],P.i[2]=[p[0]-d[0]/2*.55,p[1]+d[1]/2],P.v[3]=[p[0]+d[0]/2,p[1]],P.o[3]=[p[0]+d[0]/2,p[1]-d[1]/2*.55],P.i[3]=[p[0]+d[0]/2,p[1]+d[1]/2*.55],n.renderedData[e].path={pathNodes:P},n.closed=!0}}else if("st"==n.ty){if(g=l(n.c,e,a,D),v=l(n.o,e,a,D),x=l(n.w,e,a,D),n.renderedData[e]={opacity:v instanceof Array?v[0]:v,width:x instanceof Array?x[0]:x},n.d){var T=[];A=n.d.length;var _;for(I=0;A>I;I+=1)_=l(n.d[I].v,e,a,D),T.push({v:_ instanceof Array?_[0]:_,n:n.d[I].n});n.renderedData[e].dashes=T}"canvas"==i?(u(g),n.renderedData[e].color=g):n.renderedData[e].color=rgbToHex(Math.round(g[0]),Math.round(g[1]),Math.round(g[2]))}else if("tr"==n.ty)n.renderedData[e]={a:l(n.a,e,a,D),o:l(n.o,e,a,D)},D.arrayFlag=!0,D.type="s",l(n.s,e,a,D),D.arrayFlag=!0,D.type="r",l(n.r,e,a,D),D.arrayFlag=!1,D.type="p",l(n.p,e,a,D),D.arrayFlag=!1,D.type="default",n.renderedData[e].mtArr="canvas"==i?b.getMatrixArrayFromParams(S.r,S.sx,S.sy,S.px,S.py):b.getMatrixArrayFromParams(S.r,S.sx,S.sy,S.px,S.py);else if("tm"==n.ty){E=l(n.s,e,a,D),M=l(n.e,e,a,D),F=l(n.o,e,a,D);var k={s:E,e:M,o:F};r.push(k),n.renderedData[e]=k}else"gr"==n.ty&&f(n.it,e,a,i,r)}function u(t){var e,a=t.length;for(e=0;a>e;e+=1)t[e]=Math.round(t[e])}function y(t,e){for(var a=1;a>0;){if(e+=1,e>=t.data.animation.totalFrames){t.renderFinished=!0;break}t.renderedFrames[e]||(g(t.data._id,e),a-=1)}}function g(t,e){return 2==C[t].renderedFrames[e]?void(C[t].renderFinished||y(C[t],e)):(x=C[t].data.animation.frameRate,C[t].renderedFrames[e]=2,void d(C[t].data.animation.layers,e,C[t].data._animType))}function v(t){var e,a=C[t].data,i=a.animation.totalFrames,r=[];for(e=0;i>e;e+=1)r.push({num:e,data:g(t,e)})}var x=0,b=new MatrixManager,C={},E=Math.PI/180,D={arrayFlag:!1},w=function(){function t(t,s,n,p){i[o]=s,e[o+1]=n,a[o+1]=p,h?a[o]=t:(l+=" M"+t.join(","),h=!0,r[o]=t),l+=" C"+s.join(",")+" "+n.join(",")+" "+p.join(","),o+=1}var e,a,i,r,s,n,o,h=!1,l="";return function(m,d,c,f){p(m,d);var u,y=c.length,g=m;a=e=i=r=null;var v,x,b,C,E;for(u=y-1;u>=0;u-=1){var D=[],w=c[u].o%360/360;if(0!==w||0!==c[u].s||100!=c[u].e){l="",h=!1,e=[],i=[],a=[],r=[],s=[],n=0,0>w&&(w+=1);var S=c[u].s/100+w,M=c[u].e/100+w;if(S==M)return f?"":{};if(S>M){var F=S;S=M,M=F}1>=M?D.push({s:g.__totalLength*S,e:g.__totalLength*M}):S>=1?D.push({s:g.__totalLength*(S-1),e:g.__totalLength*(M-1)}):(D.push({s:g.__totalLength*S,e:g.__totalLength}),D.push({s:0,e:g.__totalLength*(M-1)})),v=[],x=[],b=[];var I;v=g.v,x=g.o,b=g.i,I=g.__lengths,E=v.length;var A,P,T=0,_=0,k=D.length;for(o=0,A=0;k>A;A+=1){for(T=0,C=1;E>C;C++)if(_=I[C-1].addedLength,T+_<D[A].s)T+=_;else{if(T>D[A].e)break;D[A].s<=T&&D[A].e>=T+_?t(v[C-1],x[C-1],b[C],v[C],I[C-1]):(P=bez.getNewSegment(v[C-1],v[C],x[C-1],b[C],(D[A].s-T)/_,(D[A].e-T)/_,I[C-1]),t(P.pt1,P.pt3,P.pt4,P.pt2)),T+=_}d!==!1?T<=D[A].e&&(_=I[C-1].addedLength,D[A].s<=T&&D[A].e>=T+_?t(v[C-1],x[C-1],b[0],v[0],I[C-1]):(P=bez.getNewSegment(v[C-1],v[0],x[C-1],b[0],(D[A].s-T)/_,(D[A].e-T)/_,I[C-1]),t(P.pt1,P.pt3,P.pt4,P.pt2))):h=!1}d=!1}}if(a?(v=a,x=i,b=e):(v=g.v,x=g.o,b=g.i,r=[]),E=v.length,f){for(l="",C=1;E>C;C++)r[C-1]?l+="M"+r[C-1].join(","):1==C&&(l+="M"+v[0].join(",")),l+=" C"+x[C-1].join(",")+" "+b[C].join(",")+" "+v[C].join(",");return d!==!1&&(l+=" C"+x[C-1].join(",")+" "+b[0].join(",")+" "+v[0].join(",")),l}return{i:b,o:x,v:v,s:r,c:d}}}(),S={r:0,sx:1,sy:1,px:1,py:1},M={};return M.completeData=n,M.renderFrame=g,M.renderAllFrames=v,M}function SVGRenderer(t){this.animationItem=t,this.layers=null,this.lastFrame=-1,this.globalData={frameNum:-1},this.elements=[]}function CanvasRenderer(t,e){this.animationItem=t,this.renderConfig=e?e:{clearCanvas:!0,context:null,scaleMode:"fit"},this.lastFrame=-1,this.globalData={frameNum:-1},this.contextData={saved:new Array(15),savedOp:new Array(15),cArrPos:0,cTr:new Matrix,cO:1};var a,i=15;for(a=0;i>a;a+=1)this.contextData.saved[a]=new Array(6);this.elements=[]}function MaskElement(t){this.data=null,this.element=null,this.globalData=t,this.paths=[]}function ICompElement(t,e,a,i){this.parent.constructor.call(this,t,e,a,i),this.layers=t.layers}function IImageElement(t,e,a,i){this.animationItem=e,this.assets=this.animationItem.getAssets(),this.path=this.animationItem.getPath(),this.parent.constructor.call(this,t,e,a,i)}function IShapeElement(t,e,a,i){this.shapes=[],this.parent.constructor.call(this,t,e,a,i)}function ShapeItemElement(t,e,a){this.stylesList=[],this.viewData=[],this.shape=e,this.data=t,this.globalData=a,this.searchShapes(this.data,this.viewData),styleUnselectableDiv(this.shape)}function ISolidElement(t,e,a,i){this.parent.constructor.call(this,t,e,a,i)}function ITextElement(t,e,a,i){this.parent.constructor.call(this,t,e,a,i)}function CVBaseElement(t,e){this.data=t,this.globalData=e,this.canvasContext=e.canvasContext,this.currentAnimData=null,this.renderFrame=!1,this.ownMatrix=new Matrix,this.finalTransform={mat:new Matrix,opacity:1},this.init()}function CVCompElement(t,e){this.parent.constructor.call(this,t,e),this.layers=t.layers}function CVImageElement(t,e){this.animationItem=e.renderer.animationItem,this.assets=this.animationItem.getAssets(),this.path=this.animationItem.getPath(),this.parent.constructor.call(this,t,e),this.animationItem.pendingElements+=1}function CVShapeElement(t,e){this.shapes=[],this.parent.constructor.call(this,t,e)}function CVShapeItemElement(t,e,a){this.data=t,this.globalData=a,this.canvasContext=a.canvasContext,this.frameNum=-1,this.dataLength=this.data.length,this.mainFlag=e,this.stylesList=[],this.ownStylesList=[],this.stylesPool=[],this.currentStylePoolPos=0,this.transform={opacity:1,mat:new Matrix},this.mat=new Matrix;var i,r=this.dataLength-1;this.renderedPaths=new Array(this.globalData.totalFrames);var s;for(i=r;i>=0;i-=1)"gr"==this.data[i].ty?this.data[i].item=new CVShapeItemElement(this.data[i].it,!1,this.globalData):("st"==this.data[i].ty||"fl"==this.data[i].ty)&&(s={type:"fill",styleOpacity:0,opacity:0,value:"rgba(0,0,0,0)",closed:!1},"fl"==this.data[i].ty?s.type="fill":(s.type="stroke",s.width=0),this.stylesPool.push(s))}function CVSolidElement(t,e){this.parent.constructor.call(this,t,e)}function CVTextElement(t,e){this.parent.constructor.call(this,t,e)}function CVMaskElement(){}var svgNS="http://www.w3.org/2000/svg";Matrix.prototype={concat:function(t){return this.clone()._t(t.a,t.b,t.c,t.d,t.e,t.f)},flipX:function(){return this._t(-1,0,0,1,0,0)},flipY:function(){return this._t(1,0,0,-1,0,0)},reflectVector:function(t,e){var a=this.applyToPoint(0,1),i=2*(a.x*t+a.y*e);return t-=i*a.x,e-=i*a.y,{x:t,y:e}},reset:function(){return this.setTransform(1,0,0,1,0,0)},rotate:function(t){return 0===t?this:(this.cos=Math.cos(t),this.sin=Math.sin(t),this._t(this.cos,this.sin,-this.sin,this.cos,0,0))},rotateFromVector:function(t,e){return this.rotate(Math.atan2(e,t))},rotateDeg:function(t){return this.rotate(t*Math.PI/180)},scaleU:function(t){return this._t(t,0,0,t,0,0)},scale:function(t,e){return 1==t&&1==e?this:this._t(t,0,0,e,0,0)},scaleX:function(t){return this._t(t,0,0,1,0,0)},scaleY:function(t){return this._t(1,0,0,t,0,0)},shear:function(t,e){return this._t(1,e,t,1,0,0)},shearX:function(t){return this._t(1,0,t,1,0,0)},shearY:function(t){return this._t(1,t,0,1,0,0)},skew:function(t,e){return this.shear(Math.tan(t),Math.tan(e))},skewX:function(t){return this.shearX(Math.tan(t))},skewY:function(t){return this.shearY(Math.tan(t))},setTransform:function(t,e,a,i,r,s){return this.props[0]=t,this.props[1]=e,this.props[2]=a,this.props[3]=i,this.props[4]=r,this.props[5]=s,this._x()},translate:function(t,e){return this._t(1,0,0,1,t,e)},translateX:function(t){return this._t(1,0,0,1,t,0)},translateY:function(t){return this._t(1,0,0,1,0,t)},transform:function(t,e,a,i,r,s){return this.a1=this.props[0],this.b1=this.props[1],this.c1=this.props[2],this.d1=this.props[3],this.e1=this.props[4],this.f1=this.props[5],this.props[0]=this.a1*t+this.c1*e,this.props[1]=this.b1*t+this.d1*e,this.props[2]=this.a1*a+this.c1*i,this.props[3]=this.b1*a+this.d1*i,this.props[4]=this.a1*r+this.c1*s+this.e1,this.props[5]=this.b1*r+this.d1*s+this.f1,this._x()},divide:function(t){if(!t.isInvertible())throw"Input matrix is not invertible";var e=t.inverse();return this._t(e.a,e.b,e.c,e.d,e.e,e.f)},divideScalar:function(t){var e=this;return e.a/=t,e.b/=t,e.c/=t,e.d/=t,e.e/=t,e.f/=t,e._x()},inverse:function(){if(this.isIdentity())return new Matrix;if(this.isInvertible()){var t=this,e=t.a,a=t.b,i=t.c,r=t.d,s=t.e,n=t.f,o=new Matrix,h=e*r-a*i;return o.a=r/h,o.b=-a/h,o.c=-i/h,o.d=e/h,o.e=(i*n-r*s)/h,o.f=-(e*n-a*s)/h,o}throw"Matrix is not invertible."},interpolate:function(t,e,a){var i=this,r=a?new Matrix(a):new Matrix;return r.a=i.a+(t.a-i.a)*e,r.b=i.b+(t.b-i.b)*e,r.c=i.c+(t.c-i.c)*e,r.d=i.d+(t.d-i.d)*e,r.e=i.e+(t.e-i.e)*e,r.f=i.f+(t.f-i.f)*e,r._x()},interpolateAnim:function(t,e,a){var i=this,r=a?new Matrix(a):new Matrix,s=i.decompose(),n=t.decompose(),o=s.rotation+(n.rotation-s.rotation)*e,h=s.translate.x+(n.translate.x-s.translate.x)*e,l=s.translate.y+(n.translate.y-s.translate.y)*e,p=s.scale.x+(n.scale.x-s.scale.x)*e,m=s.scale.y+(n.scale.y-s.scale.y)*e;return r.translate(h,l),r.rotate(o),r.scale(p,m),r._x()},decompose:function(t){var e=this.props[0],a=this.props[1],i=this.props[2],r=this.props[3],s=Math.acos,n=Math.atan,o=Math.sqrt,h=Math.PI,l={x:this.props[4],y:this.props[5]},p=0,m={x:1,y:1},d={x:0,y:0},c=e*r-a*i;if(t)e?(d={x:n(i/e),y:n(a/e)},m={x:e,y:c/e}):a?(p=.5*h,m={x:a,y:c/a},d.x=n(r/a)):(m={x:i,y:r},d.x=.25*h);else if(e||a){var f=o(e*e+a*a);p=a>0?s(e/f):-s(e/f),m={x:f,y:c/f},d.x=n((e*i+a*r)/(f*f))}else if(i||r){var u=o(i*i+r*r);p=.5*h-(r>0?s(-i/u):-s(i/u)),m={x:c/u,y:u},d.y=n((e*i+a*r)/(u*u))}else m={x:0,y:0};return{scale:m,translate:l,rotation:p,skew:d}},determinant:function(){return this.a*this.d-this.b*this.c},applyToPoint:function(t,e){return{x:t*this.props[0]+e*this.props[2]+this.props[4],y:t*this.props[1]+e*this.props[3]+this.props[5]}},applyToPointStringified:function(t,e){return t*this.props[0]+e*this.props[2]+this.props[4]+","+(t*this.props[1]+e*this.props[3]+this.props[5])},applyToArray:function(t){var e,a,i=0,r=[];if("number"==typeof t[0])for(a=t.length;a>i;)e=this.applyToPoint(t[i++],t[i++]),r.push(e.x,e.y);else for(a=t.length,i=0;a>i;i++)r.push(this.applyToPoint(t[i].x,t[i].y));return r},applyToTypedArray:function(t,e){for(var a,i=0,r=t.length,s=e?new Float64Array(r):new Float32Array(r);r>i;)a=this.applyToPoint(t[i],t[i+1]),s[i++]=a.x,s[i++]=a.y;return s},applyToContext:function(t){var e=this;return t.setTransform(e.a,e.b,e.c,e.d,e.e,e.f),e},isIdentity:function(){var t=this;return t._q(t.a,1)&&t._q(t.b,0)&&t._q(t.c,0)&&t._q(t.d,1)&&t._q(t.e,0)&&t._q(t.f,0)},isInvertible:function(){return!this._q(this.determinant(),0)},isValid:function(){return!this._q(this.a*this.d,0)},clone:function(t){var e=this,a=new Matrix;return a.a=e.a,a.b=e.b,a.c=e.c,a.d=e.d,a.e=e.e,a.f=e.f,t||(a.context=e.context),a},isEqual:function(t){var e=this,a=e._q;return a(e.a,t.a)&&a(e.b,t.b)&&a(e.c,t.c)&&a(e.d,t.d)&&a(e.e,t.e)&&a(e.f,t.f)},toArray:function(){return[this.props[0],this.props[1],this.props[2],this.props[3],this.props[4],this.props[5]]},toCSS:function(){return this.cssParts[1]=this.props.join(","),this.cssParts.join("")},toJSON:function(){var t=this;return'{"a":'+t.a+',"b":'+t.b+',"c":'+t.c+',"d":'+t.d+',"e":'+t.e+',"f":'+t.f+"}"},toString:function(){return""+this.toArray()},_q:function(t,e){return Math.abs(t-e)<1e-14},_x:function(){return this.context&&this.context.setTransform(this.a,this.b,this.c,this.d,this.e,this.f),this}},void 0===CanvasRenderingContext2D.prototype.ellipse&&(CanvasRenderingContext2D.prototype.ellipse=function(t,e,a,i,r,s,n,o){this.save(),this.translate(t,e),this.rotate(r),this.scale(a,i),this.arc(0,0,1,s,n,o),this.restore()});var BM_Path2D;!function(){function t(t){if(this.ops_=[],void 0!==t)if("string"==typeof t)try{this.ops_=parser.parse(t)}catch(e){}else{if(!t.hasOwnProperty("ops_"))throw"Error: "+typeof t+"is not a valid argument to Path";this.ops_=t.ops_.slice(0)}}function e(t){return function(){var e,a=arguments.length,i=[];for(e=0;a>e;e+=1)i.push(arguments[e]);this.ops_.push({type:t,args:i})}}for(var a=CanvasRenderingContext2D.prototype,i=BM_CanvasRenderingContext2D.prototype,r=["closePath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","rect","arc","arcTo","ellipse"],s=0;s<r.length;s++){var n=r[s];t.prototype[n]=e(n)}t.prototype.addPath=function(t,e){var a=!1;!e||1==e[0]&&0===e[1]&&0===e[2]&&1==e[3]&&0===e[4]&&0===e[5]||(a=!0,this.ops_.push({type:"save",args:[]}),this.ops_.push({type:"transform",args:[e[0],e[1],e[2],e[3],e[4],e[5]]})),this.ops_=this.ops_.concat(t.ops_),a&&this.ops_.push({type:"restore",args:[]})};var o=a.fill,h=a.stroke,l=a.clip;i.fill=function(e){if(e instanceof t){this.renderer.canvasContext.beginPath();for(var a=0,i=e.ops_.length;i>a;a++){var r=e.ops_[a];"transform"==r.type?this.renderer.ctxTransform(r.args):"save"==r.type?this.renderer.save():"restore"==r.type?this.renderer.restore():this.renderer.canvasContext[r.type].apply(this.renderer.canvasContext,r.args)}i=arguments.length;var s=[];for(a=1;i>a;a+=1)s.push(arguments[a]);o.apply(this.renderer.canvasContext,s)}else o.apply(this.renderer.canvasContext,arguments)},i.stroke=function(e){if(e instanceof t){this.renderer.canvasContext.beginPath();for(var a=0,i=e.ops_.length;i>a;a++){var r=e.ops_[a];this.renderer.canvasContext[r.type].apply(this.renderer.canvasContext,r.args)
+}h.call(this.renderer.canvasContext)}else h.call(this.renderer.canvasContext)},i.clip=function(e){if(e instanceof t){this.renderer.canvasContext.beginPath();for(var a=0,i=e.ops_.length;i>a;a++){var r=e.ops_[a];this.renderer.canvasContext[r.type].apply(this.renderer.canvasContext,r.args)}i=arguments.length;var s=[];for(a=1;i>a;a+=1)s.push(arguments[a]);l.apply(this.renderer.canvasContext,s)}else l.apply(this.renderer.canvasContext,arguments)},BM_Path2D=t}();var MatrixManager=matrixManagerFunction;!function(){for(var t=0,e=["ms","moz","webkit","o"],a=0;a<e.length&&!window.requestAnimationFrame;++a)window.requestAnimationFrame=window[e[a]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[a]+"CancelAnimationFrame"]||window[e[a]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e){var a=(new Date).getTime(),i=Math.max(0,16-(a-t)),r=window.setTimeout(function(){e(a+i)},i);return t=a+i,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(t){clearTimeout(t)})}();var subframeEnabled=!1,cachedColors={},rgbToHex=function(){var t,e,a=[];for(t=0;256>t;t+=1)e=t.toString(16),a[t]=1==e.length?"0"+e:e;return function(t,e,i){return 0>t&&(t=0),0>e&&(e=0),0>i&&(i=0),"#"+a[t]+a[e]+a[i]}}(),fillColorToString=function(){var t=[];return function(e,a){return t[e[0]]||(t[e[0]]=[]),t[e[0]][e[1]]||(t[e[0]][e[1]]=[]),t[e[0]][e[1]][e[2]]||(void 0!==a&&(e[3]=a),t[e[0]][e[1]][e[2]]="rgba("+e.join(",")+")"),t[e[0]][e[1]][e[2]]}}(),bez=bezFunction(),dataManager=dataFunctionManager();SVGRenderer.prototype.buildItems=function(t,e,a){var i,r=0,s=t.length;for(a||(a=this.elements),e||(e=this.animationItem.container),i=s-1;i>=0;i--){if("StillLayer"==t[i].type)r++,a[i]=this.createImage(t[i],e);else if("PreCompLayer"==t[i].type){a[i]=this.createComp(t[i],e);var n=[];this.buildItems(t[i].layers,a[i].getDomElement(),n),a[i].setElements(n)}else a[i]="SolidLayer"==t[i].type?this.createSolid(t[i],e):"ShapeLayer"==t[i].type?this.createShape(t[i],e):"TextLayer"==t[i].type?this.createText(t[i],e):this.createBase(t[i],e);t[i].td&&a[i+1].setMatte(a[i].layerId)}},SVGRenderer.prototype.createBase=function(t,e){return new BaseElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createShape=function(t,e){return new IShapeElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createText=function(t,e){return new ITextElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createImage=function(t,e){return new IImageElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createComp=function(t,e){return new ICompElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createSolid=function(t,e){return new ISolidElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.configAnimation=function(t){this.animationItem.container=document.createElementNS(svgNS,"svg"),this.animationItem.container.setAttribute("xmlns","http://www.w3.org/2000/svg"),this.animationItem.container.setAttribute("width",t.animation.compWidth),this.animationItem.container.setAttribute("height",t.animation.compHeight),this.animationItem.container.setAttribute("viewBox","0 0 "+t.animation.compWidth+" "+t.animation.compHeight),this.animationItem.container.setAttribute("preserveAspectRatio","xMidYMid meet"),this.animationItem.container.style.width="100%",this.animationItem.container.style.height="100%",this.animationItem.container.style.transformOrigin=this.animationItem.container.style.mozTransformOrigin=this.animationItem.container.style.webkitTransformOrigin=this.animationItem.container.style["-webkit-transform"]="0px 0px 0px",this.animationItem.wrapper.appendChild(this.animationItem.container);var e=document.createElementNS(svgNS,"defs");this.globalData.defs=e,this.animationItem.container.appendChild(e);var a=document.createElementNS(svgNS,"clipPath"),i=document.createElementNS(svgNS,"rect");i.setAttribute("width",t.animation.compWidth),i.setAttribute("height",t.animation.compHeight),i.setAttribute("x",0),i.setAttribute("y",0),a.setAttribute("id","animationMask"),a.appendChild(i);var r=document.createElementNS(svgNS,"g");r.setAttribute("clip-path","url(#animationMask)"),this.animationItem.container.appendChild(r),e.appendChild(a),this.animationItem.container=r,this.layers=t.animation.layers},SVGRenderer.prototype.buildStage=function(t,e,a){var i,r,s=e.length;for(a||(a=this.elements),i=s-1;i>=0;i--)r=e[i],r.parent&&this.buildItemParenting(r,a[i],e,r.parent,a),a[i].setMainElement(),"PreCompLayer"==r.type&&this.buildStage(a[i].getComposingElement(),r.layers,a[i].getElements())},SVGRenderer.prototype.buildItemParenting=function(t,e,a,i,r){t.parents||(t.parents=[]);for(var s=0,n=a.length;n>s;){if(a[s].layerName==i){e.getHierarchy().push(r[s]),a[s].parent&&this.buildItemParenting(t,e,a,a[s].parent,r);break}s+=1}},SVGRenderer.prototype.updateContainerSize=function(){},SVGRenderer.prototype.renderFrame=function(t){if(this.lastFrame!=t){this.lastFrame=t,this.globalData.frameNum=t;var e,a=this.layers.length;for(e=0;a>e;e++)this.elements[e].prepareFrame(t-this.layers[e].startTime);for(e=0;a>e;e++)this.elements[e].renderFrame(t-this.layers[e].startTime)}},CanvasRenderer.prototype.buildItems=function(t,e){e||(e=this.elements);var a,i=0,r=t.length;for(a=0;r>a;a++)if("StillLayer"==t[a].type)i++,e.push(this.createImage(t[a]));else if("PreCompLayer"==t[a].type){e.push(this.createComp(t[a]));var s=[];this.buildItems(t[a].layers,s),e[e.length-1].setElements(s)}else e.push("SolidLayer"==t[a].type?this.createSolid(t[a]):"ShapeLayer"==t[a].type?this.createShape(t[a]):"TextLayer"==t[a].type?this.createText(t[a]):this.createBase(t[a]))},CanvasRenderer.prototype.createBase=function(t){return new CVBaseElement(t,this.globalData)},CanvasRenderer.prototype.createShape=function(t){return new CVShapeElement(t,this.globalData)},CanvasRenderer.prototype.createText=function(t){return new CVTextElement(t,this.globalData)},CanvasRenderer.prototype.createImage=function(t){return new CVImageElement(t,this.globalData)},CanvasRenderer.prototype.createComp=function(t){return new CVCompElement(t,this.globalData)},CanvasRenderer.prototype.createSolid=function(t){return new CVSolidElement(t,this.globalData)},CanvasRenderer.prototype.ctxTransform=function(t){if(!this.renderConfig.clearCanvas)return void this.canvasContext.transform(t[0],t[1],t[2],t[3],t[4],t[5]);this.contextData.cTr.transform(t[0],t[1],t[2],t[3],t[4],t[5]);var e=this.contextData.cTr.props;this.canvasContext.setTransform(e[0],e[1],e[2],e[3],e[4],e[5])},CanvasRenderer.prototype.ctxOpacity=function(t){return this.renderConfig.clearCanvas?(this.contextData.cO*=t,void(this.canvasContext.globalAlpha=this.contextData.cO)):void(this.canvasContext.globalAlpha*=t)},CanvasRenderer.prototype.reset=function(){return this.renderConfig.clearCanvas?(this.contextData.cArrPos=0,this.contextData.cTr.reset(),void(this.contextData.cO=1)):void this.canvasContext.restore()},CanvasRenderer.prototype.save=function(t){if(!this.renderConfig.clearCanvas)return void this.canvasContext.save();t&&this.canvasContext.save();var e=this.contextData.cTr.props;null===this.contextData.saved[this.contextData.cArrPos]&&(this.contextData.saved[this.contextData.cArrPos]=new Array(6));var a,i=6,r=this.contextData.saved[this.contextData.cArrPos];for(a=0;i>a;a+=1)r[a]=e[a];this.contextData.savedOp[this.contextData.cArrPos]=this.contextData.cO,this.contextData.cArrPos+=1},CanvasRenderer.prototype.restore=function(t){if(!this.renderConfig.clearCanvas)return void this.canvasContext.restore();t&&this.canvasContext.restore(),this.contextData.cArrPos-=1;var e,a=this.contextData.saved[this.contextData.cArrPos],i=6,r=this.contextData.cTr.props;for(e=0;i>e;e+=1)r[e]=a[e];this.canvasContext.setTransform(a[0],a[1],a[2],a[3],a[4],a[5]),a=this.contextData.savedOp[this.contextData.cArrPos],this.contextData.cO=a,this.canvasContext.globalAlpha=a},CanvasRenderer.prototype.configAnimation=function(t){this.animationItem.wrapper?(this.animationItem.container=document.createElement("canvas"),this.animationItem.container.style.width="100%",this.animationItem.container.style.height="100%",this.animationItem.container.style.transformOrigin=this.animationItem.container.style.mozTransformOrigin=this.animationItem.container.style.webkitTransformOrigin=this.animationItem.container.style["-webkit-transform"]="0px 0px 0px",this.animationItem.wrapper.appendChild(this.animationItem.container),this.canvasContext=this.animationItem.container.getContext("2d")):this.canvasContext=this.renderConfig.context,this.globalData.canvasContext=this.canvasContext,this.globalData.bmCtx=new BM_CanvasRenderingContext2D(this),this.globalData.renderer=this,this.globalData.totalFrames=Math.floor(t.animation.totalFrames),this.globalData.compWidth=t.animation.compWidth,this.globalData.compHeight=t.animation.compHeight,this.layers=t.animation.layers,this.transformCanvas={},this.transformCanvas.w=t.animation.compWidth,this.transformCanvas.h=t.animation.compHeight,this.updateContainerSize()},CanvasRenderer.prototype.updateContainerSize=function(){var t,e;if(this.animationItem.wrapper&&this.animationItem.container?(t=this.animationItem.wrapper.offsetWidth,e=this.animationItem.wrapper.offsetHeight,this.animationItem.container.setAttribute("width",t),this.animationItem.container.setAttribute("height",e)):(t=this.canvasContext.canvas.width,e=this.canvasContext.canvas.height),"fit"==this.renderConfig.scaleMode){var a=t/e,i=this.transformCanvas.w/this.transformCanvas.h;i>a?(this.transformCanvas.sx=t/this.transformCanvas.w,this.transformCanvas.sy=t/this.transformCanvas.w,this.transformCanvas.tx=0,this.transformCanvas.ty=(e-this.transformCanvas.h*(t/this.transformCanvas.w))/2):(this.transformCanvas.sx=e/this.transformCanvas.h,this.transformCanvas.sy=e/this.transformCanvas.h,this.transformCanvas.tx=(t-this.transformCanvas.w*(e/this.transformCanvas.h))/2,this.transformCanvas.ty=0)}else this.transformCanvas.sx=1,this.transformCanvas.sy=1,this.transformCanvas.tx=0,this.transformCanvas.ty=0;this.transformCanvas.props=[this.transformCanvas.sx,0,0,this.transformCanvas.sy,this.transformCanvas.tx,this.transformCanvas.ty],this.clipper=new BM_Path2D,this.clipper.rect(0,0,this.transformCanvas.w,this.transformCanvas.h)},CanvasRenderer.prototype.buildStage=function(t,e,a){a||(a=this.elements);var i,r,s=e.length;for(i=s-1;i>=0;i--)r=e[i],r.parent&&this.buildItemHierarchy(r,a[i],e,r.parent,a),"PreCompLayer"==r.type&&this.buildStage(null,r.layers,a[i].getElements())},CanvasRenderer.prototype.buildItemHierarchy=function(t,e,a,i,r){for(var s=0,n=a.length;n>s;){if(a[s].layerName==i){e.getHierarchy().push(r[s]),void 0===a[s].parent||this.buildItemHierarchy(t,e,a,a[s].parent,r);break}s+=1}},CanvasRenderer.prototype.prepareFrame=function(t){var e,a=this.elements.length;for(e=0;a>e;e++)this.elements[e].prepareFrame(t-this.layers[e].startTime)},CanvasRenderer.prototype.draw=function(){var t,e=this.layers.length;for(t=e-1;t>=0;t-=1)this.elements[t].draw()},CanvasRenderer.prototype.renderFrame=function(t){(this.lastFrame!=t||this.renderConfig.clearCanvas!==!0)&&(this.lastFrame=t,this.globalData.frameNum=t-this.animationItem.firstFrame,this.renderConfig.clearCanvas===!0?(this.reset(),this.canvasContext.canvas.width=this.canvasContext.canvas.width):this.save(),this.ctxTransform(this.transformCanvas.props),this.globalData.bmCtx.clip(this.clipper),this.prepareFrame(t),this.draw(),this.renderConfig.clearCanvas!==!0&&this.restore())},MaskElement.prototype.init=function(){this.registeredEffects=[],this.masksProperties=this.data.masksProperties,this.totalMasks=this.masksProperties.length;var t=this.element.maskedElement,e=this.globalData.defs,a=0,i=this.masksProperties.length;this.layerSize=this.element.getLayerSize(),this.maskElement=document.createElementNS(svgNS,"clipPath");var r,s=this.data.masksProperties;for(a=0;i>a;a++)s[a].inv&&!this.solidPath&&(this.solidPath=this.createLayerSolidPath()),"f"==s[a].mode&&a>0||(r=document.createElementNS(svgNS,"path"),s[a].cl?r.setAttribute("fill","#ffffff"):(r.setAttribute("fill","none"),r.setAttribute("stroke","#ffffff"),r.setAttribute("stroke-width","1"),r.setAttribute("stroke-miterlimit","10")),r.setAttribute("clip-rule","nonzero"),this.maskElement.appendChild(r),s[a].elem=r,s[a].lastPath="");var n=randomString(10);this.maskElement.setAttribute("id",n),t.setAttribute("clip-path","url(#"+n+")"),e.appendChild(this.maskElement)},MaskElement.prototype.renderFrame=function(t){var e,a=this.data.masksProperties.length;for(e=0;a>e;e++)"f"==this.data.masksProperties[e].mode&&e>0||this.drawPath(this.data.masksProperties[e],this.data.masksProperties[e].paths[t].pathNodes)},MaskElement.prototype.processMaskFromEffects=function(t,e){var a,i=this.registeredEffects.length;for(a=0;i>a;a++)this.registeredEffects[a].renderMask(t,e)},MaskElement.prototype.registerEffect=function(t){this.registeredEffects.push(t)},MaskElement.prototype.getMaskelement=function(){return this.maskElement},MaskElement.prototype.createLayerSolidPath=function(){var t="M0,0 ";return t+="h"+this.layerSize.w,t+="v"+this.layerSize.h,t+="h"+-this.layerSize.w,t+="v"+-this.layerSize.h},MaskElement.prototype.drawPath=function(t,e){var a,i,r="";if(e.constructor===Array){var s,n,o=e.length,h="";for(s=0;o>s;s+=1){if(h="",n=e[s],!n.__renderedString){for(i=n.v.length,a=1;i>a;a+=1)1==a&&(h+=" M"+n.v[0][0]+","+n.v[0][1]),h+=" C"+n.o[a-1][0]+","+n.o[a-1][1]+" "+n.i[a][0]+","+n.i[a][1]+" "+n.v[a][0]+","+n.v[a][1];t.cl&&(h+=" C"+n.o[a-1][0]+","+n.o[a-1][1]+" "+n.i[0][0]+","+n.i[0][1]+" "+n.v[0][0]+","+n.v[0][1]),n.__renderedString=h}r+=n.__renderedString}}else if(e.__renderedString)r=e.__renderedString;else{for(i=e.v.length,a=1;i>a;a+=1)1==a&&(r+=" M"+e.v[0][0]+","+e.v[0][1]),r+=" C"+e.o[a-1][0]+","+e.o[a-1][1]+" "+e.i[a][0]+","+e.i[a][1]+" "+e.v[a][0]+","+e.v[a][1];t.cl&&(r+=" C"+e.o[a-1][0]+","+e.o[a-1][1]+" "+e.i[0][0]+","+e.i[0][1]+" "+e.v[0][0]+","+e.v[0][1]),e.__renderedString=r}t.lastPath!==r&&(t.inv?t.elem.setAttribute("d",this.solidPath+r):t.elem.setAttribute("d",r),t.lastPath=r)};var BaseElement=function(t,e,a,i){this.animationItem=e,this.globalData=i,this.data=t,this.ownMatrix=new Matrix,this.finalTransform={mat:new Matrix,op:1},this.matteElement=null,this.renderedFrames=[],this.lastData={},this.parentContainer=a,this.layerId=randomString(10),this.init()};BaseElement.prototype.init=function(){this.createElements(),this.data.hasMask&&this.addMasks(this.data),this.data.eff&&this.createEffectsManager(this.data)},BaseElement.prototype.createElements=function(){this.data.hasMask?(this.layerElement=document.createElementNS(svgNS,"g"),this.data.tt?(this.matteElement=document.createElementNS(svgNS,"g"),this.matteElement.appendChild(this.layerElement),this.parentContainer.appendChild(this.matteElement)):this.parentContainer.appendChild(this.layerElement),this.maskedElement=this.layerElement):this.data.td?(this.layerElement=document.createElementNS(svgNS,"mask"),this.layerElement.setAttribute("id",this.layerId),3==this.data.td?this.layerElement.setAttribute("mask-type","luminance"):this.layerElement.setAttribute("mask-type","alpha"),this.globalData.defs.appendChild(this.layerElement)):this.data.tt?(this.matteElement=document.createElementNS(svgNS,"g"),this.matteElement.setAttribute("id",this.layerId),this.parentContainer.appendChild(this.matteElement),this.layerElement=this.matteElement):this.layerElement=this.parentContainer},BaseElement.prototype.prepareFrame=function(t){this.currentAnimData=this.data.renderedData[t].an;var e=this.currentAnimData.matrixArray;this.ownMatrix.reset().transform(e[0],e[1],e[2],e[3],e[4],e[5]).translate(-this.currentAnimData.tr.a[0],-this.currentAnimData.tr.a[1])},BaseElement.prototype.renderFrame=function(t,e){if("NullLayer"!=this.data.type){if(this.data.inPoint-this.data.startTime<=t&&this.data.outPoint-this.data.startTime>=t?(this.isVisible!==!0&&(this.isVisible=!0),this.finalTransform.opacity=1):(this.isVisible!==!1&&(this.isVisible=!1),this.finalTransform.opacity=0),this.data.eff&&this.effectsManager.renderFrame(t,this.currentAnimData.mk),t===this.data.renderedFrame.num)return this.isVisible;this.data.hasMask&&this.maskManager.renderFrame(t),this.finalTransform.opacity*=this.currentAnimData.tr.o;var a,i=this.finalTransform.mat;if(e&&(a=e.mat.props,i.reset().transform(a[0],a[1],a[2],a[3],a[4],a[5]),this.finalTransform.opacity*=e.opacity),this.hierarchy){var r,s=this.hierarchy.length;for(e||i.reset(),r=s-1;r>=0;r-=1)a=this.hierarchy[r].ownMatrix.props,i.transform(a[0],a[1],a[2],a[3],a[4],a[5]);a=this.ownMatrix.props,i.transform(a[0],a[1],a[2],a[3],a[4],a[5])}else this.isVisible&&(e?(a=this.ownMatrix.props,i.transform(a[0],a[1],a[2],a[3],a[4],a[5])):this.finalTransform.mat=this.ownMatrix);if(this.data.hasMask){this.renderedFrames[this.globalData.frameNum]||(this.renderedFrames[this.globalData.frameNum]={tr:"matrix("+i.props.join(",")+")",o:this.finalTransform.opacity});var n=this.renderedFrames[this.globalData.frameNum];this.lastData.tr!=n.tr&&(this.lastData.tr=n.tr,this.layerElement.setAttribute("transform",n.tr)),this.lastData.o!==n.o&&(this.lastData.o=n.o,this.layerElement.setAttribute("opacity",n.o))}return this.isVisible}},BaseElement.prototype.getDomElement=function(){return this.layerElement},BaseElement.prototype.setMainElement=function(){this.mainElement=this.layerElement},BaseElement.prototype.getMaskManager=function(){return this.maskManager},BaseElement.prototype.addMasks=function(t){var e={data:{value:t},element:{value:this},globalData:{value:this.globalData}};this.maskManager=createElement(MaskElement,null,e)},BaseElement.prototype.createEffectsManager=function(t){var e={effects:{value:t.eff},element:{value:this}};this.effectsManager=createElement(EffectsManager,null,e)},BaseElement.prototype.getType=function(){return this.type},BaseElement.prototype.getLayerSize=function(){return"TextLayer"==this.data.type?{w:this.data.textData.width,h:this.data.textData.height}:{w:this.data.width,h:this.data.height}},BaseElement.prototype.getHierarchy=function(){return this.hierarchy||(this.hierarchy=[]),this.hierarchy},BaseElement.prototype.setMatte=function(t){this.matteElement.setAttribute("mask","url(#"+t+")")},BaseElement.prototype.hide=function(){},createElement(BaseElement,ICompElement),ICompElement.prototype.getComposingElement=function(){return this.layerElement},ICompElement.prototype.hide=function(){if(!this.hidden){var t,e=this.elements.length;for(t=0;e>t;t+=1)this.elements[t].hide();this.hidden=!0}},ICompElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);if(a===!1)return void this.hide();this.hidden=!1;var i,r=this.layers.length,s=this.data.tm?this.data.tm[t]<0?0:t>=this.data.tm.length?this.data.tm[this.data.tm.length-1]:this.data.tm[t]:t;for(i=0;r>i;i+=1)this.elements[i].prepareFrame(s-this.layers[i].startTime);for(i=0;r>i;i+=1)this.data.hasMask?this.elements[i].renderFrame(s-this.layers[i].startTime):this.elements[i].renderFrame(s-this.layers[i].startTime,this.finalTransform)},ICompElement.prototype.setElements=function(t){this.elements=t},ICompElement.prototype.getElements=function(){return this.elements},createElement(BaseElement,IImageElement),IImageElement.prototype.createElements=function(){var t=this,e=function(){t.image.setAttributeNS("http://www.w3.org/1999/xlink","href",t.path+t.assets[t.data.assetId].path),t.maskedElement=t.image,t.animationItem.elementLoaded()},a=new Image;a.addEventListener("load",e,!1),a.addEventListener("error",e,!1),a.src=this.path+this.assets[this.data.assetId].path,this.parent.createElements.call(this),this.image=document.createElementNS(svgNS,"image"),this.image.setAttribute("width",this.data.width+"px"),this.image.setAttribute("height",this.data.height+"px"),this.layerElement.appendChild(this.image)},IImageElement.prototype.hide=function(){this.hidden||this.data.hasMask||(this.image.setAttribute("opacity","0"),this.hidden=!0)},IImageElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);if(a===!1)return void this.hide();if(this.hidden=!1,!this.data.hasMask){this.renderedFrames[this.globalData.frameNum]||(this.renderedFrames[this.globalData.frameNum]={tr:"matrix("+this.finalTransform.mat.props.join(",")+")",o:this.finalTransform.opacity});var i=this.renderedFrames[this.globalData.frameNum];this.lastData.tr!=i.tr&&(this.lastData.tr=i.tr,this.image.setAttribute("transform",i.tr)),this.lastData.o!==i.o&&(this.lastData.o=i.o,this.image.setAttribute("opacity",i.o))}},createElement(BaseElement,IShapeElement),IShapeElement.prototype.createElements=function(){this.parent.createElements.call(this),this.mainShape=new ShapeItemElement(this.data.shapes,this.layerElement,this.globalData)},IShapeElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);return a===!1?void this.hide():void this.renderShapes(t)},IShapeElement.prototype.hide=function(){this.hidden||(this.mainShape.hideShape(),this.hidden=!0)},IShapeElement.prototype.renderShapes=function(t){this.hidden=!1,this.data.hasMask?this.mainShape.renderShape(t,{opacity:1,mat:new Matrix}):this.mainShape.renderShape(t,this.finalTransform)},ShapeItemElement.prototype.searchShapes=function(t,e){var a,i,r,s=t.length-1,n=[];for(a=s;a>=0;a-=1)if("fl"==t[a].ty||"st"==t[a].ty){e[a]={renderedFrames:[],lastData:{c:"",o:-1,w:""}};var o=document.createElementNS(svgNS,"path");this.shape.appendChild(o),this.stylesList.push({pathElement:o,type:t[a].ty,d:""}),e[a].style=this.stylesList[this.stylesList.length-1],n.push(e[a].style)}else if("gr"==t[a].ty)e[a]={it:[]},this.searchShapes(t[a].it,e[a].it);else if("tr"==t[a].ty)e[a]={transform:{mat:new Matrix,opacity:1}};else if("sh"==t[a].ty||"rc"==t[a].ty||"el"==t[a].ty)for(e[a]={elements:[],renderedFrames:[],styles:[],lastData:{d:"",o:"",tr:""}},r=this.stylesList.length,i=0;r>i;i+=1)this.stylesList[i].closed||(e[a].styles.push(this.stylesList[i]),"st"==this.stylesList[i].type&&(this.stylesList[i].pathElement.setAttribute("fill-opacity",0),this.stylesList[i].pathElement.setAttribute("stroke-linejoin","round"),this.stylesList[i].pathElement.setAttribute("stroke-linecap","round")));for(s=n.length,a=0;s>a;a+=1)n[a].closed=!0},ShapeItemElement.prototype.getElement=function(){return this.shape},ShapeItemElement.prototype.hideShape=function(){var t,e=this.stylesList.length;for(t=e-1;t>=0;t-=1)this.stylesList[t].pathElement.setAttribute("d","")},ShapeItemElement.prototype.renderShape=function(t,e,a,i){var r,s;if(!a)for(a=this.data,s=this.stylesList.length,r=0;s>r;r+=1)this.stylesList[r].d="";i||(i=this.viewData),this.frameNum=t,s=a.length-1;var n,o;for(n=e,r=s;r>=0;r-=1)if("tr"==a[r].ty){var h=a[r].renderedData[t].mtArr;if(n=i[r].transform,o=n.mat,o.reset(),e){var l=e.mat.props;n.opacity=e.opacity,n.opacity*=a[r].renderedData[t].o,o.transform(l[0],l[1],l[2],l[3],l[4],l[5])}else n.opacity=a[r].renderedData[t].o;o.transform(h[0],h[1],h[2],h[3],h[4],h[5]).translate(-a[r].renderedData[t].a[0],-a[r].renderedData[t].a[1])}else"sh"==a[r].ty?this.renderPath(a[r],i[r],t,n):"el"==a[r].ty?this.renderPath(a[r],i[r],t,n):"rc"==a[r].ty?a[r].trimmed?this.renderPath(a[r],i[r],t,n):this.renderRect(a[r],i[r],t,n):"fl"==a[r].ty?this.renderFill(a[r],i[r],t,n):"st"==a[r].ty?this.renderStroke(a[r],i[r],t,n):"gr"==a[r].ty?this.renderShape(t,n,a[r].it,i[r].it):"tm"==a[r].ty;for(s=this.stylesList.length,r=0;s>r;r+=1)this.stylesList[r].pathElement.setAttribute("d",this.stylesList[r].d)},ShapeItemElement.prototype.renderPath=function(t,e,a,i){var r,s;if(!e.renderedFrames[this.globalData.frameNum]){var n=t.renderedData[a].path.pathNodes;if(!n.v)return;r=n.v.length;var o=n.s?n.s:[],h="";for(s=1;r>s;s+=1)o[s-1]?h+=" M"+i.mat.applyToPointStringified(o[s-1][0],o[s-1][1]):1==s&&(h+=" M"+i.mat.applyToPointStringified(n.v[0][0],n.v[0][1])),h+=" C"+i.mat.applyToPointStringified(n.o[s-1][0],n.o[s-1][1])+" "+i.mat.applyToPointStringified(n.i[s][0],n.i[s][1])+" "+i.mat.applyToPointStringified(n.v[s][0],n.v[s][1]);!t.closed||t.trimmed&&!n.c||(h+=" C"+i.mat.applyToPointStringified(n.o[s-1][0],n.o[s-1][1])+" "+i.mat.applyToPointStringified(n.i[0][0],n.i[0][1])+" "+i.mat.applyToPointStringified(n.v[0][0],n.v[0][1])),e.renderedFrames[this.globalData.frameNum]={dTr:h}}var l=e.renderedFrames[this.globalData.frameNum];for(r=e.styles.length,s=0;r>s;s+=1)e.styles[s].d+=l.dTr},ShapeItemElement.prototype.renderFill=function(t,e,a,i){var r=t.renderedData[a],s=e.style;e.renderedFrames[this.globalData.frameNum]||(e.renderedFrames[this.globalData.frameNum]={c:r.color,o:r.opacity*i.opacity});var n=e.renderedFrames[this.globalData.frameNum],o=n.c,h=n.o;e.lastData.c!=o&&s.pathElement.setAttribute("fill",o),e.lastData.o!=h&&s.pathElement.setAttribute("fill-opacity",h),e.lastData.c=o,e.lastData.o=h},ShapeItemElement.prototype.renderStroke=function(t,e,a,i){var r=t.renderedData[a],s=e.style;e.renderedFrames[this.globalData.frameNum]||(e.renderedFrames[this.globalData.frameNum]={c:r.color,o:r.opacity*i.opacity,w:r.width},r.dashes&&(e.renderedFrames[this.globalData.frameNum].d=r.dashes));var n,o,h=e.renderedFrames[this.globalData.frameNum],l=h.c,p=h.o,m=h.w,d=h.d;if(d){var c,f=d.length;for(n="",o="",c=0;f>c;c+=1)"o"!=d[c].n?n+=" "+d[c].v:o+=d[c].v}e.lastData.c!=l&&s.pathElement.setAttribute("stroke",l),e.lastData.o!=p&&s.pathElement.setAttribute("stroke-opacity",p),e.lastData.w!=m&&s.pathElement.setAttribute("stroke-width",m),d&&(e.lastData.da!=n&&s.pathElement.setAttribute("stroke-dasharray",n),e.lastData["do"]!=o&&s.pathElement.setAttribute("stroke-dashoffset",o)),e.lastData.c=l,e.lastData.o=p,e.lastData.w=m,d&&(e.lastData.da=n,e.lastData["do"]=o)},createElement(BaseElement,ISolidElement),ISolidElement.prototype.createElements=function(){this.parent.createElements.call(this);var t=document.createElementNS(svgNS,"rect");t.setAttribute("width",this.data.width),t.setAttribute("height",this.data.height),t.setAttribute("fill",this.data.color),this.layerElement.appendChild(t),this.rectElement=t},ISolidElement.prototype.hide=function(){this.hidden||this.data.hasMask||(this.rectElement.setAttribute("opacity","0"),this.hidden=!0)},ISolidElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);if(a===!1)return void this.hide();if(this.hidden&&(this.lastData.o=-1,this.hidden=!1),!this.data.hasMask){this.renderedFrames[this.globalData.frameNum]||(this.renderedFrames[this.globalData.frameNum]={tr:"matrix("+this.finalTransform.mat.props.join(",")+")",o:this.finalTransform.opacity});var i=this.renderedFrames[this.globalData.frameNum];this.lastData.tr!=i.tr&&(this.lastData.tr=i.tr,this.rectElement.setAttribute("transform",i.tr)),this.lastData.o!==i.o&&(this.lastData.o=i.o,this.rectElement.setAttribute("opacity",i.o))}},createElement(BaseElement,ITextElement),ITextElement.prototype.createElements=function(){this.svgElem=document.createElementNS(svgNS,"g");var t=document.createElementNS(svgNS,"text");t.textContent=this.data.textData.text,t.setAttribute("fill",this.data.textData.fillColor),t.setAttribute("x","0"),t.setAttribute("y",this.data.textData.height-(this.data.textData.fontSize-this.data.textData.height)/2),this.svgElem.setAttribute("width",this.data.textData.width),this.svgElem.setAttribute("height",this.data.textData.height),this.svgElem.style.transform=this.svgElem.style.webkitTransform="translate("+this.data.textData.xOffset+"px,"+this.data.textData.yOffset+"px)",t.setAttribute("font-size",this.data.textData.fontSize),t.setAttribute("font-family","Arial, sans-serif"),this.svgElem.appendChild(t),this.parent.createElements.call(this),this.anchorElement.appendChild(this.svgElem),this.maskedElement=t},CVBaseElement.prototype.init=function(){this.createElements(),this.data.hasMask&&this.addMasks(this.data),this.data.eff&&this.createEffectsManager(this.data)},CVBaseElement.prototype.createElements=function(){},CVBaseElement.prototype.prepareFrame=function(t){this.currentAnimData=this.data.renderedData[t].an;var e=this.currentAnimData.matrixArray;return this.ownMatrix.reset().transform(e[0],e[1],e[2],e[3],e[4],e[5]).translate(-this.currentAnimData.tr.a[0],-this.currentAnimData.tr.a[1]),this.data.inPoint-this.data.startTime<=t&&this.data.outPoint-this.data.startTime>=t?(this.renderFrame=!0,this.finalTransform.opacity=1,void(this.data.hasMask&&this.maskManager.prepareFrame(t))):(this.renderFrame=!1,this.finalTransform.opacity=0,!1)},CVBaseElement.prototype.draw=function(t){if("NullLayer"!=this.data.type){if(!this.renderFrame)return!1;var e,a=(this.canvasContext,this.finalTransform.mat);if(this.finalTransform.opacity*=this.currentAnimData.tr.o,t&&(e=t.mat.props,a.reset().transform(e[0],e[1],e[2],e[3],e[4],e[5]),this.finalTransform.opacity*=t.opacity),this.hierarchy){var i,r=this.hierarchy.length;for(t||a.reset(),i=r-1;i>=0;i-=1)e=this.hierarchy[i].ownMatrix.props,a.transform(e[0],e[1],e[2],e[3],e[4],e[5]);e=this.ownMatrix.props,a.transform(e[0],e[1],e[2],e[3],e[4],e[5])}else this.renderFrame&&(t?(e=this.ownMatrix.props,a.transform(e[0],e[1],e[2],e[3],e[4],e[5])):this.finalTransform.mat=this.ownMatrix);this.data.hasMask&&(this.globalData.renderer.save(!0),this.maskManager.draw(this.finalTransform))}},CVBaseElement.prototype.getCurrentAnimData=function(){return this.currentAnimData},CVBaseElement.prototype.addMasks=function(t){var e={data:{value:t},element:{value:this},globalData:{value:this.globalData}};this.maskManager=createElement(CVMaskElement,null,e)},CVBaseElement.prototype.createEffectsManager=function(t){var e={effects:{value:t.eff},element:{value:this}};this.effectsManager=createElement(EffectsManager,null,e)},CVBaseElement.prototype.getType=function(){return this.type},CVBaseElement.prototype.getHierarchy=function(){return this.hierarchy||(this.hierarchy=[]),this.hierarchy},CVBaseElement.prototype.getLayerSize=function(){return"TextLayer"==this.data.type?{w:this.data.textData.width,h:this.data.textData.height}:{w:this.data.width,h:this.data.height}},createElement(CVBaseElement,CVCompElement),CVCompElement.prototype.prepareFrame=function(t){var e=this.parent.prepareFrame.call(this,t);if(e!==!1){var a,i=this.elements.length,r=this.data.tm?this.data.tm[t]<0?0:t>=this.data.tm.length?this.data.tm[this.data.tm.length-1]:this.data.tm[t]:t;for(a=0;i>a;a+=1)this.elements[a].prepareFrame(r-this.layers[a].startTime)}},CVCompElement.prototype.draw=function(t){if(this.parent.draw.call(this,t)!==!1){var e,a=this.layers.length;for(e=a-1;e>=0;e-=1)this.elements[e].draw(this.finalTransform);this.data.hasMask&&this.globalData.renderer.restore(!0)}},CVCompElement.prototype.setElements=function(t){this.elements=t},CVCompElement.prototype.getElements=function(){return this.elements},createElement(CVBaseElement,CVImageElement),CVImageElement.prototype.createElements=function(){var t=this,e=function(){t.animationItem.elementLoaded()},a=function(){t.failed=!0,t.animationItem.elementLoaded()};this.img=new Image,this.img.addEventListener("load",e,!1),this.img.addEventListener("error",a,!1),this.img.src=this.path+this.assets[this.data.assetId].path,this.parent.createElements.call(this)},CVImageElement.prototype.draw=function(t){if(!this.failed&&this.parent.draw.call(this,t)!==!1){var e=this.canvasContext;this.globalData.renderer.save();var a=this.finalTransform.mat.props;this.globalData.renderer.ctxTransform(a),this.globalData.renderer.ctxOpacity(this.finalTransform.opacity),e.drawImage(this.img,0,0),this.globalData.renderer.restore(this.data.hasMask)}},createElement(CVBaseElement,CVShapeElement),CVShapeElement.prototype.createElements=function(){this.parent.createElements.call(this),this.mainShape=new CVShapeItemElement(this.data.shapes,!0,this.globalData)},CVShapeElement.prototype.prepareFrame=function(t){var e=this.parent.prepareFrame.call(this,t);e!==!1&&this.mainShape.prepareFrame(t)},CVShapeElement.prototype.draw=function(t){this.parent.draw.call(this,t)!==!1&&(this.drawShapes(this.finalTransform),this.data.hasMask&&this.globalData.renderer.restore(!0))
+},CVShapeElement.prototype.drawShapes=function(t){this.mainShape.renderShape(t)},CVShapeItemElement.prototype.drawPaths=function(t){var e,a;t?(a=[],e=this.stylesList):e=this.renderedPaths[this.globalData.frameNum];var i,r=e.length,s=this.canvasContext;for(this.globalData.renderer.save(),s.lineCap="round",s.lineJoin="round",i=0;r>i;i+=1)"stroke"==e[i].type?(1!=e[i].opacity&&(this.globalData.renderer.save(),this.globalData.renderer.ctxOpacity(e[i].opacity)),s.strokeStyle=e[i].value,s.lineWidth=e[i].width,e[i].dasharray?(s.setLineDash(e[i].dasharray),s.lineDashOffset=e[i].dashoffset):(s.setLineDash([]),s.lineDashOffset=0),this.globalData.bmCtx.stroke(e[i].path),1!=e[i].opacity&&this.globalData.renderer.restore(),t&&(a.push({type:e[i].type,opacity:e[i].opacity,value:e[i].value,width:e[i].width,path:e[i].path}),e[i].dasharray&&(a[a.length-1].dasharray=e[i].dasharray,a[a.length-1].dashoffset=e[i].dashoffset))):"fill"==e[i].type&&(1!=e[i].opacity&&(this.globalData.renderer.save(),this.globalData.renderer.ctxOpacity(e[i].opacity)),s.fillStyle=e[i].value,this.globalData.bmCtx.fill(e[i].path),1!=e[i].opacity&&this.globalData.renderer.restore(),t&&a.push({type:e[i].type,opacity:e[i].opacity,value:e[i].value,path:e[i].path}));this.globalData.renderer.restore(),t&&(this.renderedPaths[this.globalData.frameNum]=a)},CVShapeItemElement.prototype.prepareFrame=function(t){this.frameNum=t;var e,a=this.dataLength-1;for(e=a;e>=0;e-=1)"gr"==this.data[e].ty&&this.data[e].item.prepareFrame(t)},CVShapeItemElement.prototype.renderShape=function(t,e){if(this.renderedPaths[this.globalData.frameNum])return void this.drawPaths(!1);this.transform.opacity=1;var a,i;for(this.ownStylesList.length=0,this.currentStylePoolPos=0,e?this.stylesList=e:this.stylesList.length=0,t?(this.transform.mat.props[0]=t.mat.props[0],this.transform.mat.props[1]=t.mat.props[1],this.transform.mat.props[2]=t.mat.props[2],this.transform.mat.props[3]=t.mat.props[3],this.transform.mat.props[4]=t.mat.props[4],this.transform.mat.props[5]=t.mat.props[5],this.transform.opacity*=t.opacity):(this.transform.mat.props[0]=this.transform.mat.props[3]=1,this.transform.mat.props[1]=this.transform.mat.props[2]=this.transform.mat.props[4]=this.transform.mat.props[5]=0),i=this.dataLength-1,a=i;a>=0;a-=1)"gr"==this.data[a].ty?this.data[a].item.renderShape(this.transform,this.stylesList):"tr"==this.data[a].ty?this.renderTransform(this.data[a]):"sh"==this.data[a].ty?this.renderPath(this.data[a]):"el"==this.data[a].ty?this.renderEllipse(this.data[a]):"rc"==this.data[a].ty?this.data[a].trimmed?this.renderPath(this.data[a]):this.renderRect(this.data[a]):"fl"==this.data[a].ty?this.renderFill(this.data[a]):"st"==this.data[a].ty&&this.renderStroke(this.data[a]);if(this.mainFlag)this.drawPaths(!0);else for(i=this.ownStylesList.length,a=0;i>a;a+=1)this.ownStylesList[a].closed=!0},CVShapeItemElement.prototype.renderTransform=function(t){var e=t.renderedData[this.frameNum],a=e.mtArr;this.transform.mat.transform(a[0],a[1],a[2],a[3],a[4],a[5]).translate(-e.a[0],-e.a[1]),this.transform.opacity*=e.o},CVShapeItemElement.prototype.renderPath=function(t){if(t.trimmed){var e=this.canvasContext;e.lineCap="round",e.lineJoin="round"}var a=t.renderedData[this.frameNum].path,i=new BM_Path2D,r=a.pathNodes;if(r instanceof Array&&(r=r[0]),r.v){var s,n=r.v.length,o=r.s?r.s:[];for(s=1;n>s;s+=1)o[s-1]?i.moveTo(o[s-1][0],o[s-1][1]):1==s&&i.moveTo(r.v[0][0],r.v[0][1]),i.bezierCurveTo(r.o[s-1][0],r.o[s-1][1],r.i[s][0],r.i[s][1],r.v[s][0],r.v[s][1]);!a.closed||t.trimmed&&!r.c||i.bezierCurveTo(r.o[s-1][0],r.o[s-1][1],r.i[0][0],r.i[0][1],r.v[0][0],r.v[0][1]),this.addPathToStyles(i)}},CVShapeItemElement.prototype.renderEllipse=function(t){var e=new BM_Path2D,a=t.renderedData[this.frameNum];e.moveTo(a.p[0]+a.size[0]/2,a.p[1]),e.ellipse(a.p[0],a.p[1],a.size[0]/2,a.size[1]/2,0,0,2*Math.PI,!1),this.addPathToStyles(e)},CVShapeItemElement.prototype.renderRect=function(t){var e=new BM_Path2D,a=t.renderedData[this.frameNum],i=a.roundness;if(0===i)e.rect(a.position[0]-a.size[0]/2,a.position[1]-a.size[1]/2,a.size[0],a.size[1]);else{var r=a.position[0]-a.size[0]/2,s=a.position[1]-a.size[1]/2,n=a.size[0],o=a.size[1];i instanceof Array&&(i=i[0]),i>n/2&&(i=n/2),i>o/2&&(i=o/2),e.moveTo(r+i,s),e.lineTo(r+n-i,s),e.quadraticCurveTo(r+n,s,r+n,s+i),e.lineTo(r+n,s+o-i),e.quadraticCurveTo(r+n,s+o,r+n-i,s+o),e.lineTo(r+i,s+o),e.quadraticCurveTo(r,s+o,r,s+o-i),e.lineTo(r,s+i),e.quadraticCurveTo(r,s,r+i,s)}this.addPathToStyles(e)},CVShapeItemElement.prototype.addPathToStyles=function(t){var e,a=this.stylesList.length,i=!0,r=0;for(e=a-1;e>=0;e-=1)this.stylesList[e].closed||("stroke"==this.stylesList[e].type?(this.stylesList[e].width>r&&this.stylesList[e].path.addPath(t,this.transform.mat.props),1==this.stylesList[e].styleOpacity&&1==this.stylesList[e].opacity&&(r=this.stylesList[e].width)):i&&"fill"==this.stylesList[e].type&&(this.stylesList[e].path.addPath(t,this.transform.mat.props),1==this.stylesList[e].styleOpacity&&1==this.stylesList[e].opacity&&(i=!1)))},CVShapeItemElement.prototype.renderFill=function(t){var e=t.renderedData[this.frameNum];return t.fillEnabled!==!1?(this.stylesPool[this.currentStylePoolPos].path=new BM_Path2D,this.stylesPool[this.currentStylePoolPos].closed=!1,this.stylesPool[this.currentStylePoolPos].styleOpacity=e.opacity<1?e.opacity:1,this.stylesPool[this.currentStylePoolPos].opacity=this.transform.opacity,this.stylesPool[this.currentStylePoolPos].value=e.opacity<1?fillColorToString(e.color,e.opacity):fillColorToString(e.color),this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),void(this.currentStylePoolPos+=1)):(this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),void(this.currentStylePoolPos+=1))},CVShapeItemElement.prototype.renderStroke=function(t){var e=t.renderedData[this.frameNum];if(this.data.strokeEnabled!==!1){if(this.stylesPool[this.currentStylePoolPos].path=new BM_Path2D,this.stylesPool[this.currentStylePoolPos].closed=!1,this.stylesPool[this.currentStylePoolPos].styleOpacity=e.opacity<1?e.opacity:1,this.stylesPool[this.currentStylePoolPos].width=e.width,this.stylesPool[this.currentStylePoolPos].opacity=this.transform.opacity,this.stylesPool[this.currentStylePoolPos].value=e.opacity<1?fillColorToString(e.color,e.opacity):fillColorToString(e.color),e.dashes){var a,i=e.dashes,r=i.length,s=[],n="";for(a=0;r>a;a+=1)"o"!=i[a].n?s.push(i[a].v):n=i[a].v;this.stylesPool[this.currentStylePoolPos].dasharray=s,this.stylesPool[this.currentStylePoolPos].dashoffset=n}return this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),void(this.currentStylePoolPos+=1)}this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),this.currentStylePoolPos+=1},createElement(CVBaseElement,CVSolidElement),CVSolidElement.prototype.draw=function(t){if(this.parent.draw.call(this,t)!==!1){var e=this.canvasContext;this.globalData.renderer.save();var a=this.finalTransform.mat.props;this.globalData.renderer.ctxTransform(a),this.globalData.renderer.ctxOpacity(this.finalTransform.opacity),e.fillStyle=this.data.color,e.fillRect(0,0,this.data.width,this.data.height),this.globalData.renderer.restore(this.data.hasMask)}},createElement(CVBaseElement,CVTextElement),CVTextElement.prototype.createElements=function(){this.svgElem=document.createElementNS(svgNS,"g");var t=document.createElementNS(svgNS,"text");t.textContent=this.data.textData.text,t.setAttribute("fill",this.data.textData.fillColor),t.setAttribute("x","0"),t.setAttribute("y",this.data.textData.height-(this.data.textData.fontSize-this.data.textData.height)/2),this.svgElem.setAttribute("width",this.data.textData.width),this.svgElem.setAttribute("height",this.data.textData.height),this.svgElem.style.transform=this.svgElem.style.webkitTransform="translate("+this.data.textData.xOffset+"px,"+this.data.textData.yOffset+"px)",t.setAttribute("font-size",this.data.textData.fontSize),t.setAttribute("font-family","Arial, sans-serif"),this.svgElem.appendChild(t),this.parent.createElements.call(this),this.anchorElement.appendChild(this.svgElem),this.maskedElement=t},CVMaskElement.prototype.init=function(){this.registeredEffects=[],this.masksProperties=this.data.masksProperties,this.totalMasks=this.masksProperties.length,this.ctx=this.element.canvasContext,this.layerSize=this.element.getLayerSize(),this.renderedFrames=new Array(this.globalData.totalFrames+1)},CVMaskElement.prototype.prepareFrame=function(t){this.frameNum=t},CVMaskElement.prototype.draw=function(t){var e;if(this.renderedFrames[this.globalData.frameNum])e=this.renderedFrames[this.globalData.frameNum];else{var a,i=new BM_Path2D,r=this.data.masksProperties.length;for(e=new BM_Path2D,a=0;r>a;a++)this.masksProperties[a].inv&&this.createInvertedMask(i,this.data.masksProperties[a].paths[this.frameNum].pathNodes),this.drawShape(i,this.data.masksProperties[a].paths[this.frameNum].pathNodes);e.addPath(i,t.mat.props),this.renderedFrames[this.globalData.frameNum]=e}this.globalData.bmCtx.clip(e)},CVMaskElement.prototype.drawShape=function(t,e){var a,i=e.v.length;for(t.moveTo(e.v[0][0],e.v[0][1]),a=1;i>a;a++)t.bezierCurveTo(e.o[a-1][0],e.o[a-1][1],e.i[a][0],e.i[a][1],e.v[a][0],e.v[a][1]);t.bezierCurveTo(e.o[a-1][0],e.o[a-1][1],e.i[0][0],e.i[0][1],e.v[0][0],e.v[0][1])},CVMaskElement.prototype.createInvertedMask=function(t){t.moveTo(0,0),t.lineTo(this.globalData.compWidth,0),t.lineTo(this.globalData.compWidth,this.globalData.compHeight),t.lineTo(0,this.globalData.compHeight),t.lineTo(0,0)};var animationManager=function(){function t(t){if(!t)return null;for(var e=0;v>e;){if(u[e].elem==t&&null!==u[e].elem)return u[e].animation;e+=1}var a=new AnimationItem;return a.setData(t),u.push({elem:t,animation:a}),v+=1,a}function e(t){var e=new AnimationItem;return e.setParams(t),u.push({elem:null,animation:e}),v+=1,e}function a(t,e){var a;for(a=0;v>a;a+=1)u[a].animation.setSpeed(t,e)}function i(t,e){var a;for(a=0;v>a;a+=1)u[a].animation.setDirection(t,e)}function r(t){var e;for(e=0;v>e;e+=1)u[e].animation.play(t)}function s(t,e){g=!1,y=Date.now();var a;for(a=0;v>a;a+=1)u[a].animation.moveFrame(t,e)}function n(){var t,e=Date.now(),a=e-y;for(t=0;v>t;t+=1)u[t].animation.advanceTime(a);y=e,requestAnimationFrame(n)}function o(t){var e;for(e=0;v>e;e+=1)u[e].animation.pause(t)}function h(t,e,a){var i;for(i=0;v>i;i+=1)u[i].animation.goToAndStop(t,e,a)}function l(t){var e;for(e=0;v>e;e+=1)u[e].animation.stop(t)}function p(t){var e;for(e=0;v>e;e+=1)u[e].animation.togglePause(t)}function m(){var e=document.getElementsByClassName("bodymovin");Array.prototype.forEach.call(e,t)}function d(){var t;for(t=0;v>t;t+=1)u[t].animation.resize()}function c(){y=Date.now(),requestAnimationFrame(n)}var f={},u=[],y=0,g=!0,v=0;return setTimeout(c,0),f.registerAnimation=t,f.loadAnimation=e,f.setSpeed=a,f.setDirection=i,f.play=r,f.moveFrame=s,f.pause=o,f.stop=l,f.togglePause=p,f.searchAnimations=m,f.resize=d,f.start=c,f.goToAndStop=h,f}(),AnimationItem=function(){this.name="",this.path="",this.isLoaded=!1,this.currentFrame=0,this.currentRawFrame=0,this.totalFrames=0,this.frameRate=0,this.frameMult=0,this.playSpeed=1,this.playDirection=1,this.pendingElements=0,this.playCount=0,this.prerenderFramesFlag=!0,this.repeat="indefinite",this.animationData={},this.layers=[],this.assets=[],this.isPaused=!0,this.isScrolling=!1,this.autoplay=!1,this.loop=!0,this.renderer=null,this.animationID=randomString(10),this.renderedFrameCount=0,this.scaleMode="fit",this.math=Math};AnimationItem.prototype.setParams=function(t){var e=this;t.context&&(this.context=t.context),t.wrapper&&(this.wrapper=t.wrapper);var a=t.animType?t.animType:"canvas";switch(a){case"canvas":this.renderer=new CanvasRenderer(this,t.renderer);break;case"svg":this.renderer=new SVGRenderer(this,t.renderer)}if(this.animType=a,""===t.loop||null===t.loop||(this.loop=t.loop===!1?!1:t.loop===!0?!0:parseInt(t.loop)),this.autoplay="autoplay"in t?t.autoplay:!0,this.name=t.name?t.name:"",this.prerenderFramesFlag="prerender"in t?t.prerender:!0,t.animationData)e.configAnimation(t.animationData);else if(t.path){"json"!=t.path.substr(-4)&&("/"!=t.path.substr(-1,1)&&(t.path+="/"),t.path+="data.json");var i=new XMLHttpRequest;this.path=t.path.substr(0,t.path.lastIndexOf("/")+1),i.open("GET",t.path,!0),i.send(),i.onreadystatechange=function(){if(4==i.readyState)if(200==i.status)e.configAnimation(JSON.parse(i.responseText));else try{var t=JSON.parse(i.responseText);e.configAnimation(t)}catch(a){}}}},AnimationItem.prototype.setData=function(t){var e={wrapper:t},a=t.attributes;e.path=a.getNamedItem("data-animation-path")?a.getNamedItem("data-animation-path").value:a.getNamedItem("data-bm-path")?a.getNamedItem("data-bm-path").value:a.getNamedItem("bm-path")?a.getNamedItem("bm-path").value:"",e.animType=a.getNamedItem("data-anim-type")?a.getNamedItem("data-anim-type").value:a.getNamedItem("data-bm-type")?a.getNamedItem("data-bm-type").value:a.getNamedItem("bm-type")?a.getNamedItem("bm-type").value:"canvas";var i=a.getNamedItem("data-anim-loop")?a.getNamedItem("data-anim-loop").value:a.getNamedItem("data-bm-loop")?a.getNamedItem("data-bm-loop").value:a.getNamedItem("bm-loop")?a.getNamedItem("bm-loop").value:"";""===i||(e.loop="false"===i?!1:"true"===i?!0:parseInt(i)),e.name=a.getNamedItem("data-name")?a.getNamedItem("data-name").value:a.getNamedItem("data-bm-name")?a.getNamedItem("data-bm-name").value:a.getNamedItem("bm-name")?a.getNamedItem("bm-name").value:"";var r=a.getNamedItem("data-anim-prerender")?a.getNamedItem("data-anim-prerender").value:a.getNamedItem("data-bm-prerender")?a.getNamedItem("data-bm-prerender").value:a.getNamedItem("bm-prerender")?a.getNamedItem("bm-prerender").value:"";"false"===r&&(e.prerender=!1),this.setParams(e)},AnimationItem.prototype.configAnimation=function(t){this.renderer.configAnimation(t),this.animationData=t,this.animationData._id=this.animationID,this.animationData._animType=this.animType,this.layers=this.animationData.animation.layers,this.assets=this.animationData.assets,this.totalFrames=this.animationData.animation.totalFrames,this.frameRate=this.animationData.animation.frameRate,this.firstFrame=Math.round(this.animationData.animation.ff*this.frameRate),this.frameMult=this.animationData.animation.frameRate/1e3,dataManager.completeData(this.animationData),this.renderer.buildItems(this.animationData.animation.layers),this.updaFrameModifier(),this.checkLoaded()},AnimationItem.prototype.elementLoaded=function(){this.pendingElements--,this.checkLoaded()},AnimationItem.prototype.checkLoaded=function(){this.renderer.buildStage(this.container,this.layers),0===this.pendingElements&&(this.prerenderFramesFlag?(this.prerenderFrames(0),dataManager.renderFrame(this.animationID,this.currentFrame+this.firstFrame),this.renderer.renderFrame(this.currentFrame+this.firstFrame)):(this.isLoaded=!0,this.gotoFrame(),this.autoplay&&this.play()))},AnimationItem.prototype.prerenderFrames=function(t){t||(t=0),this.renderedFrameCount===Math.floor(this.totalFrames)?(this.isLoaded=!0,this.gotoFrame(),this.autoplay&&this.play()):(dataManager.renderFrame(this.animationID,this.renderedFrameCount+this.firstFrame),this.renderedFrameCount+=1,t>10?setTimeout(this.prerenderFrames.bind(this),0):(t+=1,this.prerenderFrames(t)))},AnimationItem.prototype.resize=function(){this.renderer.updateContainerSize()},AnimationItem.prototype.gotoFrame=function(){this.currentFrame=subframeEnabled?this.math.round(100*this.currentRawFrame)/100:this.math.floor(this.currentRawFrame),this.renderFrame()},AnimationItem.prototype.renderFrame=function(){this.isLoaded!==!1&&(dataManager.renderFrame(this.animationID,this.currentFrame+this.firstFrame),this.renderer.renderFrame(this.currentFrame+this.firstFrame))},AnimationItem.prototype.play=function(t){t&&this.name!=t||this.isPaused===!0&&(this.isPaused=!1)},AnimationItem.prototype.pause=function(t){t&&this.name!=t||this.isPaused===!1&&(this.isPaused=!0)},AnimationItem.prototype.togglePause=function(t){t&&this.name!=t||(this.isPaused===!0?(this.isPaused=!1,this.play()):(this.isPaused=!0,this.pause()))},AnimationItem.prototype.stop=function(t){t&&this.name!=t||(this.isPaused=!0,this.currentFrame=this.currentRawFrame=0,this.playCount=0,this.gotoFrame())},AnimationItem.prototype.goToAndStop=function(t,e,a){a&&this.name!=a||(this.setCurrentRawFrameValue(e?t:t*this.frameModifier),this.isPaused=!0)},AnimationItem.prototype.advanceTime=function(t){this.isPaused!==!0&&this.isScrolling!==!0&&this.isLoaded!==!1&&this.setCurrentRawFrameValue(this.currentRawFrame+t*this.frameModifier)},AnimationItem.prototype.updateAnimation=function(t){this.setCurrentRawFrameValue(this.totalFrames*t)},AnimationItem.prototype.moveFrame=function(t,e){e&&this.name!=e||this.setCurrentRawFrameValue(this.currentRawFrame+t)},AnimationItem.prototype.setCurrentRawFrameValue=function(t){if(this.currentRawFrame=t,this.currentRawFrame>=this.totalFrames){if(this.loop===!1)return this.currentRawFrame=this.totalFrames-1,this.gotoFrame(),void this.pause();if(this.playCount+=1,this.loop!==!0&&this.playCount==this.loop)return this.currentRawFrame=this.totalFrames-1,this.gotoFrame(),void this.pause()}else if(this.currentRawFrame<0)return this.playCount-=1,this.playCount<0&&(this.playCount=0),this.loop===!1?(this.currentRawFrame=0,this.gotoFrame(),void this.pause()):(this.currentRawFrame=this.totalFrames+this.currentRawFrame,void this.gotoFrame());this.currentRawFrame=this.currentRawFrame%this.totalFrames,this.gotoFrame()},AnimationItem.prototype.setSpeed=function(t){this.playSpeed=t,this.updaFrameModifier()},AnimationItem.prototype.setDirection=function(t){this.playDirection=0>t?-1:1,this.updaFrameModifier()},AnimationItem.prototype.updaFrameModifier=function(){this.frameModifier=this.frameMult*this.playSpeed*this.playDirection},AnimationItem.prototype.getPath=function(){return this.path},AnimationItem.prototype.getAssets=function(){return this.assets},function(t){function e(t){animationManager.play(t)}function a(t){animationManager.pause(t)}function i(t){animationManager.togglePause(t)}function r(t,e){animationManager.setSpeed(t,e)}function s(t,e){animationManager.setDirection(t,e)}function n(t){animationManager.stop(t)}function o(t){animationManager.moveFrame(t)}function h(){animationManager.searchAnimations()}function l(t){return animationManager.registerAnimation(t)}function p(){animationManager.resize()}function m(){animationManager.start()}function d(t,e,a){animationManager.goToAndStop(t,e,a)}function c(t){subframeEnabled=t}function f(t){return animationManager.loadAnimation(t)}function u(){"complete"===document.readyState&&(clearInterval(g),h())}var y={};y.play=e,y.pause=a,y.togglePause=i,y.setSpeed=r,y.setDirection=s,y.stop=n,y.moveFrame=o,y.searchAnimations=h,y.registerAnimation=l,y.loadAnimation=f,y.setSubframeRendering=c,y.resize=p,y.start=m,y.goToAndStop=d,y.checkReady=u,t.bodymovin=y;var g=setInterval(u,100)}(window);}(window));
\ No newline at end of file
