{"version":3,"sources":["webpack:///./src/views/DianJin/Detail.vue","webpack:///./src/components/ViewPoint/ViewPoint.vue","webpack:///src/components/ViewPoint/ViewPoint.vue","webpack:///./src/components/ViewPoint/ViewPoint.vue?cded","webpack:///./src/components/ViewPoint/ViewPoint.vue?85b4","webpack:///./src/components/AudioPlay/AudioPlay.vue","webpack:///./node_modules/vue-lottie/src/lottie.vue","webpack:///node_modules/vue-lottie/src/lottie.vue","webpack:///./node_modules/vue-lottie/src/lottie.vue?d6eb","webpack:///./node_modules/vue-lottie/src/lottie.vue?5008","webpack:///src/components/AudioPlay/AudioPlay.vue","webpack:///./src/components/AudioPlay/AudioPlay.vue?0f78","webpack:///./src/components/AudioPlay/AudioPlay.vue?801b","webpack:///./src/components/Stock/Stock.vue","webpack:///src/components/Stock/Stock.vue","webpack:///./src/components/Stock/Stock.vue?08a2","webpack:///./src/components/Stock/Stock.vue?09f4","webpack:///src/views/DianJin/Detail.vue","webpack:///./src/views/DianJin/Detail.vue?0eff","webpack:///./src/views/DianJin/Detail.vue?07e8","webpack:///./src/api/permission.js","webpack:///./src/components/AudioPlay/AudioPlay.vue?0077","webpack:///./src/components/Stock/Stock.vue?0102","webpack:///./src/components/ViewPoint/ViewPoint.vue?4262","webpack:///./src/views/Test/VueAliplayer.vue","webpack:///src/views/Test/VueAliplayer.vue","webpack:///./src/views/Test/VueAliplayer.vue?13f2","webpack:///./src/views/Test/VueAliplayer.vue?8443","webpack:///./node_modules/lottie-web/build/player/lottie.js","webpack:///./src/views/DianJin/Detail.vue?5ead","webpack:///./src/views/video/VideoMask.vue","webpack:///src/views/video/VideoMask.vue","webpack:///./src/views/video/VideoMask.vue?252a","webpack:///./src/views/video/VideoMask.vue?7ecd","webpack:///./src/views/video/VideoMask.vue?cddf","webpack:///./src/views/Test/VueAliplayer.vue?1ac8"],"names":["render","_vm","this","_c","_self","authorInfo","ref","staticClass","attrs","staticStyle","_v","_s","dianJinInfo","title","on","$event","goManager","headPic","require","name","getDesc","class","isFollowed","follow","type","isPermission","domProps","content","_e","goBuy","playData","duration","playURL","isLogin","style","videoHeightStyle","skinLayout","videoHeight","startPlay","isMaskShowFix","stocks","length","stockListCode","RelatesData","handleId","commentsInfo","id","showCommentDetail","isFavored","onReplyEvent","stopPropagation","onCloseEvent","apply","arguments","commentStyle","onScrollEvent","currComment","staticRenderFns","articleList","_l","item","index","key","emitId","dayjs","publishTime","format","backgroundImage","coverImageUrl","components","props","computed","methods","$router","push","component","audioFileUrl","defaultOptions","handleAnimation","pause","isPlay","playPause","currentTime","_m","totalTime","emitBuy","options","Object","required","height","Number","width","data","overflow","margin","mounted","anim","lottie","loadAnimation","container","$refs","lavContainer","renderer","loop","autoplay","animationData","rendererSettings","$emit","animationSpeed","watch","audioLength","transTime","created","$onResume","console","log","$onPause","audio","document","querySelector","stop","util","keepScreenOn","play","ontimeupdate","getTimeFun","drawFun","setTimeout","getElementById","processWidth","left","time","parseInt","minute","sec","isM0","_this","oDiv1","oDiv2","oDiv3","addEventListener","ev","oDiv1W","offsetWidth","oldX","targetTouches","clientX","offsetLeft","fnMove","x","fnEnd","removeEventListener","oDiv2W","oDuration","stockList","handleCode","stockId","conversion","stockMSG","Value","extends","Array","list","handler","val","getStockPrice","queryStock","deep","immediate","code","slice","gotoStocks","stockid","ym","openstock","addZxg","controlZxg","goodsIds","onSuccess","$toast","onFail","gotoStock","stockIds","isGoodsAddedZxg","callback","requestData","custom","goodsId","fieldsId","limitSize","axios","url","method","dataType","headers","detail","valueList","resultList","getValue","fieldsRule","resultArray","forEach","element","fieldValue","percentValue","isNaN","others","extendsObj","Name","Code","divisor","parseFloat","toFixed","VideoMask","AudioPlay","ViewPoint","Stock","Comment","CommentDetail","VueAliplayer","$route","params","getVideoHeight","isPlayed","align","y","children","lastOrientationChangeTime","requestappInfo","checkPermission","productId","init","window","goods","showVideoMask","onscroll","updateMaskPosition","orientation","Date","getTime","innerH","innerHeight","innerWidth","scrollBy","bodyElm","body","newVal","oldVal","isFree","$store","state","user","userInfo","resourceIdentity","keys","authInfo","desc","typeName","authorCompany","publishTimeDesc","hasPermission","commentHeight","screen","bottom","mapActions","requestviewPointFun","then","ResourceFun","requestRelatesFun","initWxApp","http","post","String","go","authorId","appid","localStorage","getItem","currentAppId","query","appId","wxAppId","setItem","goLogin","pathNames","location","pathname","split","pathRouter","path","search","needAuth","requestfollow","authorid","replace","Urls","DOMAIN_YOUKANTOUWAP","encodeURIComponent","href","mask","videoMask","rect","getBoundingClientRect","devicePixelRatio","updateVideoMask","permissions","Vue","observable","permissionCallback","result","indexOf","concat","playStyle","playerId","source","default","vid","playauth","videoWidth","preload","Boolean","cover","isLive","rePlay","useH5Prism","useFlashPrism","playsinline","showBuffer","skinRes","controlBarVisibility","showBarTime","extraInfo","enableSystemMenu","mediaType","qualitySort","definition","defaultDefinition","x5_type","x5_fullscreen","x5_video_position","x5_orientation","x5LandscapeAsFullScreen","autoPlayDelay","autoPlayDelayDisplayText","language","languageTexts","snapshot","snapshotWatermark","useHlsPluginForSafari","enableStashBufferForFlv","stashInitialSizeForFlv","loadDataTimeout","waitingTimeout","liveStartTime","liveOverTime","liveTimeShiftUrl","recreatePlayer","Function","diagnosisButtonVisible","disableSeek","encryptType","progressMarkers","vodRetry","liveRetry","aliplayerSdkPath","Math","random","toString","substr","scriptTagStatus","isReload","instance","undefined","Aliplayer","initAliplayer","insertScriptTag","landStyle","video","setAttribute","getAttribute","playerScriptTag","createElement","src","s","getElementsByTagName","appendChild","loaded","reloadPlayer","dispose","innerHTML","$nextTick","liveShiftSource","replay","seek","getCurrentTime","getDuration","getVolume","setVolume","vol","loadByUrl","setSpeed","speed","setPlayerSize","w","h","replayByVidAndPlayAuth","accId","accSecret","stsToken","domainRegion","replayByVidAndAuthInfo","reloaduserPlayInfoAndVidRequestMts","setSanpshotProperties","rate","setCover","navigator","global","factory","module","exports","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","value","getLocationHref","createTag","extendPrototype","sources","destination","i","sourcePrototype","len","attr","prototype","hasOwnProperty","call","getDescriptor","object","prop","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","resume","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","playing","setAudioFactory","_updateVolume","mute","unmute","volume","createTypedArray","createRegularArray","arr","createTypedArrayFactory","Float32Array","Int16Array","Uint8ClampedArray","createSizedArray","_typeof$6","obj","Symbol","iterator","constructor","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","isSafari","test","userAgent","_shouldRoundValues","bmPow","pow","bmSqrt","sqrt","bmFloor","floor","bmMax","max","bmMin","min","BMMath","ProjectInterface$1","propertyNames","abs","tOfVal","absArr","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","bmRnd","round","styleDiv","position","top","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","frameMultiplier","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","target","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","v","r","g","b","f","p","q","t","RGBtoHSV","d","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","_workerSelf","createWorker","fn","Worker","Blob","blob","URL","createObjectURL","setupWorker","e","dataFunctionManager","completeLayers","layers","comps","layerData","j","jLen","k","kLen","completed","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeText","completeChars","chars","assets","findComp","comp","__used","JSON","parse","stringify","ks","it","o","checkVersion","minimum","animVersionString","animVersion","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","checkChars","charData","ip","op","st","sr","a","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","c","checkShapes","completeClosingShapes","closed","cl","completeData","__complete","moduleOb","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","response","responseText","loadAsset","fullPath","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","open","join","error","send","load","payload","animation","event","process","onComplete","onError","createProcess","processId","origin","loadData","completeAnimation","ImagePreloader","proxyImage","canvas","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","box","getBBox","_imageLoaded","clearInterval","bind","createImageData","ob","setAttributeNS","_elementHelper","append","createImgData","crossOrigin","createFootageData","footageData","_footageLoaded","loadAssets","cb","images","_createImageData","setPath","setAssetsPath","getAsset","destroy","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","BaseEvent","triggerEvent","eventName","args","_cbs","callbacks","splice","markerParser","parsePayloadLines","line","lines","keysCount","trim","Error","_markers","markers","_marker","markerData","tm","dr","cm","_","__","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","getRenderer","getRegisteredRenderer","_typeof$4","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","isPaused","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","wrapper","animType","RendererClass","globalData","defs","setProjectInterface","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","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","rendererType","initItems","gotoFrame","resize","_width","_height","updateContainerSize","setSubframe","renderFrame","resetFrame","triggerRenderFrameError","togglePause","setCurrentRawFrameValue","getMarkerData","markerName","marker","goToAndStop","isFrame","numValue","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setDirection","setSegment","end","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","setLoop","isLooping","getPath","getAssetData","hide","show","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","animItem","subtractPlayingCount","registerAnimation","elem","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","first","searchAnimations","standalone","animElements","getElementsByClassName","innerText","div","freeze","unfreeze","BezierFactory","getBezierEasing","beziers","str","bezEasing","BezierEasing","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","points","_p","_mSampleValues","_precomputed","get","mY1","mY2","_precompute","_getTForX","_calcSampleValues","mSampleValues","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","pooling","_double","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","create","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","point","lastPoint","lengthData","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","BezierData","segmentLength","PointData","partial","partialLength","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","getPointInSegment","percent","t1","u1","ptX","ptY","bezierSegmentPoints","getNewSegment","startPerc","endPerc","t0","u0","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","bez","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","lastIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","n","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quatStart","createQuaternion","quatEnd","quaternionToEuler","slerp","omega","cosom","sinom","scale0","scale1","out","ax","ay","az","aw","bx","by","bz","bw","acos","sin","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","values","c1","cos","c2","c3","s1","s2","s3","z","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","PropertyFactory","getProp","sid","slotManager","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","pos","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","shapesEqual","shape1","shape2","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","p1","s0","_cw","StarShapeProperty","StarShapePropertyFactory","sy","ir","is","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","getShapeProp","dataProp","getConstructorFunction","getKeyframedConstructorFunction","Matrix","_cos","_sin","_tan","tan","_rnd","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","l","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","multiply","matrix","matrixProps","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_a","_b","_d","_f","_typeof$3","setLocation","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","version","scripts","myScript","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","totalShapeLength","edges","newShapesData","addShapes","lastShapeInCollection","lastShape","pop","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","applyToMatrix","mat","rz","ry","rx","px","py","pz","forceRender","_isDirty","precalculateMatrix","pre","appliedTransformations","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","TransformProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","floatEqual","floatZero","lerp","lerpPoint","quadRoots","singleRoot","delta","polynomialCoefficients","p3","singlePoint","PolynomialBezier","linearize","pointEqual","coeffx","coeffy","extrema","intersectData","t2","boundingBox","cx","cy","splitData","boxIntersect","intersectsImpl","depth","tolerance","intersections","maxRecursion","d1s","d2s","crossProduct","lineIntersection","start1","end1","start2","end2","v3","v4","polarOffset","pointDistance","hypot","ZigZagModifier","setPoint","outputBezier","amplitude","outAmplitude","inAmplitude","angO","angI","getPerpendicularVector","vector","rot","rotatedVector","getProjectingAngle","cur","prevIndex","nextIndex","prevPoint","nextPoint","pVector","zigZagCorner","frequency","pointType","prevDist","nextDist","zigZagSegment","normalAngle","linearOffset","offsetSegment","p1a","p1b","p2b","p2a","joinLines","seg1","seg2","lineJoin","miterLimit","angleOut","tangentAngle","angleIn","center","radius","intersection","getIntersection","intersect","pruneSegmentIntersection","outa","outb","pruneIntersections","offsetSegmentSplit","right","mid","flex","inflectionPoints","OffsetPathModifier","getFontProperties","fontData","styleName","styles","fStyle","fWeight","toLowerCase","weight","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","hasReloaded","copies","ceil","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","rd","currentV","currentI","currentO","closerV","distance","newPosPerc","derivative","denom","tcusp","square","root","filter","p10","p11","p20","p21","bounds","other","shapeSegmentInverted","pointsType","count","ml","lj","inputBezier","multiSegments","lastSeg","multiSegment","FontManager","maxWaitingTime","emptyChar","size","combinedCharacters","BLACK_FLAG_CODE_POINT","CANCEL_TAG_CODE_POINT","A_TAG_CODE_POINT","Z_TAG_CODE_POINT","VARIATION_SELECTOR_16_CODE_POINT","ZERO_WIDTH_JOINER_CODE_POINT","REGIONAL_CHARACTER_A_CODE_POINT","REGIONAL_CHARACTER_Z_CODE_POINT","surrogateModifiers","trimFontOptions","font","familyArray","enabledFamilies","setUpNode","family","parentNode","fontFamily","node","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","parent","checkLoadedFonts","loadedCount","fOrigin","monoCase","sansCase","removeChild","now","checkLoadedFontsBinded","setIsLoadedBinded","createHelper","def","helper","engine","fontProps","tHelper","fFamily","textContent","fClass","tCanvasHelper","OffscreenCanvas","measure","text","getComputedTextLength","measureText","cache","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","fPath","querySelectorAll","rel","sc","found","ch","getCharData","_char","charCodeAt","warn","_warned","_char2","fontName","getFontByName","doubleSize","singleSize","fName","getCodePoint","string","codePoint","second","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isVariationSelector","isRegionalCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","setIsLoaded","Font","typekitLoaded","fontPrototype","SlotManager","slotFactory","RenderableElement","slots","assign","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","getBlendMode","blendModeEnums","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","mode","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effects","ef","effectElements","effectItem","GroupEffect","BaseElement","FrameElement","FootageElement","imageLoader","initBaseData","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","eff","checkMasks","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","layerInterface","maskManager","registerMaskInterface","effectsInterface","createEffectsInterface","registerEffectsInterface","shapeInterface","shapesData","itemsData","textInterface","setBlendMode","blendModeValue","bm","baseElement","layerElement","layerId","effectsManager","getType","prepareProperties","isVisible","_isParent","getBaseElement","FootageInterface","getFootageData","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","pendingElements","pathValue","setupGlobalData","fontsContainer","animationItem","compSize","effectTypes","TRANSFORM_EFFECT","TransformElement","MaskElement","maskElement","viewData","solidPath","expansor","feMorph","properties","currentMasks","maskType","maskRef","lastPath","filterID","expan","lastOperator","filterId","lastRadius","createLayerSolidPath","invRect","drawPath","maskedElement","initTransform","_matMdf","_localMatMdf","_opMdf","localMat","localOpacity","ao","renderTransform","finalMat","renderLocalTransform","localTransforms","lmat","localOp","opacity","searchEffectTransforms","renderableEffectsManager","transformEffects","getEffects","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","createFilter","filId","skipCoordinates","fil","createAlphaToLuminanceFilter","feColorMatrix","featureSupport","svgLumaHidden","offscreenCanvas","registeredEffects$1","idPrefix","SVGEffects","filterManager","filters","Effect","effect","countsAsEffect","registerEffect$1","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","layerElementParent","td","matteMasks","gg","tt","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","getMatte","matteType","useElement","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","setMatte","initHierarchy","checkParenting","_prototype","createContent","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","shouldBreakProcess","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dataProps","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","diff","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","of","ms","ost","buildShapeString","_o","_i","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","createRenderFunction","renderFill","renderGradient","renderGradientStroke","renderStroke","renderPath","renderContentTransform","renderNoop","styleData","itemData","pathStringTransformed","redraw","iterations","lLen","styleElem","hasOpacity","attr1","attr2","cValues","oValues","ang","SVGShapeElement","stylesList","animatedContents","LetterProps","sw","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","GradientConstructor","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","shapeProperty","setElementStyles","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charactersArray","shouldCombine","shouldCombineNext","currentChars","charAt","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","getTextSelectorProp","getMult","textProperty","easer","tot","smoothness","threshold","newCharsFlag","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","animatorSelector","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","atan","textAnimator","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","validateText","buildNewText","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","config","svgElement","ariaLabel","titleElement","titleId","description","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","className","focusable","filterSize","runExpressions","destroyed","ShapeTransformManager","sequences","sequenceList","transform_key_count","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","fromCharCode","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","findIndexByInd","appendElementInPos","elementIndex","tp","matteMask","nextElement","insertBefore","setElements","getElements","destroyElements","addTransformSequence","sequence","processSequence","processSequences","getNewKey","lumaLoader","lumaBuffer","lumaBufferCtx","svg","createLumaSvgFilter","_svg","loadLuma","getLuma","createCanvas","loadLumaCanvas","getLumaCanvas","registeredEffects","CVEffects","registerEffect","CVMaskElement","hasMasks","CVBaseElement","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","operationsMap","CVShapeData","transformsManager","styledShapes","styledShape","trNodes","CVShapeElement","CVTextElement","stroke","fill","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","CanvasContext","strokeStyle","lineCap","CVContextData","stack","cArrPos","cTr","nativeContext","transformMat","currentOpacity","currentFillStyle","appliedFillStyle","currentStrokeStyle","appliedStrokeStyle","currentLineWidth","appliedLineWidth","currentLineCap","appliedLineCap","currentLineJoin","appliedLineJoin","appliedMiterLimit","currentMiterLimit","CVCompElement","CanvasRenderer","clearCanvas","context","dpr","currentGlobalAlpha","contextData","ctxTransform","ctxOpacity","ctxFillStyle","ctxStrokeStyle","ctxLineWidth","ctxLineCap","ctxLineJoin","ctxMiterLimit","ctxFill","ctxFillRect","ctxStroke","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","isMasked","HCameraElement","pe","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","createElements","buffers","bufferCanvas","bufferCanvas2","_isProxy","transformCanvas","blendMode","globalCompositeOperation","hideElement","showElement","clearRect","prepareLayer","buffer","bufferCtx","drawImage","getTransform","exitLayer","forceRealStack","restore","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","grd","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","globalAlpha","rule","actionFlag","containerStyle","mozTransformOrigin","setContext","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","fillType","duplicate","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","setOpacity","trProps","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","backgroundColor","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","shapeBoundingBox","xMax","yMax","tempBoundingBox","b2ac","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","strokeWidth","lineHeight","tParent","tCont","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","svgTransform","setup","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","tmpDOMElement","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","cWidth","cHeight","floatingContainer","_createBaseContainerElements","_thisLayerFunction","defineProperty","pixelAspect","frameDuration","displayStartTime","numLayers","_typeof$2","seedRandom","nodecrypto","chunks","digits","rngname","startdenom","significance","seedrandom","seed","entropy","shortseed","mixkey","flatten","tostring","autoseed","arc4","ARC4","prng","int32","quick","S","pass","is_math_call","copy","keylen","me","typ","smear","stringseed","randomBytes","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","initialize$2","propTypes","SHAPE","_typeof$1","ExpressionManager","fetch","frames","_lottieGlobal","$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","rndm","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","property","noOp","_value","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","valueAtTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","scoped_bm_rt","expression_function","eval","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","yaw","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","randSeed","substring","posterizeTime","framesPerSecond","hasParent","executeExpression","frameExpressionId","__preventDeadCodeRemoval","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","MaskManagerInterface","MaskInterface","_mask","_data","MaskManager","_masksInterfaces","maskFunction","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","speedAtTime","getSpeedAtTime","propertyGroup","UnidimensionalPropertyInterface","MultidimensionalPropertyInterface","arrValue","defaultGetter","TransformExpressionInterface","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","propMatrix","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","transformInterface","_registerMaskInterface","_registerEffectsInterface","anchorPointDescriptor","defineProperties","anchor_point","startTime","_name","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","_propertyGroup","effectsData","createGroupInterface","groupInterface","mn","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","ShapePathInterface","view","propertyIndex","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","defaultInterfaceFactory","contentsInterfaceFactory","interfaces","transformInterfaceFactory","cix","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dash","start","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","_interfaceFunction","parentGroupWrapper","_sourceText","sourceText","stringValue","fillColor","_typeof","outlineInterfaceFactory","currentPropertyName","currentProperty","propertyNameIndex","dataInterfaceFactory","outlineInterface","dataInterface","footage","getInterface","expressionHelpers","searchExpressions","_cachingAtTime","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","endFrame","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","getShapeValueAtTime","shapeValue","lastTime","ShapePropertyConstructorFunction","KeyframedShapePropertyConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","unitVector","tangentOnPath","normalOnPath","propertyGetShapeProp","trims","initialize$1","addDecorator","calculateExpression","getExpressionValue","isKeyframed","hasExpressions","initialize","SVGComposableEffect","createMergeNode","resultId","ins","feMergeNode","feMerge","linearFilterValue","SVGTintFilter","linearFilter","matrixFilter","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","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","TransformEffect","SVGTransformEffect","CVTransformEffect","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","kBlurrinessToSigma","sigma","dimensions","sigmaX","sigmaY","edgeMode","forceFrame","isUniformScale","scaleHeight","scaleWidth","getWaterMark","getAppInfo","uid"],"mappings":"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","file":"js/chunk-cf80b538.46dabc54.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.authorInfo)?_c('div',{ref:\"container\",staticClass:\"page\",attrs:{\"autoplay\":\"autoplay\"}},[_c('div',{staticClass:\"L2\",staticStyle:{\"height\":\"1px\",\"position\":\"fixed\",\"width\":\"100%\",\"transform\":\"scaleY(0.5)\"}}),_c('div',{staticClass:\"title S14 T1\"},[_vm._v(_vm._s(_vm.dianJinInfo.title))]),_c('div',{staticClass:\"head\"},[_c('div',{staticClass:\"avatarWrap marginL30\",on:{\"click\":function($event){return _vm.goManager()}}},[_c('img',{staticClass:\"avatar\",attrs:{\"src\":_vm.authorInfo.headPic,\"alt\":\"\"}}),_c('img',{staticClass:\"log\",attrs:{\"src\":require(\"../../static/ic_v_log.png\"),\"alt\":\"\"}})]),_c('div',{staticClass:\"row1\",on:{\"click\":function($event){return _vm.goManager()}}},[_c('div',{staticClass:\"S8 T1\"},[_vm._v(_vm._s(_vm.authorInfo.name))]),_c('div',{staticClass:\"S4 T3 desc\"},[_vm._v(_vm._s(_vm.getDesc))])]),_c('div',{staticClass:\"follow S5 C5\",class:_vm.authorInfo.isFollowed === 1 ? 'followed' : '',on:{\"click\":function($event){return _vm.follow()}}},[_c('span',[_vm._v(_vm._s(_vm.authorInfo.isFollowed === 1 ? '已关注' : '+关注'))])])]),_c('div',{staticClass:\"L2 headDiv\",staticStyle:{\"height\":\"1px\",\"width\":\"100%\",\"transform\":\"scaleY(0.5)\"}}),(_vm.type === 4)?_c('div',{staticClass:\"ariticle-wrap S10 T1\",class:{ 'ariticle-hidden': !_vm.isPermission }},[_c('div',{staticClass:\"ariticle-content s10 t1\",domProps:{\"innerHTML\":_vm._s(_vm.dianJinInfo.content)}}),(!_vm.isPermission)?_c('div',{staticClass:\"article-cover B_C1\"},[_c('div',{staticClass:\"subscribe-font S4 T1\"},[_vm._v(\"订阅后阅读全文\")]),_c('div',{staticClass:\"arrow\"}),_c('div',{staticClass:\"subscribe-btn S8 T5\",on:{\"click\":function($event){return _vm.goBuy()}}},[_c('div',{staticClass:\"lock-icon\"}),_c('div',[_vm._v(\"立即订阅\")])])]):_vm._e()]):_vm._e(),(_vm.type === 2)?_c('div',[_c('AudioPlay',{attrs:{\"audioLength\":_vm.playData.duration,\"audioFileUrl\":_vm.playData.playURL,\"isPermission\":_vm.isPermission,\"isLogin\":_vm.isLogin},on:{\"childGoBuy\":function($event){return _vm.goBuy()}}})],1):_vm._e(),(_vm.type === 1 && _vm.playData.playURL)?_c('div',{staticClass:\"video-wrap\",style:(_vm.videoHeightStyle)},[_c('div',{ref:\"videoMask\",staticStyle:{\"position\":\"relative\"},style:(_vm.videoHeightStyle)},[_c('VueAliplayer',{staticClass:\"video\",staticStyle:{\"width\":\"100%\"},attrs:{\"preload\":false,\"autoplay\":_vm.isPermission && _vm.isLogin ? true : false,\"playsinline\":false,\"source\":_vm.playData.playURL,\"skinLayout\":_vm.skinLayout,\"height\":_vm.videoHeight,\"video-height\":_vm.videoHeight},on:{\"play\":_vm.startPlay}}),(_vm.isMaskShowFix)?_c('VideoMask',{staticStyle:{\"position\":\"absolute\",\"height\":\"100%\",\"width\":\"100%\",\"top\":\"0\",\"left\":\"0\"},style:(_vm.videoHeightStyle)}):_vm._e()],1),(!_vm.isPermission || !_vm.isLogin)?_c('div',{staticClass:\"cover-wrap\",class:{ 'no-login-wrap': !_vm.isLogin }},[(_vm.isLogin)?_c('div',{staticClass:\"lock-icon\"}):_vm._e(),_c('div',{staticClass:\"subscribe-btn S8 T5\",on:{\"click\":function($event){return _vm.goBuy()}}},[_vm._v(\" \"+_vm._s(_vm.isLogin ? '立即订阅' : '立即登录')+\" \")]),_c('div',{staticClass:\"subscribe-font S4 T1\"},[_vm._v(\" \"+_vm._s(_vm.isLogin ? '订阅后点击播放视频' : '登录后可收看完整视频')+\" \")])]):_vm._e()]):_vm._e(),_c('div',{staticClass:\"risk-tip T3 S3\"},[_vm._v(\" 风险提示:本内容仅供投资参考,不作为投资建议,股市有风险,投资需谨慎。 \")]),(_vm.stocks.length > 0)?_c('div',{staticClass:\"space\"}):_vm._e(),_c('Stock',{attrs:{\"stockList\":_vm.stocks,\"stockListCode\":_vm.stockListCode}}),_c('div',{staticClass:\"space\"}),_c('ViewPoint',{attrs:{\"articleList\":_vm.RelatesData},on:{\"emitId\":_vm.handleId}}),_c('div',{staticClass:\"space\"}),(_vm.commentsInfo)?_c('Comment',{attrs:{\"commentsInfo\":_vm.commentsInfo,\"showInput\":true,\"hasPermission\":_vm.isPermission,\"id\":_vm.id,\"currentIndex\":\"1\",\"showPupInput\":!_vm.showCommentDetail,\"isFavored\":_vm.dianJinInfo.isFavored},on:{\"onReplyEvent\":_vm.onReplyEvent}}):_vm._e(),(_vm.showCommentDetail)?_c('div',{staticClass:\"comment-mask B1\",on:{\"touchmove\":function($event){$event.stopPropagation();return _vm.onCloseEvent.apply(null, arguments)},\"click\":function($event){$event.stopPropagation();return _vm.onCloseEvent.apply(null, arguments)}}}):_vm._e(),(_vm.showCommentDetail)?_c('div',{staticClass:\"comment-container B1\",style:([_vm.commentStyle]),on:{\"touchmove\":function($event){$event.stopPropagation();return _vm.onScrollEvent.apply(null, arguments)}}},[_c('CommentDetail',{attrs:{\"comment\":_vm.currComment,\"isPermission\":_vm.isPermission},on:{\"onCloseEvent\":_vm.onCloseEvent}})],1):_vm._e(),(_vm.showCommentDetail)?_c('div',{staticStyle:{\"height\":\"300px\"}}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.articleList.length > 0)?_c('div',{staticClass:\"view-point-wrap\"},[_c('div',{staticClass:\"title sepBottom S8 T1\"},[_vm._v(\"相关观点\")]),_vm._l((_vm.articleList),function(item,index){return _c('div',{key:index,staticClass:\"content sepBottom\",on:{\"click\":function($event){return _vm.emitId(`${item.id}`)}}},[_c('div',{staticClass:\"left\"},[_c('div',{staticClass:\"top S8 T1\"},[_vm._v(_vm._s(item.title))]),_c('div',{staticClass:\"time S4 T3\"},[_vm._v(\" \"+_vm._s(_vm.dayjs(item.publishTime).format('YYYY-MM-DD'))+\" \")])]),_c('div',{staticClass:\"right\",style:({ backgroundImage: `url('${item.coverImageUrl}')` })})])})],2):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ViewPoint.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ViewPoint.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ViewPoint.vue?vue&type=template&id=b6e05a26&scoped=true\"\nimport script from \"./ViewPoint.vue?vue&type=script&lang=js\"\nexport * from \"./ViewPoint.vue?vue&type=script&lang=js\"\nimport style0 from \"./ViewPoint.vue?vue&type=style&index=0&id=b6e05a26&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b6e05a26\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.audioFileUrl)?_c('div',{staticClass:\"audio-wrap B_C11\"},[_c('lottie',{attrs:{\"options\":_vm.defaultOptions,\"height\":200,\"width\":300},on:{\"animCreated\":_vm.handleAnimation}}),(_vm.isPermission)?_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"play\",class:{ pause: _vm.isPlay },on:{\"click\":function($event){return _vm.playPause()}}}),_c('div',{staticClass:\"bottom-wrap S2 T3\"},[_c('div',{staticClass:\"current\"},[_vm._v(_vm._s(_vm.currentTime))]),_vm._m(0),_c('div',{staticClass:\"totle\"},[_vm._v(_vm._s(_vm.totalTime))])])]):_vm._e(),(!_vm.isPermission || !_vm.isLogin)?_c('div',{staticClass:\"cover-wrap\",class:{ 'no-login-wrap': !_vm.isLogin }},[(_vm.isLogin)?_c('div',{staticClass:\"lock-icon\"}):_vm._e(),_c('div',{staticClass:\"subscribe-btn S8 T5\",on:{\"click\":_vm.emitBuy}},[_vm._v(\" \"+_vm._s(_vm.isLogin ? '立即订阅' : '立即登录')+\" \")]),_c('div',{staticClass:\"subscribe-font S4 T1\"},[_vm._v(\" \"+_vm._s(_vm.isLogin ? '订阅后点击播放音频' : '登录后可收听完整音频')+\" \")])]):_vm._e(),_c('audio',{attrs:{\"id\":\"mp3Btn\"}},[_c('source',{attrs:{\"src\":_vm.audioFileUrl,\"type\":\"audio/mpeg\"}})])],1):_vm._e()\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"progress-wrap\",attrs:{\"id\":\"box\"}},[_c('div',{staticClass:\"progress\",attrs:{\"id\":\"progress\"}}),_c('div',{staticClass:\"dot\",attrs:{\"id\":\"dot\"}},[_c('div',{staticClass:\"dot-style\"})])])\n}]\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:\"lavContainer\",style:(_vm.style)})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./lottie.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./lottie.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./lottie.vue?vue&type=template&id=3c796cc7\"\nimport script from \"./lottie.vue?vue&type=script&lang=js\"\nexport * from \"./lottie.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AudioPlay.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AudioPlay.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./AudioPlay.vue?vue&type=template&id=df1e30fc&scoped=true\"\nimport script from \"./AudioPlay.vue?vue&type=script&lang=js\"\nexport * from \"./AudioPlay.vue?vue&type=script&lang=js\"\nimport style0 from \"./AudioPlay.vue?vue&type=style&index=0&id=df1e30fc&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"df1e30fc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.stockList.length > 0)?_c('div',{staticClass:\"stock-wrap\"},[_c('div',{staticClass:\"title sepBottom S8 T1 bold\"},[_vm._v(\"相关股票\")]),_vm._l((_vm.stockList),function(item,index){return _c('div',{key:index,staticClass:\"content\",class:index !== _vm.stockList.length - 1 ? 'sepBottom' : ''},[_c('div',{staticClass:\"first\"},[_c('div',{staticClass:\"name S8 T1\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"code S4 T3 digitFont\"},[_vm._v(_vm._s(_vm.handleCode(item.stockId)))])]),_c('div',{staticClass:\"second S10 T1 digitFont\"},[_vm._v(\" \"+_vm._s(_vm.conversion(_vm.stockMSG[index] ? _vm.stockMSG[index].Value : 0))+\" \")]),_c('div',{staticClass:\"third S10 digitFont\",class:[\n _vm.conversion(_vm.stockMSG[index] ? _vm.stockMSG[index].extends[1] : 0, 1) > 0\n ? 'C1'\n : 'C3'\n ]},[_vm._v(\" \"+_vm._s(_vm.conversion(_vm.stockMSG[index] ? _vm.stockMSG[index].extends[1] : 0, 1))+\"% \")]),_c('div',{staticClass:\"four\",staticStyle:{\"border\":\"unset !important\"}})])})],2):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Stock.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Stock.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Stock.vue?vue&type=template&id=73fa3340&scoped=true\"\nimport script from \"./Stock.vue?vue&type=script&lang=js\"\nexport * from \"./Stock.vue?vue&type=script&lang=js\"\nimport style0 from \"./Stock.vue?vue&type=style&index=0&id=73fa3340&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"73fa3340\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Detail.vue?vue&type=template&id=77d90276&scoped=true\"\nimport script from \"./Detail.vue?vue&type=script&lang=js\"\nexport * from \"./Detail.vue?vue&type=script&lang=js\"\nimport style0 from \"./Detail.vue?vue&type=style&index=0&id=77d90276&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"77d90276\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\r\n\r\nexport var permissions = Vue.observable({\r\n data: []\r\n})\r\n\r\nexport function checkPermission(productId, callback) {\r\n if (!window.goods) return\r\n window.permissionCallback = (result) => {\r\n if (result === true && permissions.data.indexOf(productId) === -1) {\r\n permissions.data = permissions.data.concat(productId)\r\n if (callback) {\r\n callback()\r\n }\r\n }\r\n }\r\n window.goods.checkPermission(productId, 'permissionCallback')\r\n}\r\n\r\nexport function hasPermission(productId) {\r\n return permissions.data.indexOf(productId) !== -1\r\n}\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AudioPlay.vue?vue&type=style&index=0&id=df1e30fc&prod&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Stock.vue?vue&type=style&index=0&id=73fa3340&prod&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ViewPoint.vue?vue&type=style&index=0&id=b6e05a26&prod&lang=scss&scoped=true\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"prism-player\",style:(_vm.playStyle),attrs:{\"id\":_vm.playerId}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VueAliplayer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VueAliplayer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./VueAliplayer.vue?vue&type=template&id=32ee75cd\"\nimport script from \"./VueAliplayer.vue?vue&type=script&lang=js\"\nexport * from \"./VueAliplayer.vue?vue&type=script&lang=js\"\nimport style0 from \"./VueAliplayer.vue?vue&type=style&index=0&id=32ee75cd&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","(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 expressionsInterfaces = 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 setExpressionInterfaces = function setExpressionInterfaces(value) {\n expressionsInterfaces = value;\n };\n\n var getExpressionInterfaces = function getExpressionInterfaces() {\n return expressionsInterfaces;\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.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 // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), path, true);\n } catch (error) {\n // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), 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 getRegisteredRenderer() {\n // Returns canvas by default for compatibility\n if (renderers.canvas) {\n return 'canvas';\n } // Returns any renderer that is registered\n\n\n for (var key in renderers) {\n if (renderers[key]) {\n return key;\n }\n }\n\n return '';\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 this.expressionsPlugin = getExpressionsPlugin();\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 : getRegisteredRenderer() || '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 if (!params.path) {\n this.trigger('destroy');\n } else {\n this.setParams(params);\n }\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 (width, height) {\n // Adding this validation for backwards compatibility in case an event object was being passed down\n var _width = typeof width === 'number' ? width : undefined;\n\n var _height = typeof height === 'number' ? height : undefined;\n\n this.renderer.updateContainerSize(_width, _height);\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 if (this.expressionsPlugin) {\n this.expressionsPlugin.resetFrame();\n }\n\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('_play');\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('_pause');\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.expressionsPlugin = 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.setLoop = function (isLooping) {\n this.loop = isLooping;\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 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 var PropertyFactory = function () {\n function getProp(elem, data, type, mult, container) {\n if (data.sid) {\n data = elem.globalData.slotManager.getProp(data);\n }\n\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 ShapePath.prototype.length = function () {\n return this._length;\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 multiply(matrix) {\n var matrixProps = matrix.props;\n return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\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.multiply = multiply;\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.12.2';\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 this.appliedTransformations = 0;\n this.pre.reset();\n\n if (!this.a.effectsSequence.length) {\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 floatEqual(a, b) {\n return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n }\n\n function floatZero(f) {\n return Math.abs(f) <= 0.00001;\n }\n\n function lerp(p0, p1, amount) {\n return p0 * (1 - amount) + p1 * amount;\n }\n\n function lerpPoint(p0, p1, amount) {\n return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n }\n\n function quadRoots(a, b, c) {\n // no root\n if (a === 0) return [];\n var s = b * b - 4 * a * c; // Complex roots\n\n if (s < 0) return [];\n var singleRoot = -b / (2 * a); // 1 root\n\n if (s === 0) return [singleRoot];\n var delta = Math.sqrt(s) / (2 * a); // 2 roots\n\n return [singleRoot - delta, singleRoot + delta];\n }\n\n function polynomialCoefficients(p0, p1, p2, p3) {\n return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n }\n\n function singlePoint(p) {\n return new PolynomialBezier(p, p, p, p, false);\n }\n\n function PolynomialBezier(p0, p1, p2, p3, linearize) {\n if (linearize && pointEqual(p0, p1)) {\n p1 = lerpPoint(p0, p3, 1 / 3);\n }\n\n if (linearize && pointEqual(p2, p3)) {\n p2 = lerpPoint(p0, p3, 2 / 3);\n }\n\n var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n this.a = [coeffx[0], coeffy[0]];\n this.b = [coeffx[1], coeffy[1]];\n this.c = [coeffx[2], coeffy[2]];\n this.d = [coeffx[3], coeffy[3]];\n this.points = [p0, p1, p2, p3];\n }\n\n PolynomialBezier.prototype.point = function (t) {\n return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n };\n\n PolynomialBezier.prototype.derivative = function (t) {\n return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n };\n\n PolynomialBezier.prototype.tangentAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[1], p[0]);\n };\n\n PolynomialBezier.prototype.normalAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[0], p[1]);\n };\n\n PolynomialBezier.prototype.inflectionPoints = function () {\n var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n if (floatZero(denom)) return [];\n var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n if (square < 0) return [];\n var root = Math.sqrt(square);\n\n if (floatZero(root)) {\n if (root > 0 && root < 1) return [tcusp];\n return [];\n }\n\n return [tcusp - root, tcusp + root].filter(function (r) {\n return r > 0 && r < 1;\n });\n };\n\n PolynomialBezier.prototype.split = function (t) {\n if (t <= 0) return [singlePoint(this.points[0]), this];\n if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n var p10 = lerpPoint(this.points[0], this.points[1], t);\n var p11 = lerpPoint(this.points[1], this.points[2], t);\n var p12 = lerpPoint(this.points[2], this.points[3], t);\n var p20 = lerpPoint(p10, p11, t);\n var p21 = lerpPoint(p11, p12, t);\n var p3 = lerpPoint(p20, p21, t);\n return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n };\n\n function extrema(bez, comp) {\n var min = bez.points[0][comp];\n var max = bez.points[bez.points.length - 1][comp];\n\n if (min > max) {\n var e = max;\n max = min;\n min = e;\n } // Derivative roots to find min/max\n\n\n var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n\n for (var i = 0; i < f.length; i += 1) {\n if (f[i] > 0 && f[i] < 1) {\n var val = bez.point(f[i])[comp];\n if (val < min) min = val;else if (val > max) max = val;\n }\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n PolynomialBezier.prototype.bounds = function () {\n return {\n x: extrema(this, 0),\n y: extrema(this, 1)\n };\n };\n\n PolynomialBezier.prototype.boundingBox = function () {\n var bounds = this.bounds();\n return {\n left: bounds.x.min,\n right: bounds.x.max,\n top: bounds.y.min,\n bottom: bounds.y.max,\n width: bounds.x.max - bounds.x.min,\n height: bounds.y.max - bounds.y.min,\n cx: (bounds.x.max + bounds.x.min) / 2,\n cy: (bounds.y.max + bounds.y.min) / 2\n };\n };\n\n function intersectData(bez, t1, t2) {\n var box = bez.boundingBox();\n return {\n cx: box.cx,\n cy: box.cy,\n width: box.width,\n height: box.height,\n bez: bez,\n t: (t1 + t2) / 2,\n t1: t1,\n t2: t2\n };\n }\n\n function splitData(data) {\n var split = data.bez.split(0.5);\n return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n }\n\n function boxIntersect(b1, b2) {\n return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n }\n\n function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n if (!boxIntersect(d1, d2)) return;\n\n if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n intersections.push([d1.t, d2.t]);\n return;\n }\n\n var d1s = splitData(d1);\n var d2s = splitData(d2);\n intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n }\n\n PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n if (tolerance === undefined) tolerance = 2;\n if (maxRecursion === undefined) maxRecursion = 7;\n var intersections = [];\n intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n return intersections;\n };\n\n PolynomialBezier.shapeSegment = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n };\n\n PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n };\n\n function crossProduct(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n }\n\n function lineIntersection(start1, end1, start2, end2) {\n var v1 = [start1[0], start1[1], 1];\n var v2 = [end1[0], end1[1], 1];\n var v3 = [start2[0], start2[1], 1];\n var v4 = [end2[0], end2[1], 1];\n var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n if (floatZero(r[2])) return null;\n return [r[0] / r[2], r[1] / r[2]];\n }\n\n function polarOffset(p, angle, length) {\n return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n }\n\n function pointDistance(p1, p2) {\n return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n }\n\n function pointEqual(p1, p2) {\n return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n }\n\n function ZigZagModifier() {}\n\n extendPrototype([ShapeModifier], ZigZagModifier);\n\n ZigZagModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);\n this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);\n this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;\n };\n\n function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {\n var angO = angle - Math.PI / 2;\n var angI = angle + Math.PI / 2;\n var px = point[0] + Math.cos(angle) * direction * amplitude;\n var py = point[1] - Math.sin(angle) * direction * amplitude;\n outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());\n }\n\n function getPerpendicularVector(pt1, pt2) {\n var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];\n var rot = -Math.PI * 0.5;\n var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];\n return rotatedVector;\n }\n\n function getProjectingAngle(path, cur) {\n var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;\n var nextIndex = (cur + 1) % path.length();\n var prevPoint = path.v[prevIndex];\n var nextPoint = path.v[nextIndex];\n var pVector = getPerpendicularVector(prevPoint, nextPoint);\n return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);\n }\n\n function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {\n var angle = getProjectingAngle(path, cur);\n var point = path.v[cur % path._length];\n var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];\n var nextPoint = path.v[(cur + 1) % path._length];\n var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;\n var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;\n setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);\n }\n\n function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {\n for (var i = 0; i < frequency; i += 1) {\n var t = (i + 1) / (frequency + 1);\n var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;\n var angle = segment.normalAngle(t);\n var point = segment.point(t);\n setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);\n direction = -direction;\n }\n\n return direction;\n }\n\n ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {\n var count = path._length;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n\n if (!path.c) {\n count -= 1;\n }\n\n if (count === 0) return clonedPath;\n var direction = -1;\n var segment = PolynomialBezier.shapeSegment(path, 0);\n zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);\n\n for (var i = 0; i < count; i += 1) {\n direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n\n if (i === count - 1 && !path.c) {\n segment = null;\n } else {\n segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n }\n\n zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n }\n\n return clonedPath;\n };\n\n ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amplitude = this.amplitude.v;\n var frequency = Math.max(0, Math.round(this.frequency.v));\n var pointType = this.pointsType.v;\n\n if (amplitude !== 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], amplitude, frequency, pointType));\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 linearOffset(p1, p2, amount) {\n var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);\n return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];\n }\n\n function offsetSegment(segment, amount) {\n var p0;\n var p1a;\n var p1b;\n var p2b;\n var p2a;\n var p3;\n var e;\n e = linearOffset(segment.points[0], segment.points[1], amount);\n p0 = e[0];\n p1a = e[1];\n e = linearOffset(segment.points[1], segment.points[2], amount);\n p1b = e[0];\n p2b = e[1];\n e = linearOffset(segment.points[2], segment.points[3], amount);\n p2a = e[0];\n p3 = e[1];\n var p1 = lineIntersection(p0, p1a, p1b, p2b);\n if (p1 === null) p1 = p1a;\n var p2 = lineIntersection(p2a, p3, p1b, p2b);\n if (p2 === null) p2 = p2a;\n return new PolynomialBezier(p0, p1, p2, p3);\n }\n\n function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n var p0 = seg1.points[3];\n var p1 = seg2.points[0]; // Bevel\n\n if (lineJoin === 3) return p0; // Connected, they don't need a joint\n\n if (pointEqual(p0, p1)) return p0; // Round\n\n if (lineJoin === 2) {\n var angleOut = -seg1.tangentAngle(1);\n var angleIn = -seg2.tangentAngle(0) + Math.PI;\n var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));\n var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;\n var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);\n outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);\n tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);\n outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());\n return p1;\n } // Miter\n\n\n var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];\n var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];\n var intersection = lineIntersection(t0, p0, p1, t1);\n\n if (intersection && pointDistance(intersection, p0) < miterLimit) {\n outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());\n return intersection;\n }\n\n return p0;\n }\n\n function getIntersection(a, b) {\n var intersect = a.intersections(b);\n if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();\n if (intersect.length) return intersect[0];\n return null;\n }\n\n function pruneSegmentIntersection(a, b) {\n var outa = a.slice();\n var outb = b.slice();\n var intersect = getIntersection(a[a.length - 1], b[0]);\n\n if (intersect) {\n outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];\n outb[0] = b[0].split(intersect[1])[1];\n }\n\n if (a.length > 1 && b.length > 1) {\n intersect = getIntersection(a[0], b[b.length - 1]);\n\n if (intersect) {\n return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n }\n }\n\n return [outa, outb];\n }\n\n function pruneIntersections(segments) {\n var e;\n\n for (var i = 1; i < segments.length; i += 1) {\n e = pruneSegmentIntersection(segments[i - 1], segments[i]);\n segments[i - 1] = e[0];\n segments[i] = e[1];\n }\n\n if (segments.length > 1) {\n e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);\n segments[segments.length - 1] = e[0];\n segments[0] = e[1];\n }\n\n return segments;\n }\n\n function offsetSegmentSplit(segment, amount) {\n /*\r\n We split each bezier segment into smaller pieces based\r\n on inflection points, this ensures the control point\r\n polygon is convex.\r\n (A cubic bezier can have none, one, or two inflection points)\r\n */\n var flex = segment.inflectionPoints();\n var left;\n var right;\n var split;\n var mid;\n\n if (flex.length === 0) {\n return [offsetSegment(segment, amount)];\n }\n\n if (flex.length === 1 || floatEqual(flex[1], 1)) {\n split = segment.split(flex[0]);\n left = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(right, amount)];\n }\n\n split = segment.split(flex[0]);\n left = split[0];\n var t = (flex[1] - flex[0]) / (1 - flex[0]);\n split = split[1].split(t);\n mid = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];\n }\n\n function OffsetPathModifier() {}\n\n extendPrototype([ShapeModifier], OffsetPathModifier);\n\n OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);\n this.lineJoin = data.lj;\n this._isAnimated = this.amount.effectsSequence.length !== 0;\n };\n\n OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n var outputBezier = shapePool.newElement();\n outputBezier.c = inputBezier.c;\n var count = inputBezier.length();\n\n if (!inputBezier.c) {\n count -= 1;\n }\n\n var i;\n var j;\n var segment;\n var multiSegments = [];\n\n for (i = 0; i < count; i += 1) {\n segment = PolynomialBezier.shapeSegment(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n\n if (!inputBezier.c) {\n for (i = count - 1; i >= 0; i -= 1) {\n segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n }\n\n multiSegments = pruneIntersections(multiSegments); // Add bezier segments to the output and apply line joints\n\n var lastPoint = null;\n var lastSeg = null;\n\n for (i = 0; i < multiSegments.length; i += 1) {\n var multiSegment = multiSegments[i];\n if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);\n lastSeg = multiSegment[multiSegment.length - 1];\n\n for (j = 0; j < multiSegment.length; j += 1) {\n segment = multiSegment[j];\n\n if (lastPoint && pointEqual(segment.points[0], lastPoint)) {\n outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);\n } else {\n outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());\n }\n\n outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());\n lastPoint = segment.points[3];\n }\n }\n\n if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n return outputBezier;\n };\n\n OffsetPathModifier.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 var miterLimit = this.miterLimit.v;\n var lineJoin = this.lineJoin;\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, lineJoin, miterLimit));\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 BLACK_FLAG_CODE_POINT = 127988;\n var CANCEL_TAG_CODE_POINT = 917631;\n var A_TAG_CODE_POINT = 917601;\n var Z_TAG_CODE_POINT = 917626;\n var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\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); // Using the char instead of char.charCodeAt(0)\n // to avoid collisions between equal chars\n\n var index = _char2;\n\n if (!fontData.cache[index]) {\n var tHelper = fontData.helper;\n\n if (_char2 === ' ') {\n var doubleSize = tHelper.measureText('|' + _char2 + '|');\n var singleSize = tHelper.measureText('||');\n fontData.cache[index] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index] = tHelper.measureText(_char2) / 100;\n }\n }\n\n return fontData.cache[index] * 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 getCodePoint(string) {\n var codePoint = 0;\n var first = string.charCodeAt(0);\n\n if (first >= 0xD800 && first <= 0xDBFF) {\n var second = string.charCodeAt(1);\n\n if (second >= 0xDC00 && second <= 0xDFFF) {\n codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return codePoint;\n } // Skin tone modifiers\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(charCode) {\n return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n } // This codepoint may change the appearance of the preceding character.\n // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n // as a colorful image as compared to a monochrome text variant.\n\n\n function isVariationSelector(charCode) {\n return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n } // The regional indicator symbols are a set of 26 alphabetic Unicode\n /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n // two-letter country codes in a way that allows optional special treatment.\n\n\n function isRegionalCode(string) {\n var codePoint = getCodePoint(string);\n\n if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n return true;\n }\n\n return false;\n } // Some Emoji implementations represent combinations of\n // two “regional indicator” letters as a single flag symbol.\n\n\n function isFlagEmoji(string) {\n return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n }\n\n function isCombinedCharacter(_char3) {\n return combinedCharacters.indexOf(_char3) !== -1;\n } // Regional flags start with a BLACK_FLAG_CODE_POINT\n // folowed by 5 chars in the TAG range\n // and end with a CANCEL_TAG_CODE_POINT\n\n\n function isRegionalFlag(text, index) {\n var codePoint = getCodePoint(text.substr(index, 2));\n\n if (codePoint !== BLACK_FLAG_CODE_POINT) {\n return false;\n }\n\n var count = 0;\n index += 2;\n\n while (count < 5) {\n codePoint = getCodePoint(text.substr(index, 2));\n\n if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n return false;\n }\n\n count += 1;\n index += 2;\n }\n\n return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\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.isFlagEmoji = isFlagEmoji;\n Font.isRegionalCode = isRegionalCode;\n Font.isCombinedCharacter = isCombinedCharacter;\n Font.isRegionalFlag = isRegionalFlag;\n Font.isVariationSelector = isVariationSelector;\n Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\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 SlotManager(animationData) {\n this.animationData = animationData;\n }\n\n SlotManager.prototype.getProp = function (data) {\n if (this.animationData.slots && this.animationData.slots[data.sid]) {\n return Object.assign(data, this.animationData.slots[data.sid].p);\n }\n\n return data;\n };\n\n function slotFactory(animationData) {\n return new SlotManager(animationData);\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 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 var expressionsInterfaces = getExpressionInterfaces();\n\n if (!expressionsInterfaces) {\n return;\n }\n\n var LayerExpressionInterface = expressionsInterfaces('layer');\n var EffectsExpressionInterface = expressionsInterfaces('effects');\n var ShapeExpressionInterface = expressionsInterfaces('shape');\n var TextExpressionInterface = expressionsInterfaces('text');\n var CompExpressionInterface = expressionsInterfaces('comp');\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 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 var expressionsInterfaces = getExpressionInterfaces();\n\n if (!expressionsInterfaces) {\n return;\n }\n\n var FootageInterface = expressionsInterfaces('footage');\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.getElementById = function (ind) {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.ind === ind) {\n return this.elements[i];\n }\n }\n\n return null;\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.slotManager = slotFactory(animData);\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 var effectTypes = {\n TRANSFORM_EFFECT: 'transformEFfect'\n };\n\n function TransformElement() {}\n\n TransformElement.prototype = {\n initTransform: function initTransform() {\n var mat = new Matrix();\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _localMatMdf: false,\n _opMdf: false,\n mat: mat,\n localMat: mat,\n localOpacity: 1\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 finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n }\n }\n }\n\n if (this.finalTransform._matMdf) {\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n }\n\n if (this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n }\n },\n renderLocalTransform: function renderLocalTransform() {\n if (this.localTransforms) {\n var i = 0;\n var len = this.localTransforms.length;\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n\n if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n while (i < len) {\n if (this.localTransforms[i]._mdf) {\n this.finalTransform._localMatMdf = true;\n }\n\n if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n this.finalTransform._opMdf = true;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._localMatMdf) {\n var localMat = this.finalTransform.localMat;\n this.localTransforms[0].matrix.clone(localMat);\n\n for (i = 1; i < len; i += 1) {\n var lmat = this.localTransforms[i].matrix;\n localMat.multiply(lmat);\n }\n\n localMat.multiply(this.finalTransform.mat);\n }\n\n if (this.finalTransform._opMdf) {\n var localOp = this.finalTransform.localOpacity;\n\n for (i = 0; i < len; i += 1) {\n localOp *= this.localTransforms[i].opacity * 0.01;\n }\n\n this.finalTransform.localOpacity = localOp;\n }\n }\n },\n searchEffectTransforms: function searchEffectTransforms() {\n if (this.renderableEffectsManager) {\n var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n\n if (transformEffects.length) {\n this.localTransforms = [];\n this.finalTransform.localMat = new Matrix();\n var i = 0;\n var len = transformEffects.length;\n\n for (i = 0; i < len; i += 1) {\n this.localTransforms.push(transformEffects[i]);\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 svgLumaHidden: true,\n offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\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 if (/firefox/i.test(navigator.userAgent)) {\n ob.svgLumaHidden = false;\n }\n\n return ob;\n }();\n\n var registeredEffects$1 = {};\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$1[type]) {\n var Effect = registeredEffects$1[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n\n if (registeredEffects$1[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 SVGEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n\n return effects;\n };\n\n function registerEffect$1(id, effect, countsAsEffect) {\n registeredEffects$1[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 if (this.data.td) {\n this.matteMasks = {};\n var gg = createNS('g');\n gg.setAttribute('id', this.layerId);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n this.globalData.defs.appendChild(gg);\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._localMatMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\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 this.searchEffectTransforms();\n },\n getMatte: function getMatte(matteType) {\n // This should not be a common case. But for backward compatibility, we'll create the matte object.\n // It solves animations that have two consecutive layers marked as matte masks.\n // Which is an undefined behavior in AE.\n if (!this.matteMasks) {\n this.matteMasks = {};\n }\n\n if (!this.matteMasks[matteType]) {\n var id = this.layerId + '_' + matteType;\n var filId;\n var fil;\n var useElement;\n var gg;\n\n if (matteType === 1 || matteType === 3) {\n var masker = createNS('mask');\n masker.setAttribute('id', id);\n masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n masker.appendChild(useElement);\n this.globalData.defs.appendChild(masker);\n\n if (!featureSupport.maskType && matteType === 1) {\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(useElement);\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n } else if (matteType === 2) {\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', id);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId); /// /\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 useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n maskGrouper.appendChild(useElement);\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 maskGrouper.appendChild(gg);\n }\n\n this.globalData.defs.appendChild(maskGroup);\n }\n\n this.matteMasks[matteType] = id;\n }\n\n return this.matteMasks[matteType];\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.renderLocalTransform();\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\n if (this.assetData && this.assetData.sid) {\n this.assetData = globalData.slotManager.getProp(this.assetData);\n }\n\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 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 mat.multiply(itemData.transformers[k].mProps.v);\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' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\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\n if (data.d && data.d.sid) {\n data.d = elem.globalData.slotManager.getProp(data.d);\n }\n\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 var shouldCombineNext = false;\n var currentChars = '';\n\n while (i < len) {\n shouldCombine = shouldCombineNext;\n shouldCombineNext = false;\n charCode = text.charCodeAt(i);\n currentChars = text.charAt(i);\n\n if (FontManager.isCombinedCharacter(charCode)) {\n shouldCombine = true; // It's a potential surrogate pair (this is the High surrogate)\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n if (FontManager.isRegionalFlag(text, i)) {\n currentChars = text.substr(i, 14);\n } else {\n secondCharCode = text.charCodeAt(i + 1); // It's a surrogate pair (this is the Low surrogate)\n\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (FontManager.isModifier(charCode, secondCharCode)) {\n currentChars = text.substr(i, 2);\n shouldCombine = true;\n } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n currentChars = text.substr(i, 4);\n } else {\n currentChars = text.substr(i, 2);\n }\n }\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (FontManager.isVariationSelector(charCode)) {\n shouldCombine = true;\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n shouldCombine = true;\n shouldCombineNext = true;\n }\n\n if (shouldCombine) {\n charactersArray[charactersArray.length - 1] += currentChars;\n shouldCombine = false;\n } else {\n charactersArray.push(currentChars);\n }\n\n i += currentChars.length;\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.setCurrentData(dData);\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\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 ITextElement.prototype.validateText = function () {\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 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 this.validateText();\n\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 this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\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] && this.elements[i].destroy) {\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.findIndexByInd = function (ind) {\n var i = 0;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ind === ind) {\n return i;\n }\n }\n\n return -1;\n };\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 var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n\n if (elementIndex === -1) {\n return;\n }\n\n if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n this.buildItem(elementIndex);\n this.addPendingElement(element);\n } else {\n var matteElement = elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[pos].tt);\n element.setMatte(matteMask);\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 var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n var matteElement = this.elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[i].tt);\n element.setMatte(matteMask);\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 runExpressions: !config || config.runExpressions === undefined || config.runExpressions\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 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 sequence.finalTransform.reset();\n\n for (i = len - 1; i >= 0; i -= 1) {\n sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\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 var lumaLoader = function lumaLoader() {\n var id = '__lottie_element_luma_buffer';\n var lumaBuffer = null;\n var lumaBufferCtx = null;\n var svg = null; // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.\n // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.\n // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.\n // Naming it solution 2 to mark the extra comment lines.\n\n /*\r\n var svgString = [\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ].join('');\r\n var blob = new Blob([svgString], { type: 'image/svg+xml' });\r\n var url = URL.createObjectURL(blob);\r\n */\n\n function createLumaSvgFilter() {\n var _svg = createNS('svg');\n\n var fil = createNS('filter');\n var matrix = createNS('feColorMatrix');\n fil.setAttribute('id', id);\n matrix.setAttribute('type', 'matrix');\n matrix.setAttribute('color-interpolation-filters', 'sRGB');\n matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');\n fil.appendChild(matrix);\n\n _svg.appendChild(fil);\n\n _svg.setAttribute('id', id + '_svg');\n\n if (featureSupport.svgLumaHidden) {\n _svg.style.display = 'none';\n }\n\n return _svg;\n }\n\n function loadLuma() {\n if (!lumaBuffer) {\n svg = createLumaSvgFilter();\n document.body.appendChild(svg);\n lumaBuffer = createTag('canvas');\n lumaBufferCtx = lumaBuffer.getContext('2d'); // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n lumaBufferCtx.filter = 'url(#' + id + ')';\n lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n lumaBufferCtx.fillRect(0, 0, 1, 1);\n }\n }\n\n function getLuma(canvas) {\n if (!lumaBuffer) {\n loadLuma();\n }\n\n lumaBuffer.width = canvas.width;\n lumaBuffer.height = canvas.height; // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n lumaBufferCtx.filter = 'url(#' + id + ')';\n return lumaBuffer;\n }\n\n return {\n load: loadLuma,\n get: getLuma\n };\n };\n\n function createCanvas(width, height) {\n if (featureSupport.offscreenCanvas) {\n return new OffscreenCanvas(width, height);\n }\n\n var canvas = createTag('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n var assetLoader = function () {\n return {\n loadLumaCanvas: lumaLoader.load,\n getLumaCanvas: lumaLoader.get,\n createCanvas: createCanvas\n };\n }();\n\n var registeredEffects = {};\n\n function CVEffects(elem) {\n var i;\n var len = elem.data.ef ? elem.data.ef.length : 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(elem.effectsManager.effectElements[i], elem);\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n CVEffects.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 CVEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n\n return effects;\n };\n\n function registerEffect(id, effect) {\n registeredEffects[id] = {\n effect: effect\n };\n }\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 var operationsMap = {\n 1: 'source-in',\n 2: 'source-out',\n 3: 'source-in',\n 4: 'source-out'\n };\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n // If the layer is masked we will use two buffers to store each different states of the drawing\n // This solution is not ideal for several reason. But unfortunately, because of the recursive\n // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.\n // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer\n // It might be challenging because the layer most likely is transformed in some way\n if (this.data.tt >= 1) {\n this.buffers = [];\n var canvasContext = this.globalData.canvasContext;\n var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas);\n var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas2);\n\n if (this.data.tt >= 3 && !document._isProxy) {\n assetLoader.loadLumaCanvas();\n }\n }\n\n this.canvasContext = this.globalData.canvasContext;\n this.transformCanvas = this.globalData.transformCanvas;\n this.renderableEffectsManager = new CVEffects(this);\n this.searchEffectTransforms();\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 this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\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 clearCanvas: function clearCanvas(canvasContext) {\n canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n },\n prepareLayer: function prepareLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[0];\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx); // on the first buffer we store the current state of the global drawing\n\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // The next four lines are to clear the canvas\n // TODO: Check if there is a way to clear the canvas without resetting the transform\n\n this.currentTransform = this.canvasContext.getTransform();\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform);\n }\n },\n exitLayer: function exitLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[1]; // On the second buffer we store the current state of the global drawing\n // that only contains the content of this layer\n // (if it is a composition, it also includes the nested layers)\n\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx);\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // We clear the canvas again\n\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform); // We draw the mask\n\n var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n mask.renderFrame(true); // We draw the second buffer (that contains the content of this layer)\n\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); // If the mask is a Luma matte, we need to do two extra painting operations\n // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error\n\n if (this.data.tt >= 3 && !document._isProxy) {\n // We copy the painted mask to a buffer that has a color matrix filter applied to it\n // that applies the rgb values to the alpha channel\n var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n var lumaBufferCtx = lumaBuffer.getContext('2d');\n lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n this.clearCanvas(this.canvasContext); // we repaint the context with the mask applied to it\n\n this.canvasContext.drawImage(lumaBuffer, 0, 0);\n }\n\n this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n this.canvasContext.drawImage(buffer, 0, 0); // We finally draw the first buffer (that contains the content of the global drawing)\n // We use destination-over to draw the global drawing below the current layer\n\n this.canvasContext.globalCompositeOperation = 'destination-over';\n this.canvasContext.drawImage(this.buffers[0], 0, 0);\n this.canvasContext.setTransform(this.currentTransform); // We reset the globalCompositeOperation to source-over, the standard type of operation\n\n this.canvasContext.globalCompositeOperation = 'source-over';\n }\n },\n renderFrame: function renderFrame(forceRender) {\n if (this.hidden || this.data.hd) {\n return;\n }\n\n if (this.data.td === 1 && !forceRender) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.prepareLayer();\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n this.exitLayer();\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' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\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 renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n\n renderer.ctxLineWidth(currentStyle.wi); // ctx.lineWidth = currentStyle.wi;\n\n renderer.ctxLineCap(currentStyle.lc); // ctx.lineCap = currentStyle.lc;\n\n renderer.ctxLineJoin(currentStyle.lj); // ctx.lineJoin = currentStyle.lj;\n\n renderer.ctxMiterLimit(currentStyle.ml || 0); // ctx.miterLimit = currentStyle.ml || 0;\n } else {\n renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); // 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 renderer.ctxStroke();\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 this.globalData.renderer.ctxFill(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 this.validateText();\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n this.globalData.renderer.ctxLineCap('butt'); // ctx.lineCap = 'butt';\n\n this.globalData.renderer.ctxLineJoin('miter'); // ctx.lineJoin = 'miter';\n\n this.globalData.renderer.ctxMiterLimit(4); // 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 var renderer = this.globalData.renderer;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n\n if (renderedLetter) {\n renderer.save();\n renderer.ctxTransform(renderedLetter.p);\n renderer.ctxOpacity(renderedLetter.o);\n }\n\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n renderer.ctxFillStyle(renderedLetter.fc);\n lastFill = renderedLetter.fc; // ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n renderer.ctxFillStyle(this.values.fill); // 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 renderer.ctxFill(); // this.globalData.canvasContext.fill();\n /// 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 renderer.ctxLineWidth(renderedLetter.sw); // ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n renderer.ctxLineWidth(this.values.sWidth); // ctx.lineWidth = this.values.sWidth;\n }\n\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n renderer.ctxStrokeStyle(renderedLetter.sc); // ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n renderer.ctxStrokeStyle(this.values.stroke); // 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 renderer.ctxStroke(); // this.globalData.canvasContext.stroke();\n /// 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 this.globalData.renderer.ctxFillStyle(this.data.sc); // ctx.fillStyle = this.data.sc;\n\n this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n //\n };\n\n function CanvasRendererBase() {}\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 this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n };\n\n CanvasRendererBase.prototype.ctxOpacity = function (op) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n };\n\n CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n this.canvasContext.fillStyle = value;\n };\n\n CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n this.canvasContext.strokeStyle = value;\n };\n\n CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n this.canvasContext.lineWidth = value;\n };\n\n CanvasRendererBase.prototype.ctxLineCap = function (value) {\n this.canvasContext.lineCap = value;\n };\n\n CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n this.canvasContext.lineJoin = value;\n };\n\n CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n this.canvasContext.miterLimit = value;\n };\n\n CanvasRendererBase.prototype.ctxFill = function (rule) {\n this.canvasContext.fill(rule);\n };\n\n CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n this.canvasContext.fillRect(x, y, w, h);\n };\n\n CanvasRendererBase.prototype.ctxStroke = function () {\n this.canvasContext.stroke();\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 () {\n this.canvasContext.save();\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.globalData.blendMode = 'source-over';\n }\n\n this.contextData.restore(actionFlag);\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.contextData.setContext(this.canvasContext);\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 (width, height) {\n this.reset();\n var elementWidth;\n var elementHeight;\n\n if (width) {\n elementWidth = width;\n elementHeight = height;\n this.canvasContext.canvas.width = elementWidth;\n this.canvasContext.canvas.height = elementHeight;\n } else {\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n } else {\n elementWidth = this.canvasContext.canvas.width;\n elementHeight = this.canvasContext.canvas.height;\n }\n\n this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n this.canvasContext.canvas.height = elementHeight * 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= 0; i -= 1) {\n if (this.elements[i] && this.elements[i].destroy) {\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 = 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 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 CanvasContext() {\n this.opacity = -1;\n this.transform = createTypedArray('float32', 16);\n this.fillStyle = '';\n this.strokeStyle = '';\n this.lineWidth = '';\n this.lineCap = '';\n this.lineJoin = '';\n this.miterLimit = '';\n this.id = Math.random();\n }\n\n function CVContextData() {\n this.stack = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n var i;\n var len = 15;\n\n for (i = 0; i < len; i += 1) {\n var canvasContext = new CanvasContext();\n this.stack[i] = canvasContext;\n }\n\n this._length = len;\n this.nativeContext = null;\n this.transformMat = new Matrix();\n this.currentOpacity = 1; //\n\n this.currentFillStyle = '';\n this.appliedFillStyle = ''; //\n\n this.currentStrokeStyle = '';\n this.appliedStrokeStyle = ''; //\n\n this.currentLineWidth = '';\n this.appliedLineWidth = ''; //\n\n this.currentLineCap = '';\n this.appliedLineCap = ''; //\n\n this.currentLineJoin = '';\n this.appliedLineJoin = ''; //\n\n this.appliedMiterLimit = '';\n this.currentMiterLimit = '';\n }\n\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var i = 0;\n\n for (i = this._length; i < newLength; i += 1) {\n this.stack[i] = new CanvasContext();\n }\n\n this._length = newLength;\n };\n\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.stack[this.cArrPos].opacity = 1;\n };\n\n CVContextData.prototype.restore = function (forceRestore) {\n this.cArrPos -= 1;\n var currentContext = this.stack[this.cArrPos];\n var transform = currentContext.transform;\n var i;\n var arr = this.cTr.props;\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = transform[i];\n }\n\n if (forceRestore) {\n this.nativeContext.restore();\n var prevStack = this.stack[this.cArrPos + 1];\n this.appliedFillStyle = prevStack.fillStyle;\n this.appliedStrokeStyle = prevStack.strokeStyle;\n this.appliedLineWidth = prevStack.lineWidth;\n this.appliedLineCap = prevStack.lineCap;\n this.appliedLineJoin = prevStack.lineJoin;\n this.appliedMiterLimit = prevStack.miterLimit;\n }\n\n this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n\n if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n this.nativeContext.globalAlpha = currentContext.opacity;\n this.currentOpacity = currentContext.opacity;\n }\n\n this.currentFillStyle = currentContext.fillStyle;\n this.currentStrokeStyle = currentContext.strokeStyle;\n this.currentLineWidth = currentContext.lineWidth;\n this.currentLineCap = currentContext.lineCap;\n this.currentLineJoin = currentContext.lineJoin;\n this.currentMiterLimit = currentContext.miterLimit;\n };\n\n CVContextData.prototype.save = function (saveOnNativeFlag) {\n if (saveOnNativeFlag) {\n this.nativeContext.save();\n }\n\n var props = this.cTr.props;\n\n if (this._length <= this.cArrPos) {\n this.duplicate();\n }\n\n var currentStack = this.stack[this.cArrPos];\n var i;\n\n for (i = 0; i < 16; i += 1) {\n currentStack.transform[i] = props[i];\n }\n\n this.cArrPos += 1;\n var newStack = this.stack[this.cArrPos];\n newStack.opacity = currentStack.opacity;\n newStack.fillStyle = currentStack.fillStyle;\n newStack.strokeStyle = currentStack.strokeStyle;\n newStack.lineWidth = currentStack.lineWidth;\n newStack.lineCap = currentStack.lineCap;\n newStack.lineJoin = currentStack.lineJoin;\n newStack.miterLimit = currentStack.miterLimit;\n };\n\n CVContextData.prototype.setOpacity = function (value) {\n this.stack[this.cArrPos].opacity = value;\n };\n\n CVContextData.prototype.setContext = function (value) {\n this.nativeContext = value;\n };\n\n CVContextData.prototype.fillStyle = function (value) {\n if (this.stack[this.cArrPos].fillStyle !== value) {\n this.currentFillStyle = value;\n this.stack[this.cArrPos].fillStyle = value;\n }\n };\n\n CVContextData.prototype.strokeStyle = function (value) {\n if (this.stack[this.cArrPos].strokeStyle !== value) {\n this.currentStrokeStyle = value;\n this.stack[this.cArrPos].strokeStyle = value;\n }\n };\n\n CVContextData.prototype.lineWidth = function (value) {\n if (this.stack[this.cArrPos].lineWidth !== value) {\n this.currentLineWidth = value;\n this.stack[this.cArrPos].lineWidth = value;\n }\n };\n\n CVContextData.prototype.lineCap = function (value) {\n if (this.stack[this.cArrPos].lineCap !== value) {\n this.currentLineCap = value;\n this.stack[this.cArrPos].lineCap = value;\n }\n };\n\n CVContextData.prototype.lineJoin = function (value) {\n if (this.stack[this.cArrPos].lineJoin !== value) {\n this.currentLineJoin = value;\n this.stack[this.cArrPos].lineJoin = value;\n }\n };\n\n CVContextData.prototype.miterLimit = function (value) {\n if (this.stack[this.cArrPos].miterLimit !== value) {\n this.currentMiterLimit = value;\n this.stack[this.cArrPos].miterLimit = value;\n }\n };\n\n CVContextData.prototype.transform = function (props) {\n this.transformMat.cloneFromProps(props); // Taking the last transform value from the stored stack of transforms\n\n var currentTransform = this.cTr; // Applying the last transform value after the new transform to respect the order of transformations\n\n this.transformMat.multiply(currentTransform); // Storing the new transformed value in the stored transform\n\n currentTransform.cloneFromProps(this.transformMat.props);\n var trProps = currentTransform.props; // Applying the new transform to the canvas\n\n this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n\n CVContextData.prototype.opacity = function (op) {\n var currentOpacity = this.stack[this.cArrPos].opacity;\n currentOpacity *= op < 0 ? 0 : op;\n\n if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n if (this.currentOpacity !== op) {\n this.nativeContext.globalAlpha = op;\n this.currentOpacity = op;\n }\n\n this.stack[this.cArrPos].opacity = currentOpacity;\n }\n };\n\n CVContextData.prototype.fill = function (rule) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n\n this.nativeContext.fill(rule);\n };\n\n CVContextData.prototype.fillRect = function (x, y, w, h) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n\n this.nativeContext.fillRect(x, y, w, h);\n };\n\n CVContextData.prototype.stroke = function () {\n if (this.appliedStrokeStyle !== this.currentStrokeStyle) {\n this.appliedStrokeStyle = this.currentStrokeStyle;\n this.nativeContext.strokeStyle = this.appliedStrokeStyle;\n }\n\n if (this.appliedLineWidth !== this.currentLineWidth) {\n this.appliedLineWidth = this.currentLineWidth;\n this.nativeContext.lineWidth = this.appliedLineWidth;\n }\n\n if (this.appliedLineCap !== this.currentLineCap) {\n this.appliedLineCap = this.currentLineCap;\n this.nativeContext.lineCap = this.appliedLineCap;\n }\n\n if (this.appliedLineJoin !== this.currentLineJoin) {\n this.appliedLineJoin = this.currentLineJoin;\n this.nativeContext.lineJoin = this.appliedLineJoin;\n }\n\n if (this.appliedMiterLimit !== this.currentMiterLimit) {\n this.appliedMiterLimit = this.currentMiterLimit;\n this.nativeContext.miterLimit = this.appliedMiterLimit;\n }\n\n this.nativeContext.stroke();\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 runExpressions: !config || config.runExpressions === undefined || config.runExpressions\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 if (this.renderConfig.clearCanvas) {\n this.ctxTransform = this.contextData.transform.bind(this.contextData);\n this.ctxOpacity = this.contextData.opacity.bind(this.contextData);\n this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);\n this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);\n this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);\n this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);\n this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);\n this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);\n this.ctxFill = this.contextData.fill.bind(this.contextData);\n this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);\n this.ctxStroke = this.contextData.stroke.bind(this.contextData);\n this.save = this.contextData.save.bind(this.contextData);\n }\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 this.validateText();\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 if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\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 runExpressions: !config || config.runExpressions === undefined || config.runExpressions\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 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 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 /* 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$2(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$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 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 var _lottieGlobal = {};\n initialize$2(BMMath);\n\n function resetFrame() {\n _lottieGlobal = {};\n }\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' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n }\n\n function $bm_neg(a) {\n var tOfA = _typeof$1(a);\n\n if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\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$1(a);\n\n var tOfB = _typeof$1(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\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$1(a);\n\n var tOfB = _typeof$1(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$1(a);\n\n var tOfB = _typeof$1(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$1(a);\n\n var tOfB = _typeof$1(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 // Bail out if we don't want expressions\n function noOp(_value) {\n return _value;\n }\n\n if (!elem.globalData.renderConfig.runExpressions) {\n return noOp;\n }\n\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, _lottieGlobal];\n ob.resetFrame = resetFrame;\n return ob;\n }();\n\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n ob.resetFrame = ExpressionManager.resetFrame;\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 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 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 _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 (!_sourceText || stringValue !== _sourceText.value) {\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 Object.defineProperty(_sourceText, 'style', {\n get: function get() {\n return {\n fillColor: elem.textProperty.currentData.fc\n };\n }\n });\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\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 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(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(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 var interfaces = {\n layer: LayerExpressionInterface,\n effects: EffectsExpressionInterface,\n comp: CompExpressionInterface,\n shape: ShapeExpressionInterface,\n text: TextExpressionInterface,\n footage: FootageInterface\n };\n\n function getInterface(type) {\n return interfaces[type] || null;\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 var linearFilterValue = '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';\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', linearFilterValue + ' 1 0');\n this.linearFilter = feColorMatrix;\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.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');\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 1 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 function TransformEffect() {}\n\n TransformEffect.prototype.init = function (effectsManager) {\n this.effectsManager = effectsManager;\n this.type = effectTypes.TRANSFORM_EFFECT;\n this.matrix = new Matrix();\n this.opacity = -1;\n this._mdf = false;\n this._opMdf = false;\n };\n\n TransformEffect.prototype.renderFrame = function (forceFrame) {\n this._opMdf = false;\n this._mdf = false;\n\n if (forceFrame || this.effectsManager._mdf) {\n var effectElements = this.effectsManager.effectElements;\n var anchor = effectElements[0].p.v;\n var position = effectElements[1].p.v;\n var isUniformScale = effectElements[2].p.v === 1;\n var scaleHeight = effectElements[3].p.v;\n var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;\n var skew = effectElements[5].p.v;\n var skewAxis = effectElements[6].p.v;\n var rotation = effectElements[7].p.v;\n this.matrix.reset();\n this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);\n this.matrix.rotate(-rotation * degToRads);\n this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);\n this.matrix.translate(position[0], position[1], 0);\n this._mdf = true;\n\n if (this.opacity !== effectElements[8].p.v) {\n this.opacity = effectElements[8].p.v;\n this._opMdf = true;\n }\n }\n };\n\n function SVGTransformEffect(_, filterManager) {\n this.init(filterManager);\n }\n\n extendPrototype([TransformEffect], SVGTransformEffect);\n\n function CVTransformEffect(effectsManager) {\n this.init(effectsManager);\n }\n\n extendPrototype([TransformEffect], CVTransformEffect);\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);\n ShapeModifiers.registerModifier('zz', ZigZagModifier);\n ShapeModifiers.registerModifier('op', OffsetPathModifier); // Registering expression plugin\n\n setExpressionsPlugin(Expressions);\n setExpressionInterfaces(getInterface);\n initialize$1();\n initialize(); // Registering svg effects\n\n registerEffect$1(20, SVGTintFilter, true);\n registerEffect$1(21, SVGFillFilter, true);\n registerEffect$1(22, SVGStrokeEffect, false);\n registerEffect$1(23, SVGTritoneFilter, true);\n registerEffect$1(24, SVGProLevelsFilter, true);\n registerEffect$1(25, SVGDropShadowEffect, true);\n registerEffect$1(28, SVGMatte3Effect, false);\n registerEffect$1(29, SVGGaussianBlurEffect, true);\n registerEffect$1(35, SVGTransformEffect, false);\n registerEffect(35, CVTransformEffect);\n\n return lottie;\n\n}));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=style&index=0&id=77d90276&prod&lang=scss&scoped=true\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"maskConstain\"},[_c('div',{staticClass:\"anim\"},[_vm._v(\"用户ID:\"+_vm._s(_vm.getWaterMark))])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VideoMask.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VideoMask.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./VideoMask.vue?vue&type=template&id=9ad97c1e&scoped=true\"\nimport script from \"./VideoMask.vue?vue&type=script&lang=js\"\nexport * from \"./VideoMask.vue?vue&type=script&lang=js\"\nimport style0 from \"./VideoMask.vue?vue&type=style&index=0&id=9ad97c1e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9ad97c1e\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VideoMask.vue?vue&type=style&index=0&id=9ad97c1e&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VueAliplayer.vue?vue&type=style&index=0&id=32ee75cd&prod&lang=css\""],"sourceRoot":""}