{"version":3,"sources":["webpack:///../node_modules/core-js/library/modules/_core.js","webpack:///../node_modules/core-js/library/modules/_global.js","webpack:///../node_modules/core-js/library/modules/_descriptors.js","webpack:///../node_modules/core-js/library/modules/_export.js","webpack:///../node_modules/core-js/library/modules/_object-dp.js","webpack:///../node_modules/core-js/library/modules/_has.js","webpack:///../node_modules/core-js/library/modules/_hide.js","webpack:///../node_modules/core-js/library/modules/_is-object.js","webpack:///../node_modules/core-js/library/modules/_fails.js","webpack:///../node_modules/core-js/library/modules/_to-iobject.js","webpack:///../node_modules/core-js/library/modules/_wks.js","webpack:///../node_modules/core-js/library/modules/_an-object.js","webpack:///../node_modules/core-js/library/modules/_property-desc.js","webpack:///../node_modules/core-js/library/modules/_object-keys.js","webpack:///../node_modules/core-js/library/modules/_library.js","webpack:///../node_modules/core-js/library/modules/_uid.js","webpack:///../node_modules/core-js/library/modules/_object-pie.js","webpack:///../node_modules/core-js/library/modules/_to-object.js","webpack:///../node_modules/core-js/library/modules/_to-primitive.js","webpack:///../node_modules/core-js/library/modules/_defined.js","webpack:///../node_modules/core-js/library/modules/_to-integer.js","webpack:///../node_modules/core-js/library/modules/_shared-key.js","webpack:///../node_modules/core-js/library/modules/_shared.js","webpack:///../node_modules/core-js/library/modules/_enum-bug-keys.js","webpack:///../node_modules/core-js/library/modules/_object-gops.js","webpack:///../node_modules/core-js/library/modules/_iterators.js","webpack:///../node_modules/core-js/library/modules/_object-create.js","webpack:///../node_modules/core-js/library/modules/_set-to-string-tag.js","webpack:///../node_modules/core-js/library/modules/_wks-ext.js","webpack:///../node_modules/core-js/library/modules/_wks-define.js","webpack:///../node_modules/core-js/library/modules/_ctx.js","webpack:///../node_modules/core-js/library/modules/_ie8-dom-define.js","webpack:///../node_modules/core-js/library/modules/_dom-create.js","webpack:///../node_modules/core-js/library/modules/_object-keys-internal.js","webpack:///../node_modules/core-js/library/modules/_iobject.js","webpack:///../node_modules/core-js/library/modules/_cof.js","webpack:///../node_modules/core-js/library/modules/_object-gpo.js","webpack:///../node_modules/babel-runtime/helpers/typeof.js","webpack:///../node_modules/core-js/library/modules/_iter-define.js","webpack:///../node_modules/core-js/library/modules/_redefine.js","webpack:///../node_modules/core-js/library/modules/_object-gopn.js","webpack:///../node_modules/core-js/library/modules/_object-gopd.js","webpack:///../node_modules/babel-runtime/helpers/extends.js","webpack:///../node_modules/babel-runtime/core-js/object/assign.js","webpack:///../node_modules/core-js/library/fn/object/assign.js","webpack:///../node_modules/core-js/library/modules/es6.object.assign.js","webpack:///../node_modules/core-js/library/modules/_a-function.js","webpack:///../node_modules/core-js/library/modules/_object-assign.js","webpack:///../node_modules/core-js/library/modules/_array-includes.js","webpack:///../node_modules/core-js/library/modules/_to-length.js","webpack:///../node_modules/core-js/library/modules/_to-absolute-index.js","webpack:///../node_modules/babel-runtime/core-js/object/get-prototype-of.js","webpack:///../node_modules/core-js/library/fn/object/get-prototype-of.js","webpack:///../node_modules/core-js/library/modules/es6.object.get-prototype-of.js","webpack:///../node_modules/core-js/library/modules/_object-sap.js","webpack:///../node_modules/babel-runtime/helpers/classCallCheck.js","webpack:///../node_modules/babel-runtime/helpers/createClass.js","webpack:///../node_modules/babel-runtime/core-js/object/define-property.js","webpack:///../node_modules/core-js/library/fn/object/define-property.js","webpack:///../node_modules/core-js/library/modules/es6.object.define-property.js","webpack:///../node_modules/babel-runtime/helpers/possibleConstructorReturn.js","webpack:///../node_modules/babel-runtime/core-js/symbol/iterator.js","webpack:///../node_modules/core-js/library/fn/symbol/iterator.js","webpack:///../node_modules/core-js/library/modules/es6.string.iterator.js","webpack:///../node_modules/core-js/library/modules/_string-at.js","webpack:///../node_modules/core-js/library/modules/_iter-create.js","webpack:///../node_modules/core-js/library/modules/_object-dps.js","webpack:///../node_modules/core-js/library/modules/_html.js","webpack:///../node_modules/core-js/library/modules/web.dom.iterable.js","webpack:///../node_modules/core-js/library/modules/es6.array.iterator.js","webpack:///../node_modules/core-js/library/modules/_add-to-unscopables.js","webpack:///../node_modules/core-js/library/modules/_iter-step.js","webpack:///../node_modules/babel-runtime/core-js/symbol.js","webpack:///../node_modules/core-js/library/fn/symbol/index.js","webpack:///../node_modules/core-js/library/modules/es6.symbol.js","webpack:///../node_modules/core-js/library/modules/_meta.js","webpack:///../node_modules/core-js/library/modules/_enum-keys.js","webpack:///../node_modules/core-js/library/modules/_is-array.js","webpack:///../node_modules/core-js/library/modules/_object-gopn-ext.js","webpack:///../node_modules/core-js/library/modules/es7.symbol.async-iterator.js","webpack:///../node_modules/core-js/library/modules/es7.symbol.observable.js","webpack:///../node_modules/babel-runtime/helpers/inherits.js","webpack:///../node_modules/babel-runtime/core-js/object/set-prototype-of.js","webpack:///../node_modules/core-js/library/fn/object/set-prototype-of.js","webpack:///../node_modules/core-js/library/modules/es6.object.set-prototype-of.js","webpack:///../node_modules/core-js/library/modules/_set-proto.js","webpack:///../node_modules/babel-runtime/core-js/object/create.js","webpack:///../node_modules/core-js/library/fn/object/create.js","webpack:///../node_modules/core-js/library/modules/es6.object.create.js","webpack:///../node_modules/lottie-web/build/player/lottie.js","webpack:///../node_modules/webpack/buildin/amd-options.js","webpack:///../node_modules/react-lottie/dist/index.js"],"names":["core","module","exports","version","__e","global","window","Math","self","Function","__g","require","Object","defineProperty","get","a","ctx","hide","has","$export","type","name","source","key","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","IS_WRAP","W","expProto","target","undefined","C","b","c","this","arguments","length","apply","call","virtual","R","U","anObject","IE8_DOM_DEFINE","toPrimitive","dP","f","O","Attributes","e","TypeError","value","hasOwnProperty","it","createDesc","object","exec","IObject","defined","store","uid","Symbol","USE_SYMBOL","isObject","bitmap","enumerable","configurable","writable","$keys","enumBugKeys","keys","id","px","random","concat","toString","propertyIsEnumerable","fn","val","valueOf","ceil","floor","isNaN","shared","push","mode","copyright","split","getOwnPropertySymbols","dPs","IE_PROTO","Empty","createDict","iframeDocument","iframe","i","style","display","appendChild","src","contentWindow","document","open","write","lt","close","create","Properties","result","def","TAG","tag","stat","prototype","LIBRARY","wksExt","$Symbol","charAt","aFunction","that","is","createElement","toIObject","arrayIndexOf","names","cof","slice","toObject","ObjectProto","getPrototypeOf","constructor","__esModule","_iterator2","_interopRequireDefault","_symbol2","_typeof","default","obj","redefine","Iterators","$iterCreate","setToStringTag","ITERATOR","BUGGY","returnThis","Base","NAME","Constructor","next","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","hiddenKeys","getOwnPropertyNames","pIE","gOPD","getOwnPropertyDescriptor","_assign","_assign2","assign","DESCRIPTORS","getKeys","gOPS","$assign","A","K","forEach","k","join","T","aLen","index","getSymbols","isEnum","j","toLength","toAbsoluteIndex","IS_INCLUDES","$this","el","fromIndex","toInteger","min","max","$getPrototypeOf","fails","KEY","exp","instance","_defineProperty","_defineProperty2","defineProperties","props","descriptor","protoProps","staticProps","$Object","desc","_typeof2","_typeof3","ReferenceError","$at","String","iterated","_t","_i","point","done","TO_STRING","pos","s","l","charCodeAt","documentElement","TO_STRING_TAG","DOMIterables","Collection","Array","addToUnscopables","step","_k","Arguments","META","$fails","wks","wksDefine","enumKeys","isArray","_create","gOPNExt","$GOPD","$GOPS","$DP","gOPN","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","setter","findChild","setSymbolDesc","D","protoDesc","wrap","sym","isSymbol","iterator","$defineProperty","$defineProperties","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","set","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","FAILS_ON_PRIMITIVES","replacer","$replacer","args","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","symbols","arg","windowNames","getWindowNames","_setPrototypeOf2","_create2","subClass","superClass","__proto__","setPrototypeOf","check","test","buggy","navigator","factory","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","extendPrototype","sources","destination","sourcePrototype","len","attr","getDescriptor","prop","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","pause","resume","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","arr","Uint8ClampedArray","Float32Array","Int16Array","createSizedArray","_typeof$6","subframeEnabled","expressionsPlugin","idPrefix$1","isSafari","userAgent","_shouldRoundValues","bmPow","pow","bmSqrt","sqrt","bmFloor","bmMax","bmMin","BMMath","ProjectInterface$1","propertyNames","abs","absArr","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","bmRnd","round","styleDiv","element","position","top","left","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","v","r","g","p","q","t","RGBtoHSV","d","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","path","data","_workerSelf","setupWorker","Worker","Blob","blob","url","URL","createObjectURL","createWorker","completeLayers","layers","comps","layerData","jLen","kLen","completed","tt","td","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeText","comp","findComp","__used","parse","ks","o","checkVersion","minimum","animVersionString","animVersion","minimumVersion","checkText","iterateLayers","textLayer","documentData","animationData","assets","checkChars","chars","charData","ip","op","st","sr","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","checkShapes","completeClosingShapes","closed","cl","moduleOb","__complete","completeChars","dataFunctionManager","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","indexOf","response","responseText","load","fullPath","callback","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","error","send","completeData","payload","animation","event","process","onComplete","onError","createProcess","loadAnimation","processId","location","origin","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","width","height","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","getBBox","_imageLoaded","clearInterval","bind","createFootageData","ob","footageData","_footageLoaded","ImagePreloaderFactory","images","loadAssets","cb","_createImageData","setAssetsPath","setPath","loadedImages","loadedFootages","destroy","getAsset","createImgData","crossOrigin","addEventListener","createImageData","setAttributeNS","_elementHelper","append","setCacheType","elementHelper","BaseEvent","triggerEvent","eventName","_cbs","callbacks","removeEventListener","splice","markerParser","parsePayloadLines","line","lines","keysCount","trim","Error","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","_","__","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","getRenderer","_typeof$4","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","isPaused","autoplay","loop","renderer","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","wrapper","container","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","parseInt","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","substr","fileName","trigger","setData","wrapperAttributes","attributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","setTimeout","rendererType","initItems","gotoFrame","resize","updateContainerSize","setSubframe","renderFrame","triggerRenderFrameError","togglePause","stop","setCurrentRawFrameValue","getMarkerData","markerName","marker","goToAndStop","isFrame","numValue","Number","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSpeed","setDirection","setSegment","init","end","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","getPath","getAssetData","show","getDuration","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","elem","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","first","searchAnimations","standalone","animElements","getElementsByClassName","lenAnims","setAttribute","body","getElementsByTagName","innerText","div","freeze","unfreeze","getRegisteredAnimations","animations","BezierFactory","str","replace","beziers","bezEasing","BezierEasing","float32ArraySupported","aA1","aA2","calcBezier","aT","getSlope","points","_p","_mSampleValues","_precomputed","x","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","pooling","poolFactory","initialLength","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","lastPoint","lengthData","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezierSegmentPoints","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","bez","PropertyFactory","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","lastIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","y","n","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","quaternionToEuler","omega","cosom","sinom","scale0","scale1","ax","ay","az","aw","bx","by","bz","bw","acos","sin","slerp","createQuaternion","c1","cos","c2","c3","s1","s2","s3","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","getProp","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","clone","shape","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shape1","shape2","shapesEqual","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","convertToPath","convertStarToPath","convertPolygonToPath","or","os","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","Matrix","_cos","_sin","_tan","tan","_rnd","rotate","mCos","mSin","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","m","translate","tx","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof$3","lottie","setLocation","href","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","scripts","myScript","define","bodymovin","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","pop","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","py","pz","rx","ry","rz","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","getFontProperties","fontData","styles","fStyle","fWeight","toLowerCase","weight","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","matrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","hasReloaded","copies","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","rd","currentV","currentI","currentO","closerV","distance","newPosPerc","FontManager","emptyChar","size","combinedCharacters","surrogateModifiers","zeroWidthJoiner","setUpNode","font","family","parentNode","fontFamily","node","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","offsetWidth","familyArray","enabledFamilies","trimFontOptions","parent","createHelper","helper","engine","fontProps","tHelper","fFamily","textContent","fClass","tCanvasHelper","OffscreenCanvas","measureText","text","getComputedTextLength","Font","typekitLoaded","_warned","Date","now","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","isCombinedCharacter","_char3","found","ch","list","cache","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","querySelectorAll","rel","sc","getCharData","_char","console","warn","getFontByName","fName","_char2","fontName","doubleSize","singleSize","loadedCount","removeChild","RenderableElement","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","MaskManagerInterface","MaskInterface","mask","_mask","_data","maskManager","_masksInterfaces","viewData","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","property","getVelocityAtTime","numKeys","valueProp","valueAtTime","speedAtTime","getSpeedAtTime","velocityAtTime","propertyGroup","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TransformExpressionInterface","_thisFunction","rotation","xRotation","yRotation","xPosition","yPosition","zPosition","anchorPoint","opacity","_px","_py","_pz","_transformFactory","LayerExpressionInterface","getMatrix","toWorldMat","_elem","toWorldVec","applyPoint","toWorld","fromWorldVec","invertPoint","fromWorld","hierarchy","fromComp","sampleImage","transformInterface","_thisLayerFunction","shapeInterface","effect","textInterface","toComp","anchorPointDescriptor","hasParent","layerInterface","anchor_point","active","startTime","inPoint","outPoint","_name","registerMaskInterface","registerEffectsInterface","effects","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","EffectsExpressionInterface","createGroupInterface","groupInterface","ef","mn","effectElements","_propertyGroup","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","createEffectsInterface","effectsManager","effectsData","CompExpressionInterface","layer","pixelAspect","compSize","frameDuration","displayStartTime","numLayers","ShapePathInterface","view","propertyIndex","ShapeExpressionInterface","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","defaultInterfaceFactory","content","interfaces","transformInterfaceFactory","cix","contentsInterfaceFactory","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dataProps","strokeWidth","dash","start","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","radius","_interfaceFunction","TextExpressionInterface","_sourceText","sourceText","textProperty","stringValue","currentData","_prevValue","getBlendMode","blendModeEnums","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effectItem","GroupEffect","BaseElement","FrameElement","_typeof$2","eff","checkMasks","effectsInterface","shapesData","itemsData","setBlendMode","blendModeValue","bm","baseElement","layerElement","initBaseData","layerId","getType","prepareProperties","isVisible","_isParent","FootageInterface","dataInterfaceFactory","outlineInterface","currentPropertyName","currentProperty","getFootageData","searchProperty","propertyNameIndex","outlineInterfaceFactory","dataInterface","FootageElement","imageLoader","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","TransformElement","MaskElement","maskElement","solidPath","rect","expansor","feMorph","properties","count","currentMasks","maskType","maskRef","getShapeProp","lastPath","filterID","expan","lastOperator","filterId","lastRadius","createLayerSolidPath","invRect","drawPath","maskedElement","getBaseElement","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","setAsParent","setHierarchy","addPendingElement","pendingElements","pathValue","setupGlobalData","fontsContainer","animationItem","initTransform","_matMdf","_opMdf","ao","renderTransform","finalMat","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","createFilter","filId","skipCoordinates","fil","createAlphaToLuminanceFilter","feColorMatrix","featureSupport","registeredEffects","idPrefix","SVGEffects","filterManager","filters","Effect","countsAsEffect","registerEffect","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","gg","layerElementParent","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","renderableEffectsManager","setMatte","initHierarchy","checkParenting","createContent","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","lj","ml","of","ms","ost","buildShapeString","_o","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderNoop","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","dist","createRenderFunction","SVGShapeElement","stylesList","animatedContents","LetterProps","sw","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charCode","charactersArray","shouldCombine","newLineFlag","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","add","anIndexes","animatorJustifyOffset","extra","animatorData","letterData","based","animators","indexes","fh","fs","fb","rn","totalChars","newInd","currentInd","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getMult","easer","tot","smoothness","threshold","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","rot","atan","textAnimator","buildNewText","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","config","svgElement","ariaLabel","title","titleElement","titleId","description","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","className","focusable","filterSize","destroyed","CVContextData","saved","cArrPos","cTr","cO","savedOp","ShapeTransformManager","sequences","sequenceList","transform_key_count","CVEffects","CVMaskElement","hasMasks","CVBaseElement","CVShapeData","transformsManager","styledShapes","styledShape","addTransformSequence","trNodes","CVShapeElement","CVTextElement","stroke","fill","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","clearCanvas","context","dpr","devicePixelRatio","currentGlobalAlpha","contextData","transformMat","CVCompElement","CanvasRenderer","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","isMasked","HCameraElement","pe","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","fromCharCode","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","appendElementInPos","nextElement","insertBefore","setElements","getElements","destroyElements","duplicate","newLength","currentSavedOp","sequence","processSequence","processSequences","getNewKey","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","createElements","blendMode","globalCompositeOperation","hideElement","showElement","forceRealStack","ctxTransform","ctxOpacity","restore","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","strokeStyle","grd","lineCap","lineJoin","miterLimit","setLineDash","lineDashOffset","closePath","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","drawImage","cProps","trProps","globalAlpha","actionFlag","popped","containerStyle","mozTransformOrigin","transformCanvas","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","fillType","clearRect","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","backgroundColor","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","item","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","bounds","shapeBoundingBox","xMax","right","yMax","bottom","tempBoundingBox","p3","b2ac","t2","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","box","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","lineHeight","tParent","tCont","children","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","setup","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","overflow","svg","cWidth","cHeight","floatingContainer","_createBaseContainerElements","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","_typeof$1","seedRandom","startdenom","significance","ARC4","keylen","me","copy","mixkey","seed","smear","stringseed","tostring","options","shortseed","flatten","depth","typ","entropy","nodecrypto","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","screen","autoseed","arc4","prng","int32","quick","pass","is_math_call","state","initialize$2","propTypes","SHAPE","ExpressionManager","fetch","frames","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","loopIn","loop_in","loopOut","loop_out","smooth","fromCompToSurface","thisLayer","thisComp","scoped_bm_rt","expression_function","eval","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","executeExpression","_value","frameExpressionId","__preventDeadCodeRemoval","expressionHelpers","searchExpressions","speed","_cachingAtTime","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","lastTime","propertyGetShapeProp","trims","initialize$1","addDecorator","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","initialize","SVGComposableEffect","SVGTintFilter","filter","matrixFilter","feMerge","createMergeNode","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","resultId","ins","feMergeNode","colorBlack","colorWhite","groupPath","elemChildren","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","sigma","dimensions","sigmaX","sigmaY","edgeMode","__webpack_amd_options__","_extends3","_getPrototypeOf2","_classCallCheck3","_createClass3","_possibleConstructorReturn3","_inherits3","_react2","_propTypes2","_lottieWeb2","Lottie","_React$Component","_ref","_temp","_this","_ret","_len","_key","handleClickToPause","_props","eventListeners","registerEvents","nextProps","deRegisterEvents","isStopped","_this2","eventListener","_this3","_this4","_props2","ariaRole","isClickToPauseDisabled","getSize","initial","lottieStyles","outline","onClickHandler","ref","onClick","role","tabIndex","Component","arrayOf","isRequired","oneOfType","string","number","bool","defaultProps"],"mappings":"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","file":"1.js?id=de75b82663175c828f98","sourcesContent":["var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && has(exports, key)) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","module.exports = true;\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","exports.f = {}.propertyIsEnumerable;\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","exports.f = Object.getOwnPropertySymbols;\n","module.exports = {};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n  return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","module.exports = require('./_hide');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","\"use strict\";\n\nexports.__esModule = true;\n\nvar _assign = require(\"../core-js/object/assign\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/get-prototype-of\"), __esModule: true };","require('../../modules/es6.object.get-prototype-of');\nmodule.exports = require('../../modules/_core').Object.getPrototypeOf;\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n  return function getPrototypeOf(it) {\n    return $getPrototypeOf(toObject(it));\n  };\n});\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n  return $Object.defineProperty(it, key, desc);\n};\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","\"use strict\";\n\nexports.__esModule = true;\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","module.exports = function () { /* empty */ };\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f = $propertyIsEnumerable;\n  $GOPS.f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !require('./_library')) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return $GOPS.f(toObject(it));\n  }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","\"use strict\";\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = require(\"../core-js/object/set-prototype-of\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = require(\"../core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n  }\n\n  subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};","module.exports = { \"default\": require(\"core-js/library/fn/object/set-prototype-of\"), __esModule: true };","require('../../modules/es6.object.set-prototype-of');\nmodule.exports = require('../../modules/_core').Object.setPrototypeOf;\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n  return $Object.create(P, D);\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n  var svgNS = 'http://www.w3.org/2000/svg';\n  var locationHref = '';\n  var _useWebWorker = false;\n  var initialDefaultFrame = -999999;\n\n  var setWebWorker = function setWebWorker(flag) {\n    _useWebWorker = !!flag;\n  };\n\n  var getWebWorker = function getWebWorker() {\n    return _useWebWorker;\n  };\n\n  var setLocationHref = function setLocationHref(value) {\n    locationHref = value;\n  };\n\n  var getLocationHref = function getLocationHref() {\n    return locationHref;\n  };\n\n  function createTag(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElement(type);\n  }\n\n  function extendPrototype(sources, destination) {\n    var i;\n    var len = sources.length;\n    var sourcePrototype;\n\n    for (i = 0; i < len; i += 1) {\n      sourcePrototype = sources[i].prototype;\n\n      for (var attr in sourcePrototype) {\n        if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n      }\n    }\n  }\n\n  function getDescriptor(object, prop) {\n    return Object.getOwnPropertyDescriptor(object, prop);\n  }\n\n  function createProxyFunction(prototype) {\n    function ProxyFunction() {}\n\n    ProxyFunction.prototype = prototype;\n    return ProxyFunction;\n  }\n\n  // import Howl from '../../3rd_party/howler';\n  var audioControllerFactory = function () {\n    function AudioController(audioFactory) {\n      this.audios = [];\n      this.audioFactory = audioFactory;\n      this._volume = 1;\n      this._isMuted = false;\n    }\n\n    AudioController.prototype = {\n      addAudio: function addAudio(audio) {\n        this.audios.push(audio);\n      },\n      pause: function pause() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].pause();\n        }\n      },\n      resume: function resume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].resume();\n        }\n      },\n      setRate: function setRate(rateValue) {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].setRate(rateValue);\n        }\n      },\n      createAudio: function createAudio(assetPath) {\n        if (this.audioFactory) {\n          return this.audioFactory(assetPath);\n        }\n\n        if (window.Howl) {\n          return new window.Howl({\n            src: [assetPath]\n          });\n        }\n\n        return {\n          isPlaying: false,\n          play: function play() {\n            this.isPlaying = true;\n          },\n          seek: function seek() {\n            this.isPlaying = false;\n          },\n          playing: function playing() {},\n          rate: function rate() {},\n          setVolume: function setVolume() {}\n        };\n      },\n      setAudioFactory: function setAudioFactory(audioFactory) {\n        this.audioFactory = audioFactory;\n      },\n      setVolume: function setVolume(value) {\n        this._volume = value;\n\n        this._updateVolume();\n      },\n      mute: function mute() {\n        this._isMuted = true;\n\n        this._updateVolume();\n      },\n      unmute: function unmute() {\n        this._isMuted = false;\n\n        this._updateVolume();\n      },\n      getVolume: function getVolume() {\n        return this._volume;\n      },\n      _updateVolume: function _updateVolume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n        }\n      }\n    };\n    return function () {\n      return new AudioController();\n    };\n  }();\n\n  var createTypedArray = function () {\n    function createRegularArray(type, len) {\n      var i = 0;\n      var arr = [];\n      var value;\n\n      switch (type) {\n        case 'int16':\n        case 'uint8c':\n          value = 1;\n          break;\n\n        default:\n          value = 1.1;\n          break;\n      }\n\n      for (i = 0; i < len; i += 1) {\n        arr.push(value);\n      }\n\n      return arr;\n    }\n\n    function createTypedArrayFactory(type, len) {\n      if (type === 'float32') {\n        return new Float32Array(len);\n      }\n\n      if (type === 'int16') {\n        return new Int16Array(len);\n      }\n\n      if (type === 'uint8c') {\n        return new Uint8ClampedArray(len);\n      }\n\n      return createRegularArray(type, len);\n    }\n\n    if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n      return createTypedArrayFactory;\n    }\n\n    return createRegularArray;\n  }();\n\n  function createSizedArray(len) {\n    return Array.apply(null, {\n      length: len\n    });\n  }\n\n  function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n  var subframeEnabled = true;\n  var expressionsPlugin = null;\n  var idPrefix$1 = '';\n  var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  var _shouldRoundValues = false;\n  var bmPow = Math.pow;\n  var bmSqrt = Math.sqrt;\n  var bmFloor = Math.floor;\n  var bmMax = Math.max;\n  var bmMin = Math.min;\n  var BMMath = {};\n\n  (function () {\n    var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n    var i;\n    var len = propertyNames.length;\n\n    for (i = 0; i < len; i += 1) {\n      BMMath[propertyNames[i]] = Math[propertyNames[i]];\n    }\n  })();\n\n  function ProjectInterface$1() {\n    return {};\n  }\n\n  BMMath.random = Math.random;\n\n  BMMath.abs = function (val) {\n    var tOfVal = _typeof$6(val);\n\n    if (tOfVal === 'object' && val.length) {\n      var absArr = createSizedArray(val.length);\n      var i;\n      var len = val.length;\n\n      for (i = 0; i < len; i += 1) {\n        absArr[i] = Math.abs(val[i]);\n      }\n\n      return absArr;\n    }\n\n    return Math.abs(val);\n  };\n\n  var defaultCurveSegments = 150;\n  var degToRads = Math.PI / 180;\n  var roundCorner = 0.5519;\n\n  function roundValues(flag) {\n    _shouldRoundValues = !!flag;\n  }\n\n  function bmRnd(value) {\n    if (_shouldRoundValues) {\n      return Math.round(value);\n    }\n\n    return value;\n  }\n\n  function styleDiv(element) {\n    element.style.position = 'absolute';\n    element.style.top = 0;\n    element.style.left = 0;\n    element.style.display = 'block';\n    element.style.transformOrigin = '0 0';\n    element.style.webkitTransformOrigin = '0 0';\n    element.style.backfaceVisibility = 'visible';\n    element.style.webkitBackfaceVisibility = 'visible';\n    element.style.transformStyle = 'preserve-3d';\n    element.style.webkitTransformStyle = 'preserve-3d';\n    element.style.mozTransformStyle = 'preserve-3d';\n  }\n\n  function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n    this.type = type;\n    this.currentTime = currentTime;\n    this.totalTime = totalTime;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteEvent(type, frameMultiplier) {\n    this.type = type;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n    this.type = type;\n    this.currentLoop = currentLoop;\n    this.totalLoops = totalLoops;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n    this.type = type;\n    this.firstFrame = firstFrame;\n    this.totalFrames = totalFrames;\n  }\n\n  function BMDestroyEvent(type, target) {\n    this.type = type;\n    this.target = target;\n  }\n\n  function BMRenderFrameErrorEvent(nativeError, currentTime) {\n    this.type = 'renderFrameError';\n    this.nativeError = nativeError;\n    this.currentTime = currentTime;\n  }\n\n  function BMConfigErrorEvent(nativeError) {\n    this.type = 'configError';\n    this.nativeError = nativeError;\n  }\n\n  function BMAnimationConfigErrorEvent(type, nativeError) {\n    this.type = type;\n    this.nativeError = nativeError;\n  }\n\n  var createElementID = function () {\n    var _count = 0;\n    return function createID() {\n      _count += 1;\n      return idPrefix$1 + '__lottie_element_' + _count;\n    };\n  }();\n\n  function HSVtoRGB(h, s, v) {\n    var r;\n    var g;\n    var b;\n    var i;\n    var f;\n    var p;\n    var q;\n    var t;\n    i = Math.floor(h * 6);\n    f = h * 6 - i;\n    p = v * (1 - s);\n    q = v * (1 - f * s);\n    t = v * (1 - (1 - f) * s);\n\n    switch (i % 6) {\n      case 0:\n        r = v;\n        g = t;\n        b = p;\n        break;\n\n      case 1:\n        r = q;\n        g = v;\n        b = p;\n        break;\n\n      case 2:\n        r = p;\n        g = v;\n        b = t;\n        break;\n\n      case 3:\n        r = p;\n        g = q;\n        b = v;\n        break;\n\n      case 4:\n        r = t;\n        g = p;\n        b = v;\n        break;\n\n      case 5:\n        r = v;\n        g = p;\n        b = q;\n        break;\n\n      default:\n        break;\n    }\n\n    return [r, g, b];\n  }\n\n  function RGBtoHSV(r, g, b) {\n    var max = Math.max(r, g, b);\n    var min = Math.min(r, g, b);\n    var d = max - min;\n    var h;\n    var s = max === 0 ? 0 : d / max;\n    var v = max / 255;\n\n    switch (max) {\n      case min:\n        h = 0;\n        break;\n\n      case r:\n        h = g - b + d * (g < b ? 6 : 0);\n        h /= 6 * d;\n        break;\n\n      case g:\n        h = b - r + d * 2;\n        h /= 6 * d;\n        break;\n\n      case b:\n        h = r - g + d * 4;\n        h /= 6 * d;\n        break;\n\n      default:\n        break;\n    }\n\n    return [h, s, v];\n  }\n\n  function addSaturationToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[1] += offset;\n\n    if (hsv[1] > 1) {\n      hsv[1] = 1;\n    } else if (hsv[1] <= 0) {\n      hsv[1] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addBrightnessToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[2] += offset;\n\n    if (hsv[2] > 1) {\n      hsv[2] = 1;\n    } else if (hsv[2] < 0) {\n      hsv[2] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addHueToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[0] += offset / 360;\n\n    if (hsv[0] > 1) {\n      hsv[0] -= 1;\n    } else if (hsv[0] < 0) {\n      hsv[0] += 1;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  var rgbToHex = function () {\n    var colorMap = [];\n    var i;\n    var hex;\n\n    for (i = 0; i < 256; i += 1) {\n      hex = i.toString(16);\n      colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n    }\n\n    return function (r, g, b) {\n      if (r < 0) {\n        r = 0;\n      }\n\n      if (g < 0) {\n        g = 0;\n      }\n\n      if (b < 0) {\n        b = 0;\n      }\n\n      return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n    };\n  }();\n\n  var setSubframeEnabled = function setSubframeEnabled(flag) {\n    subframeEnabled = !!flag;\n  };\n\n  var getSubframeEnabled = function getSubframeEnabled() {\n    return subframeEnabled;\n  };\n\n  var setExpressionsPlugin = function setExpressionsPlugin(value) {\n    expressionsPlugin = value;\n  };\n\n  var getExpressionsPlugin = function getExpressionsPlugin() {\n    return expressionsPlugin;\n  };\n\n  var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n    defaultCurveSegments = value;\n  };\n\n  var getDefaultCurveSegments = function getDefaultCurveSegments() {\n    return defaultCurveSegments;\n  };\n\n  var setIdPrefix = function setIdPrefix(value) {\n    idPrefix$1 = value;\n  };\n\n  var getIdPrefix = function getIdPrefix() {\n    return idPrefix$1;\n  };\n\n  function createNS(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElementNS(svgNS, type);\n  }\n\n  function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n  var dataManager = function () {\n    var _counterId = 1;\n    var processes = [];\n    var workerFn;\n    var workerInstance;\n    var workerProxy = {\n      onmessage: function onmessage() {},\n      postMessage: function postMessage(path) {\n        workerFn({\n          data: path\n        });\n      }\n    };\n    var _workerSelf = {\n      postMessage: function postMessage(data) {\n        workerProxy.onmessage({\n          data: data\n        });\n      }\n    };\n\n    function createWorker(fn) {\n      if (window.Worker && window.Blob && getWebWorker()) {\n        var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n          type: 'text/javascript'\n        }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n        var url = URL.createObjectURL(blob);\n        return new Worker(url);\n      }\n\n      workerFn = fn;\n      return workerProxy;\n    }\n\n    function setupWorker() {\n      if (!workerInstance) {\n        workerInstance = createWorker(function workerStart(e) {\n          function dataFunctionManager() {\n            function completeLayers(layers, comps) {\n              var layerData;\n              var i;\n              var len = layers.length;\n              var j;\n              var jLen;\n              var k;\n              var kLen;\n\n              for (i = 0; i < len; i += 1) {\n                layerData = layers[i];\n\n                if ('ks' in layerData && !layerData.completed) {\n                  layerData.completed = true;\n\n                  if (layerData.tt) {\n                    layers[i - 1].td = layerData.tt;\n                  }\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        convertPathsToAbsoluteValues(maskProps[j].pt.k);\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 0) {\n                    layerData.layers = findCompLayers(layerData.refId, comps);\n                    completeLayers(layerData.layers, comps);\n                  } else if (layerData.ty === 4) {\n                    completeShapes(layerData.shapes);\n                  } else if (layerData.ty === 5) {\n                    completeText(layerData);\n                  }\n                }\n              }\n            }\n\n            function completeChars(chars, assets) {\n              if (chars) {\n                var i = 0;\n                var len = chars.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (chars[i].t === 1) {\n                    // var compData = findComp(chars[i].data.refId, assets);\n                    chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n                    // chars[i].data.op = 99999;\n                    // chars[i].data.st = 0;\n                    // chars[i].data.sr = 1;\n                    // chars[i].w = compData.w;\n                    // chars[i].data.ks = {\n                    //   a: { k: [0, 0, 0], a: 0 },\n                    //   p: { k: [0, -compData.h, 0], a: 0 },\n                    //   r: { k: 0, a: 0 },\n                    //   s: { k: [100, 100], a: 0 },\n                    //   o: { k: 100, a: 0 },\n                    // };\n\n                    completeLayers(chars[i].data.layers, assets);\n                  }\n                }\n              }\n            }\n\n            function findComp(id, comps) {\n              var i = 0;\n              var len = comps.length;\n\n              while (i < len) {\n                if (comps[i].id === id) {\n                  return comps[i];\n                }\n\n                i += 1;\n              }\n\n              return null;\n            }\n\n            function findCompLayers(id, comps) {\n              var comp = findComp(id, comps);\n\n              if (comp) {\n                if (!comp.layers.__used) {\n                  comp.layers.__used = true;\n                  return comp.layers;\n                }\n\n                return JSON.parse(JSON.stringify(comp.layers));\n              }\n\n              return null;\n            }\n\n            function completeShapes(arr) {\n              var i;\n              var len = arr.length;\n              var j;\n              var jLen;\n\n              for (i = len - 1; i >= 0; i -= 1) {\n                if (arr[i].ty === 'sh') {\n                  if (arr[i].ks.k.i) {\n                    convertPathsToAbsoluteValues(arr[i].ks.k);\n                  } else {\n                    jLen = arr[i].ks.k.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (arr[i].ks.k[j].s) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n                      }\n\n                      if (arr[i].ks.k[j].e) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n                      }\n                    }\n                  }\n                } else if (arr[i].ty === 'gr') {\n                  completeShapes(arr[i].it);\n                }\n              }\n            }\n\n            function convertPathsToAbsoluteValues(path) {\n              var i;\n              var len = path.i.length;\n\n              for (i = 0; i < len; i += 1) {\n                path.i[i][0] += path.v[i][0];\n                path.i[i][1] += path.v[i][1];\n                path.o[i][0] += path.v[i][0];\n                path.o[i][1] += path.v[i][1];\n              }\n            }\n\n            function checkVersion(minimum, animVersionString) {\n              var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n              if (minimum[0] > animVersion[0]) {\n                return true;\n              }\n\n              if (animVersion[0] > minimum[0]) {\n                return false;\n              }\n\n              if (minimum[1] > animVersion[1]) {\n                return true;\n              }\n\n              if (animVersion[1] > minimum[1]) {\n                return false;\n              }\n\n              if (minimum[2] > animVersion[2]) {\n                return true;\n              }\n\n              if (animVersion[2] > minimum[2]) {\n                return false;\n              }\n\n              return null;\n            }\n\n            var checkText = function () {\n              var minimumVersion = [4, 4, 14];\n\n              function updateTextLayer(textLayer) {\n                var documentData = textLayer.t.d;\n                textLayer.t.d = {\n                  k: [{\n                    s: documentData,\n                    t: 0\n                  }]\n                };\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkChars = function () {\n              var minimumVersion = [4, 7, 99];\n              return function (animationData) {\n                if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n                  var i;\n                  var len = animationData.chars.length;\n\n                  for (i = 0; i < len; i += 1) {\n                    var charData = animationData.chars[i];\n\n                    if (charData.data && charData.data.shapes) {\n                      completeShapes(charData.data.shapes);\n                      charData.data.ip = 0;\n                      charData.data.op = 99999;\n                      charData.data.st = 0;\n                      charData.data.sr = 1;\n                      charData.data.ks = {\n                        p: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        s: {\n                          k: [100, 100],\n                          a: 0\n                        },\n                        a: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        r: {\n                          k: 0,\n                          a: 0\n                        },\n                        o: {\n                          k: 100,\n                          a: 0\n                        }\n                      };\n\n                      if (!animationData.chars[i].t) {\n                        charData.data.shapes.push({\n                          ty: 'no'\n                        });\n                        charData.data.shapes[0].it.push({\n                          p: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          s: {\n                            k: [100, 100],\n                            a: 0\n                          },\n                          a: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          r: {\n                            k: 0,\n                            a: 0\n                          },\n                          o: {\n                            k: 100,\n                            a: 0\n                          },\n                          sk: {\n                            k: 0,\n                            a: 0\n                          },\n                          sa: {\n                            k: 0,\n                            a: 0\n                          },\n                          ty: 'tr'\n                        });\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkPathProperties = function () {\n              var minimumVersion = [5, 7, 15];\n\n              function updateTextLayer(textLayer) {\n                var pathData = textLayer.t.p;\n\n                if (typeof pathData.a === 'number') {\n                  pathData.a = {\n                    a: 0,\n                    k: pathData.a\n                  };\n                }\n\n                if (typeof pathData.p === 'number') {\n                  pathData.p = {\n                    a: 0,\n                    k: pathData.p\n                  };\n                }\n\n                if (typeof pathData.r === 'number') {\n                  pathData.r = {\n                    a: 0,\n                    k: pathData.r\n                  };\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkColors = function () {\n              var minimumVersion = [4, 1, 9];\n\n              function iterateShapes(shapes) {\n                var i;\n                var len = shapes.length;\n                var j;\n                var jLen;\n\n                for (i = 0; i < len; i += 1) {\n                  if (shapes[i].ty === 'gr') {\n                    iterateShapes(shapes[i].it);\n                  } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n                    if (shapes[i].c.k && shapes[i].c.k[0].i) {\n                      jLen = shapes[i].c.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (shapes[i].c.k[j].s) {\n                          shapes[i].c.k[j].s[0] /= 255;\n                          shapes[i].c.k[j].s[1] /= 255;\n                          shapes[i].c.k[j].s[2] /= 255;\n                          shapes[i].c.k[j].s[3] /= 255;\n                        }\n\n                        if (shapes[i].c.k[j].e) {\n                          shapes[i].c.k[j].e[0] /= 255;\n                          shapes[i].c.k[j].e[1] /= 255;\n                          shapes[i].c.k[j].e[2] /= 255;\n                          shapes[i].c.k[j].e[3] /= 255;\n                        }\n                      }\n                    } else {\n                      shapes[i].c.k[0] /= 255;\n                      shapes[i].c.k[1] /= 255;\n                      shapes[i].c.k[2] /= 255;\n                      shapes[i].c.k[3] /= 255;\n                    }\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 4) {\n                    iterateShapes(layers[i].shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkShapes = function () {\n              var minimumVersion = [4, 4, 18];\n\n              function completeClosingShapes(arr) {\n                var i;\n                var len = arr.length;\n                var j;\n                var jLen;\n\n                for (i = len - 1; i >= 0; i -= 1) {\n                  if (arr[i].ty === 'sh') {\n                    if (arr[i].ks.k.i) {\n                      arr[i].ks.k.c = arr[i].closed;\n                    } else {\n                      jLen = arr[i].ks.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (arr[i].ks.k[j].s) {\n                          arr[i].ks.k[j].s[0].c = arr[i].closed;\n                        }\n\n                        if (arr[i].ks.k[j].e) {\n                          arr[i].ks.k[j].e[0].c = arr[i].closed;\n                        }\n                      }\n                    }\n                  } else if (arr[i].ty === 'gr') {\n                    completeClosingShapes(arr[i].it);\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var layerData;\n                var i;\n                var len = layers.length;\n                var j;\n                var jLen;\n                var k;\n                var kLen;\n\n                for (i = 0; i < len; i += 1) {\n                  layerData = layers[i];\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        maskProps[j].pt.k.c = maskProps[j].cl;\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 4) {\n                    completeClosingShapes(layerData.shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            function completeData(animationData) {\n              if (animationData.__complete) {\n                return;\n              }\n\n              checkColors(animationData);\n              checkText(animationData);\n              checkChars(animationData);\n              checkPathProperties(animationData);\n              checkShapes(animationData);\n              completeLayers(animationData.layers, animationData.assets);\n              completeChars(animationData.chars, animationData.assets);\n              animationData.__complete = true;\n            }\n\n            function completeText(data) {\n              if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n              }\n            }\n\n            var moduleOb = {};\n            moduleOb.completeData = completeData;\n            moduleOb.checkColors = checkColors;\n            moduleOb.checkChars = checkChars;\n            moduleOb.checkPathProperties = checkPathProperties;\n            moduleOb.checkShapes = checkShapes;\n            moduleOb.completeLayers = completeLayers;\n            return moduleOb;\n          }\n\n          if (!_workerSelf.dataManager) {\n            _workerSelf.dataManager = dataFunctionManager();\n          }\n\n          if (!_workerSelf.assetLoader) {\n            _workerSelf.assetLoader = function () {\n              function formatResponse(xhr) {\n                // using typeof doubles the time of execution of this method,\n                // so if available, it's better to use the header to validate the type\n                var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n                if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n                  return xhr.response;\n                }\n\n                if (xhr.response && _typeof$5(xhr.response) === 'object') {\n                  return xhr.response;\n                }\n\n                if (xhr.response && typeof xhr.response === 'string') {\n                  return JSON.parse(xhr.response);\n                }\n\n                if (xhr.responseText) {\n                  return JSON.parse(xhr.responseText);\n                }\n\n                return null;\n              }\n\n              function loadAsset(path, fullPath, callback, errorCallback) {\n                var response;\n                var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n                try {\n                  // This crashes on Android WebView prior to KitKat\n                  xhr.responseType = 'json';\n                } catch (err) {} // eslint-disable-line no-empty\n\n\n                xhr.onreadystatechange = function () {\n                  if (xhr.readyState === 4) {\n                    if (xhr.status === 200) {\n                      response = formatResponse(xhr);\n                      callback(response);\n                    } else {\n                      try {\n                        response = formatResponse(xhr);\n                        callback(response);\n                      } catch (err) {\n                        if (errorCallback) {\n                          errorCallback(err);\n                        }\n                      }\n                    }\n                  }\n                };\n\n                try {\n                  xhr.open('GET', path, true);\n                } catch (error) {\n                  xhr.open('GET', fullPath + '/' + path, true);\n                }\n\n                xhr.send();\n              }\n\n              return {\n                load: loadAsset\n              };\n            }();\n          }\n\n          if (e.data.type === 'loadAnimation') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.dataManager.completeData(data);\n\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          } else if (e.data.type === 'complete') {\n            var animation = e.data.animation;\n\n            _workerSelf.dataManager.completeData(animation);\n\n            _workerSelf.postMessage({\n              id: e.data.id,\n              payload: animation,\n              status: 'success'\n            });\n          } else if (e.data.type === 'loadData') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          }\n        });\n\n        workerInstance.onmessage = function (event) {\n          var data = event.data;\n          var id = data.id;\n          var process = processes[id];\n          processes[id] = null;\n\n          if (data.status === 'success') {\n            process.onComplete(data.payload);\n          } else if (process.onError) {\n            process.onError();\n          }\n        };\n      }\n    }\n\n    function createProcess(onComplete, onError) {\n      _counterId += 1;\n      var id = 'processId_' + _counterId;\n      processes[id] = {\n        onComplete: onComplete,\n        onError: onError\n      };\n      return id;\n    }\n\n    function loadAnimation(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadAnimation',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function loadData(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadData',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function completeAnimation(anim, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'complete',\n        animation: anim,\n        id: processId\n      });\n    }\n\n    return {\n      loadAnimation: loadAnimation,\n      loadData: loadData,\n      completeAnimation: completeAnimation\n    };\n  }();\n\n  var ImagePreloader = function () {\n    var proxyImage = function () {\n      var canvas = createTag('canvas');\n      canvas.width = 1;\n      canvas.height = 1;\n      var ctx = canvas.getContext('2d');\n      ctx.fillStyle = 'rgba(0,0,0,0)';\n      ctx.fillRect(0, 0, 1, 1);\n      return canvas;\n    }();\n\n    function imageLoaded() {\n      this.loadedAssets += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function footageLoaded() {\n      this.loadedFootagesCount += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function getAssetsPath(assetData, assetsPath, originalPath) {\n      var path = '';\n\n      if (assetData.e) {\n        path = assetData.p;\n      } else if (assetsPath) {\n        var imagePath = assetData.p;\n\n        if (imagePath.indexOf('images/') !== -1) {\n          imagePath = imagePath.split('/')[1];\n        }\n\n        path = assetsPath + imagePath;\n      } else {\n        path = originalPath;\n        path += assetData.u ? assetData.u : '';\n        path += assetData.p;\n      }\n\n      return path;\n    }\n\n    function testImageLoaded(img) {\n      var _count = 0;\n      var intervalId = setInterval(function () {\n        var box = img.getBBox();\n\n        if (box.width || _count > 500) {\n          this._imageLoaded();\n\n          clearInterval(intervalId);\n        }\n\n        _count += 1;\n      }.bind(this), 50);\n    }\n\n    function createImageData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createNS('image');\n\n      if (isSafari) {\n        this.testImageLoaded(img);\n      } else {\n        img.addEventListener('load', this._imageLoaded, false);\n      }\n\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n      if (this._elementHelper.append) {\n        this._elementHelper.append(img);\n      } else {\n        this._elementHelper.appendChild(img);\n      }\n\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createImgData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createTag('img');\n      img.crossOrigin = 'anonymous';\n      img.addEventListener('load', this._imageLoaded, false);\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.src = path;\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createFootageData(data) {\n      var ob = {\n        assetData: data\n      };\n      var path = getAssetsPath(data, this.assetsPath, this.path);\n      dataManager.loadData(path, function (footageData) {\n        ob.img = footageData;\n\n        this._footageLoaded();\n      }.bind(this), function () {\n        ob.img = {};\n\n        this._footageLoaded();\n      }.bind(this));\n      return ob;\n    }\n\n    function loadAssets(assets, cb) {\n      this.imagesLoadedCb = cb;\n      var i;\n      var len = assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (!assets[i].layers) {\n          if (!assets[i].t || assets[i].t === 'seq') {\n            this.totalImages += 1;\n            this.images.push(this._createImageData(assets[i]));\n          } else if (assets[i].t === 3) {\n            this.totalFootages += 1;\n            this.images.push(this.createFootageData(assets[i]));\n          }\n        }\n      }\n    }\n\n    function setPath(path) {\n      this.path = path || '';\n    }\n\n    function setAssetsPath(path) {\n      this.assetsPath = path || '';\n    }\n\n    function getAsset(assetData) {\n      var i = 0;\n      var len = this.images.length;\n\n      while (i < len) {\n        if (this.images[i].assetData === assetData) {\n          return this.images[i].img;\n        }\n\n        i += 1;\n      }\n\n      return null;\n    }\n\n    function destroy() {\n      this.imagesLoadedCb = null;\n      this.images.length = 0;\n    }\n\n    function loadedImages() {\n      return this.totalImages === this.loadedAssets;\n    }\n\n    function loadedFootages() {\n      return this.totalFootages === this.loadedFootagesCount;\n    }\n\n    function setCacheType(type, elementHelper) {\n      if (type === 'svg') {\n        this._elementHelper = elementHelper;\n        this._createImageData = this.createImageData.bind(this);\n      } else {\n        this._createImageData = this.createImgData.bind(this);\n      }\n    }\n\n    function ImagePreloaderFactory() {\n      this._imageLoaded = imageLoaded.bind(this);\n      this._footageLoaded = footageLoaded.bind(this);\n      this.testImageLoaded = testImageLoaded.bind(this);\n      this.createFootageData = createFootageData.bind(this);\n      this.assetsPath = '';\n      this.path = '';\n      this.totalImages = 0;\n      this.totalFootages = 0;\n      this.loadedAssets = 0;\n      this.loadedFootagesCount = 0;\n      this.imagesLoadedCb = null;\n      this.images = [];\n    }\n\n    ImagePreloaderFactory.prototype = {\n      loadAssets: loadAssets,\n      setAssetsPath: setAssetsPath,\n      setPath: setPath,\n      loadedImages: loadedImages,\n      loadedFootages: loadedFootages,\n      destroy: destroy,\n      getAsset: getAsset,\n      createImgData: createImgData,\n      createImageData: createImageData,\n      imageLoaded: imageLoaded,\n      footageLoaded: footageLoaded,\n      setCacheType: setCacheType\n    };\n    return ImagePreloaderFactory;\n  }();\n\n  function BaseEvent() {}\n\n  BaseEvent.prototype = {\n    triggerEvent: function triggerEvent(eventName, args) {\n      if (this._cbs[eventName]) {\n        var callbacks = this._cbs[eventName];\n\n        for (var i = 0; i < callbacks.length; i += 1) {\n          callbacks[i](args);\n        }\n      }\n    },\n    addEventListener: function addEventListener(eventName, callback) {\n      if (!this._cbs[eventName]) {\n        this._cbs[eventName] = [];\n      }\n\n      this._cbs[eventName].push(callback);\n\n      return function () {\n        this.removeEventListener(eventName, callback);\n      }.bind(this);\n    },\n    removeEventListener: function removeEventListener(eventName, callback) {\n      if (!callback) {\n        this._cbs[eventName] = null;\n      } else if (this._cbs[eventName]) {\n        var i = 0;\n        var len = this._cbs[eventName].length;\n\n        while (i < len) {\n          if (this._cbs[eventName][i] === callback) {\n            this._cbs[eventName].splice(i, 1);\n\n            i -= 1;\n            len -= 1;\n          }\n\n          i += 1;\n        }\n\n        if (!this._cbs[eventName].length) {\n          this._cbs[eventName] = null;\n        }\n      }\n    }\n  };\n\n  var markerParser = function () {\n    function parsePayloadLines(payload) {\n      var lines = payload.split('\\r\\n');\n      var keys = {};\n      var line;\n      var keysCount = 0;\n\n      for (var i = 0; i < lines.length; i += 1) {\n        line = lines[i].split(':');\n\n        if (line.length === 2) {\n          keys[line[0]] = line[1].trim();\n          keysCount += 1;\n        }\n      }\n\n      if (keysCount === 0) {\n        throw new Error();\n      }\n\n      return keys;\n    }\n\n    return function (_markers) {\n      var markers = [];\n\n      for (var i = 0; i < _markers.length; i += 1) {\n        var _marker = _markers[i];\n        var markerData = {\n          time: _marker.tm,\n          duration: _marker.dr\n        };\n\n        try {\n          markerData.payload = JSON.parse(_markers[i].cm);\n        } catch (_) {\n          try {\n            markerData.payload = parsePayloadLines(_markers[i].cm);\n          } catch (__) {\n            markerData.payload = {\n              name: _markers[i].cm\n            };\n          }\n        }\n\n        markers.push(markerData);\n      }\n\n      return markers;\n    };\n  }();\n\n  var ProjectInterface = function () {\n    function registerComposition(comp) {\n      this.compositions.push(comp);\n    }\n\n    return function () {\n      function _thisProjectFunction(name) {\n        var i = 0;\n        var len = this.compositions.length;\n\n        while (i < len) {\n          if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n            if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n              this.compositions[i].prepareFrame(this.currentFrame);\n            }\n\n            return this.compositions[i].compInterface;\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      _thisProjectFunction.compositions = [];\n      _thisProjectFunction.currentFrame = 0;\n      _thisProjectFunction.registerComposition = registerComposition;\n      return _thisProjectFunction;\n    };\n  }();\n\n  var renderers = {};\n\n  var registerRenderer = function registerRenderer(key, value) {\n    renderers[key] = value;\n  };\n\n  function getRenderer(key) {\n    return renderers[key];\n  }\n\n  function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n  var AnimationItem = function AnimationItem() {\n    this._cbs = [];\n    this.name = '';\n    this.path = '';\n    this.isLoaded = false;\n    this.currentFrame = 0;\n    this.currentRawFrame = 0;\n    this.firstFrame = 0;\n    this.totalFrames = 0;\n    this.frameRate = 0;\n    this.frameMult = 0;\n    this.playSpeed = 1;\n    this.playDirection = 1;\n    this.playCount = 0;\n    this.animationData = {};\n    this.assets = [];\n    this.isPaused = true;\n    this.autoplay = false;\n    this.loop = true;\n    this.renderer = null;\n    this.animationID = createElementID();\n    this.assetsPath = '';\n    this.timeCompleted = 0;\n    this.segmentPos = 0;\n    this.isSubframeEnabled = getSubframeEnabled();\n    this.segments = [];\n    this._idle = true;\n    this._completedLoop = false;\n    this.projectInterface = ProjectInterface();\n    this.imagePreloader = new ImagePreloader();\n    this.audioController = audioControllerFactory();\n    this.markers = [];\n    this.configAnimation = this.configAnimation.bind(this);\n    this.onSetupError = this.onSetupError.bind(this);\n    this.onSegmentComplete = this.onSegmentComplete.bind(this);\n    this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n  };\n\n  extendPrototype([BaseEvent], AnimationItem);\n\n  AnimationItem.prototype.setParams = function (params) {\n    if (params.wrapper || params.container) {\n      this.wrapper = params.wrapper || params.container;\n    }\n\n    var animType = 'svg';\n\n    if (params.animType) {\n      animType = params.animType;\n    } else if (params.renderer) {\n      animType = params.renderer;\n    }\n\n    var RendererClass = getRenderer(animType);\n    this.renderer = new RendererClass(this, params.rendererSettings);\n    this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n    this.renderer.setProjectInterface(this.projectInterface);\n    this.animType = animType;\n\n    if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n      this.loop = true;\n    } else if (params.loop === false) {\n      this.loop = false;\n    } else {\n      this.loop = parseInt(params.loop, 10);\n    }\n\n    this.autoplay = 'autoplay' in params ? params.autoplay : true;\n    this.name = params.name ? params.name : '';\n    this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n    this.assetsPath = params.assetsPath;\n    this.initialSegment = params.initialSegment;\n\n    if (params.audioFactory) {\n      this.audioController.setAudioFactory(params.audioFactory);\n    }\n\n    if (params.animationData) {\n      this.setupAnimation(params.animationData);\n    } else if (params.path) {\n      if (params.path.lastIndexOf('\\\\') !== -1) {\n        this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n      } else {\n        this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n      }\n\n      this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n      this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n      dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n    }\n  };\n\n  AnimationItem.prototype.onSetupError = function () {\n    this.trigger('data_failed');\n  };\n\n  AnimationItem.prototype.setupAnimation = function (data) {\n    dataManager.completeAnimation(data, this.configAnimation);\n  };\n\n  AnimationItem.prototype.setData = function (wrapper, animationData) {\n    if (animationData) {\n      if (_typeof$4(animationData) !== 'object') {\n        animationData = JSON.parse(animationData);\n      }\n    }\n\n    var params = {\n      wrapper: wrapper,\n      animationData: animationData\n    };\n    var wrapperAttributes = wrapper.attributes;\n    params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n    params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\n    var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n    if (loop === 'false') {\n      params.loop = false;\n    } else if (loop === 'true') {\n      params.loop = true;\n    } else if (loop !== '') {\n      params.loop = parseInt(loop, 10);\n    }\n\n    var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n    params.autoplay = autoplay !== 'false';\n    params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n    var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n    if (prerender === 'false') {\n      params.prerender = false;\n    }\n\n    this.setParams(params);\n  };\n\n  AnimationItem.prototype.includeLayers = function (data) {\n    if (data.op > this.animationData.op) {\n      this.animationData.op = data.op;\n      this.totalFrames = Math.floor(data.op - this.animationData.ip);\n    }\n\n    var layers = this.animationData.layers;\n    var i;\n    var len = layers.length;\n    var newLayers = data.layers;\n    var j;\n    var jLen = newLayers.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      i = 0;\n\n      while (i < len) {\n        if (layers[i].id === newLayers[j].id) {\n          layers[i] = newLayers[j];\n          break;\n        }\n\n        i += 1;\n      }\n    }\n\n    if (data.chars || data.fonts) {\n      this.renderer.globalData.fontManager.addChars(data.chars);\n      this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n    }\n\n    if (data.assets) {\n      len = data.assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.animationData.assets.push(data.assets[i]);\n      }\n    }\n\n    this.animationData.__complete = false;\n    dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n  };\n\n  AnimationItem.prototype.onSegmentComplete = function (data) {\n    this.animationData = data;\n    var expressionsPlugin = getExpressionsPlugin();\n\n    if (expressionsPlugin) {\n      expressionsPlugin.initExpressions(this);\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.loadNextSegment = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments || segments.length === 0 || !this.autoloadSegments) {\n      this.trigger('data_ready');\n      this.timeCompleted = this.totalFrames;\n      return;\n    }\n\n    var segment = segments.shift();\n    this.timeCompleted = segment.time * this.frameRate;\n    var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n    this.segmentPos += 1;\n    dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n      this.trigger('data_failed');\n    }.bind(this));\n  };\n\n  AnimationItem.prototype.loadSegments = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments) {\n      this.timeCompleted = this.totalFrames;\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.imagesLoaded = function () {\n    this.trigger('loaded_images');\n    this.checkLoaded();\n  };\n\n  AnimationItem.prototype.preloadImages = function () {\n    this.imagePreloader.setAssetsPath(this.assetsPath);\n    this.imagePreloader.setPath(this.path);\n    this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n  };\n\n  AnimationItem.prototype.configAnimation = function (animData) {\n    if (!this.renderer) {\n      return;\n    }\n\n    try {\n      this.animationData = animData;\n\n      if (this.initialSegment) {\n        this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n        this.firstFrame = Math.round(this.initialSegment[0]);\n      } else {\n        this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n        this.firstFrame = Math.round(this.animationData.ip);\n      }\n\n      this.renderer.configAnimation(animData);\n\n      if (!animData.assets) {\n        animData.assets = [];\n      }\n\n      this.assets = this.animationData.assets;\n      this.frameRate = this.animationData.fr;\n      this.frameMult = this.animationData.fr / 1000;\n      this.renderer.searchExtraCompositions(animData.assets);\n      this.markers = markerParser(animData.markers || []);\n      this.trigger('config_ready');\n      this.preloadImages();\n      this.loadSegments();\n      this.updaFrameModifier();\n      this.waitForFontsLoaded();\n\n      if (this.isPaused) {\n        this.audioController.pause();\n      }\n    } catch (error) {\n      this.triggerConfigError(error);\n    }\n  };\n\n  AnimationItem.prototype.waitForFontsLoaded = function () {\n    if (!this.renderer) {\n      return;\n    }\n\n    if (this.renderer.globalData.fontManager.isLoaded) {\n      this.checkLoaded();\n    } else {\n      setTimeout(this.waitForFontsLoaded.bind(this), 20);\n    }\n  };\n\n  AnimationItem.prototype.checkLoaded = function () {\n    if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n      this.isLoaded = true;\n      var expressionsPlugin = getExpressionsPlugin();\n\n      if (expressionsPlugin) {\n        expressionsPlugin.initExpressions(this);\n      }\n\n      this.renderer.initItems();\n      setTimeout(function () {\n        this.trigger('DOMLoaded');\n      }.bind(this), 0);\n      this.gotoFrame();\n\n      if (this.autoplay) {\n        this.play();\n      }\n    }\n  };\n\n  AnimationItem.prototype.resize = function () {\n    this.renderer.updateContainerSize();\n  };\n\n  AnimationItem.prototype.setSubframe = function (flag) {\n    this.isSubframeEnabled = !!flag;\n  };\n\n  AnimationItem.prototype.gotoFrame = function () {\n    this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n    if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n      this.currentFrame = this.timeCompleted;\n    }\n\n    this.trigger('enterFrame');\n    this.renderFrame();\n    this.trigger('drawnFrame');\n  };\n\n  AnimationItem.prototype.renderFrame = function () {\n    if (this.isLoaded === false || !this.renderer) {\n      return;\n    }\n\n    try {\n      this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n    } catch (error) {\n      this.triggerRenderFrameError(error);\n    }\n  };\n\n  AnimationItem.prototype.play = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.isPaused = false;\n      this.trigger('_pause');\n      this.audioController.resume();\n\n      if (this._idle) {\n        this._idle = false;\n        this.trigger('_active');\n      }\n    }\n  };\n\n  AnimationItem.prototype.pause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === false) {\n      this.isPaused = true;\n      this.trigger('_play');\n      this._idle = true;\n      this.trigger('_idle');\n      this.audioController.pause();\n    }\n  };\n\n  AnimationItem.prototype.togglePause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.play();\n    } else {\n      this.pause();\n    }\n  };\n\n  AnimationItem.prototype.stop = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.pause();\n    this.playCount = 0;\n    this._completedLoop = false;\n    this.setCurrentRawFrameValue(0);\n  };\n\n  AnimationItem.prototype.getMarkerData = function (markerName) {\n    var marker;\n\n    for (var i = 0; i < this.markers.length; i += 1) {\n      marker = this.markers[i];\n\n      if (marker.payload && marker.payload.name === markerName) {\n        return marker;\n      }\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        this.goToAndStop(marker.time, true);\n      }\n    } else if (isFrame) {\n      this.setCurrentRawFrameValue(value);\n    } else {\n      this.setCurrentRawFrameValue(value * this.frameModifier);\n    }\n\n    this.pause();\n  };\n\n  AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        if (!marker.duration) {\n          this.goToAndStop(marker.time, true);\n        } else {\n          this.playSegments([marker.time, marker.time + marker.duration], true);\n        }\n      }\n    } else {\n      this.goToAndStop(numValue, isFrame, name);\n    }\n\n    this.play();\n  };\n\n  AnimationItem.prototype.advanceTime = function (value) {\n    if (this.isPaused === true || this.isLoaded === false) {\n      return;\n    }\n\n    var nextValue = this.currentRawFrame + value * this.frameModifier;\n    var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n    // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n    if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n      if (!this.loop || this.playCount === this.loop) {\n        if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n          _isComplete = true;\n          nextValue = this.totalFrames - 1;\n        }\n      } else if (nextValue >= this.totalFrames) {\n        this.playCount += 1;\n\n        if (!this.checkSegments(nextValue % this.totalFrames)) {\n          this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n          this._completedLoop = true;\n          this.trigger('loopComplete');\n        }\n      } else {\n        this.setCurrentRawFrameValue(nextValue);\n      }\n    } else if (nextValue < 0) {\n      if (!this.checkSegments(nextValue % this.totalFrames)) {\n        if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n          // eslint-disable-line no-plusplus\n          this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n          if (!this._completedLoop) {\n            this._completedLoop = true;\n          } else {\n            this.trigger('loopComplete');\n          }\n        } else {\n          _isComplete = true;\n          nextValue = 0;\n        }\n      }\n    } else {\n      this.setCurrentRawFrameValue(nextValue);\n    }\n\n    if (_isComplete) {\n      this.setCurrentRawFrameValue(nextValue);\n      this.pause();\n      this.trigger('complete');\n    }\n  };\n\n  AnimationItem.prototype.adjustSegment = function (arr, offset) {\n    this.playCount = 0;\n\n    if (arr[1] < arr[0]) {\n      if (this.frameModifier > 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(-1);\n        }\n      }\n\n      this.totalFrames = arr[0] - arr[1];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[1];\n      this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n    } else if (arr[1] > arr[0]) {\n      if (this.frameModifier < 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(1);\n        }\n      }\n\n      this.totalFrames = arr[1] - arr[0];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[0];\n      this.setCurrentRawFrameValue(0.001 + offset);\n    }\n\n    this.trigger('segmentStart');\n  };\n\n  AnimationItem.prototype.setSegment = function (init, end) {\n    var pendingFrame = -1;\n\n    if (this.isPaused) {\n      if (this.currentRawFrame + this.firstFrame < init) {\n        pendingFrame = init;\n      } else if (this.currentRawFrame + this.firstFrame > end) {\n        pendingFrame = end - init;\n      }\n    }\n\n    this.firstFrame = init;\n    this.totalFrames = end - init;\n    this.timeCompleted = this.totalFrames;\n\n    if (pendingFrame !== -1) {\n      this.goToAndStop(pendingFrame, true);\n    }\n  };\n\n  AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n    if (forceFlag) {\n      this.segments.length = 0;\n    }\n\n    if (_typeof$4(arr[0]) === 'object') {\n      var i;\n      var len = arr.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.segments.push(arr[i]);\n      }\n    } else {\n      this.segments.push(arr);\n    }\n\n    if (this.segments.length && forceFlag) {\n      this.adjustSegment(this.segments.shift(), 0);\n    }\n\n    if (this.isPaused) {\n      this.play();\n    }\n  };\n\n  AnimationItem.prototype.resetSegments = function (forceFlag) {\n    this.segments.length = 0;\n    this.segments.push([this.animationData.ip, this.animationData.op]);\n\n    if (forceFlag) {\n      this.checkSegments(0);\n    }\n  };\n\n  AnimationItem.prototype.checkSegments = function (offset) {\n    if (this.segments.length) {\n      this.adjustSegment(this.segments.shift(), offset);\n      return true;\n    }\n\n    return false;\n  };\n\n  AnimationItem.prototype.destroy = function (name) {\n    if (name && this.name !== name || !this.renderer) {\n      return;\n    }\n\n    this.renderer.destroy();\n    this.imagePreloader.destroy();\n    this.trigger('destroy');\n    this._cbs = null;\n    this.onEnterFrame = null;\n    this.onLoopComplete = null;\n    this.onComplete = null;\n    this.onSegmentStart = null;\n    this.onDestroy = null;\n    this.renderer = null;\n    this.renderer = null;\n    this.imagePreloader = null;\n    this.projectInterface = null;\n  };\n\n  AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n    this.currentRawFrame = value;\n    this.gotoFrame();\n  };\n\n  AnimationItem.prototype.setSpeed = function (val) {\n    this.playSpeed = val;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setDirection = function (val) {\n    this.playDirection = val < 0 ? -1 : 1;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setVolume = function (val, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.setVolume(val);\n  };\n\n  AnimationItem.prototype.getVolume = function () {\n    return this.audioController.getVolume();\n  };\n\n  AnimationItem.prototype.mute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.mute();\n  };\n\n  AnimationItem.prototype.unmute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.unmute();\n  };\n\n  AnimationItem.prototype.updaFrameModifier = function () {\n    this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n    this.audioController.setRate(this.playSpeed * this.playDirection);\n  };\n\n  AnimationItem.prototype.getPath = function () {\n    return this.path;\n  };\n\n  AnimationItem.prototype.getAssetsPath = function (assetData) {\n    var path = '';\n\n    if (assetData.e) {\n      path = assetData.p;\n    } else if (this.assetsPath) {\n      var imagePath = assetData.p;\n\n      if (imagePath.indexOf('images/') !== -1) {\n        imagePath = imagePath.split('/')[1];\n      }\n\n      path = this.assetsPath + imagePath;\n    } else {\n      path = this.path;\n      path += assetData.u ? assetData.u : '';\n      path += assetData.p;\n    }\n\n    return path;\n  };\n\n  AnimationItem.prototype.getAssetData = function (id) {\n    var i = 0;\n    var len = this.assets.length;\n\n    while (i < len) {\n      if (id === this.assets[i].id) {\n        return this.assets[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.hide = function () {\n    this.renderer.hide();\n  };\n\n  AnimationItem.prototype.show = function () {\n    this.renderer.show();\n  };\n\n  AnimationItem.prototype.getDuration = function (isFrame) {\n    return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n  };\n\n  AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n    try {\n      var element = this.renderer.getElementByPath(path);\n      element.updateDocumentData(documentData, index);\n    } catch (error) {// TODO: decide how to handle catch case\n    }\n  };\n\n  AnimationItem.prototype.trigger = function (name) {\n    if (this._cbs && this._cbs[name]) {\n      switch (name) {\n        case 'enterFrame':\n          this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n          break;\n\n        case 'drawnFrame':\n          this.drawnFrameEvent.currentTime = this.currentFrame;\n          this.drawnFrameEvent.totalTime = this.totalFrames;\n          this.drawnFrameEvent.direction = this.frameModifier;\n          this.triggerEvent(name, this.drawnFrameEvent);\n          break;\n\n        case 'loopComplete':\n          this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n          break;\n\n        case 'complete':\n          this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n          break;\n\n        case 'segmentStart':\n          this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n          break;\n\n        case 'destroy':\n          this.triggerEvent(name, new BMDestroyEvent(name, this));\n          break;\n\n        default:\n          this.triggerEvent(name);\n      }\n    }\n\n    if (name === 'enterFrame' && this.onEnterFrame) {\n      this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n    }\n\n    if (name === 'loopComplete' && this.onLoopComplete) {\n      this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n    }\n\n    if (name === 'complete' && this.onComplete) {\n      this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n    }\n\n    if (name === 'segmentStart' && this.onSegmentStart) {\n      this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n    }\n\n    if (name === 'destroy' && this.onDestroy) {\n      this.onDestroy.call(this, new BMDestroyEvent(name, this));\n    }\n  };\n\n  AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n    var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  AnimationItem.prototype.triggerConfigError = function (nativeError) {\n    var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  var animationManager = function () {\n    var moduleOb = {};\n    var registeredAnimations = [];\n    var initTime = 0;\n    var len = 0;\n    var playingAnimationsNum = 0;\n    var _stopped = true;\n    var _isFrozen = false;\n\n    function removeElement(ev) {\n      var i = 0;\n      var animItem = ev.target;\n\n      while (i < len) {\n        if (registeredAnimations[i].animation === animItem) {\n          registeredAnimations.splice(i, 1);\n          i -= 1;\n          len -= 1;\n\n          if (!animItem.isPaused) {\n            subtractPlayingCount();\n          }\n        }\n\n        i += 1;\n      }\n    }\n\n    function registerAnimation(element, animationData) {\n      if (!element) {\n        return null;\n      }\n\n      var i = 0;\n\n      while (i < len) {\n        if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n          return registeredAnimations[i].animation;\n        }\n\n        i += 1;\n      }\n\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, element);\n      animItem.setData(element, animationData);\n      return animItem;\n    }\n\n    function getRegisteredAnimations() {\n      var i;\n      var lenAnims = registeredAnimations.length;\n      var animations = [];\n\n      for (i = 0; i < lenAnims; i += 1) {\n        animations.push(registeredAnimations[i].animation);\n      }\n\n      return animations;\n    }\n\n    function addPlayingCount() {\n      playingAnimationsNum += 1;\n      activate();\n    }\n\n    function subtractPlayingCount() {\n      playingAnimationsNum -= 1;\n    }\n\n    function setupAnimation(animItem, element) {\n      animItem.addEventListener('destroy', removeElement);\n      animItem.addEventListener('_active', addPlayingCount);\n      animItem.addEventListener('_idle', subtractPlayingCount);\n      registeredAnimations.push({\n        elem: element,\n        animation: animItem\n      });\n      len += 1;\n    }\n\n    function loadAnimation(params) {\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, null);\n      animItem.setParams(params);\n      return animItem;\n    }\n\n    function setSpeed(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setSpeed(val, animation);\n      }\n    }\n\n    function setDirection(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setDirection(val, animation);\n      }\n    }\n\n    function play(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.play(animation);\n      }\n    }\n\n    function resume(nowTime) {\n      var elapsedTime = nowTime - initTime;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.advanceTime(elapsedTime);\n      }\n\n      initTime = nowTime;\n\n      if (playingAnimationsNum && !_isFrozen) {\n        window.requestAnimationFrame(resume);\n      } else {\n        _stopped = true;\n      }\n    }\n\n    function first(nowTime) {\n      initTime = nowTime;\n      window.requestAnimationFrame(resume);\n    }\n\n    function pause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.pause(animation);\n      }\n    }\n\n    function goToAndStop(value, isFrame, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n      }\n    }\n\n    function stop(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.stop(animation);\n      }\n    }\n\n    function togglePause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.togglePause(animation);\n      }\n    }\n\n    function destroy(animation) {\n      var i;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        registeredAnimations[i].animation.destroy(animation);\n      }\n    }\n\n    function searchAnimations(animationData, standalone, renderer) {\n      var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n      var i;\n      var lenAnims = animElements.length;\n\n      for (i = 0; i < lenAnims; i += 1) {\n        if (renderer) {\n          animElements[i].setAttribute('data-bm-type', renderer);\n        }\n\n        registerAnimation(animElements[i], animationData);\n      }\n\n      if (standalone && lenAnims === 0) {\n        if (!renderer) {\n          renderer = 'svg';\n        }\n\n        var body = document.getElementsByTagName('body')[0];\n        body.innerText = '';\n        var div = createTag('div');\n        div.style.width = '100%';\n        div.style.height = '100%';\n        div.setAttribute('data-bm-type', renderer);\n        body.appendChild(div);\n        registerAnimation(div, animationData);\n      }\n    }\n\n    function resize() {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.resize();\n      }\n    }\n\n    function activate() {\n      if (!_isFrozen && playingAnimationsNum) {\n        if (_stopped) {\n          window.requestAnimationFrame(first);\n          _stopped = false;\n        }\n      }\n    }\n\n    function freeze() {\n      _isFrozen = true;\n    }\n\n    function unfreeze() {\n      _isFrozen = false;\n      activate();\n    }\n\n    function setVolume(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setVolume(val, animation);\n      }\n    }\n\n    function mute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.mute(animation);\n      }\n    }\n\n    function unmute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.unmute(animation);\n      }\n    }\n\n    moduleOb.registerAnimation = registerAnimation;\n    moduleOb.loadAnimation = loadAnimation;\n    moduleOb.setSpeed = setSpeed;\n    moduleOb.setDirection = setDirection;\n    moduleOb.play = play;\n    moduleOb.pause = pause;\n    moduleOb.stop = stop;\n    moduleOb.togglePause = togglePause;\n    moduleOb.searchAnimations = searchAnimations;\n    moduleOb.resize = resize; // moduleOb.start = start;\n\n    moduleOb.goToAndStop = goToAndStop;\n    moduleOb.destroy = destroy;\n    moduleOb.freeze = freeze;\n    moduleOb.unfreeze = unfreeze;\n    moduleOb.setVolume = setVolume;\n    moduleOb.mute = mute;\n    moduleOb.unmute = unmute;\n    moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n    return moduleOb;\n  }();\n\n  /* eslint-disable */\n  var BezierFactory = function () {\n    /**\r\n       * BezierEasing - use bezier curve for transition easing function\r\n       * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n       *\r\n       * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n       * Usage:\r\n       * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n       * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n       *\r\n       */\n    var ob = {};\n    ob.getBezierEasing = getBezierEasing;\n    var beziers = {};\n\n    function getBezierEasing(a, b, c, d, nm) {\n      var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n      if (beziers[str]) {\n        return beziers[str];\n      }\n\n      var bezEasing = new BezierEasing([a, b, c, d]);\n      beziers[str] = bezEasing;\n      return bezEasing;\n    } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n    var NEWTON_ITERATIONS = 4;\n    var NEWTON_MIN_SLOPE = 0.001;\n    var SUBDIVISION_PRECISION = 0.0000001;\n    var SUBDIVISION_MAX_ITERATIONS = 10;\n    var kSplineTableSize = 11;\n    var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n    var float32ArraySupported = typeof Float32Array === 'function';\n\n    function A(aA1, aA2) {\n      return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n    }\n\n    function B(aA1, aA2) {\n      return 3.0 * aA2 - 6.0 * aA1;\n    }\n\n    function C(aA1) {\n      return 3.0 * aA1;\n    } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n    function calcBezier(aT, aA1, aA2) {\n      return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n    } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n    function getSlope(aT, aA1, aA2) {\n      return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n    }\n\n    function binarySubdivide(aX, aA, aB, mX1, mX2) {\n      var currentX,\n          currentT,\n          i = 0;\n\n      do {\n        currentT = aA + (aB - aA) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n        if (currentX > 0.0) {\n          aB = currentT;\n        } else {\n          aA = currentT;\n        }\n      } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n      return currentT;\n    }\n\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n      for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n        var currentSlope = getSlope(aGuessT, mX1, mX2);\n        if (currentSlope === 0.0) return aGuessT;\n        var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n        aGuessT -= currentX / currentSlope;\n      }\n\n      return aGuessT;\n    }\n    /**\r\n       * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n       */\n\n\n    function BezierEasing(points) {\n      this._p = points;\n      this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n      this._precomputed = false;\n      this.get = this.get.bind(this);\n    }\n\n    BezierEasing.prototype = {\n      get: function get(x) {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        if (!this._precomputed) this._precompute();\n        if (mX1 === mY1 && mX2 === mY2) return x; // linear\n        // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n        if (x === 0) return 0;\n        if (x === 1) return 1;\n        return calcBezier(this._getTForX(x), mY1, mY2);\n      },\n      // Private part\n      _precompute: function _precompute() {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        this._precomputed = true;\n\n        if (mX1 !== mY1 || mX2 !== mY2) {\n          this._calcSampleValues();\n        }\n      },\n      _calcSampleValues: function _calcSampleValues() {\n        var mX1 = this._p[0],\n            mX2 = this._p[2];\n\n        for (var i = 0; i < kSplineTableSize; ++i) {\n          this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n        }\n      },\n\n      /**\r\n           * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n           */\n      _getTForX: function _getTForX(aX) {\n        var mX1 = this._p[0],\n            mX2 = this._p[2],\n            mSampleValues = this._mSampleValues;\n        var intervalStart = 0.0;\n        var currentSample = 1;\n        var lastSample = kSplineTableSize - 1;\n\n        for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n          intervalStart += kSampleStepSize;\n        }\n\n        --currentSample; // Interpolate to provide an initial guess for t\n\n        var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n        var guessForT = intervalStart + dist * kSampleStepSize;\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n          return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n\n        if (initialSlope === 0.0) {\n          return guessForT;\n        }\n\n        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n      }\n    };\n    return ob;\n  }();\n\n  var pooling = function () {\n    function _double(arr) {\n      return arr.concat(createSizedArray(arr.length));\n    }\n\n    return {\n      \"double\": _double\n    };\n  }();\n\n  var poolFactory = function () {\n    return function (initialLength, _create, _release) {\n      var _length = 0;\n      var _maxLength = initialLength;\n      var pool = createSizedArray(_maxLength);\n      var ob = {\n        newElement: newElement,\n        release: release\n      };\n\n      function newElement() {\n        var element;\n\n        if (_length) {\n          _length -= 1;\n          element = pool[_length];\n        } else {\n          element = _create();\n        }\n\n        return element;\n      }\n\n      function release(element) {\n        if (_length === _maxLength) {\n          pool = pooling[\"double\"](pool);\n          _maxLength *= 2;\n        }\n\n        if (_release) {\n          _release(element);\n        }\n\n        pool[_length] = element;\n        _length += 1;\n      }\n\n      return ob;\n    };\n  }();\n\n  var bezierLengthPool = function () {\n    function create() {\n      return {\n        addedLength: 0,\n        percents: createTypedArray('float32', getDefaultCurveSegments()),\n        lengths: createTypedArray('float32', getDefaultCurveSegments())\n      };\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  var segmentsLengthPool = function () {\n    function create() {\n      return {\n        lengths: [],\n        totalLength: 0\n      };\n    }\n\n    function release(element) {\n      var i;\n      var len = element.lengths.length;\n\n      for (i = 0; i < len; i += 1) {\n        bezierLengthPool.release(element.lengths[i]);\n      }\n\n      element.lengths.length = 0;\n    }\n\n    return poolFactory(8, create, release);\n  }();\n\n  function bezFunction() {\n    var math = Math;\n\n    function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n      var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n      return det1 > -0.001 && det1 < 0.001;\n    }\n\n    function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n      if (z1 === 0 && z2 === 0 && z3 === 0) {\n        return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n      }\n\n      var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n      var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n      var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n      var diffDist;\n\n      if (dist1 > dist2) {\n        if (dist1 > dist3) {\n          diffDist = dist1 - dist2 - dist3;\n        } else {\n          diffDist = dist3 - dist2 - dist1;\n        }\n      } else if (dist3 > dist2) {\n        diffDist = dist3 - dist2 - dist1;\n      } else {\n        diffDist = dist2 - dist1 - dist3;\n      }\n\n      return diffDist > -0.0001 && diffDist < 0.0001;\n    }\n\n    var getBezierLength = function () {\n      return function (pt1, pt2, pt3, pt4) {\n        var curveSegments = getDefaultCurveSegments();\n        var k;\n        var i;\n        var len;\n        var ptCoord;\n        var perc;\n        var addedLength = 0;\n        var ptDistance;\n        var point = [];\n        var lastPoint = [];\n        var lengthData = bezierLengthPool.newElement();\n        len = pt3.length;\n\n        for (k = 0; k < curveSegments; k += 1) {\n          perc = k / (curveSegments - 1);\n          ptDistance = 0;\n\n          for (i = 0; i < len; i += 1) {\n            ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n            point[i] = ptCoord;\n\n            if (lastPoint[i] !== null) {\n              ptDistance += bmPow(point[i] - lastPoint[i], 2);\n            }\n\n            lastPoint[i] = point[i];\n          }\n\n          if (ptDistance) {\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n          }\n\n          lengthData.percents[k] = perc;\n          lengthData.lengths[k] = addedLength;\n        }\n\n        lengthData.addedLength = addedLength;\n        return lengthData;\n      };\n    }();\n\n    function getSegmentsLength(shapeData) {\n      var segmentsLength = segmentsLengthPool.newElement();\n      var closed = shapeData.c;\n      var pathV = shapeData.v;\n      var pathO = shapeData.o;\n      var pathI = shapeData.i;\n      var i;\n      var len = shapeData._length;\n      var lengths = segmentsLength.lengths;\n      var totalLength = 0;\n\n      for (i = 0; i < len - 1; i += 1) {\n        lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      if (closed && len) {\n        lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      segmentsLength.totalLength = totalLength;\n      return segmentsLength;\n    }\n\n    function BezierData(length) {\n      this.segmentLength = 0;\n      this.points = new Array(length);\n    }\n\n    function PointData(partial, point) {\n      this.partialLength = partial;\n      this.point = point;\n    }\n\n    var buildBezierData = function () {\n      var storedData = {};\n      return function (pt1, pt2, pt3, pt4) {\n        var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n        if (!storedData[bezierName]) {\n          var curveSegments = getDefaultCurveSegments();\n          var k;\n          var i;\n          var len;\n          var ptCoord;\n          var perc;\n          var addedLength = 0;\n          var ptDistance;\n          var point;\n          var lastPoint = null;\n\n          if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n            curveSegments = 2;\n          }\n\n          var bezierData = new BezierData(curveSegments);\n          len = pt3.length;\n\n          for (k = 0; k < curveSegments; k += 1) {\n            point = createSizedArray(len);\n            perc = k / (curveSegments - 1);\n            ptDistance = 0;\n\n            for (i = 0; i < len; i += 1) {\n              ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n              point[i] = ptCoord;\n\n              if (lastPoint !== null) {\n                ptDistance += bmPow(point[i] - lastPoint[i], 2);\n              }\n            }\n\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n            bezierData.points[k] = new PointData(ptDistance, point);\n            lastPoint = point;\n          }\n\n          bezierData.segmentLength = addedLength;\n          storedData[bezierName] = bezierData;\n        }\n\n        return storedData[bezierName];\n      };\n    }();\n\n    function getDistancePerc(perc, bezierData) {\n      var percents = bezierData.percents;\n      var lengths = bezierData.lengths;\n      var len = percents.length;\n      var initPos = bmFloor((len - 1) * perc);\n      var lengthPos = perc * bezierData.addedLength;\n      var lPerc = 0;\n\n      if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n        return percents[initPos];\n      }\n\n      var dir = lengths[initPos] > lengthPos ? -1 : 1;\n      var flag = true;\n\n      while (flag) {\n        if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n          lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n          flag = false;\n        } else {\n          initPos += dir;\n        }\n\n        if (initPos < 0 || initPos >= len - 1) {\n          // FIX for TypedArrays that don't store floating point values with enough accuracy\n          if (initPos === len - 1) {\n            return percents[initPos];\n          }\n\n          flag = false;\n        }\n      }\n\n      return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n    }\n\n    function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n      var t1 = getDistancePerc(percent, bezierData);\n      var u1 = 1 - t1;\n      var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n      var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n      return [ptX, ptY];\n    }\n\n    var bezierSegmentPoints = createTypedArray('float32', 8);\n\n    function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n      if (startPerc < 0) {\n        startPerc = 0;\n      } else if (startPerc > 1) {\n        startPerc = 1;\n      }\n\n      var t0 = getDistancePerc(startPerc, bezierData);\n      endPerc = endPerc > 1 ? 1 : endPerc;\n      var t1 = getDistancePerc(endPerc, bezierData);\n      var i;\n      var len = pt1.length;\n      var u0 = 1 - t0;\n      var u1 = 1 - t1;\n      var u0u0u0 = u0 * u0 * u0;\n      var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0t0 = t0 * t0 * t0; //\n\n      var u0u0u1 = u0 * u0 * u1;\n      var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0t1 = t0 * t0 * t1; //\n\n      var u0u1u1 = u0 * u1 * u1;\n      var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1t1 = t0 * t1 * t1; //\n\n      var u1u1u1 = u1 * u1 * u1;\n      var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1t1 = t1 * t1 * t1;\n\n      for (i = 0; i < len; i += 1) {\n        bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n      }\n\n      return bezierSegmentPoints;\n    }\n\n    return {\n      getSegmentsLength: getSegmentsLength,\n      getNewSegment: getNewSegment,\n      getPointInSegment: getPointInSegment,\n      buildBezierData: buildBezierData,\n      pointOnLine2D: pointOnLine2D,\n      pointOnLine3D: pointOnLine3D\n    };\n  }\n\n  var bez = bezFunction();\n\n  var PropertyFactory = function () {\n    var initFrame = initialDefaultFrame;\n    var mathAbs = Math.abs;\n\n    function interpolateValue(frameNum, caching) {\n      var offsetTime = this.offsetTime;\n      var newValue;\n\n      if (this.propType === 'multidimensional') {\n        newValue = createTypedArray('float32', this.pv.length);\n      }\n\n      var iterationIndex = caching.lastIndex;\n      var i = iterationIndex;\n      var len = this.keyframes.length - 1;\n      var flag = true;\n      var keyData;\n      var nextKeyData;\n      var keyframeMetadata;\n\n      while (flag) {\n        keyData = this.keyframes[i];\n        nextKeyData = this.keyframes[i + 1];\n\n        if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n          if (keyData.h) {\n            keyData = nextKeyData;\n          }\n\n          iterationIndex = 0;\n          break;\n        }\n\n        if (nextKeyData.t - offsetTime > frameNum) {\n          iterationIndex = i;\n          break;\n        }\n\n        if (i < len - 1) {\n          i += 1;\n        } else {\n          iterationIndex = 0;\n          flag = false;\n        }\n      }\n\n      keyframeMetadata = this.keyframesMetadata[i] || {};\n      var k;\n      var kLen;\n      var perc;\n      var jLen;\n      var j;\n      var fnc;\n      var nextKeyTime = nextKeyData.t - offsetTime;\n      var keyTime = keyData.t - offsetTime;\n      var endValue;\n\n      if (keyData.to) {\n        if (!keyframeMetadata.bezierData) {\n          keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n        }\n\n        var bezierData = keyframeMetadata.bezierData;\n\n        if (frameNum >= nextKeyTime || frameNum < keyTime) {\n          var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n          kLen = bezierData.points[ind].point.length;\n\n          for (k = 0; k < kLen; k += 1) {\n            newValue[k] = bezierData.points[ind].point[k];\n          } // caching._lastKeyframeIndex = -1;\n\n        } else {\n          if (keyframeMetadata.__fnct) {\n            fnc = keyframeMetadata.__fnct;\n          } else {\n            fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n            keyframeMetadata.__fnct = fnc;\n          }\n\n          perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n          var distanceInLine = bezierData.segmentLength * perc;\n          var segmentPerc;\n          var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n          j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n          flag = true;\n          jLen = bezierData.points.length;\n\n          while (flag) {\n            addedLength += bezierData.points[j].partialLength;\n\n            if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n              kLen = bezierData.points[j].point.length;\n\n              for (k = 0; k < kLen; k += 1) {\n                newValue[k] = bezierData.points[j].point[k];\n              }\n\n              break;\n            } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n              segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n              kLen = bezierData.points[j].point.length;\n\n              for (k = 0; k < kLen; k += 1) {\n                newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n              }\n\n              break;\n            }\n\n            if (j < jLen - 1) {\n              j += 1;\n            } else {\n              flag = false;\n            }\n          }\n\n          caching._lastPoint = j;\n          caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n          caching._lastKeyframeIndex = i;\n        }\n      } else {\n        var outX;\n        var outY;\n        var inX;\n        var inY;\n        var keyValue;\n        len = keyData.s.length;\n        endValue = nextKeyData.s || keyData.e;\n\n        if (this.sh && keyData.h !== 1) {\n          if (frameNum >= nextKeyTime) {\n            newValue[0] = endValue[0];\n            newValue[1] = endValue[1];\n            newValue[2] = endValue[2];\n          } else if (frameNum <= keyTime) {\n            newValue[0] = keyData.s[0];\n            newValue[1] = keyData.s[1];\n            newValue[2] = keyData.s[2];\n          } else {\n            var quatStart = createQuaternion(keyData.s);\n            var quatEnd = createQuaternion(endValue);\n            var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n            quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n          }\n        } else {\n          for (i = 0; i < len; i += 1) {\n            if (keyData.h !== 1) {\n              if (frameNum >= nextKeyTime) {\n                perc = 1;\n              } else if (frameNum < keyTime) {\n                perc = 0;\n              } else {\n                if (keyData.o.x.constructor === Array) {\n                  if (!keyframeMetadata.__fnct) {\n                    keyframeMetadata.__fnct = [];\n                  }\n\n                  if (!keyframeMetadata.__fnct[i]) {\n                    outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n                    outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n                    inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n                    inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n                    fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                    keyframeMetadata.__fnct[i] = fnc;\n                  } else {\n                    fnc = keyframeMetadata.__fnct[i];\n                  }\n                } else if (!keyframeMetadata.__fnct) {\n                  outX = keyData.o.x;\n                  outY = keyData.o.y;\n                  inX = keyData.i.x;\n                  inY = keyData.i.y;\n                  fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                  keyData.keyframeMetadata = fnc;\n                } else {\n                  fnc = keyframeMetadata.__fnct;\n                }\n\n                perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n              }\n            }\n\n            endValue = nextKeyData.s || keyData.e;\n            keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n            if (this.propType === 'multidimensional') {\n              newValue[i] = keyValue;\n            } else {\n              newValue = keyValue;\n            }\n          }\n        }\n      }\n\n      caching.lastIndex = iterationIndex;\n      return newValue;\n    } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n    function slerp(a, b, t) {\n      var out = [];\n      var ax = a[0];\n      var ay = a[1];\n      var az = a[2];\n      var aw = a[3];\n      var bx = b[0];\n      var by = b[1];\n      var bz = b[2];\n      var bw = b[3];\n      var omega;\n      var cosom;\n      var sinom;\n      var scale0;\n      var scale1;\n      cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n      if (cosom < 0.0) {\n        cosom = -cosom;\n        bx = -bx;\n        by = -by;\n        bz = -bz;\n        bw = -bw;\n      }\n\n      if (1.0 - cosom > 0.000001) {\n        omega = Math.acos(cosom);\n        sinom = Math.sin(omega);\n        scale0 = Math.sin((1.0 - t) * omega) / sinom;\n        scale1 = Math.sin(t * omega) / sinom;\n      } else {\n        scale0 = 1.0 - t;\n        scale1 = t;\n      }\n\n      out[0] = scale0 * ax + scale1 * bx;\n      out[1] = scale0 * ay + scale1 * by;\n      out[2] = scale0 * az + scale1 * bz;\n      out[3] = scale0 * aw + scale1 * bw;\n      return out;\n    }\n\n    function quaternionToEuler(out, quat) {\n      var qx = quat[0];\n      var qy = quat[1];\n      var qz = quat[2];\n      var qw = quat[3];\n      var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n      var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n      var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n      out[0] = heading / degToRads;\n      out[1] = attitude / degToRads;\n      out[2] = bank / degToRads;\n    }\n\n    function createQuaternion(values) {\n      var heading = values[0] * degToRads;\n      var attitude = values[1] * degToRads;\n      var bank = values[2] * degToRads;\n      var c1 = Math.cos(heading / 2);\n      var c2 = Math.cos(attitude / 2);\n      var c3 = Math.cos(bank / 2);\n      var s1 = Math.sin(heading / 2);\n      var s2 = Math.sin(attitude / 2);\n      var s3 = Math.sin(bank / 2);\n      var w = c1 * c2 * c3 - s1 * s2 * s3;\n      var x = s1 * s2 * c3 + c1 * c2 * s3;\n      var y = s1 * c2 * c3 + c1 * s2 * s3;\n      var z = c1 * s2 * c3 - s1 * c2 * s3;\n      return [x, y, z, w];\n    }\n\n    function getValueAtCurrentTime() {\n      var frameNum = this.comp.renderedFrame - this.offsetTime;\n      var initTime = this.keyframes[0].t - this.offsetTime;\n      var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n      if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n        if (this._caching.lastFrame >= frameNum) {\n          this._caching._lastKeyframeIndex = -1;\n          this._caching.lastIndex = 0;\n        }\n\n        var renderResult = this.interpolateValue(frameNum, this._caching);\n        this.pv = renderResult;\n      }\n\n      this._caching.lastFrame = frameNum;\n      return this.pv;\n    }\n\n    function setVValue(val) {\n      var multipliedValue;\n\n      if (this.propType === 'unidimensional') {\n        multipliedValue = val * this.mult;\n\n        if (mathAbs(this.v - multipliedValue) > 0.00001) {\n          this.v = multipliedValue;\n          this._mdf = true;\n        }\n      } else {\n        var i = 0;\n        var len = this.v.length;\n\n        while (i < len) {\n          multipliedValue = val[i] * this.mult;\n\n          if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n            this.v[i] = multipliedValue;\n            this._mdf = true;\n          }\n\n          i += 1;\n        }\n      }\n    }\n\n    function processEffectsSequence() {\n      if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n        return;\n      }\n\n      if (this.lock) {\n        this.setVValue(this.pv);\n        return;\n      }\n\n      this.lock = true;\n      this._mdf = this._isFirstFrame;\n      var i;\n      var len = this.effectsSequence.length;\n      var finalValue = this.kf ? this.pv : this.data.k;\n\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue);\n      }\n\n      this.setVValue(finalValue);\n      this._isFirstFrame = false;\n      this.lock = false;\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function addEffect(effectFunction) {\n      this.effectsSequence.push(effectFunction);\n      this.container.addDynamicProperty(this);\n    }\n\n    function ValueProperty(elem, data, mult, container) {\n      this.propType = 'unidimensional';\n      this.mult = mult || 1;\n      this.data = data;\n      this.v = mult ? data.k * mult : data.k;\n      this.pv = data.k;\n      this._mdf = false;\n      this.elem = elem;\n      this.container = container;\n      this.comp = elem.comp;\n      this.k = false;\n      this.kf = false;\n      this.vel = 0;\n      this.effectsSequence = [];\n      this._isFirstFrame = true;\n      this.getValue = processEffectsSequence;\n      this.setVValue = setVValue;\n      this.addEffect = addEffect;\n    }\n\n    function MultiDimensionalProperty(elem, data, mult, container) {\n      this.propType = 'multidimensional';\n      this.mult = mult || 1;\n      this.data = data;\n      this._mdf = false;\n      this.elem = elem;\n      this.container = container;\n      this.comp = elem.comp;\n      this.k = false;\n      this.kf = false;\n      this.frameId = -1;\n      var i;\n      var len = data.k.length;\n      this.v = createTypedArray('float32', len);\n      this.pv = createTypedArray('float32', len);\n      this.vel = createTypedArray('float32', len);\n\n      for (i = 0; i < len; i += 1) {\n        this.v[i] = data.k[i] * this.mult;\n        this.pv[i] = data.k[i];\n      }\n\n      this._isFirstFrame = true;\n      this.effectsSequence = [];\n      this.getValue = processEffectsSequence;\n      this.setVValue = setVValue;\n      this.addEffect = addEffect;\n    }\n\n    function KeyframedValueProperty(elem, data, mult, container) {\n      this.propType = 'unidimensional';\n      this.keyframes = data.k;\n      this.keyframesMetadata = [];\n      this.offsetTime = elem.data.st;\n      this.frameId = -1;\n      this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0,\n        value: 0,\n        _lastKeyframeIndex: -1\n      };\n      this.k = true;\n      this.kf = true;\n      this.data = data;\n      this.mult = mult || 1;\n      this.elem = elem;\n      this.container = container;\n      this.comp = elem.comp;\n      this.v = initFrame;\n      this.pv = initFrame;\n      this._isFirstFrame = true;\n      this.getValue = processEffectsSequence;\n      this.setVValue = setVValue;\n      this.interpolateValue = interpolateValue;\n      this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n      this.addEffect = addEffect;\n    }\n\n    function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n      this.propType = 'multidimensional';\n      var i;\n      var len = data.k.length;\n      var s;\n      var e;\n      var to;\n      var ti;\n\n      for (i = 0; i < len - 1; i += 1) {\n        if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n          s = data.k[i].s;\n          e = data.k[i + 1].s;\n          to = data.k[i].to;\n          ti = data.k[i].ti;\n\n          if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n            data.k[i].to = null;\n            data.k[i].ti = null;\n          }\n\n          if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n            if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n              data.k[i].to = null;\n              data.k[i].ti = null;\n            }\n          }\n        }\n      }\n\n      this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n      this.data = data;\n      this.keyframes = data.k;\n      this.keyframesMetadata = [];\n      this.offsetTime = elem.data.st;\n      this.k = true;\n      this.kf = true;\n      this._isFirstFrame = true;\n      this.mult = mult || 1;\n      this.elem = elem;\n      this.container = container;\n      this.comp = elem.comp;\n      this.getValue = processEffectsSequence;\n      this.setVValue = setVValue;\n      this.interpolateValue = interpolateValue;\n      this.frameId = -1;\n      var arrLen = data.k[0].s.length;\n      this.v = createTypedArray('float32', arrLen);\n      this.pv = createTypedArray('float32', arrLen);\n\n      for (i = 0; i < arrLen; i += 1) {\n        this.v[i] = initFrame;\n        this.pv[i] = initFrame;\n      }\n\n      this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0,\n        value: createTypedArray('float32', arrLen)\n      };\n      this.addEffect = addEffect;\n    }\n\n    function getProp(elem, data, type, mult, container) {\n      var p;\n\n      if (!data.k.length) {\n        p = new ValueProperty(elem, data, mult, container);\n      } else if (typeof data.k[0] === 'number') {\n        p = new MultiDimensionalProperty(elem, data, mult, container);\n      } else {\n        switch (type) {\n          case 0:\n            p = new KeyframedValueProperty(elem, data, mult, container);\n            break;\n\n          case 1:\n            p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      if (p.effectsSequence.length) {\n        container.addDynamicProperty(p);\n      }\n\n      return p;\n    }\n\n    var ob = {\n      getProp: getProp\n    };\n    return ob;\n  }();\n\n  function DynamicPropertyContainer() {}\n\n  DynamicPropertyContainer.prototype = {\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n        this.container.addDynamicProperty(this);\n        this._isAnimated = true;\n      }\n    },\n    iterateDynamicProperties: function iterateDynamicProperties() {\n      this._mdf = false;\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.dynamicProperties[i].getValue();\n\n        if (this.dynamicProperties[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    },\n    initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n      this.container = container;\n      this.dynamicProperties = [];\n      this._mdf = false;\n      this._isAnimated = false;\n    }\n  };\n\n  var pointPool = function () {\n    function create() {\n      return createTypedArray('float32', 2);\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  function ShapePath() {\n    this.c = false;\n    this._length = 0;\n    this._maxLength = 8;\n    this.v = createSizedArray(this._maxLength);\n    this.o = createSizedArray(this._maxLength);\n    this.i = createSizedArray(this._maxLength);\n  }\n\n  ShapePath.prototype.setPathData = function (closed, len) {\n    this.c = closed;\n    this.setLength(len);\n    var i = 0;\n\n    while (i < len) {\n      this.v[i] = pointPool.newElement();\n      this.o[i] = pointPool.newElement();\n      this.i[i] = pointPool.newElement();\n      i += 1;\n    }\n  };\n\n  ShapePath.prototype.setLength = function (len) {\n    while (this._maxLength < len) {\n      this.doubleArrayLength();\n    }\n\n    this._length = len;\n  };\n\n  ShapePath.prototype.doubleArrayLength = function () {\n    this.v = this.v.concat(createSizedArray(this._maxLength));\n    this.i = this.i.concat(createSizedArray(this._maxLength));\n    this.o = this.o.concat(createSizedArray(this._maxLength));\n    this._maxLength *= 2;\n  };\n\n  ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n    var arr;\n    this._length = Math.max(this._length, pos + 1);\n\n    if (this._length >= this._maxLength) {\n      this.doubleArrayLength();\n    }\n\n    switch (type) {\n      case 'v':\n        arr = this.v;\n        break;\n\n      case 'i':\n        arr = this.i;\n        break;\n\n      case 'o':\n        arr = this.o;\n        break;\n\n      default:\n        arr = [];\n        break;\n    }\n\n    if (!arr[pos] || arr[pos] && !replace) {\n      arr[pos] = pointPool.newElement();\n    }\n\n    arr[pos][0] = x;\n    arr[pos][1] = y;\n  };\n\n  ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n    this.setXYAt(vX, vY, 'v', pos, replace);\n    this.setXYAt(oX, oY, 'o', pos, replace);\n    this.setXYAt(iX, iY, 'i', pos, replace);\n  };\n\n  ShapePath.prototype.reverse = function () {\n    var newPath = new ShapePath();\n    newPath.setPathData(this.c, this._length);\n    var vertices = this.v;\n    var outPoints = this.o;\n    var inPoints = this.i;\n    var init = 0;\n\n    if (this.c) {\n      newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n      init = 1;\n    }\n\n    var cnt = this._length - 1;\n    var len = this._length;\n    var i;\n\n    for (i = init; i < len; i += 1) {\n      newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n      cnt -= 1;\n    }\n\n    return newPath;\n  };\n\n  var shapePool = function () {\n    function create() {\n      return new ShapePath();\n    }\n\n    function release(shapePath) {\n      var len = shapePath._length;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        pointPool.release(shapePath.v[i]);\n        pointPool.release(shapePath.i[i]);\n        pointPool.release(shapePath.o[i]);\n        shapePath.v[i] = null;\n        shapePath.i[i] = null;\n        shapePath.o[i] = null;\n      }\n\n      shapePath._length = 0;\n      shapePath.c = false;\n    }\n\n    function clone(shape) {\n      var cloned = factory.newElement();\n      var i;\n      var len = shape._length === undefined ? shape.v.length : shape._length;\n      cloned.setLength(len);\n      cloned.c = shape.c;\n\n      for (i = 0; i < len; i += 1) {\n        cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n      }\n\n      return cloned;\n    }\n\n    var factory = poolFactory(4, create, release);\n    factory.clone = clone;\n    return factory;\n  }();\n\n  function ShapeCollection() {\n    this._length = 0;\n    this._maxLength = 4;\n    this.shapes = createSizedArray(this._maxLength);\n  }\n\n  ShapeCollection.prototype.addShape = function (shapeData) {\n    if (this._length === this._maxLength) {\n      this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n      this._maxLength *= 2;\n    }\n\n    this.shapes[this._length] = shapeData;\n    this._length += 1;\n  };\n\n  ShapeCollection.prototype.releaseShapes = function () {\n    var i;\n\n    for (i = 0; i < this._length; i += 1) {\n      shapePool.release(this.shapes[i]);\n    }\n\n    this._length = 0;\n  };\n\n  var shapeCollectionPool = function () {\n    var ob = {\n      newShapeCollection: newShapeCollection,\n      release: release\n    };\n    var _length = 0;\n    var _maxLength = 4;\n    var pool = createSizedArray(_maxLength);\n\n    function newShapeCollection() {\n      var shapeCollection;\n\n      if (_length) {\n        _length -= 1;\n        shapeCollection = pool[_length];\n      } else {\n        shapeCollection = new ShapeCollection();\n      }\n\n      return shapeCollection;\n    }\n\n    function release(shapeCollection) {\n      var i;\n      var len = shapeCollection._length;\n\n      for (i = 0; i < len; i += 1) {\n        shapePool.release(shapeCollection.shapes[i]);\n      }\n\n      shapeCollection._length = 0;\n\n      if (_length === _maxLength) {\n        pool = pooling[\"double\"](pool);\n        _maxLength *= 2;\n      }\n\n      pool[_length] = shapeCollection;\n      _length += 1;\n    }\n\n    return ob;\n  }();\n\n  var ShapePropertyFactory = function () {\n    var initFrame = -999999;\n\n    function interpolateShape(frameNum, previousValue, caching) {\n      var iterationIndex = caching.lastIndex;\n      var keyPropS;\n      var keyPropE;\n      var isHold;\n      var j;\n      var k;\n      var jLen;\n      var kLen;\n      var perc;\n      var vertexValue;\n      var kf = this.keyframes;\n\n      if (frameNum < kf[0].t - this.offsetTime) {\n        keyPropS = kf[0].s[0];\n        isHold = true;\n        iterationIndex = 0;\n      } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n        keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n        /* if(kf[kf.length - 1].s){\r\n                  keyPropS = kf[kf.length - 1].s[0];\r\n              }else{\r\n                  keyPropS = kf[kf.length - 2].e[0];\r\n              } */\n\n        isHold = true;\n      } else {\n        var i = iterationIndex;\n        var len = kf.length - 1;\n        var flag = true;\n        var keyData;\n        var nextKeyData;\n        var keyframeMetadata;\n\n        while (flag) {\n          keyData = kf[i];\n          nextKeyData = kf[i + 1];\n\n          if (nextKeyData.t - this.offsetTime > frameNum) {\n            break;\n          }\n\n          if (i < len - 1) {\n            i += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        keyframeMetadata = this.keyframesMetadata[i] || {};\n        isHold = keyData.h === 1;\n        iterationIndex = i;\n\n        if (!isHold) {\n          if (frameNum >= nextKeyData.t - this.offsetTime) {\n            perc = 1;\n          } else if (frameNum < keyData.t - this.offsetTime) {\n            perc = 0;\n          } else {\n            var fnc;\n\n            if (keyframeMetadata.__fnct) {\n              fnc = keyframeMetadata.__fnct;\n            } else {\n              fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n              keyframeMetadata.__fnct = fnc;\n            }\n\n            perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n          }\n\n          keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n        }\n\n        keyPropS = keyData.s[0];\n      }\n\n      jLen = previousValue._length;\n      kLen = keyPropS.i[0].length;\n      caching.lastIndex = iterationIndex;\n\n      for (j = 0; j < jLen; j += 1) {\n        for (k = 0; k < kLen; k += 1) {\n          vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n          previousValue.i[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n          previousValue.o[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n          previousValue.v[j][k] = vertexValue;\n        }\n      }\n    }\n\n    function interpolateShapeCurrentTime() {\n      var frameNum = this.comp.renderedFrame - this.offsetTime;\n      var initTime = this.keyframes[0].t - this.offsetTime;\n      var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n      var lastFrame = this._caching.lastFrame;\n\n      if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n        /// /\n        this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n        this.interpolateShape(frameNum, this.pv, this._caching); /// /\n      }\n\n      this._caching.lastFrame = frameNum;\n      return this.pv;\n    }\n\n    function resetShape() {\n      this.paths = this.localShapeCollection;\n    }\n\n    function shapesEqual(shape1, shape2) {\n      if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n        return false;\n      }\n\n      var i;\n      var len = shape1._length;\n\n      for (i = 0; i < len; i += 1) {\n        if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    function setVValue(newPath) {\n      if (!shapesEqual(this.v, newPath)) {\n        this.v = shapePool.clone(newPath);\n        this.localShapeCollection.releaseShapes();\n        this.localShapeCollection.addShape(this.v);\n        this._mdf = true;\n        this.paths = this.localShapeCollection;\n      }\n    }\n\n    function processEffectsSequence() {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (!this.effectsSequence.length) {\n        this._mdf = false;\n        return;\n      }\n\n      if (this.lock) {\n        this.setVValue(this.pv);\n        return;\n      }\n\n      this.lock = true;\n      this._mdf = false;\n      var finalValue;\n\n      if (this.kf) {\n        finalValue = this.pv;\n      } else if (this.data.ks) {\n        finalValue = this.data.ks.k;\n      } else {\n        finalValue = this.data.pt.k;\n      }\n\n      var i;\n      var len = this.effectsSequence.length;\n\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue);\n      }\n\n      this.setVValue(finalValue);\n      this.lock = false;\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function ShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.container = elem;\n      this.elem = elem;\n      this.data = data;\n      this.k = false;\n      this.kf = false;\n      this._mdf = false;\n      var pathData = type === 3 ? data.pt.k : data.ks.k;\n      this.v = shapePool.clone(pathData);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.reset = resetShape;\n      this.effectsSequence = [];\n    }\n\n    function addEffect(effectFunction) {\n      this.effectsSequence.push(effectFunction);\n      this.container.addDynamicProperty(this);\n    }\n\n    ShapeProperty.prototype.interpolateShape = interpolateShape;\n    ShapeProperty.prototype.getValue = processEffectsSequence;\n    ShapeProperty.prototype.setVValue = setVValue;\n    ShapeProperty.prototype.addEffect = addEffect;\n\n    function KeyframedShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.elem = elem;\n      this.container = elem;\n      this.offsetTime = elem.data.st;\n      this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n      this.keyframesMetadata = [];\n      this.k = true;\n      this.kf = true;\n      var len = this.keyframes[0].s[0].i.length;\n      this.v = shapePool.newElement();\n      this.v.setPathData(this.keyframes[0].s[0].c, len);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.lastFrame = initFrame;\n      this.reset = resetShape;\n      this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0\n      };\n      this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n    }\n\n    KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n    KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n    KeyframedShapeProperty.prototype.setVValue = setVValue;\n    KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n    var EllShapeProperty = function () {\n      var cPoint = roundCorner;\n\n      function EllShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 4);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.paths = this.localShapeCollection;\n        this.localShapeCollection.addShape(this.v);\n        this.d = data.d;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertEllToPath();\n        }\n      }\n\n      EllShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertEllToPath();\n          }\n        },\n        convertEllToPath: function convertEllToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var s0 = this.s.v[0] / 2;\n          var s1 = this.s.v[1] / 2;\n\n          var _cw = this.d !== 3;\n\n          var _v = this.v;\n          _v.v[0][0] = p0;\n          _v.v[0][1] = p1 - s1;\n          _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.v[1][1] = p1;\n          _v.v[2][0] = p0;\n          _v.v[2][1] = p1 + s1;\n          _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.v[3][1] = p1;\n          _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.i[0][1] = p1 - s1;\n          _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.i[1][1] = p1 - s1 * cPoint;\n          _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.i[2][1] = p1 + s1;\n          _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.i[3][1] = p1 + s1 * cPoint;\n          _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.o[0][1] = p1 - s1;\n          _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.o[1][1] = p1 + s1 * cPoint;\n          _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.o[2][1] = p1 + s1;\n          _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.o[3][1] = p1 - s1 * cPoint;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n      return EllShapePropertyFactory;\n    }();\n\n    var StarShapeProperty = function () {\n      function StarShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 0);\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.data = data;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n\n        if (data.sy === 1) {\n          this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n          this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n          this.convertToPath = this.convertStarToPath;\n        } else {\n          this.convertToPath = this.convertPolygonToPath;\n        }\n\n        this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n        this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n        this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertToPath();\n        }\n      }\n\n      StarShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertToPath();\n          }\n        },\n        convertStarToPath: function convertStarToPath() {\n          var numPts = Math.floor(this.pt.v) * 2;\n          var angle = Math.PI * 2 / numPts;\n          /* this.v.v.length = numPts;\r\n                  this.v.i.length = numPts;\r\n                  this.v.o.length = numPts; */\n\n          var longFlag = true;\n          var longRad = this.or.v;\n          var shortRad = this.ir.v;\n          var longRound = this.os.v;\n          var shortRound = this.is.v;\n          var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n          var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n          var i;\n          var rad;\n          var roundness;\n          var perimSegment;\n          var currentAng = -Math.PI / 2;\n          currentAng += this.r.v;\n          var dir = this.data.d === 3 ? -1 : 1;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            rad = longFlag ? longRad : shortRad;\n            roundness = longFlag ? longRound : shortRound;\n            perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            /* this.v.v[i] = [x,y];\r\n                      this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n                      this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n                      this.v._length = numPts; */\n\n            longFlag = !longFlag;\n            currentAng += angle * dir;\n          }\n        },\n        convertPolygonToPath: function convertPolygonToPath() {\n          var numPts = Math.floor(this.pt.v);\n          var angle = Math.PI * 2 / numPts;\n          var rad = this.or.v;\n          var roundness = this.os.v;\n          var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n          var i;\n          var currentAng = -Math.PI * 0.5;\n          var dir = this.data.d === 3 ? -1 : 1;\n          currentAng += this.r.v;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            currentAng += angle * dir;\n          }\n\n          this.paths.length = 0;\n          this.paths[0] = this.v;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n      return StarShapePropertyFactory;\n    }();\n\n    var RectShapeProperty = function () {\n      function RectShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.c = true;\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertRectToPath();\n        }\n      }\n\n      RectShapePropertyFactory.prototype = {\n        convertRectToPath: function convertRectToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var v0 = this.s.v[0] / 2;\n          var v1 = this.s.v[1] / 2;\n          var round = bmMin(v0, v1, this.r.v);\n          var cPoint = round * (1 - roundCorner);\n          this.v._length = 0;\n\n          if (this.d === 2 || this.d === 1) {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n            this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n            }\n          } else {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n            }\n          }\n        },\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertRectToPath();\n          }\n        },\n        reset: resetShape\n      };\n      extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n      return RectShapePropertyFactory;\n    }();\n\n    function getShapeProp(elem, data, type) {\n      var prop;\n\n      if (type === 3 || type === 4) {\n        var dataProp = type === 3 ? data.pt : data.ks;\n        var keys = dataProp.k;\n\n        if (keys.length) {\n          prop = new KeyframedShapeProperty(elem, data, type);\n        } else {\n          prop = new ShapeProperty(elem, data, type);\n        }\n      } else if (type === 5) {\n        prop = new RectShapeProperty(elem, data);\n      } else if (type === 6) {\n        prop = new EllShapeProperty(elem, data);\n      } else if (type === 7) {\n        prop = new StarShapeProperty(elem, data);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    }\n\n    function getConstructorFunction() {\n      return ShapeProperty;\n    }\n\n    function getKeyframedConstructorFunction() {\n      return KeyframedShapeProperty;\n    }\n\n    var ob = {};\n    ob.getShapeProp = getShapeProp;\n    ob.getConstructorFunction = getConstructorFunction;\n    ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n    return ob;\n  }();\n\n  /*!\r\n   Transformation Matrix v2.0\r\n   (c) Epistemex 2014-2015\r\n   www.epistemex.com\r\n   By Ken Fyrstenberg\r\n   Contributions by leeoniya.\r\n   License: MIT, header required.\r\n   */\n\n  /**\r\n   * 2D transformation matrix object initialized with identity matrix.\r\n   *\r\n   * The matrix can synchronize a canvas context by supplying the context\r\n   * as an argument, or later apply current absolute transform to an\r\n   * existing context.\r\n   *\r\n   * All values are handled as floating point values.\r\n   *\r\n   * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n   * @prop {number} a - scale x\r\n   * @prop {number} b - shear y\r\n   * @prop {number} c - shear x\r\n   * @prop {number} d - scale y\r\n   * @prop {number} e - translate x\r\n   * @prop {number} f - translate y\r\n   * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n   * @constructor\r\n   */\n\n  var Matrix = function () {\n    var _cos = Math.cos;\n    var _sin = Math.sin;\n    var _tan = Math.tan;\n    var _rnd = Math.round;\n\n    function reset() {\n      this.props[0] = 1;\n      this.props[1] = 0;\n      this.props[2] = 0;\n      this.props[3] = 0;\n      this.props[4] = 0;\n      this.props[5] = 1;\n      this.props[6] = 0;\n      this.props[7] = 0;\n      this.props[8] = 0;\n      this.props[9] = 0;\n      this.props[10] = 1;\n      this.props[11] = 0;\n      this.props[12] = 0;\n      this.props[13] = 0;\n      this.props[14] = 0;\n      this.props[15] = 1;\n      return this;\n    }\n\n    function rotate(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function rotateX(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateY(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateZ(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function shear(sx, sy) {\n      return this._t(1, sy, sx, 1, 0, 0);\n    }\n\n    function skew(ax, ay) {\n      return this.shear(_tan(ax), _tan(ay));\n    }\n\n    function skewFromAxis(ax, angle) {\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n    }\n\n    function scale(sx, sy, sz) {\n      if (!sz && sz !== 0) {\n        sz = 1;\n      }\n\n      if (sx === 1 && sy === 1 && sz === 1) {\n        return this;\n      }\n\n      return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n    }\n\n    function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n      this.props[0] = a;\n      this.props[1] = b;\n      this.props[2] = c;\n      this.props[3] = d;\n      this.props[4] = e;\n      this.props[5] = f;\n      this.props[6] = g;\n      this.props[7] = h;\n      this.props[8] = i;\n      this.props[9] = j;\n      this.props[10] = k;\n      this.props[11] = l;\n      this.props[12] = m;\n      this.props[13] = n;\n      this.props[14] = o;\n      this.props[15] = p;\n      return this;\n    }\n\n    function translate(tx, ty, tz) {\n      tz = tz || 0;\n\n      if (tx !== 0 || ty !== 0 || tz !== 0) {\n        return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n      }\n\n      return this;\n    }\n\n    function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n      var _p = this.props;\n\n      if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n        // NOTE: commenting this condition because TurboFan deoptimizes code when present\n        // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n        _p[12] = _p[12] * a2 + _p[15] * m2;\n        _p[13] = _p[13] * f2 + _p[15] * n2;\n        _p[14] = _p[14] * k2 + _p[15] * o2;\n        _p[15] *= p2; // }\n\n        this._identityCalculated = false;\n        return this;\n      }\n\n      var a1 = _p[0];\n      var b1 = _p[1];\n      var c1 = _p[2];\n      var d1 = _p[3];\n      var e1 = _p[4];\n      var f1 = _p[5];\n      var g1 = _p[6];\n      var h1 = _p[7];\n      var i1 = _p[8];\n      var j1 = _p[9];\n      var k1 = _p[10];\n      var l1 = _p[11];\n      var m1 = _p[12];\n      var n1 = _p[13];\n      var o1 = _p[14];\n      var p1 = _p[15];\n      /* matrix order (canvas compatible):\r\n           * ace\r\n           * bdf\r\n           * 001\r\n           */\n\n      _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n      _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n      _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n      _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n      _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n      _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n      _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n      _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n      _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n      _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n      _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n      _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n      _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n      _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n      _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n      _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n      this._identityCalculated = false;\n      return this;\n    }\n\n    function isIdentity() {\n      if (!this._identityCalculated) {\n        this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n        this._identityCalculated = true;\n      }\n\n      return this._identity;\n    }\n\n    function equals(matr) {\n      var i = 0;\n\n      while (i < 16) {\n        if (matr.props[i] !== this.props[i]) {\n          return false;\n        }\n\n        i += 1;\n      }\n\n      return true;\n    }\n\n    function clone(matr) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        matr.props[i] = this.props[i];\n      }\n\n      return matr;\n    }\n\n    function cloneFromProps(props) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        this.props[i] = props[i];\n      }\n    }\n\n    function applyToPoint(x, y, z) {\n      return {\n        x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n        y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n        z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n      };\n      /* return {\r\n           x: x * me.a + y * me.c + me.e,\r\n           y: x * me.b + y * me.d + me.f\r\n           }; */\n    }\n\n    function applyToX(x, y, z) {\n      return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n    }\n\n    function applyToY(x, y, z) {\n      return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n    }\n\n    function applyToZ(x, y, z) {\n      return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n    }\n\n    function getInverseMatrix() {\n      var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n      var a = this.props[5] / determinant;\n      var b = -this.props[1] / determinant;\n      var c = -this.props[4] / determinant;\n      var d = this.props[0] / determinant;\n      var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n      var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n      var inverseMatrix = new Matrix();\n      inverseMatrix.props[0] = a;\n      inverseMatrix.props[1] = b;\n      inverseMatrix.props[4] = c;\n      inverseMatrix.props[5] = d;\n      inverseMatrix.props[12] = e;\n      inverseMatrix.props[13] = f;\n      return inverseMatrix;\n    }\n\n    function inversePoint(pt) {\n      var inverseMatrix = this.getInverseMatrix();\n      return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n    }\n\n    function inversePoints(pts) {\n      var i;\n      var len = pts.length;\n      var retPts = [];\n\n      for (i = 0; i < len; i += 1) {\n        retPts[i] = inversePoint(pts[i]);\n      }\n\n      return retPts;\n    }\n\n    function applyToTriplePoints(pt1, pt2, pt3) {\n      var arr = createTypedArray('float32', 6);\n\n      if (this.isIdentity()) {\n        arr[0] = pt1[0];\n        arr[1] = pt1[1];\n        arr[2] = pt2[0];\n        arr[3] = pt2[1];\n        arr[4] = pt3[0];\n        arr[5] = pt3[1];\n      } else {\n        var p0 = this.props[0];\n        var p1 = this.props[1];\n        var p4 = this.props[4];\n        var p5 = this.props[5];\n        var p12 = this.props[12];\n        var p13 = this.props[13];\n        arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n        arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n        arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n        arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n        arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n        arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n      }\n\n      return arr;\n    }\n\n    function applyToPointArray(x, y, z) {\n      var arr;\n\n      if (this.isIdentity()) {\n        arr = [x, y, z];\n      } else {\n        arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n      }\n\n      return arr;\n    }\n\n    function applyToPointStringified(x, y) {\n      if (this.isIdentity()) {\n        return x + ',' + y;\n      }\n\n      var _p = this.props;\n      return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n    }\n\n    function toCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var i = 0;\n      var props = this.props;\n      var cssValue = 'matrix3d(';\n      var v = 10000;\n\n      while (i < 16) {\n        cssValue += _rnd(props[i] * v) / v;\n        cssValue += i === 15 ? ')' : ',';\n        i += 1;\n      }\n\n      return cssValue;\n    }\n\n    function roundMatrixProperty(val) {\n      var v = 10000;\n\n      if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n        return _rnd(val * v) / v;\n      }\n\n      return val;\n    }\n\n    function to2dCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var props = this.props;\n\n      var _a = roundMatrixProperty(props[0]);\n\n      var _b = roundMatrixProperty(props[1]);\n\n      var _c = roundMatrixProperty(props[4]);\n\n      var _d = roundMatrixProperty(props[5]);\n\n      var _e = roundMatrixProperty(props[12]);\n\n      var _f = roundMatrixProperty(props[13]);\n\n      return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n    }\n\n    return function () {\n      this.reset = reset;\n      this.rotate = rotate;\n      this.rotateX = rotateX;\n      this.rotateY = rotateY;\n      this.rotateZ = rotateZ;\n      this.skew = skew;\n      this.skewFromAxis = skewFromAxis;\n      this.shear = shear;\n      this.scale = scale;\n      this.setTransform = setTransform;\n      this.translate = translate;\n      this.transform = transform;\n      this.applyToPoint = applyToPoint;\n      this.applyToX = applyToX;\n      this.applyToY = applyToY;\n      this.applyToZ = applyToZ;\n      this.applyToPointArray = applyToPointArray;\n      this.applyToTriplePoints = applyToTriplePoints;\n      this.applyToPointStringified = applyToPointStringified;\n      this.toCSS = toCSS;\n      this.to2dCSS = to2dCSS;\n      this.clone = clone;\n      this.cloneFromProps = cloneFromProps;\n      this.equals = equals;\n      this.inversePoints = inversePoints;\n      this.inversePoint = inversePoint;\n      this.getInverseMatrix = getInverseMatrix;\n      this._t = this.transform;\n      this.isIdentity = isIdentity;\n      this._identity = true;\n      this._identityCalculated = false;\n      this.props = createTypedArray('float32', 16);\n      this.reset();\n    };\n  }();\n\n  function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n  var lottie = {};\n  var standalone = '__[STANDALONE]__';\n  var animationData = '__[ANIMATIONDATA]__';\n  var renderer = '';\n\n  function setLocation(href) {\n    setLocationHref(href);\n  }\n\n  function searchAnimations() {\n    if (standalone === true) {\n      animationManager.searchAnimations(animationData, standalone, renderer);\n    } else {\n      animationManager.searchAnimations();\n    }\n  }\n\n  function setSubframeRendering(flag) {\n    setSubframeEnabled(flag);\n  }\n\n  function setPrefix(prefix) {\n    setIdPrefix(prefix);\n  }\n\n  function loadAnimation(params) {\n    if (standalone === true) {\n      params.animationData = JSON.parse(animationData);\n    }\n\n    return animationManager.loadAnimation(params);\n  }\n\n  function setQuality(value) {\n    if (typeof value === 'string') {\n      switch (value) {\n        case 'high':\n          setDefaultCurveSegments(200);\n          break;\n\n        default:\n        case 'medium':\n          setDefaultCurveSegments(50);\n          break;\n\n        case 'low':\n          setDefaultCurveSegments(10);\n          break;\n      }\n    } else if (!isNaN(value) && value > 1) {\n      setDefaultCurveSegments(value);\n    }\n\n    if (getDefaultCurveSegments() >= 50) {\n      roundValues(false);\n    } else {\n      roundValues(true);\n    }\n  }\n\n  function inBrowser() {\n    return typeof navigator !== 'undefined';\n  }\n\n  function installPlugin(type, plugin) {\n    if (type === 'expressions') {\n      setExpressionsPlugin(plugin);\n    }\n  }\n\n  function getFactory(name) {\n    switch (name) {\n      case 'propertyFactory':\n        return PropertyFactory;\n\n      case 'shapePropertyFactory':\n        return ShapePropertyFactory;\n\n      case 'matrix':\n        return Matrix;\n\n      default:\n        return null;\n    }\n  }\n\n  lottie.play = animationManager.play;\n  lottie.pause = animationManager.pause;\n  lottie.setLocationHref = setLocation;\n  lottie.togglePause = animationManager.togglePause;\n  lottie.setSpeed = animationManager.setSpeed;\n  lottie.setDirection = animationManager.setDirection;\n  lottie.stop = animationManager.stop;\n  lottie.searchAnimations = searchAnimations;\n  lottie.registerAnimation = animationManager.registerAnimation;\n  lottie.loadAnimation = loadAnimation;\n  lottie.setSubframeRendering = setSubframeRendering;\n  lottie.resize = animationManager.resize; // lottie.start = start;\n\n  lottie.goToAndStop = animationManager.goToAndStop;\n  lottie.destroy = animationManager.destroy;\n  lottie.setQuality = setQuality;\n  lottie.inBrowser = inBrowser;\n  lottie.installPlugin = installPlugin;\n  lottie.freeze = animationManager.freeze;\n  lottie.unfreeze = animationManager.unfreeze;\n  lottie.setVolume = animationManager.setVolume;\n  lottie.mute = animationManager.mute;\n  lottie.unmute = animationManager.unmute;\n  lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n  lottie.useWebWorker = setWebWorker;\n  lottie.setIDPrefix = setPrefix;\n  lottie.__getFactory = getFactory;\n  lottie.version = '5.9.6';\n\n  function checkReady() {\n    if (document.readyState === 'complete') {\n      clearInterval(readyStateCheckInterval);\n      searchAnimations();\n    }\n  }\n\n  function getQueryVariable(variable) {\n    var vars = queryString.split('&');\n\n    for (var i = 0; i < vars.length; i += 1) {\n      var pair = vars[i].split('=');\n\n      if (decodeURIComponent(pair[0]) == variable) {\n        // eslint-disable-line eqeqeq\n        return decodeURIComponent(pair[1]);\n      }\n    }\n\n    return null;\n  }\n\n  var queryString = '';\n\n  if (standalone) {\n    var scripts = document.getElementsByTagName('script');\n    var index = scripts.length - 1;\n    var myScript = scripts[index] || {\n      src: ''\n    };\n    queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n    renderer = getQueryVariable('renderer');\n  }\n\n  var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n  try {\n    if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n    ) {\n      window.bodymovin = lottie;\n    }\n  } catch (err) {//\n  }\n\n  var ShapeModifiers = function () {\n    var ob = {};\n    var modifiers = {};\n    ob.registerModifier = registerModifier;\n    ob.getModifier = getModifier;\n\n    function registerModifier(nm, factory) {\n      if (!modifiers[nm]) {\n        modifiers[nm] = factory;\n      }\n    }\n\n    function getModifier(nm, elem, data) {\n      return new modifiers[nm](elem, data);\n    }\n\n    return ob;\n  }();\n\n  function ShapeModifier() {}\n\n  ShapeModifier.prototype.initModifierProperties = function () {};\n\n  ShapeModifier.prototype.addShapeToModifier = function () {};\n\n  ShapeModifier.prototype.addShape = function (data) {\n    if (!this.closed) {\n      // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n      data.sh.container.addDynamicProperty(data.sh);\n      var shapeData = {\n        shape: data.sh,\n        data: data,\n        localShapeCollection: shapeCollectionPool.newShapeCollection()\n      };\n      this.shapes.push(shapeData);\n      this.addShapeToModifier(shapeData);\n\n      if (this._isAnimated) {\n        data.setAsAnimated();\n      }\n    }\n  };\n\n  ShapeModifier.prototype.init = function (elem, data) {\n    this.shapes = [];\n    this.elem = elem;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, data);\n    this.frameId = initialDefaultFrame;\n    this.closed = false;\n    this.k = false;\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  ShapeModifier.prototype.processKeys = function () {\n    if (this.elem.globalData.frameId === this.frameId) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n  function TrimModifier() {}\n\n  extendPrototype([ShapeModifier], TrimModifier);\n\n  TrimModifier.prototype.initModifierProperties = function (elem, data) {\n    this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n    this.sValue = 0;\n    this.eValue = 0;\n    this.getValue = this.processKeys;\n    this.m = data.m;\n    this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n  };\n\n  TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n    shapeData.pathsData = [];\n  };\n\n  TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n    var segments = [];\n\n    if (e <= 1) {\n      segments.push({\n        s: s,\n        e: e\n      });\n    } else if (s >= 1) {\n      segments.push({\n        s: s - 1,\n        e: e - 1\n      });\n    } else {\n      segments.push({\n        s: s,\n        e: 1\n      });\n      segments.push({\n        s: 0,\n        e: e - 1\n      });\n    }\n\n    var shapeSegments = [];\n    var i;\n    var len = segments.length;\n    var segmentOb;\n\n    for (i = 0; i < len; i += 1) {\n      segmentOb = segments[i];\n\n      if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n        var shapeS;\n        var shapeE;\n\n        if (segmentOb.s * totalModifierLength <= addedLength) {\n          shapeS = 0;\n        } else {\n          shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n          shapeE = 1;\n        } else {\n          shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        shapeSegments.push([shapeS, shapeE]);\n      }\n    }\n\n    if (!shapeSegments.length) {\n      shapeSegments.push([0, 0]);\n    }\n\n    return shapeSegments;\n  };\n\n  TrimModifier.prototype.releasePathsData = function (pathsData) {\n    var i;\n    var len = pathsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      segmentsLengthPool.release(pathsData[i]);\n    }\n\n    pathsData.length = 0;\n    return pathsData;\n  };\n\n  TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n    var s;\n    var e;\n\n    if (this._mdf || _isFirstFrame) {\n      var o = this.o.v % 360 / 360;\n\n      if (o < 0) {\n        o += 1;\n      }\n\n      if (this.s.v > 1) {\n        s = 1 + o;\n      } else if (this.s.v < 0) {\n        s = 0 + o;\n      } else {\n        s = this.s.v + o;\n      }\n\n      if (this.e.v > 1) {\n        e = 1 + o;\n      } else if (this.e.v < 0) {\n        e = 0 + o;\n      } else {\n        e = this.e.v + o;\n      }\n\n      if (s > e) {\n        var _s = s;\n        s = e;\n        e = _s;\n      }\n\n      s = Math.round(s * 10000) * 0.0001;\n      e = Math.round(e * 10000) * 0.0001;\n      this.sValue = s;\n      this.eValue = e;\n    } else {\n      s = this.sValue;\n      e = this.eValue;\n    }\n\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var pathsData;\n    var pathData;\n    var totalShapeLength;\n    var totalModifierLength = 0;\n\n    if (e === s) {\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].localShapeCollection.releaseShapes();\n        this.shapes[i].shape._mdf = true;\n        this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n        if (this._mdf) {\n          this.shapes[i].pathsData.length = 0;\n        }\n      }\n    } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n      var segments = [];\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n        if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n          shapeData.shape.paths = shapeData.localShapeCollection;\n        } else {\n          shapePaths = shapeData.shape.paths;\n          jLen = shapePaths._length;\n          totalShapeLength = 0;\n\n          if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n            totalShapeLength = shapeData.totalShapeLength;\n          } else {\n            pathsData = this.releasePathsData(shapeData.pathsData);\n\n            for (j = 0; j < jLen; j += 1) {\n              pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n              pathsData.push(pathData);\n              totalShapeLength += pathData.totalLength;\n            }\n\n            shapeData.totalShapeLength = totalShapeLength;\n            shapeData.pathsData = pathsData;\n          }\n\n          totalModifierLength += totalShapeLength;\n          shapeData.shape._mdf = true;\n        }\n      }\n\n      var shapeS = s;\n      var shapeE = e;\n      var addedLength = 0;\n      var edges;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shapeData = this.shapes[i];\n\n        if (shapeData.shape._mdf) {\n          localShapeCollection = shapeData.localShapeCollection;\n          localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n          if (this.m === 2 && len > 1) {\n            edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n            addedLength += shapeData.totalShapeLength;\n          } else {\n            edges = [[shapeS, shapeE]];\n          }\n\n          jLen = edges.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            shapeS = edges[j][0];\n            shapeE = edges[j][1];\n            segments.length = 0;\n\n            if (shapeE <= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength * shapeE\n              });\n            } else if (shapeS >= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * (shapeS - 1),\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            } else {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength\n              });\n              segments.push({\n                s: 0,\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            }\n\n            var newShapesData = this.addShapes(shapeData, segments[0]);\n\n            if (segments[0].s !== segments[0].e) {\n              if (segments.length > 1) {\n                var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n                if (lastShapeInCollection.c) {\n                  var lastShape = newShapesData.pop();\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n                } else {\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1]);\n                }\n              }\n\n              this.addPaths(newShapesData, localShapeCollection);\n            }\n          }\n\n          shapeData.shape.paths = localShapeCollection;\n        }\n      }\n    } else if (this._mdf) {\n      for (i = 0; i < len; i += 1) {\n        // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n        // Don't remove this even if it's losing cached info.\n        this.shapes[i].pathsData.length = 0;\n        this.shapes[i].shape._mdf = true;\n      }\n    }\n  };\n\n  TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n    var i;\n    var len = newPaths.length;\n\n    for (i = 0; i < len; i += 1) {\n      localShapeCollection.addShape(newPaths[i]);\n    }\n  };\n\n  TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n    shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n    shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n    }\n\n    shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n    shapePath.setXYAt(points[1], points[5], 'o', pos);\n    shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(points[0], points[4], 'v', pos);\n    }\n\n    shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n    var pathsData = shapeData.pathsData;\n    var shapePaths = shapeData.shape.paths.shapes;\n    var i;\n    var len = shapeData.shape.paths._length;\n    var j;\n    var jLen;\n    var addedLength = 0;\n    var currentLengthData;\n    var segmentCount;\n    var lengths;\n    var segment;\n    var shapes = [];\n    var initPos;\n    var newShape = true;\n\n    if (!shapePath) {\n      shapePath = shapePool.newElement();\n      segmentCount = 0;\n      initPos = 0;\n    } else {\n      segmentCount = shapePath._length;\n      initPos = shapePath._length;\n    }\n\n    shapes.push(shapePath);\n\n    for (i = 0; i < len; i += 1) {\n      lengths = pathsData[i].lengths;\n      shapePath.c = shapePaths[i].c;\n      jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n      for (j = 1; j < jLen; j += 1) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n          addedLength += currentLengthData.addedLength;\n          shapePath.c = false;\n        } else if (addedLength > shapeSegment.e) {\n          shapePath.c = false;\n          break;\n        } else {\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n\n          addedLength += currentLengthData.addedLength;\n          segmentCount += 1;\n        }\n      }\n\n      if (shapePaths[i].c && lengths.length) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength <= shapeSegment.e) {\n          var segmentLength = lengths[j - 1].addedLength;\n\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n        } else {\n          shapePath.c = false;\n        }\n\n        addedLength += currentLengthData.addedLength;\n        segmentCount += 1;\n      }\n\n      if (shapePath._length) {\n        shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n        shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n      }\n\n      if (addedLength > shapeSegment.e) {\n        break;\n      }\n\n      if (i < len - 1) {\n        shapePath = shapePool.newElement();\n        newShape = true;\n        shapes.push(shapePath);\n        segmentCount = 0;\n      }\n    }\n\n    return shapes;\n  };\n\n  function PuckerAndBloatModifier() {}\n\n  extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n  PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this._isAnimated = !!this.amount.effectsSequence.length;\n  };\n\n  PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n    var percent = amount / 100;\n    var centerPoint = [0, 0];\n    var pathLength = path._length;\n    var i = 0;\n\n    for (i = 0; i < pathLength; i += 1) {\n      centerPoint[0] += path.v[i][0];\n      centerPoint[1] += path.v[i][1];\n    }\n\n    centerPoint[0] /= pathLength;\n    centerPoint[1] /= pathLength;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < pathLength; i += 1) {\n      vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n      vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n      oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n      oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n      iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n      iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n      clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n    }\n\n    return clonedPath;\n  };\n\n  PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  var TransformPropertyFactory = function () {\n    var defaultVector = [0, 0];\n\n    function applyToMatrix(mat) {\n      var _mdf = this._mdf;\n      this.iterateDynamicProperties();\n      this._mdf = this._mdf || _mdf;\n\n      if (this.a) {\n        mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n      }\n\n      if (this.s) {\n        mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n      }\n\n      if (this.sk) {\n        mat.skewFromAxis(-this.sk.v, this.sa.v);\n      }\n\n      if (this.r) {\n        mat.rotate(-this.r.v);\n      } else {\n        mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n      }\n\n      if (this.data.p.s) {\n        if (this.data.p.z) {\n          mat.translate(this.px.v, this.py.v, -this.pz.v);\n        } else {\n          mat.translate(this.px.v, this.py.v, 0);\n        }\n      } else {\n        mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n      }\n    }\n\n    function processKeys(forceRender) {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (this._isDirty) {\n        this.precalculateMatrix();\n        this._isDirty = false;\n      }\n\n      this.iterateDynamicProperties();\n\n      if (this._mdf || forceRender) {\n        var frameRate;\n        this.v.cloneFromProps(this.pre.props);\n\n        if (this.appliedTransformations < 1) {\n          this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        }\n\n        if (this.appliedTransformations < 2) {\n          this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        }\n\n        if (this.sk && this.appliedTransformations < 3) {\n          this.v.skewFromAxis(-this.sk.v, this.sa.v);\n        }\n\n        if (this.r && this.appliedTransformations < 4) {\n          this.v.rotate(-this.r.v);\n        } else if (!this.r && this.appliedTransformations < 4) {\n          this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        }\n\n        if (this.autoOriented) {\n          var v1;\n          var v2;\n          frameRate = this.elem.globalData.frameRate;\n\n          if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n            if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n              v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n              v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n            } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n              v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n              v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n            } else {\n              v1 = this.p.pv;\n              v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n            }\n          } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n            v1 = [];\n            v2 = [];\n            var px = this.px;\n            var py = this.py;\n\n            if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n              v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n              v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n              v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n              v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n            } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n              v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n              v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n              v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n              v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n            } else {\n              v1 = [px.pv, py.pv];\n              v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n              v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n            }\n          } else {\n            v2 = defaultVector;\n            v1 = v2;\n          }\n\n          this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n        }\n\n        if (this.data.p && this.data.p.s) {\n          if (this.data.p.z) {\n            this.v.translate(this.px.v, this.py.v, -this.pz.v);\n          } else {\n            this.v.translate(this.px.v, this.py.v, 0);\n          }\n        } else {\n          this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n        }\n      }\n\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function precalculateMatrix() {\n      if (!this.a.k) {\n        this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        this.appliedTransformations = 1;\n      } else {\n        return;\n      }\n\n      if (!this.s.effectsSequence.length) {\n        this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        this.appliedTransformations = 2;\n      } else {\n        return;\n      }\n\n      if (this.sk) {\n        if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n          this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n          this.appliedTransformations = 3;\n        } else {\n          return;\n        }\n      }\n\n      if (this.r) {\n        if (!this.r.effectsSequence.length) {\n          this.pre.rotate(-this.r.v);\n          this.appliedTransformations = 4;\n        }\n      } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n        this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        this.appliedTransformations = 4;\n      }\n    }\n\n    function autoOrient() {//\n      // var prevP = this.getValueAtTime();\n    }\n\n    function addDynamicProperty(prop) {\n      this._addDynamicProperty(prop);\n\n      this.elem.addDynamicProperty(prop);\n      this._isDirty = true;\n    }\n\n    function TransformProperty(elem, data, container) {\n      this.elem = elem;\n      this.frameId = -1;\n      this.propType = 'transform';\n      this.data = data;\n      this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n      this.pre = new Matrix();\n      this.appliedTransformations = 0;\n      this.initDynamicPropertyContainer(container || elem);\n\n      if (data.p && data.p.s) {\n        this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n        this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n        if (data.p.z) {\n          this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n        }\n      } else {\n        this.p = PropertyFactory.getProp(elem, data.p || {\n          k: [0, 0, 0]\n        }, 1, 0, this);\n      }\n\n      if (data.rx) {\n        this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n        this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n        this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n        if (data.or.k[0].ti) {\n          var i;\n          var len = data.or.k.length;\n\n          for (i = 0; i < len; i += 1) {\n            data.or.k[i].to = null;\n            data.or.k[i].ti = null;\n          }\n        }\n\n        this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n        this.or.sh = true;\n      } else {\n        this.r = PropertyFactory.getProp(elem, data.r || {\n          k: 0\n        }, 0, degToRads, this);\n      }\n\n      if (data.sk) {\n        this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n        this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n      }\n\n      this.a = PropertyFactory.getProp(elem, data.a || {\n        k: [0, 0, 0]\n      }, 1, 0, this);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: [100, 100, 100]\n      }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n      if (data.o) {\n        this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n      } else {\n        this.o = {\n          _mdf: false,\n          v: 1\n        };\n      }\n\n      this._isDirty = true;\n\n      if (!this.dynamicProperties.length) {\n        this.getValue(true);\n      }\n    }\n\n    TransformProperty.prototype = {\n      applyToMatrix: applyToMatrix,\n      getValue: processKeys,\n      precalculateMatrix: precalculateMatrix,\n      autoOrient: autoOrient\n    };\n    extendPrototype([DynamicPropertyContainer], TransformProperty);\n    TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n    TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n    function getTransformProperty(elem, data, container) {\n      return new TransformProperty(elem, data, container);\n    }\n\n    return {\n      getTransformProperty: getTransformProperty\n    };\n  }();\n\n  function RepeaterModifier() {}\n\n  extendPrototype([ShapeModifier], RepeaterModifier);\n\n  RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n    this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n    this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n    this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n    this.data = data;\n\n    if (!this.dynamicProperties.length) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = !!this.dynamicProperties.length;\n    this.pMatrix = new Matrix();\n    this.rMatrix = new Matrix();\n    this.sMatrix = new Matrix();\n    this.tMatrix = new Matrix();\n    this.matrix = new Matrix();\n  };\n\n  RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n    var dir = inv ? -1 : 1;\n    var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n    var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n    pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n    rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    rMatrix.rotate(-transform.r.v * dir * perc);\n    rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n    sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n    sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n  };\n\n  RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n    this.elem = elem;\n    this.arr = arr;\n    this.pos = pos;\n    this.elemsData = elemsData;\n    this._currentCopies = 0;\n    this._elements = [];\n    this._groups = [];\n    this.frameId = -1;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, arr[pos]);\n\n    while (pos > 0) {\n      pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n      this._elements.unshift(arr[pos]);\n    }\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  RepeaterModifier.prototype.resetElements = function (elements) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._processed = false;\n\n      if (elements[i].ty === 'gr') {\n        this.resetElements(elements[i].it);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.cloneElements = function (elements) {\n    var newElements = JSON.parse(JSON.stringify(elements));\n    this.resetElements(newElements);\n    return newElements;\n  };\n\n  RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._render = renderFlag;\n\n      if (elements[i].ty === 'gr') {\n        this.changeGroupRender(elements[i].it, renderFlag);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n    var items;\n    var itemsTransform;\n    var i;\n    var dir;\n    var cont;\n    var hasReloaded = false;\n\n    if (this._mdf || _isFirstFrame) {\n      var copies = Math.ceil(this.c.v);\n\n      if (this._groups.length < copies) {\n        while (this._groups.length < copies) {\n          var group = {\n            it: this.cloneElements(this._elements),\n            ty: 'gr'\n          };\n          group.it.push({\n            a: {\n              a: 0,\n              ix: 1,\n              k: [0, 0]\n            },\n            nm: 'Transform',\n            o: {\n              a: 0,\n              ix: 7,\n              k: 100\n            },\n            p: {\n              a: 0,\n              ix: 2,\n              k: [0, 0]\n            },\n            r: {\n              a: 1,\n              ix: 6,\n              k: [{\n                s: 0,\n                e: 0,\n                t: 0\n              }, {\n                s: 0,\n                e: 0,\n                t: 1\n              }]\n            },\n            s: {\n              a: 0,\n              ix: 3,\n              k: [100, 100]\n            },\n            sa: {\n              a: 0,\n              ix: 5,\n              k: 0\n            },\n            sk: {\n              a: 0,\n              ix: 4,\n              k: 0\n            },\n            ty: 'tr'\n          });\n          this.arr.splice(0, 0, group);\n\n          this._groups.splice(0, 0, group);\n\n          this._currentCopies += 1;\n        }\n\n        this.elem.reloadShapes();\n        hasReloaded = true;\n      }\n\n      cont = 0;\n      var renderFlag;\n\n      for (i = 0; i <= this._groups.length - 1; i += 1) {\n        renderFlag = cont < copies;\n        this._groups[i]._render = renderFlag;\n        this.changeGroupRender(this._groups[i].it, renderFlag);\n\n        if (!renderFlag) {\n          var elems = this.elemsData[i].it;\n          var transformData = elems[elems.length - 1];\n\n          if (transformData.transform.op.v !== 0) {\n            transformData.transform.op._mdf = true;\n            transformData.transform.op.v = 0;\n          } else {\n            transformData.transform.op._mdf = false;\n          }\n        }\n\n        cont += 1;\n      }\n\n      this._currentCopies = copies; /// /\n\n      var offset = this.o.v;\n      var offsetModulo = offset % 1;\n      var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n      var pProps = this.pMatrix.props;\n      var rProps = this.rMatrix.props;\n      var sProps = this.sMatrix.props;\n      this.pMatrix.reset();\n      this.rMatrix.reset();\n      this.sMatrix.reset();\n      this.tMatrix.reset();\n      this.matrix.reset();\n      var iteration = 0;\n\n      if (offset > 0) {\n        while (iteration < roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          iteration += 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n          iteration += offsetModulo;\n        }\n      } else if (offset < 0) {\n        while (iteration > roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n          iteration -= 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n          iteration -= offsetModulo;\n        }\n      }\n\n      i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n      dir = this.data.m === 1 ? 1 : -1;\n      cont = this._currentCopies;\n      var j;\n      var jLen;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        jLen = itemsTransform.length;\n        items[items.length - 1].transform.mProps._mdf = true;\n        items[items.length - 1].transform.op._mdf = true;\n        items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n        if (iteration !== 0) {\n          if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n            this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          }\n\n          this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n          this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n          this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n\n          this.matrix.reset();\n        } else {\n          this.matrix.reset();\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n        }\n\n        iteration += 1;\n        cont -= 1;\n        i += dir;\n      }\n    } else {\n      cont = this._currentCopies;\n      i = 0;\n      dir = 1;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        items[items.length - 1].transform.mProps._mdf = false;\n        items[items.length - 1].transform.op._mdf = false;\n        cont -= 1;\n        i += dir;\n      }\n    }\n\n    return hasReloaded;\n  };\n\n  RepeaterModifier.prototype.addShape = function () {};\n\n  function RoundCornersModifier() {}\n\n  extendPrototype([ShapeModifier], RoundCornersModifier);\n\n  RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this._isAnimated = !!this.rd.effectsSequence.length;\n  };\n\n  RoundCornersModifier.prototype.processPath = function (path, round) {\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var i;\n    var len = path._length;\n    var currentV;\n    var currentI;\n    var currentO;\n    var closerV;\n    var distance;\n    var newPosPerc;\n    var index = 0;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < len; i += 1) {\n      currentV = path.v[i];\n      currentO = path.o[i];\n      currentI = path.i[i];\n\n      if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n        if ((i === 0 || i === len - 1) && !path.c) {\n          clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n          /* clonedPath.v[index] = currentV;\r\n                  clonedPath.o[index] = currentO;\r\n                  clonedPath.i[index] = currentI; */\n\n          index += 1;\n        } else {\n          if (i === 0) {\n            closerV = path.v[len - 1];\n          } else {\n            closerV = path.v[i - 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = iX;\n          iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n          vY = iY;\n          oX = vX - (vX - currentV[0]) * roundCorner;\n          oY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n\n          if (i === len - 1) {\n            closerV = path.v[0];\n          } else {\n            closerV = path.v[i + 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = oX;\n          oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n          vY = oY;\n          iX = vX - (vX - currentV[0]) * roundCorner;\n          iY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n        }\n      } else {\n        clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n        index += 1;\n      }\n    }\n\n    return clonedPath;\n  };\n\n  RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var rd = this.rd.v;\n\n    if (rd !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function getFontProperties(fontData) {\n    var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n    var fWeight = 'normal';\n    var fStyle = 'normal';\n    var len = styles.length;\n    var styleName;\n\n    for (var i = 0; i < len; i += 1) {\n      styleName = styles[i].toLowerCase();\n\n      switch (styleName) {\n        case 'italic':\n          fStyle = 'italic';\n          break;\n\n        case 'bold':\n          fWeight = '700';\n          break;\n\n        case 'black':\n          fWeight = '900';\n          break;\n\n        case 'medium':\n          fWeight = '500';\n          break;\n\n        case 'regular':\n        case 'normal':\n          fWeight = '400';\n          break;\n\n        case 'light':\n        case 'thin':\n          fWeight = '200';\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    return {\n      style: fStyle,\n      weight: fontData.fWeight || fWeight\n    };\n  }\n\n  var FontManager = function () {\n    var maxWaitingTime = 5000;\n    var emptyChar = {\n      w: 0,\n      size: 0,\n      shapes: [],\n      data: {\n        shapes: []\n      }\n    };\n    var combinedCharacters = []; // Hindi characters\n\n    combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n    var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n    var zeroWidthJoiner = [65039, 8205];\n\n    function trimFontOptions(font) {\n      var familyArray = font.split(',');\n      var i;\n      var len = familyArray.length;\n      var enabledFamilies = [];\n\n      for (i = 0; i < len; i += 1) {\n        if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n          enabledFamilies.push(familyArray[i]);\n        }\n      }\n\n      return enabledFamilies.join(',');\n    }\n\n    function setUpNode(font, family) {\n      var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n      parentNode.setAttribute('aria-hidden', true);\n      parentNode.style.fontFamily = family;\n      var node = createTag('span'); // Characters that vary significantly among different fonts\n\n      node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n      parentNode.style.position = 'absolute';\n      parentNode.style.left = '-10000px';\n      parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n      parentNode.style.fontSize = '300px'; // Reset any font properties\n\n      parentNode.style.fontVariant = 'normal';\n      parentNode.style.fontStyle = 'normal';\n      parentNode.style.fontWeight = 'normal';\n      parentNode.style.letterSpacing = '0';\n      parentNode.appendChild(node);\n      document.body.appendChild(parentNode); // Remember width with no applied web font\n\n      var width = node.offsetWidth;\n      node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n      return {\n        node: node,\n        w: width,\n        parent: parentNode\n      };\n    }\n\n    function checkLoadedFonts() {\n      var i;\n      var len = this.fonts.length;\n      var node;\n      var w;\n      var loadedCount = len;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.fonts[i].loaded) {\n          loadedCount -= 1;\n        } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n          this.fonts[i].loaded = true;\n        } else {\n          node = this.fonts[i].monoCase.node;\n          w = this.fonts[i].monoCase.w;\n\n          if (node.offsetWidth !== w) {\n            loadedCount -= 1;\n            this.fonts[i].loaded = true;\n          } else {\n            node = this.fonts[i].sansCase.node;\n            w = this.fonts[i].sansCase.w;\n\n            if (node.offsetWidth !== w) {\n              loadedCount -= 1;\n              this.fonts[i].loaded = true;\n            }\n          }\n\n          if (this.fonts[i].loaded) {\n            this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n            this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n          }\n        }\n      }\n\n      if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n        setTimeout(this.checkLoadedFontsBinded, 20);\n      } else {\n        setTimeout(this.setIsLoadedBinded, 10);\n      }\n    }\n\n    function createHelper(fontData, def) {\n      var engine = document.body && def ? 'svg' : 'canvas';\n      var helper;\n      var fontProps = getFontProperties(fontData);\n\n      if (engine === 'svg') {\n        var tHelper = createNS('text');\n        tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n        tHelper.setAttribute('font-family', fontData.fFamily);\n        tHelper.setAttribute('font-style', fontProps.style);\n        tHelper.setAttribute('font-weight', fontProps.weight);\n        tHelper.textContent = '1';\n\n        if (fontData.fClass) {\n          tHelper.style.fontFamily = 'inherit';\n          tHelper.setAttribute('class', fontData.fClass);\n        } else {\n          tHelper.style.fontFamily = fontData.fFamily;\n        }\n\n        def.appendChild(tHelper);\n        helper = tHelper;\n      } else {\n        var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n        tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n        helper = tCanvasHelper;\n      }\n\n      function measure(text) {\n        if (engine === 'svg') {\n          helper.textContent = text;\n          return helper.getComputedTextLength();\n        }\n\n        return helper.measureText(text).width;\n      }\n\n      return {\n        measureText: measure\n      };\n    }\n\n    function addFonts(fontData, defs) {\n      if (!fontData) {\n        this.isLoaded = true;\n        return;\n      }\n\n      if (this.chars) {\n        this.isLoaded = true;\n        this.fonts = fontData.list;\n        return;\n      }\n\n      if (!document.body) {\n        this.isLoaded = true;\n        fontData.list.forEach(function (data) {\n          data.helper = createHelper(data);\n          data.cache = {};\n        });\n        this.fonts = fontData.list;\n        return;\n      }\n\n      var fontArr = fontData.list;\n      var i;\n      var len = fontArr.length;\n      var _pendingFonts = len;\n\n      for (i = 0; i < len; i += 1) {\n        var shouldLoadFont = true;\n        var loadedSelector;\n        var j;\n        fontArr[i].loaded = false;\n        fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n        fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n        if (!fontArr[i].fPath) {\n          fontArr[i].loaded = true;\n          _pendingFonts -= 1;\n        } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n          loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n          if (loadedSelector.length > 0) {\n            shouldLoadFont = false;\n          }\n\n          if (shouldLoadFont) {\n            var s = createTag('style');\n            s.setAttribute('f-forigin', fontArr[i].fOrigin);\n            s.setAttribute('f-origin', fontArr[i].origin);\n            s.setAttribute('f-family', fontArr[i].fFamily);\n            s.type = 'text/css';\n            s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n            defs.appendChild(s);\n          }\n        } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n          loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var l = createTag('link');\n            l.setAttribute('f-forigin', fontArr[i].fOrigin);\n            l.setAttribute('f-origin', fontArr[i].origin);\n            l.type = 'text/css';\n            l.rel = 'stylesheet';\n            l.href = fontArr[i].fPath;\n            document.body.appendChild(l);\n          }\n        } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n          loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (fontArr[i].fPath === loadedSelector[j].src) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var sc = createTag('link');\n            sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n            sc.setAttribute('f-origin', fontArr[i].origin);\n            sc.setAttribute('rel', 'stylesheet');\n            sc.setAttribute('href', fontArr[i].fPath);\n            defs.appendChild(sc);\n          }\n        }\n\n        fontArr[i].helper = createHelper(fontArr[i], defs);\n        fontArr[i].cache = {};\n        this.fonts.push(fontArr[i]);\n      }\n\n      if (_pendingFonts === 0) {\n        this.isLoaded = true;\n      } else {\n        // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n        // Adding this timeout seems to fix it\n        setTimeout(this.checkLoadedFonts.bind(this), 100);\n      }\n    }\n\n    function addChars(chars) {\n      if (!chars) {\n        return;\n      }\n\n      if (!this.chars) {\n        this.chars = [];\n      }\n\n      var i;\n      var len = chars.length;\n      var j;\n      var jLen = this.chars.length;\n      var found;\n\n      for (i = 0; i < len; i += 1) {\n        j = 0;\n        found = false;\n\n        while (j < jLen) {\n          if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n            found = true;\n          }\n\n          j += 1;\n        }\n\n        if (!found) {\n          this.chars.push(chars[i]);\n          jLen += 1;\n        }\n      }\n    }\n\n    function getCharData(_char, style, font) {\n      var i = 0;\n      var len = this.chars.length;\n\n      while (i < len) {\n        if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n          return this.chars[i];\n        }\n\n        i += 1;\n      }\n\n      if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n      && !this._warned) {\n        this._warned = true;\n        console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n      }\n\n      return emptyChar;\n    }\n\n    function measureText(_char2, fontName, size) {\n      var fontData = this.getFontByName(fontName);\n\n      var index = _char2.charCodeAt(0);\n\n      if (!fontData.cache[index + 1]) {\n        var tHelper = fontData.helper;\n\n        if (_char2 === ' ') {\n          var doubleSize = tHelper.measureText('|' + _char2 + '|');\n          var singleSize = tHelper.measureText('||');\n          fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\n        } else {\n          fontData.cache[index + 1] = tHelper.measureText(_char2) / 100;\n        }\n      }\n\n      return fontData.cache[index + 1] * size;\n    }\n\n    function getFontByName(name) {\n      var i = 0;\n      var len = this.fonts.length;\n\n      while (i < len) {\n        if (this.fonts[i].fName === name) {\n          return this.fonts[i];\n        }\n\n        i += 1;\n      }\n\n      return this.fonts[0];\n    }\n\n    function isModifier(firstCharCode, secondCharCode) {\n      var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n      return surrogateModifiers.indexOf(sum) !== -1;\n    }\n\n    function isZeroWidthJoiner(firstCharCode, secondCharCode) {\n      if (!secondCharCode) {\n        return firstCharCode === zeroWidthJoiner[1];\n      }\n\n      return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1];\n    }\n\n    function isCombinedCharacter(_char3) {\n      return combinedCharacters.indexOf(_char3) !== -1;\n    }\n\n    function setIsLoaded() {\n      this.isLoaded = true;\n    }\n\n    var Font = function Font() {\n      this.fonts = [];\n      this.chars = null;\n      this.typekitLoaded = 0;\n      this.isLoaded = false;\n      this._warned = false;\n      this.initTime = Date.now();\n      this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n      this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n    };\n\n    Font.isModifier = isModifier;\n    Font.isZeroWidthJoiner = isZeroWidthJoiner;\n    Font.isCombinedCharacter = isCombinedCharacter;\n    var fontPrototype = {\n      addChars: addChars,\n      addFonts: addFonts,\n      getCharData: getCharData,\n      getFontByName: getFontByName,\n      measureText: measureText,\n      checkLoadedFonts: checkLoadedFonts,\n      setIsLoaded: setIsLoaded\n    };\n    Font.prototype = fontPrototype;\n    return Font;\n  }();\n\n  function RenderableElement() {}\n\n  RenderableElement.prototype = {\n    initRenderable: function initRenderable() {\n      // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n      this.isInRange = false; // layer's display state\n\n      this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n      this.isTransparent = false; // list of animated components\n\n      this.renderableComponents = [];\n    },\n    addRenderableComponent: function addRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) === -1) {\n        this.renderableComponents.push(component);\n      }\n    },\n    removeRenderableComponent: function removeRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) !== -1) {\n        this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n      }\n    },\n    prepareRenderableFrame: function prepareRenderableFrame(num) {\n      this.checkLayerLimits(num);\n    },\n    checkTransparency: function checkTransparency() {\n      if (this.finalTransform.mProp.o.v <= 0) {\n        if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n          this.isTransparent = true;\n          this.hide();\n        }\n      } else if (this.isTransparent) {\n        this.isTransparent = false;\n        this.show();\n      }\n    },\n\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       *\r\n       */\n    checkLayerLimits: function checkLayerLimits(num) {\n      if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n        if (this.isInRange !== true) {\n          this.globalData._mdf = true;\n          this._mdf = true;\n          this.isInRange = true;\n          this.show();\n        }\n      } else if (this.isInRange !== false) {\n        this.globalData._mdf = true;\n        this.isInRange = false;\n        this.hide();\n      }\n    },\n    renderRenderable: function renderRenderable() {\n      var i;\n      var len = this.renderableComponents.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderableComponents[i].renderFrame(this._isFirstFrame);\n      }\n      /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n          this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n    },\n    sourceRectAtTime: function sourceRectAtTime() {\n      return {\n        top: 0,\n        left: 0,\n        width: 100,\n        height: 100\n      };\n    },\n    getLayerSize: function getLayerSize() {\n      if (this.data.ty === 5) {\n        return {\n          w: this.data.textData.width,\n          h: this.data.textData.height\n        };\n      }\n\n      return {\n        w: this.data.width,\n        h: this.data.height\n      };\n    }\n  };\n\n  var MaskManagerInterface = function () {\n    function MaskInterface(mask, data) {\n      this._mask = mask;\n      this._data = data;\n    }\n\n    Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n      get: function get() {\n        if (this._mask.prop.k) {\n          this._mask.prop.getValue();\n        }\n\n        return this._mask.prop;\n      }\n    });\n    Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n      get: function get() {\n        if (this._mask.op.k) {\n          this._mask.op.getValue();\n        }\n\n        return this._mask.op.v * 100;\n      }\n    });\n\n    var MaskManager = function MaskManager(maskManager) {\n      var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n      var i;\n      var len = maskManager.viewData.length;\n\n      for (i = 0; i < len; i += 1) {\n        _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n      }\n\n      var maskFunction = function maskFunction(name) {\n        i = 0;\n\n        while (i < len) {\n          if (maskManager.masksProperties[i].nm === name) {\n            return _masksInterfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      };\n\n      return maskFunction;\n    };\n\n    return MaskManager;\n  }();\n\n  var ExpressionPropertyInterface = function () {\n    var defaultUnidimensionalValue = {\n      pv: 0,\n      v: 0,\n      mult: 1\n    };\n    var defaultMultidimensionalValue = {\n      pv: [0, 0, 0],\n      v: [0, 0, 0],\n      mult: 1\n    };\n\n    function completeProperty(expressionValue, property, type) {\n      Object.defineProperty(expressionValue, 'velocity', {\n        get: function get() {\n          return property.getVelocityAtTime(property.comp.currentFrame);\n        }\n      });\n      expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n      expressionValue.key = function (pos) {\n        if (!expressionValue.numKeys) {\n          return 0;\n        }\n\n        var value = '';\n\n        if ('s' in property.keyframes[pos - 1]) {\n          value = property.keyframes[pos - 1].s;\n        } else if ('e' in property.keyframes[pos - 2]) {\n          value = property.keyframes[pos - 2].e;\n        } else {\n          value = property.keyframes[pos - 2].s;\n        }\n\n        var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n        valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n        valueProp.value = type === 'unidimensional' ? value[0] : value;\n        return valueProp;\n      };\n\n      expressionValue.valueAtTime = property.getValueAtTime;\n      expressionValue.speedAtTime = property.getSpeedAtTime;\n      expressionValue.velocityAtTime = property.getVelocityAtTime;\n      expressionValue.propertyGroup = property.propertyGroup;\n    }\n\n    function UnidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultUnidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var val = property.pv * mult;\n      var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n      expressionValue.value = val;\n      completeProperty(expressionValue, property, 'unidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        val = property.v * mult;\n\n        if (expressionValue.value !== val) {\n          expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n          expressionValue.value = val;\n          completeProperty(expressionValue, property, 'unidimensional');\n        }\n\n        return expressionValue;\n      };\n    }\n\n    function MultidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultMultidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var len = property.data && property.data.l || property.pv.length;\n      var expressionValue = createTypedArray('float32', len);\n      var arrValue = createTypedArray('float32', len);\n      expressionValue.value = arrValue;\n      completeProperty(expressionValue, property, 'multidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        for (var i = 0; i < len; i += 1) {\n          arrValue[i] = property.v[i] * mult;\n          expressionValue[i] = arrValue[i];\n        }\n\n        return expressionValue;\n      };\n    } // TODO: try to avoid using this getter\n\n\n    function defaultGetter() {\n      return defaultUnidimensionalValue;\n    }\n\n    return function (property) {\n      if (!property) {\n        return defaultGetter;\n      }\n\n      if (property.propType === 'unidimensional') {\n        return UnidimensionalPropertyInterface(property);\n      }\n\n      return MultidimensionalPropertyInterface(property);\n    };\n  }();\n\n  var TransformExpressionInterface = function () {\n    return function (transform) {\n      function _thisFunction(name) {\n        switch (name) {\n          case 'scale':\n          case 'Scale':\n          case 'ADBE Scale':\n          case 6:\n            return _thisFunction.scale;\n\n          case 'rotation':\n          case 'Rotation':\n          case 'ADBE Rotation':\n          case 'ADBE Rotate Z':\n          case 10:\n            return _thisFunction.rotation;\n\n          case 'ADBE Rotate X':\n            return _thisFunction.xRotation;\n\n          case 'ADBE Rotate Y':\n            return _thisFunction.yRotation;\n\n          case 'position':\n          case 'Position':\n          case 'ADBE Position':\n          case 2:\n            return _thisFunction.position;\n\n          case 'ADBE Position_0':\n            return _thisFunction.xPosition;\n\n          case 'ADBE Position_1':\n            return _thisFunction.yPosition;\n\n          case 'ADBE Position_2':\n            return _thisFunction.zPosition;\n\n          case 'anchorPoint':\n          case 'AnchorPoint':\n          case 'Anchor Point':\n          case 'ADBE AnchorPoint':\n          case 1:\n            return _thisFunction.anchorPoint;\n\n          case 'opacity':\n          case 'Opacity':\n          case 11:\n            return _thisFunction.opacity;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'rotation', {\n        get: ExpressionPropertyInterface(transform.r || transform.rz)\n      });\n      Object.defineProperty(_thisFunction, 'zRotation', {\n        get: ExpressionPropertyInterface(transform.rz || transform.r)\n      });\n      Object.defineProperty(_thisFunction, 'xRotation', {\n        get: ExpressionPropertyInterface(transform.rx)\n      });\n      Object.defineProperty(_thisFunction, 'yRotation', {\n        get: ExpressionPropertyInterface(transform.ry)\n      });\n      Object.defineProperty(_thisFunction, 'scale', {\n        get: ExpressionPropertyInterface(transform.s)\n      });\n\n      var _px;\n\n      var _py;\n\n      var _pz;\n\n      var _transformFactory;\n\n      if (transform.p) {\n        _transformFactory = ExpressionPropertyInterface(transform.p);\n      } else {\n        _px = ExpressionPropertyInterface(transform.px);\n        _py = ExpressionPropertyInterface(transform.py);\n\n        if (transform.pz) {\n          _pz = ExpressionPropertyInterface(transform.pz);\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'position', {\n        get: function get() {\n          if (transform.p) {\n            return _transformFactory();\n          }\n\n          return [_px(), _py(), _pz ? _pz() : 0];\n        }\n      });\n      Object.defineProperty(_thisFunction, 'xPosition', {\n        get: ExpressionPropertyInterface(transform.px)\n      });\n      Object.defineProperty(_thisFunction, 'yPosition', {\n        get: ExpressionPropertyInterface(transform.py)\n      });\n      Object.defineProperty(_thisFunction, 'zPosition', {\n        get: ExpressionPropertyInterface(transform.pz)\n      });\n      Object.defineProperty(_thisFunction, 'anchorPoint', {\n        get: ExpressionPropertyInterface(transform.a)\n      });\n      Object.defineProperty(_thisFunction, 'opacity', {\n        get: ExpressionPropertyInterface(transform.o)\n      });\n      Object.defineProperty(_thisFunction, 'skew', {\n        get: ExpressionPropertyInterface(transform.sk)\n      });\n      Object.defineProperty(_thisFunction, 'skewAxis', {\n        get: ExpressionPropertyInterface(transform.sa)\n      });\n      Object.defineProperty(_thisFunction, 'orientation', {\n        get: ExpressionPropertyInterface(transform.or)\n      });\n      return _thisFunction;\n    };\n  }();\n\n  var LayerExpressionInterface = function () {\n    function getMatrix(time) {\n      var toWorldMat = new Matrix();\n\n      if (time !== undefined) {\n        var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n        propMatrix.clone(toWorldMat);\n      } else {\n        var transformMat = this._elem.finalTransform.mProp;\n        transformMat.applyToMatrix(toWorldMat);\n      }\n\n      return toWorldMat;\n    }\n\n    function toWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function toWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function fromWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function fromWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function applyPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n    }\n\n    function invertPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.inversePoint(arr);\n    }\n\n    function fromComp(arr) {\n      var toWorldMat = new Matrix();\n      toWorldMat.reset();\n\n      this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n        }\n\n        return toWorldMat.inversePoint(arr);\n      }\n\n      return toWorldMat.inversePoint(arr);\n    }\n\n    function sampleImage() {\n      return [1, 1, 1, 1];\n    }\n\n    return function (elem) {\n      var transformInterface;\n\n      function _registerMaskInterface(maskManager) {\n        _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n      }\n\n      function _registerEffectsInterface(effects) {\n        _thisLayerFunction.effect = effects;\n      }\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Root Vectors Group':\n          case 'Contents':\n          case 2:\n            return _thisLayerFunction.shapeInterface;\n\n          case 1:\n          case 6:\n          case 'Transform':\n          case 'transform':\n          case 'ADBE Transform Group':\n            return transformInterface;\n\n          case 4:\n          case 'ADBE Effect Parade':\n          case 'effects':\n          case 'Effects':\n            return _thisLayerFunction.effect;\n\n          case 'ADBE Text Properties':\n            return _thisLayerFunction.textInterface;\n\n          default:\n            return null;\n        }\n      }\n\n      _thisLayerFunction.getMatrix = getMatrix;\n      _thisLayerFunction.invertPoint = invertPoint;\n      _thisLayerFunction.applyPoint = applyPoint;\n      _thisLayerFunction.toWorld = toWorld;\n      _thisLayerFunction.toWorldVec = toWorldVec;\n      _thisLayerFunction.fromWorld = fromWorld;\n      _thisLayerFunction.fromWorldVec = fromWorldVec;\n      _thisLayerFunction.toComp = toWorld;\n      _thisLayerFunction.fromComp = fromComp;\n      _thisLayerFunction.sampleImage = sampleImage;\n      _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n      _thisLayerFunction._elem = elem;\n      transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n      var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n      Object.defineProperties(_thisLayerFunction, {\n        hasParent: {\n          get: function get() {\n            return elem.hierarchy.length;\n          }\n        },\n        parent: {\n          get: function get() {\n            return elem.hierarchy[0].layerInterface;\n          }\n        },\n        rotation: getDescriptor(transformInterface, 'rotation'),\n        scale: getDescriptor(transformInterface, 'scale'),\n        position: getDescriptor(transformInterface, 'position'),\n        opacity: getDescriptor(transformInterface, 'opacity'),\n        anchorPoint: anchorPointDescriptor,\n        anchor_point: anchorPointDescriptor,\n        transform: {\n          get: function get() {\n            return transformInterface;\n          }\n        },\n        active: {\n          get: function get() {\n            return elem.isInRange;\n          }\n        }\n      });\n      _thisLayerFunction.startTime = elem.data.st;\n      _thisLayerFunction.index = elem.data.ind;\n      _thisLayerFunction.source = elem.data.refId;\n      _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n      _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n      _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      _thisLayerFunction._name = elem.data.nm;\n      _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n      _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n      return _thisLayerFunction;\n    };\n  }();\n\n  var propertyGroupFactory = function () {\n    return function (interfaceFunction, parentPropertyGroup) {\n      return function (val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return parentPropertyGroup(val - 1);\n      };\n    };\n  }();\n\n  var PropertyInterface = function () {\n    return function (propertyName, propertyGroup) {\n      var interfaceFunction = {\n        _name: propertyName\n      };\n\n      function _propertyGroup(val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return propertyGroup(val - 1);\n      }\n\n      return _propertyGroup;\n    };\n  }();\n\n  var EffectsExpressionInterface = function () {\n    var ob = {\n      createEffectsInterface: createEffectsInterface\n    };\n\n    function createEffectsInterface(elem, propertyGroup) {\n      if (elem.effectsManager) {\n        var effectElements = [];\n        var effectsData = elem.data.ef;\n        var i;\n        var len = elem.effectsManager.effectElements.length;\n\n        for (i = 0; i < len; i += 1) {\n          effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n        }\n\n        var effects = elem.data.ef || [];\n\n        var groupInterface = function groupInterface(name) {\n          i = 0;\n          len = effects.length;\n\n          while (i < len) {\n            if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n              return effectElements[i];\n            }\n\n            i += 1;\n          }\n\n          return null;\n        };\n\n        Object.defineProperty(groupInterface, 'numProperties', {\n          get: function get() {\n            return effects.length;\n          }\n        });\n        return groupInterface;\n      }\n\n      return null;\n    }\n\n    function createGroupInterface(data, elements, propertyGroup, elem) {\n      function groupInterface(name) {\n        var effects = data.ef;\n        var i = 0;\n        var len = effects.length;\n\n        while (i < len) {\n          if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n            if (effects[i].ty === 5) {\n              return effectElements[i];\n            }\n\n            return effectElements[i]();\n          }\n\n          i += 1;\n        }\n\n        throw new Error();\n      }\n\n      var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n      var effectElements = [];\n      var i;\n      var len = data.ef.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (data.ef[i].ty === 5) {\n          effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n        } else {\n          effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n        }\n      }\n\n      if (data.mn === 'ADBE Color Control') {\n        Object.defineProperty(groupInterface, 'color', {\n          get: function get() {\n            return effectElements[0]();\n          }\n        });\n      }\n\n      Object.defineProperties(groupInterface, {\n        numProperties: {\n          get: function get() {\n            return data.np;\n          }\n        },\n        _name: {\n          value: data.nm\n        },\n        propertyGroup: {\n          value: _propertyGroup\n        }\n      });\n      groupInterface.enabled = data.en !== 0;\n      groupInterface.active = groupInterface.enabled;\n      return groupInterface;\n    }\n\n    function createValueInterface(element, type, elem, propertyGroup) {\n      var expressionProperty = ExpressionPropertyInterface(element.p);\n\n      function interfaceFunction() {\n        if (type === 10) {\n          return elem.comp.compInterface(element.p.v);\n        }\n\n        return expressionProperty();\n      }\n\n      if (element.p.setGroupProperty) {\n        element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n      }\n\n      return interfaceFunction;\n    }\n\n    return ob;\n  }();\n\n  var CompExpressionInterface = function () {\n    return function (comp) {\n      function _thisLayerFunction(name) {\n        var i = 0;\n        var len = comp.layers.length;\n\n        while (i < len) {\n          if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n            return comp.elements[i].layerInterface;\n          }\n\n          i += 1;\n        }\n\n        return null; // return {active:false};\n      }\n\n      Object.defineProperty(_thisLayerFunction, '_name', {\n        value: comp.data.nm\n      });\n      _thisLayerFunction.layer = _thisLayerFunction;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n      _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n      _thisLayerFunction.displayStartTime = 0;\n      _thisLayerFunction.numLayers = comp.layers.length;\n      return _thisLayerFunction;\n    };\n  }();\n\n  var ShapePathInterface = function () {\n    return function pathInterfaceFactory(shape, view, propertyGroup) {\n      var prop = view.sh;\n\n      function interfaceFunction(val) {\n        if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n          return interfaceFunction.path;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        path: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        shape: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        ix: {\n          value: shape.ix\n        },\n        propertyIndex: {\n          value: shape.ix\n        },\n        mn: {\n          value: shape.mn\n        },\n        propertyGroup: {\n          value: propertyGroup\n        }\n      });\n      return interfaceFunction;\n    };\n  }();\n\n  var ShapeExpressionInterface = function () {\n    function iterateElements(shapes, view, propertyGroup) {\n      var arr = [];\n      var i;\n      var len = shapes ? shapes.length : 0;\n\n      for (i = 0; i < len; i += 1) {\n        if (shapes[i].ty === 'gr') {\n          arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'fl') {\n          arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'st') {\n          arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tm') {\n          arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n        } else if (shapes[i].ty === 'el') {\n          arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sr') {\n          arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sh') {\n          arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rc') {\n          arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rd') {\n          arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rp') {\n          arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'gf') {\n          arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else {\n          arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n        }\n      }\n\n      return arr;\n    }\n\n    function contentsInterfaceFactory(shape, view, propertyGroup) {\n      var interfaces;\n\n      var interfaceFunction = function _interfaceFunction(value) {\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        if (typeof value === 'number') {\n          return interfaces[value - 1];\n        }\n\n        return null;\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n      interfaceFunction.numProperties = interfaces.length;\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.transform = transformInterface;\n      interfaceFunction.propertyIndex = shape.cix;\n      interfaceFunction._name = shape.nm;\n      return interfaceFunction;\n    }\n\n    function groupInterfaceFactory(shape, view, propertyGroup) {\n      var interfaceFunction = function _interfaceFunction(value) {\n        switch (value) {\n          case 'ADBE Vectors Group':\n          case 'Contents':\n          case 2:\n            return interfaceFunction.content;\n          // Not necessary for now. Keeping them here in case a new case appears\n          // case 'ADBE Vector Transform Group':\n          // case 3:\n\n          default:\n            return interfaceFunction.transform;\n        }\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.content = content;\n      interfaceFunction.transform = transformInterface;\n      Object.defineProperty(interfaceFunction, '_name', {\n        get: function get() {\n          return shape.nm;\n        }\n      }); // interfaceFunction.content = interfaceFunction;\n\n      interfaceFunction.numProperties = shape.np;\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.nm = shape.nm;\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function fillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Start Point' || val === 'start point') {\n          return interfaceFunction.startPoint;\n        }\n\n        if (val === 'End Point' || val === 'end point') {\n          return interfaceFunction.endPoint;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        startPoint: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        endPoint: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        type: {\n          get: function get() {\n            return 'a';\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function defaultInterfaceFactory() {\n      function interfaceFunction() {\n        return null;\n      }\n\n      return interfaceFunction;\n    }\n\n    function strokeInterfaceFactory(shape, view, propertyGroup) {\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n      function addPropertyToDashOb(i) {\n        Object.defineProperty(dashOb, shape.d[i].nm, {\n          get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n        });\n      }\n\n      var i;\n      var len = shape.d ? shape.d.length : 0;\n      var dashOb = {};\n\n      for (i = 0; i < len; i += 1) {\n        addPropertyToDashOb(i);\n        view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n      }\n\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (val === 'Stroke Width' || val === 'stroke width') {\n          return interfaceFunction.strokeWidth;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        strokeWidth: {\n          get: ExpressionPropertyInterface(view.w)\n        },\n        dash: {\n          get: function get() {\n            return dashOb;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n      return interfaceFunction;\n    }\n\n    function trimInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === shape.e.ix || val === 'End' || val === 'end') {\n          return interfaceFunction.end;\n        }\n\n        if (val === shape.s.ix) {\n          return interfaceFunction.start;\n        }\n\n        if (val === shape.o.ix) {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.propertyGroup = propertyGroup;\n      Object.defineProperties(interfaceFunction, {\n        start: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        end: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function transformInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.a.ix === value || value === 'Anchor Point') {\n          return interfaceFunction.anchorPoint;\n        }\n\n        if (shape.o.ix === value || value === 'Opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (shape.p.ix === value || value === 'Position') {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.s.ix === value || value === 'Scale') {\n          return interfaceFunction.scale;\n        }\n\n        if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n          return interfaceFunction.skew;\n        }\n\n        if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n          return interfaceFunction.skewAxis;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n      view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n      view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (view.transform.mProps.sk) {\n        view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n        view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n      }\n\n      view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        opacity: {\n          get: ExpressionPropertyInterface(view.transform.mProps.o)\n        },\n        position: {\n          get: ExpressionPropertyInterface(view.transform.mProps.p)\n        },\n        anchorPoint: {\n          get: ExpressionPropertyInterface(view.transform.mProps.a)\n        },\n        scale: {\n          get: ExpressionPropertyInterface(view.transform.mProps.s)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(view.transform.mProps.r)\n        },\n        skew: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sk)\n        },\n        skewAxis: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sa)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.ty = 'tr';\n      interfaceFunction.mn = shape.mn;\n      interfaceFunction.propertyGroup = propertyGroup;\n      return interfaceFunction;\n    }\n\n    function ellipseInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.s.ix === value) {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function starInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.pt.ix === value) {\n          return interfaceFunction.points;\n        }\n\n        if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n          return interfaceFunction.outerRadius;\n        }\n\n        if (shape.os.ix === value) {\n          return interfaceFunction.outerRoundness;\n        }\n\n        if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n          return interfaceFunction.innerRadius;\n        }\n\n        if (shape.is && shape.is.ix === value) {\n          return interfaceFunction.innerRoundness;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n      prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n      prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (shape.ir) {\n        prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n        prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        points: {\n          get: ExpressionPropertyInterface(prop.pt)\n        },\n        outerRadius: {\n          get: ExpressionPropertyInterface(prop.or)\n        },\n        outerRoundness: {\n          get: ExpressionPropertyInterface(prop.os)\n        },\n        innerRadius: {\n          get: ExpressionPropertyInterface(prop.ir)\n        },\n        innerRoundness: {\n          get: ExpressionPropertyInterface(prop.is)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function rectInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.roundness;\n        }\n\n        if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        roundness: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function roundedInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.r.ix === value || value === 'Round Corners 1') {\n          return interfaceFunction.radius;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        radius: {\n          get: ExpressionPropertyInterface(prop.rd)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function repeaterInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.c.ix === value || value === 'Copies') {\n          return interfaceFunction.copies;\n        }\n\n        if (shape.o.ix === value || value === 'Offset') {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n      prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        copies: {\n          get: ExpressionPropertyInterface(prop.c)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(prop.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    return function (shapes, view, propertyGroup) {\n      var interfaces;\n\n      function _interfaceFunction(value) {\n        if (typeof value === 'number') {\n          value = value === undefined ? 1 : value;\n\n          if (value === 0) {\n            return propertyGroup;\n          }\n\n          return interfaces[value - 1];\n        }\n\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      function parentGroupWrapper() {\n        return propertyGroup;\n      }\n\n      _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n      interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n      _interfaceFunction.numProperties = interfaces.length;\n      _interfaceFunction._name = 'Contents';\n      return _interfaceFunction;\n    };\n  }();\n\n  var TextExpressionInterface = function () {\n    return function (elem) {\n      var _prevValue;\n\n      var _sourceText;\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Text Document':\n            return _thisLayerFunction.sourceText;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisLayerFunction, 'sourceText', {\n        get: function get() {\n          elem.textProperty.getValue();\n          var stringValue = elem.textProperty.currentData.t;\n\n          if (stringValue !== _prevValue) {\n            elem.textProperty.currentData.t = _prevValue;\n            _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n            // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n            _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n          }\n\n          return _sourceText;\n        }\n      });\n      return _thisLayerFunction;\n    };\n  }();\n\n  var getBlendMode = function () {\n    var blendModeEnums = {\n      0: 'source-over',\n      1: 'multiply',\n      2: 'screen',\n      3: 'overlay',\n      4: 'darken',\n      5: 'lighten',\n      6: 'color-dodge',\n      7: 'color-burn',\n      8: 'hard-light',\n      9: 'soft-light',\n      10: 'difference',\n      11: 'exclusion',\n      12: 'hue',\n      13: 'saturation',\n      14: 'color',\n      15: 'luminosity'\n    };\n    return function (mode) {\n      return blendModeEnums[mode] || '';\n    };\n  }();\n\n  function SliderEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function AngleEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function ColorEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function PointEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function LayerIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function MaskIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function CheckboxEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function NoValueEffect() {\n    this.p = {};\n  }\n\n  function EffectsManager(data, element) {\n    var effects = data.ef || [];\n    this.effectElements = [];\n    var i;\n    var len = effects.length;\n    var effectItem;\n\n    for (i = 0; i < len; i += 1) {\n      effectItem = new GroupEffect(effects[i], element);\n      this.effectElements.push(effectItem);\n    }\n  }\n\n  function GroupEffect(data, element) {\n    this.init(data, element);\n  }\n\n  extendPrototype([DynamicPropertyContainer], GroupEffect);\n  GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n  GroupEffect.prototype.init = function (data, element) {\n    this.data = data;\n    this.effectElements = [];\n    this.initDynamicPropertyContainer(element);\n    var i;\n    var len = this.data.ef.length;\n    var eff;\n    var effects = this.data.ef;\n\n    for (i = 0; i < len; i += 1) {\n      eff = null;\n\n      switch (effects[i].ty) {\n        case 0:\n          eff = new SliderEffect(effects[i], element, this);\n          break;\n\n        case 1:\n          eff = new AngleEffect(effects[i], element, this);\n          break;\n\n        case 2:\n          eff = new ColorEffect(effects[i], element, this);\n          break;\n\n        case 3:\n          eff = new PointEffect(effects[i], element, this);\n          break;\n\n        case 4:\n        case 7:\n          eff = new CheckboxEffect(effects[i], element, this);\n          break;\n\n        case 10:\n          eff = new LayerIndexEffect(effects[i], element, this);\n          break;\n\n        case 11:\n          eff = new MaskIndexEffect(effects[i], element, this);\n          break;\n\n        case 5:\n          eff = new EffectsManager(effects[i], element, this);\n          break;\n        // case 6:\n\n        default:\n          eff = new NoValueEffect(effects[i], element, this);\n          break;\n      }\n\n      if (eff) {\n        this.effectElements.push(eff);\n      }\n    }\n  };\n\n  function BaseElement() {}\n\n  BaseElement.prototype = {\n    checkMasks: function checkMasks() {\n      if (!this.data.hasMask) {\n        return false;\n      }\n\n      var i = 0;\n      var len = this.data.masksProperties.length;\n\n      while (i < len) {\n        if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n          return true;\n        }\n\n        i += 1;\n      }\n\n      return false;\n    },\n    initExpressions: function initExpressions() {\n      this.layerInterface = LayerExpressionInterface(this);\n\n      if (this.data.hasMask && this.maskManager) {\n        this.layerInterface.registerMaskInterface(this.maskManager);\n      }\n\n      var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n      this.layerInterface.registerEffectsInterface(effectsInterface);\n\n      if (this.data.ty === 0 || this.data.xt) {\n        this.compInterface = CompExpressionInterface(this);\n      } else if (this.data.ty === 4) {\n        this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n        this.layerInterface.content = this.layerInterface.shapeInterface;\n      } else if (this.data.ty === 5) {\n        this.layerInterface.textInterface = TextExpressionInterface(this);\n        this.layerInterface.text = this.layerInterface.textInterface;\n      }\n    },\n    setBlendMode: function setBlendMode() {\n      var blendModeValue = getBlendMode(this.data.bm);\n      var elem = this.baseElement || this.layerElement;\n      elem.style['mix-blend-mode'] = blendModeValue;\n    },\n    initBaseData: function initBaseData(data, globalData, comp) {\n      this.globalData = globalData;\n      this.comp = comp;\n      this.data = data;\n      this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n      if (!this.data.sr) {\n        this.data.sr = 1;\n      } // effects manager\n\n\n      this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n    },\n    getType: function getType() {\n      return this.type;\n    },\n    sourceRectAtTime: function sourceRectAtTime() {}\n  };\n\n  /**\r\n   * @file\r\n   * Handles element's layer frame update.\r\n   * Checks layer in point and out point\r\n   *\r\n   */\n  function FrameElement() {}\n\n  FrameElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       */\n    initFrame: function initFrame() {\n      // set to true when inpoint is rendered\n      this._isFirstFrame = false; // list of animated properties\n\n      this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n      this._mdf = false;\n    },\n\n    /**\r\n       * @function\r\n       * Calculates all dynamic values\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       * @param {boolean} isVisible\r\n       * if layers is currently in range\r\n       *\r\n       */\n    prepareProperties: function prepareProperties(num, isVisible) {\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n          this.dynamicProperties[i].getValue();\n\n          if (this.dynamicProperties[i]._mdf) {\n            this.globalData._mdf = true;\n            this._mdf = true;\n          }\n        }\n      }\n    },\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n      }\n    }\n  };\n\n  function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n  var FootageInterface = function () {\n    var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n      var currentPropertyName = '';\n      var currentProperty = elem.getFootageData();\n\n      function init() {\n        currentPropertyName = '';\n        currentProperty = elem.getFootageData();\n        return searchProperty;\n      }\n\n      function searchProperty(value) {\n        if (currentProperty[value]) {\n          currentPropertyName = value;\n          currentProperty = currentProperty[value];\n\n          if (_typeof$2(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        var propertyNameIndex = value.indexOf(currentPropertyName);\n\n        if (propertyNameIndex !== -1) {\n          var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n          currentProperty = currentProperty[index];\n\n          if (_typeof$2(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        return '';\n      }\n\n      return init;\n    };\n\n    var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n      function interfaceFunction(value) {\n        if (value === 'Outline') {\n          return interfaceFunction.outlineInterface();\n        }\n\n        return null;\n      }\n\n      interfaceFunction._name = 'Outline';\n      interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n      return interfaceFunction;\n    };\n\n    return function (elem) {\n      function _interfaceFunction(value) {\n        if (value === 'Data') {\n          return _interfaceFunction.dataInterface;\n        }\n\n        return null;\n      }\n\n      _interfaceFunction._name = 'Data';\n      _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n      return _interfaceFunction;\n    };\n  }();\n\n  function FootageElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.footageData = globalData.imageLoader.getAsset(this.assetData);\n    this.initBaseData(data, globalData, comp);\n  }\n\n  FootageElement.prototype.prepareFrame = function () {};\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n  FootageElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  FootageElement.prototype.renderFrame = function () {};\n\n  FootageElement.prototype.destroy = function () {};\n\n  FootageElement.prototype.initExpressions = function () {\n    this.layerInterface = FootageInterface(this);\n  };\n\n  FootageElement.prototype.getFootageData = function () {\n    return this.footageData;\n  };\n\n  function AudioElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initBaseData(data, globalData, comp);\n    this._isPlaying = false;\n    this._canPlay = false;\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.audio = this.globalData.audioController.createAudio(assetPath);\n    this._currentTime = 0;\n    this.globalData.audioController.addAudio(this);\n    this._volumeMultiplier = 1;\n    this._volume = 1;\n    this._previousVolume = null;\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n    this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n      k: [100]\n    }, 1, 0.01, this);\n  }\n\n  AudioElement.prototype.prepareFrame = function (num) {\n    this.prepareRenderableFrame(num, true);\n    this.prepareProperties(num, true);\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n      this._currentTime = timeRemapped;\n    } else {\n      this._currentTime = num / this.data.sr;\n    }\n\n    this._volume = this.lv.v[0];\n    var totalVolume = this._volume * this._volumeMultiplier;\n\n    if (this._previousVolume !== totalVolume) {\n      this._previousVolume = totalVolume;\n      this.audio.volume(totalVolume);\n    }\n  };\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n  AudioElement.prototype.renderFrame = function () {\n    if (this.isInRange && this._canPlay) {\n      if (!this._isPlaying) {\n        this.audio.play();\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n        this._isPlaying = true;\n      } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n      }\n    }\n  };\n\n  AudioElement.prototype.show = function () {// this.audio.play()\n  };\n\n  AudioElement.prototype.hide = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n  };\n\n  AudioElement.prototype.pause = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n    this._canPlay = false;\n  };\n\n  AudioElement.prototype.resume = function () {\n    this._canPlay = true;\n  };\n\n  AudioElement.prototype.setRate = function (rateValue) {\n    this.audio.rate(rateValue);\n  };\n\n  AudioElement.prototype.volume = function (volumeValue) {\n    this._volumeMultiplier = volumeValue;\n    this._previousVolume = volumeValue * this._volume;\n    this.audio.volume(this._previousVolume);\n  };\n\n  AudioElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  AudioElement.prototype.destroy = function () {};\n\n  AudioElement.prototype.sourceRectAtTime = function () {};\n\n  AudioElement.prototype.initExpressions = function () {};\n\n  function BaseRenderer() {}\n\n  BaseRenderer.prototype.checkLayers = function (num) {\n    var i;\n    var len = this.layers.length;\n    var data;\n    this.completeLayers = true;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (!this.elements[i]) {\n        data = this.layers[i];\n\n        if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n          this.buildItem(i);\n        }\n      }\n\n      this.completeLayers = this.elements[i] ? this.completeLayers : false;\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.createItem = function (layer) {\n    switch (layer.ty) {\n      case 2:\n        return this.createImage(layer);\n\n      case 0:\n        return this.createComp(layer);\n\n      case 1:\n        return this.createSolid(layer);\n\n      case 3:\n        return this.createNull(layer);\n\n      case 4:\n        return this.createShape(layer);\n\n      case 5:\n        return this.createText(layer);\n\n      case 6:\n        return this.createAudio(layer);\n\n      case 13:\n        return this.createCamera(layer);\n\n      case 15:\n        return this.createFootage(layer);\n\n      default:\n        return this.createNull(layer);\n    }\n  };\n\n  BaseRenderer.prototype.createCamera = function () {\n    throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n  };\n\n  BaseRenderer.prototype.createAudio = function (data) {\n    return new AudioElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.createFootage = function (data) {\n    return new FootageElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.buildAllItems = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.buildItem(i);\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.includeLayers = function (newLayers) {\n    this.completeLayers = false;\n    var i;\n    var len = newLayers.length;\n    var j;\n    var jLen = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      j = 0;\n\n      while (j < jLen) {\n        if (this.layers[j].id === newLayers[i].id) {\n          this.layers[j] = newLayers[i];\n          break;\n        }\n\n        j += 1;\n      }\n    }\n  };\n\n  BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n    this.globalData.projectInterface = pInterface;\n  };\n\n  BaseRenderer.prototype.initItems = function () {\n    if (!this.globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n  };\n\n  BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n    var elements = this.elements;\n    var layers = this.layers;\n    var i = 0;\n    var len = layers.length;\n\n    while (i < len) {\n      if (layers[i].ind == parentName) {\n        // eslint-disable-line eqeqeq\n        if (!elements[i] || elements[i] === true) {\n          this.buildItem(i);\n          this.addPendingElement(element);\n        } else {\n          hierarchy.push(elements[i]);\n          elements[i].setAsParent();\n\n          if (layers[i].parent !== undefined) {\n            this.buildElementParenting(element, layers[i].parent, hierarchy);\n          } else {\n            element.setHierarchy(hierarchy);\n          }\n        }\n      }\n\n      i += 1;\n    }\n  };\n\n  BaseRenderer.prototype.addPendingElement = function (element) {\n    this.pendingElements.push(element);\n  };\n\n  BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i]);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  BaseRenderer.prototype.getElementByPath = function (path) {\n    var pathValue = path.shift();\n    var element;\n\n    if (typeof pathValue === 'number') {\n      element = this.elements[pathValue];\n    } else {\n      var i;\n      var len = this.elements.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.elements[i].data.nm === pathValue) {\n          element = this.elements[i];\n          break;\n        }\n      }\n    }\n\n    if (path.length === 0) {\n      return element;\n    }\n\n    return element.getElementByPath(path);\n  };\n\n  BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n    this.globalData.fontManager = new FontManager();\n    this.globalData.fontManager.addChars(animData.chars);\n    this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n    this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n    this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n    this.globalData.imageLoader = this.animationItem.imagePreloader;\n    this.globalData.audioController = this.animationItem.audioController;\n    this.globalData.frameId = 0;\n    this.globalData.frameRate = animData.fr;\n    this.globalData.nm = animData.nm;\n    this.globalData.compSize = {\n      w: animData.w,\n      h: animData.h\n    };\n  };\n\n  function TransformElement() {}\n\n  TransformElement.prototype = {\n    initTransform: function initTransform() {\n      this.finalTransform = {\n        mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n          o: 0\n        },\n        _matMdf: false,\n        _opMdf: false,\n        mat: new Matrix()\n      };\n\n      if (this.data.ao) {\n        this.finalTransform.mProp.autoOriented = true;\n      } // TODO: check TYPE 11: Guided elements\n\n\n      if (this.data.ty !== 11) {// this.createElements();\n      }\n    },\n    renderTransform: function renderTransform() {\n      this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n      this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n      if (this.hierarchy) {\n        var mat;\n        var finalMat = this.finalTransform.mat;\n        var i = 0;\n        var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n        if (!this.finalTransform._matMdf) {\n          while (i < len) {\n            if (this.hierarchy[i].finalTransform.mProp._mdf) {\n              this.finalTransform._matMdf = true;\n              break;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._matMdf) {\n          mat = this.finalTransform.mProp.v.props;\n          finalMat.cloneFromProps(mat);\n\n          for (i = 0; i < len; i += 1) {\n            mat = this.hierarchy[i].finalTransform.mProp.v.props;\n            finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n          }\n        }\n      }\n    },\n    globalToLocal: function globalToLocal(pt) {\n      var transforms = [];\n      transforms.push(this.finalTransform);\n      var flag = true;\n      var comp = this.comp;\n\n      while (flag) {\n        if (comp.finalTransform) {\n          if (comp.data.hasMask) {\n            transforms.splice(0, 0, comp.finalTransform);\n          }\n\n          comp = comp.comp;\n        } else {\n          flag = false;\n        }\n      }\n\n      var i;\n      var len = transforms.length;\n      var ptNew;\n\n      for (i = 0; i < len; i += 1) {\n        ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n        pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n      }\n\n      return pt;\n    },\n    mHelper: new Matrix()\n  };\n\n  function MaskElement(data, element, globalData) {\n    this.data = data;\n    this.element = element;\n    this.globalData = globalData;\n    this.storedData = [];\n    this.masksProperties = this.data.masksProperties || [];\n    this.maskElement = null;\n    var defs = this.globalData.defs;\n    var i;\n    var len = this.masksProperties ? this.masksProperties.length : 0;\n    this.viewData = createSizedArray(len);\n    this.solidPath = '';\n    var path;\n    var properties = this.masksProperties;\n    var count = 0;\n    var currentMasks = [];\n    var j;\n    var jLen;\n    var layerId = createElementID();\n    var rect;\n    var expansor;\n    var feMorph;\n    var x;\n    var maskType = 'clipPath';\n    var maskRef = 'clip-path';\n\n    for (i = 0; i < len; i += 1) {\n      if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n        maskType = 'mask';\n        maskRef = 'mask';\n      }\n\n      if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n        rect = createNS('rect');\n        rect.setAttribute('fill', '#ffffff');\n        rect.setAttribute('width', this.element.comp.data.w || 0);\n        rect.setAttribute('height', this.element.comp.data.h || 0);\n        currentMasks.push(rect);\n      } else {\n        rect = null;\n      }\n\n      path = createNS('path');\n\n      if (properties[i].mode === 'n') {\n        // TODO move this to a factory or to a constructor\n        this.viewData[i] = {\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          elem: path,\n          lastPath: ''\n        };\n        defs.appendChild(path);\n      } else {\n        count += 1;\n        path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        path.setAttribute('clip-rule', 'nonzero');\n        var filterID;\n\n        if (properties[i].x.k !== 0) {\n          maskType = 'mask';\n          maskRef = 'mask';\n          x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n          filterID = createElementID();\n          expansor = createNS('filter');\n          expansor.setAttribute('id', filterID);\n          feMorph = createNS('feMorphology');\n          feMorph.setAttribute('operator', 'erode');\n          feMorph.setAttribute('in', 'SourceGraphic');\n          feMorph.setAttribute('radius', '0');\n          expansor.appendChild(feMorph);\n          defs.appendChild(expansor);\n          path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        } else {\n          feMorph = null;\n          x = null;\n        } // TODO move this to a factory or to a constructor\n\n\n        this.storedData[i] = {\n          elem: path,\n          x: x,\n          expan: feMorph,\n          lastPath: '',\n          lastOperator: '',\n          filterId: filterID,\n          lastRadius: 0\n        };\n\n        if (properties[i].mode === 'i') {\n          jLen = currentMasks.length;\n          var g = createNS('g');\n\n          for (j = 0; j < jLen; j += 1) {\n            g.appendChild(currentMasks[j]);\n          }\n\n          var mask = createNS('mask');\n          mask.setAttribute('mask-type', 'alpha');\n          mask.setAttribute('id', layerId + '_' + count);\n          mask.appendChild(path);\n          defs.appendChild(mask);\n          g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n          currentMasks.length = 0;\n          currentMasks.push(g);\n        } else {\n          currentMasks.push(path);\n        }\n\n        if (properties[i].inv && !this.solidPath) {\n          this.solidPath = this.createLayerSolidPath();\n        } // TODO move this to a factory or to a constructor\n\n\n        this.viewData[i] = {\n          elem: path,\n          lastPath: '',\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          invRect: rect\n        };\n\n        if (!this.viewData[i].prop.k) {\n          this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n        }\n      }\n    }\n\n    this.maskElement = createNS(maskType);\n    len = currentMasks.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.maskElement.appendChild(currentMasks[i]);\n    }\n\n    if (count > 0) {\n      this.maskElement.setAttribute('id', layerId);\n      this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n      defs.appendChild(this.maskElement);\n    }\n\n    if (this.viewData.length) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  MaskElement.prototype.getMaskProperty = function (pos) {\n    return this.viewData[pos].prop;\n  };\n\n  MaskElement.prototype.renderFrame = function (isFirstFrame) {\n    var finalMat = this.element.finalTransform.mat;\n    var i;\n    var len = this.masksProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.viewData[i].prop._mdf || isFirstFrame) {\n        this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n      }\n\n      if (this.viewData[i].op._mdf || isFirstFrame) {\n        this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n      }\n\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n          this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n        }\n\n        if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n          var feMorph = this.storedData[i].expan;\n\n          if (this.storedData[i].x.v < 0) {\n            if (this.storedData[i].lastOperator !== 'erode') {\n              this.storedData[i].lastOperator = 'erode';\n              this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n            }\n\n            feMorph.setAttribute('radius', -this.storedData[i].x.v);\n          } else {\n            if (this.storedData[i].lastOperator !== 'dilate') {\n              this.storedData[i].lastOperator = 'dilate';\n              this.storedData[i].elem.setAttribute('filter', null);\n            }\n\n            this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n          }\n        }\n      }\n    }\n  };\n\n  MaskElement.prototype.getMaskelement = function () {\n    return this.maskElement;\n  };\n\n  MaskElement.prototype.createLayerSolidPath = function () {\n    var path = 'M0,0 ';\n    path += ' h' + this.globalData.compSize.w;\n    path += ' v' + this.globalData.compSize.h;\n    path += ' h-' + this.globalData.compSize.w;\n    path += ' v-' + this.globalData.compSize.h + ' ';\n    return path;\n  };\n\n  MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n    var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    var i;\n    var len;\n    len = pathNodes._length;\n\n    for (i = 1; i < len; i += 1) {\n      // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n    } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n    if (pathNodes.c && len > 1) {\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    } // pathNodes.__renderedString = pathString;\n\n\n    if (viewData.lastPath !== pathString) {\n      var pathShapeValue = '';\n\n      if (viewData.elem) {\n        if (pathNodes.c) {\n          pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n        }\n\n        viewData.elem.setAttribute('d', pathShapeValue);\n      }\n\n      viewData.lastPath = pathString;\n    }\n  };\n\n  MaskElement.prototype.destroy = function () {\n    this.element = null;\n    this.globalData = null;\n    this.maskElement = null;\n    this.data = null;\n    this.masksProperties = null;\n  };\n\n  var filtersFactory = function () {\n    var ob = {};\n    ob.createFilter = createFilter;\n    ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n    function createFilter(filId, skipCoordinates) {\n      var fil = createNS('filter');\n      fil.setAttribute('id', filId);\n\n      if (skipCoordinates !== true) {\n        fil.setAttribute('filterUnits', 'objectBoundingBox');\n        fil.setAttribute('x', '0%');\n        fil.setAttribute('y', '0%');\n        fil.setAttribute('width', '100%');\n        fil.setAttribute('height', '100%');\n      }\n\n      return fil;\n    }\n\n    function createAlphaToLuminanceFilter() {\n      var feColorMatrix = createNS('feColorMatrix');\n      feColorMatrix.setAttribute('type', 'matrix');\n      feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n      feColorMatrix.setAttribute('values', '0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1');\n      return feColorMatrix;\n    }\n\n    return ob;\n  }();\n\n  var featureSupport = function () {\n    var ob = {\n      maskType: true\n    };\n\n    if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n      ob.maskType = false;\n    }\n\n    return ob;\n  }();\n\n  var registeredEffects = {};\n  var idPrefix = 'filter_result_';\n\n  function SVGEffects(elem) {\n    var i;\n    var source = 'SourceGraphic';\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    var filId = createElementID();\n    var fil = filtersFactory.createFilter(filId, true);\n    var count = 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects[type]) {\n        var Effect = registeredEffects[type].effect;\n        filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n        source = idPrefix + count;\n\n        if (registeredEffects[type].countsAsEffect) {\n          count += 1;\n        }\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (count) {\n      elem.globalData.defs.appendChild(fil);\n      elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  function registerEffect(id, effect, countsAsEffect) {\n    registeredEffects[id] = {\n      effect: effect,\n      countsAsEffect: countsAsEffect\n    };\n  }\n\n  function SVGBaseElement() {}\n\n  SVGBaseElement.prototype = {\n    initRendererElement: function initRendererElement() {\n      this.layerElement = createNS('g');\n    },\n    createContainerElements: function createContainerElements() {\n      this.matteElement = createNS('g');\n      this.transformedElement = this.layerElement;\n      this.maskedElement = this.layerElement;\n      this._sizeChanged = false;\n      var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n      var filId;\n      var fil;\n      var gg;\n\n      if (this.data.td) {\n        if (this.data.td == 3 || this.data.td == 1) {\n          // eslint-disable-line eqeqeq\n          var masker = createNS('mask');\n          masker.setAttribute('id', this.layerId);\n          masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha'); // eslint-disable-line eqeqeq\n\n          masker.appendChild(this.layerElement);\n          layerElementParent = masker;\n          this.globalData.defs.appendChild(masker); // This is only for IE and Edge when mask if of type alpha\n\n          if (!featureSupport.maskType && this.data.td == 1) {\n            // eslint-disable-line eqeqeq\n            masker.setAttribute('mask-type', 'luminance');\n            filId = createElementID();\n            fil = filtersFactory.createFilter(filId);\n            this.globalData.defs.appendChild(fil);\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            gg.appendChild(this.layerElement);\n            layerElementParent = gg;\n            masker.appendChild(gg);\n            gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          }\n        } else if (this.data.td == 2) {\n          // eslint-disable-line eqeqeq\n          var maskGroup = createNS('mask');\n          maskGroup.setAttribute('id', this.layerId);\n          maskGroup.setAttribute('mask-type', 'alpha');\n          var maskGrouper = createNS('g');\n          maskGroup.appendChild(maskGrouper);\n          filId = createElementID();\n          fil = filtersFactory.createFilter(filId); /// /\n          // This solution doesn't work on Android when meta tag with viewport attribute is set\n\n          /* var feColorMatrix = createNS('feColorMatrix');\r\n                  feColorMatrix.setAttribute('type', 'matrix');\r\n                  feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n                  feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n                  fil.appendChild(feColorMatrix); */\n          /// /\n\n          var feCTr = createNS('feComponentTransfer');\n          feCTr.setAttribute('in', 'SourceGraphic');\n          fil.appendChild(feCTr);\n          var feFunc = createNS('feFuncA');\n          feFunc.setAttribute('type', 'table');\n          feFunc.setAttribute('tableValues', '1.0 0.0');\n          feCTr.appendChild(feFunc); /// /\n\n          this.globalData.defs.appendChild(fil);\n          var alphaRect = createNS('rect');\n          alphaRect.setAttribute('width', this.comp.data.w);\n          alphaRect.setAttribute('height', this.comp.data.h);\n          alphaRect.setAttribute('x', '0');\n          alphaRect.setAttribute('y', '0');\n          alphaRect.setAttribute('fill', '#ffffff');\n          alphaRect.setAttribute('opacity', '0');\n          maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          maskGrouper.appendChild(alphaRect);\n          maskGrouper.appendChild(this.layerElement);\n          layerElementParent = maskGrouper;\n\n          if (!featureSupport.maskType) {\n            maskGroup.setAttribute('mask-type', 'luminance');\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            maskGrouper.appendChild(alphaRect);\n            gg.appendChild(this.layerElement);\n            layerElementParent = gg;\n            maskGrouper.appendChild(gg);\n          }\n\n          this.globalData.defs.appendChild(maskGroup);\n        }\n      } else if (this.data.tt) {\n        this.matteElement.appendChild(this.layerElement);\n        layerElementParent = this.matteElement;\n        this.baseElement = this.matteElement;\n      } else {\n        this.baseElement = this.layerElement;\n      }\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n      if (this.data.ty === 0 && !this.data.hd) {\n        var cp = createNS('clipPath');\n        var pt = createNS('path');\n        pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n        var clipId = createElementID();\n        cp.setAttribute('id', clipId);\n        cp.appendChild(pt);\n        this.globalData.defs.appendChild(cp);\n\n        if (this.checkMasks()) {\n          var cpGroup = createNS('g');\n          cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n          cpGroup.appendChild(this.layerElement);\n          this.transformedElement = cpGroup;\n\n          if (layerElementParent) {\n            layerElementParent.appendChild(this.transformedElement);\n          } else {\n            this.baseElement = this.transformedElement;\n          }\n        } else {\n          this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n        }\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      if (this.finalTransform._matMdf) {\n        this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\n      }\n    },\n    destroyBaseElement: function destroyBaseElement() {\n      this.layerElement = null;\n      this.matteElement = null;\n      this.maskManager.destroy();\n    },\n    getBaseElement: function getBaseElement() {\n      if (this.data.hd) {\n        return null;\n      }\n\n      return this.baseElement;\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n      this.renderableEffectsManager = new SVGEffects(this);\n    },\n    setMatte: function setMatte(id) {\n      if (!this.matteElement) {\n        return;\n      }\n\n      this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n    }\n  };\n\n  /**\r\n   * @file\r\n   * Handles AE's layer parenting property.\r\n   *\r\n   */\n  function HierarchyElement() {}\n\n  HierarchyElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes hierarchy properties\r\n       *\r\n       */\n    initHierarchy: function initHierarchy() {\n      // element's parent list\n      this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n      this._isParent = false;\n      this.checkParenting();\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer's hierarchy.\r\n       * @param {array} hierarch\r\n       * layer's parent list\r\n       *\r\n       */\n    setHierarchy: function setHierarchy(hierarchy) {\n      this.hierarchy = hierarchy;\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer as parent.\r\n       *\r\n       */\n    setAsParent: function setAsParent() {\n      this._isParent = true;\n    },\n\n    /**\r\n       * @function\r\n       * Searches layer's parenting chain\r\n       *\r\n       */\n    checkParenting: function checkParenting() {\n      if (this.data.parent !== undefined) {\n        this.comp.buildElementParenting(this, this.data.parent, []);\n      }\n    }\n  };\n\n  function RenderableDOMElement() {}\n\n  (function () {\n    var _prototype = {\n      initElement: function initElement(data, globalData, comp) {\n        this.initFrame();\n        this.initBaseData(data, globalData, comp);\n        this.initTransform(data, globalData, comp);\n        this.initHierarchy();\n        this.initRenderable();\n        this.initRendererElement();\n        this.createContainerElements();\n        this.createRenderableComponents();\n        this.createContent();\n        this.hide();\n      },\n      hide: function hide() {\n        // console.log('HIDE', this);\n        if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n          var elem = this.baseElement || this.layerElement;\n          elem.style.display = 'none';\n          this.hidden = true;\n        }\n      },\n      show: function show() {\n        // console.log('SHOW', this);\n        if (this.isInRange && !this.isTransparent) {\n          if (!this.data.hd) {\n            var elem = this.baseElement || this.layerElement;\n            elem.style.display = 'block';\n          }\n\n          this.hidden = false;\n          this._isFirstFrame = true;\n        }\n      },\n      renderFrame: function renderFrame() {\n        // If it is exported as hidden (data.hd === true) no need to render\n        // If it is not visible no need to render\n        if (this.data.hd || this.hidden) {\n          return;\n        }\n\n        this.renderTransform();\n        this.renderRenderable();\n        this.renderElement();\n        this.renderInnerContent();\n\n        if (this._isFirstFrame) {\n          this._isFirstFrame = false;\n        }\n      },\n      renderInnerContent: function renderInnerContent() {},\n      prepareFrame: function prepareFrame(num) {\n        this._mdf = false;\n        this.prepareRenderableFrame(num);\n        this.prepareProperties(num, this.isInRange);\n        this.checkTransparency();\n      },\n      destroy: function destroy() {\n        this.innerElem = null;\n        this.destroyBaseElement();\n      }\n    };\n    extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n  })();\n\n  function IImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initElement(data, globalData, comp);\n    this.sourceRect = {\n      top: 0,\n      left: 0,\n      width: this.assetData.w,\n      height: this.assetData.h\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n  IImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.innerElem = createNS('image');\n    this.innerElem.setAttribute('width', this.assetData.w + 'px');\n    this.innerElem.setAttribute('height', this.assetData.h + 'px');\n    this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n    this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n    this.layerElement.appendChild(this.innerElem);\n  };\n\n  IImageElement.prototype.sourceRectAtTime = function () {\n    return this.sourceRect;\n  };\n\n  function ProcessedElement(element, position) {\n    this.elem = element;\n    this.pos = position;\n  }\n\n  function IShapeElement() {}\n\n  IShapeElement.prototype = {\n    addShapeToModifiers: function addShapeToModifiers(data) {\n      var i;\n      var len = this.shapeModifiers.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapeModifiers[i].addShape(data);\n      }\n    },\n    isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n      var i = 0;\n      var len = this.shapeModifiers.length;\n\n      while (i < len) {\n        if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n    renderModifiers: function renderModifiers() {\n      if (!this.shapeModifiers.length) {\n        return;\n      }\n\n      var i;\n      var len = this.shapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].sh.reset();\n      }\n\n      len = this.shapeModifiers.length;\n      var shouldBreakProcess;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n        // TODO: find a better solution for this\n\n        if (shouldBreakProcess) {\n          break;\n        }\n      }\n    },\n    searchProcessedElement: function searchProcessedElement(elem) {\n      var elements = this.processedElements;\n      var i = 0;\n      var len = elements.length;\n\n      while (i < len) {\n        if (elements[i].elem === elem) {\n          return elements[i].pos;\n        }\n\n        i += 1;\n      }\n\n      return 0;\n    },\n    addProcessedElement: function addProcessedElement(elem, pos) {\n      var elements = this.processedElements;\n      var i = elements.length;\n\n      while (i) {\n        i -= 1;\n\n        if (elements[i].elem === elem) {\n          elements[i].pos = pos;\n          return;\n        }\n      }\n\n      elements.push(new ProcessedElement(elem, pos));\n    },\n    prepareFrame: function prepareFrame(num) {\n      this.prepareRenderableFrame(num);\n      this.prepareProperties(num, this.isInRange);\n    }\n  };\n\n  var lineCapEnum = {\n    1: 'butt',\n    2: 'round',\n    3: 'square'\n  };\n  var lineJoinEnum = {\n    1: 'miter',\n    2: 'round',\n    3: 'bevel'\n  };\n\n  function SVGShapeData(transformers, level, shape) {\n    this.caches = [];\n    this.styles = [];\n    this.transformers = transformers;\n    this.lStr = '';\n    this.sh = shape;\n    this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n    // For now, since shapes add up with other shapes. They have to be calculated every time.\n    // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n    this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n    var i = 0;\n    var len = transformers.length;\n\n    while (i < len) {\n      if (transformers[i].mProps.dynamicProperties.length) {\n        this._isAnimated = true;\n        break;\n      }\n\n      i += 1;\n    }\n  }\n\n  SVGShapeData.prototype.setAsAnimated = function () {\n    this._isAnimated = true;\n  };\n\n  function SVGStyleData(data, level) {\n    this.data = data;\n    this.type = data.ty;\n    this.d = '';\n    this.lvl = level;\n    this._mdf = false;\n    this.closed = data.hd === true;\n    this.pElem = createNS('path');\n    this.msElem = null;\n  }\n\n  SVGStyleData.prototype.reset = function () {\n    this.d = '';\n    this._mdf = false;\n  };\n\n  function DashProperty(elem, data, renderer, container) {\n    this.elem = elem;\n    this.frameId = -1;\n    this.dataProps = createSizedArray(data.length);\n    this.renderer = renderer;\n    this.k = false;\n    this.dashStr = '';\n    this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n    this.dashoffset = createTypedArray('float32', 1);\n    this.initDynamicPropertyContainer(container);\n    var i;\n    var len = data.length || 0;\n    var prop;\n\n    for (i = 0; i < len; i += 1) {\n      prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n      this.k = prop.k || this.k;\n      this.dataProps[i] = {\n        n: data[i].n,\n        p: prop\n      };\n    }\n\n    if (!this.k) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = this.k;\n  }\n\n  DashProperty.prototype.getValue = function (forceRender) {\n    if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n    this._mdf = this._mdf || forceRender;\n\n    if (this._mdf) {\n      var i = 0;\n      var len = this.dataProps.length;\n\n      if (this.renderer === 'svg') {\n        this.dashStr = '';\n      }\n\n      for (i = 0; i < len; i += 1) {\n        if (this.dataProps[i].n !== 'o') {\n          if (this.renderer === 'svg') {\n            this.dashStr += ' ' + this.dataProps[i].p.v;\n          } else {\n            this.dashArray[i] = this.dataProps[i].p.v;\n          }\n        } else {\n          this.dashoffset[0] = this.dataProps[i].p.v;\n        }\n      }\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], DashProperty);\n\n  function SVGStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n  function SVGFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n  function SVGNoStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n  function GradientProperty(elem, data, container) {\n    this.data = data;\n    this.c = createTypedArray('uint8c', data.p * 4);\n    var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n    this.o = createTypedArray('float32', cLength);\n    this._cmdf = false;\n    this._omdf = false;\n    this._collapsable = this.checkCollapsable();\n    this._hasOpacity = cLength;\n    this.initDynamicPropertyContainer(container);\n    this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n    this.k = this.prop.k;\n    this.getValue(true);\n  }\n\n  GradientProperty.prototype.comparePoints = function (values, points) {\n    var i = 0;\n    var len = this.o.length / 2;\n    var diff;\n\n    while (i < len) {\n      diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n      if (diff > 0.01) {\n        return false;\n      }\n\n      i += 1;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.checkCollapsable = function () {\n    if (this.o.length / 2 !== this.c.length / 4) {\n      return false;\n    }\n\n    if (this.data.k.k[0].s) {\n      var i = 0;\n      var len = this.data.k.k.length;\n\n      while (i < len) {\n        if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n          return false;\n        }\n\n        i += 1;\n      }\n    } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n      return false;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.getValue = function (forceRender) {\n    this.prop.getValue();\n    this._mdf = false;\n    this._cmdf = false;\n    this._omdf = false;\n\n    if (this.prop._mdf || forceRender) {\n      var i;\n      var len = this.data.p * 4;\n      var mult;\n      var val;\n\n      for (i = 0; i < len; i += 1) {\n        mult = i % 4 === 0 ? 100 : 255;\n        val = Math.round(this.prop.v[i] * mult);\n\n        if (this.c[i] !== val) {\n          this.c[i] = val;\n          this._cmdf = !forceRender;\n        }\n      }\n\n      if (this.o.length) {\n        len = this.prop.v.length;\n\n        for (i = this.data.p * 4; i < len; i += 1) {\n          mult = i % 2 === 0 ? 100 : 1;\n          val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n          if (this.o[i - this.data.p * 4] !== val) {\n            this.o[i - this.data.p * 4] = val;\n            this._omdf = !forceRender;\n          }\n        }\n      }\n\n      this._mdf = !forceRender;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n  function SVGGradientFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.initGradientData(elem, data, styleOb);\n  }\n\n  SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n    this.h = PropertyFactory.getProp(elem, data.h || {\n      k: 0\n    }, 0, 0.01, this);\n    this.a = PropertyFactory.getProp(elem, data.a || {\n      k: 0\n    }, 0, degToRads, this);\n    this.g = new GradientProperty(elem, data.g, this);\n    this.style = styleOb;\n    this.stops = [];\n    this.setGradientData(styleOb.pElem, data);\n    this.setGradientOpacity(data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n    var gradientId = createElementID();\n    var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n    gfill.setAttribute('id', gradientId);\n    gfill.setAttribute('spreadMethod', 'pad');\n    gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n    var stops = [];\n    var stop;\n    var j;\n    var jLen;\n    jLen = data.g.p * 4;\n\n    for (j = 0; j < jLen; j += 4) {\n      stop = createNS('stop');\n      gfill.appendChild(stop);\n      stops.push(stop);\n    }\n\n    pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n    this.gf = gfill;\n    this.cst = stops;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n    if (this.g._hasOpacity && !this.g._collapsable) {\n      var stop;\n      var j;\n      var jLen;\n      var mask = createNS('mask');\n      var maskElement = createNS('path');\n      mask.appendChild(maskElement);\n      var opacityId = createElementID();\n      var maskId = createElementID();\n      mask.setAttribute('id', maskId);\n      var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n      opFill.setAttribute('id', opacityId);\n      opFill.setAttribute('spreadMethod', 'pad');\n      opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n      jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n      var stops = this.stops;\n\n      for (j = data.g.p * 4; j < jLen; j += 2) {\n        stop = createNS('stop');\n        stop.setAttribute('stop-color', 'rgb(255,255,255)');\n        opFill.appendChild(stop);\n        stops.push(stop);\n      }\n\n      maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n      if (data.ty === 'gs') {\n        maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n        maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n        if (data.lj === 1) {\n          maskElement.setAttribute('stroke-miterlimit', data.ml);\n        }\n      }\n\n      this.of = opFill;\n      this.ms = mask;\n      this.ost = stops;\n      this.maskId = maskId;\n      styleOb.msElem = maskElement;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n  function SVGGradientStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.initGradientData(elem, data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n  function ShapeGroupData() {\n    this.it = [];\n    this.prevViewData = [];\n    this.gr = createNS('g');\n  }\n\n  function SVGTransformData(mProps, op, container) {\n    this.transform = {\n      mProps: mProps,\n      op: op,\n      container: container\n    };\n    this.elements = [];\n    this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n  }\n\n  var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n    if (length === 0) {\n      return '';\n    }\n\n    var _o = pathNodes.o;\n    var _i = pathNodes.i;\n    var _v = pathNodes.v;\n    var i;\n    var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n    for (i = 1; i < length; i += 1) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n    }\n\n    if (closed && length) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n      shapeString += 'z';\n    }\n\n    return shapeString;\n  };\n\n  var SVGElementsRenderer = function () {\n    var _identityMatrix = new Matrix();\n\n    var _matrixHelper = new Matrix();\n\n    var ob = {\n      createRenderFunction: createRenderFunction\n    };\n\n    function createRenderFunction(data) {\n      switch (data.ty) {\n        case 'fl':\n          return renderFill;\n\n        case 'gf':\n          return renderGradient;\n\n        case 'gs':\n          return renderGradientStroke;\n\n        case 'st':\n          return renderStroke;\n\n        case 'sh':\n        case 'el':\n        case 'rc':\n        case 'sr':\n          return renderPath;\n\n        case 'tr':\n          return renderContentTransform;\n\n        case 'no':\n          return renderNoop;\n\n        default:\n          return null;\n      }\n    }\n\n    function renderContentTransform(styleData, itemData, isFirstFrame) {\n      if (isFirstFrame || itemData.transform.op._mdf) {\n        itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n      }\n\n      if (isFirstFrame || itemData.transform.mProps._mdf) {\n        itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n      }\n    }\n\n    function renderNoop() {}\n\n    function renderPath(styleData, itemData, isFirstFrame) {\n      var j;\n      var jLen;\n      var pathStringTransformed;\n      var redraw;\n      var pathNodes;\n      var l;\n      var lLen = itemData.styles.length;\n      var lvl = itemData.lvl;\n      var paths;\n      var mat;\n      var props;\n      var iterations;\n      var k;\n\n      for (l = 0; l < lLen; l += 1) {\n        redraw = itemData.sh._mdf || isFirstFrame;\n\n        if (itemData.styles[l].lvl < lvl) {\n          mat = _matrixHelper.reset();\n          iterations = lvl - itemData.styles[l].lvl;\n          k = itemData.transformers.length - 1;\n\n          while (!redraw && iterations > 0) {\n            redraw = itemData.transformers[k].mProps._mdf || redraw;\n            iterations -= 1;\n            k -= 1;\n          }\n\n          if (redraw) {\n            iterations = lvl - itemData.styles[l].lvl;\n            k = itemData.transformers.length - 1;\n\n            while (iterations > 0) {\n              props = itemData.transformers[k].mProps.v.props;\n              mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n              iterations -= 1;\n              k -= 1;\n            }\n          }\n        } else {\n          mat = _identityMatrix;\n        }\n\n        paths = itemData.sh.paths;\n        jLen = paths._length;\n\n        if (redraw) {\n          pathStringTransformed = '';\n\n          for (j = 0; j < jLen; j += 1) {\n            pathNodes = paths.shapes[j];\n\n            if (pathNodes && pathNodes._length) {\n              pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n            }\n          }\n\n          itemData.caches[l] = pathStringTransformed;\n        } else {\n          pathStringTransformed = itemData.caches[l];\n        }\n\n        itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n        itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n      }\n    }\n\n    function renderFill(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n\n      if (itemData.c._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n      }\n    }\n\n    function renderGradientStroke(styleData, itemData, isFirstFrame) {\n      renderGradient(styleData, itemData, isFirstFrame);\n      renderStroke(styleData, itemData, isFirstFrame);\n    }\n\n    function renderGradient(styleData, itemData, isFirstFrame) {\n      var gfill = itemData.gf;\n      var hasOpacity = itemData.g._hasOpacity;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (itemData.o._mdf || isFirstFrame) {\n        var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n        itemData.style.pElem.setAttribute(attr, itemData.o.v);\n      }\n\n      if (itemData.s._mdf || isFirstFrame) {\n        var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n        var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n        gfill.setAttribute(attr1, pt1[0]);\n        gfill.setAttribute(attr2, pt1[1]);\n\n        if (hasOpacity && !itemData.g._collapsable) {\n          itemData.of.setAttribute(attr1, pt1[0]);\n          itemData.of.setAttribute(attr2, pt1[1]);\n        }\n      }\n\n      var stops;\n      var i;\n      var len;\n      var stop;\n\n      if (itemData.g._cmdf || isFirstFrame) {\n        stops = itemData.cst;\n        var cValues = itemData.g.c;\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n          stop.setAttribute('offset', cValues[i * 4] + '%');\n          stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n        }\n      }\n\n      if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n        var oValues = itemData.g.o;\n\n        if (itemData.g._collapsable) {\n          stops = itemData.cst;\n        } else {\n          stops = itemData.ost;\n        }\n\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n\n          if (!itemData.g._collapsable) {\n            stop.setAttribute('offset', oValues[i * 2] + '%');\n          }\n\n          stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n        }\n      }\n\n      if (styleData.t === 1) {\n        if (itemData.e._mdf || isFirstFrame) {\n          gfill.setAttribute('x2', pt2[0]);\n          gfill.setAttribute('y2', pt2[1]);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('x2', pt2[0]);\n            itemData.of.setAttribute('y2', pt2[1]);\n          }\n        }\n      } else {\n        var rad;\n\n        if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n          rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          gfill.setAttribute('r', rad);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('r', rad);\n          }\n        }\n\n        if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n          if (!rad) {\n            rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          }\n\n          var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n          var percent = itemData.h.v;\n\n          if (percent >= 1) {\n            percent = 0.99;\n          } else if (percent <= -1) {\n            percent = -0.99;\n          }\n\n          var dist = rad * percent;\n          var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n          var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n          gfill.setAttribute('fx', x);\n          gfill.setAttribute('fy', y);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('fx', x);\n            itemData.of.setAttribute('fy', y);\n          }\n        } // gfill.setAttribute('fy','200');\n\n      }\n    }\n\n    function renderStroke(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n      var d = itemData.d;\n\n      if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n        styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n        styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n      }\n\n      if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n        styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n      }\n\n      if (itemData.w._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n        if (styleElem.msElem) {\n          styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n        }\n      }\n    }\n\n    return ob;\n  }();\n\n  function SVGShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n  SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n  SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n  SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n  SVGShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n  };\n  /*\r\n  This method searches for multiple shapes that affect a single element and one of them is animated\r\n  */\n\n\n  SVGShapeElement.prototype.filterUniqueShapes = function () {\n    var i;\n    var len = this.shapes.length;\n    var shape;\n    var j;\n    var jLen = this.stylesList.length;\n    var style;\n    var tempShapes = [];\n    var areAnimated = false;\n\n    for (j = 0; j < jLen; j += 1) {\n      style = this.stylesList[j];\n      areAnimated = false;\n      tempShapes.length = 0;\n\n      for (i = 0; i < len; i += 1) {\n        shape = this.shapes[i];\n\n        if (shape.styles.indexOf(style) !== -1) {\n          tempShapes.push(shape);\n          areAnimated = shape._isAnimated || areAnimated;\n        }\n      }\n\n      if (tempShapes.length > 1 && areAnimated) {\n        this.setShapesAsAnimated(tempShapes);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n    var i;\n    var len = shapes.length;\n\n    for (i = 0; i < len; i += 1) {\n      shapes[i].setAsAnimated();\n    }\n  };\n\n  SVGShapeElement.prototype.createStyleElement = function (data, level) {\n    // TODO: prevent drawing of hidden styles\n    var elementData;\n    var styleOb = new SVGStyleData(data, level);\n    var pathElement = styleOb.pElem;\n\n    if (data.ty === 'st') {\n      elementData = new SVGStrokeStyleData(this, data, styleOb);\n    } else if (data.ty === 'fl') {\n      elementData = new SVGFillStyleData(this, data, styleOb);\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n      elementData = new GradientConstructor(this, data, styleOb);\n      this.globalData.defs.appendChild(elementData.gf);\n\n      if (elementData.maskId) {\n        this.globalData.defs.appendChild(elementData.ms);\n        this.globalData.defs.appendChild(elementData.of);\n        pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n      }\n    } else if (data.ty === 'no') {\n      elementData = new SVGNoStyleData(this, data, styleOb);\n    }\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n      pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n      pathElement.setAttribute('fill-opacity', '0');\n\n      if (data.lj === 1) {\n        pathElement.setAttribute('stroke-miterlimit', data.ml);\n      }\n    }\n\n    if (data.r === 2) {\n      pathElement.setAttribute('fill-rule', 'evenodd');\n    }\n\n    if (data.ln) {\n      pathElement.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      pathElement.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    this.stylesList.push(styleOb);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createGroupElement = function (data) {\n    var elementData = new ShapeGroupData();\n\n    if (data.ln) {\n      elementData.gr.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      elementData.gr.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createTransformElement = function (data, container) {\n    var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n    var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n    var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n    var i = 0;\n    var len = this.animatedContents.length;\n\n    while (i < len) {\n      if (this.animatedContents[i].element === element) {\n        return;\n      }\n\n      i += 1;\n    }\n\n    this.animatedContents.push({\n      fn: SVGElementsRenderer.createRenderFunction(data),\n      element: element,\n      data: data\n    });\n  };\n\n  SVGShapeElement.prototype.setElementStyles = function (elementData) {\n    var arr = elementData.styles;\n    var j;\n    var jLen = this.stylesList.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      if (!this.stylesList[j].closed) {\n        arr.push(this.stylesList[j]);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n  };\n\n  SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n    var ownTransformers = [].concat(transformers);\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var currentTransform;\n    var modifier;\n    var processedPos;\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._render = render;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], level);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        if (arr[i]._render) {\n          if (itemsData[i].style.pElem.parentNode !== container) {\n            container.appendChild(itemsData[i].style.pElem);\n          }\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n        if (arr[i]._render) {\n          if (itemsData[i].gr.parentNode !== container) {\n            container.appendChild(itemsData[i].gr);\n          }\n        }\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          itemsData[i] = this.createTransformElement(arr[i], container);\n        }\n\n        currentTransform = itemsData[i].transform;\n        ownTransformers.push(currentTransform);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n        }\n\n        this.setElementStyles(itemsData[i]);\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          render = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    len = ownStyles.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownStyles[i].closed = true;\n    }\n\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  SVGShapeElement.prototype.renderInnerContent = function () {\n    this.renderModifiers();\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.stylesList[i].reset();\n    }\n\n    this.renderShape();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.stylesList[i]._mdf || this._isFirstFrame) {\n        if (this.stylesList[i].msElem) {\n          this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n          this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n        }\n\n        this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.renderShape = function () {\n    var i;\n    var len = this.animatedContents.length;\n    var animatedContent;\n\n    for (i = 0; i < len; i += 1) {\n      animatedContent = this.animatedContents[i];\n\n      if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n        animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.destroy = function () {\n    this.destroyBaseElement();\n    this.shapesData = null;\n    this.itemsData = null;\n  };\n\n  function LetterProps(o, sw, sc, fc, m, p) {\n    this.o = o;\n    this.sw = sw;\n    this.sc = sc;\n    this.fc = fc;\n    this.m = m;\n    this.p = p;\n    this._mdf = {\n      o: true,\n      sw: !!sw,\n      sc: !!sc,\n      fc: !!fc,\n      m: true,\n      p: true\n    };\n  }\n\n  LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n    this._mdf.o = false;\n    this._mdf.sw = false;\n    this._mdf.sc = false;\n    this._mdf.fc = false;\n    this._mdf.m = false;\n    this._mdf.p = false;\n    var updated = false;\n\n    if (this.o !== o) {\n      this.o = o;\n      this._mdf.o = true;\n      updated = true;\n    }\n\n    if (this.sw !== sw) {\n      this.sw = sw;\n      this._mdf.sw = true;\n      updated = true;\n    }\n\n    if (this.sc !== sc) {\n      this.sc = sc;\n      this._mdf.sc = true;\n      updated = true;\n    }\n\n    if (this.fc !== fc) {\n      this.fc = fc;\n      this._mdf.fc = true;\n      updated = true;\n    }\n\n    if (this.m !== m) {\n      this.m = m;\n      this._mdf.m = true;\n      updated = true;\n    }\n\n    if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n      this.p = p;\n      this._mdf.p = true;\n      updated = true;\n    }\n\n    return updated;\n  };\n\n  function TextProperty(elem, data) {\n    this._frameId = initialDefaultFrame;\n    this.pv = '';\n    this.v = '';\n    this.kf = false;\n    this._isFirstFrame = true;\n    this._mdf = false;\n    this.data = data;\n    this.elem = elem;\n    this.comp = this.elem.comp;\n    this.keysIndex = 0;\n    this.canResize = false;\n    this.minimumFontSize = 1;\n    this.effectsSequence = [];\n    this.currentData = {\n      ascent: 0,\n      boxWidth: this.defaultBoxWidth,\n      f: '',\n      fStyle: '',\n      fWeight: '',\n      fc: '',\n      j: '',\n      justifyOffset: '',\n      l: [],\n      lh: 0,\n      lineWidths: [],\n      ls: '',\n      of: '',\n      s: '',\n      sc: '',\n      sw: 0,\n      t: 0,\n      tr: 0,\n      sz: 0,\n      ps: null,\n      fillColorAnim: false,\n      strokeColorAnim: false,\n      strokeWidthAnim: false,\n      yOffset: 0,\n      finalSize: 0,\n      finalText: [],\n      finalLineHeight: 0,\n      __complete: false\n    };\n    this.copyData(this.currentData, this.data.d.k[0].s);\n\n    if (!this.searchProperty()) {\n      this.completeTextData(this.currentData);\n    }\n  }\n\n  TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n  TextProperty.prototype.copyData = function (obj, data) {\n    for (var s in data) {\n      if (Object.prototype.hasOwnProperty.call(data, s)) {\n        obj[s] = data[s];\n      }\n    }\n\n    return obj;\n  };\n\n  TextProperty.prototype.setCurrentData = function (data) {\n    if (!data.__complete) {\n      this.completeTextData(data);\n    }\n\n    this.currentData = data;\n    this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n    this._mdf = true;\n  };\n\n  TextProperty.prototype.searchProperty = function () {\n    return this.searchKeyframes();\n  };\n\n  TextProperty.prototype.searchKeyframes = function () {\n    this.kf = this.data.d.k.length > 1;\n\n    if (this.kf) {\n      this.addEffect(this.getKeyframeValue.bind(this));\n    }\n\n    return this.kf;\n  };\n\n  TextProperty.prototype.addEffect = function (effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.getValue = function (_finalValue) {\n    if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n      return;\n    }\n\n    this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n    var currentValue = this.currentData;\n    var currentIndex = this.keysIndex;\n\n    if (this.lock) {\n      this.setCurrentData(this.currentData);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = false;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n    for (i = 0; i < len; i += 1) {\n      // Checking if index changed to prevent creating a new object every time the expression updates.\n      if (currentIndex !== this.keysIndex) {\n        finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n      } else {\n        finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n      }\n    }\n\n    if (currentValue !== finalValue) {\n      this.setCurrentData(finalValue);\n    }\n\n    this.v = this.currentData;\n    this.pv = this.v;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  };\n\n  TextProperty.prototype.getKeyframeValue = function () {\n    var textKeys = this.data.d.k;\n    var frameNum = this.elem.comp.renderedFrame;\n    var i = 0;\n    var len = textKeys.length;\n\n    while (i <= len - 1) {\n      if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    if (this.keysIndex !== i) {\n      this.keysIndex = i;\n    }\n\n    return this.data.d.k[this.keysIndex].s;\n  };\n\n  TextProperty.prototype.buildFinalText = function (text) {\n    var charactersArray = [];\n    var i = 0;\n    var len = text.length;\n    var charCode;\n    var secondCharCode;\n    var shouldCombine = false;\n\n    while (i < len) {\n      charCode = text.charCodeAt(i);\n\n      if (FontManager.isCombinedCharacter(charCode)) {\n        charactersArray[charactersArray.length - 1] += text.charAt(i);\n      } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n        secondCharCode = text.charCodeAt(i + 1);\n\n        if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n          if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\n            charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n            shouldCombine = false;\n          } else {\n            charactersArray.push(text.substr(i, 2));\n          }\n\n          i += 1;\n        } else {\n          charactersArray.push(text.charAt(i));\n        }\n      } else if (charCode > 0xDBFF) {\n        secondCharCode = text.charCodeAt(i + 1);\n\n        if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\n          shouldCombine = true;\n          charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n          i += 1;\n        } else {\n          charactersArray.push(text.charAt(i));\n        }\n      } else if (FontManager.isZeroWidthJoiner(charCode)) {\n        charactersArray[charactersArray.length - 1] += text.charAt(i);\n        shouldCombine = true;\n      } else {\n        charactersArray.push(text.charAt(i));\n      }\n\n      i += 1;\n    }\n\n    return charactersArray;\n  };\n\n  TextProperty.prototype.completeTextData = function (documentData) {\n    documentData.__complete = true;\n    var fontManager = this.elem.globalData.fontManager;\n    var data = this.data;\n    var letters = [];\n    var i;\n    var len;\n    var newLineFlag;\n    var index = 0;\n    var val;\n    var anchorGrouping = data.m.g;\n    var currentSize = 0;\n    var currentPos = 0;\n    var currentLine = 0;\n    var lineWidths = [];\n    var lineWidth = 0;\n    var maxLineWidth = 0;\n    var j;\n    var jLen;\n    var fontData = fontManager.getFontByName(documentData.f);\n    var charData;\n    var cLength = 0;\n    var fontProps = getFontProperties(fontData);\n    documentData.fWeight = fontProps.weight;\n    documentData.fStyle = fontProps.style;\n    documentData.finalSize = documentData.s;\n    documentData.finalText = this.buildFinalText(documentData.t);\n    len = documentData.finalText.length;\n    documentData.finalLineHeight = documentData.lh;\n    var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n    var charCode;\n\n    if (documentData.sz) {\n      var flag = true;\n      var boxWidth = documentData.sz[0];\n      var boxHeight = documentData.sz[1];\n      var currentHeight;\n      var finalText;\n\n      while (flag) {\n        finalText = this.buildFinalText(documentData.t);\n        currentHeight = 0;\n        lineWidth = 0;\n        len = finalText.length;\n        trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n        var lastSpaceIndex = -1;\n\n        for (i = 0; i < len; i += 1) {\n          charCode = finalText[i].charCodeAt(0);\n          newLineFlag = false;\n\n          if (finalText[i] === ' ') {\n            lastSpaceIndex = i;\n          } else if (charCode === 13 || charCode === 3) {\n            lineWidth = 0;\n            newLineFlag = true;\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n          }\n\n          if (fontManager.chars) {\n            charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n            cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n          } else {\n            // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n            cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n          }\n\n          if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n            if (lastSpaceIndex === -1) {\n              len += 1;\n            } else {\n              i = lastSpaceIndex;\n            }\n\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n            finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n            lastSpaceIndex = -1;\n            lineWidth = 0;\n          } else {\n            lineWidth += cLength;\n            lineWidth += trackingOffset;\n          }\n        }\n\n        currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n        if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n          documentData.finalSize -= 1;\n          documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n        } else {\n          documentData.finalText = finalText;\n          len = documentData.finalText.length;\n          flag = false;\n        }\n      }\n    }\n\n    lineWidth = -trackingOffset;\n    cLength = 0;\n    var uncollapsedSpaces = 0;\n    var currentChar;\n\n    for (i = 0; i < len; i += 1) {\n      newLineFlag = false;\n      currentChar = documentData.finalText[i];\n      charCode = currentChar.charCodeAt(0);\n\n      if (charCode === 13 || charCode === 3) {\n        uncollapsedSpaces = 0;\n        lineWidths.push(lineWidth);\n        maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n        lineWidth = -2 * trackingOffset;\n        val = '';\n        newLineFlag = true;\n        currentLine += 1;\n      } else {\n        val = currentChar;\n      }\n\n      if (fontManager.chars) {\n        charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n        cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n      } else {\n        // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n        // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n        cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n      } //\n\n\n      if (currentChar === ' ') {\n        uncollapsedSpaces += cLength + trackingOffset;\n      } else {\n        lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n        uncollapsedSpaces = 0;\n      }\n\n      letters.push({\n        l: cLength,\n        an: cLength,\n        add: currentSize,\n        n: newLineFlag,\n        anIndexes: [],\n        val: val,\n        line: currentLine,\n        animatorJustifyOffset: 0\n      });\n\n      if (anchorGrouping == 2) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || val === ' ' || i === len - 1) {\n          if (val === '' || val === ' ') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          index += 1;\n          currentSize = 0;\n        }\n      } else if (anchorGrouping == 3) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || i === len - 1) {\n          if (val === '') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          currentSize = 0;\n          index += 1;\n        }\n      } else {\n        letters[index].ind = index;\n        letters[index].extra = 0;\n        index += 1;\n      }\n    }\n\n    documentData.l = letters;\n    maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n    lineWidths.push(lineWidth);\n\n    if (documentData.sz) {\n      documentData.boxWidth = documentData.sz[0];\n      documentData.justifyOffset = 0;\n    } else {\n      documentData.boxWidth = maxLineWidth;\n\n      switch (documentData.j) {\n        case 1:\n          documentData.justifyOffset = -documentData.boxWidth;\n          break;\n\n        case 2:\n          documentData.justifyOffset = -documentData.boxWidth / 2;\n          break;\n\n        default:\n          documentData.justifyOffset = 0;\n      }\n    }\n\n    documentData.lineWidths = lineWidths;\n    var animators = data.a;\n    var animatorData;\n    var letterData;\n    jLen = animators.length;\n    var based;\n    var ind;\n    var indexes = [];\n\n    for (j = 0; j < jLen; j += 1) {\n      animatorData = animators[j];\n\n      if (animatorData.a.sc) {\n        documentData.strokeColorAnim = true;\n      }\n\n      if (animatorData.a.sw) {\n        documentData.strokeWidthAnim = true;\n      }\n\n      if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n        documentData.fillColorAnim = true;\n      }\n\n      ind = 0;\n      based = animatorData.s.b;\n\n      for (i = 0; i < len; i += 1) {\n        letterData = letters[i];\n        letterData.anIndexes[j] = ind;\n\n        if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n          // eslint-disable-line eqeqeq\n          if (animatorData.s.rn === 1) {\n            indexes.push(ind);\n          }\n\n          ind += 1;\n        }\n      }\n\n      data.a[j].s.totalChars = ind;\n      var currentInd = -1;\n      var newInd;\n\n      if (animatorData.s.rn === 1) {\n        for (i = 0; i < len; i += 1) {\n          letterData = letters[i];\n\n          if (currentInd != letterData.anIndexes[j]) {\n            // eslint-disable-line eqeqeq\n            currentInd = letterData.anIndexes[j];\n            newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n          }\n\n          letterData.anIndexes[j] = newInd;\n        }\n      }\n    }\n\n    documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n    documentData.ls = documentData.ls || 0;\n    documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n  };\n\n  TextProperty.prototype.updateDocumentData = function (newData, index) {\n    index = index === undefined ? this.keysIndex : index;\n    var dData = this.copyData({}, this.data.d.k[index].s);\n    dData = this.copyData(dData, newData);\n    this.data.d.k[index].s = dData;\n    this.recalculate(index);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.recalculate = function (index) {\n    var dData = this.data.d.k[index].s;\n    dData.__complete = false;\n    this.keysIndex = 0;\n    this._isFirstFrame = true;\n    this.getValue(dData);\n  };\n\n  TextProperty.prototype.canResizeFont = function (_canResize) {\n    this.canResize = _canResize;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n    this.minimumFontSize = Math.floor(_fontValue) || 1;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  var TextSelectorProp = function () {\n    var max = Math.max;\n    var min = Math.min;\n    var floor = Math.floor;\n\n    function TextSelectorPropFactory(elem, data) {\n      this._currentTextLength = -1;\n      this.k = false;\n      this.data = data;\n      this.elem = elem;\n      this.comp = elem.comp;\n      this.finalS = 0;\n      this.finalE = 0;\n      this.initDynamicPropertyContainer(elem);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: 0\n      }, 0, 0, this);\n\n      if ('e' in data) {\n        this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n      } else {\n        this.e = {\n          v: 100\n        };\n      }\n\n      this.o = PropertyFactory.getProp(elem, data.o || {\n        k: 0\n      }, 0, 0, this);\n      this.xe = PropertyFactory.getProp(elem, data.xe || {\n        k: 0\n      }, 0, 0, this);\n      this.ne = PropertyFactory.getProp(elem, data.ne || {\n        k: 0\n      }, 0, 0, this);\n      this.sm = PropertyFactory.getProp(elem, data.sm || {\n        k: 100\n      }, 0, 0, this);\n      this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n      if (!this.dynamicProperties.length) {\n        this.getValue();\n      }\n    }\n\n    TextSelectorPropFactory.prototype = {\n      getMult: function getMult(ind) {\n        if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n          this.getValue();\n        }\n\n        var x1 = 0;\n        var y1 = 0;\n        var x2 = 1;\n        var y2 = 1;\n\n        if (this.ne.v > 0) {\n          x1 = this.ne.v / 100.0;\n        } else {\n          y1 = -this.ne.v / 100.0;\n        }\n\n        if (this.xe.v > 0) {\n          x2 = 1.0 - this.xe.v / 100.0;\n        } else {\n          y2 = 1.0 + this.xe.v / 100.0;\n        }\n\n        var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n        var mult = 0;\n        var s = this.finalS;\n        var e = this.finalE;\n        var type = this.data.sh;\n\n        if (type === 2) {\n          if (e === s) {\n            mult = ind >= e ? 1 : 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 3) {\n          if (e === s) {\n            mult = ind >= e ? 0 : 1;\n          } else {\n            mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 4) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n            if (mult < 0.5) {\n              mult *= 2;\n            } else {\n              mult = 1 - 2 * (mult - 0.5);\n            }\n          }\n\n          mult = easer(mult);\n        } else if (type === 5) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            var tot = e - s;\n            /* ind += 0.5;\r\n                      mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            var x = -tot / 2 + ind;\n            var a = tot / 2;\n            mult = Math.sqrt(1 - x * x / (a * a));\n          }\n\n          mult = easer(mult);\n        } else if (type === 6) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n          }\n\n          mult = easer(mult);\n        } else {\n          if (ind >= floor(s)) {\n            if (ind - s < 0) {\n              mult = max(0, min(min(e, 1) - (s - ind), 1));\n            } else {\n              mult = max(0, min(e - ind, 1));\n            }\n          }\n\n          mult = easer(mult);\n        } // Smoothness implementation.\n        // The smoothness represents a reduced range of the original [0; 1] range.\n        // if smoothness is 25%, the new range will be [0.375; 0.625]\n        // Steps are:\n        // - find the lower value of the new range (threshold)\n        // - if multiplier is smaller than that value, floor it to 0\n        // - if it is larger,\n        //     - subtract the threshold\n        //     - divide it by the smoothness (this will return the range to [0; 1])\n        // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n        if (this.sm.v !== 100) {\n          var smoothness = this.sm.v * 0.01;\n\n          if (smoothness === 0) {\n            smoothness = 0.00000001;\n          }\n\n          var threshold = 0.5 - smoothness * 0.5;\n\n          if (mult < threshold) {\n            mult = 0;\n          } else {\n            mult = (mult - threshold) / smoothness;\n\n            if (mult > 1) {\n              mult = 1;\n            }\n          }\n        }\n\n        return mult * this.a.v;\n      },\n      getValue: function getValue(newCharsFlag) {\n        this.iterateDynamicProperties();\n        this._mdf = newCharsFlag || this._mdf;\n        this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n        if (newCharsFlag && this.data.r === 2) {\n          this.e.v = this._currentTextLength;\n        }\n\n        var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n        var o = this.o.v / divisor;\n        var s = this.s.v / divisor + o;\n        var e = this.e.v / divisor + o;\n\n        if (s > e) {\n          var _s = s;\n          s = e;\n          e = _s;\n        }\n\n        this.finalS = s;\n        this.finalE = e;\n      }\n    };\n    extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n    function getTextSelectorProp(elem, data, arr) {\n      return new TextSelectorPropFactory(elem, data, arr);\n    }\n\n    return {\n      getTextSelectorProp: getTextSelectorProp\n    };\n  }();\n\n  function TextAnimatorDataProperty(elem, animatorProps, container) {\n    var defaultData = {\n      propType: false\n    };\n    var getProp = PropertyFactory.getProp;\n    var textAnimatorAnimatables = animatorProps.a;\n    this.a = {\n      r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n      rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n      ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n      sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n      sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n      s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n      a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n      o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n      p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n      sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n      sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n      fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n      fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n      fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n      fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n      t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n    };\n    this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n    this.s.t = animatorProps.s.t;\n  }\n\n  function TextAnimatorProperty(textData, renderType, elem) {\n    this._isFirstFrame = true;\n    this._hasMaskedPath = false;\n    this._frameId = -1;\n    this._textData = textData;\n    this._renderType = renderType;\n    this._elem = elem;\n    this._animatorsData = createSizedArray(this._textData.a.length);\n    this._pathData = {};\n    this._moreOptions = {\n      alignment: {}\n    };\n    this.renderedLetters = [];\n    this.lettersChangedFlag = false;\n    this.initDynamicPropertyContainer(elem);\n  }\n\n  TextAnimatorProperty.prototype.searchProperties = function () {\n    var i;\n    var len = this._textData.a.length;\n    var animatorProps;\n    var getProp = PropertyFactory.getProp;\n\n    for (i = 0; i < len; i += 1) {\n      animatorProps = this._textData.a[i];\n      this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n    }\n\n    if (this._textData.p && 'm' in this._textData.p) {\n      this._pathData = {\n        a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n        f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n        l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n        r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n        p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n        m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n      };\n      this._hasMaskedPath = true;\n    } else {\n      this._hasMaskedPath = false;\n    }\n\n    this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n  };\n\n  TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n    this.lettersChangedFlag = lettersChangedFlag;\n\n    if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n      return;\n    }\n\n    this._isFirstFrame = false;\n    var alignment = this._moreOptions.alignment.v;\n    var animators = this._animatorsData;\n    var textData = this._textData;\n    var matrixHelper = this.mHelper;\n    var renderType = this._renderType;\n    var renderedLettersCount = this.renderedLetters.length;\n    var xPos;\n    var yPos;\n    var i;\n    var len;\n    var letters = documentData.l;\n    var pathInfo;\n    var currentLength;\n    var currentPoint;\n    var segmentLength;\n    var flag;\n    var pointInd;\n    var segmentInd;\n    var prevPoint;\n    var points;\n    var segments;\n    var partialLength;\n    var totalLength;\n    var perc;\n    var tanAngle;\n    var mask;\n\n    if (this._hasMaskedPath) {\n      mask = this._pathData.m;\n\n      if (!this._pathData.n || this._pathData._mdf) {\n        var paths = mask.v;\n\n        if (this._pathData.r.v) {\n          paths = paths.reverse();\n        } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n        pathInfo = {\n          tLength: 0,\n          segments: []\n        };\n        len = paths._length - 1;\n        var bezierData;\n        totalLength = 0;\n\n        for (i = 0; i < len; i += 1) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        i = len;\n\n        if (mask.v.c) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        this._pathData.pi = pathInfo;\n      }\n\n      pathInfo = this._pathData.pi;\n      currentLength = this._pathData.f.v;\n      segmentInd = 0;\n      pointInd = 1;\n      segmentLength = 0;\n      flag = true;\n      segments = pathInfo.segments;\n\n      if (currentLength < 0 && mask.v.c) {\n        if (pathInfo.tLength < Math.abs(currentLength)) {\n          currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n        }\n\n        segmentInd = segments.length - 1;\n        points = segments[segmentInd].points;\n        pointInd = points.length - 1;\n\n        while (currentLength < 0) {\n          currentLength += points[pointInd].partialLength;\n          pointInd -= 1;\n\n          if (pointInd < 0) {\n            segmentInd -= 1;\n            points = segments[segmentInd].points;\n            pointInd = points.length - 1;\n          }\n        }\n      }\n\n      points = segments[segmentInd].points;\n      prevPoint = points[pointInd - 1];\n      currentPoint = points[pointInd];\n      partialLength = currentPoint.partialLength;\n    }\n\n    len = letters.length;\n    xPos = 0;\n    yPos = 0;\n    var yOff = documentData.finalSize * 1.2 * 0.714;\n    var firstLine = true;\n    var animatorProps;\n    var animatorSelector;\n    var j;\n    var jLen;\n    var letterValue;\n    jLen = animators.length;\n    var mult;\n    var ind = -1;\n    var offf;\n    var xPathPos;\n    var yPathPos;\n    var initPathPos = currentLength;\n    var initSegmentInd = segmentInd;\n    var initPointInd = pointInd;\n    var currentLine = -1;\n    var elemOpacity;\n    var sc;\n    var sw;\n    var fc;\n    var k;\n    var letterSw;\n    var letterSc;\n    var letterFc;\n    var letterM = '';\n    var letterP = this.defaultPropsArray;\n    var letterO; //\n\n    if (documentData.j === 2 || documentData.j === 1) {\n      var animatorJustifyOffset = 0;\n      var animatorFirstCharOffset = 0;\n      var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n      var lastIndex = 0;\n      var isNewLine = true;\n\n      for (i = 0; i < len; i += 1) {\n        if (letters[i].n) {\n          if (animatorJustifyOffset) {\n            animatorJustifyOffset += animatorFirstCharOffset;\n          }\n\n          while (lastIndex < i) {\n            letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n            lastIndex += 1;\n          }\n\n          animatorJustifyOffset = 0;\n          isNewLine = true;\n        } else {\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.t.propType) {\n              if (isNewLine && documentData.j === 2) {\n                animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n              }\n\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n              } else {\n                animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n              }\n            }\n          }\n\n          isNewLine = false;\n        }\n      }\n\n      if (animatorJustifyOffset) {\n        animatorJustifyOffset += animatorFirstCharOffset;\n      }\n\n      while (lastIndex < i) {\n        letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n        lastIndex += 1;\n      }\n    } //\n\n\n    for (i = 0; i < len; i += 1) {\n      matrixHelper.reset();\n      elemOpacity = 1;\n\n      if (letters[i].n) {\n        xPos = 0;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        currentLength = initPathPos;\n        firstLine = false;\n\n        if (this._hasMaskedPath) {\n          segmentInd = initSegmentInd;\n          pointInd = initPointInd;\n          points = segments[segmentInd].points;\n          prevPoint = points[pointInd - 1];\n          currentPoint = points[pointInd];\n          partialLength = currentPoint.partialLength;\n          segmentLength = 0;\n        }\n\n        letterM = '';\n        letterFc = '';\n        letterSw = '';\n        letterO = '';\n        letterP = this.defaultPropsArray;\n      } else {\n        if (this._hasMaskedPath) {\n          if (currentLine !== letters[i].line) {\n            switch (documentData.j) {\n              case 1:\n                currentLength += totalLength - documentData.lineWidths[letters[i].line];\n                break;\n\n              case 2:\n                currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n                break;\n\n              default:\n                break;\n            }\n\n            currentLine = letters[i].line;\n          }\n\n          if (ind !== letters[i].ind) {\n            if (letters[ind]) {\n              currentLength += letters[ind].extra;\n            }\n\n            currentLength += letters[i].an / 2;\n            ind = letters[i].ind;\n          }\n\n          currentLength += alignment[0] * letters[i].an * 0.005;\n          var animatorOffset = 0;\n\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.p.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.p.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.p.v[0] * mult;\n              }\n            }\n\n            if (animatorProps.a.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.a.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.a.v[0] * mult;\n              }\n            }\n          }\n\n          flag = true; // Force alignment only works with a single line for now\n\n          if (this._pathData.a.v) {\n            currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n            currentLength += this._pathData.f.v;\n          }\n\n          while (flag) {\n            if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n              perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n              xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n              yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n              matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n              flag = false;\n            } else if (points) {\n              segmentLength += currentPoint.partialLength;\n              pointInd += 1;\n\n              if (pointInd >= points.length) {\n                pointInd = 0;\n                segmentInd += 1;\n\n                if (!segments[segmentInd]) {\n                  if (mask.v.c) {\n                    pointInd = 0;\n                    segmentInd = 0;\n                    points = segments[segmentInd].points;\n                  } else {\n                    segmentLength -= currentPoint.partialLength;\n                    points = null;\n                  }\n                } else {\n                  points = segments[segmentInd].points;\n                }\n              }\n\n              if (points) {\n                prevPoint = currentPoint;\n                currentPoint = points[pointInd];\n                partialLength = currentPoint.partialLength;\n              }\n            }\n          }\n\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0);\n        } else {\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n          matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.t.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n            if (xPos !== 0 || documentData.j !== 0) {\n              if (this._hasMaskedPath) {\n                if (mult.length) {\n                  currentLength += animatorProps.t.v * mult[0];\n                } else {\n                  currentLength += animatorProps.t.v * mult;\n                }\n              } else if (mult.length) {\n                xPos += animatorProps.t.v * mult[0];\n              } else {\n                xPos += animatorProps.t.v * mult;\n              }\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          sw = documentData.sw || 0;\n        }\n\n        if (documentData.strokeColorAnim) {\n          if (documentData.sc) {\n            sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n          } else {\n            sc = [0, 0, 0];\n          }\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.a.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.s.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n            } else {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          animatorSelector = animators[j].s;\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n          if (animatorProps.sk.propType) {\n            if (mult.length) {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n            } else {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n            }\n          }\n\n          if (animatorProps.r.propType) {\n            if (mult.length) {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n            } else {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult);\n            }\n          }\n\n          if (animatorProps.ry.propType) {\n            if (mult.length) {\n              matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n            } else {\n              matrixHelper.rotateY(animatorProps.ry.v * mult);\n            }\n          }\n\n          if (animatorProps.rx.propType) {\n            if (mult.length) {\n              matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n            } else {\n              matrixHelper.rotateX(animatorProps.rx.v * mult);\n            }\n          }\n\n          if (animatorProps.o.propType) {\n            if (mult.length) {\n              elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n            } else {\n              elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n            }\n          }\n\n          if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n            if (mult.length) {\n              sw += animatorProps.sw.v * mult[0];\n            } else {\n              sw += animatorProps.sw.v * mult;\n            }\n          }\n\n          if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n            for (k = 0; k < 3; k += 1) {\n              if (mult.length) {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n              } else {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n              }\n            }\n          }\n\n          if (documentData.fillColorAnim && documentData.fc) {\n            if (animatorProps.fc.propType) {\n              for (k = 0; k < 3; k += 1) {\n                if (mult.length) {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n                } else {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n                }\n              }\n            }\n\n            if (animatorProps.fh.propType) {\n              if (mult.length) {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n              } else {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n              }\n            }\n\n            if (animatorProps.fs.propType) {\n              if (mult.length) {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n              } else {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n              }\n            }\n\n            if (animatorProps.fb.propType) {\n              if (mult.length) {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n              } else {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n              }\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.p.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (this._hasMaskedPath) {\n              if (mult.length) {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n              } else {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n              }\n            } else if (mult.length) {\n              matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          letterSw = sw < 0 ? 0 : sw;\n        }\n\n        if (documentData.strokeColorAnim) {\n          letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n        }\n\n        if (this._hasMaskedPath) {\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n          if (this._pathData.p.v) {\n            tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n            var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n            if (currentPoint.point[0] < prevPoint.point[0]) {\n              rot += 180;\n            }\n\n            matrixHelper.rotate(-rot * Math.PI / 180);\n          }\n\n          matrixHelper.translate(xPathPos, yPathPos, 0);\n          currentLength -= alignment[0] * letters[i].an * 0.005;\n\n          if (letters[i + 1] && ind !== letters[i + 1].ind) {\n            currentLength += letters[i].an / 2;\n            currentLength += documentData.tr * 0.001 * documentData.finalSize;\n          }\n        } else {\n          matrixHelper.translate(xPos, yPos, 0);\n\n          if (documentData.ps) {\n            // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n            matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n          }\n\n          switch (documentData.j) {\n            case 1:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n              break;\n\n            case 2:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n              break;\n\n            default:\n              break;\n          }\n\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(offf, 0, 0);\n          matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n          xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n        }\n\n        if (renderType === 'html') {\n          letterM = matrixHelper.toCSS();\n        } else if (renderType === 'svg') {\n          letterM = matrixHelper.to2dCSS();\n        } else {\n          letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n        }\n\n        letterO = elemOpacity;\n      }\n\n      if (renderedLettersCount <= i) {\n        letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n        this.renderedLetters.push(letterValue);\n        renderedLettersCount += 1;\n        this.lettersChangedFlag = true;\n      } else {\n        letterValue = this.renderedLetters[i];\n        this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n      }\n    }\n  };\n\n  TextAnimatorProperty.prototype.getValue = function () {\n    if (this._elem.globalData.frameId === this._frameId) {\n      return;\n    }\n\n    this._frameId = this._elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  TextAnimatorProperty.prototype.mHelper = new Matrix();\n  TextAnimatorProperty.prototype.defaultPropsArray = [];\n  extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n  function ITextElement() {}\n\n  ITextElement.prototype.initElement = function (data, globalData, comp) {\n    this.lettersChangedFlag = true;\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n    this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n    this.initRenderable();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n    this.createContent();\n    this.hide();\n    this.textAnimator.searchProperties(this.dynamicProperties);\n  };\n\n  ITextElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n\n    if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n      this.buildNewText();\n      this.textProperty._isFirstFrame = false;\n      this.textProperty._mdf = false;\n    }\n  };\n\n  ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n    var j;\n    var jLen = shapes.length;\n    var pathNodes;\n    var shapeStr = '';\n\n    for (j = 0; j < jLen; j += 1) {\n      if (shapes[j].ty === 'sh') {\n        pathNodes = shapes[j].ks.k;\n        shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n      }\n    }\n\n    return shapeStr;\n  };\n\n  ITextElement.prototype.updateDocumentData = function (newData, index) {\n    this.textProperty.updateDocumentData(newData, index);\n  };\n\n  ITextElement.prototype.canResizeFont = function (_canResize) {\n    this.textProperty.canResizeFont(_canResize);\n  };\n\n  ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n    this.textProperty.setMinimumFontSize(_fontSize);\n  };\n\n  ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n    if (documentData.ps) {\n      matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n    }\n\n    matrixHelper.translate(0, -documentData.ls, 0);\n\n    switch (documentData.j) {\n      case 1:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n        break;\n\n      case 2:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n        break;\n\n      default:\n        break;\n    }\n\n    matrixHelper.translate(xPos, yPos, 0);\n  };\n\n  ITextElement.prototype.buildColor = function (colorData) {\n    return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n  };\n\n  ITextElement.prototype.emptyProp = new LetterProps();\n\n  ITextElement.prototype.destroy = function () {};\n\n  var emptyShapeData = {\n    shapes: []\n  };\n\n  function SVGTextLottieElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.renderType = 'svg';\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n  SVGTextLottieElement.prototype.createContent = function () {\n    if (this.data.singleShape && !this.globalData.fontManager.chars) {\n      this.textContainer = createNS('text');\n    }\n  };\n\n  SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n    var i = 0;\n    var len = textArray.length;\n    var textContents = [];\n    var currentTextContent = '';\n\n    while (i < len) {\n      if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n        textContents.push(currentTextContent);\n        currentTextContent = '';\n      } else {\n        currentTextContent += textArray[i];\n      }\n\n      i += 1;\n    }\n\n    textContents.push(currentTextContent);\n    return textContents;\n  };\n\n  SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n    // data should probably be cloned to apply scale separately to each instance of a text on different layers\n    // but since text internal content gets only rendered once and then it's never rerendered,\n    // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n    // Avoiding cloning is preferred since cloning each character shape data is expensive\n    if (data.shapes && data.shapes.length) {\n      var shape = data.shapes[0];\n\n      if (shape.it) {\n        var shapeItem = shape.it[shape.it.length - 1];\n\n        if (shapeItem.s) {\n          shapeItem.s.k[0] = scale;\n          shapeItem.s.k[1] = scale;\n        }\n      }\n    }\n\n    return data;\n  };\n\n  SVGTextLottieElement.prototype.buildNewText = function () {\n    this.addDynamicProperty(this);\n    var i;\n    var len;\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n    if (documentData.fc) {\n      this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n    } else {\n      this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n    }\n\n    if (documentData.sc) {\n      this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n      this.layerElement.setAttribute('stroke-width', documentData.sw);\n    }\n\n    this.layerElement.setAttribute('font-size', documentData.finalSize);\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (fontData.fClass) {\n      this.layerElement.setAttribute('class', fontData.fClass);\n    } else {\n      this.layerElement.setAttribute('font-family', fontData.fFamily);\n      var fWeight = documentData.fWeight;\n      var fStyle = documentData.fStyle;\n      this.layerElement.setAttribute('font-style', fStyle);\n      this.layerElement.setAttribute('font-weight', fWeight);\n    }\n\n    this.layerElement.setAttribute('aria-label', documentData.t);\n    var letters = documentData.l || [];\n    var usesGlyphs = !!this.globalData.fontManager.chars;\n    len = letters.length;\n    var tSpan;\n    var matrixHelper = this.mHelper;\n    var shapeStr = '';\n    var singleShape = this.data.singleShape;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n    if (singleShape && !usesGlyphs && !documentData.sz) {\n      var tElement = this.textContainer;\n      var justify = 'start';\n\n      switch (documentData.j) {\n        case 1:\n          justify = 'end';\n          break;\n\n        case 2:\n          justify = 'middle';\n          break;\n\n        default:\n          justify = 'start';\n          break;\n      }\n\n      tElement.setAttribute('text-anchor', justify);\n      tElement.setAttribute('letter-spacing', trackingOffset);\n      var textContent = this.buildTextContents(documentData.finalText);\n      len = textContent.length;\n      yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n      for (i = 0; i < len; i += 1) {\n        tSpan = this.textSpans[i].span || createNS('tspan');\n        tSpan.textContent = textContent[i];\n        tSpan.setAttribute('x', 0);\n        tSpan.setAttribute('y', yPos);\n        tSpan.style.display = 'inherit';\n        tElement.appendChild(tSpan);\n\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            glyph: null\n          };\n        }\n\n        this.textSpans[i].span = tSpan;\n        yPos += documentData.finalLineHeight;\n      }\n\n      this.layerElement.appendChild(tElement);\n    } else {\n      var cachedSpansLength = this.textSpans.length;\n      var charData;\n\n      for (i = 0; i < len; i += 1) {\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            childSpan: null,\n            glyph: null\n          };\n        }\n\n        if (!usesGlyphs || !singleShape || i === 0) {\n          tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n          if (cachedSpansLength <= i) {\n            tSpan.setAttribute('stroke-linecap', 'butt');\n            tSpan.setAttribute('stroke-linejoin', 'round');\n            tSpan.setAttribute('stroke-miterlimit', '4');\n            this.textSpans[i].span = tSpan;\n\n            if (usesGlyphs) {\n              var childSpan = createNS('g');\n              tSpan.appendChild(childSpan);\n              this.textSpans[i].childSpan = childSpan;\n            }\n\n            this.textSpans[i].span = tSpan;\n            this.layerElement.appendChild(tSpan);\n          }\n\n          tSpan.style.display = 'inherit';\n        }\n\n        matrixHelper.reset();\n\n        if (singleShape) {\n          if (letters[i].n) {\n            xPos = -trackingOffset;\n            yPos += documentData.yOffset;\n            yPos += firstLine ? 1 : 0;\n            firstLine = false;\n          }\n\n          this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n          xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n          xPos += trackingOffset;\n        }\n\n        if (usesGlyphs) {\n          charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n          var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n          if (charData.t === 1) {\n            glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n          } else {\n            var data = emptyShapeData;\n\n            if (charData.data && charData.data.shapes) {\n              data = this.buildShapeData(charData.data, documentData.finalSize);\n            }\n\n            glyphElement = new SVGShapeElement(data, this.globalData, this);\n          }\n\n          if (this.textSpans[i].glyph) {\n            var glyph = this.textSpans[i].glyph;\n            this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n            glyph.destroy();\n          }\n\n          this.textSpans[i].glyph = glyphElement;\n          glyphElement._debug = true;\n          glyphElement.prepareFrame(0);\n          glyphElement.renderFrame();\n          this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n          // this might have issues with strokes and might need a different solution\n\n          if (charData.t === 1) {\n            this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n          }\n        } else {\n          if (singleShape) {\n            tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n          }\n\n          tSpan.textContent = letters[i].val;\n          tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n        } //\n\n      }\n\n      if (singleShape && tSpan) {\n        tSpan.setAttribute('d', shapeStr);\n      }\n    }\n\n    while (i < this.textSpans.length) {\n      this.textSpans[i].span.style.display = 'none';\n      i += 1;\n    }\n\n    this._sizeChanged = true;\n  };\n\n  SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n    this.prepareFrame(this.comp.renderedFrame - this.data.st);\n    this.renderInnerContent();\n\n    if (this._sizeChanged) {\n      this._sizeChanged = false;\n      var textBox = this.layerElement.getBBox();\n      this.bbox = {\n        top: textBox.y,\n        left: textBox.x,\n        width: textBox.width,\n        height: textBox.height\n      };\n    }\n\n    return this.bbox;\n  };\n\n  SVGTextLottieElement.prototype.getValue = function () {\n    var i;\n    var len = this.textSpans.length;\n    var glyphElement;\n    this.renderedFrame = this.comp.renderedFrame;\n\n    for (i = 0; i < len; i += 1) {\n      glyphElement = this.textSpans[i].glyph;\n\n      if (glyphElement) {\n        glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n        if (glyphElement._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  SVGTextLottieElement.prototype.renderInnerContent = function () {\n    if (!this.data.singleShape || this._mdf) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n      if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n        this._sizeChanged = true;\n        var i;\n        var len;\n        var renderedLetters = this.textAnimator.renderedLetters;\n        var letters = this.textProperty.currentData.l;\n        len = letters.length;\n        var renderedLetter;\n        var textSpan;\n        var glyphElement;\n\n        for (i = 0; i < len; i += 1) {\n          if (!letters[i].n) {\n            renderedLetter = renderedLetters[i];\n            textSpan = this.textSpans[i].span;\n            glyphElement = this.textSpans[i].glyph;\n\n            if (glyphElement) {\n              glyphElement.renderFrame();\n            }\n\n            if (renderedLetter._mdf.m) {\n              textSpan.setAttribute('transform', renderedLetter.m);\n            }\n\n            if (renderedLetter._mdf.o) {\n              textSpan.setAttribute('opacity', renderedLetter.o);\n            }\n\n            if (renderedLetter._mdf.sw) {\n              textSpan.setAttribute('stroke-width', renderedLetter.sw);\n            }\n\n            if (renderedLetter._mdf.sc) {\n              textSpan.setAttribute('stroke', renderedLetter.sc);\n            }\n\n            if (renderedLetter._mdf.fc) {\n              textSpan.setAttribute('fill', renderedLetter.fc);\n            }\n          }\n        }\n      }\n    }\n  };\n\n  function ISolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([IImageElement], ISolidElement);\n\n  ISolidElement.prototype.createContent = function () {\n    var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n    /// /rect.style.height = this.data.sh;\n    /// /rect.style.fill = this.data.sc;\n\n    rect.setAttribute('width', this.data.sw);\n    rect.setAttribute('height', this.data.sh);\n    rect.setAttribute('fill', this.data.sc);\n    this.layerElement.appendChild(rect);\n  };\n\n  function NullElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initFrame();\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n  }\n\n  NullElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  NullElement.prototype.renderFrame = function () {};\n\n  NullElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  NullElement.prototype.destroy = function () {};\n\n  NullElement.prototype.sourceRectAtTime = function () {};\n\n  NullElement.prototype.hide = function () {};\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n  function SVGRendererBase() {}\n\n  extendPrototype([BaseRenderer], SVGRendererBase);\n\n  SVGRendererBase.prototype.createNull = function (data) {\n    return new NullElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createShape = function (data) {\n    return new SVGShapeElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createText = function (data) {\n    return new SVGTextLottieElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createImage = function (data) {\n    return new IImageElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createSolid = function (data) {\n    return new ISolidElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.configAnimation = function (animData) {\n    this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n    if (this.renderConfig.viewBoxSize) {\n      this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n    } else {\n      this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n    }\n\n    if (!this.renderConfig.viewBoxOnly) {\n      this.svgElement.setAttribute('width', animData.w);\n      this.svgElement.setAttribute('height', animData.h);\n      this.svgElement.style.width = '100%';\n      this.svgElement.style.height = '100%';\n      this.svgElement.style.transform = 'translate3d(0,0,0)';\n      this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n    }\n\n    if (this.renderConfig.width) {\n      this.svgElement.setAttribute('width', this.renderConfig.width);\n    }\n\n    if (this.renderConfig.height) {\n      this.svgElement.setAttribute('height', this.renderConfig.height);\n    }\n\n    if (this.renderConfig.className) {\n      this.svgElement.setAttribute('class', this.renderConfig.className);\n    }\n\n    if (this.renderConfig.id) {\n      this.svgElement.setAttribute('id', this.renderConfig.id);\n    }\n\n    if (this.renderConfig.focusable !== undefined) {\n      this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n    }\n\n    this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n    // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n    this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n    var defs = this.globalData.defs;\n    this.setupGlobalData(animData, defs);\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.data = animData;\n    var maskElement = createNS('clipPath');\n    var rect = createNS('rect');\n    rect.setAttribute('width', animData.w);\n    rect.setAttribute('height', animData.h);\n    rect.setAttribute('x', 0);\n    rect.setAttribute('y', 0);\n    var maskId = createElementID();\n    maskElement.setAttribute('id', maskId);\n    maskElement.appendChild(rect);\n    this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n    defs.appendChild(maskElement);\n    this.layers = animData.layers;\n    this.elements = createSizedArray(animData.layers.length);\n  };\n\n  SVGRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.layerElement = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  SVGRendererBase.prototype.updateContainerSize = function () {};\n\n  SVGRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    elements[pos] = true;\n    var element = this.createItem(this.layers[pos]);\n    elements[pos] = element;\n\n    if (getExpressionsPlugin()) {\n      if (this.layers[pos].ty === 0) {\n        this.globalData.projectInterface.registerComposition(element);\n      }\n\n      element.initExpressions();\n    }\n\n    this.appendElementInPos(element, pos);\n\n    if (this.layers[pos].tt) {\n      if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n        this.buildItem(pos - 1);\n        this.addPendingElement(element);\n      } else {\n        element.setMatte(elements[pos - 1].layerId);\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n\n      if (element.data.tt) {\n        var i = 0;\n        var len = this.elements.length;\n\n        while (i < len) {\n          if (this.elements[i] === element) {\n            element.setMatte(this.elements[i - 1].layerId);\n            break;\n          }\n\n          i += 1;\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.renderFrame = function (num) {\n    if (this.renderedFrame === num || this.destroyed) {\n      return;\n    }\n\n    if (num === null) {\n      num = this.renderedFrame;\n    } else {\n      this.renderedFrame = num;\n    } // console.log('-------');\n    // console.log('FRAME ',num);\n\n\n    this.globalData.frameNum = num;\n    this.globalData.frameId += 1;\n    this.globalData.projectInterface.currentFrame = num;\n    this.globalData._mdf = false;\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      for (i = 0; i < len; i += 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newElement = element.getBaseElement();\n\n    if (!newElement) {\n      return;\n    }\n\n    var i = 0;\n    var nextElement;\n\n    while (i < pos) {\n      if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n        nextElement = this.elements[i].getBaseElement();\n      }\n\n      i += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(newElement, nextElement);\n    } else {\n      this.layerElement.appendChild(newElement);\n    }\n  };\n\n  SVGRendererBase.prototype.hide = function () {\n    this.layerElement.style.display = 'none';\n  };\n\n  SVGRendererBase.prototype.show = function () {\n    this.layerElement.style.display = 'block';\n  };\n\n  function ICompElement() {}\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n  ICompElement.prototype.initElement = function (data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initTransform(data, globalData, comp);\n    this.initRenderable();\n    this.initHierarchy();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n\n    if (this.data.xt || !globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n\n    this.hide();\n  };\n  /* ICompElement.prototype.hide = function(){\r\n      if(!this.hidden){\r\n          this.hideElement();\r\n          var i,len = this.elements.length;\r\n          for( i = 0; i < len; i+=1 ){\r\n              if(this.elements[i]){\r\n                  this.elements[i].hide();\r\n              }\r\n          }\r\n      }\r\n  }; */\n\n\n  ICompElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n\n    if (!this.isInRange && !this.data.xt) {\n      return;\n    }\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n\n      if (timeRemapped === this.data.op) {\n        timeRemapped = this.data.op - 1;\n      }\n\n      this.renderedFrame = timeRemapped;\n    } else {\n      this.renderedFrame = num / this.data.sr;\n    }\n\n    var i;\n    var len = this.elements.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(this.renderedFrame);\n    } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n        if (this.elements[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  ICompElement.prototype.renderInnerContent = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  ICompElement.prototype.setElements = function (elems) {\n    this.elements = elems;\n  };\n\n  ICompElement.prototype.getElements = function () {\n    return this.elements;\n  };\n\n  ICompElement.prototype.destroyElements = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n  };\n\n  ICompElement.prototype.destroy = function () {\n    this.destroyElements();\n    this.destroyBaseElement();\n  };\n\n  function SVGCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = true;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n  SVGCompElement.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function SVGRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.svgElement = createNS('svg');\n    var ariaLabel = '';\n\n    if (config && config.title) {\n      var titleElement = createNS('title');\n      var titleId = createElementID();\n      titleElement.setAttribute('id', titleId);\n      titleElement.textContent = config.title;\n      this.svgElement.appendChild(titleElement);\n      ariaLabel += titleId;\n    }\n\n    if (config && config.description) {\n      var descElement = createNS('desc');\n      var descId = createElementID();\n      descElement.setAttribute('id', descId);\n      descElement.textContent = config.description;\n      this.svgElement.appendChild(descElement);\n      ariaLabel += ' ' + descId;\n    }\n\n    if (ariaLabel) {\n      this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n    }\n\n    var defs = createNS('defs');\n    this.svgElement.appendChild(defs);\n    var maskElement = createNS('g');\n    this.svgElement.appendChild(maskElement);\n    this.layerElement = maskElement;\n    this.renderConfig = {\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      progressiveLoad: config && config.progressiveLoad || false,\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      viewBoxOnly: config && config.viewBoxOnly || false,\n      viewBoxSize: config && config.viewBoxSize || false,\n      className: config && config.className || '',\n      id: config && config.id || '',\n      focusable: config && config.focusable,\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '100%',\n        height: config && config.filterSize && config.filterSize.height || '100%',\n        x: config && config.filterSize && config.filterSize.x || '0%',\n        y: config && config.filterSize && config.filterSize.y || '0%'\n      },\n      width: config && config.width,\n      height: config && config.height\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      defs: defs,\n      renderConfig: this.renderConfig\n    };\n    this.elements = [];\n    this.pendingElements = [];\n    this.destroyed = false;\n    this.rendererType = 'svg';\n  }\n\n  extendPrototype([SVGRendererBase], SVGRenderer);\n\n  SVGRenderer.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function CVContextData() {\n    this.saved = [];\n    this.cArrPos = 0;\n    this.cTr = new Matrix();\n    this.cO = 1;\n    var i;\n    var len = 15;\n    this.savedOp = createTypedArray('float32', len);\n\n    for (i = 0; i < len; i += 1) {\n      this.saved[i] = createTypedArray('float32', 16);\n    }\n\n    this._length = len;\n  }\n\n  CVContextData.prototype.duplicate = function () {\n    var newLength = this._length * 2;\n    var currentSavedOp = this.savedOp;\n    this.savedOp = createTypedArray('float32', newLength);\n    this.savedOp.set(currentSavedOp);\n    var i = 0;\n\n    for (i = this._length; i < newLength; i += 1) {\n      this.saved[i] = createTypedArray('float32', 16);\n    }\n\n    this._length = newLength;\n  };\n\n  CVContextData.prototype.reset = function () {\n    this.cArrPos = 0;\n    this.cTr.reset();\n    this.cO = 1;\n  };\n\n  function ShapeTransformManager() {\n    this.sequences = {};\n    this.sequenceList = [];\n    this.transform_key_count = 0;\n  }\n\n  ShapeTransformManager.prototype = {\n    addTransformSequence: function addTransformSequence(transforms) {\n      var i;\n      var len = transforms.length;\n      var key = '_';\n\n      for (i = 0; i < len; i += 1) {\n        key += transforms[i].transform.key + '_';\n      }\n\n      var sequence = this.sequences[key];\n\n      if (!sequence) {\n        sequence = {\n          transforms: [].concat(transforms),\n          finalTransform: new Matrix(),\n          _mdf: false\n        };\n        this.sequences[key] = sequence;\n        this.sequenceList.push(sequence);\n      }\n\n      return sequence;\n    },\n    processSequence: function processSequence(sequence, isFirstFrame) {\n      var i = 0;\n      var len = sequence.transforms.length;\n      var _mdf = isFirstFrame;\n\n      while (i < len && !isFirstFrame) {\n        if (sequence.transforms[i].transform.mProps._mdf) {\n          _mdf = true;\n          break;\n        }\n\n        i += 1;\n      }\n\n      if (_mdf) {\n        var props;\n        sequence.finalTransform.reset();\n\n        for (i = len - 1; i >= 0; i -= 1) {\n          props = sequence.transforms[i].transform.mProps.v.props;\n          sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n        }\n      }\n\n      sequence._mdf = _mdf;\n    },\n    processSequences: function processSequences(isFirstFrame) {\n      var i;\n      var len = this.sequenceList.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.processSequence(this.sequenceList[i], isFirstFrame);\n      }\n    },\n    getNewKey: function getNewKey() {\n      this.transform_key_count += 1;\n      return '_' + this.transform_key_count;\n    }\n  };\n\n  function CVEffects() {}\n\n  CVEffects.prototype.renderFrame = function () {};\n\n  function CVMaskElement(data, element) {\n    this.data = data;\n    this.element = element;\n    this.masksProperties = this.data.masksProperties || [];\n    this.viewData = createSizedArray(this.masksProperties.length);\n    var i;\n    var len = this.masksProperties.length;\n    var hasMasks = false;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        hasMasks = true;\n      }\n\n      this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n    }\n\n    this.hasMasks = hasMasks;\n\n    if (hasMasks) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  CVMaskElement.prototype.renderFrame = function () {\n    if (!this.hasMasks) {\n      return;\n    }\n\n    var transform = this.element.finalTransform.mat;\n    var ctx = this.element.canvasContext;\n    var i;\n    var len = this.masksProperties.length;\n    var pt;\n    var pts;\n    var data;\n    ctx.beginPath();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.masksProperties[i].inv) {\n          ctx.moveTo(0, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n          ctx.lineTo(0, this.element.globalData.compSize.h);\n          ctx.lineTo(0, 0);\n        }\n\n        data = this.viewData[i].v;\n        pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n        ctx.moveTo(pt[0], pt[1]);\n        var j;\n        var jLen = data._length;\n\n        for (j = 1; j < jLen; j += 1) {\n          pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n          ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n        }\n\n        pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n        ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n      }\n    }\n\n    this.element.globalData.renderer.save(true);\n    ctx.clip();\n  };\n\n  CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n  CVMaskElement.prototype.destroy = function () {\n    this.element = null;\n  };\n\n  function CVBaseElement() {}\n\n  CVBaseElement.prototype = {\n    createElements: function createElements() {},\n    initRendererElement: function initRendererElement() {},\n    createContainerElements: function createContainerElements() {\n      this.canvasContext = this.globalData.canvasContext;\n      this.renderableEffectsManager = new CVEffects(this);\n    },\n    createContent: function createContent() {},\n    setBlendMode: function setBlendMode() {\n      var globalData = this.globalData;\n\n      if (globalData.blendMode !== this.data.bm) {\n        globalData.blendMode = this.data.bm;\n        var blendModeValue = getBlendMode(this.data.bm);\n        globalData.canvasContext.globalCompositeOperation = blendModeValue;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new CVMaskElement(this.data, this);\n    },\n    hideElement: function hideElement() {\n      if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n        this.hidden = true;\n      }\n    },\n    showElement: function showElement() {\n      if (this.isInRange && !this.isTransparent) {\n        this.hidden = false;\n        this._isFirstFrame = true;\n        this.maskManager._isFirstFrame = true;\n      }\n    },\n    renderFrame: function renderFrame() {\n      if (this.hidden || this.data.hd) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.setBlendMode();\n      var forceRealStack = this.data.ty === 0;\n      this.globalData.renderer.save(forceRealStack);\n      this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n      this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\n      this.renderInnerContent();\n      this.globalData.renderer.restore(forceRealStack);\n\n      if (this.maskManager.hasMasks) {\n        this.globalData.renderer.restore(true);\n      }\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.canvasContext = null;\n      this.data = null;\n      this.globalData = null;\n      this.maskManager.destroy();\n    },\n    mHelper: new Matrix()\n  };\n  CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n  CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n  function CVShapeData(element, data, styles, transformsManager) {\n    this.styledShapes = [];\n    this.tr = [0, 0, 0, 0, 0, 0];\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n    var i;\n    var len = styles.length;\n    var styledShape;\n\n    for (i = 0; i < len; i += 1) {\n      if (!styles[i].closed) {\n        styledShape = {\n          transforms: transformsManager.addTransformSequence(styles[i].transforms),\n          trNodes: []\n        };\n        this.styledShapes.push(styledShape);\n        styles[i].elements.push(styledShape);\n      }\n    }\n  }\n\n  CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n  function CVShapeElement(data, globalData, comp) {\n    this.shapes = [];\n    this.shapesData = data.shapes;\n    this.stylesList = [];\n    this.itemsData = [];\n    this.prevViewData = [];\n    this.shapeModifiers = [];\n    this.processedElements = [];\n    this.transformsManager = new ShapeTransformManager();\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n  CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n  CVShapeElement.prototype.transformHelper = {\n    opacity: 1,\n    _opMdf: false\n  };\n  CVShapeElement.prototype.dashResetter = [];\n\n  CVShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n  };\n\n  CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n    var styleElem = {\n      data: data,\n      type: data.ty,\n      preTransforms: this.transformsManager.addTransformSequence(transforms),\n      transforms: [],\n      elements: [],\n      closed: data.hd === true\n    };\n    var elementData = {};\n\n    if (data.ty === 'fl' || data.ty === 'st') {\n      elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n      if (!elementData.c.k) {\n        styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n      }\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n      elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n      elementData.h = PropertyFactory.getProp(this, data.h || {\n        k: 0\n      }, 0, 0.01, this);\n      elementData.a = PropertyFactory.getProp(this, data.a || {\n        k: 0\n      }, 0, degToRads, this);\n      elementData.g = new GradientProperty(this, data.g, this);\n    }\n\n    elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      styleElem.lc = lineCapEnum[data.lc || 2];\n      styleElem.lj = lineJoinEnum[data.lj || 2];\n\n      if (data.lj == 1) {\n        // eslint-disable-line eqeqeq\n        styleElem.ml = data.ml;\n      }\n\n      elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n      if (!elementData.w.k) {\n        styleElem.wi = elementData.w.v;\n      }\n\n      if (data.d) {\n        var d = new DashProperty(this, data.d, 'canvas', this);\n        elementData.d = d;\n\n        if (!elementData.d.k) {\n          styleElem.da = elementData.d.dashArray;\n          styleElem[\"do\"] = elementData.d.dashoffset[0];\n        }\n      }\n    } else {\n      styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n    }\n\n    this.stylesList.push(styleElem);\n    elementData.style = styleElem;\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createGroupElement = function () {\n    var elementData = {\n      it: [],\n      prevViewData: []\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createTransformElement = function (data) {\n    var elementData = {\n      transform: {\n        opacity: 1,\n        _opMdf: false,\n        key: this.transformsManager.getNewKey(),\n        op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n        mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n      }\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createShapeElement = function (data) {\n    var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    return elementData;\n  };\n\n  CVShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n  };\n\n  CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.push(transform);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.removeTransformFromStyleList = function () {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.pop();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.closeStyles = function (styles) {\n    var i;\n    var len = styles.length;\n\n    for (i = 0; i < len; i += 1) {\n      styles[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var processedPos;\n    var modifier;\n    var currentTransform;\n    var ownTransforms = [].concat(transforms);\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._shouldRender = shouldRender;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          currentTransform = this.createTransformElement(arr[i]);\n          itemsData[i] = currentTransform;\n        }\n\n        ownTransforms.push(itemsData[i]);\n        this.addTransformToStyleList(itemsData[i]);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i]);\n        }\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          shouldRender = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    this.removeTransformFromStyleList();\n    this.closeStyles(ownStyles);\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.renderInnerContent = function () {\n    this.transformHelper.opacity = 1;\n    this.transformHelper._opMdf = false;\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n    this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n  };\n\n  CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n    if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n      groupTransform.opacity = parentTransform.opacity;\n      groupTransform.opacity *= groupTransform.op.v;\n      groupTransform._opMdf = true;\n    }\n  };\n\n  CVShapeElement.prototype.drawLayer = function () {\n    var i;\n    var len = this.stylesList.length;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var elems;\n    var nodes;\n    var renderer = this.globalData.renderer;\n    var ctx = this.globalData.canvasContext;\n    var type;\n    var currentStyle;\n\n    for (i = 0; i < len; i += 1) {\n      currentStyle = this.stylesList[i];\n      type = currentStyle.type; // Skipping style when\n      // Stroke width equals 0\n      // style should not be rendered (extra unused repeaters)\n      // current opacity equals 0\n      // global opacity equals 0\n\n      if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n        renderer.save();\n        elems = currentStyle.elements;\n\n        if (type === 'st' || type === 'gs') {\n          ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n          ctx.lineWidth = currentStyle.wi;\n          ctx.lineCap = currentStyle.lc;\n          ctx.lineJoin = currentStyle.lj;\n          ctx.miterLimit = currentStyle.ml || 0;\n        } else {\n          ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n        }\n\n        renderer.ctxOpacity(currentStyle.coOp);\n\n        if (type !== 'st' && type !== 'gs') {\n          ctx.beginPath();\n        }\n\n        renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n        jLen = elems.length;\n\n        for (j = 0; j < jLen; j += 1) {\n          if (type === 'st' || type === 'gs') {\n            ctx.beginPath();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(currentStyle.da);\n              ctx.lineDashOffset = currentStyle[\"do\"];\n            }\n          }\n\n          nodes = elems[j].trNodes;\n          kLen = nodes.length;\n\n          for (k = 0; k < kLen; k += 1) {\n            if (nodes[k].t === 'm') {\n              ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n            } else if (nodes[k].t === 'c') {\n              ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n            } else {\n              ctx.closePath();\n            }\n          }\n\n          if (type === 'st' || type === 'gs') {\n            ctx.stroke();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(this.dashResetter);\n            }\n          }\n        }\n\n        if (type !== 'st' && type !== 'gs') {\n          ctx.fill(currentStyle.r);\n        }\n\n        renderer.restore();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n    var i;\n    var len = items.length - 1;\n    var groupTransform;\n    groupTransform = parentTransform;\n\n    for (i = len; i >= 0; i -= 1) {\n      if (items[i].ty === 'tr') {\n        groupTransform = data[i].transform;\n        this.renderShapeTransform(parentTransform, groupTransform);\n      } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n        this.renderPath(items[i], data[i]);\n      } else if (items[i].ty === 'fl') {\n        this.renderFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'st') {\n        this.renderStroke(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n        this.renderGradientFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gr') {\n        this.renderShape(groupTransform, items[i].it, data[i].it);\n      } else if (items[i].ty === 'tm') {//\n      }\n    }\n\n    if (isMain) {\n      this.drawLayer();\n    }\n  };\n\n  CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n    if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n      var shapeNodes = styledShape.trNodes;\n      var paths = shape.paths;\n      var i;\n      var len;\n      var j;\n      var jLen = paths._length;\n      shapeNodes.length = 0;\n      var groupTransformMat = styledShape.transforms.finalTransform;\n\n      for (j = 0; j < jLen; j += 1) {\n        var pathNodes = paths.shapes[j];\n\n        if (pathNodes && pathNodes.v) {\n          len = pathNodes._length;\n\n          for (i = 1; i < len; i += 1) {\n            if (i === 1) {\n              shapeNodes.push({\n                t: 'm',\n                p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n              });\n            }\n\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n            });\n          }\n\n          if (len === 1) {\n            shapeNodes.push({\n              t: 'm',\n              p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n            });\n          }\n\n          if (pathNodes.c && len) {\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n            });\n            shapeNodes.push({\n              t: 'z'\n            });\n          }\n        }\n      }\n\n      styledShape.trNodes = shapeNodes;\n    }\n  };\n\n  CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n    if (pathData.hd !== true && pathData._shouldRender) {\n      var i;\n      var len = itemData.styledShapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n  };\n\n  CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var grd;\n\n    if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n      var ctx = this.globalData.canvasContext;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (styleData.t === 1) {\n        grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n      } else {\n        var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n        var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n        var percent = itemData.h.v;\n\n        if (percent >= 1) {\n          percent = 0.99;\n        } else if (percent <= -1) {\n          percent = -0.99;\n        }\n\n        var dist = rad * percent;\n        var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n        var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n        grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n      }\n\n      var i;\n      var len = styleData.g.p;\n      var cValues = itemData.g.c;\n      var opacity = 1;\n\n      for (i = 0; i < len; i += 1) {\n        if (itemData.g._hasOpacity && itemData.g._collapsable) {\n          opacity = itemData.g.o[i * 2 + 1];\n        }\n\n        grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n      }\n\n      styleElem.grd = grd;\n    }\n\n    styleElem.coOp = itemData.o.v * groupTransform.opacity;\n  };\n\n  CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var d = itemData.d;\n\n    if (d && (d._mdf || this._isFirstFrame)) {\n      styleElem.da = d.dashArray;\n      styleElem[\"do\"] = d.dashoffset[0];\n    }\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n\n    if (itemData.w._mdf || this._isFirstFrame) {\n      styleElem.wi = itemData.w.v;\n    }\n  };\n\n  CVShapeElement.prototype.destroy = function () {\n    this.shapesData = null;\n    this.globalData = null;\n    this.canvasContext = null;\n    this.stylesList.length = 0;\n    this.itemsData.length = 0;\n  };\n\n  function CVTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.yOffset = 0;\n    this.fillColorAnim = false;\n    this.strokeColorAnim = false;\n    this.strokeWidthAnim = false;\n    this.stroke = false;\n    this.fill = false;\n    this.justifyOffset = 0;\n    this.currentRender = null;\n    this.renderType = 'canvas';\n    this.values = {\n      fill: 'rgba(0,0,0,0)',\n      stroke: 'rgba(0,0,0,0)',\n      sWidth: 0,\n      fValue: ''\n    };\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n  CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n  CVTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var hasFill = false;\n\n    if (documentData.fc) {\n      hasFill = true;\n      this.values.fill = this.buildColor(documentData.fc);\n    } else {\n      this.values.fill = 'rgba(0,0,0,0)';\n    }\n\n    this.fill = hasFill;\n    var hasStroke = false;\n\n    if (documentData.sc) {\n      hasStroke = true;\n      this.values.stroke = this.buildColor(documentData.sc);\n      this.values.sWidth = documentData.sw;\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n    var i;\n    var len;\n    var letters = documentData.l;\n    var matrixHelper = this.mHelper;\n    this.stroke = hasStroke;\n    this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n    len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n    var charData;\n    var shapeData;\n    var k;\n    var kLen;\n    var shapes;\n    var j;\n    var jLen;\n    var pathNodes;\n    var commands;\n    var pathArr;\n    var singleShape = this.data.singleShape;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n      shapeData = charData && charData.data || {};\n      matrixHelper.reset();\n\n      if (singleShape && letters[i].n) {\n        xPos = -trackingOffset;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        firstLine = false;\n      }\n\n      shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n      jLen = shapes.length;\n      matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n      if (singleShape) {\n        this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n      }\n\n      commands = createSizedArray(jLen - 1);\n      var commandsCounter = 0;\n\n      for (j = 0; j < jLen; j += 1) {\n        if (shapes[j].ty === 'sh') {\n          kLen = shapes[j].ks.k.i.length;\n          pathNodes = shapes[j].ks.k;\n          pathArr = [];\n\n          for (k = 1; k < kLen; k += 1) {\n            if (k === 1) {\n              pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n            }\n\n            pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n          }\n\n          pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n          commands[commandsCounter] = pathArr;\n          commandsCounter += 1;\n        }\n      }\n\n      if (singleShape) {\n        xPos += letters[i].l;\n        xPos += trackingOffset;\n      }\n\n      if (this.textSpans[cnt]) {\n        this.textSpans[cnt].elem = commands;\n      } else {\n        this.textSpans[cnt] = {\n          elem: commands\n        };\n      }\n\n      cnt += 1;\n    }\n  };\n\n  CVTextElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext;\n    ctx.font = this.values.fValue;\n    ctx.lineCap = 'butt';\n    ctx.lineJoin = 'miter';\n    ctx.miterLimit = 4;\n\n    if (!this.data.singleShape) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n    }\n\n    var i;\n    var len;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var lastFill = null;\n    var lastStroke = null;\n    var lastStrokeW = null;\n    var commands;\n    var pathArr;\n\n    for (i = 0; i < len; i += 1) {\n      if (!letters[i].n) {\n        renderedLetter = renderedLetters[i];\n\n        if (renderedLetter) {\n          this.globalData.renderer.save();\n          this.globalData.renderer.ctxTransform(renderedLetter.p);\n          this.globalData.renderer.ctxOpacity(renderedLetter.o);\n        }\n\n        if (this.fill) {\n          if (renderedLetter && renderedLetter.fc) {\n            if (lastFill !== renderedLetter.fc) {\n              lastFill = renderedLetter.fc;\n              ctx.fillStyle = renderedLetter.fc;\n            }\n          } else if (lastFill !== this.values.fill) {\n            lastFill = this.values.fill;\n            ctx.fillStyle = this.values.fill;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          this.globalData.canvasContext.fill(); /// ctx.fillText(this.textSpans[i].val,0,0);\n        }\n\n        if (this.stroke) {\n          if (renderedLetter && renderedLetter.sw) {\n            if (lastStrokeW !== renderedLetter.sw) {\n              lastStrokeW = renderedLetter.sw;\n              ctx.lineWidth = renderedLetter.sw;\n            }\n          } else if (lastStrokeW !== this.values.sWidth) {\n            lastStrokeW = this.values.sWidth;\n            ctx.lineWidth = this.values.sWidth;\n          }\n\n          if (renderedLetter && renderedLetter.sc) {\n            if (lastStroke !== renderedLetter.sc) {\n              lastStroke = renderedLetter.sc;\n              ctx.strokeStyle = renderedLetter.sc;\n            }\n          } else if (lastStroke !== this.values.stroke) {\n            lastStroke = this.values.stroke;\n            ctx.strokeStyle = this.values.stroke;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          this.globalData.canvasContext.stroke(); /// ctx.strokeText(letters[i].val,0,0);\n        }\n\n        if (renderedLetter) {\n          this.globalData.renderer.restore();\n        }\n      }\n    }\n  };\n\n  function CVImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.img = globalData.imageLoader.getAsset(this.assetData);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n  CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVImageElement.prototype.createContent = function () {\n    if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n      var canvas = createTag('canvas');\n      canvas.width = this.assetData.w;\n      canvas.height = this.assetData.h;\n      var ctx = canvas.getContext('2d');\n      var imgW = this.img.width;\n      var imgH = this.img.height;\n      var imgRel = imgW / imgH;\n      var canvasRel = this.assetData.w / this.assetData.h;\n      var widthCrop;\n      var heightCrop;\n      var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n      if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n        heightCrop = imgH;\n        widthCrop = heightCrop * canvasRel;\n      } else {\n        widthCrop = imgW;\n        heightCrop = widthCrop / canvasRel;\n      }\n\n      ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n      this.img = canvas;\n    }\n  };\n\n  CVImageElement.prototype.renderInnerContent = function () {\n    this.canvasContext.drawImage(this.img, 0, 0);\n  };\n\n  CVImageElement.prototype.destroy = function () {\n    this.img = null;\n  };\n\n  function CVSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n  CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVSolidElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext;\n    ctx.fillStyle = this.data.sc;\n    ctx.fillRect(0, 0, this.data.sw, this.data.sh); //\n  };\n\n  function CanvasRendererBase(animationItem, config) {\n    this.animationItem = animationItem;\n    this.renderConfig = {\n      clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n      context: config && config.context || null,\n      progressiveLoad: config && config.progressiveLoad || false,\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      className: config && config.className || '',\n      id: config && config.id || ''\n    };\n    this.renderConfig.dpr = config && config.dpr || 1;\n\n    if (this.animationItem.wrapper) {\n      this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n    }\n\n    this.renderedFrame = -1;\n    this.globalData = {\n      frameNum: -1,\n      _mdf: false,\n      renderConfig: this.renderConfig,\n      currentGlobalAlpha: -1\n    };\n    this.contextData = new CVContextData();\n    this.elements = [];\n    this.pendingElements = [];\n    this.transformMat = new Matrix();\n    this.completeLayers = false;\n    this.rendererType = 'canvas';\n  }\n\n  extendPrototype([BaseRenderer], CanvasRendererBase);\n\n  CanvasRendererBase.prototype.createShape = function (data) {\n    return new CVShapeElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createText = function (data) {\n    return new CVTextElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createImage = function (data) {\n    return new CVImageElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createSolid = function (data) {\n    return new CVSolidElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  CanvasRendererBase.prototype.ctxTransform = function (props) {\n    if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n      return;\n    }\n\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n      return;\n    }\n\n    this.transformMat.cloneFromProps(props);\n    var cProps = this.contextData.cTr.props;\n    this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]); // this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\n\n    this.contextData.cTr.cloneFromProps(this.transformMat.props);\n    var trProps = this.contextData.cTr.props;\n    this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n  };\n\n  CanvasRendererBase.prototype.ctxOpacity = function (op) {\n    /* if(op === 1){\r\n          return;\r\n      } */\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n      this.globalData.currentGlobalAlpha = this.contextData.cO;\n      return;\n    }\n\n    this.contextData.cO *= op < 0 ? 0 : op;\n\n    if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n      this.canvasContext.globalAlpha = this.contextData.cO;\n      this.globalData.currentGlobalAlpha = this.contextData.cO;\n    }\n  };\n\n  CanvasRendererBase.prototype.reset = function () {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    this.contextData.reset();\n  };\n\n  CanvasRendererBase.prototype.save = function (actionFlag) {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.save();\n      return;\n    }\n\n    if (actionFlag) {\n      this.canvasContext.save();\n    }\n\n    var props = this.contextData.cTr.props;\n\n    if (this.contextData._length <= this.contextData.cArrPos) {\n      this.contextData.duplicate();\n    }\n\n    var i;\n    var arr = this.contextData.saved[this.contextData.cArrPos];\n\n    for (i = 0; i < 16; i += 1) {\n      arr[i] = props[i];\n    }\n\n    this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n    this.contextData.cArrPos += 1;\n  };\n\n  CanvasRendererBase.prototype.restore = function (actionFlag) {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    if (actionFlag) {\n      this.canvasContext.restore();\n      this.globalData.blendMode = 'source-over';\n    }\n\n    this.contextData.cArrPos -= 1;\n    var popped = this.contextData.saved[this.contextData.cArrPos];\n    var i;\n    var arr = this.contextData.cTr.props;\n\n    for (i = 0; i < 16; i += 1) {\n      arr[i] = popped[i];\n    }\n\n    this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\n    popped = this.contextData.savedOp[this.contextData.cArrPos];\n    this.contextData.cO = popped;\n\n    if (this.globalData.currentGlobalAlpha !== popped) {\n      this.canvasContext.globalAlpha = popped;\n      this.globalData.currentGlobalAlpha = popped;\n    }\n  };\n\n  CanvasRendererBase.prototype.configAnimation = function (animData) {\n    if (this.animationItem.wrapper) {\n      this.animationItem.container = createTag('canvas');\n      var containerStyle = this.animationItem.container.style;\n      containerStyle.width = '100%';\n      containerStyle.height = '100%';\n      var origin = '0px 0px 0px';\n      containerStyle.transformOrigin = origin;\n      containerStyle.mozTransformOrigin = origin;\n      containerStyle.webkitTransformOrigin = origin;\n      containerStyle['-webkit-transform'] = origin;\n      containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n      this.animationItem.wrapper.appendChild(this.animationItem.container);\n      this.canvasContext = this.animationItem.container.getContext('2d');\n\n      if (this.renderConfig.className) {\n        this.animationItem.container.setAttribute('class', this.renderConfig.className);\n      }\n\n      if (this.renderConfig.id) {\n        this.animationItem.container.setAttribute('id', this.renderConfig.id);\n      }\n    } else {\n      this.canvasContext = this.renderConfig.context;\n    }\n\n    this.data = animData;\n    this.layers = animData.layers;\n    this.transformCanvas = {\n      w: animData.w,\n      h: animData.h,\n      sx: 0,\n      sy: 0,\n      tx: 0,\n      ty: 0\n    };\n    this.setupGlobalData(animData, document.body);\n    this.globalData.canvasContext = this.canvasContext;\n    this.globalData.renderer = this;\n    this.globalData.isDashed = false;\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.globalData.transformCanvas = this.transformCanvas;\n    this.elements = createSizedArray(animData.layers.length);\n    this.updateContainerSize();\n  };\n\n  CanvasRendererBase.prototype.updateContainerSize = function () {\n    this.reset();\n    var elementWidth;\n    var elementHeight;\n\n    if (this.animationItem.wrapper && this.animationItem.container) {\n      elementWidth = this.animationItem.wrapper.offsetWidth;\n      elementHeight = this.animationItem.wrapper.offsetHeight;\n      this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\n      this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\n    } else {\n      elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\n      elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\n    }\n\n    var elementRel;\n    var animationRel;\n\n    if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n      var par = this.renderConfig.preserveAspectRatio.split(' ');\n      var fillType = par[1] || 'meet';\n      var pos = par[0] || 'xMidYMid';\n      var xPos = pos.substr(0, 4);\n      var yPos = pos.substr(4);\n      elementRel = elementWidth / elementHeight;\n      animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n      if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n        this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      } else {\n        this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      }\n\n      if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n      } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.tx = 0;\n      }\n\n      if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n      } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.ty = 0;\n      }\n    } else if (this.renderConfig.preserveAspectRatio === 'none') {\n      this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    } else {\n      this.transformCanvas.sx = this.renderConfig.dpr;\n      this.transformCanvas.sy = this.renderConfig.dpr;\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    }\n\n    this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n    /* var i, len = this.elements.length;\r\n      for(i=0;i<len;i+=1){\r\n          if(this.elements[i] && this.elements[i].data.ty === 0){\r\n              this.elements[i].resize(this.globalData.transformCanvas);\r\n          }\r\n      } */\n\n    this.ctxTransform(this.transformCanvas.props);\n    this.canvasContext.beginPath();\n    this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n    this.canvasContext.closePath();\n    this.canvasContext.clip();\n    this.renderFrame(this.renderedFrame, true);\n  };\n\n  CanvasRendererBase.prototype.destroy = function () {\n    if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.globalData.canvasContext = null;\n    this.animationItem.container = null;\n    this.destroyed = true;\n  };\n\n  CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n    if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n      return;\n    }\n\n    this.renderedFrame = num;\n    this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n    this.globalData.frameId += 1;\n    this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n    this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n    // console.log('NEW: ',num);\n\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      if (this.renderConfig.clearCanvas === true) {\n        this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n      } else {\n        this.save();\n      }\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n\n      if (this.renderConfig.clearCanvas !== true) {\n        this.restore();\n      }\n    }\n  };\n\n  CanvasRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    var element = this.createItem(this.layers[pos], this, this.globalData);\n    elements[pos] = element;\n    element.initExpressions();\n    /* if(this.layers[pos].ty === 0){\r\n          element.resize(this.globalData.transformCanvas);\r\n      } */\n  };\n\n  CanvasRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  CanvasRendererBase.prototype.hide = function () {\n    this.animationItem.container.style.display = 'none';\n  };\n\n  CanvasRendererBase.prototype.show = function () {\n    this.animationItem.container.style.display = 'block';\n  };\n\n  function CVCompElement(data, globalData, comp) {\n    this.completeLayers = false;\n    this.layers = data.layers;\n    this.pendingElements = [];\n    this.elements = createSizedArray(this.layers.length);\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n  CVCompElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext;\n    ctx.beginPath();\n    ctx.moveTo(0, 0);\n    ctx.lineTo(this.data.w, 0);\n    ctx.lineTo(this.data.w, this.data.h);\n    ctx.lineTo(0, this.data.h);\n    ctx.lineTo(0, 0);\n    ctx.clip();\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  CVCompElement.prototype.destroy = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.layers = null;\n    this.elements = null;\n  };\n\n  CVCompElement.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function CanvasRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.renderConfig = {\n      clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n      context: config && config.context || null,\n      progressiveLoad: config && config.progressiveLoad || false,\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      className: config && config.className || '',\n      id: config && config.id || ''\n    };\n    this.renderConfig.dpr = config && config.dpr || 1;\n\n    if (this.animationItem.wrapper) {\n      this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n    }\n\n    this.renderedFrame = -1;\n    this.globalData = {\n      frameNum: -1,\n      _mdf: false,\n      renderConfig: this.renderConfig,\n      currentGlobalAlpha: -1\n    };\n    this.contextData = new CVContextData();\n    this.elements = [];\n    this.pendingElements = [];\n    this.transformMat = new Matrix();\n    this.completeLayers = false;\n    this.rendererType = 'canvas';\n  }\n\n  extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n  CanvasRenderer.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function HBaseElement() {}\n\n  HBaseElement.prototype = {\n    checkBlendMode: function checkBlendMode() {},\n    initRendererElement: function initRendererElement() {\n      this.baseElement = createTag(this.data.tg || 'div');\n\n      if (this.data.hasMask) {\n        this.svgElement = createNS('svg');\n        this.layerElement = createNS('g');\n        this.maskedElement = this.layerElement;\n        this.svgElement.appendChild(this.layerElement);\n        this.baseElement.appendChild(this.svgElement);\n      } else {\n        this.layerElement = this.baseElement;\n      }\n\n      styleDiv(this.baseElement);\n    },\n    createContainerElements: function createContainerElements() {\n      this.renderableEffectsManager = new CVEffects(this);\n      this.transformedElement = this.baseElement;\n      this.maskedElement = this.layerElement;\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n      if (this.finalTransform._matMdf) {\n        var matrixValue = this.finalTransform.mat.toCSS();\n        transformedElementStyle.transform = matrixValue;\n        transformedElementStyle.webkitTransform = matrixValue;\n      }\n\n      if (this.finalTransform._opMdf) {\n        transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderFrame: function renderFrame() {\n      // If it is exported as hidden (data.hd === true) no need to render\n      // If it is not visible no need to render\n      if (this.data.hd || this.hidden) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderElement();\n      this.renderInnerContent();\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.layerElement = null;\n      this.transformedElement = null;\n\n      if (this.matteElement) {\n        this.matteElement = null;\n      }\n\n      if (this.maskManager) {\n        this.maskManager.destroy();\n        this.maskManager = null;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n    },\n    addEffects: function addEffects() {},\n    setMatte: function setMatte() {}\n  };\n  HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n  HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n  HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n  function HSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n  HSolidElement.prototype.createContent = function () {\n    var rect;\n\n    if (this.data.hasMask) {\n      rect = createNS('rect');\n      rect.setAttribute('width', this.data.sw);\n      rect.setAttribute('height', this.data.sh);\n      rect.setAttribute('fill', this.data.sc);\n      this.svgElement.setAttribute('width', this.data.sw);\n      this.svgElement.setAttribute('height', this.data.sh);\n    } else {\n      rect = createTag('div');\n      rect.style.width = this.data.sw + 'px';\n      rect.style.height = this.data.sh + 'px';\n      rect.style.backgroundColor = this.data.sc;\n    }\n\n    this.layerElement.appendChild(rect);\n  };\n\n  function HShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.shapesContainer = createNS('g');\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n  HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n  HShapeElement.prototype.createContent = function () {\n    var cont;\n    this.baseElement.style.fontSize = 0;\n\n    if (this.data.hasMask) {\n      this.layerElement.appendChild(this.shapesContainer);\n      cont = this.svgElement;\n    } else {\n      cont = createNS('svg');\n      var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n      cont.setAttribute('width', size.w);\n      cont.setAttribute('height', size.h);\n      cont.appendChild(this.shapesContainer);\n      this.layerElement.appendChild(cont);\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n    this.filterUniqueShapes();\n    this.shapeCont = cont;\n  };\n\n  HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n    var i;\n    var len = transformers.length;\n\n    for (i = 0; i < len; i += 1) {\n      point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n    }\n\n    return point;\n  };\n\n  HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n    var shape = item.sh.v;\n    var transformers = item.transformers;\n    var i;\n    var len = shape._length;\n    var vPoint;\n    var oPoint;\n    var nextIPoint;\n    var nextVPoint;\n\n    if (len <= 1) {\n      return;\n    }\n\n    for (i = 0; i < len - 1; i += 1) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n\n    if (shape.c) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n  };\n\n  HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n    this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n    var bounds = this.shapeBoundingBox;\n    boundingBox.x = bmMin(bounds.left, boundingBox.x);\n    boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n    boundingBox.y = bmMin(bounds.top, boundingBox.y);\n    boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n  };\n\n  HShapeElement.prototype.shapeBoundingBox = {\n    left: 0,\n    right: 0,\n    top: 0,\n    bottom: 0\n  };\n  HShapeElement.prototype.tempBoundingBox = {\n    x: 0,\n    xMax: 0,\n    y: 0,\n    yMax: 0,\n    width: 0,\n    height: 0\n  };\n\n  HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n    var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n    for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n      // eslint-disable-line no-plusplus\n      b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n      a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n      c = 3 * p1[i] - 3 * p0[i];\n      b |= 0; // eslint-disable-line no-bitwise\n\n      a |= 0; // eslint-disable-line no-bitwise\n\n      c |= 0; // eslint-disable-line no-bitwise\n\n      if (a === 0 && b === 0) {//\n      } else if (a === 0) {\n        t = -c / b;\n\n        if (t > 0 && t < 1) {\n          bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n        }\n      } else {\n        b2ac = b * b - 4 * c * a;\n\n        if (b2ac >= 0) {\n          t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n          if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n          t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n          if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n        }\n      }\n    }\n\n    this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n    this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n    this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n    this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n  };\n\n  HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n    return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n  };\n\n  HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n    var i;\n    var len = itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (itemsData[i] && itemsData[i].sh) {\n        this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n      } else if (itemsData[i] && itemsData[i].it) {\n        this.calculateBoundingBox(itemsData[i].it, boundingBox);\n      } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n        this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n      }\n    }\n  };\n\n  HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n    var width = 0;\n\n    if (widthProperty.keyframes) {\n      for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n        var kfw = widthProperty.keyframes[i].s;\n\n        if (kfw > width) {\n          width = kfw;\n        }\n      }\n\n      width *= widthProperty.mult;\n    } else {\n      width = widthProperty.v * widthProperty.mult;\n    }\n\n    boundingBox.x -= width;\n    boundingBox.xMax += width;\n    boundingBox.y -= width;\n    boundingBox.yMax += width;\n  };\n\n  HShapeElement.prototype.currentBoxContains = function (box) {\n    return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n  };\n\n  HShapeElement.prototype.renderInnerContent = function () {\n    this._renderShapeFrame();\n\n    if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n      var tempBoundingBox = this.tempBoundingBox;\n      var max = 999999;\n      tempBoundingBox.x = max;\n      tempBoundingBox.xMax = -max;\n      tempBoundingBox.y = max;\n      tempBoundingBox.yMax = -max;\n      this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n      tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n      tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n      if (this.currentBoxContains(tempBoundingBox)) {\n        return;\n      }\n\n      var changed = false;\n\n      if (this.currentBBox.w !== tempBoundingBox.width) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.shapeCont.setAttribute('width', tempBoundingBox.width);\n        changed = true;\n      }\n\n      if (this.currentBBox.h !== tempBoundingBox.height) {\n        this.currentBBox.h = tempBoundingBox.height;\n        this.shapeCont.setAttribute('height', tempBoundingBox.height);\n        changed = true;\n      }\n\n      if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.currentBBox.h = tempBoundingBox.height;\n        this.currentBBox.x = tempBoundingBox.x;\n        this.currentBBox.y = tempBoundingBox.y;\n        this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        var shapeStyle = this.shapeCont.style;\n        var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        shapeStyle.transform = shapeTransform;\n        shapeStyle.webkitTransform = shapeTransform;\n      }\n    }\n  };\n\n  function HTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.textPaths = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n    this.renderType = 'svg';\n    this.isMasked = false;\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n  HTextElement.prototype.createContent = function () {\n    this.isMasked = this.checkMasks();\n\n    if (this.isMasked) {\n      this.renderType = 'svg';\n      this.compW = this.comp.data.w;\n      this.compH = this.comp.data.h;\n      this.svgElement.setAttribute('width', this.compW);\n      this.svgElement.setAttribute('height', this.compH);\n      var g = createNS('g');\n      this.maskedElement.appendChild(g);\n      this.innerElem = g;\n    } else {\n      this.renderType = 'html';\n      this.innerElem = this.layerElement;\n    }\n\n    this.checkParenting();\n  };\n\n  HTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var innerElemStyle = this.innerElem.style;\n    var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n    innerElemStyle.fill = textColor;\n    innerElemStyle.color = textColor;\n\n    if (documentData.sc) {\n      innerElemStyle.stroke = this.buildColor(documentData.sc);\n      innerElemStyle.strokeWidth = documentData.sw + 'px';\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (!this.globalData.fontManager.chars) {\n      innerElemStyle.fontSize = documentData.finalSize + 'px';\n      innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n      if (fontData.fClass) {\n        this.innerElem.className = fontData.fClass;\n      } else {\n        innerElemStyle.fontFamily = fontData.fFamily;\n        var fWeight = documentData.fWeight;\n        var fStyle = documentData.fStyle;\n        innerElemStyle.fontStyle = fStyle;\n        innerElemStyle.fontWeight = fWeight;\n      }\n    }\n\n    var i;\n    var len;\n    var letters = documentData.l;\n    len = letters.length;\n    var tSpan;\n    var tParent;\n    var tCont;\n    var matrixHelper = this.mHelper;\n    var shapes;\n    var shapeStr = '';\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.globalData.fontManager.chars) {\n        if (!this.textPaths[cnt]) {\n          tSpan = createNS('path');\n          tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n          tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n          tSpan.setAttribute('stroke-miterlimit', '4');\n        } else {\n          tSpan = this.textPaths[cnt];\n        }\n\n        if (!this.isMasked) {\n          if (this.textSpans[cnt]) {\n            tParent = this.textSpans[cnt];\n            tCont = tParent.children[0];\n          } else {\n            tParent = createTag('div');\n            tParent.style.lineHeight = 0;\n            tCont = createNS('svg');\n            tCont.appendChild(tSpan);\n            styleDiv(tParent);\n          }\n        }\n      } else if (!this.isMasked) {\n        if (this.textSpans[cnt]) {\n          tParent = this.textSpans[cnt];\n          tSpan = this.textPaths[cnt];\n        } else {\n          tParent = createTag('span');\n          styleDiv(tParent);\n          tSpan = createTag('span');\n          styleDiv(tSpan);\n          tParent.appendChild(tSpan);\n        }\n      } else {\n        tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n      } // tSpan.setAttribute('visibility', 'hidden');\n\n\n      if (this.globalData.fontManager.chars) {\n        var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n        var shapeData;\n\n        if (charData) {\n          shapeData = charData.data;\n        } else {\n          shapeData = null;\n        }\n\n        matrixHelper.reset();\n\n        if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n          shapes = shapeData.shapes[0].it;\n          matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n          shapeStr = this.createPathShape(matrixHelper, shapes);\n          tSpan.setAttribute('d', shapeStr);\n        }\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent);\n\n          if (shapeData && shapeData.shapes) {\n            // document.body.appendChild is needed to get exact measure of shape\n            document.body.appendChild(tCont);\n            var boundingBox = tCont.getBBox();\n            tCont.setAttribute('width', boundingBox.width + 2);\n            tCont.setAttribute('height', boundingBox.height + 2);\n            tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n            var tContStyle = tCont.style;\n            var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n            tContStyle.transform = tContTranslation;\n            tContStyle.webkitTransform = tContTranslation;\n            letters[i].yOffset = boundingBox.y - 1;\n          } else {\n            tCont.setAttribute('width', 1);\n            tCont.setAttribute('height', 1);\n          }\n\n          tParent.appendChild(tCont);\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } else {\n        tSpan.textContent = letters[i].val;\n        tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent); //\n\n          var tStyle = tSpan.style;\n          var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n          tStyle.transform = tSpanTranslation;\n          tStyle.webkitTransform = tSpanTranslation;\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } //\n\n\n      if (!this.isMasked) {\n        this.textSpans[cnt] = tParent;\n      } else {\n        this.textSpans[cnt] = tSpan;\n      }\n\n      this.textSpans[cnt].style.display = 'block';\n      this.textPaths[cnt] = tSpan;\n      cnt += 1;\n    }\n\n    while (cnt < this.textSpans.length) {\n      this.textSpans[cnt].style.display = 'none';\n      cnt += 1;\n    }\n  };\n\n  HTextElement.prototype.renderInnerContent = function () {\n    var svgStyle;\n\n    if (this.data.singleShape) {\n      if (!this._isFirstFrame && !this.lettersChangedFlag) {\n        return;\n      }\n\n      if (this.isMasked && this.finalTransform._matMdf) {\n        // Todo Benchmark if using this is better than getBBox\n        this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n        svgStyle = this.svgElement.style;\n        var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n        svgStyle.transform = translation;\n        svgStyle.webkitTransform = translation;\n      }\n    }\n\n    this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n    if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n      return;\n    }\n\n    var i;\n    var len;\n    var count = 0;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var textSpan;\n    var textPath;\n\n    for (i = 0; i < len; i += 1) {\n      if (letters[i].n) {\n        count += 1;\n      } else {\n        textSpan = this.textSpans[i];\n        textPath = this.textPaths[i];\n        renderedLetter = renderedLetters[count];\n        count += 1;\n\n        if (renderedLetter._mdf.m) {\n          if (!this.isMasked) {\n            textSpan.style.webkitTransform = renderedLetter.m;\n            textSpan.style.transform = renderedLetter.m;\n          } else {\n            textSpan.setAttribute('transform', renderedLetter.m);\n          }\n        } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n        textSpan.style.opacity = renderedLetter.o;\n\n        if (renderedLetter.sw && renderedLetter._mdf.sw) {\n          textPath.setAttribute('stroke-width', renderedLetter.sw);\n        }\n\n        if (renderedLetter.sc && renderedLetter._mdf.sc) {\n          textPath.setAttribute('stroke', renderedLetter.sc);\n        }\n\n        if (renderedLetter.fc && renderedLetter._mdf.fc) {\n          textPath.setAttribute('fill', renderedLetter.fc);\n          textPath.style.color = renderedLetter.fc;\n        }\n      }\n    }\n\n    if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n      var boundingBox = this.innerElem.getBBox();\n\n      if (this.currentBBox.w !== boundingBox.width) {\n        this.currentBBox.w = boundingBox.width;\n        this.svgElement.setAttribute('width', boundingBox.width);\n      }\n\n      if (this.currentBBox.h !== boundingBox.height) {\n        this.currentBBox.h = boundingBox.height;\n        this.svgElement.setAttribute('height', boundingBox.height);\n      }\n\n      var margin = 1;\n\n      if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n        this.currentBBox.w = boundingBox.width + margin * 2;\n        this.currentBBox.h = boundingBox.height + margin * 2;\n        this.currentBBox.x = boundingBox.x - margin;\n        this.currentBBox.y = boundingBox.y - margin;\n        this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        svgStyle = this.svgElement.style;\n        var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        svgStyle.transform = svgTransform;\n        svgStyle.webkitTransform = svgTransform;\n      }\n    }\n  };\n\n  function HCameraElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initHierarchy();\n    var getProp = PropertyFactory.getProp;\n    this.pe = getProp(this, data.pe, 0, 0, this);\n\n    if (data.ks.p.s) {\n      this.px = getProp(this, data.ks.p.x, 1, 0, this);\n      this.py = getProp(this, data.ks.p.y, 1, 0, this);\n      this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n    } else {\n      this.p = getProp(this, data.ks.p, 1, 0, this);\n    }\n\n    if (data.ks.a) {\n      this.a = getProp(this, data.ks.a, 1, 0, this);\n    }\n\n    if (data.ks.or.k.length && data.ks.or.k[0].to) {\n      var i;\n      var len = data.ks.or.k.length;\n\n      for (i = 0; i < len; i += 1) {\n        data.ks.or.k[i].to = null;\n        data.ks.or.k[i].ti = null;\n      }\n    }\n\n    this.or = getProp(this, data.ks.or, 1, degToRads, this);\n    this.or.sh = true;\n    this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n    this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n    this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n    this.mat = new Matrix();\n    this._prevMat = new Matrix();\n    this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n    this.finalTransform = {\n      mProp: this\n    };\n  }\n\n  extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n  HCameraElement.prototype.setup = function () {\n    var i;\n    var len = this.comp.threeDElements.length;\n    var comp;\n    var perspectiveStyle;\n    var containerStyle;\n\n    for (i = 0; i < len; i += 1) {\n      // [perspectiveElem,container]\n      comp = this.comp.threeDElements[i];\n\n      if (comp.type === '3d') {\n        perspectiveStyle = comp.perspectiveElem.style;\n        containerStyle = comp.container.style;\n        var perspective = this.pe.v + 'px';\n        var origin = '0px 0px 0px';\n        var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n        perspectiveStyle.perspective = perspective;\n        perspectiveStyle.webkitPerspective = perspective;\n        containerStyle.transformOrigin = origin;\n        containerStyle.mozTransformOrigin = origin;\n        containerStyle.webkitTransformOrigin = origin;\n        perspectiveStyle.transform = matrix;\n        perspectiveStyle.webkitTransform = matrix;\n      }\n    }\n  };\n\n  HCameraElement.prototype.createElements = function () {};\n\n  HCameraElement.prototype.hide = function () {};\n\n  HCameraElement.prototype.renderFrame = function () {\n    var _mdf = this._isFirstFrame;\n    var i;\n    var len;\n\n    if (this.hierarchy) {\n      len = this.hierarchy.length;\n\n      for (i = 0; i < len; i += 1) {\n        _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n      }\n    }\n\n    if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n      this.mat.reset();\n\n      if (this.hierarchy) {\n        len = this.hierarchy.length - 1;\n\n        for (i = len; i >= 0; i -= 1) {\n          var mTransf = this.hierarchy[i].finalTransform.mProp;\n          this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n          this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n          this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n          this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n          this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n        }\n      }\n\n      if (this.p) {\n        this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n      } else {\n        this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n      }\n\n      if (this.a) {\n        var diffVector;\n\n        if (this.p) {\n          diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n        } else {\n          diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n        }\n\n        var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n        var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n        var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n        var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n        var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n        this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n      }\n\n      this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n      this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n      this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n      this.mat.translate(0, 0, this.pe.v);\n      var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n      if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n        len = this.comp.threeDElements.length;\n        var comp;\n        var perspectiveStyle;\n        var containerStyle;\n\n        for (i = 0; i < len; i += 1) {\n          comp = this.comp.threeDElements[i];\n\n          if (comp.type === '3d') {\n            if (hasMatrixChanged) {\n              var matValue = this.mat.toCSS();\n              containerStyle = comp.container.style;\n              containerStyle.transform = matValue;\n              containerStyle.webkitTransform = matValue;\n            }\n\n            if (this.pe._mdf) {\n              perspectiveStyle = comp.perspectiveElem.style;\n              perspectiveStyle.perspective = this.pe.v + 'px';\n              perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n            }\n          }\n        }\n\n        this.mat.clone(this._prevMat);\n      }\n    }\n\n    this._isFirstFrame = false;\n  };\n\n  HCameraElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  HCameraElement.prototype.destroy = function () {};\n\n  HCameraElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  function HImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n  HImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    var img = new Image();\n\n    if (this.data.hasMask) {\n      this.imageElem = createNS('image');\n      this.imageElem.setAttribute('width', this.assetData.w + 'px');\n      this.imageElem.setAttribute('height', this.assetData.h + 'px');\n      this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n      this.layerElement.appendChild(this.imageElem);\n      this.baseElement.setAttribute('width', this.assetData.w);\n      this.baseElement.setAttribute('height', this.assetData.h);\n    } else {\n      this.layerElement.appendChild(img);\n    }\n\n    img.crossOrigin = 'anonymous';\n    img.src = assetPath;\n\n    if (this.data.ln) {\n      this.baseElement.setAttribute('id', this.data.ln);\n    }\n  };\n\n  function HybridRendererBase(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      }\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([BaseRenderer], HybridRendererBase);\n  HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n  HybridRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newDOMElement = element.getBaseElement();\n\n    if (!newDOMElement) {\n      return;\n    }\n\n    var layer = this.layers[pos];\n\n    if (!layer.ddd || !this.supports3d) {\n      if (this.threeDElements) {\n        this.addTo3dContainer(newDOMElement, pos);\n      } else {\n        var i = 0;\n        var nextDOMElement;\n        var nextLayer;\n        var tmpDOMElement;\n\n        while (i < pos) {\n          if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n            nextLayer = this.elements[i];\n            tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n            nextDOMElement = tmpDOMElement || nextDOMElement;\n          }\n\n          i += 1;\n        }\n\n        if (nextDOMElement) {\n          if (!layer.ddd || !this.supports3d) {\n            this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n          }\n        } else if (!layer.ddd || !this.supports3d) {\n          this.layerElement.appendChild(newDOMElement);\n        }\n      }\n    } else {\n      this.addTo3dContainer(newDOMElement, pos);\n    }\n  };\n\n  HybridRendererBase.prototype.createShape = function (data) {\n    if (!this.supports3d) {\n      return new SVGShapeElement(data, this.globalData, this);\n    }\n\n    return new HShapeElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createText = function (data) {\n    if (!this.supports3d) {\n      return new SVGTextLottieElement(data, this.globalData, this);\n    }\n\n    return new HTextElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createCamera = function (data) {\n    this.camera = new HCameraElement(data, this.globalData, this);\n    return this.camera;\n  };\n\n  HybridRendererBase.prototype.createImage = function (data) {\n    if (!this.supports3d) {\n      return new IImageElement(data, this.globalData, this);\n    }\n\n    return new HImageElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createSolid = function (data) {\n    if (!this.supports3d) {\n      return new ISolidElement(data, this.globalData, this);\n    }\n\n    return new HSolidElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n        return this.threeDElements[i].perspectiveElem;\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n    var perspectiveElem = createTag('div');\n    var style;\n    var containerStyle;\n    styleDiv(perspectiveElem);\n    var container = createTag('div');\n    styleDiv(container);\n\n    if (type === '3d') {\n      style = perspectiveElem.style;\n      style.width = this.globalData.compSize.w + 'px';\n      style.height = this.globalData.compSize.h + 'px';\n      var center = '50% 50%';\n      style.webkitTransformOrigin = center;\n      style.mozTransformOrigin = center;\n      style.transformOrigin = center;\n      containerStyle = container.style;\n      var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n      containerStyle.transform = matrix;\n      containerStyle.webkitTransform = matrix;\n    }\n\n    perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n    var threeDContainerData = {\n      container: container,\n      perspectiveElem: perspectiveElem,\n      startPos: pos,\n      endPos: pos,\n      type: type\n    };\n    this.threeDElements.push(threeDContainerData);\n    return threeDContainerData;\n  };\n\n  HybridRendererBase.prototype.build3dContainers = function () {\n    var i;\n    var len = this.layers.length;\n    var lastThreeDContainerData;\n    var currentContainer = '';\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n        if (currentContainer !== '3d') {\n          currentContainer = '3d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      } else {\n        if (currentContainer !== '2d') {\n          currentContainer = '2d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      }\n    }\n\n    len = this.threeDElements.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n    }\n  };\n\n  HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (pos <= this.threeDElements[i].endPos) {\n        var j = this.threeDElements[i].startPos;\n        var nextElement;\n\n        while (j < pos) {\n          if (this.elements[j] && this.elements[j].getBaseElement) {\n            nextElement = this.elements[j].getBaseElement();\n          }\n\n          j += 1;\n        }\n\n        if (nextElement) {\n          this.threeDElements[i].container.insertBefore(elem, nextElement);\n        } else {\n          this.threeDElements[i].container.appendChild(elem);\n        }\n\n        break;\n      }\n\n      i += 1;\n    }\n  };\n\n  HybridRendererBase.prototype.configAnimation = function (animData) {\n    var resizerElem = createTag('div');\n    var wrapper = this.animationItem.wrapper;\n    var style = resizerElem.style;\n    style.width = animData.w + 'px';\n    style.height = animData.h + 'px';\n    this.resizerElem = resizerElem;\n    styleDiv(resizerElem);\n    style.transformStyle = 'flat';\n    style.mozTransformStyle = 'flat';\n    style.webkitTransformStyle = 'flat';\n\n    if (this.renderConfig.className) {\n      resizerElem.setAttribute('class', this.renderConfig.className);\n    }\n\n    wrapper.appendChild(resizerElem);\n    style.overflow = 'hidden';\n    var svg = createNS('svg');\n    svg.setAttribute('width', '1');\n    svg.setAttribute('height', '1');\n    styleDiv(svg);\n    this.resizerElem.appendChild(svg);\n    var defs = createNS('defs');\n    svg.appendChild(defs);\n    this.data = animData; // Mask animation\n\n    this.setupGlobalData(animData, svg);\n    this.globalData.defs = defs;\n    this.layers = animData.layers;\n    this.layerElement = this.resizerElem;\n    this.build3dContainers();\n    this.updateContainerSize();\n  };\n\n  HybridRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.animationItem.container = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      this.elements[i].destroy();\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  HybridRendererBase.prototype.updateContainerSize = function () {\n    var elementWidth = this.animationItem.wrapper.offsetWidth;\n    var elementHeight = this.animationItem.wrapper.offsetHeight;\n    var elementRel = elementWidth / elementHeight;\n    var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n    var sx;\n    var sy;\n    var tx;\n    var ty;\n\n    if (animationRel > elementRel) {\n      sx = elementWidth / this.globalData.compSize.w;\n      sy = elementWidth / this.globalData.compSize.w;\n      tx = 0;\n      ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n    } else {\n      sx = elementHeight / this.globalData.compSize.h;\n      sy = elementHeight / this.globalData.compSize.h;\n      tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n      ty = 0;\n    }\n\n    var style = this.resizerElem.style;\n    style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n    style.transform = style.webkitTransform;\n  };\n\n  HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n  HybridRendererBase.prototype.hide = function () {\n    this.resizerElem.style.display = 'none';\n  };\n\n  HybridRendererBase.prototype.show = function () {\n    this.resizerElem.style.display = 'block';\n  };\n\n  HybridRendererBase.prototype.initItems = function () {\n    this.buildAllItems();\n\n    if (this.camera) {\n      this.camera.setup();\n    } else {\n      var cWidth = this.globalData.compSize.w;\n      var cHeight = this.globalData.compSize.h;\n      var i;\n      var len = this.threeDElements.length;\n\n      for (i = 0; i < len; i += 1) {\n        var style = this.threeDElements[i].perspectiveElem.style;\n        style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n        style.perspective = style.webkitPerspective;\n      }\n    }\n  };\n\n  HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n    var floatingContainer = createTag('div');\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  function HCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = !data.hasMask;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n  HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n  HCompElement.prototype.createContainerElements = function () {\n    this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n    if (this.data.hasMask) {\n      this.svgElement.setAttribute('width', this.data.w);\n      this.svgElement.setAttribute('height', this.data.h);\n      this.transformedElement = this.baseElement;\n    } else {\n      this.transformedElement = this.layerElement;\n    }\n  };\n\n  HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n    var j = 0;\n    var nextElement;\n\n    while (j < pos) {\n      if (this.elements[j] && this.elements[j].getBaseElement) {\n        nextElement = this.elements[j].getBaseElement();\n      }\n\n      j += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(elem, nextElement);\n    } else {\n      this.layerElement.appendChild(elem);\n    }\n  };\n\n  HCompElement.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  function HybridRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      }\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([HybridRendererBase], HybridRenderer);\n\n  HybridRenderer.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  var Expressions = function () {\n    var ob = {};\n    ob.initExpressions = initExpressions;\n\n    function initExpressions(animation) {\n      var stackCount = 0;\n      var registers = [];\n\n      function pushExpression() {\n        stackCount += 1;\n      }\n\n      function popExpression() {\n        stackCount -= 1;\n\n        if (stackCount === 0) {\n          releaseInstances();\n        }\n      }\n\n      function registerExpressionProperty(expression) {\n        if (registers.indexOf(expression) === -1) {\n          registers.push(expression);\n        }\n      }\n\n      function releaseInstances() {\n        var i;\n        var len = registers.length;\n\n        for (i = 0; i < len; i += 1) {\n          registers[i].release();\n        }\n\n        registers.length = 0;\n      }\n\n      animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n      animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n      animation.renderer.globalData.pushExpression = pushExpression;\n      animation.renderer.globalData.popExpression = popExpression;\n      animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n    }\n\n    return ob;\n  }();\n\n  function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n  /* eslint-disable */\n\n  /*\r\n   Copyright 2014 David Bau.\r\n\r\n   Permission is hereby granted, free of charge, to any person obtaining\r\n   a copy of this software and associated documentation files (the\r\n   \"Software\"), to deal in the Software without restriction, including\r\n   without limitation the rights to use, copy, modify, merge, publish,\r\n   distribute, sublicense, and/or sell copies of the Software, and to\r\n   permit persons to whom the Software is furnished to do so, subject to\r\n   the following conditions:\r\n\r\n   The above copyright notice and this permission notice shall be\r\n   included in all copies or substantial portions of the Software.\r\n\r\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n   */\n  function seedRandom(pool, math) {\n    //\n    // The following constants are related to IEEE 754 limits.\n    //\n    var global = this,\n        width = 256,\n        // each RC4 output is 0 <= x < 256\n    chunks = 6,\n        // at least six RC4 outputs for each double\n    digits = 52,\n        // there are 52 significant digits in a double\n    rngname = 'random',\n        // rngname: name for Math.random and Math.seedrandom\n    startdenom = math.pow(width, chunks),\n        significance = math.pow(2, digits),\n        overflow = significance * 2,\n        mask = width - 1,\n        nodecrypto; // node.js crypto module, initialized at the bottom.\n    //\n    // seedrandom()\n    // This is the seedrandom function described above.\n    //\n\n    function seedrandom(seed, options, callback) {\n      var key = [];\n      options = options === true ? {\n        entropy: true\n      } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n      var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n      var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n      // randomness in every bit of the mantissa of the IEEE 754 value.\n\n      var prng = function prng() {\n        var n = arc4.g(chunks),\n            // Start with a numerator n < 2 ^ 48\n        d = startdenom,\n            //   and denominator d = 2 ^ 48.\n        x = 0; //   and no 'extra last byte'.\n\n        while (n < significance) {\n          // Fill up all significant digits by\n          n = (n + x) * width; //   shifting numerator and\n\n          d *= width; //   denominator and generating a\n\n          x = arc4.g(1); //   new least-significant-byte.\n        }\n\n        while (n >= overflow) {\n          // To avoid rounding up, before adding\n          n /= 2; //   last byte, shift everything\n\n          d /= 2; //   right using integer math until\n\n          x >>>= 1; //   we have exactly the desired bits.\n        }\n\n        return (n + x) / d; // Form the number within [0, 1).\n      };\n\n      prng.int32 = function () {\n        return arc4.g(4) | 0;\n      };\n\n      prng.quick = function () {\n        return arc4.g(4) / 0x100000000;\n      };\n\n      prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n      mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n      return (options.pass || callback || function (prng, seed, is_math_call, state) {\n        if (state) {\n          // Load the arc4 state from the given state if it has an S array.\n          if (state.S) {\n            copy(state, arc4);\n          } // Only provide the .state method if requested via options.state.\n\n\n          prng.state = function () {\n            return copy(arc4, {});\n          };\n        } // If called as a method of Math (Math.seedrandom()), mutate\n        // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n        if (is_math_call) {\n          math[rngname] = prng;\n          return seed;\n        } // Otherwise, it is a newer calling convention, so return the\n        // prng directly.\n        else return prng;\n      })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n    }\n\n    math['seed' + rngname] = seedrandom; //\n    // ARC4\n    //\n    // An ARC4 implementation.  The constructor takes a key in the form of\n    // an array of at most (width) integers that should be 0 <= x < (width).\n    //\n    // The g(count) method returns a pseudorandom integer that concatenates\n    // the next (count) outputs from ARC4.  Its return value is a number x\n    // that is in the range 0 <= x < (width ^ count).\n    //\n\n    function ARC4(key) {\n      var t,\n          keylen = key.length,\n          me = this,\n          i = 0,\n          j = me.i = me.j = 0,\n          s = me.S = []; // The empty key [] is treated as [0].\n\n      if (!keylen) {\n        key = [keylen++];\n      } // Set up S using the standard key scheduling algorithm.\n\n\n      while (i < width) {\n        s[i] = i++;\n      }\n\n      for (i = 0; i < width; i++) {\n        s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n        s[j] = t;\n      } // The \"g\" method returns the next (count) outputs as one number.\n\n\n      me.g = function (count) {\n        // Using instance members instead of closure state nearly doubles speed.\n        var t,\n            r = 0,\n            i = me.i,\n            j = me.j,\n            s = me.S;\n\n        while (count--) {\n          t = s[i = mask & i + 1];\n          r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n        }\n\n        me.i = i;\n        me.j = j;\n        return r; // For robust unpredictability, the function call below automatically\n        // discards an initial batch of values.  This is called RC4-drop[256].\n        // See http://google.com/search?q=rsa+fluhrer+response&btnI\n      };\n    } //\n    // copy()\n    // Copies internal state of ARC4 to or from a plain object.\n    //\n\n\n    function copy(f, t) {\n      t.i = f.i;\n      t.j = f.j;\n      t.S = f.S.slice();\n      return t;\n    } //\n    // flatten()\n    // Converts an object tree to nested arrays of strings.\n    //\n\n\n    function flatten(obj, depth) {\n      var result = [],\n          typ = _typeof$1(obj),\n          prop;\n\n      if (depth && typ == 'object') {\n        for (prop in obj) {\n          try {\n            result.push(flatten(obj[prop], depth - 1));\n          } catch (e) {}\n        }\n      }\n\n      return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n    } //\n    // mixkey()\n    // Mixes a string seed into a key that is an array of integers, and\n    // returns a shortened string seed that is equivalent to the result key.\n    //\n\n\n    function mixkey(seed, key) {\n      var stringseed = seed + '',\n          smear,\n          j = 0;\n\n      while (j < stringseed.length) {\n        key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n      }\n\n      return tostring(key);\n    } //\n    // autoseed()\n    // Returns an object for autoseeding, using window.crypto and Node crypto\n    // module if available.\n    //\n\n\n    function autoseed() {\n      try {\n        if (nodecrypto) {\n          return tostring(nodecrypto.randomBytes(width));\n        }\n\n        var out = new Uint8Array(width);\n        (global.crypto || global.msCrypto).getRandomValues(out);\n        return tostring(out);\n      } catch (e) {\n        var browser = global.navigator,\n            plugins = browser && browser.plugins;\n        return [+new Date(), global, plugins, global.screen, tostring(pool)];\n      }\n    } //\n    // tostring()\n    // Converts an array of charcodes to a string\n    //\n\n\n    function tostring(a) {\n      return String.fromCharCode.apply(0, a);\n    } //\n    // When seedrandom.js is loaded, we immediately mix a few bits\n    // from the built-in RNG into the entropy pool.  Because we do\n    // not want to interfere with deterministic PRNG state later,\n    // seedrandom will not call math.random on its own again after\n    // initialization.\n    //\n\n\n    mixkey(math.random(), pool); //\n    // Nodejs and AMD support: export the implementation as a module using\n    // either convention.\n    //\n    // End anonymous scope, and pass initial values.\n  }\n\n  ;\n\n  function initialize$2(BMMath) {\n    seedRandom([], BMMath);\n  }\n\n  var propTypes = {\n    SHAPE: 'shape'\n  };\n\n  function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n  var ExpressionManager = function () {\n    'use strict';\n\n    var ob = {};\n    var Math = BMMath;\n    var window = null;\n    var document = null;\n    var XMLHttpRequest = null;\n    var fetch = null;\n    var frames = null;\n    initialize$2(BMMath);\n\n    function $bm_isInstanceOfArray(arr) {\n      return arr.constructor === Array || arr.constructor === Float32Array;\n    }\n\n    function isNumerable(tOfV, v) {\n      return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\n    }\n\n    function $bm_neg(a) {\n      var tOfA = _typeof(a);\n\n      if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n        return -a;\n      }\n\n      if ($bm_isInstanceOfArray(a)) {\n        var i;\n        var lenA = a.length;\n        var retArr = [];\n\n        for (i = 0; i < lenA; i += 1) {\n          retArr[i] = -a[i];\n        }\n\n        return retArr;\n      }\n\n      if (a.propType) {\n        return a.v;\n      }\n\n      return -a;\n    }\n\n    var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n    var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n    var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n    function sum(a, b) {\n      var tOfA = _typeof(a);\n\n      var tOfB = _typeof(b);\n\n      if (tOfA === 'string' || tOfB === 'string') {\n        return a + b;\n      }\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a + b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] += b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a + b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] + b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    var add = sum;\n\n    function sub(a, b) {\n      var tOfA = _typeof(a);\n\n      var tOfB = _typeof(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        if (tOfA === 'string') {\n          a = parseInt(a, 10);\n        }\n\n        if (tOfB === 'string') {\n          b = parseInt(b, 10);\n        }\n\n        return a - b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] -= b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a - b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] - b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    function mul(a, b) {\n      var tOfA = _typeof(a);\n\n      var tOfB = _typeof(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a * b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] * b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a * b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function div(a, b) {\n      var tOfA = _typeof(a);\n\n      var tOfB = _typeof(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a / b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] / b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a / b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function mod(a, b) {\n      if (typeof a === 'string') {\n        a = parseInt(a, 10);\n      }\n\n      if (typeof b === 'string') {\n        b = parseInt(b, 10);\n      }\n\n      return a % b;\n    }\n\n    var $bm_sum = sum;\n    var $bm_sub = sub;\n    var $bm_mul = mul;\n    var $bm_div = div;\n    var $bm_mod = mod;\n\n    function clamp(num, min, max) {\n      if (min > max) {\n        var mm = max;\n        max = min;\n        min = mm;\n      }\n\n      return Math.min(Math.max(num, min), max);\n    }\n\n    function radiansToDegrees(val) {\n      return val / degToRads;\n    }\n\n    var radians_to_degrees = radiansToDegrees;\n\n    function degreesToRadians(val) {\n      return val * degToRads;\n    }\n\n    var degrees_to_radians = radiansToDegrees;\n    var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n    function length(arr1, arr2) {\n      if (typeof arr1 === 'number' || arr1 instanceof Number) {\n        arr2 = arr2 || 0;\n        return Math.abs(arr1 - arr2);\n      }\n\n      if (!arr2) {\n        arr2 = helperLengthArray;\n      }\n\n      var i;\n      var len = Math.min(arr1.length, arr2.length);\n      var addedLength = 0;\n\n      for (i = 0; i < len; i += 1) {\n        addedLength += Math.pow(arr2[i] - arr1[i], 2);\n      }\n\n      return Math.sqrt(addedLength);\n    }\n\n    function normalize(vec) {\n      return div(vec, length(vec));\n    }\n\n    function rgbToHsl(val) {\n      var r = val[0];\n      var g = val[1];\n      var b = val[2];\n      var max = Math.max(r, g, b);\n      var min = Math.min(r, g, b);\n      var h;\n      var s;\n      var l = (max + min) / 2;\n\n      if (max === min) {\n        h = 0; // achromatic\n\n        s = 0; // achromatic\n      } else {\n        var d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n        switch (max) {\n          case r:\n            h = (g - b) / d + (g < b ? 6 : 0);\n            break;\n\n          case g:\n            h = (b - r) / d + 2;\n            break;\n\n          case b:\n            h = (r - g) / d + 4;\n            break;\n\n          default:\n            break;\n        }\n\n        h /= 6;\n      }\n\n      return [h, s, l, val[3]];\n    }\n\n    function hue2rgb(p, q, t) {\n      if (t < 0) t += 1;\n      if (t > 1) t -= 1;\n      if (t < 1 / 6) return p + (q - p) * 6 * t;\n      if (t < 1 / 2) return q;\n      if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n      return p;\n    }\n\n    function hslToRgb(val) {\n      var h = val[0];\n      var s = val[1];\n      var l = val[2];\n      var r;\n      var g;\n      var b;\n\n      if (s === 0) {\n        r = l; // achromatic\n\n        b = l; // achromatic\n\n        g = l; // achromatic\n      } else {\n        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        var p = 2 * l - q;\n        r = hue2rgb(p, q, h + 1 / 3);\n        g = hue2rgb(p, q, h);\n        b = hue2rgb(p, q, h - 1 / 3);\n      }\n\n      return [r, g, b, val[3]];\n    }\n\n    function linear(t, tMin, tMax, value1, value2) {\n      if (value1 === undefined || value2 === undefined) {\n        value1 = tMin;\n        value2 = tMax;\n        tMin = 0;\n        tMax = 1;\n      }\n\n      if (tMax < tMin) {\n        var _tMin = tMax;\n        tMax = tMin;\n        tMin = _tMin;\n      }\n\n      if (t <= tMin) {\n        return value1;\n      }\n\n      if (t >= tMax) {\n        return value2;\n      }\n\n      var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n      if (!value1.length) {\n        return value1 + (value2 - value1) * perc;\n      }\n\n      var i;\n      var len = value1.length;\n      var arr = createTypedArray('float32', len);\n\n      for (i = 0; i < len; i += 1) {\n        arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n      }\n\n      return arr;\n    }\n\n    function random(min, max) {\n      if (max === undefined) {\n        if (min === undefined) {\n          min = 0;\n          max = 1;\n        } else {\n          max = min;\n          min = undefined;\n        }\n      }\n\n      if (max.length) {\n        var i;\n        var len = max.length;\n\n        if (!min) {\n          min = createTypedArray('float32', len);\n        }\n\n        var arr = createTypedArray('float32', len);\n        var rnd = BMMath.random();\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = min[i] + rnd * (max[i] - min[i]);\n        }\n\n        return arr;\n      }\n\n      if (min === undefined) {\n        min = 0;\n      }\n\n      var rndm = BMMath.random();\n      return min + rndm * (max - min);\n    }\n\n    function createPath(points, inTangents, outTangents, closed) {\n      var i;\n      var len = points.length;\n      var path = shapePool.newElement();\n      path.setPathData(!!closed, len);\n      var arrPlaceholder = [0, 0];\n      var inVertexPoint;\n      var outVertexPoint;\n\n      for (i = 0; i < len; i += 1) {\n        inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n        outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n        path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n      }\n\n      return path;\n    }\n\n    function initiateExpression(elem, data, property) {\n      var val = data.x;\n      var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n      var _needsRandom = val.indexOf('random') !== -1;\n\n      var elemType = elem.data.ty;\n      var transform;\n      var $bm_transform;\n      var content;\n      var effect;\n      var thisProperty = property;\n      thisProperty.valueAtTime = thisProperty.getValueAtTime;\n      Object.defineProperty(thisProperty, 'value', {\n        get: function get() {\n          return thisProperty.v;\n        }\n      });\n      elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n      elem.comp.displayStartTime = 0;\n      var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      var width = elem.data.sw ? elem.data.sw : 0;\n      var height = elem.data.sh ? elem.data.sh : 0;\n      var name = elem.data.nm;\n      var loopIn;\n      var loop_in;\n      var loopOut;\n      var loop_out;\n      var smooth;\n      var toWorld;\n      var fromWorld;\n      var fromComp;\n      var toComp;\n      var fromCompToSurface;\n      var position;\n      var rotation;\n      var anchorPoint;\n      var scale;\n      var thisLayer;\n      var thisComp;\n      var mask;\n      var valueAtTime;\n      var velocityAtTime;\n      var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n      var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n      var numKeys = property.kf ? data.k.length : 0;\n      var active = !this.data || this.data.hd !== true;\n\n      var wiggle = function wiggle(freq, amp) {\n        var iWiggle;\n        var j;\n        var lenWiggle = this.pv.length ? this.pv.length : 1;\n        var addedAmps = createTypedArray('float32', lenWiggle);\n        freq = 5;\n        var iterations = Math.floor(time * freq);\n        iWiggle = 0;\n        j = 0;\n\n        while (iWiggle < iterations) {\n          // var rnd = BMMath.random();\n          for (j = 0; j < lenWiggle; j += 1) {\n            addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n          }\n\n          iWiggle += 1;\n        } // var rnd2 = BMMath.random();\n\n\n        var periods = time * freq;\n        var perc = periods - Math.floor(periods);\n        var arr = createTypedArray('float32', lenWiggle);\n\n        if (lenWiggle > 1) {\n          for (j = 0; j < lenWiggle; j += 1) {\n            arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n            // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n          }\n\n          return arr;\n        }\n\n        return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n      }.bind(this);\n\n      if (thisProperty.loopIn) {\n        loopIn = thisProperty.loopIn.bind(thisProperty);\n        loop_in = loopIn;\n      }\n\n      if (thisProperty.loopOut) {\n        loopOut = thisProperty.loopOut.bind(thisProperty);\n        loop_out = loopOut;\n      }\n\n      if (thisProperty.smooth) {\n        smooth = thisProperty.smooth.bind(thisProperty);\n      }\n\n      function loopInDuration(type, duration) {\n        return loopIn(type, duration, true);\n      }\n\n      function loopOutDuration(type, duration) {\n        return loopOut(type, duration, true);\n      }\n\n      if (this.getValueAtTime) {\n        valueAtTime = this.getValueAtTime.bind(this);\n      }\n\n      if (this.getVelocityAtTime) {\n        velocityAtTime = this.getVelocityAtTime.bind(this);\n      }\n\n      var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n      function lookAt(elem1, elem2) {\n        var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n        var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n        var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n        return [yaw, pitch, 0];\n      }\n\n      function easeOut(t, tMin, tMax, val1, val2) {\n        return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function easeIn(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n      }\n\n      function ease(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function applyEase(fn, t, tMin, tMax, val1, val2) {\n        if (val1 === undefined) {\n          val1 = tMin;\n          val2 = tMax;\n        } else {\n          t = (t - tMin) / (tMax - tMin);\n        }\n\n        if (t > 1) {\n          t = 1;\n        } else if (t < 0) {\n          t = 0;\n        }\n\n        var mult = fn(t);\n\n        if ($bm_isInstanceOfArray(val1)) {\n          var iKey;\n          var lenKey = val1.length;\n          var arr = createTypedArray('float32', lenKey);\n\n          for (iKey = 0; iKey < lenKey; iKey += 1) {\n            arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n          }\n\n          return arr;\n        }\n\n        return (val2 - val1) * mult + val1;\n      }\n\n      function nearestKey(time) {\n        var iKey;\n        var lenKey = data.k.length;\n        var index;\n        var keyTime;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          index = 0;\n          keyTime = 0;\n        } else {\n          index = -1;\n          time *= elem.comp.globalData.frameRate;\n\n          if (time < data.k[0].t) {\n            index = 1;\n            keyTime = data.k[0].t;\n          } else {\n            for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n              if (time === data.k[iKey].t) {\n                index = iKey + 1;\n                keyTime = data.k[iKey].t;\n                break;\n              } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n                if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n                  index = iKey + 2;\n                  keyTime = data.k[iKey + 1].t;\n                } else {\n                  index = iKey + 1;\n                  keyTime = data.k[iKey].t;\n                }\n\n                break;\n              }\n            }\n\n            if (index === -1) {\n              index = iKey + 1;\n              keyTime = data.k[iKey].t;\n            }\n          }\n        }\n\n        var obKey = {};\n        obKey.index = index;\n        obKey.time = keyTime / elem.comp.globalData.frameRate;\n        return obKey;\n      }\n\n      function key(ind) {\n        var obKey;\n        var iKey;\n        var lenKey;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          throw new Error('The property has no keyframe at index ' + ind);\n        }\n\n        ind -= 1;\n        obKey = {\n          time: data.k[ind].t / elem.comp.globalData.frameRate,\n          value: []\n        };\n        var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n        lenKey = arr.length;\n\n        for (iKey = 0; iKey < lenKey; iKey += 1) {\n          obKey[iKey] = arr[iKey];\n          obKey.value[iKey] = arr[iKey];\n        }\n\n        return obKey;\n      }\n\n      function framesToTime(fr, fps) {\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return fr / fps;\n      }\n\n      function timeToFrames(t, fps) {\n        if (!t && t !== 0) {\n          t = time;\n        }\n\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return t * fps;\n      }\n\n      function seedRandom(seed) {\n        BMMath.seedrandom(randSeed + seed);\n      }\n\n      function sourceRectAtTime() {\n        return elem.sourceRectAtTime();\n      }\n\n      function substring(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substring(init);\n          }\n\n          return value.substring(init, end);\n        }\n\n        return '';\n      }\n\n      function substr(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substr(init);\n          }\n\n          return value.substr(init, end);\n        }\n\n        return '';\n      }\n\n      function posterizeTime(framesPerSecond) {\n        time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n        value = valueAtTime(time);\n      }\n\n      var time;\n      var velocity;\n      var value;\n      var text;\n      var textIndex;\n      var textTotal;\n      var selectorValue;\n      var index = elem.data.ind;\n      var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n      var parent;\n      var randSeed = Math.floor(Math.random() * 1000000);\n      var globalData = elem.globalData;\n\n      function executeExpression(_value) {\n        // globalData.pushExpression();\n        value = _value;\n\n        if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n          return value;\n        }\n\n        if (this.propType === 'textSelector') {\n          textIndex = this.textIndex;\n          textTotal = this.textTotal;\n          selectorValue = this.selectorValue;\n        }\n\n        if (!thisLayer) {\n          text = elem.layerInterface.text;\n          thisLayer = elem.layerInterface;\n          thisComp = elem.comp.compInterface;\n          toWorld = thisLayer.toWorld.bind(thisLayer);\n          fromWorld = thisLayer.fromWorld.bind(thisLayer);\n          fromComp = thisLayer.fromComp.bind(thisLayer);\n          toComp = thisLayer.toComp.bind(thisLayer);\n          mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n          fromCompToSurface = fromComp;\n        }\n\n        if (!transform) {\n          transform = elem.layerInterface('ADBE Transform Group');\n          $bm_transform = transform;\n\n          if (transform) {\n            anchorPoint = transform.anchorPoint;\n            /* position = transform.position;\r\n                      rotation = transform.rotation;\r\n                      scale = transform.scale; */\n          }\n        }\n\n        if (elemType === 4 && !content) {\n          content = thisLayer('ADBE Root Vectors Group');\n        }\n\n        if (!effect) {\n          effect = thisLayer(4);\n        }\n\n        hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n        if (hasParent && !parent) {\n          parent = elem.hierarchy[0].layerInterface;\n        }\n\n        time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n        if (_needsRandom) {\n          seedRandom(randSeed + time);\n        }\n\n        if (needsVelocity) {\n          velocity = velocityAtTime(time);\n        }\n\n        expression_function();\n        this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n        // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n        scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n        return scoped_bm_rt;\n      } // Bundlers will see these as dead code and unless we reference them\n\n\n      executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n      return executeExpression;\n    }\n\n    ob.initiateExpression = initiateExpression;\n    ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath];\n    return ob;\n  }();\n\n  var expressionHelpers = function () {\n    function searchExpressions(elem, data, prop) {\n      if (data.x) {\n        prop.k = true;\n        prop.x = true;\n        prop.initiateExpression = ExpressionManager.initiateExpression;\n        prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n      }\n    }\n\n    function getValueAtTime(frameNum) {\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastFrame) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n        this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n        this._cachingAtTime.lastFrame = frameNum;\n      }\n\n      return this._cachingAtTime.value;\n    }\n\n    function getSpeedAtTime(frameNum) {\n      var delta = -0.01;\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var speed = 0;\n\n      if (v1.length) {\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          speed += Math.pow(v2[i] - v1[i], 2);\n        }\n\n        speed = Math.sqrt(speed) * 100;\n      } else {\n        speed = 0;\n      }\n\n      return speed;\n    }\n\n    function getVelocityAtTime(frameNum) {\n      if (this.vel !== undefined) {\n        return this.vel;\n      }\n\n      var delta = -0.001; // frameNum += this.elem.data.st;\n\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var velocity;\n\n      if (v1.length) {\n        velocity = createTypedArray('float32', v1.length);\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          // removing frameRate\n          // if needed, don't add it here\n          // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n          velocity[i] = (v2[i] - v1[i]) / delta;\n        }\n      } else {\n        velocity = (v2 - v1) / delta;\n      }\n\n      return velocity;\n    }\n\n    function getStaticValueAtTime() {\n      return this.pv;\n    }\n\n    function setGroupProperty(propertyGroup) {\n      this.propertyGroup = propertyGroup;\n    }\n\n    return {\n      searchExpressions: searchExpressions,\n      getSpeedAtTime: getSpeedAtTime,\n      getVelocityAtTime: getVelocityAtTime,\n      getValueAtTime: getValueAtTime,\n      getStaticValueAtTime: getStaticValueAtTime,\n      setGroupProperty: setGroupProperty\n    };\n  }();\n\n  function addPropertyDecorator() {\n    function loopOut(type, duration, durationFlag) {\n      if (!this.k || !this.keyframes) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n      if (currentFrame <= lastKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var firstKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n        } else {\n          cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n        }\n\n        firstKeyFrame = lastKeyFrame - cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (iterations % 2 !== 0) {\n          return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n        var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n          }\n\n          return ret;\n        }\n\n        return (endV - initV) * repeats + current;\n      } else if (type === 'continue') {\n        var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(lastValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n          }\n\n          return ret;\n        }\n\n        return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n      }\n\n      return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function loopIn(type, duration, durationFlag) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var firstKeyFrame = keyframes[0].t;\n\n      if (currentFrame >= firstKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var lastKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        lastKeyFrame = keyframes[duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n        } else {\n          cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n        }\n\n        lastKeyFrame = firstKeyFrame + cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n        if (iterations % 2 === 0) {\n          return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n        var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n          }\n\n          return ret;\n        }\n\n        return current - (endV - initV) * repeats;\n      } else if (type === 'continue') {\n        var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(firstValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n          }\n\n          return ret;\n        }\n\n        return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n      }\n\n      return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function smooth(width, samples) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      width = (width || 0.4) * 0.5;\n      samples = Math.floor(samples || 5);\n\n      if (samples <= 1) {\n        return this.pv;\n      }\n\n      var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n      var initFrame = currentTime - width;\n      var endFrame = currentTime + width;\n      var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n      var i = 0;\n      var j = 0;\n      var value;\n\n      if (this.pv.length) {\n        value = createTypedArray('float32', this.pv.length);\n      } else {\n        value = 0;\n      }\n\n      var sampleValue;\n\n      while (i < samples) {\n        sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n        if (this.pv.length) {\n          for (j = 0; j < this.pv.length; j += 1) {\n            value[j] += sampleValue[j];\n          }\n        } else {\n          value += sampleValue;\n        }\n\n        i += 1;\n      }\n\n      if (this.pv.length) {\n        for (j = 0; j < this.pv.length; j += 1) {\n          value[j] /= samples;\n        }\n      } else {\n        value /= samples;\n      }\n\n      return value;\n    }\n\n    function getTransformValueAtTime(time) {\n      if (!this._transformCachingAtTime) {\n        this._transformCachingAtTime = {\n          v: new Matrix()\n        };\n      } /// /\n\n\n      var matrix = this._transformCachingAtTime.v;\n      matrix.cloneFromProps(this.pre.props);\n\n      if (this.appliedTransformations < 1) {\n        var anchor = this.a.getValueAtTime(time);\n        matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n      }\n\n      if (this.appliedTransformations < 2) {\n        var scale = this.s.getValueAtTime(time);\n        matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n      }\n\n      if (this.sk && this.appliedTransformations < 3) {\n        var skew = this.sk.getValueAtTime(time);\n        var skewAxis = this.sa.getValueAtTime(time);\n        matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n      }\n\n      if (this.r && this.appliedTransformations < 4) {\n        var rotation = this.r.getValueAtTime(time);\n        matrix.rotate(-rotation * this.r.mult);\n      } else if (!this.r && this.appliedTransformations < 4) {\n        var rotationZ = this.rz.getValueAtTime(time);\n        var rotationY = this.ry.getValueAtTime(time);\n        var rotationX = this.rx.getValueAtTime(time);\n        var orientation = this.or.getValueAtTime(time);\n        matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n      }\n\n      if (this.data.p && this.data.p.s) {\n        var positionX = this.px.getValueAtTime(time);\n        var positionY = this.py.getValueAtTime(time);\n\n        if (this.data.p.z) {\n          var positionZ = this.pz.getValueAtTime(time);\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n        } else {\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n        }\n      } else {\n        var position = this.p.getValueAtTime(time);\n        matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n      }\n\n      return matrix; /// /\n    }\n\n    function getTransformStaticValueAtTime() {\n      return this.v.clone(new Matrix());\n    }\n\n    var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n    TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n      var prop = getTransformProperty(elem, data, container);\n\n      if (prop.dynamicProperties.length) {\n        prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      return prop;\n    };\n\n    var propertyGetProp = PropertyFactory.getProp;\n\n    PropertyFactory.getProp = function (elem, data, type, mult, container) {\n      var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n      // prop.loopOut = loopOut;\n      // prop.loopIn = loopIn;\n\n      if (prop.kf) {\n        prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      prop.loopOut = loopOut;\n      prop.loopIn = loopIn;\n      prop.smooth = smooth;\n      prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n      prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n      prop.numKeys = data.a === 1 ? data.k.length : 0;\n      prop.propertyIndex = data.ix;\n      var value = 0;\n\n      if (type !== 0) {\n        value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n      }\n\n      prop._cachingAtTime = {\n        lastFrame: initialDefaultFrame,\n        lastIndex: 0,\n        value: value\n      };\n      expressionHelpers.searchExpressions(elem, data, prop);\n\n      if (prop.k) {\n        container.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n\n    function getShapeValueAtTime(frameNum) {\n      // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n      if (!this._cachingAtTime) {\n        this._cachingAtTime = {\n          shapeValue: shapePool.clone(this.pv),\n          lastIndex: 0,\n          lastTime: initialDefaultFrame\n        };\n      }\n\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastTime) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n        this._cachingAtTime.lastTime = frameNum;\n        this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n      }\n\n      return this._cachingAtTime.shapeValue;\n    }\n\n    var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n    var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n    function ShapeExpressions() {}\n\n    ShapeExpressions.prototype = {\n      vertices: function vertices(prop, time) {\n        if (this.k) {\n          this.getValue();\n        }\n\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        var i;\n        var len = shapePath._length;\n        var vertices = shapePath[prop];\n        var points = shapePath.v;\n        var arr = createSizedArray(len);\n\n        for (i = 0; i < len; i += 1) {\n          if (prop === 'i' || prop === 'o') {\n            arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n          } else {\n            arr[i] = [vertices[i][0], vertices[i][1]];\n          }\n        }\n\n        return arr;\n      },\n      points: function points(time) {\n        return this.vertices('v', time);\n      },\n      inTangents: function inTangents(time) {\n        return this.vertices('i', time);\n      },\n      outTangents: function outTangents(time) {\n        return this.vertices('o', time);\n      },\n      isClosed: function isClosed() {\n        return this.v.c;\n      },\n      pointOnPath: function pointOnPath(perc, time) {\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        if (!this._segmentsLength) {\n          this._segmentsLength = bez.getSegmentsLength(shapePath);\n        }\n\n        var segmentsLength = this._segmentsLength;\n        var lengths = segmentsLength.lengths;\n        var lengthPos = segmentsLength.totalLength * perc;\n        var i = 0;\n        var len = lengths.length;\n        var accumulatedLength = 0;\n        var pt;\n\n        while (i < len) {\n          if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n            var initIndex = i;\n            var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n            var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n            pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n            break;\n          } else {\n            accumulatedLength += lengths[i].addedLength;\n          }\n\n          i += 1;\n        }\n\n        if (!pt) {\n          pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n        }\n\n        return pt;\n      },\n      vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n        // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n        if (perc == 1) {\n          // eslint-disable-line eqeqeq\n          perc = this.v.c;\n        } else if (perc == 0) {\n          // eslint-disable-line eqeqeq\n          perc = 0.999;\n        }\n\n        var pt1 = this.pointOnPath(perc, time);\n        var pt2 = this.pointOnPath(perc + 0.001, time);\n        var xLength = pt2[0] - pt1[0];\n        var yLength = pt2[1] - pt1[1];\n        var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n        if (magnitude === 0) {\n          return [0, 0];\n        }\n\n        var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n        return unitVector;\n      },\n      tangentOnPath: function tangentOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'tangent');\n      },\n      normalOnPath: function normalOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'normal');\n      },\n      setGroupProperty: expressionHelpers.setGroupProperty,\n      getValueAtTime: expressionHelpers.getStaticValueAtTime\n    };\n    extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n    extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n    KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n    KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n    var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n    ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n      var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n      prop.propertyIndex = data.ix;\n      prop.lock = false;\n\n      if (type === 3) {\n        expressionHelpers.searchExpressions(elem, data.pt, prop);\n      } else if (type === 4) {\n        expressionHelpers.searchExpressions(elem, data.ks, prop);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n  }\n\n  function initialize$1() {\n    addPropertyDecorator();\n  }\n\n  function addDecorator() {\n    function searchExpressions() {\n      if (this.data.d.x) {\n        this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n        this.addEffect(this.getExpressionValue.bind(this));\n        return true;\n      }\n\n      return null;\n    }\n\n    TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n      var newValue = this.calculateExpression(text);\n\n      if (currentValue.t !== newValue) {\n        var newData = {};\n        this.copyData(newData, currentValue);\n        newData.t = newValue.toString();\n        newData.__complete = false;\n        return newData;\n      }\n\n      return currentValue;\n    };\n\n    TextProperty.prototype.searchProperty = function () {\n      var isKeyframed = this.searchKeyframes();\n      var hasExpressions = this.searchExpressions();\n      this.kf = isKeyframed || hasExpressions;\n      return this.kf;\n    };\n\n    TextProperty.prototype.searchExpressions = searchExpressions;\n  }\n\n  function initialize() {\n    addDecorator();\n  }\n\n  function SVGComposableEffect() {}\n\n  SVGComposableEffect.prototype = {\n    createMergeNode: function createMergeNode(resultId, ins) {\n      var feMerge = createNS('feMerge');\n      feMerge.setAttribute('result', resultId);\n      var feMergeNode;\n      var i;\n\n      for (i = 0; i < ins.length; i += 1) {\n        feMergeNode = createNS('feMergeNode');\n        feMergeNode.setAttribute('in', ins[i]);\n        feMerge.appendChild(feMergeNode);\n        feMerge.appendChild(feMergeNode);\n      }\n\n      return feMerge;\n    }\n  };\n\n  function SVGTintFilter(filter, filterManager, elem, id, source) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id + '_tint_1');\n    filter.appendChild(feColorMatrix);\n    feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id + '_tint_2');\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n    var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n    filter.appendChild(feMerge);\n  }\n\n  extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n  SVGTintFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var colorBlack = this.filterManager.effectElements[0].p.v;\n      var colorWhite = this.filterManager.effectElements[1].p.v;\n      var opacity = this.filterManager.effectElements[2].p.v / 100;\n      this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 ' + opacity + ' 0');\n    }\n  };\n\n  function SVGFillFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id);\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n  }\n\n  SVGFillFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color = this.filterManager.effectElements[2].p.v;\n      var opacity = this.filterManager.effectElements[6].p.v;\n      this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n    }\n  };\n\n  function SVGStrokeEffect(fil, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.elem = elem;\n    this.paths = [];\n  }\n\n  SVGStrokeEffect.prototype.initialize = function () {\n    var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n    var path;\n    var groupPath;\n    var i;\n    var len;\n\n    if (this.filterManager.effectElements[1].p.v === 1) {\n      len = this.elem.maskManager.masksProperties.length;\n      i = 0;\n    } else {\n      i = this.filterManager.effectElements[0].p.v - 1;\n      len = i + 1;\n    }\n\n    groupPath = createNS('g');\n    groupPath.setAttribute('fill', 'none');\n    groupPath.setAttribute('stroke-linecap', 'round');\n    groupPath.setAttribute('stroke-dashoffset', 1);\n\n    for (i; i < len; i += 1) {\n      path = createNS('path');\n      groupPath.appendChild(path);\n      this.paths.push({\n        p: path,\n        m: i\n      });\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 3) {\n      var mask = createNS('mask');\n      var id = createElementID();\n      mask.setAttribute('id', id);\n      mask.setAttribute('mask-type', 'alpha');\n      mask.appendChild(groupPath);\n      this.elem.globalData.defs.appendChild(mask);\n      var g = createNS('g');\n      g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n      while (elemChildren[0]) {\n        g.appendChild(elemChildren[0]);\n      }\n\n      this.elem.layerElement.appendChild(g);\n      this.masker = mask;\n      groupPath.setAttribute('stroke', '#fff');\n    } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (this.filterManager.effectElements[10].p.v === 2) {\n        elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n        while (elemChildren.length) {\n          this.elem.layerElement.removeChild(elemChildren[0]);\n        }\n      }\n\n      this.elem.layerElement.appendChild(groupPath);\n      this.elem.layerElement.removeAttribute('mask');\n      groupPath.setAttribute('stroke', '#fff');\n    }\n\n    this.initialized = true;\n    this.pathMasker = groupPath;\n  };\n\n  SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    var i;\n    var len = this.paths.length;\n    var mask;\n    var path;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.paths[i].m !== -1) {\n        mask = this.elem.maskManager.viewData[this.paths[i].m];\n        path = this.paths[i].p;\n\n        if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n          path.setAttribute('d', mask.lastPath);\n        }\n\n        if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n          var dasharrayValue;\n\n          if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n            var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var l = path.getTotalLength();\n            dasharrayValue = '0 0 0 ' + l * s + ' ';\n            var lineLength = l * (e - s);\n            var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n            var units = Math.floor(lineLength / segment);\n            var j;\n\n            for (j = 0; j < units; j += 1) {\n              dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n            }\n\n            dasharrayValue += '0 ' + l * 10 + ' 0 0';\n          } else {\n            dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n          }\n\n          path.setAttribute('stroke-dasharray', dasharrayValue);\n        }\n      }\n    }\n\n    if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n      this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n    }\n\n    if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n      this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n        var color = this.filterManager.effectElements[3].p.v;\n        this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n      }\n    }\n  };\n\n  function SVGTritoneFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n    filter.appendChild(feColorMatrix);\n    var feComponentTransfer = createNS('feComponentTransfer');\n    feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n    feComponentTransfer.setAttribute('result', id);\n    this.matrixFilter = feComponentTransfer;\n    var feFuncR = createNS('feFuncR');\n    feFuncR.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncR);\n    this.feFuncR = feFuncR;\n    var feFuncG = createNS('feFuncG');\n    feFuncG.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncG);\n    this.feFuncG = feFuncG;\n    var feFuncB = createNS('feFuncB');\n    feFuncB.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncB);\n    this.feFuncB = feFuncB;\n    filter.appendChild(feComponentTransfer);\n  }\n\n  SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color1 = this.filterManager.effectElements[0].p.v;\n      var color2 = this.filterManager.effectElements[1].p.v;\n      var color3 = this.filterManager.effectElements[2].p.v;\n      var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n      var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n      var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n      this.feFuncR.setAttribute('tableValues', tableR);\n      this.feFuncG.setAttribute('tableValues', tableG);\n      this.feFuncB.setAttribute('tableValues', tableB);\n    }\n  };\n\n  function SVGProLevelsFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var effectElements = this.filterManager.effectElements;\n    var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n    if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n      this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n    } // Green\n\n\n    if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n      this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n    } // Blue\n\n\n    if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n      this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n    } // Alpha\n\n\n    if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n      this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n    } // RGB\n\n\n    if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      filter.appendChild(feComponentTransfer);\n    }\n\n    if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n      feComponentTransfer = createNS('feComponentTransfer');\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      feComponentTransfer.setAttribute('result', id);\n      filter.appendChild(feComponentTransfer);\n      this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n      this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n      this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n    }\n  }\n\n  SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n    var feFunc = createNS(type);\n    feFunc.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFunc);\n    return feFunc;\n  };\n\n  SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n    var cnt = 0;\n    var segments = 256;\n    var perc;\n    var min = Math.min(inputBlack, inputWhite);\n    var max = Math.max(inputBlack, inputWhite);\n    var table = Array.call(null, {\n      length: segments\n    });\n    var colorValue;\n    var pos = 0;\n    var outputDelta = outputWhite - outputBlack;\n    var inputDelta = inputWhite - inputBlack;\n\n    while (cnt <= 256) {\n      perc = cnt / 256;\n\n      if (perc <= min) {\n        colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n      } else if (perc >= max) {\n        colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n      } else {\n        colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n      }\n\n      table[pos] = colorValue;\n      pos += 1;\n      cnt += 256 / (segments - 1);\n    }\n\n    return table.join(' ');\n  };\n\n  SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var val;\n      var effectElements = this.filterManager.effectElements;\n\n      if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n        val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n        this.feFuncRComposed.setAttribute('tableValues', val);\n        this.feFuncGComposed.setAttribute('tableValues', val);\n        this.feFuncBComposed.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n        val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n        this.feFuncR.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n        val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n        this.feFuncG.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n        val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n        this.feFuncB.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n        val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n        this.feFuncA.setAttribute('tableValues', val);\n      }\n    }\n  };\n\n  function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n    var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n    var filterSize = filterManager.data.fs || globalFilterSize;\n    filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n    filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n    filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n    filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('in', 'SourceAlpha');\n    feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n    feGaussianBlur.setAttribute('stdDeviation', '0');\n    this.feGaussianBlur = feGaussianBlur;\n    filter.appendChild(feGaussianBlur);\n    var feOffset = createNS('feOffset');\n    feOffset.setAttribute('dx', '25');\n    feOffset.setAttribute('dy', '0');\n    feOffset.setAttribute('in', id + '_drop_shadow_1');\n    feOffset.setAttribute('result', id + '_drop_shadow_2');\n    this.feOffset = feOffset;\n    filter.appendChild(feOffset);\n    var feFlood = createNS('feFlood');\n    feFlood.setAttribute('flood-color', '#00ff00');\n    feFlood.setAttribute('flood-opacity', '1');\n    feFlood.setAttribute('result', id + '_drop_shadow_3');\n    this.feFlood = feFlood;\n    filter.appendChild(feFlood);\n    var feComposite = createNS('feComposite');\n    feComposite.setAttribute('in', id + '_drop_shadow_3');\n    feComposite.setAttribute('in2', id + '_drop_shadow_2');\n    feComposite.setAttribute('operator', 'in');\n    feComposite.setAttribute('result', id + '_drop_shadow_4');\n    filter.appendChild(feComposite);\n    var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n    filter.appendChild(feMerge); //\n  }\n\n  extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n  SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n        this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n      }\n\n      if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n        var col = this.filterManager.effectElements[0].p.v;\n        this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n      }\n\n      if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n        this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n      }\n\n      if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n        var distance = this.filterManager.effectElements[3].p.v;\n        var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n        var x = distance * Math.cos(angle);\n        var y = distance * Math.sin(angle);\n        this.feOffset.setAttribute('dx', x);\n        this.feOffset.setAttribute('dy', y);\n      }\n    }\n  };\n\n  var _svgMatteSymbols = [];\n\n  function SVGMatte3Effect(filterElem, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.filterElem = filterElem;\n    this.elem = elem;\n    elem.matteElement = createNS('g');\n    elem.matteElement.appendChild(elem.layerElement);\n    elem.matteElement.appendChild(elem.transformedElement);\n    elem.baseElement = elem.matteElement;\n  }\n\n  SVGMatte3Effect.prototype.findSymbol = function (mask) {\n    var i = 0;\n    var len = _svgMatteSymbols.length;\n\n    while (i < len) {\n      if (_svgMatteSymbols[i] === mask) {\n        return _svgMatteSymbols[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n    var parentNode = mask.layerElement.parentNode;\n\n    if (!parentNode) {\n      return;\n    }\n\n    var children = parentNode.children;\n    var i = 0;\n    var len = children.length;\n\n    while (i < len) {\n      if (children[i] === mask.layerElement) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    var nextChild;\n\n    if (i <= len - 2) {\n      nextChild = children[i + 1];\n    }\n\n    var useElem = createNS('use');\n    useElem.setAttribute('href', '#' + symbolId);\n\n    if (nextChild) {\n      parentNode.insertBefore(useElem, nextChild);\n    } else {\n      parentNode.appendChild(useElem);\n    }\n  };\n\n  SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n    if (!this.findSymbol(mask)) {\n      var symbolId = createElementID();\n      var masker = createNS('mask');\n      masker.setAttribute('id', mask.layerId);\n      masker.setAttribute('mask-type', 'alpha');\n\n      _svgMatteSymbols.push(mask);\n\n      var defs = elem.globalData.defs;\n      defs.appendChild(masker);\n      var symbol = createNS('symbol');\n      symbol.setAttribute('id', symbolId);\n      this.replaceInParent(mask, symbolId);\n      symbol.appendChild(mask.layerElement);\n      defs.appendChild(symbol);\n      var useElem = createNS('use');\n      useElem.setAttribute('href', '#' + symbolId);\n      masker.appendChild(useElem);\n      mask.data.hd = false;\n      mask.show();\n    }\n\n    elem.setMatte(mask.layerId);\n  };\n\n  SVGMatte3Effect.prototype.initialize = function () {\n    var ind = this.filterManager.effectElements[0].p.v;\n    var elements = this.elem.comp.elements;\n    var i = 0;\n    var len = elements.length;\n\n    while (i < len) {\n      if (elements[i] && elements[i].data.ind === ind) {\n        this.setElementAsMask(this.elem, elements[i]);\n      }\n\n      i += 1;\n    }\n\n    this.initialized = true;\n  };\n\n  SVGMatte3Effect.prototype.renderFrame = function () {\n    if (!this.initialized) {\n      this.initialize();\n    }\n  };\n\n  function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n    // Outset the filter region by 100% on all sides to accommodate blur expansion.\n    filter.setAttribute('x', '-100%');\n    filter.setAttribute('y', '-100%');\n    filter.setAttribute('width', '300%');\n    filter.setAttribute('height', '300%');\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('result', id);\n    filter.appendChild(feGaussianBlur);\n    this.feGaussianBlur = feGaussianBlur;\n  }\n\n  SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      // Empirical value, matching AE's blur appearance.\n      var kBlurrinessToSigma = 0.3;\n      var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n      //\n      //   1 -> horizontal & vertical\n      //   2 -> horizontal only\n      //   3 -> vertical only\n      //\n\n      var dimensions = this.filterManager.effectElements[1].p.v;\n      var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n      //\n      //   0 -> off -> duplicate\n      //   1 -> on  -> wrap\n\n      var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n    }\n  };\n\n  registerRenderer('canvas', CanvasRenderer);\n  registerRenderer('html', HybridRenderer);\n  registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n  ShapeModifiers.registerModifier('tm', TrimModifier);\n  ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n  ShapeModifiers.registerModifier('rp', RepeaterModifier);\n  ShapeModifiers.registerModifier('rd', RoundCornersModifier); // Registering expression plugin\n\n  setExpressionsPlugin(Expressions);\n  initialize$1();\n  initialize(); // Registering svg effects\n\n  registerEffect(20, SVGTintFilter, true);\n  registerEffect(21, SVGFillFilter, true);\n  registerEffect(22, SVGStrokeEffect, false);\n  registerEffect(23, SVGTritoneFilter, true);\n  registerEffect(24, SVGProLevelsFilter, true);\n  registerEffect(25, SVGDropShadowEffect, true);\n  registerEffect(28, SVGMatte3Effect, false);\n  registerEffect(29, SVGGaussianBlurEffect, true);\n\n  return lottie;\n\n}));\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = require('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = require('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _lottieWeb = require('lottie-web');\n\nvar _lottieWeb2 = _interopRequireDefault(_lottieWeb);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Lottie = function (_React$Component) {\n  (0, _inherits3.default)(Lottie, _React$Component);\n\n  function Lottie() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    (0, _classCallCheck3.default)(this, Lottie);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = Lottie.__proto__ || (0, _getPrototypeOf2.default)(Lottie)).call.apply(_ref, [this].concat(args))), _this), _this.handleClickToPause = function () {\n      // The pause() method is for handling pausing by passing a prop isPaused\n      // This method is for handling the ability to pause by clicking on the animation\n      if (_this.anim.isPaused) {\n        _this.anim.play();\n      } else {\n        _this.anim.pause();\n      }\n    }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);\n  }\n\n  (0, _createClass3.default)(Lottie, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _props = this.props,\n          options = _props.options,\n          eventListeners = _props.eventListeners;\n      var loop = options.loop,\n          autoplay = options.autoplay,\n          animationData = options.animationData,\n          rendererSettings = options.rendererSettings,\n          segments = options.segments;\n\n\n      this.options = {\n        container: this.el,\n        renderer: 'svg',\n        loop: loop !== false,\n        autoplay: autoplay !== false,\n        segments: segments !== false,\n        animationData: animationData,\n        rendererSettings: rendererSettings\n      };\n\n      this.options = (0, _extends3.default)({}, this.options, options);\n\n      this.anim = _lottieWeb2.default.loadAnimation(this.options);\n      this.registerEvents(eventListeners);\n    }\n  }, {\n    key: 'componentWillUpdate',\n    value: function componentWillUpdate(nextProps /* , nextState */) {\n      /* Recreate the animation handle if the data is changed */\n      if (this.options.animationData !== nextProps.options.animationData) {\n        this.deRegisterEvents(this.props.eventListeners);\n        this.destroy();\n        this.options = (0, _extends3.default)({}, this.options, nextProps.options);\n        this.anim = _lottieWeb2.default.loadAnimation(this.options);\n        this.registerEvents(nextProps.eventListeners);\n      }\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate() {\n      if (this.props.isStopped) {\n        this.stop();\n      } else if (this.props.segments) {\n        this.playSegments();\n      } else {\n        this.play();\n      }\n\n      this.pause();\n      this.setSpeed();\n      this.setDirection();\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.deRegisterEvents(this.props.eventListeners);\n      this.destroy();\n      this.options.animationData = null;\n      this.anim = null;\n    }\n  }, {\n    key: 'setSpeed',\n    value: function setSpeed() {\n      this.anim.setSpeed(this.props.speed);\n    }\n  }, {\n    key: 'setDirection',\n    value: function setDirection() {\n      this.anim.setDirection(this.props.direction);\n    }\n  }, {\n    key: 'play',\n    value: function play() {\n      this.anim.play();\n    }\n  }, {\n    key: 'playSegments',\n    value: function playSegments() {\n      this.anim.playSegments(this.props.segments);\n    }\n  }, {\n    key: 'stop',\n    value: function stop() {\n      this.anim.stop();\n    }\n  }, {\n    key: 'pause',\n    value: function pause() {\n      if (this.props.isPaused && !this.anim.isPaused) {\n        this.anim.pause();\n      } else if (!this.props.isPaused && this.anim.isPaused) {\n        this.anim.pause();\n      }\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.anim.destroy();\n    }\n  }, {\n    key: 'registerEvents',\n    value: function registerEvents(eventListeners) {\n      var _this2 = this;\n\n      eventListeners.forEach(function (eventListener) {\n        _this2.anim.addEventListener(eventListener.eventName, eventListener.callback);\n      });\n    }\n  }, {\n    key: 'deRegisterEvents',\n    value: function deRegisterEvents(eventListeners) {\n      var _this3 = this;\n\n      eventListeners.forEach(function (eventListener) {\n        _this3.anim.removeEventListener(eventListener.eventName, eventListener.callback);\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this4 = this;\n\n      var _props2 = this.props,\n          width = _props2.width,\n          height = _props2.height,\n          ariaRole = _props2.ariaRole,\n          ariaLabel = _props2.ariaLabel,\n          isClickToPauseDisabled = _props2.isClickToPauseDisabled,\n          title = _props2.title;\n\n\n      var getSize = function getSize(initial) {\n        var size = void 0;\n\n        if (typeof initial === 'number') {\n          size = initial + 'px';\n        } else {\n          size = initial || '100%';\n        }\n\n        return size;\n      };\n\n      var lottieStyles = (0, _extends3.default)({\n        width: getSize(width),\n        height: getSize(height),\n        overflow: 'hidden',\n        margin: '0 auto',\n        outline: 'none'\n      }, this.props.style);\n\n      var onClickHandler = isClickToPauseDisabled ? function () {\n        return null;\n      } : this.handleClickToPause;\n\n      return (\n        // Bug with eslint rules https://github.com/airbnb/javascript/issues/1374\n        // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n        _react2.default.createElement('div', {\n          ref: function ref(c) {\n            _this4.el = c;\n          },\n          style: lottieStyles,\n          onClick: onClickHandler,\n          title: title,\n          role: ariaRole,\n          'aria-label': ariaLabel,\n          tabIndex: '0'\n        })\n      );\n    }\n  }]);\n  return Lottie;\n}(_react2.default.Component);\n\nexports.default = Lottie;\n\n\nLottie.propTypes = {\n  eventListeners: _propTypes2.default.arrayOf(_propTypes2.default.object),\n  options: _propTypes2.default.object.isRequired,\n  height: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  isStopped: _propTypes2.default.bool,\n  isPaused: _propTypes2.default.bool,\n  speed: _propTypes2.default.number,\n  segments: _propTypes2.default.arrayOf(_propTypes2.default.number),\n  direction: _propTypes2.default.number,\n  ariaRole: _propTypes2.default.string,\n  ariaLabel: _propTypes2.default.string,\n  isClickToPauseDisabled: _propTypes2.default.bool,\n  title: _propTypes2.default.string\n};\n\nLottie.defaultProps = {\n  eventListeners: [],\n  isStopped: false,\n  isPaused: false,\n  speed: 1,\n  ariaRole: 'button',\n  ariaLabel: 'animation',\n  isClickToPauseDisabled: false,\n  title: ''\n};"],"sourceRoot":""}