{"version":3,"file":"bundle.mjs","sources":["../../src/common/interactivity/definition.ts","../../src/common/event.ts","../../src/common/playback.ts","../../src/common/expressions/parser.ts","../../src/common/expressions/evaluator.ts","../../src/common/interactivity/variables.ts","../../src/common/morphing.ts","../../src/common/interactivity/driver.ts","../../src/common/interactivity/bezier.ts","../../src/common/interactivity/events.ts","../../src/common/interactivity/index.ts","../../node_modules/lottie-web/build/player/lottie_lottielab.js","../../src/common/renderer.ts","../../src/common/driven-renderer.ts","../../src/common/player.ts","../../src/react/index.tsx","../../src/web/index.ts"],"sourcesContent":["export type InteractiveEventType =\n  | 'click'\n  | 'mouseDown'\n  | 'mouseUp'\n  | 'mouseEnter'\n  | 'mouseLeave'\n  | 'finish'\n  | 'custom';\n\nexport type InteractiveEvent = { event: InteractiveEventType } & (\n  | { event: 'click' | 'mouseDown' | 'mouseUp' | 'mouseEnter' | 'mouseLeave'; target?: string }\n  | { event: 'finish' }\n  | { event: 'custom'; name: string }\n);\n\n/**\n * A string representation of an interactive event. Can be one of the following:\n * - 'click', 'mouseDown', 'mouseUp', 'mouseEnter', 'mouseLeave': when the user interacts with the lottie\n * - 'finish': when the animation of this state finishes (after all the looping has completed, if any)\n * - 'custom:<event-name>': a custom, user-defined event with the name\n * '<event-name>', manually triggerable from code using\n * LottielabInteractivity.trigger.\n *\n * By appending a `:<class>` suffix, you can target specific layers for the mouse\n * events, where `<class>` is the CSS class of the layer in the Lottie JSON, see\n * the \"cl\" member of the Lottie JSON. For example, `click:myButton` will only\n * trigger the transition if the user clicks on a layer with the class (`cl`\n * property in the JSON) of `myButton`.\n */\nexport type InteractiveEventStr = InteractiveEventType | string;\n\nexport function eventToString(e: InteractiveEvent): InteractiveEventStr {\n  switch (e.event) {\n    case 'finish':\n      return 'finish';\n\n    case 'click':\n    case 'mouseDown':\n    case 'mouseUp':\n    case 'mouseEnter':\n    case 'mouseLeave':\n      if (e.target) {\n        return `${e.event}:${e.target}`;\n      } else {\n        return e.event;\n      }\n\n    case 'custom':\n      return 'custom:' + e.name;\n  }\n}\n\nexport type State = {\n  /**\n   * Which segment of the animation to play when this state is active. Accepts a\n   * [start, end] array of times, in seconds, from the beginning of the\n   * animation.\n   */\n  segment: [number, number];\n  /** Speed of the animation in this state. 1.0 (normal speed) is the default. */\n  speed?: number | Formula;\n  /**\n   * Direction of the animation in this state. Can be 'forward' or 'reverse'.\n   * 'forward' is the default.\n   */\n  direction?: 'forward' | 'reverse';\n  /**\n   * Whether to loop the animation when in this state, and/or how many times. If\n   * set to true, loops indefinitely. A value of false means the same as 1 (no\n   * looping).\n   */\n  loop?: boolean | number;\n  /**\n   * If set, the state will end after this many seconds, regardless of the\n   * looping or playback state, and a 'finish' event will be triggered. If this\n   * is not provided, the 'finish' event will trigger at the end of the segment\n   * if looping is disabled, or at the end of the last loop if looping is\n   * enabled. If no 'finish' transition is present, playback will pause.\n   */\n  duration?: number;\n\n  /**\n   * If set, activates morphing of this state with another state. Morphing means\n   * that there is another state running \"in parallel\", and the final animation\n   * can be smoothly morphed between this state and the other state. When\n   * morphing is active, you can map the \"morph strength\" value to some user\n   * input, like the mouse position, to achieve various effects.\n   */\n  morphing?: {\n    /** Name of the other state to morph with. */\n    otherState: string;\n    /**\n     * How to sync the playhead of this state to the playhead of the other state.\n     * Can be one of the following:\n     *\n     * - 'proportional': the playhead of the other state will be at the\n     *   same relative position (percentage) in the other as in this segment. For\n     *   example, if this state's segment is 0s-1s and the other state's segment is\n     *   1s-3s, and this state is at 0.5s (50%), the other state will be at 1.5s\n     *   (also 50%). In this case, states will always be in sync but the other\n     *   state might be playing at a different speed if the segment lengths differ.\n     * - 'wrap': means that the playheads of both states will start at the beginning\n     *   of their segments, but will be allowed to proceed independently and loop\n     *   around. In this case, both states will be playing at the same speed, but\n     *   they might go out of sync with each other if one's segment's length is not\n     *   an exact multiple of the other's.\n     * - 'clamp': means that the playheads of both states will start at the same\n     *   absolute time, but the second one will get clamped to the end of its segment.\n     *   The playheads will be in sync, but the second state will stop if its\n     *   segment is shorter than the first state's.\n     */\n    timeRemap?: 'proportional' | 'wrap' | 'clamp';\n\n    /**\n     * A formula describing the morph strength as a value between 0 and 1 where 0 means\n     * behave as if there is no morphing, 1 means display the other state fully, 0.5\n     * means to morph evenly between this and the other state, etc.\n     */\n    strength: number | Formula;\n  };\n\n  /**\n   * Defines the transitions to other states. The key is the name of the event,\n   * and the value is the details about the transition.\n   *\n   * Available events are:\n   * - 'click': when the user clicks on the lottie\n   * - 'mouseDown': when the user presses the mouse button\n   * - 'mouseUp': when the user releases the mouse button\n   * - 'mouseEnter': when the user's mouse enters the lottie\n   * - 'mouseLeave': when the user's mouse leaves the lottie\n   * - 'finish': when the animation of this state finishes (after all the\n   *   looping has completed, if any)\n   *\n   * Optionally, for all events except 'finish', the event can have a `:<target>`\n   * suffix which targets specific layers defined by a CSS class, see the `.cl`\n   * member of the Lottie JSON.\n   *\n   * For example, if the lottie JSON defines a layer with its `cl` property set\n   * to `myButton`, you can define a transition that should only happen when this\n   * layer is clicked by setting the event to `click:myButton`.\n   */\n  on?: Partial<Record<InteractiveEventStr, Transition>>;\n\n  /**\n   * Allows the playhead position in this state to be mapped to some user\n   * input, possibly via a formula. This is sometimes called \"playback control\".\n   * The result of the provided formula will be applied as a 0-1 progress within\n   * the segment of this state.\n   */\n  playhead?: Formula;\n};\n\nexport type TransitionProperties = {\n  /**\n   * Duration of the transition to the new state. If 0 or not provided, the\n   * transition is instant. Otherwise, the state will be smoothly morphed to the\n   * other state.\n   */\n  duration?: number;\n  /**\n   * Describes the initial playhead position in the new state after switching.\n   * Can be one of the following:\n   *\n   * - 'start': start from the beginning of the new state's segment\n   * - 'end': start at the end of the new state's segment\n   * - 'proportional': start at the same relative position of the playhead (by\n   *   percentage/progress) as the current time. For example, if the current state\n   *   is at 25% of its segment, the new state will start at 25% of its segment.\n   * - 'wrap': the new state will start at the same absolute time as the current\n   *   one, wrapped around. This means that if the current state is at 0.75s and\n   *   the new state has a 2 second long segment, it will also start at 0.75s.\n   *   However, if the new state has a 0.5s long segment, it will start at 0.25s\n   *   (wrapping around as if it looped).\n   * - 'clamp': the new state will start at the same absolute time as the current\n   *   one, but simply clamped to the new state's segment. This means that if the\n   *   new state has a segment 0.5s long, a 0.25s playhead will end up the same\n   *   (at 0.25s), but a 1.0s playhead will end up at 0.5s (clamped).\n   */\n  startAt?: 'start' | 'end' | 'proportional' | 'wrap' | 'clamp';\n  /**\n   * Easing function to use for the transition. Has an effect only if `duration`\n   * is set (otherwise, the transition is instant). If not provided, a linear\n   * easing function is used. Accepts a cubic Bezier easing in a similar format\n   * as Lottie (two control points).\n   */\n  easing?: BezierEasing;\n};\n\nexport type Transition = {\n  /** Name of the state to switch to. */\n  goTo: string;\n} & TransitionProperties;\n\n/** Lottie-like Bezier easing with 2 control points. */\nexport type BezierEasing = { i: { x: number; y: number }; o: { x: number; y: number } };\n\n/**\n * A simple number or an expression whose result will be used to control the provided\n * variable. The expression can use the standard mathematical functions and constants\n * from the JavaScript Math module (without the `Math.` prefix), and can use a few built-in\n * variables which are mapped to the current user input state, or custom\n * variables provided by the user.\n *\n * The formula can be as simple as a single variable to map the user input\n * directly, or a complex expression that remaps values and integrates multiple\n * inputs for a complex effect.\n *\n * The variables that can be used in the formula are:\n * - `time`: Time in seconds since this state started.\n * - `time.abs`: Time in seconds since the animation first started.\n * - `playhead`: The current playhead position in this state, in seconds.\n * - `playhead.progress`: The current playhead position in this state, as a\n *    value from 0 to 1 within the segment (0 = start, 1 = end).\n * - `playhead.abs`: Global position of the playhead in seconds.\n * - `mouse.x`, `mouse.y`: the current mouse position, relative to the top-left\n *   of the lottie, in pixels\n * - `mouse.progress.x`, `mouse.progress.y`: the current mouse position, as a\n *   value from 0 to 1 within the lottie's bounds (0 = left/top, 1 = right/bottom)\n * - `mouse.abs.x`, `mouse.abs.y`: the current mouse position, relative to the top-left\n *   of the whole viewport rather than the lottie itself\n * - `mouse.buttons.left`, `mouse.buttons.right`, `mouse.buttons.middle`: whether the left,\n *    right, or middle mouse buttons are currently pressed\n *\n * All other variable names are considered custom variables and can be freely\n * used in formulas, provided that `LottielabInteractivity.inputs.set()` is\n * called by the user to set their values.\n */\nexport type Formula = string;\n\n/**\n * A definition of states and transitions conforming to Lottielab Interactivity.\n *\n * This object is added to the lottie in `.metadata.lottielabInteractivity`.\n */\nexport type LottielabInteractivityDef = {\n  __version: 'v1';\n\n  /** List of states in the animation by their names. */\n  states: Record<string, State>;\n  /** Name of the state to start the animation in. */\n  initialState: string;\n};\n","export type Listener<E> = (event: E) => void;\n\nexport class EventEmitter<E = undefined> {\n  private listeners: Listener<E>[] = [];\n\n  addListener(listener: (event: E) => void) {\n    this.listeners.push(listener);\n  }\n\n  removeListener(listener: (event: E) => void) {\n    this.listeners = this.listeners.filter((l) => l !== listener);\n  }\n\n  hasListeners() {\n    return this.listeners.length > 0;\n  }\n\n  removeAllListeners() {\n    this.listeners = [];\n  }\n\n  emit(event: E) {\n    for (const listener of this.listeners) {\n      listener(event);\n    }\n  }\n}\n","import type { ILottie, LottieJSON } from '..';\nimport type { LottieDriver, LottieState } from './driver';\nimport type { AnimationItem } from 'lottie-web/build/player/lottie_lottielab';\nimport { EventEmitter } from './event';\n\nfunction lottieFrameRate(lottie: any) {\n  if (!lottie) return 100;\n  return lottie.fr;\n}\n\nfunction lottieDuration(lottie: any) {\n  if (!lottie) return 0;\n  return (lottie.op - lottie.ip) / lottieFrameRate(lottie);\n}\n\nexport type PlaybackEvent = {\n  type: 'loop' | 'finish';\n  relativeTime: number; // time from [0, elapsed] (see advanceWithEvents()) when the event happened\n};\n\nexport class PlaybackDriver implements LottieDriver, ILottie {\n  public playing: boolean = true;\n  public time: number = 0;\n  public speed: number = 1;\n  public direction: 1 | -1 = 1;\n  public segment?: [number, number];\n\n  private _fps?: number;\n  private _duration?: number;\n  private _loop: boolean | number = true;\n  private _loopsRemaining: number = Infinity;\n\n  public readonly loopEvent = new EventEmitter();\n  public readonly finishEvent = new EventEmitter();\n\n  private get effectiveSegment() {\n    if (this.segment) {\n      return this.segment;\n    } else {\n      return [0, this._duration ?? 0];\n    }\n  }\n\n  private globalTimeToSegmentTime(time: number) {\n    const [from, to] = this.effectiveSegment;\n    return Math.min(Math.max(time - from, 0), to - from);\n  }\n\n  private segmentTimeToGlobalTime(time: number) {\n    const [from] = this.effectiveSegment;\n    return from + time;\n  }\n\n  advance(ls: LottieState, elapsed: number, eventsOut?: PlaybackEvent[]): LottieState {\n    const { lottie } = ls;\n    this._fps = lottieFrameRate(lottie);\n    this._duration = lottieDuration(lottie);\n    if (!this.playing) {\n      return { time: this.time, lottie };\n    }\n\n    const segmentTime = this.globalTimeToSegmentTime(this.time);\n\n    let newTime;\n    newTime = segmentTime + elapsed * this.speed * this.direction;\n\n    const events: PlaybackEvent[] = [];\n    if (this.durationOfSegment > 0) {\n      const loops = Math.abs(Math.floor(newTime / this.durationOfSegment));\n\n      // TODO: Check if this is correct\n      const firstLoop = this.durationOfSegment - segmentTime;\n      for (let i = 0; i < loops; i++) {\n        this._loopsRemaining--;\n        const relativeTime = firstLoop + i * this.durationOfSegment;\n        if (this._loopsRemaining > 0) {\n          events.push({ type: 'loop', relativeTime });\n          if (newTime >= this.durationOfSegment) {\n            newTime -= this.durationOfSegment;\n          } else {\n            newTime += this.durationOfSegment;\n          }\n        } else {\n          events.push({ type: 'finish', relativeTime });\n          newTime = Math.max(0, Math.min(newTime, this.durationOfSegment));\n          this._loopsRemaining = 0;\n          this.playing = false;\n\n          break;\n        }\n      }\n    } else {\n      newTime = 0;\n      events.push({ type: 'loop', relativeTime: 0 });\n    }\n\n    const globalTime = this.segmentTimeToGlobalTime(newTime);\n    this.time = globalTime;\n\n    if (events.length > 0) {\n      if (eventsOut != undefined) {\n        eventsOut.push(...events);\n      }\n\n      for (const event of events) {\n        if (event.type === 'loop') {\n          this.loopEvent.emit(undefined);\n        } else if (event.type === 'finish') {\n          this.finishEvent.emit(undefined);\n        }\n      }\n    }\n\n    return { time: globalTime, lottie };\n  }\n\n  play() {\n    this.playing = true;\n  }\n\n  pause() {\n    this.playing = false;\n  }\n\n  stop() {\n    this.playing = false;\n    this.seek(0);\n    this.loop = this._loop; // reset loop count\n  }\n\n  seek(time: number) {\n    this.time = time;\n  }\n\n  seekToFrame(frame: number) {\n    this.time = frame / this.frameRate;\n  }\n\n  loopBetween(start: number, end: number) {\n    this.segment = [start, end];\n  }\n\n  loopBetweenFrames(start: number, end: number) {\n    this.segment = [start / this.frameRate, end / this.frameRate];\n  }\n\n  get loop() {\n    return this._loop;\n  }\n\n  set loop(newLoop: number | boolean) {\n    this._loop = newLoop;\n    if (typeof newLoop === 'number') {\n      this._loopsRemaining = newLoop;\n    } else {\n      if (newLoop) {\n        this._loopsRemaining = Infinity;\n      } else {\n        this._loopsRemaining = 1;\n      }\n    }\n  }\n\n  get currentTime() {\n    return this.time;\n  }\n\n  get currentFrame() {\n    return this.time * this.frameRate;\n  }\n\n  get timeInSegment() {\n    return this.globalTimeToSegmentTime(this.time);\n  }\n\n  set timeInSegment(time: number) {\n    this.time = this.segmentTimeToGlobalTime(time);\n  }\n\n  get frameInSegment() {\n    return this.timeInSegment * this.frameRate;\n  }\n\n  get frameRate() {\n    return this._fps ?? 100;\n  }\n\n  get duration() {\n    return this._duration ?? 0;\n  }\n\n  get durationFrames() {\n    return this.duration * this.frameRate;\n  }\n\n  get durationOfSegment() {\n    const [from, to] = this.effectiveSegment;\n    return to - from;\n  }\n\n  get animation(): AnimationItem {\n    throw new Error(\n      \"This is just a driver and implements ILottie for clarity; you shouldn't directly call this function\"\n    );\n  }\n\n  get animationData(): LottieJSON {\n    throw new Error(\n      \"This is just a driver and implements ILottie for clarity; you shouldn't directly call this function\"\n    );\n  }\n\n  toInteractive() {\n    throw new Error(\n      \"This is just a driver and implements ILottie for clarity; you shouldn't directly call this function\"\n    );\n  }\n\n  toPlayback() {}\n\n  on(event: string, listener: any) {\n    throw new Error(\n      \"This is just a driver and implements ILottie for clarity; you shouldn't directly call this function\"\n    );\n  }\n\n  off(event: string, listener: any) {\n    throw new Error(\n      \"This is just a driver and implements ILottie for clarity; you shouldn't directly call this function\"\n    );\n  }\n}\n","export const enum NodeType {\n  NUMBER,\n  IDENTIFIER,\n  UNARY_OPERATOR,\n  BINARY_OPERATOR,\n  CONDITIONAL_OPERATOR,\n  FUNCTION_CALL,\n}\n\nexport type Node =\n  | {\n      type: NodeType.NUMBER;\n      value: number;\n    }\n  | {\n      type: NodeType.IDENTIFIER;\n      name: string;\n    }\n  | {\n      type: NodeType.UNARY_OPERATOR;\n      operator: '+' | '-' | '!';\n      operand: Node;\n    }\n  | {\n      type: NodeType.BINARY_OPERATOR;\n      operator: '+' | '-' | '*' | '/' | '^' | '<' | '<=' | '>' | '>=' | '==' | '&&' | '||';\n      left: Node;\n      right: Node;\n    }\n  | {\n      type: NodeType.CONDITIONAL_OPERATOR;\n      condition: Node;\n      thenBranch: Node;\n      elseBranch: Node;\n    }\n  | {\n      type: NodeType.FUNCTION_CALL;\n      name: string;\n      operands: Node[];\n    };\n\nconst enum Precedence {\n  MINIMUM,\n  SEPARATOR,\n  LITERAL,\n  CONDITIONAL,\n  LOGICAL_OR,\n  LOGICAL_AND,\n  COMPARISON,\n  ADDITIVE,\n  MULTIPLICATIVE,\n  POWER,\n  LOGICAL_NEGATION,\n  BRACKET,\n}\n\ninterface Parser {\n  peek: () => Token;\n  pop: () => Token;\n  parse: (minPrecedence: number) => Node;\n}\n\ntype TokenPrimitive = {\n  name: string;\n  lbp: number;\n  detect?: (s: string) => boolean;\n  nud?: (p: Parser, token: Token) => Node;\n  led?: (p: Parser, left: Node, token: Token) => Node;\n};\n\ntype Token = TokenPrimitive & { value: string; position: number };\n\nfunction parseError(token: Token): never {\n  throw new Error(`Unexpected ${token.name} at position ${token.position}.`);\n}\n\nconst TokenPrimitives = (() => {\n  const tokenPrimitives: TokenPrimitive[] = [\n    {\n      name: 'number',\n      lbp: Precedence.LITERAL,\n      detect: (s: string) => /^([1-9]\\d*|0)(\\.\\d*)?$/.test(s),\n      nud: (_: Parser, token: Token) => ({\n        type: NodeType.NUMBER,\n        value: parseFloat(token.value),\n      }),\n    },\n    {\n      name: 'identifier',\n      lbp: Precedence.LITERAL,\n      detect: (s: string) => /^[_a-zA-Z][_a-zA-Z0-9]*(\\.[a-zA-Z]+)*$/.test(s),\n      nud: (_: Parser, token: Token) => ({\n        type: NodeType.IDENTIFIER,\n        name: token.value,\n      }),\n    },\n    {\n      // right associative\n      name: '^',\n      lbp: Precedence.POWER,\n      led: (p: Parser, left: Node) => ({\n        type: NodeType.BINARY_OPERATOR,\n        operator: '^',\n        left,\n        right: p.parse(Precedence.POWER - 1),\n      }),\n    },\n    {\n      // unary only\n      name: '!',\n      lbp: Precedence.LOGICAL_NEGATION,\n      nud: (p: Parser) => ({\n        type: NodeType.UNARY_OPERATOR,\n        operator: '!',\n        operand: p.parse(Precedence.LOGICAL_NEGATION),\n      }),\n    },\n    {\n      name: 'conditional-operator',\n      detect: (s: string) => s == '?',\n      lbp: Precedence.CONDITIONAL,\n      led: (p: Parser, left: Node) => {\n        const thenBranch = p.parse(Precedence.CONDITIONAL - 1);\n        const nextToken = p.pop();\n        if (nextToken.name != ':') parseError(nextToken);\n        const elseBranch = p.parse(Precedence.CONDITIONAL - 1);\n        return {\n          type: NodeType.CONDITIONAL_OPERATOR,\n          condition: left,\n          thenBranch,\n          elseBranch,\n        };\n      },\n    },\n    {\n      name: '(',\n      lbp: Precedence.BRACKET,\n      nud: (p: Parser) => {\n        const expression = p.parse(Precedence.SEPARATOR);\n        const nextToken = p.pop();\n        if (nextToken.name != ')') parseError(nextToken);\n        return expression;\n      },\n      led: (p: Parser, left: Node, token: Token) => {\n        if (left.type != NodeType.IDENTIFIER) parseError(token);\n\n        const operands: Node[] = [];\n        if (p.peek().name == ')') {\n          p.pop();\n        } else {\n          while (true) {\n            operands.push(p.parse(Precedence.SEPARATOR));\n\n            const nextToken = p.pop();\n            if (nextToken.name == ')') break;\n            if (nextToken.name == ',') continue;\n            parseError(nextToken);\n          }\n        }\n\n        return { type: NodeType.FUNCTION_CALL, name: left.name, operands };\n      },\n    },\n    {\n      name: 'end of input',\n      lbp: Precedence.MINIMUM,\n    },\n  ];\n\n  for (const operator of ['+', '-'] as const) {\n    tokenPrimitives.push({\n      name: operator,\n      lbp: Precedence.ADDITIVE,\n      nud: (p: Parser) => ({\n        type: NodeType.UNARY_OPERATOR,\n        operator,\n        operand: p.parse(Precedence.ADDITIVE),\n      }),\n      led: (p: Parser, left: Node) => ({\n        type: NodeType.BINARY_OPERATOR,\n        operator,\n        left,\n        right: p.parse(Precedence.ADDITIVE),\n      }),\n    });\n  }\n\n  const binaryOperators = [\n    ['*', Precedence.MULTIPLICATIVE],\n    ['/', Precedence.MULTIPLICATIVE],\n    ['<', Precedence.COMPARISON],\n    ['<=', Precedence.COMPARISON],\n    ['>', Precedence.COMPARISON],\n    ['>=', Precedence.COMPARISON],\n    ['==', Precedence.COMPARISON],\n    ['&&', Precedence.LOGICAL_AND],\n    ['||', Precedence.LOGICAL_OR],\n  ] as const;\n  for (const [operator, precedence] of binaryOperators) {\n    tokenPrimitives.push({\n      name: operator,\n      lbp: precedence,\n      led: (p: Parser, left: Node) => ({\n        type: NodeType.BINARY_OPERATOR,\n        operator,\n        left,\n        right: p.parse(precedence),\n      }),\n    });\n  }\n\n  for (const separator of [',', ')', ':'] as const) {\n    tokenPrimitives.push({\n      name: separator,\n      lbp: Precedence.SEPARATOR,\n    });\n  }\n\n  return tokenPrimitives;\n})();\n\nfunction tokenize(input: string): Token[] {\n  const isWhitespace = /^\\s*$/;\n  const segments = input.split(/([+\\-*/^(),?:!]|<=|>=|==|>(?!=)|<(?!=)|\\|\\||&&|\\s+)/g);\n  segments.push('end of input');\n\n  let position = 0;\n  const tokens: Token[] = [];\n  for (const segment of segments) {\n    const detected = TokenPrimitives.some((tokenPrimitive) => {\n      const detect = tokenPrimitive.detect ?? ((s: string) => s == tokenPrimitive.name);\n      if (detect(segment)) {\n        tokens.push({ ...tokenPrimitive, value: segment, position });\n        return true;\n      }\n    });\n\n    if (!detected && !isWhitespace.test(segment)) {\n      throw new Error(`Invalid token ${segment} at position ${position}`);\n    }\n\n    position += segment.length;\n  }\n\n  return tokens;\n}\n\nexport function parse(input: string) {\n  const tokens = tokenize(input);\n\n  let tokenIndex = 0;\n\n  const parser: Parser = {\n    peek: () => tokens[tokenIndex],\n    pop: () => tokens[tokenIndex++],\n    parse: (minPrecedence) => {\n      let currentToken = parser.pop();\n\n      if (!currentToken.nud) parseError(currentToken);\n      let left = currentToken.nud(parser, currentToken);\n\n      while (parser.peek().lbp > minPrecedence) {\n        currentToken = parser.pop();\n\n        if (!currentToken.led) parseError(currentToken);\n        left = currentToken.led(parser, left, currentToken);\n      }\n\n      return left;\n    },\n  };\n\n  return parser.parse(Precedence.MINIMUM);\n}\n","import { Node, NodeType } from './parser';\n\nexport type SymbolMap = {\n  [name in string]: number | boolean | ((...args: any) => number | boolean);\n};\n\n// @ts-ignore For now only the members of Math are built-in symbols.\nconst BuiltinSymbols: SymbolMap = Math;\n\nfunction undefinedSymbol(name: string): never {\n  throw new Error(`Symbol ${name} is not defined and not a built in symbol.`);\n}\n\ntype UnaryOperator = (Node & { type: NodeType.UNARY_OPERATOR })['operator'];\ntype BinaryOperator = (Node & { type: NodeType.BINARY_OPERATOR })['operator'];\n\nfunction evaluateUnary(operator: UnaryOperator, operand: number | boolean): number | boolean {\n  switch (operator) {\n    case '+':\n      return +operand;\n    case '-':\n      return -operand;\n    case '!':\n      return !operand;\n  }\n}\n\nfunction evaluateBinary(\n  operator: BinaryOperator,\n  left: number | boolean,\n  right: number | boolean\n): number | boolean {\n  switch (operator) {\n    case '+':\n      // @ts-ignore\n      return left + right;\n    case '-':\n      // @ts-ignore\n      return left - right;\n    case '*':\n      // @ts-ignore\n      return left * right;\n    case '/':\n      // @ts-ignore\n      return left / right;\n    case '^':\n      // @ts-ignore\n      return Math.pow(left, right);\n    case '<':\n      return left < right;\n    case '<=':\n      return left <= right;\n    case '>':\n      return left > right;\n    case '>=':\n      return left >= right;\n    case '==':\n      return left == right;\n    case '&&':\n      return left && right;\n    case '||':\n      return left || right;\n  }\n}\n\nexport function evaluate(expression: Node, userDefinedSymbols: SymbolMap): number | boolean {\n  switch (expression.type) {\n    case NodeType.NUMBER: {\n      return expression.value;\n    }\n\n    case NodeType.IDENTIFIER: {\n      const name = expression.name;\n      const value = userDefinedSymbols[name] ?? BuiltinSymbols[name];\n      if (value == undefined) undefinedSymbol(name);\n\n      if (typeof value != 'boolean' && typeof value != 'number') {\n        throw new Error(`Symbol ${name} is a function and must be used in a function call.`);\n      }\n\n      return value;\n    }\n\n    case NodeType.UNARY_OPERATOR: {\n      const operand = evaluate(expression.operand, userDefinedSymbols);\n      return evaluateUnary(expression.operator, operand);\n    }\n\n    case NodeType.BINARY_OPERATOR: {\n      const left = evaluate(expression.left, userDefinedSymbols);\n      const right = evaluate(expression.right, userDefinedSymbols);\n      return evaluateBinary(expression.operator, left, right);\n    }\n\n    case NodeType.CONDITIONAL_OPERATOR: {\n      const condition = evaluate(expression.condition, userDefinedSymbols);\n      return condition\n        ? evaluate(expression.thenBranch, userDefinedSymbols)\n        : evaluate(expression.elseBranch, userDefinedSymbols);\n    }\n\n    case NodeType.FUNCTION_CALL: {\n      const name = expression.name;\n      const value = userDefinedSymbols[name] ?? BuiltinSymbols[name];\n      if (value == undefined) undefinedSymbol(name);\n\n      if (typeof value != 'function') {\n        throw new Error(`Symbol ${name} has value ${value} and is not callable.`);\n      }\n\n      if (value.length != expression.operands.length) {\n        throw new Error(\n          `Expected ${value.length} operands for ${name}, received ${expression.operands.length}`\n        );\n      }\n\n      const operands = expression.operands.map((operand) => evaluate(operand, userDefinedSymbols));\n\n      return value.apply(null, operands);\n    }\n  }\n}\n","export type Point = { x: number; y: number };\n\nexport type BuiltinVariables = {\n  // Time in seconds since the animation first started.\n  time: number;\n  // Time in seconds that passed between the previous and the current frames\n  'time.diff': number;\n  // The current playhead position in this state, in seconds.\n  playhead: number;\n  // The current playhead position in this state, as a value from 0 to 1\n  // within the segment (0 = start, 1 = end).\n  'playhead.progress': number;\n  // Global position of the playhead in seconds.\n  'playhead.abs': number;\n  // The current mouse position, relative to the top-left of the lottie, in pixels\n  'mouse.x': number;\n  'mouse.y': number;\n  // The current mouse position, as a value from 0 to 1 within the lottie's bounds\n  // (0 = left/top, 1 = right/bottom)\n  'mouse.progress.x': number;\n  'mouse.progress.y': number;\n  // The current mouse position, relative to the top-left of the whole viewport rather\n  // than the lottie itself\n  'mouse.abs.x': number;\n  'mouse.abs.y': number;\n  // Whether the left, right, or middle mouse buttons are currently pressed\n  'mouse.buttons.left': boolean;\n  'mouse.buttons.right': boolean;\n  'mouse.buttons.middle': boolean;\n};\n\nexport const defaultValues: BuiltinVariables = {\n  time: 0,\n  'time.diff': 0,\n  playhead: 0,\n  'playhead.progress': 0,\n  'playhead.abs': 0,\n  'mouse.x': 0,\n  'mouse.y': 0,\n  'mouse.progress.x': 0,\n  'mouse.progress.y': 0,\n  'mouse.abs.x': 0,\n  'mouse.abs.y': 0,\n  'mouse.buttons.left': false,\n  'mouse.buttons.right': false,\n  'mouse.buttons.middle': false,\n};\n\nexport type UserVariables = Record<string, number | boolean | Point>;\n\nexport type Variables = Record<string, number | boolean>;\n\nexport function isValidVariableName(name: string): boolean {\n  return /^[a-zA-Z_][a-zA-Z0-9_.]*$/.test(name);\n}\n\nexport function mergeVariables(builtin: BuiltinVariables, user: UserVariables): Variables {\n  const vars: Variables = { ...builtin };\n  for (const key in user) {\n    if (!isValidVariableName(key)) {\n      continue;\n    }\n\n    const val = user[key];\n    if (\n      typeof val === 'object' &&\n      'x' in val &&\n      'y' in val &&\n      typeof val.x === 'number' &&\n      typeof val.y === 'number'\n    ) {\n      vars[key + '.x'] = val.x;\n      vars[key + '.y'] = val.y;\n    } else if (typeof val === 'number' || typeof val === 'boolean') {\n      vars[key] = val;\n    } else {\n      vars[key] = 0;\n    }\n  }\n\n  return vars;\n}\n","import type { AnimationItem } from 'lottie-web';\n\n// lottie-web internal types\n\ninterface SvgRenderer {\n  elements: SvgRendererElement[];\n}\n\ntype ValueCallback = (val: Lerpable) => Lerpable;\n\ninterface DynamicProp {\n  addEffect(cb: ValueCallback): void;\n  effectsSequence: ValueCallback[];\n  _caching: unknown;\n  offsetTime: number;\n  interpolateValue?(frame: number, caching: unknown): Lerpable;\n  interpolateShape?(frame: number, prevValue: Lerpable, caching: unknown): Lerpable;\n}\n\ninterface NestedDynamicProp {\n  dynamicProperties: DynamicProp[];\n}\n\ninterface SvgRendererElement {\n  elements?: SvgRendererElement[];\n  dynamicProperties?: (DynamicProp | NestedDynamicProp)[];\n}\n\ntype ShapePath = {\n  closed: boolean;\n  i: number[];\n  o: number[];\n  v: number[];\n  length?: number;\n  _length?: number;\n};\n\ntype Lerpable = number | number[] | Float32Array | ShapePath;\n\n/**\n * A linear interpolation implementation which dynamically handles any type of\n * value that a lottie-web dynamic property (DynamicProp) might contain.\n */\nfunction universalLerp(a: Lerpable, b: Lerpable, t: number): Lerpable {\n  if (a == undefined) {\n    return b;\n  } else if (b == undefined) {\n    return a;\n  } else if (typeof a === 'number') {\n    // 1-d lerp\n\n    if (typeof b !== 'number') {\n      // Cannot interpolate between these, fallback to a step function\n      return t > 0.5 ? b : a;\n    }\n\n    return (1 - t) * a + t * b;\n  } else if (Array.isArray(a) || a instanceof Float32Array) {\n    // k-d lerp\n\n    if (!Array.isArray(b) && !(b instanceof Float32Array)) {\n      // Cannot interpolate between these, fallback to a step function\n      return t > 0.5 ? b : a;\n    }\n\n    // Recursively apply to elements\n    return a.map((xa, i) => universalLerp(xa, b[i] ?? xa, t) as number);\n  } else if ('i' in a && 'v' in a && 'o' in a) {\n    // Lerp between vector paths\n\n    if (typeof b !== 'object' || !('i' in b && 'v' in b && 'o' in b)) {\n      // Cannot interpolate between these, fallback to a step function\n      return t > 0.5 ? b : a;\n    }\n\n    return {\n      closed: a.closed && b.closed,\n      i: universalLerp(a.i, b.i, t) as number[],\n      o: universalLerp(a.o, b.o, t) as number[],\n      v: universalLerp(a.v, b.v, t) as number[],\n      length: Math.max(a.length ?? 0, b.length ?? 0),\n      _length: Math.max(a._length ?? 0, b._length ?? 0),\n    };\n  } else {\n    // Unknown type, fall back to step function\n    return t > 0.5 ? b : a;\n  }\n}\n\n/**\n * A single inter-frame morph operation. It instructs the morphing system to\n * combine the current state of each property with what its state would be at\n * another frame, interpolated with the provided strength.\n *\n * For example, if the animation is at time 2.0s and a morph operation of the\n * following form is applied:\n *\n * { time: 5.0, strength: 0.25 }\n *\n * This means that, for each animatable property, its state at frame 5.0s will be\n * combined with the state at frame 2.0s with 25% strength. Sliding the strength\n * from 0 to 1 will result in a smooth linar transition between the time 5.0s and\n * 2.0s.\n */\nexport type MorphOperation = {\n  time: number;\n  strength: number;\n};\n\n/** Maximum number of concurrent ops, for performance reasons. */\nexport const MAX_MORPHS = 8;\n\n/**\n * An inter-frame morphing implementation for lottie-web.\n *\n * This class attaches to an existing lottie-web instance and allows the user to\n * manipulate the displayed state of the Lottie so that it does not display only\n * one frame, but an arbitrary linear combination of multiple frames.\n *\n * To use, instantiate the Morphing class and pass it a lottie-web instance.\n * Then, set the ops property to an array of MorphOperation objects. The\n * operations will be performed in sequence, each blending the state left by\n * the previous with some other frame of the animation. @see MorphOperation\n */\nexport class Morphing {\n  public ops: MorphOperation[];\n  private lottie: AnimationItem;\n\n  constructor(lottie: AnimationItem) {\n    this.ops = [];\n    this.lottie = lottie;\n\n    const renderer = lottie.renderer as SvgRenderer;\n    const s = new WeakSet<object>();\n    (renderer?.elements ?? []).forEach((el) => this.attach(el, s));\n  }\n\n  private attachToProp(p: DynamicProp) {\n    const self = this;\n    const s = p as any;\n    if (!p.effectsSequence?.length) {\n      return;\n    }\n\n    const vrs: any[] = [];\n    for (let i = 0; i < MAX_MORPHS; i++) {\n      vrs[i] = {\n        _caching: structuredClone(p._caching),\n        propType: s.propType,\n        offsetTime: s.offsetTime,\n        keyframes: s.keyframes,\n        keyframesMetadata: s.keyframesMetadata,\n        sh: s.sh,\n        pv: structuredClone(s.pv),\n      };\n    }\n\n    p.addEffect(function (val: Lerpable) {\n      const activeMorphs = self.ops.slice(-MAX_MORPHS);\n\n      if (p.interpolateShape && val == undefined) {\n        val = structuredClone(s.pv);\n      }\n\n      for (let i = 0; i < activeMorphs.length; i++) {\n        const morph = activeMorphs[i];\n        const vr = vrs[i];\n\n        if (!vr._caching && p._caching) vr._caching = structuredClone(p._caching);\n        if (!vr.keyframes && s.keyframes) vr.keyframes = s.keyframes;\n        if (!vr.keyframesMetadata && s.keyframesMetadata)\n          vr.keyframesMetadata = s.keyframesMetadata;\n\n        const otherFrame = Math.min(\n          Math.max(Math.round(morph.time * self.lottie.frameRate), 0),\n          self.lottie.getDuration(true) - 1e-5\n        );\n\n        try {\n          vr.offsetTime = p.offsetTime;\n          let otherVal;\n          if (p.interpolateValue) {\n            if (vr._caching.lastFrame >= otherFrame) {\n              vr._caching._lastKeyframeIndex = -1;\n              vr._caching.lastIndex = 0;\n            }\n            otherVal = p.interpolateValue.call(vr, otherFrame, vr._caching);\n            vr.pv = otherVal;\n          } else if (p.interpolateShape) {\n            vr._caching.lastIndex = vr._caching.lastFrame < otherFrame ? vr._caching.lastIndex : 0;\n            p.interpolateShape.call(vr, otherFrame, vr.pv, vr._caching);\n            otherVal = vr.pv;\n          } else {\n            otherVal = 0;\n          }\n\n          // update caching\n          vr._caching.lastFrame = otherFrame;\n\n          val = universalLerp(val, otherVal, morph.strength);\n        } catch (e) {\n          console.warn(`[@lottielab/lottie-player:morph]`, e);\n        }\n      }\n\n      return val;\n    });\n  }\n\n  private attach(el: any, s = new WeakSet<object>()) {\n    if (s.has(el)) {\n      return;\n    }\n\n    if (typeof el === 'object' && el != null) {\n      s.add(el);\n    } else {\n      return;\n    }\n\n    if (el.interpolateShape || el.interpolateValue || el.addEffect || el.effectsSequence) {\n      this.attachToProp(el);\n      return;\n    }\n\n    for (const v of Object.values(el)) {\n      this.attach(v, s);\n    }\n  }\n\n  detach() {\n    // TODO\n  }\n}\n","import * as def from './definition';\nimport * as bezier from './bezier';\nimport type { LottieDriver, LottieState } from '../driver';\nimport { PlaybackDriver, PlaybackEvent } from '../playback';\nimport { parse, evaluate } from '../expressions';\nimport {\n  BuiltinVariables,\n  UserVariables,\n  Variables,\n  defaultValues,\n  mergeVariables,\n} from './variables';\nimport { MorphOperation, MAX_MORPHS } from '../morphing';\nimport type { InteractiveEventHandler } from './events';\nimport { EventEmitter } from '../event';\n\nexport type StateTransitionEvent = {\n  from: def.State;\n  to: def.State;\n  transition: def.TransitionProperties;\n};\n\nfunction easingToBezier(easing: def.BezierEasing): bezier.CubicBezier {\n  return {\n    start: { x: 0, y: 0 },\n    end: { x: 1, y: 1 },\n    controlPoint1: easing.o,\n    controlPoint2: easing.i,\n  };\n}\n\nexport function ease(easing: def.BezierEasing, t: number): number {\n  return bezier.evaluate(easingToBezier(easing), t).y;\n}\n\nexport type MorphingSetup = {\n  other: StateState;\n  strength: number | ((variables: Variables) => number);\n  timeRemap?: 'proportional' | 'wrap' | 'clamp';\n};\n\ntype StateState = {\n  type: 'state';\n  def: def.State;\n  playback: StatePlayback;\n  morphing?: MorphingSetup;\n  remainingDuration?: number;\n};\n\ntype TransitionState = {\n  type: 'transition';\n  def: def.TransitionProperties;\n  prev: StateState | TransitionState;\n  from: def.State;\n  next?: StateState;\n  progress: number;\n};\n\nfunction formulaToFunction(\n  formula: string,\n  defaultValue: number\n): (variables: Variables) => number {\n  try {\n    const parsedFormula = parse(formula);\n    return (variables: Variables) => {\n      try {\n        return +evaluate(parsedFormula, variables);\n      } catch (e) {\n        return defaultValue;\n      }\n    };\n  } catch (e) {\n    return () => defaultValue;\n  }\n}\n\ntype StatePlayback = {\n  driver: PlaybackDriver;\n  playheadControl?: (variables: Variables) => number;\n  speedControl?: (variables: Variables) => number;\n};\n\nfunction playbackFor(state: def.State): StatePlayback {\n  const driver = new PlaybackDriver();\n  driver.segment = state.segment;\n  driver.loop = state.loop ?? true;\n  if (state.direction) driver.direction = state.direction === 'forward' ? 1 : -1;\n\n  const pb: StatePlayback = { driver };\n  if (typeof state.speed === 'number') {\n    driver.speed = state.speed;\n  } else if (typeof state.speed == 'string') {\n    pb.speedControl = formulaToFunction(state.speed, 1);\n  }\n\n  if (state.playhead) {\n    pb.playheadControl = formulaToFunction(state.playhead, 0);\n  }\n\n  return pb;\n}\n\nfunction advanceStatePlayback(\n  state: StateState,\n  ls: LottieState,\n  elapsed: number,\n  clock: number,\n  variables: Variables,\n  eventsOut?: PlaybackEvent[]\n) {\n  const pb = state.playback;\n  const newVars = {\n    ...variables,\n    time: clock,\n    'time.diff': elapsed,\n    playhead: pb.driver.timeInSegment,\n    'playhead.progress':\n      pb.driver.durationOfSegment > 0 ? pb.driver.timeInSegment / pb.driver.durationOfSegment : 0,\n    'playhead.abs': pb.driver.currentTime,\n  };\n  if (pb.speedControl) {\n    pb.driver.speed = pb.speedControl(variables);\n  }\n\n  const newLs = pb.driver.advance(ls, elapsed, eventsOut);\n  if (pb.playheadControl) {\n    newLs.time =\n      pb.playheadControl(newVars) * pb.driver.durationOfSegment + (pb.driver.segment?.[0] ?? 0);\n  }\n\n  const morph = calculateMorphForState(state, newLs, variables);\n  if (morph) {\n    newLs.morphs = [morph];\n  }\n\n  return newLs;\n}\n\nfunction proportionalTimeRemap(\n  time: number,\n  from: [number, number],\n  onto: [number, number],\n  speed = 1\n) {\n  const fromDuration = from[1] - from[0];\n  const ontoDuration = onto[1] - onto[0];\n  let progress = fromDuration > 0 ? (time - from[0]) / fromDuration : 0;\n  progress = Math.min(1, Math.max(0, progress)) * speed;\n  return onto[0] + progress * ontoDuration;\n}\n\nfunction wrapTimeRemap(time: number, from: [number, number], onto: [number, number]) {\n  const duration = onto[1] - onto[0];\n  const t = time - from[0];\n  const val = onto[0] + (duration > 0 ? t % (onto[1] - onto[0]) : 0);\n  return Math.min(onto[1], Math.max(onto[0], val));\n}\n\nfunction clampTimeRemap(time: number, from: [number, number], onto: [number, number]) {\n  const val = time - from[0] + onto[0];\n  return Math.min(onto[1], Math.max(onto[0], val));\n}\n\nfunction calculateMorphForState(\n  state: StateState,\n  ls: LottieState,\n  variables: Variables\n): MorphOperation | undefined {\n  if (!state.morphing) return undefined;\n  const timeRemap = state.def.morphing?.timeRemap ?? 'proportional';\n  let newTime;\n  const currTime = ls.morphs ? ls.morphs[ls.morphs.length - 1].time : ls.time;\n  switch (timeRemap) {\n    case 'proportional':\n      newTime = proportionalTimeRemap(\n        currTime,\n        state.def.segment,\n        state.morphing.other.def.segment\n      );\n      break;\n    case 'wrap':\n      newTime = wrapTimeRemap(currTime, state.def.segment, state.morphing.other.def.segment);\n      break;\n    case 'clamp':\n      newTime = clampTimeRemap(currTime, state.def.segment, state.morphing.other.def.segment);\n      break;\n    default:\n      console.warn(`[@lottielab/lottie-player:interactive] Unknown timeRemap: ${timeRemap}`);\n      return undefined;\n  }\n\n  return {\n    time: newTime,\n    strength:\n      typeof state.morphing.strength === 'number'\n        ? state.morphing.strength\n        : state.morphing.strength(variables),\n  };\n}\n\nfunction applyTransition(\n  ls: LottieState,\n  transition: TransitionState,\n  elapsed: number,\n  clock: number,\n  variables: Variables,\n  advanceTransition: boolean = true,\n  remainingMorphs: number = MAX_MORPHS\n): LottieState {\n  let newLs = transition.next\n    ? advanceStatePlayback(transition.next, ls, elapsed, clock, variables)\n    : ls;\n  if (transition && transition.def.duration) {\n    let prevLs;\n    if (transition.prev.type === 'state') {\n      prevLs = advanceStatePlayback(transition.prev, ls, elapsed, clock, variables);\n    } else {\n      prevLs = applyTransition(\n        ls,\n        transition.prev,\n        elapsed,\n        clock,\n        variables,\n        false,\n        remainingMorphs - 1\n      );\n    }\n\n    if (advanceTransition) {\n      transition.progress += elapsed / transition.def.duration;\n    }\n    transition.progress = Math.min(1, transition.progress);\n\n    let alpha = transition.progress;\n    if (transition.def.easing) {\n      alpha = ease(transition.def.easing, alpha);\n    }\n\n    if (alpha === 1) {\n      newLs = { ...prevLs, morphs: ls.morphs, time: newLs.time };\n    } else {\n      if (remainingMorphs > 0) {\n        const newTime = newLs.time;\n        newLs = { ...prevLs };\n        newLs.morphs = (newLs.morphs ?? []).concat([{ time: newTime, strength: alpha }]);\n        if (ls.morphs && ls.morphs.length > 0) {\n          // This used to express (1-a)*prev+a*new, but now we need new=(1-b)*n1+b*n2\n          // This is not expressible in the general case as a composition of\n          // morphs\n          //\n          // In this case, we hack around it by just assuming that the initial\n          // time is the most \"important\"\n          //\n          // This can be solved in a much more elegant/general way by simply\n          // changing the representation that the morphing driver accepts to be a\n          // list of frames and coefficients rather than a composition of linear\n          // combinations\n          newLs.morphs = [\n            ...ls.morphs,\n            { time: newLs.time, strength: 1.0 - newLs.morphs[0].strength },\n          ];\n          newLs.time = ls.time;\n        }\n      } else {\n        // Don't create any new morphs, just flatten\n        newLs = { ...prevLs, time: alpha > 0.5 ? newLs.time : prevLs.time };\n      }\n    }\n  } else if (!transition.def.duration) {\n    console.warn(\n      '[@lottielab/lottie-player:interactive] Transition duration of 0/unset is not expected here'\n    );\n  }\n\n  return newLs;\n}\n\nexport class InteractiveDriver implements LottieDriver, InteractiveEventHandler {\n  private _definition: def.LottielabInteractivityDef;\n  private builtinVariables: BuiltinVariables = { ...defaultValues };\n  private userVariables: UserVariables = {};\n  private variables: Variables = {};\n  private clock: number = 0;\n\n  private state!: StateState;\n  private transition?: TransitionState;\n\n  public readonly transitionStartEvent = new EventEmitter<StateTransitionEvent>();\n  public readonly transitionEndEvent = new EventEmitter<StateTransitionEvent>();\n\n  constructor(definition: def.LottielabInteractivityDef) {\n    this._definition = definition;\n    const initialState = definition.states[definition.initialState];\n    if (!initialState) {\n      throw new Error(`Initial state ${definition.initialState} does not exist`);\n    }\n\n    this.enterState(initialState);\n  }\n\n  private setupMorphingForCurrentState(opts?: { force: boolean }) {\n    if (opts?.force) this.state.morphing = undefined;\n\n    const sd = this.state.def;\n    if (sd.morphing && !this.state.morphing) {\n      const otherState = this._definition.states[sd.morphing.otherState];\n      if (otherState) {\n        this.state.morphing = {\n          other: {\n            type: 'state',\n            def: otherState,\n            playback: playbackFor(otherState),\n          },\n          strength:\n            typeof sd.morphing.strength === 'number'\n              ? sd.morphing.strength\n              : formulaToFunction(sd.morphing.strength, 0),\n        };\n      } else {\n        console.warn(\n          `[@lottielab/lottie-player:interactivity] State '${sd.morphing.otherState}' to morph with does not exist`\n        );\n      }\n    } else if (!sd.morphing && this.state.morphing) {\n      this.state.morphing = undefined;\n    }\n  }\n\n  private enterState(state: def.State) {\n    const newPb = playbackFor(state);\n    this.state = {\n      type: 'state',\n      def: state,\n      playback: newPb,\n      remainingDuration: state.duration,\n    };\n\n    this.setupMorphingForCurrentState({ force: true });\n  }\n\n  getCurrentState() {\n    return this.state;\n  }\n\n  goToState(newState: def.State, transition?: def.TransitionProperties) {\n    const prevState = this.state;\n    const prevSegment = prevState.def.segment;\n\n    if (this.transition) {\n      this.transitionEndEvent.emit({\n        from: this.transition.from,\n        to: this.state.def,\n        transition: this.transition.def,\n      });\n    }\n\n    const currTime = this.state.playback.driver.time;\n    this.enterState(newState);\n    transition = transition ?? { startAt: 'start' };\n    this.transitionStartEvent.emit({\n      from: prevState.def,\n      to: newState,\n      transition,\n    });\n\n    const newSegment = newState.segment;\n    switch (transition?.startAt) {\n      case 'start':\n      case undefined:\n        this.state.playback.driver.time = newSegment[0];\n        break;\n      case 'end':\n        this.state.playback.driver.time = newSegment[1];\n        break;\n      case 'proportional':\n        this.state.playback.driver.time = proportionalTimeRemap(currTime, prevSegment, newSegment);\n        break;\n      case 'wrap':\n        this.state.playback.driver.time = wrapTimeRemap(currTime, prevSegment, newSegment);\n        break;\n      case 'clamp':\n        this.state.playback.driver.time = clampTimeRemap(currTime, prevSegment, newSegment);\n        break;\n      default:\n        console.warn(\n          `[@lottielab/lottie-player:interactive] Unknown startAt value in ttransition: ${transition.startAt}`\n        );\n    }\n\n    if (transition.duration) {\n      const prevStateOrTransition: StateState | TransitionState = this.transition\n        ? { ...this.transition, next: prevState }\n        : prevState;\n\n      this.transition = {\n        type: 'transition',\n        prev: prevStateOrTransition,\n        progress: 0,\n        def: transition,\n        from: prevState.def,\n      };\n    } else {\n      // Instant\n      this.transition = undefined;\n      this.transitionEndEvent.emit({\n        from: prevState.def,\n        to: newState,\n        transition,\n      });\n    }\n  }\n\n  get definition() {\n    return this._definition;\n  }\n\n  set definition(def: def.LottielabInteractivityDef) {\n    const thisStateName = Object.entries(this._definition.states).find(\n      ([_, v]) => v === this.state.def\n    )?.[0];\n    this._definition = def;\n\n    if (!thisStateName || !this._definition.states[thisStateName]) {\n      const initialState = def.states[def.initialState];\n      if (!initialState) {\n        this.enterState({\n          segment: [0, 0],\n          loop: false,\n          speed: 1,\n          direction: 'forward',\n        });\n\n        throw new Error(`Initial state ${def.initialState} does not exist`);\n      }\n\n      const oldTime = this.state.playback.driver.time;\n      this.enterState(def.states[def.initialState]);\n      this.state.playback.driver.time = oldTime;\n      this.transition = undefined;\n    } else {\n      this.enterState(def.states[thisStateName]);\n    }\n  }\n\n  updateVariables(update: Partial<BuiltinVariables>) {\n    this.builtinVariables = { ...this.builtinVariables, ...update };\n    this.variables = mergeVariables(this.builtinVariables, this.userVariables);\n  }\n\n  setUserVariables(vars: UserVariables) {\n    this.userVariables = vars;\n    this.variables = mergeVariables(this.builtinVariables, this.userVariables);\n  }\n\n  handle(event: def.InteractiveEvent) {\n    const transition = this.state.def.on?.[def.eventToString(event)];\n    if (!transition) {\n      return;\n    }\n\n    const newState = this._definition.states[transition.goTo];\n    if (!newState) {\n      console.warn(\n        `[@lottielab/lottie-player:interactive] State ${transition.goTo} does not exist`\n      );\n      return;\n    }\n\n    this.goToState(newState, transition);\n  }\n\n  private getEffectiveState(t: StateState | TransitionState): StateState | TransitionState {\n    if (t.type === 'state') {\n      return t;\n    }\n\n    if (t.progress < 1) {\n      return t;\n    }\n\n    if (t.next) {\n      return t.next;\n    } else {\n      return this.state;\n    }\n  }\n\n  private applyTransition(ls: LottieState, elapsed: number, clock: number): LottieState {\n    let newLs = ls;\n    if (this.transition) {\n      newLs = applyTransition(ls, this.transition, elapsed, clock, this.variables);\n\n      if (this.transition.progress >= 1) {\n        this.transitionEndEvent.emit({\n          from: this.transition.from,\n          to: this.state.def,\n          transition: this.transition.def,\n        });\n\n        this.transition = undefined;\n      } else {\n        this.transition.prev = this.getEffectiveState(this.transition.prev);\n      }\n    }\n\n    return newLs;\n  }\n\n  advance(ls: LottieState, elapsed: number): LottieState {\n    let newLs = { ...ls };\n    const clock = (this.clock += elapsed);\n\n    this.setupMorphingForCurrentState();\n\n    const pbEvents: PlaybackEvent[] = [];\n    if (this.state.remainingDuration === undefined) {\n      // No predefined duration just advance the playback and handle the finish\n      // events below\n      newLs = advanceStatePlayback(\n        this.state,\n        { ...ls, morphs: undefined },\n        elapsed,\n        clock,\n        this.variables,\n        pbEvents\n      );\n    } else {\n      const d = this.state.remainingDuration;\n      if (d > 0) {\n        const dt = Math.min(d, elapsed);\n        this.state.remainingDuration -= dt;\n        newLs = advanceStatePlayback(\n          this.state,\n          { ...ls, morphs: undefined },\n          dt,\n          clock,\n          this.variables,\n          pbEvents\n        );\n\n        // Have we finished the full duration?\n        // (This will also take into account predefined loops, see enterState())\n        if (this.state.remainingDuration <= 0) {\n          this.state.remainingDuration = 0;\n          this.handle({ event: 'finish' });\n        }\n      }\n    }\n\n    for (const e of pbEvents) {\n      if (e.type === 'finish') {\n        this.handle({ event: 'finish' });\n      }\n    }\n\n    newLs = this.applyTransition(newLs, elapsed, clock);\n    return newLs;\n  }\n\n  get currentTime() {\n    if (this.state.playback.playheadControl) {\n      return this.state.playback.playheadControl(this.variables);\n    } else {\n      return this.state.playback.driver.currentTime;\n    }\n  }\n\n  get currentFrame() {\n    return this.currentTime / this.state.playback.driver.frameRate;\n  }\n}\n","/** Minimalistic, small-footprint library for evaluating bezier curves. */\n\ntype Point = { x: number; y: number };\n\nexport type CubicBezier = {\n  start: Point;\n  end: Point;\n  controlPoint1: Point;\n  controlPoint2: Point;\n};\n\nfunction zipReduce(points: Point[], coeffs: number[]) {\n  return points.reduce(\n    (acc, point, index) => {\n      return {\n        x: acc.x + coeffs[index] * point.x,\n        y: acc.y + coeffs[index] * point.y,\n      };\n    },\n    { x: 0, y: 0 }\n  );\n}\n\nfunction points(curve: CubicBezier) {\n  return [curve.start, curve.controlPoint1, curve.controlPoint2, curve.end];\n}\n\nexport function evaluate(curve: CubicBezier, t: number) {\n  return zipReduce(points(curve), [\n    (1 - t) ** 3,\n    3 * (1 - t) ** 2 * t,\n    3 * (1 - t) * t ** 2,\n    t ** 3,\n  ]);\n}\n","import { InteractiveEvent, InteractiveEventType } from './definition';\nimport { BuiltinVariables } from './variables';\n\nconst ENCLOSING_RECT_CLASS = 'll-enclosing-rect';\n\nfunction clamp(x: number, min: number, max: number) {\n  return Math.min(Math.max(x, min), max);\n}\n\nexport interface InteractiveEventHandler {\n  updateVariables(variables: Partial<BuiltinVariables>): void;\n  handle(event: InteractiveEvent): void;\n}\n\n/**\n * Catches and dispatches interactive mouse events to handlers. Keeps track of\n * mouse-related variables, as defined in `FormulaVariables`.\n */\nexport class InteractiveEventDispatcher {\n  public handler?: InteractiveEventHandler;\n  private disposers: (() => void)[] = [];\n  private currentClickableClassNames: (string | 'full')[] = [];\n\n  private attachContinuousListeners(enclosingSvgRect: SVGRectElement) {\n    const globalMouseMove = (e: MouseEvent) => {\n      const rect = enclosingSvgRect.getBoundingClientRect();\n\n      this.handler?.updateVariables({\n        'mouse.x': e.clientX - rect.left,\n        'mouse.y': e.clientY - rect.top,\n        'mouse.abs.x': e.clientX,\n        'mouse.abs.y': e.clientY,\n        'mouse.progress.x': clamp((e.clientX - rect.left) / rect.width, 0, 1),\n        'mouse.progress.y': clamp((e.clientY - rect.top) / rect.height, 0, 1),\n      });\n    };\n\n    window.addEventListener('mousemove', globalMouseMove);\n    this.disposers.push(() => window.removeEventListener('mousemove', globalMouseMove));\n\n    const globalMouseDown = (e: MouseEvent) => {\n      this.handler?.updateVariables({\n        'mouse.buttons.left': (e.buttons & 1) != 0,\n        'mouse.buttons.right': (e.buttons & 2) != 0,\n        'mouse.buttons.middle': (e.buttons & 4) != 0,\n      });\n    };\n\n    window.addEventListener('mousedown', globalMouseDown);\n    this.disposers.push(() => window.removeEventListener('mousedown', globalMouseDown));\n\n    const globalMouseUp = () => {\n      this.handler?.updateVariables({\n        'mouse.buttons.left': false,\n        'mouse.buttons.right': false,\n        'mouse.buttons.middle': false,\n      });\n    };\n\n    window.addEventListener('mouseup', globalMouseUp);\n    this.disposers.push(() => window.removeEventListener('mouseup', globalMouseUp));\n  }\n\n  private attachListener(\n    element: SVGElement,\n    className: string | undefined,\n    event: InteractiveEventType\n  ) {\n    let eventName: 'click' | 'mouseenter' | 'mouseleave' | 'mousedown' | 'mouseup';\n    switch (event) {\n      case 'click':\n        eventName = 'click';\n        break;\n      case 'mouseEnter':\n        eventName = 'mouseenter';\n        break;\n      case 'mouseLeave':\n        eventName = 'mouseleave';\n        break;\n      case 'mouseDown':\n        eventName = 'mousedown';\n        break;\n      case 'mouseUp':\n        eventName = 'mouseup';\n        break;\n      default:\n        throw new Error('InteractiveEventDispatcher: not a DOM event: ' + event);\n    }\n\n    const listener = (e: MouseEvent) => {\n      if (className === ENCLOSING_RECT_CLASS) {\n        this.handler?.handle({ event });\n      } else {\n        this.handler?.handle({ event, target: className ?? undefined });\n      }\n    };\n\n    element.addEventListener(eventName, listener);\n\n    this.disposers.push(() => {\n      element.removeEventListener(eventName, listener);\n    });\n  }\n\n  constructor(\n    private container: HTMLElement,\n    observedClassNames: string[] = []\n  ) {\n    const svgElement = container.querySelector('svg');\n    const viewBox = svgElement\n      ?.getAttribute('viewBox')\n      ?.split(' ')\n      .map((x) => parseFloat(x)) ?? [1200, 900];\n\n    // Create an enclosing rect element\n    const rootG = svgElement?.querySelector('svg > g') as SVGElement;\n    const fullLottieRect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n    [\n      ['x', '0'],\n      ['y', '0'],\n      ['width', viewBox[2].toString()],\n      ['height', viewBox[3].toString()],\n      ['fill', 'transparent'],\n      ['pointer-events', 'bounding-box'],\n      ['class', ENCLOSING_RECT_CLASS],\n    ].forEach(([key, value]) => {\n      fullLottieRect.setAttribute(key, value);\n    });\n\n    rootG?.insertBefore(fullLottieRect, rootG.firstChild);\n    this.disposers.push(() => fullLottieRect.remove());\n\n    const seenClasses = new Set<string>();\n    for (const className of [ENCLOSING_RECT_CLASS].concat(observedClassNames)) {\n      if (seenClasses.has(className)) {\n        console.warn(\n          `[@lottielab/lottie-player:interactive] Duplicate class name ${className} in reactivity event dispatcher`\n        );\n      }\n\n      seenClasses.add(className);\n\n      const element =\n        className === ENCLOSING_RECT_CLASS\n          ? rootG\n          : (this.container.querySelector(`.${className}`) as SVGElement);\n      if (!element) {\n        console.warn(\n          `[@lottielab/lottie-player:interactive] Could not find element with class name ${className}`\n        );\n        continue;\n      }\n\n      for (const event of ['click', 'mouseDown', 'mouseUp', 'mouseEnter', 'mouseLeave'] as const) {\n        this.attachListener(element, className, event);\n      }\n    }\n\n    this.attachContinuousListeners(fullLottieRect);\n  }\n\n  setClickableClassNames(classNames: (string | 'full')[]) {\n    const setCursor = (className: string | 'full', cursor: string) => {\n      const element =\n        className === 'full'\n          ? this.container\n          : (this.container.querySelector(`.${className}`) as SVGElement | undefined);\n      if (element) element.style.cursor = cursor;\n    };\n\n    this.currentClickableClassNames.forEach((className) => setCursor(className, 'initial'));\n    this.currentClickableClassNames = classNames;\n    classNames.forEach((className) => setCursor(className, 'pointer'));\n  }\n\n  destroy() {\n    this.setClickableClassNames([]);\n    this.disposers.forEach((d) => d());\n  }\n}\n","import * as def from './definition';\nimport type { LottieJSON, TransitionEvent, NamedState, ILottielabInteractivity } from '../..';\nimport { InteractiveDriver, StateTransitionEvent as DriverTransitionEvent } from './driver';\nimport { InteractiveEventDispatcher } from './events';\nimport { EventEmitter, Listener } from '../event';\nimport { UserVariables, Point } from './variables';\n\n/** Lottielab-inspired easing presets. Useful for smooth state transitions. */\nexport namespace EasingPresets {\n  export const Linear: def.BezierEasing = { i: { x: 0.75, y: 0.75 }, o: { x: 0.25, y: 0.25 } };\n  export const Natural: def.BezierEasing = { o: { x: 0.4, y: 0 }, i: { x: 0.8, y: 1 } };\n  export const BounceIn: def.BezierEasing = { o: { x: 0.8, y: 0 }, i: { x: 0.5, y: 1.5 } };\n  export const BounceOut: def.BezierEasing = { o: { x: 0.5, y: -0.5 }, i: { x: 0.2, y: 1 } };\n  export const Accelerate: def.BezierEasing = { o: { x: 0.42, y: 0 }, i: { x: 1, y: 1 } };\n  export const SlowDown: def.BezierEasing = { o: { x: 0, y: 0 }, i: { x: 0.58, y: 1 } };\n}\n\nexport function isInteractive(lottie?: LottieJSON) {\n  return (\n    !!lottie?.metadata?.lottielabInteractivity &&\n    lottie?.metadata?.lottielabInteractivity.__version === 'v1'\n  );\n}\n\n/**\n * Custom variables that can be set and read by the Lottielab Interactivity\n * state machine. These variables, alongside builtin ones (@see BuiltinVariables)\n * can be used in formulas to, for example, directly drive the playhead or blend\n * between states.\n */\nexport class FormulaInputs {\n  private variables: UserVariables = {};\n\n  constructor(private onUpdate: (vars: UserVariables) => void) {}\n\n  set(name: string, value: number | boolean | Point) {\n    this.variables[name] = value;\n    this.onUpdate(this.variables);\n  }\n\n  get(name: string): number | boolean | Point | undefined {\n    return this.variables[name];\n  }\n\n  delete(name: string) {\n    delete this.variables[name];\n    this.onUpdate(this.variables);\n  }\n\n  clear() {\n    this.variables = {};\n    this.onUpdate(this.variables);\n  }\n}\n\n/**\n * Manages the Lottielab Interactivity state machine.\n *\n * By default, the interactivity state machine definition is extracted from the\n * Lottie JSON file (if the file is an Interactive Lottie). You can always\n * provide a custom definition by setting the `.definition` property.\n *\n * If an animation is not interactive, you can use `.toInteractive()` on a Lottie\n * player, and then manually create a definition or trigger states and state\n * transitions.\n *\n * With this class, you can inspect the state, trigger transitions to new states\n * programatically, provide inputs for the interactivity machinery and trigger\n * custom events that an Interactive Lottie can respond to.\n *\n * This class should not be constructed directly; rather, use the\n * `.interactivity` property of a player instance to gain access to it.\n */\nexport class LottielabInteractivity implements ILottielabInteractivity {\n  private _userProvidedDefinition:\n    | { set: true; value: def.LottielabInteractivityDef | undefined }\n    | { set: false };\n  private _rootElement: HTMLElement;\n  private _lottie: LottieJSON | undefined;\n  private _driver: InteractiveDriver;\n  private _dispatcher: InteractiveEventDispatcher;\n\n  private _transitionStartEvent = new EventEmitter<TransitionEvent>();\n  private _transitionEndEvent = new EventEmitter<TransitionEvent>();\n\n  public readonly inputs: FormulaInputs;\n\n  constructor(root: HTMLElement, lottie: LottieJSON | undefined) {\n    this._userProvidedDefinition = { set: false };\n    this._rootElement = root;\n    this._lottie = lottie;\n    const def = this.effectiveDefinition();\n    this._driver = new InteractiveDriver(def);\n    this._dispatcher = new InteractiveEventDispatcher(\n      this._rootElement,\n      this.getObservedClassNames(def)\n    );\n    this._dispatcher.setClickableClassNames(this.getClickableClassNames());\n    this._dispatcher.handler = this._driver;\n\n    const onTransitionStartEvent = (event: DriverTransitionEvent) => {\n      this._transitionStartEvent.emit(this.translateTransitionEvent(event));\n      this._dispatcher.setClickableClassNames(this.getClickableClassNames());\n    };\n    const onTransitionEndEvent = (event: DriverTransitionEvent) =>\n      this._transitionEndEvent.emit(this.translateTransitionEvent(event));\n\n    this._driver.transitionStartEvent.addListener(onTransitionStartEvent);\n    this._driver.transitionEndEvent.addListener(onTransitionEndEvent);\n\n    this.inputs = new FormulaInputs((vars) => this._driver.setUserVariables(vars));\n  }\n\n  /**\n   * Returns the current Lottielab Interactivity definition. The definition is a\n   * programmatic description of how a Lottie responds to events.\n   *\n   * By default, this definition is read from the Lottie itself in case it's an\n   * Interactive Lottie. If an ordinary Lottie is used, the definition will be\n   * empty, but a custom one can be provided by setting this property.\n   */\n  get definition(): def.LottielabInteractivityDef | undefined {\n    if (this._userProvidedDefinition.set) {\n      return this._userProvidedDefinition.value;\n    }\n    return this._lottie?.metadata?.lottielabInteractivity;\n  }\n\n  /**\n   * Overrides the Lottielab Interactivity definition used by this lottie. The\n   * definition is a programmatic description of how a Lottie responds to events.\n   *\n   * Setting this property will override any existing definition that has been\n   * set or read from the Lottie itself.\n   */\n  set definition(definition: def.LottielabInteractivityDef | undefined) {\n    this._userProvidedDefinition = { set: true, value: definition };\n    this.updateReactivity();\n  }\n\n  /**\n   * Returns the current state that the Lottie is in. A state encompasses the\n   * current time segment, playback behavior (speed, looping, etc.) and\n   * transitions to other states in response to events.\n   */\n  get state(): NamedState {\n    const stateDef = this._driver.getCurrentState().def;\n    const name = this.lookupStateName(stateDef);\n    return { ...stateDef, name: name ?? '<custom>' };\n  }\n\n  /**\n   * Switches the Lottie to another state. The state can either be given based on\n   * the name of a state defined in the interactivity definition, or a bespoke\n   * state configuration.\n   */\n  set state(state: string | def.State) {\n    this._driver.goToState(this.findState(state));\n  }\n\n  /**\n   * Switches the Lottie to another state. You can provide either the name of a\n   * state defined in the interactivity definition, or a bespoke state\n   * configuration.\n   *\n   * The `options` parameter can be used to specify details about the transition.\n   * Among other things, it allows a smooth blending transition to be applied\n   * instead of an instant switch, or the new state can be configured to start\n   * at a specific playhead position.\n   */\n  goToState(state: string | def.State, options?: def.TransitionProperties) {\n    this._driver.goToState(this.findState(state), options);\n  }\n\n  /** Whether a custom Lottielab Interactivity definiton was set by the user. */\n  hasUserProvidedDefinition() {\n    return this._userProvidedDefinition.set;\n  }\n\n  /**\n   * Clears any custom Lottielab Interactivity definition set by the user. After\n   * calling this method, the definition will be read from the Lottie itself. If\n   * the Lottie is not an Interactive Lottie, the definition will be empty.\n   */\n  resetDefinition() {\n    this._userProvidedDefinition = { set: false };\n    this.updateReactivity();\n  }\n\n  /**\n   * Subcribes to one of the two transition events.\n   *\n   * 'transitionstart' is fired when a transition from state A to state B\n   * starts.\n   * 'transitionend' is fired when a transition from state A to state B\n   * completes.\n   *\n   * Both events have a `TransitionEvent` object as their argument, which\n   * gives more information about the state transition. @see TransitionEvent\n   *\n   * If a transition has a duration of 0 (or not set), the 'transitionend'\n   * event will be fired immediately followed by the 'transitionstart' event.\n   */\n  on(event: 'transitionstart' | 'transitionend', listener: Listener<TransitionEvent>) {\n    switch (event) {\n      case 'transitionstart':\n        this._transitionStartEvent.addListener(listener);\n        break;\n      case 'transitionend':\n        this._transitionEndEvent.addListener(listener);\n        break;\n    }\n  }\n\n  /** Unsubscribes from an event. */\n  off(event: 'transitionstart' | 'transitionend', listener: Listener<TransitionEvent>) {\n    switch (event) {\n      case 'transitionstart':\n        this._transitionStartEvent.removeListener(listener);\n        break;\n      case 'transitionend':\n        this._transitionEndEvent.removeListener(listener);\n        break;\n    }\n  }\n\n  /**\n   * Triggers a custom, user-defined event that the state machine can respond to.\n   *\n   * The corresponding name of this event in the interactivity definition would\n   * be 'custom:<event-name>'. For example, if this function is called with the\n   * event name 'onboardingComplete', the transition\n   * `this.state.on['custom:onboardingComplete']` would run.\n   */\n  trigger(eventName: string) {\n    this._driver.handle({ event: 'custom', name: eventName });\n  }\n\n  _destroy() {\n    this._dispatcher?.destroy();\n  }\n\n  _getDriver() {\n    return this._driver;\n  }\n\n  private translateTransitionEvent(event: DriverTransitionEvent): TransitionEvent {\n    return {\n      from: { ...event.from, name: this.lookupStateName(event.from) ?? '<custom>' },\n      to: { ...event.to, name: this.lookupStateName(event.to) ?? '<custom>' },\n      transition: event.transition,\n    };\n  }\n\n  private effectiveDefinition(): def.LottielabInteractivityDef {\n    const duration = this._lottie ? this._lottie.op / this._lottie.fr : 0;\n    return (\n      this.definition ?? {\n        __version: 'v1',\n        initialState: 'default',\n        states: {\n          default: {\n            segment: [0, duration],\n          },\n        },\n      }\n    );\n  }\n\n  private lookupStateName(state: def.State): string | undefined {\n    return Object.entries(this.effectiveDefinition().states).find(([_name, s]) => s === state)?.[0];\n  }\n\n  private findState(state: string | def.State): def.State {\n    let newState;\n    if (typeof state === 'string') {\n      newState = this.effectiveDefinition().states[state];\n    } else {\n      newState = state;\n    }\n\n    if (!state) {\n      throw new Error(`State ${state} not found`);\n    }\n\n    return newState;\n  }\n\n  private getObservedClassNames(def: def.LottielabInteractivityDef | undefined): string[] {\n    if (!def) return [];\n\n    return [\n      ...new Set(\n        Object.values(def.states)\n          .flatMap((state) => Object.keys(state.on ?? {}))\n          .flatMap((eventName) => {\n            const [type, className] = eventName.split(':');\n            if (type === 'custom' || !className) return [];\n            return [className];\n          })\n      ),\n    ];\n  }\n\n  private getClickableClassNames(): (string | 'full')[] {\n    return [\n      ...new Set(\n        Object.keys(this.state.on ?? {}).flatMap((eventName) => {\n          const [type, className] = eventName.split(':');\n          if (!['click', 'mouseDown', 'mouseUp'].includes(type)) {\n            return [];\n          }\n\n          if (!className) {\n            return ['full'];\n          }\n\n          return [className];\n        })\n      ),\n    ];\n  }\n\n  private updateReactivity() {\n    const def = this.effectiveDefinition();\n    this._driver.definition = def;\n\n    // Recreate the dispatcher because the list of observed class names\n    // might've changed\n    this._dispatcher?.destroy();\n    this._dispatcher = new InteractiveEventDispatcher(\n      this._rootElement,\n      this.getObservedClassNames(def)\n    );\n    this._dispatcher.handler = this._driver;\n  }\n}\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n  var svgNS = 'http://www.w3.org/2000/svg';\n  var locationHref = '';\n  var _useWebWorker = false;\n  var initialDefaultFrame = -999999;\n  var setWebWorker = function setWebWorker(flag) {\n    _useWebWorker = !!flag;\n  };\n  var getWebWorker = function getWebWorker() {\n    return _useWebWorker;\n  };\n  var setLocationHref = function setLocationHref(value) {\n    locationHref = value;\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    for (i = 0; i < len; i += 1) {\n      sourcePrototype = sources[i].prototype;\n      for (var attr in sourcePrototype) {\n        if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n      }\n    }\n  }\n  function getDescriptor(object, prop) {\n    return Object.getOwnPropertyDescriptor(object, prop);\n  }\n  function createProxyFunction(prototype) {\n    function ProxyFunction() {}\n    ProxyFunction.prototype = prototype;\n    return ProxyFunction;\n  }\n\n  // import Howl from '../../3rd_party/howler';\n\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    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        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        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        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        if (window.Howl) {\n          return new window.Howl({\n            src: [assetPath]\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        this._updateVolume();\n      },\n      mute: function mute() {\n        this._isMuted = true;\n        this._updateVolume();\n      },\n      unmute: function unmute() {\n        this._isMuted = false;\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        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      switch (type) {\n        case 'int16':\n        case 'uint8c':\n          value = 1;\n          break;\n        default:\n          value = 1.1;\n          break;\n      }\n      for (i = 0; i < len; i += 1) {\n        arr.push(value);\n      }\n      return arr;\n    }\n    function createTypedArrayFactory(type, len) {\n      if (type === 'float32') {\n        return new Float32Array(len);\n      }\n      if (type === 'int16') {\n        return new Int16Array(len);\n      }\n      if (type === 'uint8c') {\n        return new Uint8ClampedArray(len);\n      }\n      return createRegularArray(type, len);\n    }\n    if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n      return createTypedArrayFactory;\n    }\n    return createRegularArray;\n  }();\n  function createSizedArray(len) {\n    return Array.apply(null, {\n      length: len\n    });\n  }\n\n  function _typeof$3(obj) { \"@babel/helpers - typeof\"; return _typeof$3 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof$3(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  (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    for (i = 0; i < len; i += 1) {\n      BMMath[propertyNames[i]] = Math[propertyNames[i]];\n    }\n  })();\n  function ProjectInterface$1() {\n    return {};\n  }\n  BMMath.random = Math.random;\n  BMMath.abs = function (val) {\n    var tOfVal = _typeof$3(val);\n    if (tOfVal === 'object' && val.length) {\n      var absArr = createSizedArray(val.length);\n      var i;\n      var len = val.length;\n      for (i = 0; i < len; i += 1) {\n        absArr[i] = Math.abs(val[i]);\n      }\n      return absArr;\n    }\n    return Math.abs(val);\n  };\n  var defaultCurveSegments = 150;\n  var degToRads = Math.PI / 180;\n  var roundCorner = 0.5519;\n  function roundValues(flag) {\n    _shouldRoundValues = !!flag;\n  }\n  function bmRnd(value) {\n    if (_shouldRoundValues) {\n      return Math.round(value);\n    }\n    return value;\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  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  function BMCompleteEvent(type, frameMultiplier) {\n    this.type = type;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\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  function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n    this.type = type;\n    this.firstFrame = firstFrame;\n    this.totalFrames = totalFrames;\n  }\n  function BMDestroyEvent(type, target) {\n    this.type = type;\n    this.target = target;\n  }\n  function BMRenderFrameErrorEvent(nativeError, currentTime) {\n    this.type = 'renderFrameError';\n    this.nativeError = nativeError;\n    this.currentTime = currentTime;\n  }\n  function BMConfigErrorEvent(nativeError) {\n    this.type = 'configError';\n    this.nativeError = nativeError;\n  }\n  function BMAnimationConfigErrorEvent(type, nativeError) {\n    this.type = type;\n    this.nativeError = nativeError;\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  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    switch (i % 6) {\n      case 0:\n        r = v;\n        g = t;\n        b = p;\n        break;\n      case 1:\n        r = q;\n        g = v;\n        b = p;\n        break;\n      case 2:\n        r = p;\n        g = v;\n        b = t;\n        break;\n      case 3:\n        r = p;\n        g = q;\n        b = v;\n        break;\n      case 4:\n        r = t;\n        g = p;\n        b = v;\n        break;\n      case 5:\n        r = v;\n        g = p;\n        b = q;\n        break;\n      default:\n        break;\n    }\n    return [r, g, b];\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    switch (max) {\n      case min:\n        h = 0;\n        break;\n      case r:\n        h = g - b + d * (g < b ? 6 : 0);\n        h /= 6 * d;\n        break;\n      case g:\n        h = b - r + d * 2;\n        h /= 6 * d;\n        break;\n      case b:\n        h = r - g + d * 4;\n        h /= 6 * d;\n        break;\n      default:\n        break;\n    }\n    return [h, s, v];\n  }\n  function addSaturationToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[1] += offset;\n    if (hsv[1] > 1) {\n      hsv[1] = 1;\n    } else if (hsv[1] <= 0) {\n      hsv[1] = 0;\n    }\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n  function addBrightnessToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[2] += offset;\n    if (hsv[2] > 1) {\n      hsv[2] = 1;\n    } else if (hsv[2] < 0) {\n      hsv[2] = 0;\n    }\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\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    if (hsv[0] > 1) {\n      hsv[0] -= 1;\n    } else if (hsv[0] < 0) {\n      hsv[0] += 1;\n    }\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n  var rgbToHex = function () {\n    var colorMap = [];\n    var i;\n    var hex;\n    for (i = 0; i < 256; i += 1) {\n      hex = i.toString(16);\n      colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n    }\n    return function (r, g, b) {\n      if (r < 0) {\n        r = 0;\n      }\n      if (g < 0) {\n        g = 0;\n      }\n      if (b < 0) {\n        b = 0;\n      }\n      return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n    };\n  }();\n  var setSubframeEnabled = function setSubframeEnabled(flag) {\n    subframeEnabled = !!flag;\n  };\n  var getSubframeEnabled = function getSubframeEnabled() {\n    return subframeEnabled;\n  };\n  var setExpressionsPlugin = function setExpressionsPlugin(value) {\n    expressionsPlugin = value;\n  };\n  var getExpressionsPlugin = function getExpressionsPlugin() {\n    return expressionsPlugin;\n  };\n  var setExpressionInterfaces = function setExpressionInterfaces(value) {\n    expressionsInterfaces = value;\n  };\n  var getExpressionInterfaces = function getExpressionInterfaces() {\n    return expressionsInterfaces;\n  };\n  var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n    defaultCurveSegments = value;\n  };\n  var getDefaultCurveSegments = function getDefaultCurveSegments() {\n    return defaultCurveSegments;\n  };\n  var setIdPrefix = function setIdPrefix(value) {\n    idPrefix$1 = value;\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$2(obj) { \"@babel/helpers - typeof\"; return _typeof$2 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof$2(obj); }\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    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        });\n        // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n        var url = URL.createObjectURL(blob);\n        return new Worker(url);\n      }\n      workerFn = fn;\n      return workerProxy;\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              for (i = 0; i < len; i += 1) {\n                layerData = layers[i];\n                if ('ks' in layerData && !layerData.completed) {\n                  layerData.completed = true;\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\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                        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                          if (maskProps[j].pt.k[k].e) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\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            function completeChars(chars, assets) {\n              if (chars) {\n                var i = 0;\n                var len = chars.length;\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);\n                    // 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                    completeLayers(chars[i].data.layers, assets);\n                  }\n                }\n              }\n            }\n            function findComp(id, comps) {\n              var i = 0;\n              var len = comps.length;\n              while (i < len) {\n                if (comps[i].id === id) {\n                  return comps[i];\n                }\n                i += 1;\n              }\n              return null;\n            }\n            function findCompLayers(id, comps) {\n              var comp = findComp(id, comps);\n              if (comp) {\n                if (!comp.layers.__used) {\n                  comp.layers.__used = true;\n                  return comp.layers;\n                }\n                return JSON.parse(JSON.stringify(comp.layers));\n              }\n              return null;\n            }\n            function completeShapes(arr) {\n              var i;\n              var len = arr.length;\n              var j;\n              var jLen;\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                    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                      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            function convertPathsToAbsoluteValues(path) {\n              var i;\n              var len = path.i.length;\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            function checkVersion(minimum, animVersionString) {\n              var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n              if (minimum[0] > animVersion[0]) {\n                return true;\n              }\n              if (animVersion[0] > minimum[0]) {\n                return false;\n              }\n              if (minimum[1] > animVersion[1]) {\n                return true;\n              }\n              if (animVersion[1] > minimum[1]) {\n                return false;\n              }\n              if (minimum[2] > animVersion[2]) {\n                return true;\n              }\n              if (animVersion[2] > minimum[2]) {\n                return false;\n              }\n              return null;\n            }\n            var checkText = function () {\n              var minimumVersion = [4, 4, 14];\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              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\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            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                  for (i = 0; i < len; i += 1) {\n                    var charData = animationData.chars[i];\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                      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            var checkPathProperties = function () {\n              var minimumVersion = [5, 7, 15];\n              function updateTextLayer(textLayer) {\n                var pathData = textLayer.t.p;\n                if (typeof pathData.a === 'number') {\n                  pathData.a = {\n                    a: 0,\n                    k: pathData.a\n                  };\n                }\n                if (typeof pathData.p === 'number') {\n                  pathData.p = {\n                    a: 0,\n                    k: pathData.p\n                  };\n                }\n                if (typeof pathData.r === 'number') {\n                  pathData.r = {\n                    a: 0,\n                    k: pathData.r\n                  };\n                }\n              }\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\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            var checkColors = function () {\n              var minimumVersion = [4, 1, 9];\n              function iterateShapes(shapes) {\n                var i;\n                var len = shapes.length;\n                var j;\n                var jLen;\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                      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                        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              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 4) {\n                    iterateShapes(layers[i].shapes);\n                  }\n                }\n              }\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\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            var checkShapes = function () {\n              var minimumVersion = [4, 4, 18];\n              function completeClosingShapes(arr) {\n                var i;\n                var len = arr.length;\n                var j;\n                var jLen;\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                      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                        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              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                for (i = 0; i < len; i += 1) {\n                  layerData = layers[i];\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\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                        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                          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                  if (layerData.ty === 4) {\n                    completeClosingShapes(layerData.shapes);\n                  }\n                }\n              }\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\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            function completeData(animationData) {\n              if (animationData.__complete) {\n                return;\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            function completeText(data) {\n              if (data.t.a.length === 0 && !('m' in data.t.p)) {\n                // data.singleShape = true;\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          if (!_workerSelf.dataManager) {\n            _workerSelf.dataManager = dataFunctionManager();\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                if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n                  return xhr.response;\n                }\n                if (xhr.response && _typeof$2(xhr.response) === 'object') {\n                  return xhr.response;\n                }\n                if (xhr.response && typeof xhr.response === 'string') {\n                  return JSON.parse(xhr.response);\n                }\n                if (xhr.responseText) {\n                  return JSON.parse(xhr.responseText);\n                }\n                return null;\n              }\n              function loadAsset(path, fullPath, callback, errorCallback) {\n                var response;\n                var xhr = new XMLHttpRequest();\n                // set responseType after calling open or IE will break.\n                try {\n                  // This crashes on Android WebView prior to KitKat\n                  xhr.responseType = 'json';\n                } catch (err) {} // eslint-disable-line no-empty\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                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                xhr.send();\n              }\n              return {\n                load: loadAsset\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              _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            _workerSelf.dataManager.completeData(animation);\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        workerInstance.onmessage = function (event) {\n          var data = event.data;\n          var id = data.id;\n          var process = processes[id];\n          processes[id] = null;\n          if (data.status === 'success') {\n            process.onComplete(data.payload);\n          } else if (process.onError) {\n            process.onError();\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    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    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    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    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    function imageLoaded() {\n      this.loadedAssets += 1;\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n    function footageLoaded() {\n      this.loadedFootagesCount += 1;\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n    function getAssetsPath(assetData, assetsPath, originalPath) {\n      var path = '';\n      if (assetData.e) {\n        path = assetData.p;\n      } else if (assetsPath) {\n        var imagePath = assetData.p;\n        if (imagePath.indexOf('images/') !== -1) {\n          imagePath = imagePath.split('/')[1];\n        }\n        path = assetsPath + imagePath;\n      } else {\n        path = originalPath;\n        path += assetData.u ? assetData.u : '';\n        path += assetData.p;\n      }\n      return path;\n    }\n    function testImageLoaded(img) {\n      var _count = 0;\n      var intervalId = setInterval(function () {\n        var box = img.getBBox();\n        if (box.width || _count > 500) {\n          this._imageLoaded();\n          clearInterval(intervalId);\n        }\n        _count += 1;\n      }.bind(this), 50);\n    }\n    function createImageData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createNS('image');\n      if (isSafari) {\n        this.testImageLoaded(img);\n      } else {\n        img.addEventListener('load', this._imageLoaded, false);\n      }\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n        this._imageLoaded();\n      }.bind(this), false);\n      img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n      if (this._elementHelper.append) {\n        this._elementHelper.append(img);\n      } else {\n        this._elementHelper.appendChild(img);\n      }\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\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        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    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        this._footageLoaded();\n      }.bind(this), function () {\n        ob.img = {};\n        this._footageLoaded();\n      }.bind(this));\n      return ob;\n    }\n    function loadAssets(assets, cb) {\n      this.imagesLoadedCb = cb;\n      var i;\n      var len = assets.length;\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    function setPath(path) {\n      this.path = path || '';\n    }\n    function setAssetsPath(path) {\n      this.assetsPath = path || '';\n    }\n    function getAsset(assetData) {\n      var i = 0;\n      var len = this.images.length;\n      while (i < len) {\n        if (this.images[i].assetData === assetData) {\n          return this.images[i].img;\n        }\n        i += 1;\n      }\n      return null;\n    }\n    function destroy() {\n      this.imagesLoadedCb = null;\n      this.images.length = 0;\n    }\n    function loadedImages() {\n      return this.totalImages === this.loadedAssets;\n    }\n    function loadedFootages() {\n      return this.totalFootages === this.loadedFootagesCount;\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    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    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  BaseEvent.prototype = {\n    triggerEvent: function triggerEvent(eventName, args) {\n      if (this._cbs[eventName]) {\n        var callbacks = this._cbs[eventName];\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      this._cbs[eventName].push(callback);\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        while (i < len) {\n          if (this._cbs[eventName][i] === callback) {\n            this._cbs[eventName].splice(i, 1);\n            i -= 1;\n            len -= 1;\n          }\n          i += 1;\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      for (var i = 0; i < lines.length; i += 1) {\n        line = lines[i].split(':');\n        if (line.length === 2) {\n          keys[line[0]] = line[1].trim();\n          keysCount += 1;\n        }\n      }\n      if (keysCount === 0) {\n        throw new Error();\n      }\n      return keys;\n    }\n    return function (_markers) {\n      var markers = [];\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        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        markers.push(markerData);\n      }\n      return markers;\n    };\n  }();\n\n  var ProjectInterface = function () {\n    function registerComposition(comp) {\n      this.compositions.push(comp);\n    }\n    return function () {\n      function _thisProjectFunction(name) {\n        var i = 0;\n        var len = this.compositions.length;\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            return this.compositions[i].compInterface;\n          }\n          i += 1;\n        }\n        return null;\n      }\n      _thisProjectFunction.compositions = [];\n      _thisProjectFunction.currentFrame = 0;\n      _thisProjectFunction.registerComposition = registerComposition;\n      return _thisProjectFunction;\n    };\n  }();\n\n  var renderers = {};\n  var registerRenderer = function registerRenderer(key, value) {\n    renderers[key] = value;\n  };\n  function getRenderer(key) {\n    return renderers[key];\n  }\n  function getRegisteredRenderer() {\n    // Returns canvas by default for compatibility\n    if (renderers.canvas) {\n      return 'canvas';\n    }\n    // Returns any renderer that is registered\n    for (var key in renderers) {\n      if (renderers[key]) {\n        return key;\n      }\n    }\n    return '';\n  }\n\n  function _typeof$1(obj) { \"@babel/helpers - typeof\"; return _typeof$1 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof$1(obj); }\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  extendPrototype([BaseEvent], AnimationItem);\n  AnimationItem.prototype.setParams = function (params) {\n    if (params.wrapper || params.container) {\n      this.wrapper = params.wrapper || params.container;\n    }\n    var animType = 'svg';\n    if (params.animType) {\n      animType = params.animType;\n    } else if (params.renderer) {\n      animType = params.renderer;\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    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    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    if (params.audioFactory) {\n      this.audioController.setAudioFactory(params.audioFactory);\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      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  AnimationItem.prototype.onSetupError = function () {\n    this.trigger('data_failed');\n  };\n  AnimationItem.prototype.setupAnimation = function (data) {\n    dataManager.completeAnimation(data, this.configAnimation);\n  };\n  AnimationItem.prototype.setData = function (wrapper, animationData) {\n    if (animationData) {\n      if (_typeof$1(animationData) !== 'object') {\n        animationData = JSON.parse(animationData);\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    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    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    if (prerender === 'false') {\n      params.prerender = false;\n    }\n    if (!params.path) {\n      this.trigger('destroy');\n    } else {\n      this.setParams(params);\n    }\n  };\n  AnimationItem.prototype.includeLayers = function (data) {\n    if (data.op > this.animationData.op) {\n      this.animationData.op = data.op;\n      this.totalFrames = Math.floor(data.op - this.animationData.ip);\n    }\n    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    for (j = 0; j < jLen; j += 1) {\n      i = 0;\n      while (i < len) {\n        if (layers[i].id === newLayers[j].id) {\n          layers[i] = newLayers[j];\n          break;\n        }\n        i += 1;\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    if (data.assets) {\n      len = data.assets.length;\n      for (i = 0; i < len; i += 1) {\n        this.animationData.assets.push(data.assets[i]);\n      }\n    }\n    this.animationData.__complete = false;\n    dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n  };\n  AnimationItem.prototype.onSegmentComplete = function (data) {\n    this.animationData = data;\n    var expressionsPlugin = getExpressionsPlugin();\n    if (expressionsPlugin) {\n      expressionsPlugin.initExpressions(this);\n    }\n    this.loadNextSegment();\n  };\n  AnimationItem.prototype.loadNextSegment = function () {\n    var segments = this.animationData.segments;\n    if (!segments || segments.length === 0 || !this.autoloadSegments) {\n      this.trigger('data_ready');\n      this.timeCompleted = this.totalFrames;\n      return;\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  AnimationItem.prototype.loadSegments = function () {\n    var segments = this.animationData.segments;\n    if (!segments) {\n      this.timeCompleted = this.totalFrames;\n    }\n    this.loadNextSegment();\n  };\n  AnimationItem.prototype.imagesLoaded = function () {\n    this.trigger('loaded_images');\n    this.checkLoaded();\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  AnimationItem.prototype.configAnimation = function (animData) {\n    if (!this.renderer) {\n      return;\n    }\n    try {\n      this.animationData = animData;\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      this.renderer.configAnimation(animData);\n      if (!animData.assets) {\n        animData.assets = [];\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      if (this.isPaused) {\n        this.audioController.pause();\n      }\n    } catch (error) {\n      this.triggerConfigError(error);\n    }\n  };\n  AnimationItem.prototype.waitForFontsLoaded = function () {\n    if (!this.renderer) {\n      return;\n    }\n    if (this.renderer.globalData.fontManager.isLoaded) {\n      this.checkLoaded();\n    } else {\n      setTimeout(this.waitForFontsLoaded.bind(this), 20);\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      if (expressionsPlugin) {\n        expressionsPlugin.initExpressions(this);\n      }\n      this.renderer.initItems();\n      setTimeout(function () {\n        this.trigger('DOMLoaded');\n      }.bind(this), 0);\n      this.gotoFrame();\n      if (this.autoplay) {\n        this.play();\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    var _height = typeof height === 'number' ? height : undefined;\n    this.renderer.updateContainerSize(_width, _height);\n  };\n  AnimationItem.prototype.setSubframe = function (flag) {\n    this.isSubframeEnabled = !!flag;\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    this.trigger('enterFrame');\n    this.renderFrame();\n    this.trigger('drawnFrame');\n  };\n  AnimationItem.prototype.renderFrame = function () {\n    if (this.isLoaded === false || !this.renderer) {\n      return;\n    }\n    try {\n      if (this.expressionsPlugin) {\n        this.expressionsPlugin.resetFrame();\n      }\n      this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n    } catch (error) {\n      this.triggerRenderFrameError(error);\n    }\n  };\n  AnimationItem.prototype.play = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    if (this.isPaused === true) {\n      this.isPaused = false;\n      this.trigger('_play');\n      this.audioController.resume();\n      if (this._idle) {\n        this._idle = false;\n        this.trigger('_active');\n      }\n    }\n  };\n  AnimationItem.prototype.pause = function (name) {\n    if (name && this.name !== name) {\n      return;\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  AnimationItem.prototype.togglePause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    if (this.isPaused === true) {\n      this.play();\n    } else {\n      this.pause();\n    }\n  };\n  AnimationItem.prototype.stop = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    this.pause();\n    this.playCount = 0;\n    this._completedLoop = false;\n    this.setCurrentRawFrameValue(0);\n  };\n  AnimationItem.prototype.getMarkerData = function (markerName) {\n    var marker;\n    for (var i = 0; i < this.markers.length; i += 1) {\n      marker = this.markers[i];\n      if (marker.payload && marker.payload.name === markerName) {\n        return marker;\n      }\n    }\n    return null;\n  };\n  AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    var numValue = Number(value);\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\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    this.pause();\n  };\n  AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    var numValue = Number(value);\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\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    this.play();\n  };\n  AnimationItem.prototype.advanceTime = function (value) {\n    if (this.isPaused === true || this.isLoaded === false) {\n      return;\n    }\n    var nextValue = this.currentRawFrame + value * this.frameModifier;\n    var _isComplete = false;\n    // 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    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        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          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    if (_isComplete) {\n      this.setCurrentRawFrameValue(nextValue);\n      this.pause();\n      this.trigger('complete');\n    }\n  };\n  AnimationItem.prototype.adjustSegment = function (arr, offset) {\n    this.playCount = 0;\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      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      this.totalFrames = arr[1] - arr[0];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[0];\n      this.setCurrentRawFrameValue(0.001 + offset);\n    }\n    this.trigger('segmentStart');\n  };\n  AnimationItem.prototype.setSegment = function (init, end) {\n    var pendingFrame = -1;\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    this.firstFrame = init;\n    this.totalFrames = end - init;\n    this.timeCompleted = this.totalFrames;\n    if (pendingFrame !== -1) {\n      this.goToAndStop(pendingFrame, true);\n    }\n  };\n  AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n    if (forceFlag) {\n      this.segments.length = 0;\n    }\n    if (_typeof$1(arr[0]) === 'object') {\n      var i;\n      var len = arr.length;\n      for (i = 0; i < len; i += 1) {\n        this.segments.push(arr[i]);\n      }\n    } else {\n      this.segments.push(arr);\n    }\n    if (this.segments.length && forceFlag) {\n      this.adjustSegment(this.segments.shift(), 0);\n    }\n    if (this.isPaused) {\n      this.play();\n    }\n  };\n  AnimationItem.prototype.resetSegments = function (forceFlag) {\n    this.segments.length = 0;\n    this.segments.push([this.animationData.ip, this.animationData.op]);\n    if (forceFlag) {\n      this.checkSegments(0);\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    return false;\n  };\n  AnimationItem.prototype.destroy = function (name) {\n    if (name && this.name !== name || !this.renderer) {\n      return;\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  AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n    this.currentRawFrame = value;\n    this.gotoFrame();\n  };\n  AnimationItem.prototype.setSpeed = function (val) {\n    this.playSpeed = val;\n    this.updaFrameModifier();\n  };\n  AnimationItem.prototype.setDirection = function (val) {\n    this.playDirection = val < 0 ? -1 : 1;\n    this.updaFrameModifier();\n  };\n  AnimationItem.prototype.setLoop = function (isLooping) {\n    this.loop = isLooping;\n  };\n  AnimationItem.prototype.setVolume = function (val, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    this.audioController.setVolume(val);\n  };\n  AnimationItem.prototype.getVolume = function () {\n    return this.audioController.getVolume();\n  };\n  AnimationItem.prototype.mute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    this.audioController.mute();\n  };\n  AnimationItem.prototype.unmute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n    this.audioController.unmute();\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  AnimationItem.prototype.getPath = function () {\n    return this.path;\n  };\n  AnimationItem.prototype.getAssetsPath = function (assetData) {\n    var path = '';\n    if (assetData.e) {\n      path = assetData.p;\n    } else if (this.assetsPath) {\n      var imagePath = assetData.p;\n      if (imagePath.indexOf('images/') !== -1) {\n        imagePath = imagePath.split('/')[1];\n      }\n      path = this.assetsPath + imagePath;\n    } else {\n      path = this.path;\n      path += assetData.u ? assetData.u : '';\n      path += assetData.p;\n    }\n    return path;\n  };\n  AnimationItem.prototype.getAssetData = function (id) {\n    var i = 0;\n    var len = this.assets.length;\n    while (i < len) {\n      if (id === this.assets[i].id) {\n        return this.assets[i];\n      }\n      i += 1;\n    }\n    return null;\n  };\n  AnimationItem.prototype.hide = function () {\n    this.renderer.hide();\n  };\n  AnimationItem.prototype.show = function () {\n    this.renderer.show();\n  };\n  AnimationItem.prototype.getDuration = function (isFrame) {\n    return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\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) {\n      // TODO: decide how to handle catch case\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        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        case 'loopComplete':\n          this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n          break;\n        case 'complete':\n          this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n          break;\n        case 'segmentStart':\n          this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n          break;\n        case 'destroy':\n          this.triggerEvent(name, new BMDestroyEvent(name, this));\n          break;\n        default:\n          this.triggerEvent(name);\n      }\n    }\n    if (name === 'enterFrame' && this.onEnterFrame) {\n      this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n    }\n    if (name === 'loopComplete' && this.onLoopComplete) {\n      this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n    }\n    if (name === 'complete' && this.onComplete) {\n      this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n    }\n    if (name === 'segmentStart' && this.onSegmentStart) {\n      this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n    }\n    if (name === 'destroy' && this.onDestroy) {\n      this.onDestroy.call(this, new BMDestroyEvent(name, this));\n    }\n  };\n  AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n    var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n  AnimationItem.prototype.triggerConfigError = function (nativeError) {\n    var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\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    function removeElement(ev) {\n      var i = 0;\n      var animItem = ev.target;\n      while (i < len) {\n        if (registeredAnimations[i].animation === animItem) {\n          registeredAnimations.splice(i, 1);\n          i -= 1;\n          len -= 1;\n          if (!animItem.isPaused) {\n            subtractPlayingCount();\n          }\n        }\n        i += 1;\n      }\n    }\n    function registerAnimation(element, animationData) {\n      if (!element) {\n        return null;\n      }\n      var i = 0;\n      while (i < len) {\n        if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n          return registeredAnimations[i].animation;\n        }\n        i += 1;\n      }\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, element);\n      animItem.setData(element, animationData);\n      return animItem;\n    }\n    function getRegisteredAnimations() {\n      var i;\n      var lenAnims = registeredAnimations.length;\n      var animations = [];\n      for (i = 0; i < lenAnims; i += 1) {\n        animations.push(registeredAnimations[i].animation);\n      }\n      return animations;\n    }\n    function addPlayingCount() {\n      playingAnimationsNum += 1;\n      activate();\n    }\n    function subtractPlayingCount() {\n      playingAnimationsNum -= 1;\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    function loadAnimation(params) {\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, null);\n      animItem.setParams(params);\n      return animItem;\n    }\n    function setSpeed(val, animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setSpeed(val, animation);\n      }\n    }\n    function setDirection(val, animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setDirection(val, animation);\n      }\n    }\n    function play(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.play(animation);\n      }\n    }\n    function resume(nowTime) {\n      var elapsedTime = nowTime - initTime;\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.advanceTime(elapsedTime);\n      }\n      initTime = nowTime;\n      if (playingAnimationsNum && !_isFrozen) {\n        window.requestAnimationFrame(resume);\n      } else {\n        _stopped = true;\n      }\n    }\n    function first(nowTime) {\n      initTime = nowTime;\n      window.requestAnimationFrame(resume);\n    }\n    function pause(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.pause(animation);\n      }\n    }\n    function goToAndStop(value, isFrame, animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n      }\n    }\n    function stop(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.stop(animation);\n      }\n    }\n    function togglePause(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.togglePause(animation);\n      }\n    }\n    function destroy(animation) {\n      var i;\n      for (i = len - 1; i >= 0; i -= 1) {\n        registeredAnimations[i].animation.destroy(animation);\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      for (i = 0; i < lenAnims; i += 1) {\n        if (renderer) {\n          animElements[i].setAttribute('data-bm-type', renderer);\n        }\n        registerAnimation(animElements[i], animationData);\n      }\n      if (standalone && lenAnims === 0) {\n        if (!renderer) {\n          renderer = 'svg';\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    function resize() {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.resize();\n      }\n    }\n    function activate() {\n      if (!_isFrozen && playingAnimationsNum) {\n        if (_stopped) {\n          window.requestAnimationFrame(first);\n          _stopped = false;\n        }\n      }\n    }\n    function freeze() {\n      _isFrozen = true;\n    }\n    function unfreeze() {\n      _isFrozen = false;\n      activate();\n    }\n    function setVolume(val, animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setVolume(val, animation);\n      }\n    }\n    function mute(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.mute(animation);\n      }\n    }\n    function unmute(animation) {\n      var i;\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.unmute(animation);\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;\n    // moduleOb.start = start;\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    /**\n       * BezierEasing - use bezier curve for transition easing function\n       * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n       *\n       * Credits: is based on Firefox's nsSMILKeySpline.cpp\n       * Usage:\n       * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\n       * spline.get(x) => returns the easing value | x must be in [0, 1] range\n       *\n       */\n\n    var ob = {};\n    ob.getBezierEasing = getBezierEasing;\n    var beziers = {};\n    function getBezierEasing(a, b, c, d, nm) {\n      var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n      if (beziers[str]) {\n        return beziers[str];\n      }\n      var bezEasing = new BezierEasing([a, b, c, d]);\n      beziers[str] = bezEasing;\n      return bezEasing;\n    }\n\n    // These values are established by empiricism with tests (tradeoff: performance VS precision)\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    function A(aA1, aA2) {\n      return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n    }\n    function B(aA1, aA2) {\n      return 3.0 * aA2 - 6.0 * aA1;\n    }\n    function C(aA1) {\n      return 3.0 * aA1;\n    }\n\n    // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n    function calcBezier(aT, aA1, aA2) {\n      return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n    }\n\n    // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\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    function binarySubdivide(aX, aA, aB, mX1, mX2) {\n      var currentX,\n        currentT,\n        i = 0;\n      do {\n        currentT = aA + (aB - aA) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - aX;\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      return currentT;\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      return aGuessT;\n    }\n\n    /**\n       * points is an array of [ mX1, mY1, mX2, mY2 ]\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    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        if (x === 0) return 0;\n        if (x === 1) return 1;\n        return calcBezier(this._getTForX(x), mY1, mY2);\n      },\n      // Private part\n\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        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        for (var i = 0; i < kSplineTableSize; ++i) {\n          this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n        }\n      },\n      /**\n           * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\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        for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n          intervalStart += kSampleStepSize;\n        }\n        --currentSample;\n\n        // Interpolate to provide an initial guess for t\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        if (initialSlope >= NEWTON_MIN_SLOPE) {\n          return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n        if (initialSlope === 0.0) {\n          return guessForT;\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    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      function newElement() {\n        var element;\n        if (_length) {\n          _length -= 1;\n          element = pool[_length];\n        } else {\n          element = _create();\n        }\n        return element;\n      }\n      function release(element) {\n        if (_length === _maxLength) {\n          pool = pooling[\"double\"](pool);\n          _maxLength *= 2;\n        }\n        if (_release) {\n          _release(element);\n        }\n        pool[_length] = element;\n        _length += 1;\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    return poolFactory(8, create);\n  }();\n\n  var segmentsLengthPool = function () {\n    function create() {\n      return {\n        lengths: [],\n        totalLength: 0\n      };\n    }\n    function release(element) {\n      var i;\n      var len = element.lengths.length;\n      for (i = 0; i < len; i += 1) {\n        bezierLengthPool.release(element.lengths[i]);\n      }\n      element.lengths.length = 0;\n    }\n    return poolFactory(8, create, release);\n  }();\n\n  function bezFunction() {\n    var math = Math;\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    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      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      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      return diffDist > -0.0001 && diffDist < 0.0001;\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        for (k = 0; k < curveSegments; k += 1) {\n          perc = k / (curveSegments - 1);\n          ptDistance = 0;\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            if (lastPoint[i] !== null) {\n              ptDistance += bmPow(point[i] - lastPoint[i], 2);\n            }\n            lastPoint[i] = point[i];\n          }\n          if (ptDistance) {\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n          }\n          lengthData.percents[k] = perc;\n          lengthData.lengths[k] = addedLength;\n        }\n        lengthData.addedLength = addedLength;\n        return lengthData;\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      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      if (closed && len) {\n        lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n        totalLength += lengths[i].addedLength;\n      }\n      segmentsLength.totalLength = totalLength;\n      return segmentsLength;\n    }\n    function BezierData(length) {\n      this.segmentLength = 0;\n      this.points = new Array(length);\n    }\n    function PointData(partial, point) {\n      this.partialLength = partial;\n      this.point = point;\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        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          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          var bezierData = new BezierData(curveSegments);\n          len = pt3.length;\n          for (k = 0; k < curveSegments; k += 1) {\n            point = createSizedArray(len);\n            perc = k / (curveSegments - 1);\n            ptDistance = 0;\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              if (lastPoint !== null) {\n                ptDistance += bmPow(point[i] - lastPoint[i], 2);\n              }\n            }\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n            bezierData.points[k] = new PointData(ptDistance, point);\n            lastPoint = point;\n          }\n          bezierData.segmentLength = addedLength;\n          storedData[bezierName] = bezierData;\n        }\n        return storedData[bezierName];\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      if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n        return percents[initPos];\n      }\n      var dir = lengths[initPos] > lengthPos ? -1 : 1;\n      var flag = true;\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        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          flag = false;\n        }\n      }\n      return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\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    var bezierSegmentPoints = createTypedArray('float32', 8);\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      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      var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\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      var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\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      var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\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      var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n      var t1t1t1 = t1 * t1 * t1;\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        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        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        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    return {\n      getSegmentsLength: getSegmentsLength,\n      getNewSegment: getNewSegment,\n      getPointInSegment: getPointInSegment,\n      buildBezierData: buildBezierData,\n      pointOnLine2D: pointOnLine2D,\n      pointOnLine3D: pointOnLine3D\n    };\n  }\n  var bez = bezFunction();\n\n  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n  function _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n  function _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n  function floatEqual(a, b) {\n    return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n  }\n  function floatZero(f) {\n    return Math.abs(f) <= 0.00001;\n  }\n  function lerp(p0, p1, amount) {\n    return p0 * (1 - amount) + p1 * amount;\n  }\n  function lerpPoint(p0, p1, amount) {\n    return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n  }\n  function addVectors(a, b) {\n    return a.map(function (v, i) {\n      return v + (b[i] || 0);\n    });\n  }\n  function subtractVectors(a, b) {\n    return a.map(function (v, i) {\n      return v - (b[i] || 0);\n    });\n  }\n  function normalizeVector(a) {\n    var length = Math.hypot.apply(Math, _toConsumableArray(a));\n    if (length > Number.EPSILON) {\n      return a.map(function (v) {\n        return v / length;\n      });\n    }\n    return a;\n  }\n  function quadRoots(a, b, c) {\n    // no root\n    if (a === 0) return [];\n    var s = b * b - 4 * a * c;\n    // Complex roots\n    if (s < 0) return [];\n    var singleRoot = -b / (2 * a);\n    // 1 root\n    if (s === 0) return [singleRoot];\n    var delta = Math.sqrt(s) / (2 * a);\n    // 2 roots\n    return [singleRoot - delta, singleRoot + delta];\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  /**\n   * Returns the _normalized_ direction vector of the tangent of the curve when approaching\n   * the point from negative infinity, pointing outwards at cusps.\n   */\n  function tangentDirection(p0, to, ti, p3, t) {\n    var controlPoints = [p0, addVectors(p0, to), addVectors(p3, ti), p3];\n    var firstSubdivision = deCasteljauSubdivision(controlPoints, t);\n    var secondSubdivision = deCasteljauSubdivision(firstSubdivision, t);\n    var tangent1 = subtractVectors(secondSubdivision[1], secondSubdivision[0]);\n    var length1 = Math.hypot.apply(Math, _toConsumableArray(tangent1));\n    if (length1 > Number.EPSILON) return tangent1.map(function (v) {\n      return v / length1;\n    });\n    var tangent2 = subtractVectors(firstSubdivision[2], firstSubdivision[0]);\n    var length2 = Math.hypot.apply(Math, _toConsumableArray(tangent2));\n    if (length2 > Number.EPSILON) return tangent2.map(function (v) {\n      return v / length2;\n    });\n\n    // Here we have to try both cases, as any two of the three points may coincide without the\n    // curve being degenerate\n    var tangent3 = subtractVectors(firstSubdivision[1], firstSubdivision[0]);\n    var length3 = Math.hypot.apply(Math, _toConsumableArray(tangent3));\n    if (length3 > Number.EPSILON) return tangent3.map(function (v) {\n      return v / length3;\n    });\n    return normalizeVector(subtractVectors(controlPoints[3], controlPoints[0]));\n  }\n  function deCasteljauSubdivision(points, t) {\n    var result = [];\n    for (var i = 0; i < points.length - 1; i += 1) {\n      result.push(lerpPoint(points[i], points[i + 1], t));\n    }\n    return result;\n  }\n  function singlePoint(p) {\n    return new PolynomialBezier(p, p, p, p, false);\n  }\n  function PolynomialBezier(p0, p1, p2, p3, linearize) {\n    if (linearize && pointEqual(p0, p1)) {\n      p1 = lerpPoint(p0, p3, 1 / 3);\n    }\n    if (linearize && pointEqual(p2, p3)) {\n      p2 = lerpPoint(p0, p3, 2 / 3);\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  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  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  PolynomialBezier.prototype.tangentAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[1], p[0]);\n  };\n  PolynomialBezier.prototype.normalAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[0], p[1]);\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    if (floatZero(root)) {\n      if (root > 0 && root < 1) return [tcusp];\n      return [];\n    }\n    return [tcusp - root, tcusp + root].filter(function (r) {\n      return r > 0 && r < 1;\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  function extrema(bez, comp) {\n    var min = bez.points[0][comp];\n    var max = bez.points[bez.points.length - 1][comp];\n    if (min > max) {\n      var e = max;\n      max = min;\n      min = e;\n    }\n    // Derivative roots to find min/max\n    var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\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    return {\n      min: min,\n      max: max\n    };\n  }\n  PolynomialBezier.prototype.bounds = function () {\n    return {\n      x: extrema(this, 0),\n      y: extrema(this, 1)\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  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  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  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  function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n    if (!boxIntersect(d1, d2)) return;\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    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  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  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  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  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  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  function polarOffset(p, angle, length) {\n    return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n  }\n  function pointDistance(p1, p2) {\n    return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n  }\n  function pointEqual(p1, p2) {\n    return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n  }\n\n  var initFrame = initialDefaultFrame;\n  var mathAbs = Math.abs;\n  function interpolateValue(frameNum, caching) {\n    var offsetTime = this.offsetTime;\n    var newValue;\n    if (this.propType === 'multidimensional') {\n      newValue = createTypedArray('float32', this.pv.length);\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    while (flag) {\n      keyData = this.keyframes[i];\n      nextKeyData = this.keyframes[i + 1];\n      if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n        if (keyData.h) {\n          keyData = nextKeyData;\n        }\n        iterationIndex = 0;\n        break;\n      }\n      if (nextKeyData.t - offsetTime > frameNum) {\n        iterationIndex = i;\n        break;\n      }\n      if (i < len - 1) {\n        i += 1;\n      } else {\n        iterationIndex = 0;\n        flag = false;\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    if (keyData.to) {\n      if (!keyframeMetadata.bezierData) {\n        keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n      }\n      var bezierData = keyframeMetadata.bezierData;\n      if (frameNum >= nextKeyTime || frameNum < keyTime) {\n        var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n        kLen = bezierData.points[ind].point.length;\n        for (k = 0; k < kLen; k += 1) {\n          newValue[k] = bezierData.points[ind].point[k];\n        }\n        // caching._lastKeyframeIndex = -1;\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        perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n        var startPoint = keyData.s;\n        var endPoint = nextKeyData.s || keyData.e;\n        if (perc > 1) {\n          var tangent = tangentDirection(keyData.s, keyData.to, keyData.ti, nextKeyData.s || keyData.e, 1);\n          var ratio = bezierData.segmentLength * (perc - 1);\n          for (var cnt = 0; cnt < endPoint.length; cnt += 1) {\n            newValue[cnt] = endPoint[cnt] + tangent[cnt] * ratio;\n          }\n        } else if (perc < 0) {\n          var _tangent = tangentDirection(keyData.s, keyData.to, keyData.ti, nextKeyData.s || keyData.e, 0);\n          var _ratio = bezierData.segmentLength * perc;\n          for (var _cnt = 0; _cnt < startPoint.length; _cnt += 1) {\n            newValue[_cnt] = startPoint[_cnt] + _tangent[_cnt] * _ratio;\n          }\n        } else {\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          while (flag) {\n            addedLength += bezierData.points[j].partialLength;\n            if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n              kLen = bezierData.points[j].point.length;\n              for (k = 0; k < kLen; k += 1) {\n                newValue[k] = bezierData.points[j].point[k];\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              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              break;\n            }\n            if (j < jLen - 1) {\n              j += 1;\n            } else {\n              flag = false;\n            }\n          }\n          caching._lastPoint = j;\n          caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n          caching._lastKeyframeIndex = i;\n        }\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      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                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              perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\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          if (this.propType === 'multidimensional') {\n            newValue[i] = keyValue;\n          } else {\n            newValue = keyValue;\n          }\n        }\n      }\n    }\n    caching.lastIndex = iterationIndex;\n    return newValue;\n  }\n\n  // based on @Toji's https://github.com/toji/gl-matrix/\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    if (cosom < 0.0) {\n      cosom = -cosom;\n      bx = -bx;\n      by = -by;\n      bz = -bz;\n      bw = -bw;\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    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  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  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  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    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      var renderResult = this.interpolateValue(frameNum, this._caching);\n      this.pv = renderResult;\n    }\n    this._caching.lastFrame = frameNum;\n    return this.pv;\n  }\n  function setVValue(val) {\n    var multipliedValue;\n    if (this.propType === 'unidimensional') {\n      multipliedValue = val * this.mult;\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      while (i < len) {\n        multipliedValue = val[i] * this.mult;\n        if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n          this.v[i] = multipliedValue;\n          this._mdf = true;\n        }\n        i += 1;\n      }\n    }\n  }\n  function processEffectsSequence() {\n    if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n      return;\n    }\n    if (this.lock) {\n      this.setVValue(this.pv);\n      return;\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    for (i = 0; i < len; i += 1) {\n      finalValue = this.effectsSequence[i](finalValue);\n    }\n    this.setVValue(finalValue);\n    this._isFirstFrame = false;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  }\n  function addEffect(effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.container.addDynamicProperty(this);\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  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    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    this._isFirstFrame = true;\n    this.effectsSequence = [];\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\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  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    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        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        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    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    for (i = 0; i < arrLen; i += 1) {\n      this.v[i] = initFrame;\n      this.pv[i] = initFrame;\n    }\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: createTypedArray('float32', arrLen)\n    };\n    this.addEffect = addEffect;\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      var p;\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          case 1:\n            p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n            break;\n          default:\n            break;\n        }\n      }\n      if (p.effectsSequence.length) {\n        container.addDynamicProperty(p);\n      }\n      return p;\n    }\n    var ob = {\n      getProp: getProp\n    };\n    return ob;\n  }();\n\n  function DynamicPropertyContainer() {}\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      for (i = 0; i < len; i += 1) {\n        this.dynamicProperties[i].getValue();\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    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  ShapePath.prototype.setPathData = function (closed, len) {\n    this.c = closed;\n    this.setLength(len);\n    var i = 0;\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  ShapePath.prototype.setLength = function (len) {\n    while (this._maxLength < len) {\n      this.doubleArrayLength();\n    }\n    this._length = len;\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  ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n    var arr;\n    this._length = Math.max(this._length, pos + 1);\n    if (this._length >= this._maxLength) {\n      this.doubleArrayLength();\n    }\n    switch (type) {\n      case 'v':\n        arr = this.v;\n        break;\n      case 'i':\n        arr = this.i;\n        break;\n      case 'o':\n        arr = this.o;\n        break;\n      default:\n        arr = [];\n        break;\n    }\n    if (!arr[pos] || arr[pos] && !replace) {\n      arr[pos] = pointPool.newElement();\n    }\n    arr[pos][0] = x;\n    arr[pos][1] = y;\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  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    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    var cnt = this._length - 1;\n    var len = this._length;\n    var i;\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    return newPath;\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    function release(shapePath) {\n      var len = shapePath._length;\n      var i;\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      shapePath._length = 0;\n      shapePath.c = false;\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      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      return cloned;\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  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    this.shapes[this._length] = shapeData;\n    this._length += 1;\n  };\n  ShapeCollection.prototype.releaseShapes = function () {\n    var i;\n    for (i = 0; i < this._length; i += 1) {\n      shapePool.release(this.shapes[i]);\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    function newShapeCollection() {\n      var shapeCollection;\n      if (_length) {\n        _length -= 1;\n        shapeCollection = pool[_length];\n      } else {\n        shapeCollection = new ShapeCollection();\n      }\n      return shapeCollection;\n    }\n    function release(shapeCollection) {\n      var i;\n      var len = shapeCollection._length;\n      for (i = 0; i < len; i += 1) {\n        shapePool.release(shapeCollection.shapes[i]);\n      }\n      shapeCollection._length = 0;\n      if (_length === _maxLength) {\n        pool = pooling[\"double\"](pool);\n        _maxLength *= 2;\n      }\n      pool[_length] = shapeCollection;\n      _length += 1;\n    }\n    return ob;\n  }();\n\n  var ShapePropertyFactory = function () {\n    var initFrame = -999999;\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      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){\n                  keyPropS = kf[kf.length - 1].s[0];\n              }else{\n                  keyPropS = kf[kf.length - 2].e[0];\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        while (flag) {\n          keyData = kf[i];\n          nextKeyData = kf[i + 1];\n          if (nextKeyData.t - this.offsetTime > frameNum) {\n            break;\n          }\n          if (i < len - 1) {\n            i += 1;\n          } else {\n            flag = false;\n          }\n        }\n        keyframeMetadata = this.keyframesMetadata[i] || {};\n        isHold = keyData.h === 1;\n        iterationIndex = i;\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            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            perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n          }\n          keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n        }\n        keyPropS = keyData.s[0];\n      }\n      jLen = previousValue._length;\n      kLen = keyPropS.i[0].length;\n      caching.lastIndex = iterationIndex;\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    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      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\n      this._caching.lastFrame = frameNum;\n      return this.pv;\n    }\n    function resetShape() {\n      this.paths = this.localShapeCollection;\n    }\n    function shapesEqual(shape1, shape2) {\n      if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n        return false;\n      }\n      var i;\n      var len = shape1._length;\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      return true;\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    function processEffectsSequence() {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n      if (!this.effectsSequence.length) {\n        this._mdf = false;\n        return;\n      }\n      if (this.lock) {\n        this.setVValue(this.pv);\n        return;\n      }\n      this.lock = true;\n      this._mdf = false;\n      var finalValue;\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      var i;\n      var len = this.effectsSequence.length;\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue);\n      }\n      this.setVValue(finalValue);\n      this.lock = false;\n      this.frameId = this.elem.globalData.frameId;\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    function addEffect(effectFunction) {\n      this.effectsSequence.push(effectFunction);\n      this.container.addDynamicProperty(this);\n    }\n    ShapeProperty.prototype.interpolateShape = interpolateShape;\n    ShapeProperty.prototype.getValue = processEffectsSequence;\n    ShapeProperty.prototype.setVValue = setVValue;\n    ShapeProperty.prototype.addEffect = addEffect;\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    KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n    KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n    KeyframedShapeProperty.prototype.setVValue = setVValue;\n    KeyframedShapeProperty.prototype.addEffect = addEffect;\n    var EllShapeProperty = function () {\n      var cPoint = roundCorner;\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        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertEllToPath();\n        }\n      }\n      EllShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\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          var _cw = this.d !== 3;\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    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        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        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        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertToPath();\n        }\n      }\n      StarShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\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;\n                  this.v.i.length = numPts;\n                  this.v.o.length = numPts; */\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          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\n            /* this.v.v[i] = [x,y];\n                      this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\n                      this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\n                      this.v._length = numPts; */\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          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          this.paths.length = 0;\n          this.paths[0] = this.v;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n      return StarShapePropertyFactory;\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        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertRectToPath();\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          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            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            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          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n          if (this._mdf) {\n            this.convertRectToPath();\n          }\n        },\n        reset: resetShape\n      };\n      extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n      return RectShapePropertyFactory;\n    }();\n    function getShapeProp(elem, data, type) {\n      var prop;\n      if (type === 3 || type === 4) {\n        var dataProp = type === 3 ? data.pt : data.ks;\n        var keys = dataProp.k;\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      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n      return prop;\n    }\n    function getConstructorFunction() {\n      return ShapeProperty;\n    }\n    function getKeyframedConstructorFunction() {\n      return KeyframedShapeProperty;\n    }\n    var ob = {};\n    ob.getShapeProp = getShapeProp;\n    ob.getConstructorFunction = getConstructorFunction;\n    ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n    return ob;\n  }();\n\n  /*!\n   Transformation Matrix v2.0\n   (c) Epistemex 2014-2015\n   www.epistemex.com\n   By Ken Fyrstenberg\n   Contributions by leeoniya.\n   License: MIT, header required.\n   */\n\n  /**\n   * 2D transformation matrix object initialized with identity matrix.\n   *\n   * The matrix can synchronize a canvas context by supplying the context\n   * as an argument, or later apply current absolute transform to an\n   * existing context.\n   *\n   * All values are handled as floating point values.\n   *\n   * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\n   * @prop {number} a - scale x\n   * @prop {number} b - shear y\n   * @prop {number} c - shear x\n   * @prop {number} d - scale y\n   * @prop {number} e - translate x\n   * @prop {number} f - translate y\n   * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\n   * @constructor\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    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    function rotate(angle) {\n      if (angle === 0) {\n        return this;\n      }\n      var mCos = _cos(angle);\n      var mSin = _sin(angle);\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n    function rotateX(angle) {\n      if (angle === 0) {\n        return this;\n      }\n      var mCos = _cos(angle);\n      var mSin = _sin(angle);\n      return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n    }\n    function rotateY(angle) {\n      if (angle === 0) {\n        return this;\n      }\n      var mCos = _cos(angle);\n      var mSin = _sin(angle);\n      return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n    }\n    function rotateZ(angle) {\n      if (angle === 0) {\n        return this;\n      }\n      var mCos = _cos(angle);\n      var mSin = _sin(angle);\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n    function shear(sx, sy) {\n      return this._t(1, sy, sx, 1, 0, 0);\n    }\n    function skew(ax, ay) {\n      return this.shear(_tan(ax), _tan(ay));\n    }\n    function skewFromAxis(ax, angle) {\n      var mCos = _cos(angle);\n      var mSin = _sin(angle);\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);\n      // 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      if (sx === 1 && sy === 1 && sz === 1) {\n        return this;\n      }\n      return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\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    function translate(tx, ty, tz) {\n      tz = tz || 0;\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      return this;\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      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      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\n      /* matrix order (canvas compatible):\n           * ace\n           * bdf\n           * 001\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    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    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      return this._identity;\n    }\n    function equals(matr) {\n      var i = 0;\n      while (i < 16) {\n        if (matr.props[i] !== this.props[i]) {\n          return false;\n        }\n        i += 1;\n      }\n      return true;\n    }\n    function clone(matr) {\n      var i;\n      for (i = 0; i < 16; i += 1) {\n        matr.props[i] = this.props[i];\n      }\n      return matr;\n    }\n    function cloneFromProps(props) {\n      var i;\n      for (i = 0; i < 16; i += 1) {\n        this.props[i] = props[i];\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 {\n           x: x * me.a + y * me.c + me.e,\n           y: x * me.b + y * me.d + me.f\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    function applyToY(x, y, z) {\n      return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\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    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    function inversePoint(pt) {\n      var inverseMatrix = this.getInverseMatrix();\n      return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n    }\n    function inversePoints(pts) {\n      var i;\n      var len = pts.length;\n      var retPts = [];\n      for (i = 0; i < len; i += 1) {\n        retPts[i] = inversePoint(pts[i]);\n      }\n      return retPts;\n    }\n    function applyToTriplePoints(pt1, pt2, pt3) {\n      var arr = createTypedArray('float32', 6);\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      return arr;\n    }\n    function applyToPointArray(x, y, z) {\n      var arr;\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      return arr;\n    }\n    function applyToPointStringified(x, y) {\n      if (this.isIdentity()) {\n        return x + ',' + y;\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    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      /* if(this.isIdentity()) {\n              return '';\n          } */\n      var i = 0;\n      var props = this.props;\n      var cssValue = 'matrix3d(';\n      var v = 10000;\n      while (i < 16) {\n        cssValue += _rnd(props[i] * v) / v;\n        cssValue += i === 15 ? ')' : ',';\n        i += 1;\n      }\n      return cssValue;\n    }\n    function roundMatrixProperty(val) {\n      var v = 10000;\n      if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n        return _rnd(val * v) / v;\n      }\n      return val;\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      /* if(this.isIdentity()) {\n              return '';\n          } */\n      var props = this.props;\n      var _a = roundMatrixProperty(props[0]);\n      var _b = roundMatrixProperty(props[1]);\n      var _c = roundMatrixProperty(props[4]);\n      var _d = roundMatrixProperty(props[5]);\n      var _e = roundMatrixProperty(props[12]);\n      var _f = roundMatrixProperty(props[13]);\n      return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\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(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n  var lottie = {};\n  var standalone = '__[STANDALONE]__';\n  var animationData = '__[ANIMATIONDATA]__';\n  var renderer = '';\n  function setLocation(href) {\n    setLocationHref(href);\n  }\n  function searchAnimations() {\n    if (standalone === true) {\n      animationManager.searchAnimations(animationData, standalone, renderer);\n    } else {\n      animationManager.searchAnimations();\n    }\n  }\n  function setSubframeRendering(flag) {\n    setSubframeEnabled(flag);\n  }\n  function setPrefix(prefix) {\n    setIdPrefix(prefix);\n  }\n  function loadAnimation(params) {\n    if (standalone === true) {\n      params.animationData = JSON.parse(animationData);\n    }\n    return animationManager.loadAnimation(params);\n  }\n  function setQuality(value) {\n    if (typeof value === 'string') {\n      switch (value) {\n        case 'high':\n          setDefaultCurveSegments(200);\n          break;\n        default:\n        case 'medium':\n          setDefaultCurveSegments(50);\n          break;\n        case 'low':\n          setDefaultCurveSegments(10);\n          break;\n      }\n    } else if (!isNaN(value) && value > 1) {\n      setDefaultCurveSegments(value);\n    }\n    if (getDefaultCurveSegments() >= 50) {\n      roundValues(false);\n    } else {\n      roundValues(true);\n    }\n  }\n  function inBrowser() {\n    return typeof navigator !== 'undefined';\n  }\n  function installPlugin(type, plugin) {\n    if (type === 'expressions') {\n      setExpressionsPlugin(plugin);\n    }\n  }\n  function getFactory(name) {\n    switch (name) {\n      case 'propertyFactory':\n        return PropertyFactory;\n      case 'shapePropertyFactory':\n        return ShapePropertyFactory;\n      case 'matrix':\n        return Matrix;\n      default:\n        return null;\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;\n  // lottie.start = start;\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  function checkReady() {\n    if (document.readyState === 'complete') {\n      clearInterval(readyStateCheckInterval);\n      searchAnimations();\n    }\n  }\n  function getQueryVariable(variable) {\n    var vars = queryString.split('&');\n    for (var i = 0; i < vars.length; i += 1) {\n      var pair = vars[i].split('=');\n      if (decodeURIComponent(pair[0]) == variable) {\n        // eslint-disable-line eqeqeq\n        return decodeURIComponent(pair[1]);\n      }\n    }\n    return null;\n  }\n  var queryString = '';\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    renderer = getQueryVariable('renderer');\n  }\n  var readyStateCheckInterval = setInterval(checkReady, 100);\n\n  // this adds bodymovin to the window object for backwards compatibility\n  try {\n    if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof(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\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    for (var i = 0; i < len; i += 1) {\n      styleName = styles[i].toLowerCase();\n      switch (styleName) {\n        case 'italic':\n          fStyle = 'italic';\n          break;\n        case 'bold':\n          fWeight = '700';\n          break;\n        case 'black':\n          fWeight = '900';\n          break;\n        case 'medium':\n          fWeight = '500';\n          break;\n        case 'regular':\n        case 'normal':\n          fWeight = '400';\n          break;\n        case 'light':\n        case 'thin':\n          fWeight = '200';\n          break;\n        default:\n          break;\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 = [];\n    // Hindi characters\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    function trimFontOptions(font) {\n      var familyArray = font.split(',');\n      var i;\n      var len = familyArray.length;\n      var enabledFamilies = [];\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      return enabledFamilies.join(',');\n    }\n    function setUpNode(font, family) {\n      var parentNode = createTag('span');\n      // Node is invisible to screen readers.\n      parentNode.setAttribute('aria-hidden', true);\n      parentNode.style.fontFamily = family;\n      var node = createTag('span');\n      // Characters that vary significantly among different fonts\n      node.innerText = 'giItT1WQy@!-/#';\n      // Visible - so we can measure it - but not on the screen\n      parentNode.style.position = 'absolute';\n      parentNode.style.left = '-10000px';\n      parentNode.style.top = '-10000px';\n      // Large font size makes even subtle changes obvious\n      parentNode.style.fontSize = '300px';\n      // Reset any font properties\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);\n\n      // Remember width with no applied web font\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    function checkLoadedFonts() {\n      var i;\n      var len = this.fonts.length;\n      var node;\n      var w;\n      var loadedCount = len;\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          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            if (node.offsetWidth !== w) {\n              loadedCount -= 1;\n              this.fonts[i].loaded = true;\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      if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n        setTimeout(this.checkLoadedFontsBinded, 20);\n      } else {\n        setTimeout(this.setIsLoadedBinded, 10);\n      }\n    }\n    function createHelper(fontData, def) {\n      var engine = document.body && def ? 'svg' : 'canvas';\n      var helper;\n      var fontProps = getFontProperties(fontData);\n      if (engine === 'svg') {\n        var tHelper = createNS('text');\n        tHelper.style.fontSize = '100px';\n        // tHelper.style.fontFamily = fontData.fFamily;\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        if (fontData.fClass) {\n          tHelper.style.fontFamily = 'inherit';\n          tHelper.setAttribute('class', fontData.fClass);\n        } else {\n          tHelper.style.fontFamily = fontData.fFamily;\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      function measure(text) {\n        if (engine === 'svg') {\n          helper.textContent = text;\n          return helper.getComputedTextLength();\n        }\n        return helper.measureText(text).width;\n      }\n      return {\n        measureText: measure\n      };\n    }\n    function addFonts(fontData, defs) {\n      if (!fontData) {\n        this.isLoaded = true;\n        return;\n      }\n      if (this.chars) {\n        this.isLoaded = true;\n        this.fonts = fontData.list;\n        return;\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      var fontArr = fontData.list;\n      var i;\n      var len = fontArr.length;\n      var _pendingFonts = len;\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        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          if (loadedSelector.length > 0) {\n            shouldLoadFont = false;\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          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          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          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          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        fontArr[i].helper = createHelper(fontArr[i], defs);\n        fontArr[i].cache = {};\n        this.fonts.push(fontArr[i]);\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    function addChars(chars) {\n      if (!chars) {\n        return;\n      }\n      if (!this.chars) {\n        this.chars = [];\n      }\n      var i;\n      var len = chars.length;\n      var j;\n      var jLen = this.chars.length;\n      var found;\n      for (i = 0; i < len; i += 1) {\n        j = 0;\n        found = false;\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          j += 1;\n        }\n        if (!found) {\n          this.chars.push(chars[i]);\n          jLen += 1;\n        }\n      }\n    }\n    function getCharData(_char, style, font) {\n      var i = 0;\n      var len = this.chars.length;\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        i += 1;\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    function measureText(_char2, fontName, size) {\n      var fontData = this.getFontByName(fontName);\n      // Using the char instead of char.charCodeAt(0)\n      // to avoid collisions between equal chars\n      var index = _char2;\n      if (!fontData.cache[index]) {\n        var tHelper = fontData.helper;\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      return fontData.cache[index] * size;\n    }\n    function getFontByName(name) {\n      var i = 0;\n      var len = this.fonts.length;\n      while (i < len) {\n        if (this.fonts[i].fName === name) {\n          return this.fonts[i];\n        }\n        i += 1;\n      }\n      return this.fonts[0];\n    }\n    function getCodePoint(string) {\n      var codePoint = 0;\n      var first = string.charCodeAt(0);\n      if (first >= 0xD800 && first <= 0xDBFF) {\n        var second = string.charCodeAt(1);\n        if (second >= 0xDC00 && second <= 0xDFFF) {\n          codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        }\n      }\n      return codePoint;\n    }\n\n    // Skin tone modifiers\n    function isModifier(firstCharCode, secondCharCode) {\n      var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n      return surrogateModifiers.indexOf(sum) !== -1;\n    }\n    function isZeroWidthJoiner(charCode) {\n      return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n    }\n\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    function isVariationSelector(charCode) {\n      return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n    }\n\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    function isRegionalCode(string) {\n      var codePoint = getCodePoint(string);\n      if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n        return true;\n      }\n      return false;\n    }\n\n    // Some Emoji implementations represent combinations of\n    // two “regional indicator” letters as a single flag symbol.\n    function isFlagEmoji(string) {\n      return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n    }\n    function isCombinedCharacter(_char3) {\n      return combinedCharacters.indexOf(_char3) !== -1;\n    }\n\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    function isRegionalFlag(text, index) {\n      var codePoint = getCodePoint(text.substr(index, 2));\n      if (codePoint !== BLACK_FLAG_CODE_POINT) {\n        return false;\n      }\n      var count = 0;\n      index += 2;\n      while (count < 5) {\n        codePoint = getCodePoint(text.substr(index, 2));\n        if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n          return false;\n        }\n        count += 1;\n        index += 2;\n      }\n      return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n    }\n    function setIsLoaded() {\n      this.isLoaded = true;\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    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  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    return data;\n  };\n  function slotFactory(animationData) {\n    return new SlotManager(animationData);\n  }\n\n  function RenderableElement() {}\n  RenderableElement.prototype = {\n    initRenderable: function initRenderable() {\n      // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n      this.isInRange = false;\n      // layer's display state\n      this.hidden = false;\n      // If layer's transparency equals 0, it can be hidden\n      this.isTransparent = false;\n      // list of animated components\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       * @function\n       * Initializes frame related properties.\n       *\n       * @param {number} num\n       * current frame number in Layer's time\n       *\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      for (i = 0; i < len; i += 1) {\n        this.renderableComponents[i].renderFrame(this._isFirstFrame);\n      }\n      /* this.maskManager.renderFrame(this.finalTransform.mat);\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      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  function AngleEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n  function ColorEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n  function PointEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n  function LayerIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n  function MaskIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n  function CheckboxEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\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    for (i = 0; i < len; i += 1) {\n      effectItem = new GroupEffect(effects[i], element);\n      this.effectElements.push(effectItem);\n    }\n  }\n  function GroupEffect(data, element) {\n    this.init(data, element);\n  }\n  extendPrototype([DynamicPropertyContainer], GroupEffect);\n  GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\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    for (i = 0; i < len; i += 1) {\n      eff = null;\n      switch (effects[i].ty) {\n        case 0:\n          eff = new SliderEffect(effects[i], element, this);\n          break;\n        case 1:\n          eff = new AngleEffect(effects[i], element, this);\n          break;\n        case 2:\n          eff = new ColorEffect(effects[i], element, this);\n          break;\n        case 3:\n          eff = new PointEffect(effects[i], element, this);\n          break;\n        case 4:\n        case 7:\n          eff = new CheckboxEffect(effects[i], element, this);\n          break;\n        case 10:\n          eff = new LayerIndexEffect(effects[i], element, this);\n          break;\n        case 11:\n          eff = new MaskIndexEffect(effects[i], element, this);\n          break;\n        case 5:\n          eff = new EffectsManager(effects[i], element, this);\n          break;\n        // case 6:\n        default:\n          eff = new NoValueEffect(effects[i], element, this);\n          break;\n      }\n      if (eff) {\n        this.effectElements.push(eff);\n      }\n    }\n  };\n\n  function BaseElement() {}\n  BaseElement.prototype = {\n    checkMasks: function checkMasks() {\n      if (!this.data.hasMask) {\n        return false;\n      }\n      var i = 0;\n      var len = this.data.masksProperties.length;\n      while (i < len) {\n        if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n          return true;\n        }\n        i += 1;\n      }\n      return false;\n    },\n    initExpressions: function initExpressions() {\n      var expressionsInterfaces = getExpressionInterfaces();\n      if (!expressionsInterfaces) {\n        return;\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      if (this.data.hasMask && this.maskManager) {\n        this.layerInterface.registerMaskInterface(this.maskManager);\n      }\n      var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n      this.layerInterface.registerEffectsInterface(effectsInterface);\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();\n\n      // Stretch factor for old animations missing this property.\n      if (!this.data.sr) {\n        this.data.sr = 1;\n      }\n      // effects manager\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  /**\n   * @file\n   * Handles element's layer frame update.\n   * Checks layer in point and out point\n   *\n   */\n\n  function FrameElement() {}\n  FrameElement.prototype = {\n    /**\n       * @function\n       * Initializes frame related properties.\n       *\n       */\n    initFrame: function initFrame() {\n      // set to true when inpoint is rendered\n      this._isFirstFrame = false;\n      // list of animated properties\n      this.dynamicProperties = [];\n      // If layer has been modified in current tick this will be true\n      this._mdf = false;\n    },\n    /**\n       * @function\n       * Calculates all dynamic values\n       *\n       * @param {number} num\n       * current frame number in Layer's time\n       * @param {boolean} isVisible\n       * if layers is currently in range\n       *\n       */\n    prepareProperties: function prepareProperties(num, isVisible) {\n      var i;\n      var len = this.dynamicProperties.length;\n      for (i = 0; i < len; i += 1) {\n        if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n          this.dynamicProperties[i].getValue();\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  FootageElement.prototype.prepareFrame = function () {};\n  extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n  FootageElement.prototype.getBaseElement = function () {\n    return null;\n  };\n  FootageElement.prototype.renderFrame = function () {};\n  FootageElement.prototype.destroy = function () {};\n  FootageElement.prototype.initExpressions = function () {\n    var expressionsInterfaces = getExpressionInterfaces();\n    if (!expressionsInterfaces) {\n      return;\n    }\n    var FootageInterface = expressionsInterfaces('footage');\n    this.layerInterface = FootageInterface(this);\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  AudioElement.prototype.prepareFrame = function (num) {\n    this.prepareRenderableFrame(num, true);\n    this.prepareProperties(num, true);\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    this._volume = this.lv.v[0];\n    var totalVolume = this._volume * this._volumeMultiplier;\n    if (this._previousVolume !== totalVolume) {\n      this._previousVolume = totalVolume;\n      this.audio.volume(totalVolume);\n    }\n  };\n  extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\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  AudioElement.prototype.show = function () {\n    // this.audio.play()\n  };\n  AudioElement.prototype.hide = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n  };\n  AudioElement.prototype.pause = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n    this._canPlay = false;\n  };\n  AudioElement.prototype.resume = function () {\n    this._canPlay = true;\n  };\n  AudioElement.prototype.setRate = function (rateValue) {\n    this.audio.rate(rateValue);\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  AudioElement.prototype.getBaseElement = function () {\n    return null;\n  };\n  AudioElement.prototype.destroy = function () {};\n  AudioElement.prototype.sourceRectAtTime = function () {};\n  AudioElement.prototype.initExpressions = function () {};\n\n  function BaseRenderer() {}\n  BaseRenderer.prototype.checkLayers = function (num) {\n    var i;\n    var len = this.layers.length;\n    var data;\n    this.completeLayers = true;\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (!this.elements[i]) {\n        data = this.layers[i];\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      this.completeLayers = this.elements[i] ? this.completeLayers : false;\n    }\n    this.checkPendingElements();\n  };\n  BaseRenderer.prototype.createItem = function (layer) {\n    switch (layer.ty) {\n      case 2:\n        return this.createImage(layer);\n      case 0:\n        return this.createComp(layer);\n      case 1:\n        return this.createSolid(layer);\n      case 3:\n        return this.createNull(layer);\n      case 4:\n        return this.createShape(layer);\n      case 5:\n        return this.createText(layer);\n      case 6:\n        return this.createAudio(layer);\n      case 13:\n        return this.createCamera(layer);\n      case 15:\n        return this.createFootage(layer);\n      default:\n        return this.createNull(layer);\n    }\n  };\n  BaseRenderer.prototype.createCamera = function () {\n    throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n  };\n  BaseRenderer.prototype.createAudio = function (data) {\n    return new AudioElement(data, this.globalData, this);\n  };\n  BaseRenderer.prototype.createFootage = function (data) {\n    return new FootageElement(data, this.globalData, this);\n  };\n  BaseRenderer.prototype.buildAllItems = function () {\n    var i;\n    var len = this.layers.length;\n    for (i = 0; i < len; i += 1) {\n      this.buildItem(i);\n    }\n    this.checkPendingElements();\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    for (i = 0; i < len; i += 1) {\n      j = 0;\n      while (j < jLen) {\n        if (this.layers[j].id === newLayers[i].id) {\n          this.layers[j] = newLayers[i];\n          break;\n        }\n        j += 1;\n      }\n    }\n  };\n  BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n    this.globalData.projectInterface = pInterface;\n  };\n  BaseRenderer.prototype.initItems = function () {\n    if (!this.globalData.progressiveLoad) {\n      this.buildAllItems();\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    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          if (layers[i].parent !== undefined) {\n            this.buildElementParenting(element, layers[i].parent, hierarchy);\n          } else {\n            element.setHierarchy(hierarchy);\n          }\n        }\n      }\n      i += 1;\n    }\n  };\n  BaseRenderer.prototype.addPendingElement = function (element) {\n    this.pendingElements.push(element);\n  };\n  BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\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  BaseRenderer.prototype.getElementById = function (ind) {\n    var i;\n    var len = this.elements.length;\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i].data.ind === ind) {\n        return this.elements[i];\n      }\n    }\n    return null;\n  };\n  BaseRenderer.prototype.getElementByPath = function (path) {\n    var pathValue = path.shift();\n    var element;\n    if (typeof pathValue === 'number') {\n      element = this.elements[pathValue];\n    } else {\n      var i;\n      var len = this.elements.length;\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    if (path.length === 0) {\n      return element;\n    }\n    return element.getElementByPath(path);\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 TransformPropertyFactory = function () {\n    var defaultVector = [0, 0];\n    function applyToMatrix(mat) {\n      var _mdf = this._mdf;\n      this.iterateDynamicProperties();\n      this._mdf = this._mdf || _mdf;\n      if (this.a) {\n        mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n      }\n      if (this.s) {\n        mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n      }\n      if (this.sk) {\n        mat.skewFromAxis(-this.sk.v, this.sa.v);\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      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    function processKeys(forceRender) {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n      if (this._isDirty) {\n        this.precalculateMatrix();\n        this._isDirty = false;\n      }\n      this.iterateDynamicProperties();\n      if (this._mdf || forceRender) {\n        var frameRate;\n        this.v.cloneFromProps(this.pre.props);\n        if (this.appliedTransformations < 1) {\n          this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        }\n        if (this.appliedTransformations < 2) {\n          this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        }\n        if (this.sk && this.appliedTransformations < 3) {\n          this.v.skewFromAxis(-this.sk.v, this.sa.v);\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        if (this.autoOriented) {\n          var v1;\n          var v2;\n          frameRate = this.elem.globalData.frameRate;\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            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          this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\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      this.frameId = this.elem.globalData.frameId;\n    }\n    function precalculateMatrix() {\n      this.appliedTransformations = 0;\n      this.pre.reset();\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      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      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      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    function autoOrient() {\n      //\n      // var prevP = this.getValueAtTime();\n    }\n    function addDynamicProperty(prop) {\n      this._addDynamicProperty(prop);\n      this.elem.addDynamicProperty(prop);\n      this._isDirty = true;\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();\n      // Precalculated matrix with non animated properties\n      this.pre = new Matrix();\n      this.appliedTransformations = 0;\n      this.initDynamicPropertyContainer(container || elem);\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        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      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        if (data.or.k[0].ti) {\n          var i;\n          var len = data.or.k.length;\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        this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);\n        // sh Indicates it needs to be capped between -180 and 180\n        this.or.sh = true;\n      } else {\n        this.r = PropertyFactory.getProp(elem, data.r || {\n          k: 0\n        }, 0, degToRads, this);\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      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);\n      // 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      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      this._isDirty = true;\n      if (!this.dynamicProperties.length) {\n        this.getValue(true);\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    function getTransformProperty(elem, data, container) {\n      return new TransformProperty(elem, data, container);\n    }\n    return {\n      getTransformProperty: getTransformProperty\n    };\n  }();\n\n  var effectTypes = {\n    TRANSFORM_EFFECT: 'transformEFfect'\n  };\n\n  function TransformElement() {}\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      if (this.data.ao) {\n        this.finalTransform.mProp.autoOriented = true;\n      }\n\n      // TODO: check TYPE 11: Guided elements\n      if (this.data.ty !== 11) {\n        // 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      if (this.hierarchy) {\n        var mat;\n        var finalMat = this.finalTransform.mat;\n        var i = 0;\n        var len = this.hierarchy.length;\n        // Checking if any of the transformation matrices in the hierarchy chain has changed.\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            i += 1;\n          }\n        }\n        if (this.finalTransform._matMdf) {\n          mat = this.finalTransform.mProp.v.props;\n          finalMat.cloneFromProps(mat);\n          for (i = 0; i < len; i += 1) {\n            finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n          }\n        }\n      }\n      if (!this.localTransforms || this.finalTransform._matMdf) {\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\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        if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n          while (i < len) {\n            if (this.localTransforms[i]._mdf) {\n              this.finalTransform._localMatMdf = true;\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            i += 1;\n          }\n        }\n        if (this.finalTransform._localMatMdf) {\n          var localMat = this.finalTransform.localMat;\n          this.localTransforms[0].matrix.clone(localMat);\n          for (i = 1; i < len; i += 1) {\n            var lmat = this.localTransforms[i].matrix;\n            localMat.multiply(lmat);\n          }\n          localMat.multiply(this.finalTransform.mat);\n        }\n        if (this.finalTransform._opMdf) {\n          var localOp = this.finalTransform.localOpacity;\n          for (i = 0; i < len; i += 1) {\n            localOp *= this.localTransforms[i].opacity * 0.01;\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        if (transformEffects.length) {\n          this.localTransforms = [];\n          this.finalTransform.localMat = new Matrix();\n          var i = 0;\n          var len = transformEffects.length;\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      while (flag) {\n        if (comp.finalTransform) {\n          if (comp.data.hasMask) {\n            transforms.splice(0, 0, comp.finalTransform);\n          }\n          comp = comp.comp;\n        } else {\n          flag = false;\n        }\n      }\n      var i;\n      var len = transforms.length;\n      var ptNew;\n      for (i = 0; i < len; i += 1) {\n        ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);\n        // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n        pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\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    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      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      path = createNS('path');\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        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        }\n\n        // TODO move this to a factory or to a constructor\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        if (properties[i].mode === 'i') {\n          jLen = currentMasks.length;\n          var g = createNS('g');\n          for (j = 0; j < jLen; j += 1) {\n            g.appendChild(currentMasks[j]);\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        if (properties[i].inv && !this.solidPath) {\n          this.solidPath = this.createLayerSolidPath();\n        }\n        // TODO move this to a factory or to a constructor\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        if (!this.viewData[i].prop.k) {\n          this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n        }\n      }\n    }\n    this.maskElement = createNS(maskType);\n    len = currentMasks.length;\n    for (i = 0; i < len; i += 1) {\n      this.maskElement.appendChild(currentMasks[i]);\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    if (this.viewData.length) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n  MaskElement.prototype.getMaskProperty = function (pos) {\n    return this.viewData[pos].prop;\n  };\n  MaskElement.prototype.renderFrame = function (isFirstFrame) {\n    var finalMat = this.element.finalTransform.mat;\n    var i;\n    var len = this.masksProperties.length;\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      if (this.viewData[i].op._mdf || isFirstFrame) {\n        this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\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        if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n          var feMorph = this.storedData[i].expan;\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            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            this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n          }\n        }\n      }\n    }\n  };\n  MaskElement.prototype.getMaskelement = function () {\n    return this.maskElement;\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  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    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    }\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    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    }\n    // pathNodes.__renderedString = pathString;\n\n    if (viewData.lastPath !== pathString) {\n      var pathShapeValue = '';\n      if (viewData.elem) {\n        if (pathNodes.c) {\n          pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n        }\n        viewData.elem.setAttribute('d', pathShapeValue);\n      }\n      viewData.lastPath = pathString;\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    function createFilter(filId, skipCoordinates) {\n      var fil = createNS('filter');\n      fil.setAttribute('id', filId);\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      return fil;\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    return ob;\n  }();\n\n  var featureSupport = function () {\n    var ob = {\n      maskType: true,\n      svgLumaHidden: true,\n      offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\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    if (/firefox/i.test(navigator.userAgent)) {\n      ob.svgLumaHidden = false;\n    }\n    return ob;\n  }();\n\n  var registeredEffects = {};\n  var idPrefix = 'filter_result_';\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    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n      if (registeredEffects[type]) {\n        var Effect = registeredEffects[type].effect;\n        filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n        source = idPrefix + count;\n        if (registeredEffects[type].countsAsEffect) {\n          count += 1;\n        }\n      }\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n    if (count) {\n      elem.globalData.defs.appendChild(fil);\n      elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n    }\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n  SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n  SVGEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n    return effects;\n  };\n  function registerEffect(id, effect, countsAsEffect) {\n    registeredEffects[id] = {\n      effect: effect,\n      countsAsEffect: countsAsEffect\n    };\n  }\n\n  function SVGBaseElement() {}\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;\n      // If this layer acts as a mask for the following layer\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      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      }\n      // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\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        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          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      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      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      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      if (!this.matteMasks[matteType]) {\n        var id = this.layerId + '_' + matteType;\n        var filId;\n        var fil;\n        var useElement;\n        var gg;\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          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          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          this.globalData.defs.appendChild(maskGroup);\n        }\n        this.matteMasks[matteType] = id;\n      }\n      return this.matteMasks[matteType];\n    },\n    setMatte: function setMatte(id) {\n      if (!this.matteElement) {\n        return;\n      }\n      this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n    }\n  };\n\n  /**\n   * @file\n   * Handles AE's layer parenting property.\n   *\n   */\n\n  function HierarchyElement() {}\n  HierarchyElement.prototype = {\n    /**\n       * @function\n       * Initializes hierarchy properties\n       *\n       */\n    initHierarchy: function initHierarchy() {\n      // element's parent list\n      this.hierarchy = [];\n      // if element is parent of another layer _isParent will be true\n      this._isParent = false;\n      this.checkParenting();\n    },\n    /**\n       * @function\n       * Sets layer's hierarchy.\n       * @param {array} hierarch\n       * layer's parent list\n       *\n       */\n    setHierarchy: function setHierarchy(hierarchy) {\n      this.hierarchy = hierarchy;\n    },\n    /**\n       * @function\n       * Sets layer as parent.\n       *\n       */\n    setAsParent: function setAsParent() {\n      this._isParent = true;\n    },\n    /**\n       * @function\n       * Searches layer's parenting chain\n       *\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  (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          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        this.renderTransform();\n        this.renderRenderable();\n        this.renderLocalTransform();\n        this.renderElement();\n        this.renderInnerContent();\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    if (this.assetData && this.assetData.sid) {\n      this.assetData = globalData.slotManager.getProp(this.assetData);\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  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\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  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  IShapeElement.prototype = {\n    addShapeToModifiers: function addShapeToModifiers(data) {\n      var i;\n      var len = this.shapeModifiers.length;\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      while (i < len) {\n        if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n          return true;\n        }\n      }\n      return false;\n    },\n    renderModifiers: function renderModifiers() {\n      if (!this.shapeModifiers.length) {\n        return;\n      }\n      var i;\n      var len = this.shapes.length;\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].sh.reset();\n      }\n      len = this.shapeModifiers.length;\n      var shouldBreakProcess;\n      for (i = len - 1; i >= 0; i -= 1) {\n        shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame);\n        // 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        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      while (i < len) {\n        if (elements[i].elem === elem) {\n          return elements[i].pos;\n        }\n        i += 1;\n      }\n      return 0;\n    },\n    addProcessedElement: function addProcessedElement(elem, pos) {\n      var elements = this.processedElements;\n      var i = elements.length;\n      while (i) {\n        i -= 1;\n        if (elements[i].elem === elem) {\n          elements[i].pos = pos;\n          return;\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 ShapeModifiers = function () {\n    var ob = {};\n    var modifiers = {};\n    ob.registerModifier = registerModifier;\n    ob.getModifier = getModifier;\n    function registerModifier(nm, factory) {\n      if (!modifiers[nm]) {\n        modifiers[nm] = factory;\n      }\n    }\n    function getModifier(nm, elem, data) {\n      return new modifiers[nm](elem, data);\n    }\n    return ob;\n  }();\n  function ShapeModifier() {}\n  ShapeModifier.prototype.initModifierProperties = function () {};\n  ShapeModifier.prototype.addShapeToModifier = function () {};\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      if (this._isAnimated) {\n        data.setAsAnimated();\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    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n  ShapeModifier.prototype.processKeys = function () {\n    if (this.elem.globalData.frameId === this.frameId) {\n      return;\n    }\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n  extendPrototype([DynamicPropertyContainer], ShapeModifier);\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;\n    // 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    this._isAnimated = !!shape.k;\n    // TODO: commenting this for now since all shapes are animated\n    var i = 0;\n    var len = transformers.length;\n    while (i < len) {\n      if (transformers[i].mProps.dynamicProperties.length) {\n        this._isAnimated = true;\n        break;\n      }\n      i += 1;\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  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    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    if (!this.k) {\n      this.getValue(true);\n    }\n    this._isAnimated = this.k;\n  }\n  DashProperty.prototype.getValue = function (forceRender) {\n    if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n      return;\n    }\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n    this._mdf = this._mdf || forceRender;\n    if (this._mdf) {\n      var i = 0;\n      var len = this.dataProps.length;\n      if (this.renderer === 'svg') {\n        this.dashStr = '';\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  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  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  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  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  GradientProperty.prototype.comparePoints = function (values, points) {\n    var i = 0;\n    var len = this.o.length / 2;\n    var diff;\n    while (i < len) {\n      diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n      if (diff > 0.01) {\n        return false;\n      }\n      i += 1;\n    }\n    return true;\n  };\n  GradientProperty.prototype.checkCollapsable = function () {\n    if (this.o.length / 2 !== this.c.length / 4) {\n      return false;\n    }\n    if (this.data.k.k[0].s) {\n      var i = 0;\n      var len = this.data.k.k.length;\n      while (i < len) {\n        if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n          return false;\n        }\n        i += 1;\n      }\n    } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n      return false;\n    }\n    return true;\n  };\n  GradientProperty.prototype.getValue = function (forceRender) {\n    this.prop.getValue();\n    this._mdf = false;\n    this._cmdf = false;\n    this._omdf = false;\n    if (this.prop._mdf || forceRender) {\n      var i;\n      var len = this.data.p * 4;\n      var mult;\n      var val;\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        if (this.c[i] !== val) {\n          this.c[i] = val;\n          this._cmdf = !forceRender;\n        }\n      }\n      if (this.o.length) {\n        len = this.prop.v.length;\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          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      this._mdf = !forceRender;\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  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  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    for (j = 0; j < jLen; j += 4) {\n      stop = createNS('stop');\n      gfill.appendChild(stop);\n      stops.push(stop);\n    }\n    pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n    this.gf = gfill;\n    this.cst = stops;\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      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      maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n      if (data.ty === 'gs') {\n        maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n        maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n        if (data.lj === 1) {\n          maskElement.setAttribute('stroke-miterlimit', data.ml);\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  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  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    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    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    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    return shapeString;\n  };\n\n  var SVGElementsRenderer = function () {\n    var _identityMatrix = new Matrix();\n    var _matrixHelper = new Matrix();\n    var ob = {\n      createRenderFunction: createRenderFunction\n    };\n    function createRenderFunction(data) {\n      switch (data.ty) {\n        case 'fl':\n          return renderFill;\n        case 'gf':\n          return renderGradient;\n        case 'gs':\n          return renderGradientStroke;\n        case 'st':\n          return renderStroke;\n        case 'sh':\n        case 'el':\n        case 'rc':\n        case 'sr':\n          return renderPath;\n        case 'tr':\n          return renderContentTransform;\n        case 'no':\n          return renderNoop;\n        default:\n          return null;\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      if (isFirstFrame || itemData.transform.mProps._mdf) {\n        itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n      }\n    }\n    function renderNoop() {}\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      for (l = 0; l < lLen; l += 1) {\n        redraw = itemData.sh._mdf || isFirstFrame;\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          while (!redraw && iterations > 0) {\n            redraw = itemData.transformers[k].mProps._mdf || redraw;\n            iterations -= 1;\n            k -= 1;\n          }\n          if (redraw) {\n            iterations = lvl - itemData.styles[l].lvl;\n            k = itemData.transformers.length - 1;\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        paths = itemData.sh.paths;\n        jLen = paths._length;\n        if (redraw) {\n          pathStringTransformed = '';\n          for (j = 0; j < jLen; j += 1) {\n            pathNodes = paths.shapes[j];\n            if (pathNodes && pathNodes._length) {\n              pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n            }\n          }\n          itemData.caches[l] = pathStringTransformed;\n        } else {\n          pathStringTransformed = itemData.caches[l];\n        }\n        itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n        itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n      }\n    }\n    function renderFill(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\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      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n      }\n    }\n    function renderGradientStroke(styleData, itemData, isFirstFrame) {\n      renderGradient(styleData, itemData, isFirstFrame);\n      renderStroke(styleData, itemData, isFirstFrame);\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      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      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        if (hasOpacity && !itemData.g._collapsable) {\n          itemData.of.setAttribute(attr1, pt1[0]);\n          itemData.of.setAttribute(attr2, pt1[1]);\n        }\n      }\n      var stops;\n      var i;\n      var len;\n      var stop;\n      if (itemData.g._cmdf || isFirstFrame) {\n        stops = itemData.cst;\n        var cValues = itemData.g.c;\n        len = stops.length;\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      if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n        var oValues = itemData.g.o;\n        if (itemData.g._collapsable) {\n          stops = itemData.cst;\n        } else {\n          stops = itemData.ost;\n        }\n        len = stops.length;\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n          if (!itemData.g._collapsable) {\n            stop.setAttribute('offset', oValues[i * 2] + '%');\n          }\n          stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\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          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        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          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('r', rad);\n          }\n        }\n        if (itemData.s._mdf || 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          var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n          var percent = itemData.h.v;\n          if (percent >= 1) {\n            percent = 0.99;\n          } else if (percent <= -1) {\n            percent = -0.99;\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          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('fx', x);\n            itemData.of.setAttribute('fy', y);\n          }\n        }\n        // gfill.setAttribute('fy','200');\n      }\n    }\n\n    function renderStroke(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n      var d = itemData.d;\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      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      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n      }\n      if (itemData.w._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n        if (styleElem.msElem) {\n          styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n        }\n      }\n    }\n    return ob;\n  }();\n\n  function SVGShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = [];\n    // Full shape data\n    this.shapesData = data.shapes;\n    // List of styles that will be applied to shapes\n    this.stylesList = [];\n    // List of modifiers that will be applied to shapes\n    this.shapeModifiers = [];\n    // List of items in shape tree\n    this.itemsData = [];\n    // List of items in previous shape tree\n    this.processedElements = [];\n    // List of animated components\n    this.animatedContents = [];\n    this.initElement(data, globalData, comp);\n    // 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    this.prevViewData = [];\n    // 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  SVGShapeElement.prototype.initSecondaryElement = function () {};\n  SVGShapeElement.prototype.identityMatrix = new Matrix();\n  SVGShapeElement.prototype.buildExpressionInterface = function () {};\n  SVGShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n  };\n\n  /*\n  This method searches for multiple shapes that affect a single element and one of them is animated\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    for (j = 0; j < jLen; j += 1) {\n      style = this.stylesList[j];\n      areAnimated = false;\n      tempShapes.length = 0;\n      for (i = 0; i < len; i += 1) {\n        shape = this.shapes[i];\n        if (shape.styles.indexOf(style) !== -1) {\n          tempShapes.push(shape);\n          areAnimated = shape._isAnimated || areAnimated;\n        }\n      }\n      if (tempShapes.length > 1 && areAnimated) {\n        this.setShapesAsAnimated(tempShapes);\n      }\n    }\n  };\n  SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n    var i;\n    var len = shapes.length;\n    for (i = 0; i < len; i += 1) {\n      shapes[i].setAsAnimated();\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    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      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    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      if (data.lj === 1) {\n        pathElement.setAttribute('stroke-miterlimit', data.ml);\n      }\n    }\n    if (data.r === 2) {\n      pathElement.setAttribute('fill-rule', 'evenodd');\n    }\n    if (data.ln) {\n      pathElement.setAttribute('id', data.ln);\n    }\n    if (data.cl) {\n      pathElement.setAttribute('class', data.cl);\n    }\n    if (data.bm) {\n      pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n    this.stylesList.push(styleOb);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n  SVGShapeElement.prototype.createGroupElement = function (data) {\n    var elementData = new ShapeGroupData();\n    if (data.ln) {\n      elementData.gr.setAttribute('id', data.ln);\n    }\n    if (data.cl) {\n      elementData.gr.setAttribute('class', data.cl);\n    }\n    if (data.bm) {\n      elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n    return elementData;\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  SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n    var ty = 4;\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    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  SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n    var i = 0;\n    var len = this.animatedContents.length;\n    while (i < len) {\n      if (this.animatedContents[i].element === element) {\n        return;\n      }\n      i += 1;\n    }\n    this.animatedContents.push({\n      fn: SVGElementsRenderer.createRenderFunction(data),\n      element: element,\n      data: data\n    });\n  };\n  SVGShapeElement.prototype.setElementStyles = function (elementData) {\n    var arr = elementData.styles;\n    var j;\n    var jLen = this.stylesList.length;\n    for (j = 0; j < jLen; j += 1) {\n      if (arr.indexOf(this.stylesList[j]) === -1 && !this.stylesList[j].closed) {\n        arr.push(this.stylesList[j]);\n      }\n    }\n  };\n  SVGShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n    len = this.dynamicProperties.length;\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n    this.renderModifiers();\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    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n      if (!processedPos) {\n        arr[i]._render = render;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\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 = arr[i].hd;\n        }\n        if (arr[i]._render) {\n          if (itemsData[i].style.pElem.parentNode !== container) {\n            container.appendChild(itemsData[i].style.pElem);\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          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\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        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        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        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        ownModifiers.push(modifier);\n      }\n      this.addProcessedElement(arr[i], i + 1);\n    }\n    len = ownStyles.length;\n    for (i = 0; i < len; i += 1) {\n      ownStyles[i].closed = true;\n    }\n    len = ownModifiers.length;\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n  SVGShapeElement.prototype.renderInnerContent = function () {\n    this.renderModifiers();\n    var i;\n    var len = this.stylesList.length;\n    for (i = 0; i < len; i += 1) {\n      this.stylesList[i].reset();\n    }\n    this.renderShape();\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);\n          // Adding M0 0 fixes same mask bug on all browsers\n          this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n        }\n        this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n      }\n    }\n  };\n  SVGShapeElement.prototype.renderShape = function () {\n    var i;\n    var len = this.animatedContents.length;\n    var animatedContent;\n    for (i = 0; i < len; i += 1) {\n      animatedContent = this.animatedContents[i];\n      if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n        animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\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  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    if (this.o !== o) {\n      this.o = o;\n      this._mdf.o = true;\n      updated = true;\n    }\n    if (this.sw !== sw) {\n      this.sw = sw;\n      this._mdf.sw = true;\n      updated = true;\n    }\n    if (this.sc !== sc) {\n      this.sc = sc;\n      this._mdf.sc = true;\n      updated = true;\n    }\n    if (this.fc !== fc) {\n      this.fc = fc;\n      this._mdf.fc = true;\n      updated = true;\n    }\n    if (this.m !== m) {\n      this.m = m;\n      this._mdf.m = true;\n      updated = true;\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    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    if (data.d && data.d.sid) {\n      data.d = elem.globalData.slotManager.getProp(data.d);\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    if (!this.searchProperty()) {\n      this.completeTextData(this.currentData);\n    }\n  }\n  TextProperty.prototype.defaultBoxWidth = [0, 0];\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    return obj;\n  };\n  TextProperty.prototype.setCurrentData = function (data) {\n    if (!data.__complete) {\n      this.completeTextData(data);\n    }\n    this.currentData = data;\n    this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n    this._mdf = true;\n  };\n  TextProperty.prototype.searchProperty = function () {\n    return this.searchKeyframes();\n  };\n  TextProperty.prototype.searchKeyframes = function () {\n    this.kf = this.data.d.k.length > 1;\n    if (this.kf) {\n      this.addEffect(this.getKeyframeValue.bind(this));\n    }\n    return this.kf;\n  };\n  TextProperty.prototype.addEffect = function (effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.elem.addDynamicProperty(this);\n  };\n  TextProperty.prototype.getValue = function (_finalValue) {\n    if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n      return;\n    }\n    this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n    var currentValue = this.currentData;\n    var currentIndex = this.keysIndex;\n    if (this.lock) {\n      this.setCurrentData(this.currentData);\n      return;\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    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    if (currentValue !== finalValue) {\n      this.setCurrentData(finalValue);\n    }\n    this.v = this.currentData;\n    this.pv = this.v;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\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    while (i <= len - 1) {\n      if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n        break;\n      }\n      i += 1;\n    }\n    if (this.keysIndex !== i) {\n      this.keysIndex = i;\n    }\n    return this.data.d.k[this.keysIndex].s;\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    while (i < len) {\n      shouldCombine = shouldCombineNext;\n      shouldCombineNext = false;\n      charCode = text.charCodeAt(i);\n      currentChars = text.charAt(i);\n      if (FontManager.isCombinedCharacter(charCode)) {\n        shouldCombine = true;\n        // 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);\n          // It's a surrogate pair (this is the Low surrogate)\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        if (FontManager.isVariationSelector(charCode)) {\n          shouldCombine = true;\n        }\n      } else if (FontManager.isZeroWidthJoiner(charCode)) {\n        shouldCombine = true;\n        shouldCombineNext = true;\n      }\n      if (shouldCombine) {\n        charactersArray[charactersArray.length - 1] += currentChars;\n        shouldCombine = false;\n      } else {\n        charactersArray.push(currentChars);\n      }\n      i += currentChars.length;\n    }\n    return charactersArray;\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    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      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        for (i = 0; i < len; i += 1) {\n          charCode = finalText[i].charCodeAt(0);\n          newLineFlag = false;\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          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          if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n            if (lastSpaceIndex === -1) {\n              len += 1;\n            } else {\n              i = lastSpaceIndex;\n            }\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n            finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r');\n            // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n            lastSpaceIndex = -1;\n            lineWidth = 0;\n          } else {\n            lineWidth += cLength;\n            lineWidth += trackingOffset;\n          }\n        }\n        currentHeight += fontData.ascent * documentData.finalSize / 100;\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    lineWidth = -trackingOffset;\n    cLength = 0;\n    var uncollapsedSpaces = 0;\n    var currentChar;\n    for (i = 0; i < len; i += 1) {\n      newLineFlag = false;\n      currentChar = documentData.finalText[i];\n      charCode = currentChar.charCodeAt(0);\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      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      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      if (anchorGrouping == 2) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n        if (val === '' || val === ' ' || i === len - 1) {\n          if (val === '' || val === ' ') {\n            currentSize -= cLength;\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          index += 1;\n          currentSize = 0;\n        }\n      } else if (anchorGrouping == 3) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n        if (val === '' || i === len - 1) {\n          if (val === '') {\n            currentSize -= cLength;\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          currentSize = 0;\n          index += 1;\n        }\n      } else {\n        letters[index].ind = index;\n        letters[index].extra = 0;\n        index += 1;\n      }\n    }\n    documentData.l = letters;\n    maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n    lineWidths.push(lineWidth);\n    if (documentData.sz) {\n      documentData.boxWidth = documentData.sz[0];\n      documentData.justifyOffset = 0;\n    } else {\n      documentData.boxWidth = maxLineWidth;\n      switch (documentData.j) {\n        case 1:\n          documentData.justifyOffset = -documentData.boxWidth;\n          break;\n        case 2:\n          documentData.justifyOffset = -documentData.boxWidth / 2;\n          break;\n        default:\n          documentData.justifyOffset = 0;\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    for (j = 0; j < jLen; j += 1) {\n      animatorData = animators[j];\n      if (animatorData.a.sc) {\n        documentData.strokeColorAnim = true;\n      }\n      if (animatorData.a.sw) {\n        documentData.strokeWidthAnim = true;\n      }\n      if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n        documentData.fillColorAnim = true;\n      }\n      ind = 0;\n      based = animatorData.s.b;\n      for (i = 0; i < len; i += 1) {\n        letterData = letters[i];\n        letterData.anIndexes[j] = ind;\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          ind += 1;\n        }\n      }\n      data.a[j].s.totalChars = ind;\n      var currentInd = -1;\n      var newInd;\n      if (animatorData.s.rn === 1) {\n        for (i = 0; i < len; i += 1) {\n          letterData = letters[i];\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          letterData.anIndexes[j] = newInd;\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  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  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  TextProperty.prototype.canResizeFont = function (_canResize) {\n    this.canResize = _canResize;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\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    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      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      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      if (!this.dynamicProperties.length) {\n        this.getValue();\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        var x1 = 0;\n        var y1 = 0;\n        var x2 = 1;\n        var y2 = 1;\n        if (this.ne.v > 0) {\n          x1 = this.ne.v / 100.0;\n        } else {\n          y1 = -this.ne.v / 100.0;\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        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        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          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          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            if (mult < 0.5) {\n              mult *= 2;\n            } else {\n              mult = 1 - 2 * (mult - 0.5);\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;\n                      mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\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          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          mult = easer(mult);\n        }\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        if (this.sm.v !== 100) {\n          var smoothness = this.sm.v * 0.01;\n          if (smoothness === 0) {\n            smoothness = 0.00000001;\n          }\n          var threshold = 0.5 - smoothness * 0.5;\n          if (mult < threshold) {\n            mult = 0;\n          } else {\n            mult = (mult - threshold) / smoothness;\n            if (mult > 1) {\n              mult = 1;\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        if (newCharsFlag && this.data.r === 2) {\n          this.e.v = this._currentTextLength;\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        if (s > e) {\n          var _s = s;\n          s = e;\n          e = _s;\n        }\n        this.finalS = s;\n        this.finalE = e;\n      }\n    };\n    extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n    function getTextSelectorProp(elem, data, arr) {\n      return new TextSelectorPropFactory(elem, data, arr);\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  TextAnimatorProperty.prototype.searchProperties = function () {\n    var i;\n    var len = this._textData.a.length;\n    var animatorProps;\n    var getProp = PropertyFactory.getProp;\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    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    this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n  };\n  TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n    this.lettersChangedFlag = lettersChangedFlag;\n    if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n      return;\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    if (this._hasMaskedPath) {\n      mask = this._pathData.m;\n      if (!this._pathData.n || this._pathData._mdf) {\n        var paths = mask.v;\n        if (this._pathData.r.v) {\n          paths = paths.reverse();\n        }\n        // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n        pathInfo = {\n          tLength: 0,\n          segments: []\n        };\n        len = paths._length - 1;\n        var bezierData;\n        totalLength = 0;\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        i = len;\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        this._pathData.pi = pathInfo;\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      if (currentLength < 0 && mask.v.c) {\n        if (pathInfo.tLength < Math.abs(currentLength)) {\n          currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n        }\n        segmentInd = segments.length - 1;\n        points = segments[segmentInd].points;\n        pointInd = points.length - 1;\n        while (currentLength < 0) {\n          currentLength += points[pointInd].partialLength;\n          pointInd -= 1;\n          if (pointInd < 0) {\n            segmentInd -= 1;\n            points = segments[segmentInd].points;\n            pointInd = points.length - 1;\n          }\n        }\n      }\n      points = segments[segmentInd].points;\n      prevPoint = points[pointInd - 1];\n      currentPoint = points[pointInd];\n      partialLength = currentPoint.partialLength;\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    //\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      for (i = 0; i < len; i += 1) {\n        if (letters[i].n) {\n          if (animatorJustifyOffset) {\n            animatorJustifyOffset += animatorFirstCharOffset;\n          }\n          while (lastIndex < i) {\n            letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n            lastIndex += 1;\n          }\n          animatorJustifyOffset = 0;\n          isNewLine = true;\n        } else {\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n            if (animatorProps.t.propType) {\n              if (isNewLine && documentData.j === 2) {\n                animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n              }\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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          isNewLine = false;\n        }\n      }\n      if (animatorJustifyOffset) {\n        animatorJustifyOffset += animatorFirstCharOffset;\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      if (letters[i].n) {\n        xPos = 0;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        currentLength = initPathPos;\n        firstLine = false;\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        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              case 2:\n                currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n                break;\n              default:\n                break;\n            }\n            currentLine = letters[i].line;\n          }\n          if (ind !== letters[i].ind) {\n            if (letters[ind]) {\n              currentLength += letters[ind].extra;\n            }\n            currentLength += letters[i].an / 2;\n            ind = letters[i].ind;\n          }\n          currentLength += alignment[0] * letters[i].an * 0.005;\n          var animatorOffset = 0;\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n            if (animatorProps.p.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n              if (mult.length) {\n                animatorOffset += animatorProps.p.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.p.v[0] * mult;\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              if (mult.length) {\n                animatorOffset += animatorProps.a.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.a.v[0] * mult;\n              }\n            }\n          }\n          flag = true;\n          // Force alignment only works with a single line for now\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          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              if (pointInd >= points.length) {\n                pointInd = 0;\n                segmentInd += 1;\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              if (points) {\n                prevPoint = currentPoint;\n                currentPoint = points[pointInd];\n                partialLength = currentPoint.partialLength;\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);\n\n          // Grouping alignment\n          matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n        }\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          if (animatorProps.t.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n            // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\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        if (documentData.strokeWidthAnim) {\n          sw = documentData.sw || 0;\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        if (documentData.fillColorAnim && documentData.fc) {\n          fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n        }\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          if (animatorProps.a.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          if (animatorProps.s.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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        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          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          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          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          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          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          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          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          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            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            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            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        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          if (animatorProps.p.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\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        if (documentData.strokeWidthAnim) {\n          letterSw = sw < 0 ? 0 : sw;\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        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        if (this._hasMaskedPath) {\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\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            if (currentPoint.point[0] < prevPoint.point[0]) {\n              rot += 180;\n            }\n            matrixHelper.rotate(-rot * Math.PI / 180);\n          }\n          matrixHelper.translate(xPathPos, yPathPos, 0);\n          currentLength -= alignment[0] * letters[i].an * 0.005;\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          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          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            case 2:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n              break;\n            default:\n              break;\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        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        letterO = elemOpacity;\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  TextAnimatorProperty.prototype.getValue = function () {\n    if (this._elem.globalData.frameId === this._frameId) {\n      return;\n    }\n    this._frameId = this._elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n  TextAnimatorProperty.prototype.mHelper = new Matrix();\n  TextAnimatorProperty.prototype.defaultPropsArray = [];\n  extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n  function ITextElement() {}\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  ITextElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n  };\n  ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n    var j;\n    var jLen = shapes.length;\n    var pathNodes;\n    var shapeStr = '';\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    return shapeStr;\n  };\n  ITextElement.prototype.updateDocumentData = function (newData, index) {\n    this.textProperty.updateDocumentData(newData, index);\n  };\n  ITextElement.prototype.canResizeFont = function (_canResize) {\n    this.textProperty.canResizeFont(_canResize);\n  };\n  ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n    this.textProperty.setMinimumFontSize(_fontSize);\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    matrixHelper.translate(0, -documentData.ls, 0);\n    switch (documentData.j) {\n      case 1:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n        break;\n      case 2:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n        break;\n      default:\n        break;\n    }\n    matrixHelper.translate(xPos, yPos, 0);\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  ITextElement.prototype.emptyProp = new LetterProps();\n  ITextElement.prototype.destroy = function () {};\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  function SVGTextLottieElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.renderType = 'svg';\n    this.initElement(data, globalData, comp);\n  }\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n  SVGTextLottieElement.prototype.createContent = function () {\n    if (this.data.singleShape && !this.globalData.fontManager.chars) {\n      this.textContainer = createNS('text');\n    }\n  };\n  SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n    var i = 0;\n    var len = textArray.length;\n    var textContents = [];\n    var currentTextContent = '';\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      i += 1;\n    }\n    textContents.push(currentTextContent);\n    return textContents;\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      if (shape.it) {\n        var shapeItem = shape.it[shape.it.length - 1];\n        if (shapeItem.s) {\n          shapeItem.s.k[0] = scale;\n          shapeItem.s.k[1] = scale;\n        }\n      }\n    }\n    return data;\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    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    if (documentData.sc) {\n      this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n      this.layerElement.setAttribute('stroke-width', documentData.sw);\n    }\n    this.layerElement.setAttribute('font-size', documentData.finalSize);\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\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    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    if (singleShape && !usesGlyphs && !documentData.sz) {\n      var tElement = this.textContainer;\n      var justify = 'start';\n      switch (documentData.j) {\n        case 1:\n          justify = 'end';\n          break;\n        case 2:\n          justify = 'middle';\n          break;\n        default:\n          justify = 'start';\n          break;\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      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        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            glyph: null\n          };\n        }\n        this.textSpans[i].span = tSpan;\n        yPos += documentData.finalLineHeight;\n      }\n      this.layerElement.appendChild(tElement);\n    } else {\n      var cachedSpansLength = this.textSpans.length;\n      var charData;\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        if (!usesGlyphs || !singleShape || i === 0) {\n          tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\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            if (usesGlyphs) {\n              var childSpan = createNS('g');\n              tSpan.appendChild(childSpan);\n              this.textSpans[i].childSpan = childSpan;\n            }\n            this.textSpans[i].span = tSpan;\n            this.layerElement.appendChild(tSpan);\n          }\n          tSpan.style.display = 'inherit';\n        }\n        matrixHelper.reset();\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          this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n          xPos += letters[i].l || 0;\n          // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n          xPos += trackingOffset;\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;\n          // t === 1 means the character has been replaced with an animated shaped\n          if (charData.t === 1) {\n            glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n          } else {\n            var data = emptyShapeData;\n            if (charData.data && charData.data.shapes) {\n              data = this.buildShapeData(charData.data, documentData.finalSize);\n            }\n            glyphElement = new SVGShapeElement(data, this.globalData, this);\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          this.textSpans[i].glyph = glyphElement;\n          glyphElement._debug = true;\n          glyphElement.prepareFrame(0);\n          glyphElement.renderFrame();\n          this.textSpans[i].childSpan.appendChild(glyphElement.layerElement);\n          // 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          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          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    while (i < this.textSpans.length) {\n      this.textSpans[i].span.style.display = 'none';\n      i += 1;\n    }\n    this._sizeChanged = true;\n  };\n  SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n    this.prepareFrame(this.comp.renderedFrame - this.data.st);\n    this.renderInnerContent();\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    return this.bbox;\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    for (i = 0; i < len; i += 1) {\n      glyphElement = this.textSpans[i].glyph;\n      if (glyphElement) {\n        glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n        if (glyphElement._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n  SVGTextLottieElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    if (!this.data.singleShape || this._mdf) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\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        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            if (glyphElement) {\n              glyphElement.renderFrame();\n            }\n            if (renderedLetter._mdf.m) {\n              textSpan.setAttribute('transform', renderedLetter.m);\n            }\n            if (renderedLetter._mdf.o) {\n              textSpan.setAttribute('opacity', renderedLetter.o);\n            }\n            if (renderedLetter._mdf.sw) {\n              textSpan.setAttribute('stroke-width', renderedLetter.sw);\n            }\n            if (renderedLetter._mdf.sc) {\n              textSpan.setAttribute('stroke', renderedLetter.sc);\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  extendPrototype([IImageElement], ISolidElement);\n  ISolidElement.prototype.createContent = function () {\n    var rect = createNS('rect');\n    /// /rect.style.width = this.data.sw;\n    /// /rect.style.height = this.data.sh;\n    /// /rect.style.fill = this.data.sc;\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  NullElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n  NullElement.prototype.renderFrame = function () {};\n  NullElement.prototype.getBaseElement = function () {\n    return null;\n  };\n  NullElement.prototype.destroy = function () {};\n  NullElement.prototype.sourceRectAtTime = function () {};\n  NullElement.prototype.hide = function () {};\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n  function SVGRendererBase() {}\n  extendPrototype([BaseRenderer], SVGRendererBase);\n  SVGRendererBase.prototype.createNull = function (data) {\n    return new NullElement(data, this.globalData, this);\n  };\n  SVGRendererBase.prototype.createShape = function (data) {\n    return new SVGShapeElement(data, this.globalData, this);\n  };\n  SVGRendererBase.prototype.createText = function (data) {\n    return new SVGTextLottieElement(data, this.globalData, this);\n  };\n  SVGRendererBase.prototype.createImage = function (data) {\n    return new IImageElement(data, this.globalData, this);\n  };\n  SVGRendererBase.prototype.createSolid = function (data) {\n    return new ISolidElement(data, this.globalData, this);\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    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    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    if (this.renderConfig.width) {\n      this.svgElement.setAttribute('width', this.renderConfig.width);\n    }\n    if (this.renderConfig.height) {\n      this.svgElement.setAttribute('height', this.renderConfig.height);\n    }\n    if (this.renderConfig.className) {\n      this.svgElement.setAttribute('class', this.renderConfig.className);\n    }\n    if (this.renderConfig.id) {\n      this.svgElement.setAttribute('id', this.renderConfig.id);\n    }\n    if (this.renderConfig.focusable !== undefined) {\n      this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n    }\n    this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio);\n    // 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    this.animationItem.wrapper.appendChild(this.svgElement);\n    // Mask animation\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  SVGRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n    this.layerElement = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\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    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n  SVGRendererBase.prototype.updateContainerSize = function () {};\n  SVGRendererBase.prototype.findIndexByInd = function (ind) {\n    var i = 0;\n    var len = this.layers.length;\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ind === ind) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  SVGRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n    elements[pos] = true;\n    var element = this.createItem(this.layers[pos]);\n    elements[pos] = element;\n    if (getExpressionsPlugin()) {\n      if (this.layers[pos].ty === 0) {\n        this.globalData.projectInterface.registerComposition(element);\n      }\n      element.initExpressions();\n    }\n    this.appendElementInPos(element, pos);\n    if (this.layers[pos].tt) {\n      var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n      if (elementIndex === -1) {\n        return;\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  SVGRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n      if (element.data.tt) {\n        var i = 0;\n        var len = this.elements.length;\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          i += 1;\n        }\n      }\n    }\n  };\n  SVGRendererBase.prototype.renderFrame = function (num) {\n    if (this.renderedFrame === num || this.destroyed) {\n      return;\n    }\n    if (num === null) {\n      num = this.renderedFrame;\n    } else {\n      this.renderedFrame = num;\n    }\n    // console.log('-------');\n    // console.log('FRAME ',num);\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    if (!this.completeLayers) {\n      this.checkLayers(num);\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    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  SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newElement = element.getBaseElement();\n    if (!newElement) {\n      return;\n    }\n    var i = 0;\n    var nextElement;\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      i += 1;\n    }\n    if (nextElement) {\n      this.layerElement.insertBefore(newElement, nextElement);\n    } else {\n      this.layerElement.appendChild(newElement);\n    }\n  };\n  SVGRendererBase.prototype.hide = function () {\n    this.layerElement.style.display = 'none';\n  };\n  SVGRendererBase.prototype.show = function () {\n    this.layerElement.style.display = 'block';\n  };\n\n  function ICompElement() {}\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\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    if (this.data.xt || !globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n    this.hide();\n  };\n\n  /* ICompElement.prototype.hide = function(){\n      if(!this.hidden){\n          this.hideElement();\n          var i,len = this.elements.length;\n          for( i = 0; i < len; i+=1 ){\n              if(this.elements[i]){\n                  this.elements[i].hide();\n              }\n          }\n      }\n  }; */\n\n  ICompElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n    if (!this.isInRange && !this.data.xt) {\n      return;\n    }\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n      if (timeRemapped === this.data.op) {\n        timeRemapped = this.data.op - 1;\n      }\n      this.renderedFrame = timeRemapped;\n    } else {\n      this.renderedFrame = num / this.data.sr;\n    }\n    var i;\n    var len = this.elements.length;\n    if (!this.completeLayers) {\n      this.checkLayers(this.renderedFrame);\n    }\n    // This iteration needs to be backwards because of how expressions connect between each other\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        if (this.elements[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n  ICompElement.prototype.renderInnerContent = function () {\n    var i;\n    var len = this.layers.length;\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n  ICompElement.prototype.setElements = function (elems) {\n    this.elements = elems;\n  };\n  ICompElement.prototype.getElements = function () {\n    return this.elements;\n  };\n  ICompElement.prototype.destroyElements = function () {\n    var i;\n    var len = this.layers.length;\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\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  extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\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    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    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    if (ariaLabel) {\n      this.svgElement.setAttribute('aria-labelledby', ariaLabel);\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  extendPrototype([SVGRendererBase], SVGRenderer);\n  SVGRenderer.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function TrimModifier() {}\n  extendPrototype([ShapeModifier], TrimModifier);\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  TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n    shapeData.pathsData = [];\n  };\n  TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n    var segments = [];\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    var shapeSegments = [];\n    var i;\n    var len = segments.length;\n    var segmentOb;\n    for (i = 0; i < len; i += 1) {\n      segmentOb = segments[i];\n      if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n        var shapeS;\n        var shapeE;\n        if (segmentOb.s * totalModifierLength <= addedLength) {\n          shapeS = 0;\n        } else {\n          shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n        }\n        if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n          shapeE = 1;\n        } else {\n          shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n        }\n        shapeSegments.push([shapeS, shapeE]);\n      }\n    }\n    if (!shapeSegments.length) {\n      shapeSegments.push([0, 0]);\n    }\n    return shapeSegments;\n  };\n  TrimModifier.prototype.releasePathsData = function (pathsData) {\n    var i;\n    var len = pathsData.length;\n    for (i = 0; i < len; i += 1) {\n      segmentsLengthPool.release(pathsData[i]);\n    }\n    pathsData.length = 0;\n    return pathsData;\n  };\n  TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n    var s;\n    var e;\n    if (this._mdf || _isFirstFrame) {\n      var o = this.o.v % 360 / 360;\n      if (o < 0) {\n        o += 1;\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      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      if (s > e) {\n        var _s = s;\n        s = e;\n        e = _s;\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    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    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        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      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\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          if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n            totalShapeLength = shapeData.totalShapeLength;\n          } else {\n            pathsData = this.releasePathsData(shapeData.pathsData);\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            shapeData.totalShapeLength = totalShapeLength;\n            shapeData.pathsData = pathsData;\n          }\n          totalModifierLength += totalShapeLength;\n          shapeData.shape._mdf = true;\n        }\n      }\n      var shapeS = s;\n      var shapeE = e;\n      var addedLength = 0;\n      var edges;\n      for (i = len - 1; i >= 0; i -= 1) {\n        shapeData = this.shapes[i];\n        if (shapeData.shape._mdf) {\n          localShapeCollection = shapeData.localShapeCollection;\n          localShapeCollection.releaseShapes();\n          // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\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          jLen = edges.length;\n          for (j = 0; j < jLen; j += 1) {\n            shapeS = edges[j][0];\n            shapeE = edges[j][1];\n            segments.length = 0;\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            var newShapesData = this.addShapes(shapeData, segments[0]);\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                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              this.addPaths(newShapesData, localShapeCollection);\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  TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n    var i;\n    var len = newPaths.length;\n    for (i = 0; i < len; i += 1) {\n      localShapeCollection.addShape(newPaths[i]);\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    if (newShape) {\n      shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n    }\n    shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\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    if (newShape) {\n      shapePath.setXYAt(points[0], points[4], 'v', pos);\n    }\n    shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\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    if (!shapePath) {\n      shapePath = shapePool.newElement();\n      segmentCount = 0;\n      initPos = 0;\n    } else {\n      segmentCount = shapePath._length;\n      initPos = shapePath._length;\n    }\n    shapes.push(shapePath);\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      for (j = 1; j < jLen; j += 1) {\n        currentLengthData = lengths[j - 1];\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);\n            // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n            newShape = false;\n            shapePath.c = false;\n          }\n          addedLength += currentLengthData.addedLength;\n          segmentCount += 1;\n        }\n      }\n      if (shapePaths[i].c && lengths.length) {\n        currentLengthData = lengths[j - 1];\n        if (addedLength <= shapeSegment.e) {\n          var segmentLength = lengths[j - 1].addedLength;\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);\n            // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n            newShape = false;\n            shapePath.c = false;\n          }\n        } else {\n          shapePath.c = false;\n        }\n        addedLength += currentLengthData.addedLength;\n        segmentCount += 1;\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      if (addedLength > shapeSegment.e) {\n        break;\n      }\n      if (i < len - 1) {\n        shapePath = shapePool.newElement();\n        newShape = true;\n        shapes.push(shapePath);\n        segmentCount = 0;\n      }\n    }\n    return shapes;\n  };\n\n  function SVGComposableEffect() {}\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      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      return feMerge;\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\n  extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\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      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      if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n        this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\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  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  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;\n\n      // Dimensions mapping:\n      //\n      //   1 -> horizontal & vertical\n      //   2 -> horizontal only\n      //   3 -> vertical only\n      //\n      var dimensions = this.filterManager.effectElements[1].p.v;\n      var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n      var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY);\n\n      // Repeat edges mapping:\n      //\n      //   0 -> off -> duplicate\n      //   1 -> on  -> wrap\n      var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n      this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n    }\n  };\n\n  // import SVGTransformEffect from '../elements/svgElements/effects/SVGTransformEffect';\n\n  // Registering renderers\n  registerRenderer('svg', SVGRenderer);\n\n  // Registering shape modifiers\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);\n\n  // Registering effects\n  // registerEffect(20, SVGTintFilter, true);\n  // registerEffect(21, SVGFillFilter, true);\n  // registerEffect(22, SVGStrokeEffect, false);\n  // registerEffect(23, SVGTritoneFilter, true);\n  // registerEffect(24, SVGProLevelsFilter, true);\n  registerEffect(25, SVGDropShadowEffect, true);\n  // registerEffect(28, SVGMatte3Effect, false);\n  registerEffect(29, SVGGaussianBlurEffect, true);\n\n  return lottie;\n\n}));\n","import lottie, { AnimationItem } from 'lottie-web/build/player/lottie_lottielab';\nimport type { LottieJSON } from '..';\nimport { EventEmitter } from './event';\n\n/**\n * Value of the X-Lottie-Player header that is sent with requests to the server.\n * This can be useful for monitoring and logging the various library versions\n * that exist in the wild, to address compatibility issues, for example.\n */\nconst X_LOTTIE_PLAYER = '@lottielab/lottie-player 1.1.3';\n\n/**\n * List of allowed origins for which the X-Lottie-Player header, containing the\n * library version, is sent with the request.\n *\n * Ideally we would simply append this header to all requests, but if the server\n * doesn't respond with a matching Access-Control-Allow-Origin header, the request\n * will fail due to CORS. So we instead have a list of origins that are known to\n * allow this header via CORS.\n *\n * PRs to add more origins are welcome.\n */\nconst X_LOTTIE_PLAYER_ORIGIN_WHITELIST = [/^https?:\\/\\/(.*[^.]\\.)?lottielab\\.com$/];\n\nconst EMPTY_LOTTIE = {\n  v: '5.7.5',\n  fr: 100,\n  ip: 0,\n  op: 300,\n  w: 300,\n  h: 225,\n  nm: 'Comp 1',\n  ddd: 0,\n  assets: [],\n  layers: [],\n  markers: [],\n};\n\n/**\n * A base renderer for Lottie animations. Contains no logic for playback. After\n * being initialized with an animation, call render() to seek the animation to a\n * specific time and update the DOM to display the current frame.\n */\nexport class LottieRenderer {\n  protected _animation!: AnimationItem;\n  private loadingSrc?: string;\n  protected readonly root: Node & InnerHTML;\n\n  constructor(root: Node & InnerHTML, src?: string | LottieJSON, preserveAspectRatio?: string) {\n    this.root = root;\n    this.initialize(src, preserveAspectRatio);\n  }\n\n  private _initWithAnimation(\n    animationData: LottieJSON,\n    container: HTMLDivElement,\n    preserveAspectRatio?: string\n  ) {\n    this._animation = lottie.loadAnimation({\n      container,\n      renderer: 'svg',\n      autoplay: false,\n      animationData,\n      rendererSettings: {\n        preserveAspectRatio,\n      },\n    });\n  }\n\n  initialize(src: string | LottieJSON | undefined, preserveAspectRatio?: string): Promise<void> {\n    // Clear existing content\n    this.destroy();\n\n    const container = document.createElement('div');\n    container.style.width = '100%';\n    container.style.height = '100%';\n\n    if (typeof src === 'string') {\n      // Load from URL\n      if (this.loadingSrc === src) {\n        return Promise.resolve();\n      }\n\n      this.loadingSrc = src;\n      const xhr = new XMLHttpRequest();\n      xhr.open('GET', src, true);\n      try {\n        // Report the library version to the server for logging and monitoring\n        // purposes, but only if the origin is whitelisted. This is to avoid CORS\n        // issues - see X_LOTTIE_PLAYER_ORIGIN_WHITELIST above.\n        if (X_LOTTIE_PLAYER_ORIGIN_WHITELIST.some((re) => new URL(src).origin.match(re))) {\n          xhr.setRequestHeader('X-Lottie-Player', X_LOTTIE_PLAYER);\n        }\n      } catch (e) {\n        // Ignore, since it's a debug/monitoring feature\n      }\n\n      return new Promise((resolve, reject) => {\n        xhr.onload = () => {\n          if (this.loadingSrc !== src) {\n            // Another request has been made in the meantime\n            return resolve();\n          }\n\n          try {\n            if (xhr.status === 200) {\n              if (!xhr.response) {\n                return reject(new Error(`Failed to load Lottie file ${src}: Empty response`));\n              }\n\n              const lottie = JSON.parse(xhr.response);\n              this._initWithAnimation(lottie, container, preserveAspectRatio);\n              this.root.innerHTML = '';\n              this.root.appendChild(container);\n              return resolve();\n            } else {\n              let responseText = xhr.responseText;\n              if (responseText.length > 300) {\n                responseText = responseText.slice(0, 300) + '... (truncated)';\n              }\n              return reject(\n                new Error(\n                  `Failed to load Lottie file ${src}: HTTP ${xhr.status} ${xhr.statusText}\\nResponse:\\n${responseText}`\n                )\n              );\n            }\n          } catch (e: any) {\n            if (e.message) {\n              e.message = `Failed to load Lottie file ${src}: ${e.message}`;\n            }\n\n            return reject(e);\n          } finally {\n            this.loadingSrc = undefined;\n          }\n        };\n        xhr.onerror = () => {\n          this.loadingSrc = undefined;\n          reject(new Error(`Failed to load Lottie file ${src}: Network error`));\n        };\n        xhr.send();\n      });\n    } else {\n      this._initWithAnimation(src ?? EMPTY_LOTTIE, container, preserveAspectRatio);\n      this.root.innerHTML = '';\n      this.root.appendChild(container);\n      this.loadingSrc = undefined;\n      return Promise.resolve();\n    }\n  }\n\n  get frameRate(): number {\n    return this._animation ? this._animation.frameRate : 0;\n  }\n\n  get duration(): number {\n    return this._animation ? this._animation.getDuration(false) : 0;\n  }\n\n  get durationFrames(): number {\n    return this._animation ? this._animation.getDuration(true) : 0;\n  }\n\n  get animation(): AnimationItem {\n    return this._animation;\n  }\n\n  get animationData(): LottieJSON | undefined {\n    const data = (this._animation as any)?.animationData;\n    if (data === EMPTY_LOTTIE) {\n      return undefined;\n    }\n    return data;\n  }\n\n  renderFrame(time: number) {\n    const clampedFrame = Math.max(0, Math.min(this.durationFrames - 1e-6, time * this.frameRate));\n    this._animation.goToAndStop(clampedFrame, true);\n  }\n\n  get currentTime(): number {\n    return this._animation.currentFrame / this.frameRate;\n  }\n\n  get currentFrame(): number {\n    return this._animation.currentFrame;\n  }\n\n  destroy() {\n    if (this._animation) {\n      this._animation.destroy();\n    }\n\n    this.root.innerHTML = '';\n  }\n}\n","import type { LottieDriver, LottieState } from './driver';\nimport { LottieRenderer } from './renderer';\nimport { Morphing } from './morphing';\nimport { AnimationItem } from 'lottie-web/build/player/lottie_lottielab';\nimport type { LottieJSON, TimeEvent } from '..';\nimport { EventEmitter } from './event';\n\nfunction getRealTime() {\n  return performance?.now() || new Date().getTime();\n}\n\n/**\n * A Lottie renderer based on LottieRenderer, which additionally accepts a\n * LottieDriver. This renderer will call its driver's `advance` method as\n * frames pass, and display the returned state. It additionally supports\n * displaying complex morphed states (@see Morphing)\n *\n * @see LottieRenderer\n * @see LottieDriver\n */\nexport class DrivenLottieRenderer<D extends LottieDriver = LottieDriver> {\n  private renderer: LottieRenderer;\n  private morphing?: Morphing;\n  private _state: LottieState;\n  private _driver?: D;\n  private animationFrame: number | undefined = undefined;\n  private prevTime?: DOMHighResTimeStamp;\n  private prevRealTime?: number;\n  private prevClock?: number;\n  private onFrameBound: FrameRequestCallback = this.onFrame.bind(this);\n\n  public timeMultiplier: number = 1;\n\n  public readonly timeEvent = new EventEmitter<TimeEvent>();\n\n  constructor(init: Node & InnerHTML, src: string | any, driver?: D, preserveAspectRatio?: string) {\n    this.renderer = new LottieRenderer(init, src, preserveAspectRatio);\n    this._state = {\n      time: 0,\n      lottie: this.renderer.animationData,\n    };\n\n    if (driver) {\n      this.animationFrame = requestAnimationFrame(this.onFrameBound);\n      this.driver = driver;\n    }\n  }\n\n  initialize(src: string | any, preserveAspectRatio?: string) {\n    return this.renderer\n      .initialize(src, preserveAspectRatio)\n      .then(() => {\n        if (this.animationFrame === undefined) {\n          this.animationFrame = requestAnimationFrame(this.onFrameBound);\n        }\n        this.advanceToNow();\n        this._state.lottie = this.renderer.animationData;\n        this.refresh();\n      })\n      .catch((e) => {\n        this._state.lottie = undefined;\n      });\n  }\n\n  get state(): LottieState {\n    return this._state;\n  }\n\n  refresh() {\n    this.morphing?.detach();\n    this.morphing = undefined;\n    this.setState(this.state);\n  }\n\n  private setState(newState: LottieState) {\n    const oldTime = this._state.time;\n    const timeChanged = oldTime !== newState.time;\n    this._state = newState;\n    if (timeChanged) {\n      this.renderer.renderFrame(newState.time);\n    }\n\n    if (newState.morphs) {\n      if (!this.morphing && this.renderer.animation) {\n        this.morphing = new Morphing(this.renderer.animation!);\n      }\n\n      if (this.morphing) {\n        const morphChanged =\n          this.morphing.ops.length !== newState.morphs.length ||\n          this.morphing.ops.some((m, i) => {\n            const nm = newState.morphs![i];\n            return !nm || m.time !== nm.time || m.strength !== nm.strength;\n          });\n\n        this.morphing.ops = newState.morphs;\n\n        if (morphChanged) {\n          // Force render\n          //\n          // This unfortunately needs to happen even if triggered earlier because\n          // of timeChanged, since we need to evaluate the morphs and take into\n          // account the new time\n          this.renderer.animation?.renderer?.renderFrame(null);\n        }\n      }\n    } else if (this.morphing && this.morphing.ops.length > 0) {\n      this.morphing.ops = [];\n      // Force render\n      this.renderer.animation?.renderer?.renderFrame(null);\n    }\n  }\n\n  set state(newState: LottieState) {\n    if (this.driver) {\n      throw new Error('Cannot set state directly when using a driver');\n    }\n\n    this.setState(newState);\n  }\n\n  get driver(): D | undefined {\n    return this._driver;\n  }\n\n  set driver(newDriver: D | undefined) {\n    this.prevClock = undefined;\n\n    if (this.animationFrame === undefined && newDriver) {\n      this.animationFrame = requestAnimationFrame(this.onFrameBound);\n    } else if (this.animationFrame !== undefined && !newDriver) {\n      cancelAnimationFrame(this.animationFrame);\n      this.animationFrame = undefined;\n    }\n\n    this._driver = newDriver;\n    if (newDriver?.advance) {\n      this.setState(newDriver.advance(this._state, 0));\n    }\n  }\n\n  /**\n   * Returns a precise clock that reflects real time that has passed since the\n   * first frame was rendered to the last call to the driver's advance() method.\n   *\n   * The clock uses seconds as the unit.\n   */\n  get clock() {\n    if (this.prevTime === undefined) {\n      return 0;\n    }\n\n    // Clock is synced to the DOMHighResTimeStamps provided to the animation\n    // frame callback, but it still allows inter-frame time to pass.\n    //\n    // We do this by tracking the real time elapsed since the previous frame and\n    // adding that time to the DOMHighResTimeStamp of the previous frame.\n    //\n    // When the animation frame callback is called, it will advance the clock\n    // for exactly the delta time between frames, minus any inter-frame\n    // adjustment made. In other words, since\n    //\n    // clock = prevFrameTs + interFrameAdvancesMs\n    //\n    // and an advancement is made for a delta time of\n    //\n    // dt = newClock - prevClock = (newFrameTs + 0) - (prevFrameTs + interFrameAdvancesMs)\n    // dt = (newFrameTs - prevFrameTs) - interFrameAdvancesMs\n\n    const base = this.prevTime;\n    const realNow = getRealTime();\n    const realBase = this.prevRealTime || realNow;\n    return (base + (realNow - realBase)) / 1000;\n  }\n\n  get duration(): number {\n    return this.renderer.duration;\n  }\n\n  get durationInFrames(): number {\n    return this.renderer.durationFrames;\n  }\n\n  get frameRate(): number {\n    return this.renderer.frameRate;\n  }\n\n  get animation(): AnimationItem {\n    return this.renderer.animation;\n  }\n\n  get animationData(): LottieJSON | undefined {\n    return this.renderer.animationData;\n  }\n\n  get currentTime(): number {\n    return this.renderer.currentTime;\n  }\n\n  get currentFrame(): number {\n    return this.renderer.currentFrame;\n  }\n\n  /**\n   * Advances the internal clock of the driver to the current moment in real time\n   * (as of the call to the method). This is used to inform the driver about the\n   * accurate passage of time between frames when necessary.\n   */\n  advanceToNow() {\n    const clock = this.clock;\n    const diff = this.prevClock !== undefined ? clock - this.prevClock : 0;\n    if (this.driver?.advance && diff > 0) {\n      this._state.lottie = this.renderer.animationData;\n      const elapsed = diff * this.timeMultiplier;\n      this.setState(this.driver.advance(this._state, diff * this.timeMultiplier));\n      this.timeEvent.emit({ playhead: this.currentTime, clock: this.clock, elapsed });\n      this.renderer.renderFrame(this._state.time);\n    }\n\n    this.prevClock = clock;\n  }\n\n  destroy() {\n    if (this.animationFrame) {\n      cancelAnimationFrame(this.animationFrame);\n      this.animationFrame = undefined;\n    }\n    this.morphing?.detach();\n    this.renderer.destroy();\n  }\n\n  private onFrame(time: DOMHighResTimeStamp) {\n    this.prevTime = time;\n    this.prevRealTime = performance?.now() || new Date().getTime();\n    this.advanceToNow();\n\n    this.animationFrame = requestAnimationFrame(this.onFrameBound);\n  }\n}\n","import type { ILottie, LottieJSON, TimeEvent } from '..';\nimport { DrivenLottieRenderer } from './driven-renderer';\nimport { PlaybackDriver } from './playback';\nimport { LottielabInteractivity, isInteractive } from './interactivity';\nimport { EventEmitter, Listener } from './event';\nimport { AnimationItem } from 'lottie-web/build/player/lottie_lottielab';\n\ntype InteractivePlaybackState = {\n  direction: 1 | -1;\n  speed: number;\n  playing: boolean;\n};\n\ntype PlayerImpl =\n  | { type: 'playback'; driver: PlaybackDriver }\n  | {\n      type: 'interactive';\n      interactivity: LottielabInteractivity;\n      playback: InteractivePlaybackState;\n    };\n\n/**\n * A base renderer for Lottie animations based on lottie-web. Able to play\n * ordinary Lottie animations, as well as Lotties with Lottielab Interactivity.\n */\nexport class LottiePlayer implements ILottie {\n  protected readonly _renderer: DrivenLottieRenderer;\n  protected readonly root: Node & InnerHTML;\n\n  private _impl: PlayerImpl;\n\n  private readonly timeEvent = new EventEmitter<TimeEvent>();\n  private readonly timeEventListener = (e: TimeEvent) => {\n    if (this._impl.type === 'playback') {\n      this.timeEvent.emit(e);\n    } else {\n      this.timeEvent.emit({\n        ...e,\n        playhead: this.currentTime,\n      });\n    }\n  };\n\n  constructor(\n    root: Node & InnerHTML,\n    src?: string | any,\n    autoplay?: boolean,\n    preserveAspectRatio?: string\n  ) {\n    this.root = root;\n    this._renderer = new DrivenLottieRenderer(root, src, undefined, preserveAspectRatio);\n\n    const playback = new PlaybackDriver();\n    if (autoplay) {\n      playback.play();\n    } else {\n      playback.pause();\n    }\n    this._impl = { type: 'playback', driver: playback };\n    this._renderer.driver = playback;\n    this.initialize(src, autoplay, preserveAspectRatio);\n  }\n\n  initialize(src: string | any, autoplay?: boolean, preserveAspectRatio?: string) {\n    this._renderer.timeEvent.removeListener(this.timeEventListener);\n    return this._renderer.initialize(src, preserveAspectRatio).then(() => {\n      this._renderer.timeEvent.addListener(this.timeEventListener);\n\n      // Sync the impl with the current state of the lottie.\n      //\n      // If we previously had a user-provided interactivity definition, maintain\n      // it.\n      //\n      // Otherwise, if the lottie is interactive, create an interactive driver\n      // for it to enable interactivity.\n      //\n      // If none of the above apply, the Lottie should be an ordinary playback\n      // Lottie. In that case, destroy any existing interactivity (via\n      // .toPlayback()).\n      if (\n        this.interactivity?.hasUserProvidedDefinition() ||\n        isInteractive(this._renderer.animationData)\n      ) {\n        const hadUserProvidedDefinition = this.interactivity?.hasUserProvidedDefinition();\n        const oldDefinition = this.interactivity?.definition;\n        this.destroyImpl();\n        this.createInteractiveImpl();\n\n        if (hadUserProvidedDefinition) {\n          this.interactivity!.definition = oldDefinition!;\n        }\n      } else if (this.interactivity) {\n        this.toPlayback();\n      }\n\n      if (autoplay) {\n        this.play();\n      } else {\n        this.pause();\n      }\n    });\n  }\n\n  private destroyImpl() {\n    if (this._impl.type === 'interactive') {\n      this._impl.interactivity._destroy();\n    }\n  }\n\n  private createPlaybackImpl() {\n    this._impl = { type: 'playback', driver: new PlaybackDriver() };\n    this._renderer.driver = this._impl.driver;\n    this._updateTimeMultiplier();\n  }\n\n  private createInteractiveImpl() {\n    this._impl = {\n      type: 'interactive',\n      interactivity: new LottielabInteractivity(\n        this.root as HTMLElement,\n        this._renderer.animationData\n      ),\n      playback: {\n        direction: 1,\n        speed: 1,\n        playing: true,\n      },\n    };\n    this._renderer.driver = this._impl.interactivity._getDriver();\n    this._updateTimeMultiplier();\n  }\n\n  toInteractive() {\n    if (this._impl.type === 'interactive') return;\n    this.destroyImpl();\n    this.createInteractiveImpl();\n  }\n\n  toPlayback() {\n    if (this._impl.type === 'playback') return;\n    this.destroyImpl();\n    this.createPlaybackImpl();\n  }\n\n  destroy() {\n    this.destroyImpl();\n    this._renderer.timeEvent.removeListener(this.timeEventListener);\n    this._renderer.destroy();\n    this.root.innerHTML = '';\n  }\n\n  get interactivity(): LottielabInteractivity | undefined {\n    return this._impl.type === 'interactive' ? this._impl.interactivity : undefined;\n  }\n\n  private _updateTimeMultiplier() {\n    if (this._impl.type === 'playback') {\n      this._renderer.timeMultiplier = 1.0;\n    } else {\n      if (this._impl.playback.playing) {\n        this._renderer.timeMultiplier = this._impl.playback.speed * this._impl.playback.direction;\n      } else {\n        this._renderer.timeMultiplier = 0;\n      }\n    }\n  }\n\n  // Methods\n  play() {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.play();\n    } else {\n      this._impl.playback.playing = true;\n      this._updateTimeMultiplier();\n    }\n  }\n\n  stop() {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.stop();\n    } else {\n      this.pause();\n    }\n  }\n\n  pause() {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.pause();\n    } else {\n      this._impl.playback.playing = false;\n      this._updateTimeMultiplier();\n    }\n  }\n\n  seek(timeSeconds: number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.seek(timeSeconds);\n      this._renderer.advanceToNow();\n    } else {\n      console.warn(`[@lottielab/lottie-player] Cannot seek an interactive Lottie`);\n    }\n  }\n\n  seekToFrame(frame: number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.seekToFrame(frame);\n      this._renderer.advanceToNow();\n    } else {\n      console.warn(`[@lottielab/lottie-player] Cannot seek an interactive Lottie`);\n    }\n  }\n\n  loopBetween(timeSeconds1: number, timeSeconds2: number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.loopBetween(timeSeconds1, timeSeconds2);\n    } else {\n      console.warn(`[@lottielab/lottie-player] Cannot loop an interactive Lottie`);\n    }\n  }\n\n  loopBetweenFrames(frame1: number, frame2: number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.loopBetweenFrames(frame1, frame2);\n    } else {\n      console.warn(`[@lottielab/lottie-player] Cannot loop an interactive Lottie`);\n    }\n  }\n\n  /**\n   * Subcribes to one of the supported events.\n   *\n   * 'loop' fires when the animation loops around.\n   * 'finish' fires when the animation reaches the end.\n   * 'time' fires whenever a frame passes, and has a `TimeEvent` argument which\n   * gives information about the passage of time since the last time event.\n   *\n   * If the Lottie is interactive (`.interactivity` is defined), only the 'time'\n   * event works. In that case, use the `interactivity` object to listen to\n   * events pertaining to the interactive Lottie.\n   */\n  on(event: 'time', listener: Listener<TimeEvent>): void;\n  on(event: 'loop' | 'finish', listener: Listener<undefined>): void;\n  on(event: 'time' | 'loop' | 'finish', listener: Listener<any>): void {\n    switch (event) {\n      case 'loop':\n        if (this._impl.type === 'interactive')\n          throw new Error(\"Cannot listen to 'loop' event on an interactive Lottie\");\n        this._impl.driver.loopEvent.addListener(listener);\n        break;\n      case 'finish':\n        if (this._impl.type === 'interactive')\n          throw new Error(\"Cannot listen to 'finish' event on an interactive Lottie\");\n        this._impl.driver.finishEvent.addListener(listener);\n      case 'time':\n        this.timeEvent.addListener(listener);\n        break;\n    }\n  }\n\n  /** Unsubscribes from an event. */\n  off(event: 'time' | 'loop' | 'finish', listener: Listener<any>): void {\n    switch (event) {\n      case 'time':\n        this.timeEvent.removeListener(listener);\n        break;\n      case 'loop':\n        if (this._impl.type === 'interactive') return; // no listeners\n        this._impl.driver.loopEvent.removeListener(listener);\n        break;\n      case 'finish':\n        if (this._impl.type === 'interactive') return; // no listeners\n        this._impl.driver.finishEvent.removeListener(listener);\n        break;\n    }\n  }\n\n  // Getters/Setters\n\n  get playing(): boolean {\n    return this._impl.type === 'playback' ? this._impl.driver.playing : this._impl.playback.playing;\n  }\n\n  set playing(play: boolean) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.playing = play;\n    } else {\n      this._impl.playback.playing = play;\n      this._updateTimeMultiplier();\n    }\n  }\n\n  get loop(): boolean | number {\n    return this._impl.type === 'playback' ? this._impl.driver.loop : false;\n  }\n\n  set loop(loop: boolean | number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.loop = loop;\n    } else {\n      console.warn(`[@lottielab/lottie-player] Cannot set loop on an interactive Lottie`);\n    }\n  }\n\n  get currentTime(): number {\n    switch (this._impl.type) {\n      case 'playback':\n        return this._impl.driver.currentTime;\n      case 'interactive':\n        return this._impl.interactivity._getDriver().currentTime;\n    }\n  }\n\n  set currentTime(time: number) {\n    this.seek(time);\n  }\n\n  get currentFrame(): number {\n    switch (this._impl.type) {\n      case 'playback':\n        return this._impl.driver.currentFrame;\n      case 'interactive':\n        return this._impl.interactivity._getDriver().currentFrame;\n    }\n  }\n\n  set currentFrame(frame: number) {\n    this.seekToFrame(frame);\n  }\n\n  get frameRate(): number {\n    return this._renderer.frameRate;\n  }\n\n  get duration(): number {\n    return this._renderer.duration;\n  }\n\n  get durationFrames(): number {\n    return this._renderer.durationInFrames;\n  }\n\n  get direction(): 1 | -1 {\n    if (this._impl.type === 'playback') {\n      return this._impl.driver.direction;\n    } else {\n      return this._impl.playback.direction;\n    }\n  }\n\n  set direction(playDirection: 1 | -1) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.direction = playDirection;\n    } else {\n      this._impl.playback.direction = playDirection;\n      this._updateTimeMultiplier();\n    }\n  }\n\n  get speed(): number {\n    if (this._impl.type === 'playback') {\n      return this._impl.driver.speed;\n    } else {\n      return this._impl.playback.speed;\n    }\n  }\n\n  set speed(speed: number) {\n    if (this._impl.type === 'playback') {\n      this._impl.driver.speed = speed;\n    } else {\n      this._impl.playback.speed = speed;\n      this._updateTimeMultiplier();\n    }\n  }\n\n  get animation(): AnimationItem {\n    return this._renderer.animation;\n  }\n\n  get animationData(): LottieJSON | undefined {\n    return this._renderer.animationData;\n  }\n}\n\nexport default LottiePlayer;\n","import React, { useEffect, useRef, useCallback, forwardRef, useState } from 'react';\nimport { LottiePlayer } from '../common/player';\nimport { ILottie, TimeEvent, TransitionEvent } from '..';\n\nfunction warn(e: any) {\n  // Create an error object if the input is a string so that the stack trace is preserved\n  console.warn(`[@lottielab/lottie-player/web]`, typeof e === 'string' ? new Error(e) : e);\n}\n\nexport type LottiePropsDriven =\n  | {\n      time: number;\n    }\n  | { frame: number };\n\nexport interface LottiePropsAutonomous {\n  autoplay?: boolean;\n  playing?: boolean;\n  loop?: boolean;\n  speed?: number;\n  direction?: 1 | -1;\n}\n\nexport interface LottiePropsBase {\n  className?: string;\n  style?: React.CSSProperties;\n  preserveAspectRatio?: string;\n\n  onLoad?: () => void;\n  onError?: (e: unknown) => void;\n  onTime?: (e: TimeEvent) => void;\n  onLoop?: () => void;\n  onFinish?: () => void;\n  onTransitionStart?: (e: TransitionEvent) => void;\n  onTransitionEnd?: (e: TransitionEvent) => void;\n}\n\nexport type LottieProps = LottiePropsBase &\n  ({ src: string } | { lottie: object }) &\n  (LottiePropsAutonomous | LottiePropsDriven);\n\nconst LottieReact = forwardRef<ILottie, LottieProps>((props, ref) => {\n  const player = useRef<LottiePlayer | null>(null);\n  const [isInitialized, setIsInitialized] = useState(false);\n  const container = useCallback((node: HTMLDivElement | null) => {\n    if (node) {\n      player.current = new LottiePlayer(node);\n      if (ref) {\n        if (typeof ref === 'function') {\n          ref(player.current);\n        } else {\n          ref.current = player.current;\n        }\n      }\n    }\n  }, []);\n\n  const isDriven = 'frame' in props || 'time' in props;\n\n  const handleInitialize = useCallback(async function ({\n    player,\n    src,\n    autoplay,\n    preserveAspectRatio,\n    onSuccess,\n    onError,\n  }: {\n    player: LottiePlayer;\n    src: string | object;\n    autoplay?: boolean;\n    preserveAspectRatio?: string;\n    onSuccess?: () => void;\n    onError?: (error: unknown) => void;\n  }) {\n    try {\n      await player.initialize(src, autoplay, preserveAspectRatio);\n      onSuccess?.();\n    } catch (error) {\n      onError?.(error);\n    }\n  }, []);\n\n  useEffect(() => {\n    if (!player.current) {\n      return;\n    }\n\n    const autoplay =\n      'playing' in props && props.playing != undefined\n        ? props.playing\n        : 'autoplay' in props\n          ? props.autoplay\n          : true;\n\n    const src = 'src' in props ? props.src : props.lottie;\n\n    const preserveAspectRatio = props.preserveAspectRatio;\n\n    void handleInitialize({\n      player: player.current,\n      src,\n      autoplay,\n      preserveAspectRatio,\n      onSuccess: function () {\n        props.onLoad?.();\n        setIsInitialized(true);\n      },\n      onError: function (error) {\n        warn(error);\n        props.onError?.(error);\n      },\n    });\n\n    return () => player.current?.destroy();\n  }, ['src' in props ? props.src : props.lottie, props.preserveAspectRatio]);\n\n  useEffect(() => {\n    if (!player.current || isDriven) return;\n    player.current.loop = props.loop ?? true;\n  }, [isDriven, 'loop' in props ? props.loop : undefined]);\n\n  useEffect(() => {\n    if (!player.current || isDriven) return;\n    player.current.speed = props.speed ?? 1;\n  }, [isDriven, 'speed' in props ? props.speed : undefined]);\n\n  useEffect(() => {\n    if (!player.current || isDriven) return;\n    player.current.direction = props.direction ?? 1;\n  }, ['direction' in props ? props.direction : undefined]);\n\n  useEffect(() => {\n    if (!player.current || isDriven || props.playing == undefined) return;\n    if (props.playing) {\n      player.current.play();\n    } else {\n      player.current.pause();\n    }\n  }, [isDriven, 'playing' in props ? props.playing : undefined, player.current?.playing]);\n\n  useEffect(() => {\n    if (!player.current || !isDriven) return;\n    if (player.current.playing) {\n      player.current.pause();\n    }\n\n    if ('time' in props) {\n      player.current.currentTime = props.time;\n    } else {\n      player.current.currentFrame = props.frame;\n    }\n  }, [isDriven, 'time' in props ? props.time : 'frame' in props ? props.frame : undefined]);\n\n  useEffect(() => {\n    if (!props.onTime) return;\n    function listener(e: TimeEvent) {\n      props.onTime?.(e);\n    }\n\n    player.current?.on('time', listener);\n    return () => player.current?.off('time', listener);\n  }, [props.onTime]);\n\n  useEffect(() => {\n    if (!props.onLoop) return;\n    function listener() {\n      props.onLoop?.();\n    }\n\n    player.current?.on('loop', listener);\n    return () => player.current?.off('loop', listener);\n  }, [props.onLoop]);\n\n  useEffect(() => {\n    if (!props.onFinish) return;\n    function listener() {\n      props.onFinish?.();\n    }\n\n    player.current?.on('finish', listener);\n    return () => player.current?.off('finish', listener);\n  }, [props.onFinish]);\n\n  useEffect(() => {\n    if (!props.onTransitionStart || !isInitialized) return;\n    function listener(e: TransitionEvent) {\n      props.onTransitionStart?.(e);\n    }\n\n    player.current?.interactivity?.on('transitionstart', listener);\n    return () => player.current?.interactivity?.off('transitionstart', listener);\n  }, [props.onTransitionStart, isInitialized]);\n\n  useEffect(() => {\n    if (!props.onTransitionEnd || !isInitialized) return;\n    function listener(e: TransitionEvent) {\n      props.onTransitionEnd?.(e);\n    }\n\n    player.current?.interactivity?.on('transitionend', listener);\n    return () => player.current?.interactivity?.off('transitionend', listener);\n  }, [props.onTransitionEnd, isInitialized]);\n\n  const { className, style } = props;\n  return (\n    <div className={'lottie' + (className ? ' ' + className : '')} style={style} ref={container} />\n  );\n});\n\nexport * from '../common-exports';\nexport default LottieReact;\n","import type { ILottie, LottieJSON } from '..';\nimport { LottiePlayer } from '../common/player';\nimport { AnimationItem } from 'lottie-web/build/player/lottie_lottielab';\nimport { LottielabInteractivity } from '../common/interactivity';\nimport { Listener } from '../common/event';\n\nfunction warn(e: any) {\n  // Create an error object if the input is a string so that the stack trace is preserved\n  console.warn(`[@lottielab/lottie-player/web]`, typeof e === 'string' ? new Error(e) : e);\n}\n\nclass LottieWeb extends HTMLElement implements ILottie {\n  private lottie: LottiePlayer;\n\n  // Load event\n  private loadEvent = new CustomEvent('load', {\n    bubbles: true,\n    cancelable: false,\n  });\n\n  static get observedAttributes() {\n    return ['src', 'loop', 'speed', 'direction', 'preserveAspectRatio'];\n  }\n\n  constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n\n    const style = document.createElement('style');\n    const container = document.createElement('div');\n    container.style.width = '100%';\n    container.style.height = '100%';\n    this.shadowRoot!.appendChild(style);\n    this.shadowRoot!.appendChild(container);\n\n    this.lottie = new LottiePlayer(container);\n    this.updateStyles();\n  }\n\n  private updateStyles() {\n    const [w, h] = this.intrinsicSize;\n    this.shadowRoot!.querySelector('style')!.textContent = `\n      :host { display: inline-block; width: ${w}px; height: ${h}px; }\n    `;\n  }\n\n  private get intrinsicSize() {\n    if (this.lottie.animationData) {\n      return [this.lottie.animationData.w, this.lottie.animationData.h];\n    } else {\n      return [300, 225];\n    }\n  }\n\n  attributeChangedCallback(name: string, oldValue: string, newValue: string) {\n    if (oldValue === newValue) {\n      return;\n    }\n\n    switch (name) {\n      case 'src':\n        try {\n          this.lottie\n            .initialize(\n              newValue,\n              !(this.getAttribute('autoplay') === 'false'),\n              this.getAttribute('preserveAspectRatio') ?? undefined\n            )\n            .then(() => this.dispatchEvent(this.loadEvent))\n            .catch((e) => {\n              warn(e);\n              this.dispatchEvent(\n                new CustomEvent('error', { bubbles: true, cancelable: false, detail: e })\n              );\n            })\n            .finally(() => this.updateStyles());\n        } catch (e) {\n          warn(e);\n          this.dispatchEvent(\n            new CustomEvent('error', { bubbles: true, cancelable: false, detail: e })\n          );\n        }\n        break;\n      case 'loop':\n        this.lottie.loop = this.convertLoopAttribute(newValue);\n        break;\n      case 'direction':\n        this.lottie.direction = this.convertDirectionAttribute(newValue);\n        break;\n      case 'speed':\n        const value = parseFloat(newValue);\n        if (!isNaN(value)) {\n          this.lottie.speed = parseFloat(newValue);\n        } else {\n          warn(`Invalid speed value: ${newValue}`);\n          this.lottie.speed = 1;\n        }\n\n        break;\n    }\n  }\n\n  /**\n   * Converts the loop attribute (which can either be null or a string) to either a boolean or a number.\n   * When `loop` is true/false it sets whether the animation should loop indefinitely or not.\n   * When `loop` is a number, this sets the number of loops the animation should run for.\n   * @param loopAttribute - parameter taken from the component's attributes (string | null)\n   * @returns boolean | number\n   */\n  private convertLoopAttribute(loopAttribute: string): boolean | number {\n    switch (loopAttribute) {\n      case 'true':\n      case '':\n        return true;\n      case 'false':\n        return false;\n      default:\n        const num = +loopAttribute;\n        if (isNaN(num)) {\n          warn(`Invalid loop value: ${loopAttribute}`);\n          return true;\n        }\n\n        if (num < 0) {\n          warn(`Invalid loop value (negative): ${loopAttribute}`);\n          return true;\n        }\n\n        if (Math.floor(num) !== num) {\n          warn(`Non-integer loop values are not supported: ${loopAttribute}`);\n        }\n\n        return Math.round(num);\n    }\n  }\n\n  /**\n   * Converts the direction attribute (which can either be null or a string) to a number.\n   * The direction dictates the play direction of the animation.\n   * A value of `1` represents an animation playing forwards (and is default).\n   * A value of `-1` represents an animation playing backwards.\n   */\n  private convertDirectionAttribute(directionAttribute: string): 1 | -1 {\n    if (['normal', 'forwards'].includes(directionAttribute)) {\n      return 1;\n    } else if (['reverse', 'backwards'].includes(directionAttribute)) {\n      return -1;\n    }\n\n    const num = +directionAttribute;\n    if (isNaN(num)) {\n      warn(`Invalid direction value: ${directionAttribute}`);\n      return 1;\n    }\n\n    if (num === 1 || num === -1) {\n      return num;\n    } else {\n      warn(`Invalid direction value: ${directionAttribute}`);\n      return 1;\n    }\n  }\n\n  disconnectedCallback() {\n    this.lottie.destroy();\n  }\n\n  // Methods\n  play() {\n    this.lottie.play();\n  }\n  stop() {\n    this.lottie.stop();\n  }\n  pause() {\n    this.lottie.pause();\n  }\n\n  seek(timeSeconds: number) {\n    this.lottie.seek(timeSeconds);\n  }\n  seekToFrame(frame: number) {\n    this.lottie.seekToFrame(frame);\n  }\n\n  loopBetween(timeSeconds1: number, timeSeconds2: number) {\n    this.lottie.loopBetween(timeSeconds1 * 1000, timeSeconds2 * 1000);\n  }\n  loopBetweenFrames(frame1: number, frame2: number) {\n    this.lottie.loopBetweenFrames(frame1, frame2);\n  }\n\n  toInteractive() {\n    this.lottie.toInteractive();\n  }\n\n  toPlayback() {\n    this.lottie.toPlayback();\n  }\n\n  /**\n   * Subcribes to one of the supported events.\n   *\n   * 'loop' fires when the animation loops around.\n   * 'finish' fires when the animation reaches the end.\n   * 'time' fires whenever a frame passes, and has a `TimeEvent` argument which\n   * gives information about the passage of time since the last time event.\n   *\n   * If the Lottie is interactive (`.interactivity` is defined), only the 'time'\n   * event works. In that case, use the `interactivity` object to listen to\n   * events pertaining to the interactive Lottie.\n   */\n  on(event: 'time' | 'loop' | 'finish', listener: Listener<any>): void {\n    switch (event) {\n      case 'time':\n        this.lottie.on(event, listener);\n        break;\n\n      case 'loop':\n      case 'finish':\n        this.lottie.on(event, listener);\n    }\n  }\n\n  /** Unsubscribes from one of the supported events. */\n  off(event: 'time' | 'loop' | 'finish', listener: Listener<any>): void {\n    this.lottie.off(event, listener);\n  }\n\n  // Getters/Setters\n\n  get playing(): boolean {\n    return this.lottie.playing;\n  }\n  set playing(play: boolean) {\n    this.lottie.playing = play;\n  }\n\n  get loop(): boolean | number {\n    return this.lottie.loop;\n  }\n  set loop(loop: boolean | number) {\n    this.lottie.loop = loop;\n  }\n\n  get currentTime(): number {\n    return this.lottie.currentTime;\n  }\n  set currentTime(time: number) {\n    this.lottie.currentTime = time;\n  }\n\n  get currentFrame(): number {\n    return this.lottie.currentFrame;\n  }\n  set currentFrame(frame: number) {\n    this.lottie.currentFrame = frame;\n  }\n\n  get frameRate(): number {\n    return this.lottie.frameRate;\n  }\n\n  get duration(): number {\n    return this.lottie.duration;\n  }\n  get durationFrames(): number {\n    return this.lottie.durationFrames;\n  }\n\n  get direction(): 1 | -1 {\n    return this.lottie.direction;\n  }\n  set direction(direction: 1 | -1) {\n    this.lottie.direction = direction;\n  }\n\n  get speed(): number {\n    return this.lottie.speed;\n  }\n  set speed(speed: number) {\n    this.lottie.speed = speed;\n  }\n\n  get animation(): AnimationItem {\n    return this.lottie.animation;\n  }\n\n  get animationData(): LottieJSON | undefined {\n    return this.lottie.animationData;\n  }\n\n  get interactivity(): LottielabInteractivity | undefined {\n    return this.lottie.interactivity;\n  }\n}\n\nif (typeof window !== 'undefined' && !window.customElements.get('lottie-player')) {\n  window.customElements.define('lottie-player', LottieWeb);\n}\n\nexport * from '../common-exports';\nexport default LottieWeb;\n"],"names":["eventToString","e","event","target","name","EventEmitter","constructor","this","listeners","addListener","listener","push","removeListener","filter","l","hasListeners","length","removeAllListeners","emit","lottieFrameRate","lottie","fr","PlaybackDriver","playing","time","speed","direction","_loop","_loopsRemaining","Infinity","loopEvent","finishEvent","effectiveSegment","segment","_a","_duration","globalTimeToSegmentTime","from","to","Math","min","max","segmentTimeToGlobalTime","advance","ls","elapsed","eventsOut","_fps","op","ip","lottieDuration","segmentTime","newTime","events","durationOfSegment","loops","abs","floor","firstLoop","i","relativeTime","type","globalTime","undefined","play","pause","stop","seek","loop","seekToFrame","frame","frameRate","loopBetween","start","end","loopBetweenFrames","newLoop","currentTime","currentFrame","timeInSegment","frameInSegment","duration","durationFrames","animation","Error","animationData","toInteractive","toPlayback","on","off","parseError","token","position","TokenPrimitives","tokenPrimitives","lbp","detect","s","test","nud","_","value","parseFloat","led","p","left","operator","right","parse","operand","thenBranch","nextToken","pop","condition","elseBranch","expression","operands","peek","binaryOperators","precedence","separator","input","tokens","isWhitespace","segments","split","some","tokenPrimitive","Object","assign","tokenize","tokenIndex","parser","minPrecedence","currentToken","BuiltinSymbols","undefinedSymbol","evaluate","userDefinedSymbols","evaluateUnary","pow","evaluateBinary","_b","map","apply","defaultValues","playhead","mergeVariables","builtin","user","vars","key","val","x","y","universalLerp","a","b","t","Array","isArray","Float32Array","xa","closed","o","v","_length","_c","_d","Morphing","ops","renderer","WeakSet","elements","forEach","el","attach","attachToProp","self","effectsSequence","vrs","_caching","structuredClone","propType","offsetTime","keyframes","keyframesMetadata","sh","pv","addEffect","activeMorphs","slice","interpolateShape","morph","vr","otherFrame","round","getDuration","otherVal","interpolateValue","lastFrame","_lastKeyframeIndex","lastIndex","call","strength","console","warn","has","add","values","detach","ease","easing","curve","points","coeffs","reduce","acc","point","index","zipReduce","controlPoint1","controlPoint2","bezier.evaluate","easingToBezier","formulaToFunction","formula","defaultValue","parsedFormula","variables","playbackFor","state","driver","pb","speedControl","playheadControl","advanceStatePlayback","clock","playback","newVars","newLs","morphing","timeRemap","def","currTime","morphs","proportionalTimeRemap","other","wrapTimeRemap","clampTimeRemap","calculateMorphForState","onto","fromDuration","ontoDuration","progress","applyTransition","transition","advanceTransition","remainingMorphs","next","prevLs","prev","alpha","concat","InteractiveDriver","definition","builtinVariables","userVariables","transitionStartEvent","transitionEndEvent","_definition","initialState","states","enterState","setupMorphingForCurrentState","opts","force","sd","otherState","newPb","remainingDuration","getCurrentState","goToState","newState","prevState","prevSegment","startAt","newSegment","prevStateOrTransition","thisStateName","entries","find","oldTime","updateVariables","update","setUserVariables","handle","def.eventToString","goTo","getEffectiveState","pbEvents","d","dt","ENCLOSING_RECT_CLASS","clamp","InteractiveEventDispatcher","attachContinuousListeners","enclosingSvgRect","globalMouseMove","rect","getBoundingClientRect","handler","clientX","clientY","top","width","height","window","addEventListener","disposers","removeEventListener","globalMouseDown","buttons","globalMouseUp","attachListener","element","className","eventName","container","observedClassNames","currentClickableClassNames","svgElement","querySelector","viewBox","getAttribute","rootG","fullLottieRect","document","createElementNS","toString","setAttribute","insertBefore","firstChild","remove","seenClasses","Set","setClickableClassNames","classNames","setCursor","cursor","style","destroy","EasingPresets","Linear","Natural","BounceIn","BounceOut","Accelerate","SlowDown","FormulaInputs","onUpdate","set","get","clear","LottielabInteractivity","root","_transitionStartEvent","_transitionEndEvent","_userProvidedDefinition","_rootElement","_lottie","effectiveDefinition","_driver","_dispatcher","getObservedClassNames","getClickableClassNames","translateTransitionEvent","inputs","metadata","lottielabInteractivity","updateReactivity","stateDef","lookupStateName","findState","options","hasUserProvidedDefinition","resetDefinition","trigger","_destroy","_getDriver","__version","default","_name","flatMap","keys","includes","navigator","exports","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","createElement","extendPrototype","sources","destination","sourcePrototype","len","attr","prototype","hasOwnProperty","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","resume","setRate","rateValue","createAudio","assetPath","Howl","src","isPlaying","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","arr","createTypedArrayFactory","Int16Array","Uint8ClampedArray","createSizedArray","subframeEnabled","expressionsPlugin","idPrefix$1","isSafari","userAgent","bmPow","bmSqrt","sqrt","bmFloor","bmMin","defaultCurveSegments","degToRads","PI","roundCorner","BMEnterFrameEvent","totalTime","frameMultiplier","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","_count","createElementID","HSVtoRGB","h","r","g","f","q","RGBtoHSV","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","createNS","_typeof$2","obj","Symbol","iterator","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","path","data","_workerSelf","createWorker","fn","Worker","Blob","blob","url","URL","createObjectURL","setupWorker","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","id","comp","__used","JSON","stringify","ks","it","checkVersion","minimum","animVersionString","animVersion","minimumVersion","checkText","updateTextLayer","textLayer","documentData","iterateLayers","checkChars","charData","st","sr","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","c","checkShapes","completeClosingShapes","cl","completeData","__complete","moduleOb","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","indexOf","response","responseText","loadAsset","fullPath","callback","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","open","join","error","send","load","payload","process","onComplete","onError","createProcess","loadAnimation","processId","location","origin","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","getBBox","_imageLoaded","clearInterval","bind","createImageData","ob","setAttributeNS","_elementHelper","append","appendChild","createImgData","crossOrigin","createFootageData","footageData","_footageLoaded","loadAssets","cb","images","_createImageData","setPath","setAssetsPath","getAsset","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","BaseEvent","triggerEvent","args","_cbs","callbacks","splice","markerParser","parsePayloadLines","line","lines","keysCount","trim","_markers","markers","_marker","markerData","tm","dr","cm","__","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","compInterface","renderers","registerRenderer","getRenderer","getRegisteredRenderer","_typeof$1","AnimationItem","isLoaded","currentRawFrame","frameMult","playSpeed","playDirection","playCount","isPaused","autoplay","animationID","timeCompleted","segmentPos","isSubframeEnabled","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","wrapper","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","parseInt","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","substr","fileName","setData","wrapperAttributes","attributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","setTimeout","rendererType","initItems","gotoFrame","resize","_width","_height","updateContainerSize","setSubframe","renderFrame","resetFrame","triggerRenderFrameError","togglePause","setCurrentRawFrameValue","getMarkerData","markerName","marker","goToAndStop","isFrame","numValue","Number","isNaN","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSpeed","setDirection","setSegment","init","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","setLoop","isLooping","getPath","getAssetData","hide","show","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","elem","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","first","searchAnimations","standalone","animElements","getElementsByClassName","body","getElementsByTagName","innerText","div","freeze","unfreeze","BezierFactory","getBezierEasing","beziers","str","replace","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","_p","_mSampleValues","_precomputed","mY1","mY2","_precompute","_getTForX","_calcSampleValues","mSampleValues","intervalStart","currentSample","lastSample","guessForT","initialSlope","pooling","_double","double","poolFactory","initialLength","_create","_release","_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","lastPoint","lengthData","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","getPointInSegment","percent","t1","u1","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","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","minLen","_arrayLikeToArray","n","iter","arr2","lerp","p0","p1","amount","lerpPoint","addVectors","subtractVectors","normalizeVector","hypot","EPSILON","tangentDirection","ti","p3","controlPoints","firstSubdivision","deCasteljauSubdivision","secondSubdivision","tangent1","length1","tangent2","length2","tangent3","length3","result","initFrame","mathAbs","frameNum","caching","newValue","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","endValue","nextKeyTime","keyTime","ind","__fnct","startPoint","endPoint","tangent","ratio","cnt","_tangent","_ratio","_cnt","segmentPerc","distanceInLine","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","quaternionToEuler","slerp","createQuaternion","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","c1","cos","c2","c3","s1","s2","s3","getValueAtCurrentTime","renderedFrame","endTime","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","lock","_isFirstFrame","finalValue","kf","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","PropertyFactory","getProp","sid","slotManager","DynamicPropertyContainer","prop","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","shapePool","shapePath","clone","shape","cloned","factory","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shapesEqual","shape1","shape2","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","s0","_cw","_v","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","getConstructorFunction","getKeyframedConstructorFunction","Matrix","_cos","_sin","_tan","tan","_rnd","props","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","m","translate","tx","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof","setLocation","href","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","version","scripts","myScript","bodymovin","getFontProperties","fontData","styles","fStyle","fWeight","toLowerCase","weight","FontManager","maxWaitingTime","emptyChar","w","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","offsetWidth","parent","checkLoadedFonts","loadedCount","loaded","fOrigin","monoCase","sansCase","removeChild","Date","now","checkLoadedFontsBinded","setIsLoadedBinded","createHelper","helper","engine","fontProps","tHelper","fFamily","textContent","fClass","tCanvasHelper","OffscreenCanvas","measure","text","getComputedTextLength","measureText","list","cache","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","fPath","querySelectorAll","rel","sc","found","ch","getCharData","_char","charCodeAt","_warned","_char2","fontName","getFontByName","doubleSize","singleSize","fName","getCodePoint","string","codePoint","second","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isVariationSelector","isRegionalCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","count","setIsLoaded","Font","typekitLoaded","fontPrototype","SlotManager","slotFactory","RenderableElement","slots","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","blendModeEnums","getBlendMode","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","setBlendMode","blendModeValue","bm","baseElement","layerElement","layerId","effectsManager","getType","prepareProperties","isVisible","_isParent","getBaseElement","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","getElementById","pathValue","setupGlobalData","fontsContainer","animationItem","compSize","TransformPropertyFactory","defaultVector","applyToMatrix","mat","rz","ry","rx","px","py","pz","processKeys","forceRender","_isDirty","precalculateMatrix","pre","appliedTransformations","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","TransformProperty","getTransformProperty","effectTypes","TRANSFORM_EFFECT","TransformElement","MaskElement","maskElement","viewData","solidPath","expansor","feMorph","properties","currentMasks","maskType","maskRef","inv","lastPath","filterID","expan","lastOperator","filterId","lastRadius","mask","createLayerSolidPath","invRect","drawPath","maskedElement","initTransform","_matMdf","_localMatMdf","_opMdf","localMat","localOpacity","ao","renderTransform","finalMat","localTransforms","renderLocalTransform","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","idPrefix","SVGEffects","filterManager","source","filters","Effect","effect","countsAsEffect","registerEffect","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","maskManager","createRenderableComponents","getMatte","matteType","useElement","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","setMatte","initHierarchy","checkParenting","createContent","display","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","processShapes","searchProcessedElement","processedElements","addProcessedElement","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","initModifierProperties","addShapeToModifier","setAsAnimated","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","mProps","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","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","lj","ml","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","dist","SVGShapeElement","shapesData","stylesList","itemsData","animatedContents","LetterProps","sw","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","tr","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","reloadShapes","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","_render","renderShape","animatedContent","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","anIndexes","animatorJustifyOffset","extra","animatorData","letterData","based","animators","indexes","fh","fs","fb","rn","totalChars","newInd","currentInd","random","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getTextSelectorProp","getMult","textProperty","easer","tot","smoothness","threshold","newCharsFlag","divisor","_s","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","prevPoint","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","rot","atan","textAnimator","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","validateText","buildNewText","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","config","ariaLabel","title","titleElement","titleId","description","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","focusable","filterSize","runExpressions","destroyed","TrimModifier","SVGComposableEffect","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","feMerge","createMergeNode","SVGGaussianBlurEffect","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","String","fromCharCode","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","findIndexByInd","appendElementInPos","elementIndex","tp","matteMask","nextElement","setElements","elems","getElements","destroyElements","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","shapePaths","totalShapeLength","edges","newShapesData","addShapes","lastShape","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","resultId","ins","feMergeNode","col","distance","kBlurrinessToSigma","sigma","dimensions","sigmaX","sigmaY","edgeMode","X_LOTTIE_PLAYER_ORIGIN_WHITELIST","EMPTY_LOTTIE","ddd","LottieRenderer","initialize","_initWithAnimation","_animation","loadingSrc","Promise","resolve","re","match","setRequestHeader","reject","onload","innerHTML","statusText","message","onerror","clampedFrame","DrivenLottieRenderer","animationFrame","onFrameBound","onFrame","timeMultiplier","timeEvent","_state","then","advanceToNow","refresh","catch","setState","timeChanged","morphChanged","newDriver","prevClock","cancelAnimationFrame","prevTime","base","realNow","performance","getTime","prevRealTime","durationInFrames","diff","LottiePlayer","timeEventListener","_impl","_renderer","interactivity","isInteractive","hadUserProvidedDefinition","oldDefinition","destroyImpl","createInteractiveImpl","createPlaybackImpl","_updateTimeMultiplier","timeSeconds","timeSeconds1","timeSeconds2","frame1","frame2","LottieReact","forwardRef","ref","player","useRef","isInitialized","setIsInitialized","useState","useCallback","current","isDriven","handleInitialize","onSuccess","useEffect","onLoad","onTime","onLoop","onFinish","onTransitionStart","onTransitionEnd","React","LottieWeb","HTMLElement","observedAttributes","super","loadEvent","CustomEvent","bubbles","cancelable","attachShadow","shadowRoot","updateStyles","intrinsicSize","attributeChangedCallback","oldValue","dispatchEvent","detail","finally","convertLoopAttribute","convertDirectionAttribute","loopAttribute","directionAttribute","disconnectedCallback","customElements","define"],"mappings":"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","x_google_ignoreList":[11]}