{"version":3,"file":"main-86c87022.js","sources":["../../src/scripts/helpers/debounce.ts","../../src/scripts/parts/header.ts","../../src/scripts/parts/navigation.ts","../../node_modules/lottie-web/build/player/lottie.js","../../src/scripts/parts/footer.ts","../../src/scripts/parts/search.ts","../../src/scripts/modules/accordion-group.ts","../../src/scripts/modules/divider.ts","../../src/scripts/modules/event.ts","../../node_modules/slick-carousel/slick/slick.js","../../src/scripts/modules/events.ts","../../src/scripts/modules/events-list.ts","../../src/scripts/modules/gallery-slider.ts","../../node_modules/@splidejs/splide/dist/js/splide.esm.js","../../src/scripts/modules/hero.ts","../../src/scripts/modules/news.ts","../../src/scripts/modules/news-list.ts","../../src/scripts/modules/people-search.ts","../../src/scripts/modules/people-featured.ts","../../src/scripts/helpers/sticky-observer.ts","../../src/scripts/modules/alumni-search.ts","../../src/scripts/modules/works-search.ts","../../src/scripts/modules/quotes.ts","../../src/scripts/modules/section-slider.ts","../../src/scripts/elements/designs.ts","../../src/scripts/elements/typography.ts","../../src/scripts/elements/iframes.ts","../../src/main.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyFunction = (...args: any[]) => any;\n\nfunction debounce<F extends AnyFunction>(\n  func: F,\n  wait: number,\n  immediate: boolean = false\n): (...args: Parameters<F>) => void {\n  let timeout: NodeJS.Timeout | null = null;\n\n  return function(this: ThisParameterType<F>, ...args: Parameters<F>): void {\n    const callNow = immediate && !timeout;\n\n    const later = () => {\n      timeout = null;\n      if (!immediate) func.apply(this, args);\n    };\n\n    if (timeout) {\n      clearTimeout(timeout);\n    }\n\n    timeout = setTimeout(later, wait);\n\n    if (callNow) {\n      func.apply(this, args);\n    }\n  };\n}\n\nexport default debounce;\n","import Headroom from 'headroom.js';\nimport debounce from '@/scripts/helpers/debounce';\n\ntype Header = {\n  headroom: Headroom | null;\n  elements: {\n    body: HTMLBodyElement | null;\n    header: HTMLElement | null;\n    logo: HTMLElement | null;\n    search: HTMLElement | null;\n    searchToggle: HTMLButtonElement | null\n    subnav: HTMLElement | null;\n    modules: HTMLElement[];\n    links: HTMLAnchorElement[];\n  };\n  init: () => void;\n  bindEvents: () => void;\n  toggleClassOnScroll: (element: HTMLElement, className: string) => void;\n  handleSearchToggle: () => void;\n  handleAddSecondaryMenu: () => void;\n  handleRemoveSecondaryMenu: () => void;\n  checkForOverflow: () => void;\n  getClosestModule: () => HTMLElement | null;\n  updateActiveMenuItem: () => void;\n};\n\nconst header: Header = {\n  headroom: null,\n\n  elements: {\n    body: document.querySelector('body'),\n    header: document.querySelector('.site-header'),\n    logo: document.querySelector('.site-branding'),\n    search: document.querySelector('.site-search'),\n    searchToggle: document.querySelector('.site-search [data-action=\"search-toggle\"]'),\n    subnav: document.querySelector('.module__hero .module__menu'),\n    modules: Array.from(document.querySelectorAll('.module[id]:not([id=\"\"])')),\n    links: []\n  },\n\n  init() {\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    window.addEventListener('scroll', debounce(() => this.updateActiveMenuItem(), 250));\n    window.addEventListener('resize', debounce(() => this.checkForOverflow(), 250));\n\n    if(this.elements.searchToggle) {\n      this.elements.searchToggle.addEventListener('click', () => this.handleSearchToggle());\n    }\n\n    if(!this.elements.header) return;\n\n    this.toggleClassOnScroll(this.elements.header, 'headroom--not-top');\n\n    // const options = {\n    //   offset: 80,\n    //   tolerance : {\n    //     up : 30,\n    //     down : 0\n    //   },\n    //   classes: {\n    //     notTop: 'header-not-top',\n    //     pinned: 'header-pinned',\n    //   },\n    //   onPin : () => {\n    //     // this.elements.body?.classList.add('header-pinned');\n    //   },\n    //   onUnpin : () => {\n    //     // this.elements.body?.classList.remove('header-pinned');\n    //   },\n    //   onNotTop : () => {\n    //     this.handleAddSecondaryMenu();\n    //     // this.elements.body?.classList.add('header-not-top');\n    //   },\n    //   onTop : () => {\n    //     this.handleRemoveSecondaryMenu();\n    //     // this.elements.body?.classList.remove('header-not-top');\n    //     this.elements.header?.classList.remove('will-scroll');\n    //   }\n    // };\n\n    // this.headroom = new Headroom(this.elements.header, options);\n    // this.headroom.init();\n  },\n\n  toggleClassOnScroll(element: HTMLElement, className: string, threshold: number = 40): void {\n    let lastScrollPosition = 0;\n\n    if (!element) {\n      console.error('Element not found');\n      return;\n    }\n\n    const handleScroll = () => {\n      const currentScrollPosition = window.pageYOffset || document.documentElement.scrollTop;\n\n      if (Math.abs(currentScrollPosition - lastScrollPosition) <= threshold) {\n        // Ignore small scroll changes\n        return;\n      }\n\n      if (currentScrollPosition > 80) {\n        if (currentScrollPosition > lastScrollPosition) {\n          // Scrolling down\n          this.handleAddSecondaryMenu();\n          this.elements.body?.classList.add('header-not-top');\n          element?.classList.add(className);\n        } else {\n          // Scrolling up, but not near the top\n          // element?.classList.remove(className);\n          // element?.classList.remove('will-scroll');\n          // Keep 'header-not-top' class\n        }\n      } else {\n        // Less than or equal to 80px from the top\n        this.handleRemoveSecondaryMenu();\n        this.elements.body?.classList.remove('header-not-top');\n        element?.classList.remove(className);\n        element?.classList.remove('will-scroll');\n      }\n\n      lastScrollPosition = currentScrollPosition;\n    };\n\n    // Throttle the scroll event\n    let ticking = false;\n    window.addEventListener('scroll', () => {\n      if (!ticking) {\n        window.requestAnimationFrame(() => {\n          handleScroll();\n          ticking = false;\n        });\n        ticking = true;\n      }\n    });\n\n    // Initial check\n    handleScroll();\n  },\n\n  handleSearchToggle() {\n    if(!this.elements.search) return;\n\n    this.elements.search.classList.toggle('is-open');\n    this.elements.search.querySelector('input')?.focus();\n  },\n\n  handleAddSecondaryMenu() {\n    if (!this.elements.logo || !this.elements.subnav) return;\n\n    // Remove existing secondary menu if it exists\n    this.handleRemoveSecondaryMenu();\n\n    const menu = document.createElement('div');\n    menu.classList.add('site-secondary-menu');\n    menu.innerHTML = this.elements.subnav.innerHTML;\n    this.elements.logo.insertAdjacentElement('afterend', menu);\n\n    // Use requestAnimationFrame to ensure DOM has updated\n    requestAnimationFrame(() => {\n      this.elements.links = Array.from(menu.querySelectorAll('a'));\n      const overview = this.elements.links[0];\n      if (overview) overview.classList.add('active');\n      this.checkForOverflow();\n    });\n  },\n\n  handleRemoveSecondaryMenu() {\n    const secondaryMenu = document.querySelector('.site-secondary-menu');\n    if (secondaryMenu) {\n      // Remove event listeners if any were added\n      secondaryMenu.remove();\n    }\n    this.elements.links = [];\n  },\n\n  checkForOverflow() {\n    const secondaryMenu = document.querySelector('.site-secondary-menu');\n    if(!secondaryMenu) return;\n\n    if(secondaryMenu.scrollWidth > secondaryMenu.clientWidth) {\n      this.elements.header?.classList.add('will-scroll');\n    } else {\n      this.elements.header?.classList.remove('will-scroll');\n    }\n  },\n\n  getClosestModule() {\n    let closest: HTMLElement | null = null;\n    let closestDistance = Infinity;\n\n    this.elements.modules.forEach(module => {\n        const distance = Math.abs(module.getBoundingClientRect().top);\n        if (distance < closestDistance) {\n            closest = module;\n            closestDistance = distance;\n        }\n    });\n\n    return closest;\n  },\n\n  updateActiveMenuItem() {\n    if(this.elements.links.length === 0 || this.elements.modules.length === 0) return;\n\n    const scrollPosition = window.scrollY;\n    const windowHeight = window.innerHeight;\n    const headerHeight = this.elements.header?.offsetHeight || 0;\n\n    let activeIndex = 0;\n\n    for (let i = 0; i < this.elements.modules.length; i++) {\n      const module = this.elements.modules[i];\n      const moduleTop = module.offsetTop - headerHeight;\n      const moduleBottom = moduleTop + module.offsetHeight;\n\n      if (scrollPosition >= moduleTop && scrollPosition < moduleBottom) {\n        activeIndex = i + 1; // +1 because the first link is for the overview\n        break;\n      }\n    }\n\n    // If we're above the first section, set the overview (first link) as active\n    if (scrollPosition < this.elements.modules[0].offsetTop - headerHeight) {\n      activeIndex = 0;\n    }\n\n    // If we're at the bottom of the page, set the last link as active\n    if (scrollPosition + windowHeight >= document.documentElement.scrollHeight) {\n      activeIndex = this.elements.links.length - 1;\n    }\n\n    this.elements.links.forEach((link, index) => {\n      if (index === activeIndex) {\n        link.classList.add('active');\n      } else {\n        link.classList.remove('active');\n      }\n    });\n  }\n};\n\nexport default header;\n","type Elements = {\n  body: HTMLElement | null;\n  header: HTMLElement | null;\n  nav: HTMLElement | null;\n  menuToggles: HTMLButtonElement[];\n  menuItems: HTMLLIElement[];\n};\n\ntype Navigation = {\n  elements: Elements;\n  init: () => void;\n  bindEvents: () => void;\n  handleMenuToggleClick: (toggle: HTMLButtonElement) => void;\n  handleMenuItemClick: (item: HTMLLIElement) => void;\n};\n\nconst navigation: Navigation = {\n  elements: {\n    body: document.querySelector('body'),\n    header: document.querySelector('.site-header'),\n    nav: document.querySelector('.site-menu nav'),\n    menuToggles: Array.from(document.querySelectorAll('[data-action=\"menu-toggle\"]')),\n    menuItems: Array.from(document.querySelectorAll('.site-menu nav > ul > li'))\n  },\n\n  init() {\n    if (!this.elements.body || !this.elements.header || !this.elements.nav || !this.elements.menuToggles.length) {\n      return;\n    }\n\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    /* Set up the menu toggle(s) */\n    this.elements.menuToggles.forEach((button) => {\n      button.addEventListener('click', () => this.handleMenuToggleClick(button));\n    });\n\n    /* Set up the menu items */\n    this.elements.menuItems.forEach((item) => {\n      const button = item.querySelector('button[data-action=\"submenu-toggle\"]');\n\n      if(!button) {\n        return;\n      }\n\n      button.addEventListener('click', () => this.handleMenuItemClick(item));\n    });\n  },\n\n  handleMenuToggleClick(toggle) {\n    const label = toggle.querySelector('.site-menu__toggle--label');\n    this.elements.header?.classList.toggle('site-menu--is-open');\n\n    if (!label) {\n      return;\n    }\n\n    if (this.elements.header?.classList.contains('site-menu--is-open')) {\n      this.elements.body?.classList.add('no-scroll');\n      label.textContent = 'Close';\n    } else {\n      this.elements.body?.classList.remove('no-scroll');\n      label.textContent = 'Menu';\n    }\n  },\n\n  handleMenuItemClick(activeItem) {\n    const wasOpen = activeItem.classList.contains('site-menu__item--is-open');\n\n    this.elements.menuItems.forEach((item) => {\n      if (wasOpen) {\n        // If the active item was open (and will close), remove 'is-closed' and 'is-open' from all items\n        item.classList.remove('site-menu__item--is-closed');\n        item.classList.remove('site-menu__item--is-open');\n      } else {\n        // If the active item was closed (and will open), handle each item appropriately\n        if (item !== activeItem) {\n          item.classList.add('site-menu__item--is-closed');\n          item.classList.remove('site-menu__item--is-open');\n        } else {\n          item.classList.remove('site-menu__item--is-closed');\n        }\n      }\n    });\n\n    // Toggle the open state of the active item\n    if (!wasOpen) {\n      activeItem.classList.add('site-menu__item--is-open');\n    }\n  }\n\n};\n\nexport default navigation;\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n  var svgNS = 'http://www.w3.org/2000/svg';\n  var locationHref = '';\n  var _useWebWorker = false;\n  var initialDefaultFrame = -999999;\n\n  var setWebWorker = function setWebWorker(flag) {\n    _useWebWorker = !!flag;\n  };\n\n  var getWebWorker = function getWebWorker() {\n    return _useWebWorker;\n  };\n\n  var setLocationHref = function setLocationHref(value) {\n    locationHref = value;\n  };\n\n  var getLocationHref = function getLocationHref() {\n    return locationHref;\n  };\n\n  function createTag(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElement(type);\n  }\n\n  function extendPrototype(sources, destination) {\n    var i;\n    var len = sources.length;\n    var sourcePrototype;\n\n    for (i = 0; i < len; i += 1) {\n      sourcePrototype = sources[i].prototype;\n\n      for (var attr in sourcePrototype) {\n        if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n      }\n    }\n  }\n\n  function getDescriptor(object, prop) {\n    return Object.getOwnPropertyDescriptor(object, prop);\n  }\n\n  function createProxyFunction(prototype) {\n    function ProxyFunction() {}\n\n    ProxyFunction.prototype = prototype;\n    return ProxyFunction;\n  }\n\n  // import Howl from '../../3rd_party/howler';\n  var audioControllerFactory = function () {\n    function AudioController(audioFactory) {\n      this.audios = [];\n      this.audioFactory = audioFactory;\n      this._volume = 1;\n      this._isMuted = false;\n    }\n\n    AudioController.prototype = {\n      addAudio: function addAudio(audio) {\n        this.audios.push(audio);\n      },\n      pause: function pause() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].pause();\n        }\n      },\n      resume: function resume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].resume();\n        }\n      },\n      setRate: function setRate(rateValue) {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].setRate(rateValue);\n        }\n      },\n      createAudio: function createAudio(assetPath) {\n        if (this.audioFactory) {\n          return this.audioFactory(assetPath);\n        }\n\n        if (window.Howl) {\n          return new window.Howl({\n            src: [assetPath]\n          });\n        }\n\n        return {\n          isPlaying: false,\n          play: function play() {\n            this.isPlaying = true;\n          },\n          seek: function seek() {\n            this.isPlaying = false;\n          },\n          playing: function playing() {},\n          rate: function rate() {},\n          setVolume: function setVolume() {}\n        };\n      },\n      setAudioFactory: function setAudioFactory(audioFactory) {\n        this.audioFactory = audioFactory;\n      },\n      setVolume: function setVolume(value) {\n        this._volume = value;\n\n        this._updateVolume();\n      },\n      mute: function mute() {\n        this._isMuted = true;\n\n        this._updateVolume();\n      },\n      unmute: function unmute() {\n        this._isMuted = false;\n\n        this._updateVolume();\n      },\n      getVolume: function getVolume() {\n        return this._volume;\n      },\n      _updateVolume: function _updateVolume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n        }\n      }\n    };\n    return function () {\n      return new AudioController();\n    };\n  }();\n\n  var createTypedArray = function () {\n    function createRegularArray(type, len) {\n      var i = 0;\n      var arr = [];\n      var value;\n\n      switch (type) {\n        case 'int16':\n        case 'uint8c':\n          value = 1;\n          break;\n\n        default:\n          value = 1.1;\n          break;\n      }\n\n      for (i = 0; i < len; i += 1) {\n        arr.push(value);\n      }\n\n      return arr;\n    }\n\n    function createTypedArrayFactory(type, len) {\n      if (type === 'float32') {\n        return new Float32Array(len);\n      }\n\n      if (type === 'int16') {\n        return new Int16Array(len);\n      }\n\n      if (type === 'uint8c') {\n        return new Uint8ClampedArray(len);\n      }\n\n      return createRegularArray(type, len);\n    }\n\n    if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n      return createTypedArrayFactory;\n    }\n\n    return createRegularArray;\n  }();\n\n  function createSizedArray(len) {\n    return Array.apply(null, {\n      length: len\n    });\n  }\n\n  function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n  var subframeEnabled = true;\n  var expressionsPlugin = null;\n  var expressionsInterfaces = null;\n  var idPrefix$1 = '';\n  var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  var _shouldRoundValues = false;\n  var bmPow = Math.pow;\n  var bmSqrt = Math.sqrt;\n  var bmFloor = Math.floor;\n  var bmMax = Math.max;\n  var bmMin = Math.min;\n  var BMMath = {};\n\n  (function () {\n    var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n    var i;\n    var len = propertyNames.length;\n\n    for (i = 0; i < len; i += 1) {\n      BMMath[propertyNames[i]] = Math[propertyNames[i]];\n    }\n  })();\n\n  function ProjectInterface$1() {\n    return {};\n  }\n\n  BMMath.random = Math.random;\n\n  BMMath.abs = function (val) {\n    var tOfVal = _typeof$6(val);\n\n    if (tOfVal === 'object' && val.length) {\n      var absArr = createSizedArray(val.length);\n      var i;\n      var len = val.length;\n\n      for (i = 0; i < len; i += 1) {\n        absArr[i] = Math.abs(val[i]);\n      }\n\n      return absArr;\n    }\n\n    return Math.abs(val);\n  };\n\n  var defaultCurveSegments = 150;\n  var degToRads = Math.PI / 180;\n  var roundCorner = 0.5519;\n\n  function roundValues(flag) {\n    _shouldRoundValues = !!flag;\n  }\n\n  function bmRnd(value) {\n    if (_shouldRoundValues) {\n      return Math.round(value);\n    }\n\n    return value;\n  }\n\n  function styleDiv(element) {\n    element.style.position = 'absolute';\n    element.style.top = 0;\n    element.style.left = 0;\n    element.style.display = 'block';\n    element.style.transformOrigin = '0 0';\n    element.style.webkitTransformOrigin = '0 0';\n    element.style.backfaceVisibility = 'visible';\n    element.style.webkitBackfaceVisibility = 'visible';\n    element.style.transformStyle = 'preserve-3d';\n    element.style.webkitTransformStyle = 'preserve-3d';\n    element.style.mozTransformStyle = 'preserve-3d';\n  }\n\n  function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n    this.type = type;\n    this.currentTime = currentTime;\n    this.totalTime = totalTime;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteEvent(type, frameMultiplier) {\n    this.type = type;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n    this.type = type;\n    this.currentLoop = currentLoop;\n    this.totalLoops = totalLoops;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n    this.type = type;\n    this.firstFrame = firstFrame;\n    this.totalFrames = totalFrames;\n  }\n\n  function BMDestroyEvent(type, target) {\n    this.type = type;\n    this.target = target;\n  }\n\n  function BMRenderFrameErrorEvent(nativeError, currentTime) {\n    this.type = 'renderFrameError';\n    this.nativeError = nativeError;\n    this.currentTime = currentTime;\n  }\n\n  function BMConfigErrorEvent(nativeError) {\n    this.type = 'configError';\n    this.nativeError = nativeError;\n  }\n\n  function BMAnimationConfigErrorEvent(type, nativeError) {\n    this.type = type;\n    this.nativeError = nativeError;\n  }\n\n  var createElementID = function () {\n    var _count = 0;\n    return function createID() {\n      _count += 1;\n      return idPrefix$1 + '__lottie_element_' + _count;\n    };\n  }();\n\n  function HSVtoRGB(h, s, v) {\n    var r;\n    var g;\n    var b;\n    var i;\n    var f;\n    var p;\n    var q;\n    var t;\n    i = Math.floor(h * 6);\n    f = h * 6 - i;\n    p = v * (1 - s);\n    q = v * (1 - f * s);\n    t = v * (1 - (1 - f) * s);\n\n    switch (i % 6) {\n      case 0:\n        r = v;\n        g = t;\n        b = p;\n        break;\n\n      case 1:\n        r = q;\n        g = v;\n        b = p;\n        break;\n\n      case 2:\n        r = p;\n        g = v;\n        b = t;\n        break;\n\n      case 3:\n        r = p;\n        g = q;\n        b = v;\n        break;\n\n      case 4:\n        r = t;\n        g = p;\n        b = v;\n        break;\n\n      case 5:\n        r = v;\n        g = p;\n        b = q;\n        break;\n\n      default:\n        break;\n    }\n\n    return [r, g, b];\n  }\n\n  function RGBtoHSV(r, g, b) {\n    var max = Math.max(r, g, b);\n    var min = Math.min(r, g, b);\n    var d = max - min;\n    var h;\n    var s = max === 0 ? 0 : d / max;\n    var v = max / 255;\n\n    switch (max) {\n      case min:\n        h = 0;\n        break;\n\n      case r:\n        h = g - b + d * (g < b ? 6 : 0);\n        h /= 6 * d;\n        break;\n\n      case g:\n        h = b - r + d * 2;\n        h /= 6 * d;\n        break;\n\n      case b:\n        h = r - g + d * 4;\n        h /= 6 * d;\n        break;\n\n      default:\n        break;\n    }\n\n    return [h, s, v];\n  }\n\n  function addSaturationToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[1] += offset;\n\n    if (hsv[1] > 1) {\n      hsv[1] = 1;\n    } else if (hsv[1] <= 0) {\n      hsv[1] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addBrightnessToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[2] += offset;\n\n    if (hsv[2] > 1) {\n      hsv[2] = 1;\n    } else if (hsv[2] < 0) {\n      hsv[2] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addHueToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[0] += offset / 360;\n\n    if (hsv[0] > 1) {\n      hsv[0] -= 1;\n    } else if (hsv[0] < 0) {\n      hsv[0] += 1;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  var rgbToHex = function () {\n    var colorMap = [];\n    var i;\n    var hex;\n\n    for (i = 0; i < 256; i += 1) {\n      hex = i.toString(16);\n      colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n    }\n\n    return function (r, g, b) {\n      if (r < 0) {\n        r = 0;\n      }\n\n      if (g < 0) {\n        g = 0;\n      }\n\n      if (b < 0) {\n        b = 0;\n      }\n\n      return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n    };\n  }();\n\n  var setSubframeEnabled = function setSubframeEnabled(flag) {\n    subframeEnabled = !!flag;\n  };\n\n  var getSubframeEnabled = function getSubframeEnabled() {\n    return subframeEnabled;\n  };\n\n  var setExpressionsPlugin = function setExpressionsPlugin(value) {\n    expressionsPlugin = value;\n  };\n\n  var getExpressionsPlugin = function getExpressionsPlugin() {\n    return expressionsPlugin;\n  };\n\n  var setExpressionInterfaces = function setExpressionInterfaces(value) {\n    expressionsInterfaces = value;\n  };\n\n  var getExpressionInterfaces = function getExpressionInterfaces() {\n    return expressionsInterfaces;\n  };\n\n  var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n    defaultCurveSegments = value;\n  };\n\n  var getDefaultCurveSegments = function getDefaultCurveSegments() {\n    return defaultCurveSegments;\n  };\n\n  var setIdPrefix = function setIdPrefix(value) {\n    idPrefix$1 = value;\n  };\n\n  var getIdPrefix = function getIdPrefix() {\n    return idPrefix$1;\n  };\n\n  function createNS(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElementNS(svgNS, type);\n  }\n\n  function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n  var dataManager = function () {\n    var _counterId = 1;\n    var processes = [];\n    var workerFn;\n    var workerInstance;\n    var workerProxy = {\n      onmessage: function onmessage() {},\n      postMessage: function postMessage(path) {\n        workerFn({\n          data: path\n        });\n      }\n    };\n    var _workerSelf = {\n      postMessage: function postMessage(data) {\n        workerProxy.onmessage({\n          data: data\n        });\n      }\n    };\n\n    function createWorker(fn) {\n      if (window.Worker && window.Blob && getWebWorker()) {\n        var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n          type: 'text/javascript'\n        }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n        var url = URL.createObjectURL(blob);\n        return new Worker(url);\n      }\n\n      workerFn = fn;\n      return workerProxy;\n    }\n\n    function setupWorker() {\n      if (!workerInstance) {\n        workerInstance = createWorker(function workerStart(e) {\n          function dataFunctionManager() {\n            function completeLayers(layers, comps) {\n              var layerData;\n              var i;\n              var len = layers.length;\n              var j;\n              var jLen;\n              var k;\n              var kLen;\n\n              for (i = 0; i < len; i += 1) {\n                layerData = layers[i];\n\n                if ('ks' in layerData && !layerData.completed) {\n                  layerData.completed = true;\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        convertPathsToAbsoluteValues(maskProps[j].pt.k);\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 0) {\n                    layerData.layers = findCompLayers(layerData.refId, comps);\n                    completeLayers(layerData.layers, comps);\n                  } else if (layerData.ty === 4) {\n                    completeShapes(layerData.shapes);\n                  } else if (layerData.ty === 5) {\n                    completeText(layerData);\n                  }\n                }\n              }\n            }\n\n            function completeChars(chars, assets) {\n              if (chars) {\n                var i = 0;\n                var len = chars.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (chars[i].t === 1) {\n                    // var compData = findComp(chars[i].data.refId, assets);\n                    chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n                    // chars[i].data.op = 99999;\n                    // chars[i].data.st = 0;\n                    // chars[i].data.sr = 1;\n                    // chars[i].w = compData.w;\n                    // chars[i].data.ks = {\n                    //   a: { k: [0, 0, 0], a: 0 },\n                    //   p: { k: [0, -compData.h, 0], a: 0 },\n                    //   r: { k: 0, a: 0 },\n                    //   s: { k: [100, 100], a: 0 },\n                    //   o: { k: 100, a: 0 },\n                    // };\n\n                    completeLayers(chars[i].data.layers, assets);\n                  }\n                }\n              }\n            }\n\n            function findComp(id, comps) {\n              var i = 0;\n              var len = comps.length;\n\n              while (i < len) {\n                if (comps[i].id === id) {\n                  return comps[i];\n                }\n\n                i += 1;\n              }\n\n              return null;\n            }\n\n            function findCompLayers(id, comps) {\n              var comp = findComp(id, comps);\n\n              if (comp) {\n                if (!comp.layers.__used) {\n                  comp.layers.__used = true;\n                  return comp.layers;\n                }\n\n                return JSON.parse(JSON.stringify(comp.layers));\n              }\n\n              return null;\n            }\n\n            function completeShapes(arr) {\n              var i;\n              var len = arr.length;\n              var j;\n              var jLen;\n\n              for (i = len - 1; i >= 0; i -= 1) {\n                if (arr[i].ty === 'sh') {\n                  if (arr[i].ks.k.i) {\n                    convertPathsToAbsoluteValues(arr[i].ks.k);\n                  } else {\n                    jLen = arr[i].ks.k.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (arr[i].ks.k[j].s) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n                      }\n\n                      if (arr[i].ks.k[j].e) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n                      }\n                    }\n                  }\n                } else if (arr[i].ty === 'gr') {\n                  completeShapes(arr[i].it);\n                }\n              }\n            }\n\n            function convertPathsToAbsoluteValues(path) {\n              var i;\n              var len = path.i.length;\n\n              for (i = 0; i < len; i += 1) {\n                path.i[i][0] += path.v[i][0];\n                path.i[i][1] += path.v[i][1];\n                path.o[i][0] += path.v[i][0];\n                path.o[i][1] += path.v[i][1];\n              }\n            }\n\n            function checkVersion(minimum, animVersionString) {\n              var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n              if (minimum[0] > animVersion[0]) {\n                return true;\n              }\n\n              if (animVersion[0] > minimum[0]) {\n                return false;\n              }\n\n              if (minimum[1] > animVersion[1]) {\n                return true;\n              }\n\n              if (animVersion[1] > minimum[1]) {\n                return false;\n              }\n\n              if (minimum[2] > animVersion[2]) {\n                return true;\n              }\n\n              if (animVersion[2] > minimum[2]) {\n                return false;\n              }\n\n              return null;\n            }\n\n            var checkText = function () {\n              var minimumVersion = [4, 4, 14];\n\n              function updateTextLayer(textLayer) {\n                var documentData = textLayer.t.d;\n                textLayer.t.d = {\n                  k: [{\n                    s: documentData,\n                    t: 0\n                  }]\n                };\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkChars = function () {\n              var minimumVersion = [4, 7, 99];\n              return function (animationData) {\n                if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n                  var i;\n                  var len = animationData.chars.length;\n\n                  for (i = 0; i < len; i += 1) {\n                    var charData = animationData.chars[i];\n\n                    if (charData.data && charData.data.shapes) {\n                      completeShapes(charData.data.shapes);\n                      charData.data.ip = 0;\n                      charData.data.op = 99999;\n                      charData.data.st = 0;\n                      charData.data.sr = 1;\n                      charData.data.ks = {\n                        p: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        s: {\n                          k: [100, 100],\n                          a: 0\n                        },\n                        a: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        r: {\n                          k: 0,\n                          a: 0\n                        },\n                        o: {\n                          k: 100,\n                          a: 0\n                        }\n                      };\n\n                      if (!animationData.chars[i].t) {\n                        charData.data.shapes.push({\n                          ty: 'no'\n                        });\n                        charData.data.shapes[0].it.push({\n                          p: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          s: {\n                            k: [100, 100],\n                            a: 0\n                          },\n                          a: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          r: {\n                            k: 0,\n                            a: 0\n                          },\n                          o: {\n                            k: 100,\n                            a: 0\n                          },\n                          sk: {\n                            k: 0,\n                            a: 0\n                          },\n                          sa: {\n                            k: 0,\n                            a: 0\n                          },\n                          ty: 'tr'\n                        });\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkPathProperties = function () {\n              var minimumVersion = [5, 7, 15];\n\n              function updateTextLayer(textLayer) {\n                var pathData = textLayer.t.p;\n\n                if (typeof pathData.a === 'number') {\n                  pathData.a = {\n                    a: 0,\n                    k: pathData.a\n                  };\n                }\n\n                if (typeof pathData.p === 'number') {\n                  pathData.p = {\n                    a: 0,\n                    k: pathData.p\n                  };\n                }\n\n                if (typeof pathData.r === 'number') {\n                  pathData.r = {\n                    a: 0,\n                    k: pathData.r\n                  };\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkColors = function () {\n              var minimumVersion = [4, 1, 9];\n\n              function iterateShapes(shapes) {\n                var i;\n                var len = shapes.length;\n                var j;\n                var jLen;\n\n                for (i = 0; i < len; i += 1) {\n                  if (shapes[i].ty === 'gr') {\n                    iterateShapes(shapes[i].it);\n                  } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n                    if (shapes[i].c.k && shapes[i].c.k[0].i) {\n                      jLen = shapes[i].c.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (shapes[i].c.k[j].s) {\n                          shapes[i].c.k[j].s[0] /= 255;\n                          shapes[i].c.k[j].s[1] /= 255;\n                          shapes[i].c.k[j].s[2] /= 255;\n                          shapes[i].c.k[j].s[3] /= 255;\n                        }\n\n                        if (shapes[i].c.k[j].e) {\n                          shapes[i].c.k[j].e[0] /= 255;\n                          shapes[i].c.k[j].e[1] /= 255;\n                          shapes[i].c.k[j].e[2] /= 255;\n                          shapes[i].c.k[j].e[3] /= 255;\n                        }\n                      }\n                    } else {\n                      shapes[i].c.k[0] /= 255;\n                      shapes[i].c.k[1] /= 255;\n                      shapes[i].c.k[2] /= 255;\n                      shapes[i].c.k[3] /= 255;\n                    }\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 4) {\n                    iterateShapes(layers[i].shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkShapes = function () {\n              var minimumVersion = [4, 4, 18];\n\n              function completeClosingShapes(arr) {\n                var i;\n                var len = arr.length;\n                var j;\n                var jLen;\n\n                for (i = len - 1; i >= 0; i -= 1) {\n                  if (arr[i].ty === 'sh') {\n                    if (arr[i].ks.k.i) {\n                      arr[i].ks.k.c = arr[i].closed;\n                    } else {\n                      jLen = arr[i].ks.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (arr[i].ks.k[j].s) {\n                          arr[i].ks.k[j].s[0].c = arr[i].closed;\n                        }\n\n                        if (arr[i].ks.k[j].e) {\n                          arr[i].ks.k[j].e[0].c = arr[i].closed;\n                        }\n                      }\n                    }\n                  } else if (arr[i].ty === 'gr') {\n                    completeClosingShapes(arr[i].it);\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var layerData;\n                var i;\n                var len = layers.length;\n                var j;\n                var jLen;\n                var k;\n                var kLen;\n\n                for (i = 0; i < len; i += 1) {\n                  layerData = layers[i];\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        maskProps[j].pt.k.c = maskProps[j].cl;\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 4) {\n                    completeClosingShapes(layerData.shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            function completeData(animationData) {\n              if (animationData.__complete) {\n                return;\n              }\n\n              checkColors(animationData);\n              checkText(animationData);\n              checkChars(animationData);\n              checkPathProperties(animationData);\n              checkShapes(animationData);\n              completeLayers(animationData.layers, animationData.assets);\n              completeChars(animationData.chars, animationData.assets);\n              animationData.__complete = true;\n            }\n\n            function completeText(data) {\n              if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n              }\n            }\n\n            var moduleOb = {};\n            moduleOb.completeData = completeData;\n            moduleOb.checkColors = checkColors;\n            moduleOb.checkChars = checkChars;\n            moduleOb.checkPathProperties = checkPathProperties;\n            moduleOb.checkShapes = checkShapes;\n            moduleOb.completeLayers = completeLayers;\n            return moduleOb;\n          }\n\n          if (!_workerSelf.dataManager) {\n            _workerSelf.dataManager = dataFunctionManager();\n          }\n\n          if (!_workerSelf.assetLoader) {\n            _workerSelf.assetLoader = function () {\n              function formatResponse(xhr) {\n                // using typeof doubles the time of execution of this method,\n                // so if available, it's better to use the header to validate the type\n                var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n                if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n                  return xhr.response;\n                }\n\n                if (xhr.response && _typeof$5(xhr.response) === 'object') {\n                  return xhr.response;\n                }\n\n                if (xhr.response && typeof xhr.response === 'string') {\n                  return JSON.parse(xhr.response);\n                }\n\n                if (xhr.responseText) {\n                  return JSON.parse(xhr.responseText);\n                }\n\n                return null;\n              }\n\n              function loadAsset(path, fullPath, callback, errorCallback) {\n                var response;\n                var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n                try {\n                  // This crashes on Android WebView prior to KitKat\n                  xhr.responseType = 'json';\n                } catch (err) {} // eslint-disable-line no-empty\n\n\n                xhr.onreadystatechange = function () {\n                  if (xhr.readyState === 4) {\n                    if (xhr.status === 200) {\n                      response = formatResponse(xhr);\n                      callback(response);\n                    } else {\n                      try {\n                        response = formatResponse(xhr);\n                        callback(response);\n                      } catch (err) {\n                        if (errorCallback) {\n                          errorCallback(err);\n                        }\n                      }\n                    }\n                  }\n                };\n\n                try {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), path, true);\n                } catch (error) {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);\n                }\n\n                xhr.send();\n              }\n\n              return {\n                load: loadAsset\n              };\n            }();\n          }\n\n          if (e.data.type === 'loadAnimation') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.dataManager.completeData(data);\n\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          } else if (e.data.type === 'complete') {\n            var animation = e.data.animation;\n\n            _workerSelf.dataManager.completeData(animation);\n\n            _workerSelf.postMessage({\n              id: e.data.id,\n              payload: animation,\n              status: 'success'\n            });\n          } else if (e.data.type === 'loadData') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          }\n        });\n\n        workerInstance.onmessage = function (event) {\n          var data = event.data;\n          var id = data.id;\n          var process = processes[id];\n          processes[id] = null;\n\n          if (data.status === 'success') {\n            process.onComplete(data.payload);\n          } else if (process.onError) {\n            process.onError();\n          }\n        };\n      }\n    }\n\n    function createProcess(onComplete, onError) {\n      _counterId += 1;\n      var id = 'processId_' + _counterId;\n      processes[id] = {\n        onComplete: onComplete,\n        onError: onError\n      };\n      return id;\n    }\n\n    function loadAnimation(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadAnimation',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function loadData(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadData',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function completeAnimation(anim, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'complete',\n        animation: anim,\n        id: processId\n      });\n    }\n\n    return {\n      loadAnimation: loadAnimation,\n      loadData: loadData,\n      completeAnimation: completeAnimation\n    };\n  }();\n\n  var ImagePreloader = function () {\n    var proxyImage = function () {\n      var canvas = createTag('canvas');\n      canvas.width = 1;\n      canvas.height = 1;\n      var ctx = canvas.getContext('2d');\n      ctx.fillStyle = 'rgba(0,0,0,0)';\n      ctx.fillRect(0, 0, 1, 1);\n      return canvas;\n    }();\n\n    function imageLoaded() {\n      this.loadedAssets += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function footageLoaded() {\n      this.loadedFootagesCount += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function getAssetsPath(assetData, assetsPath, originalPath) {\n      var path = '';\n\n      if (assetData.e) {\n        path = assetData.p;\n      } else if (assetsPath) {\n        var imagePath = assetData.p;\n\n        if (imagePath.indexOf('images/') !== -1) {\n          imagePath = imagePath.split('/')[1];\n        }\n\n        path = assetsPath + imagePath;\n      } else {\n        path = originalPath;\n        path += assetData.u ? assetData.u : '';\n        path += assetData.p;\n      }\n\n      return path;\n    }\n\n    function testImageLoaded(img) {\n      var _count = 0;\n      var intervalId = setInterval(function () {\n        var box = img.getBBox();\n\n        if (box.width || _count > 500) {\n          this._imageLoaded();\n\n          clearInterval(intervalId);\n        }\n\n        _count += 1;\n      }.bind(this), 50);\n    }\n\n    function createImageData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createNS('image');\n\n      if (isSafari) {\n        this.testImageLoaded(img);\n      } else {\n        img.addEventListener('load', this._imageLoaded, false);\n      }\n\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n      if (this._elementHelper.append) {\n        this._elementHelper.append(img);\n      } else {\n        this._elementHelper.appendChild(img);\n      }\n\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createImgData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createTag('img');\n      img.crossOrigin = 'anonymous';\n      img.addEventListener('load', this._imageLoaded, false);\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.src = path;\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createFootageData(data) {\n      var ob = {\n        assetData: data\n      };\n      var path = getAssetsPath(data, this.assetsPath, this.path);\n      dataManager.loadData(path, function (footageData) {\n        ob.img = footageData;\n\n        this._footageLoaded();\n      }.bind(this), function () {\n        ob.img = {};\n\n        this._footageLoaded();\n      }.bind(this));\n      return ob;\n    }\n\n    function loadAssets(assets, cb) {\n      this.imagesLoadedCb = cb;\n      var i;\n      var len = assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (!assets[i].layers) {\n          if (!assets[i].t || assets[i].t === 'seq') {\n            this.totalImages += 1;\n            this.images.push(this._createImageData(assets[i]));\n          } else if (assets[i].t === 3) {\n            this.totalFootages += 1;\n            this.images.push(this.createFootageData(assets[i]));\n          }\n        }\n      }\n    }\n\n    function setPath(path) {\n      this.path = path || '';\n    }\n\n    function setAssetsPath(path) {\n      this.assetsPath = path || '';\n    }\n\n    function getAsset(assetData) {\n      var i = 0;\n      var len = this.images.length;\n\n      while (i < len) {\n        if (this.images[i].assetData === assetData) {\n          return this.images[i].img;\n        }\n\n        i += 1;\n      }\n\n      return null;\n    }\n\n    function destroy() {\n      this.imagesLoadedCb = null;\n      this.images.length = 0;\n    }\n\n    function loadedImages() {\n      return this.totalImages === this.loadedAssets;\n    }\n\n    function loadedFootages() {\n      return this.totalFootages === this.loadedFootagesCount;\n    }\n\n    function setCacheType(type, elementHelper) {\n      if (type === 'svg') {\n        this._elementHelper = elementHelper;\n        this._createImageData = this.createImageData.bind(this);\n      } else {\n        this._createImageData = this.createImgData.bind(this);\n      }\n    }\n\n    function ImagePreloaderFactory() {\n      this._imageLoaded = imageLoaded.bind(this);\n      this._footageLoaded = footageLoaded.bind(this);\n      this.testImageLoaded = testImageLoaded.bind(this);\n      this.createFootageData = createFootageData.bind(this);\n      this.assetsPath = '';\n      this.path = '';\n      this.totalImages = 0;\n      this.totalFootages = 0;\n      this.loadedAssets = 0;\n      this.loadedFootagesCount = 0;\n      this.imagesLoadedCb = null;\n      this.images = [];\n    }\n\n    ImagePreloaderFactory.prototype = {\n      loadAssets: loadAssets,\n      setAssetsPath: setAssetsPath,\n      setPath: setPath,\n      loadedImages: loadedImages,\n      loadedFootages: loadedFootages,\n      destroy: destroy,\n      getAsset: getAsset,\n      createImgData: createImgData,\n      createImageData: createImageData,\n      imageLoaded: imageLoaded,\n      footageLoaded: footageLoaded,\n      setCacheType: setCacheType\n    };\n    return ImagePreloaderFactory;\n  }();\n\n  function BaseEvent() {}\n\n  BaseEvent.prototype = {\n    triggerEvent: function triggerEvent(eventName, args) {\n      if (this._cbs[eventName]) {\n        var callbacks = this._cbs[eventName];\n\n        for (var i = 0; i < callbacks.length; i += 1) {\n          callbacks[i](args);\n        }\n      }\n    },\n    addEventListener: function addEventListener(eventName, callback) {\n      if (!this._cbs[eventName]) {\n        this._cbs[eventName] = [];\n      }\n\n      this._cbs[eventName].push(callback);\n\n      return function () {\n        this.removeEventListener(eventName, callback);\n      }.bind(this);\n    },\n    removeEventListener: function removeEventListener(eventName, callback) {\n      if (!callback) {\n        this._cbs[eventName] = null;\n      } else if (this._cbs[eventName]) {\n        var i = 0;\n        var len = this._cbs[eventName].length;\n\n        while (i < len) {\n          if (this._cbs[eventName][i] === callback) {\n            this._cbs[eventName].splice(i, 1);\n\n            i -= 1;\n            len -= 1;\n          }\n\n          i += 1;\n        }\n\n        if (!this._cbs[eventName].length) {\n          this._cbs[eventName] = null;\n        }\n      }\n    }\n  };\n\n  var markerParser = function () {\n    function parsePayloadLines(payload) {\n      var lines = payload.split('\\r\\n');\n      var keys = {};\n      var line;\n      var keysCount = 0;\n\n      for (var i = 0; i < lines.length; i += 1) {\n        line = lines[i].split(':');\n\n        if (line.length === 2) {\n          keys[line[0]] = line[1].trim();\n          keysCount += 1;\n        }\n      }\n\n      if (keysCount === 0) {\n        throw new Error();\n      }\n\n      return keys;\n    }\n\n    return function (_markers) {\n      var markers = [];\n\n      for (var i = 0; i < _markers.length; i += 1) {\n        var _marker = _markers[i];\n        var markerData = {\n          time: _marker.tm,\n          duration: _marker.dr\n        };\n\n        try {\n          markerData.payload = JSON.parse(_markers[i].cm);\n        } catch (_) {\n          try {\n            markerData.payload = parsePayloadLines(_markers[i].cm);\n          } catch (__) {\n            markerData.payload = {\n              name: _markers[i].cm\n            };\n          }\n        }\n\n        markers.push(markerData);\n      }\n\n      return markers;\n    };\n  }();\n\n  var ProjectInterface = function () {\n    function registerComposition(comp) {\n      this.compositions.push(comp);\n    }\n\n    return function () {\n      function _thisProjectFunction(name) {\n        var i = 0;\n        var len = this.compositions.length;\n\n        while (i < len) {\n          if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n            if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n              this.compositions[i].prepareFrame(this.currentFrame);\n            }\n\n            return this.compositions[i].compInterface;\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      _thisProjectFunction.compositions = [];\n      _thisProjectFunction.currentFrame = 0;\n      _thisProjectFunction.registerComposition = registerComposition;\n      return _thisProjectFunction;\n    };\n  }();\n\n  var renderers = {};\n\n  var registerRenderer = function registerRenderer(key, value) {\n    renderers[key] = value;\n  };\n\n  function getRenderer(key) {\n    return renderers[key];\n  }\n\n  function getRegisteredRenderer() {\n    // Returns canvas by default for compatibility\n    if (renderers.canvas) {\n      return 'canvas';\n    } // Returns any renderer that is registered\n\n\n    for (var key in renderers) {\n      if (renderers[key]) {\n        return key;\n      }\n    }\n\n    return '';\n  }\n\n  function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n  var AnimationItem = function AnimationItem() {\n    this._cbs = [];\n    this.name = '';\n    this.path = '';\n    this.isLoaded = false;\n    this.currentFrame = 0;\n    this.currentRawFrame = 0;\n    this.firstFrame = 0;\n    this.totalFrames = 0;\n    this.frameRate = 0;\n    this.frameMult = 0;\n    this.playSpeed = 1;\n    this.playDirection = 1;\n    this.playCount = 0;\n    this.animationData = {};\n    this.assets = [];\n    this.isPaused = true;\n    this.autoplay = false;\n    this.loop = true;\n    this.renderer = null;\n    this.animationID = createElementID();\n    this.assetsPath = '';\n    this.timeCompleted = 0;\n    this.segmentPos = 0;\n    this.isSubframeEnabled = getSubframeEnabled();\n    this.segments = [];\n    this._idle = true;\n    this._completedLoop = false;\n    this.projectInterface = ProjectInterface();\n    this.imagePreloader = new ImagePreloader();\n    this.audioController = audioControllerFactory();\n    this.markers = [];\n    this.configAnimation = this.configAnimation.bind(this);\n    this.onSetupError = this.onSetupError.bind(this);\n    this.onSegmentComplete = this.onSegmentComplete.bind(this);\n    this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n    this.expressionsPlugin = getExpressionsPlugin();\n  };\n\n  extendPrototype([BaseEvent], AnimationItem);\n\n  AnimationItem.prototype.setParams = function (params) {\n    if (params.wrapper || params.container) {\n      this.wrapper = params.wrapper || params.container;\n    }\n\n    var animType = 'svg';\n\n    if (params.animType) {\n      animType = params.animType;\n    } else if (params.renderer) {\n      animType = params.renderer;\n    }\n\n    var RendererClass = getRenderer(animType);\n    this.renderer = new RendererClass(this, params.rendererSettings);\n    this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n    this.renderer.setProjectInterface(this.projectInterface);\n    this.animType = animType;\n\n    if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n      this.loop = true;\n    } else if (params.loop === false) {\n      this.loop = false;\n    } else {\n      this.loop = parseInt(params.loop, 10);\n    }\n\n    this.autoplay = 'autoplay' in params ? params.autoplay : true;\n    this.name = params.name ? params.name : '';\n    this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n    this.assetsPath = params.assetsPath;\n    this.initialSegment = params.initialSegment;\n\n    if (params.audioFactory) {\n      this.audioController.setAudioFactory(params.audioFactory);\n    }\n\n    if (params.animationData) {\n      this.setupAnimation(params.animationData);\n    } else if (params.path) {\n      if (params.path.lastIndexOf('\\\\') !== -1) {\n        this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n      } else {\n        this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n      }\n\n      this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n      this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n      dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n    }\n  };\n\n  AnimationItem.prototype.onSetupError = function () {\n    this.trigger('data_failed');\n  };\n\n  AnimationItem.prototype.setupAnimation = function (data) {\n    dataManager.completeAnimation(data, this.configAnimation);\n  };\n\n  AnimationItem.prototype.setData = function (wrapper, animationData) {\n    if (animationData) {\n      if (_typeof$4(animationData) !== 'object') {\n        animationData = JSON.parse(animationData);\n      }\n    }\n\n    var params = {\n      wrapper: wrapper,\n      animationData: animationData\n    };\n    var wrapperAttributes = wrapper.attributes;\n    params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n    params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas';\n    var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n    if (loop === 'false') {\n      params.loop = false;\n    } else if (loop === 'true') {\n      params.loop = true;\n    } else if (loop !== '') {\n      params.loop = parseInt(loop, 10);\n    }\n\n    var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n    params.autoplay = autoplay !== 'false';\n    params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n    var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n    if (prerender === 'false') {\n      params.prerender = false;\n    }\n\n    if (!params.path) {\n      this.trigger('destroy');\n    } else {\n      this.setParams(params);\n    }\n  };\n\n  AnimationItem.prototype.includeLayers = function (data) {\n    if (data.op > this.animationData.op) {\n      this.animationData.op = data.op;\n      this.totalFrames = Math.floor(data.op - this.animationData.ip);\n    }\n\n    var layers = this.animationData.layers;\n    var i;\n    var len = layers.length;\n    var newLayers = data.layers;\n    var j;\n    var jLen = newLayers.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      i = 0;\n\n      while (i < len) {\n        if (layers[i].id === newLayers[j].id) {\n          layers[i] = newLayers[j];\n          break;\n        }\n\n        i += 1;\n      }\n    }\n\n    if (data.chars || data.fonts) {\n      this.renderer.globalData.fontManager.addChars(data.chars);\n      this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n    }\n\n    if (data.assets) {\n      len = data.assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.animationData.assets.push(data.assets[i]);\n      }\n    }\n\n    this.animationData.__complete = false;\n    dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n  };\n\n  AnimationItem.prototype.onSegmentComplete = function (data) {\n    this.animationData = data;\n    var expressionsPlugin = getExpressionsPlugin();\n\n    if (expressionsPlugin) {\n      expressionsPlugin.initExpressions(this);\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.loadNextSegment = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments || segments.length === 0 || !this.autoloadSegments) {\n      this.trigger('data_ready');\n      this.timeCompleted = this.totalFrames;\n      return;\n    }\n\n    var segment = segments.shift();\n    this.timeCompleted = segment.time * this.frameRate;\n    var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n    this.segmentPos += 1;\n    dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n      this.trigger('data_failed');\n    }.bind(this));\n  };\n\n  AnimationItem.prototype.loadSegments = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments) {\n      this.timeCompleted = this.totalFrames;\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.imagesLoaded = function () {\n    this.trigger('loaded_images');\n    this.checkLoaded();\n  };\n\n  AnimationItem.prototype.preloadImages = function () {\n    this.imagePreloader.setAssetsPath(this.assetsPath);\n    this.imagePreloader.setPath(this.path);\n    this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n  };\n\n  AnimationItem.prototype.configAnimation = function (animData) {\n    if (!this.renderer) {\n      return;\n    }\n\n    try {\n      this.animationData = animData;\n\n      if (this.initialSegment) {\n        this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n        this.firstFrame = Math.round(this.initialSegment[0]);\n      } else {\n        this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n        this.firstFrame = Math.round(this.animationData.ip);\n      }\n\n      this.renderer.configAnimation(animData);\n\n      if (!animData.assets) {\n        animData.assets = [];\n      }\n\n      this.assets = this.animationData.assets;\n      this.frameRate = this.animationData.fr;\n      this.frameMult = this.animationData.fr / 1000;\n      this.renderer.searchExtraCompositions(animData.assets);\n      this.markers = markerParser(animData.markers || []);\n      this.trigger('config_ready');\n      this.preloadImages();\n      this.loadSegments();\n      this.updaFrameModifier();\n      this.waitForFontsLoaded();\n\n      if (this.isPaused) {\n        this.audioController.pause();\n      }\n    } catch (error) {\n      this.triggerConfigError(error);\n    }\n  };\n\n  AnimationItem.prototype.waitForFontsLoaded = function () {\n    if (!this.renderer) {\n      return;\n    }\n\n    if (this.renderer.globalData.fontManager.isLoaded) {\n      this.checkLoaded();\n    } else {\n      setTimeout(this.waitForFontsLoaded.bind(this), 20);\n    }\n  };\n\n  AnimationItem.prototype.checkLoaded = function () {\n    if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n      this.isLoaded = true;\n      var expressionsPlugin = getExpressionsPlugin();\n\n      if (expressionsPlugin) {\n        expressionsPlugin.initExpressions(this);\n      }\n\n      this.renderer.initItems();\n      setTimeout(function () {\n        this.trigger('DOMLoaded');\n      }.bind(this), 0);\n      this.gotoFrame();\n\n      if (this.autoplay) {\n        this.play();\n      }\n    }\n  };\n\n  AnimationItem.prototype.resize = function (width, height) {\n    // Adding this validation for backwards compatibility in case an event object was being passed down\n    var _width = typeof width === 'number' ? width : undefined;\n\n    var _height = typeof height === 'number' ? height : undefined;\n\n    this.renderer.updateContainerSize(_width, _height);\n  };\n\n  AnimationItem.prototype.setSubframe = function (flag) {\n    this.isSubframeEnabled = !!flag;\n  };\n\n  AnimationItem.prototype.gotoFrame = function () {\n    this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n    if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n      this.currentFrame = this.timeCompleted;\n    }\n\n    this.trigger('enterFrame');\n    this.renderFrame();\n    this.trigger('drawnFrame');\n  };\n\n  AnimationItem.prototype.renderFrame = function () {\n    if (this.isLoaded === false || !this.renderer) {\n      return;\n    }\n\n    try {\n      if (this.expressionsPlugin) {\n        this.expressionsPlugin.resetFrame();\n      }\n\n      this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n    } catch (error) {\n      this.triggerRenderFrameError(error);\n    }\n  };\n\n  AnimationItem.prototype.play = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.isPaused = false;\n      this.trigger('_play');\n      this.audioController.resume();\n\n      if (this._idle) {\n        this._idle = false;\n        this.trigger('_active');\n      }\n    }\n  };\n\n  AnimationItem.prototype.pause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === false) {\n      this.isPaused = true;\n      this.trigger('_pause');\n      this._idle = true;\n      this.trigger('_idle');\n      this.audioController.pause();\n    }\n  };\n\n  AnimationItem.prototype.togglePause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.play();\n    } else {\n      this.pause();\n    }\n  };\n\n  AnimationItem.prototype.stop = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.pause();\n    this.playCount = 0;\n    this._completedLoop = false;\n    this.setCurrentRawFrameValue(0);\n  };\n\n  AnimationItem.prototype.getMarkerData = function (markerName) {\n    var marker;\n\n    for (var i = 0; i < this.markers.length; i += 1) {\n      marker = this.markers[i];\n\n      if (marker.payload && marker.payload.name === markerName) {\n        return marker;\n      }\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        this.goToAndStop(marker.time, true);\n      }\n    } else if (isFrame) {\n      this.setCurrentRawFrameValue(value);\n    } else {\n      this.setCurrentRawFrameValue(value * this.frameModifier);\n    }\n\n    this.pause();\n  };\n\n  AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        if (!marker.duration) {\n          this.goToAndStop(marker.time, true);\n        } else {\n          this.playSegments([marker.time, marker.time + marker.duration], true);\n        }\n      }\n    } else {\n      this.goToAndStop(numValue, isFrame, name);\n    }\n\n    this.play();\n  };\n\n  AnimationItem.prototype.advanceTime = function (value) {\n    if (this.isPaused === true || this.isLoaded === false) {\n      return;\n    }\n\n    var nextValue = this.currentRawFrame + value * this.frameModifier;\n    var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n    // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n    if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n      if (!this.loop || this.playCount === this.loop) {\n        if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n          _isComplete = true;\n          nextValue = this.totalFrames - 1;\n        }\n      } else if (nextValue >= this.totalFrames) {\n        this.playCount += 1;\n\n        if (!this.checkSegments(nextValue % this.totalFrames)) {\n          this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n          this._completedLoop = true;\n          this.trigger('loopComplete');\n        }\n      } else {\n        this.setCurrentRawFrameValue(nextValue);\n      }\n    } else if (nextValue < 0) {\n      if (!this.checkSegments(nextValue % this.totalFrames)) {\n        if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n          // eslint-disable-line no-plusplus\n          this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n          if (!this._completedLoop) {\n            this._completedLoop = true;\n          } else {\n            this.trigger('loopComplete');\n          }\n        } else {\n          _isComplete = true;\n          nextValue = 0;\n        }\n      }\n    } else {\n      this.setCurrentRawFrameValue(nextValue);\n    }\n\n    if (_isComplete) {\n      this.setCurrentRawFrameValue(nextValue);\n      this.pause();\n      this.trigger('complete');\n    }\n  };\n\n  AnimationItem.prototype.adjustSegment = function (arr, offset) {\n    this.playCount = 0;\n\n    if (arr[1] < arr[0]) {\n      if (this.frameModifier > 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(-1);\n        }\n      }\n\n      this.totalFrames = arr[0] - arr[1];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[1];\n      this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n    } else if (arr[1] > arr[0]) {\n      if (this.frameModifier < 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(1);\n        }\n      }\n\n      this.totalFrames = arr[1] - arr[0];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[0];\n      this.setCurrentRawFrameValue(0.001 + offset);\n    }\n\n    this.trigger('segmentStart');\n  };\n\n  AnimationItem.prototype.setSegment = function (init, end) {\n    var pendingFrame = -1;\n\n    if (this.isPaused) {\n      if (this.currentRawFrame + this.firstFrame < init) {\n        pendingFrame = init;\n      } else if (this.currentRawFrame + this.firstFrame > end) {\n        pendingFrame = end - init;\n      }\n    }\n\n    this.firstFrame = init;\n    this.totalFrames = end - init;\n    this.timeCompleted = this.totalFrames;\n\n    if (pendingFrame !== -1) {\n      this.goToAndStop(pendingFrame, true);\n    }\n  };\n\n  AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n    if (forceFlag) {\n      this.segments.length = 0;\n    }\n\n    if (_typeof$4(arr[0]) === 'object') {\n      var i;\n      var len = arr.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.segments.push(arr[i]);\n      }\n    } else {\n      this.segments.push(arr);\n    }\n\n    if (this.segments.length && forceFlag) {\n      this.adjustSegment(this.segments.shift(), 0);\n    }\n\n    if (this.isPaused) {\n      this.play();\n    }\n  };\n\n  AnimationItem.prototype.resetSegments = function (forceFlag) {\n    this.segments.length = 0;\n    this.segments.push([this.animationData.ip, this.animationData.op]);\n\n    if (forceFlag) {\n      this.checkSegments(0);\n    }\n  };\n\n  AnimationItem.prototype.checkSegments = function (offset) {\n    if (this.segments.length) {\n      this.adjustSegment(this.segments.shift(), offset);\n      return true;\n    }\n\n    return false;\n  };\n\n  AnimationItem.prototype.destroy = function (name) {\n    if (name && this.name !== name || !this.renderer) {\n      return;\n    }\n\n    this.renderer.destroy();\n    this.imagePreloader.destroy();\n    this.trigger('destroy');\n    this._cbs = null;\n    this.onEnterFrame = null;\n    this.onLoopComplete = null;\n    this.onComplete = null;\n    this.onSegmentStart = null;\n    this.onDestroy = null;\n    this.renderer = null;\n    this.expressionsPlugin = null;\n    this.imagePreloader = null;\n    this.projectInterface = null;\n  };\n\n  AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n    this.currentRawFrame = value;\n    this.gotoFrame();\n  };\n\n  AnimationItem.prototype.setSpeed = function (val) {\n    this.playSpeed = val;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setDirection = function (val) {\n    this.playDirection = val < 0 ? -1 : 1;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setLoop = function (isLooping) {\n    this.loop = isLooping;\n  };\n\n  AnimationItem.prototype.setVolume = function (val, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.setVolume(val);\n  };\n\n  AnimationItem.prototype.getVolume = function () {\n    return this.audioController.getVolume();\n  };\n\n  AnimationItem.prototype.mute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.mute();\n  };\n\n  AnimationItem.prototype.unmute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.unmute();\n  };\n\n  AnimationItem.prototype.updaFrameModifier = function () {\n    this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n    this.audioController.setRate(this.playSpeed * this.playDirection);\n  };\n\n  AnimationItem.prototype.getPath = function () {\n    return this.path;\n  };\n\n  AnimationItem.prototype.getAssetsPath = function (assetData) {\n    var path = '';\n\n    if (assetData.e) {\n      path = assetData.p;\n    } else if (this.assetsPath) {\n      var imagePath = assetData.p;\n\n      if (imagePath.indexOf('images/') !== -1) {\n        imagePath = imagePath.split('/')[1];\n      }\n\n      path = this.assetsPath + imagePath;\n    } else {\n      path = this.path;\n      path += assetData.u ? assetData.u : '';\n      path += assetData.p;\n    }\n\n    return path;\n  };\n\n  AnimationItem.prototype.getAssetData = function (id) {\n    var i = 0;\n    var len = this.assets.length;\n\n    while (i < len) {\n      if (id === this.assets[i].id) {\n        return this.assets[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.hide = function () {\n    this.renderer.hide();\n  };\n\n  AnimationItem.prototype.show = function () {\n    this.renderer.show();\n  };\n\n  AnimationItem.prototype.getDuration = function (isFrame) {\n    return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n  };\n\n  AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n    try {\n      var element = this.renderer.getElementByPath(path);\n      element.updateDocumentData(documentData, index);\n    } catch (error) {// TODO: decide how to handle catch case\n    }\n  };\n\n  AnimationItem.prototype.trigger = function (name) {\n    if (this._cbs && this._cbs[name]) {\n      switch (name) {\n        case 'enterFrame':\n          this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n          break;\n\n        case 'drawnFrame':\n          this.drawnFrameEvent.currentTime = this.currentFrame;\n          this.drawnFrameEvent.totalTime = this.totalFrames;\n          this.drawnFrameEvent.direction = this.frameModifier;\n          this.triggerEvent(name, this.drawnFrameEvent);\n          break;\n\n        case 'loopComplete':\n          this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n          break;\n\n        case 'complete':\n          this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n          break;\n\n        case 'segmentStart':\n          this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n          break;\n\n        case 'destroy':\n          this.triggerEvent(name, new BMDestroyEvent(name, this));\n          break;\n\n        default:\n          this.triggerEvent(name);\n      }\n    }\n\n    if (name === 'enterFrame' && this.onEnterFrame) {\n      this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n    }\n\n    if (name === 'loopComplete' && this.onLoopComplete) {\n      this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n    }\n\n    if (name === 'complete' && this.onComplete) {\n      this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n    }\n\n    if (name === 'segmentStart' && this.onSegmentStart) {\n      this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n    }\n\n    if (name === 'destroy' && this.onDestroy) {\n      this.onDestroy.call(this, new BMDestroyEvent(name, this));\n    }\n  };\n\n  AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n    var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  AnimationItem.prototype.triggerConfigError = function (nativeError) {\n    var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  var animationManager = function () {\n    var moduleOb = {};\n    var registeredAnimations = [];\n    var initTime = 0;\n    var len = 0;\n    var playingAnimationsNum = 0;\n    var _stopped = true;\n    var _isFrozen = false;\n\n    function removeElement(ev) {\n      var i = 0;\n      var animItem = ev.target;\n\n      while (i < len) {\n        if (registeredAnimations[i].animation === animItem) {\n          registeredAnimations.splice(i, 1);\n          i -= 1;\n          len -= 1;\n\n          if (!animItem.isPaused) {\n            subtractPlayingCount();\n          }\n        }\n\n        i += 1;\n      }\n    }\n\n    function registerAnimation(element, animationData) {\n      if (!element) {\n        return null;\n      }\n\n      var i = 0;\n\n      while (i < len) {\n        if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n          return registeredAnimations[i].animation;\n        }\n\n        i += 1;\n      }\n\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, element);\n      animItem.setData(element, animationData);\n      return animItem;\n    }\n\n    function getRegisteredAnimations() {\n      var i;\n      var lenAnims = registeredAnimations.length;\n      var animations = [];\n\n      for (i = 0; i < lenAnims; i += 1) {\n        animations.push(registeredAnimations[i].animation);\n      }\n\n      return animations;\n    }\n\n    function addPlayingCount() {\n      playingAnimationsNum += 1;\n      activate();\n    }\n\n    function subtractPlayingCount() {\n      playingAnimationsNum -= 1;\n    }\n\n    function setupAnimation(animItem, element) {\n      animItem.addEventListener('destroy', removeElement);\n      animItem.addEventListener('_active', addPlayingCount);\n      animItem.addEventListener('_idle', subtractPlayingCount);\n      registeredAnimations.push({\n        elem: element,\n        animation: animItem\n      });\n      len += 1;\n    }\n\n    function loadAnimation(params) {\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, null);\n      animItem.setParams(params);\n      return animItem;\n    }\n\n    function setSpeed(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setSpeed(val, animation);\n      }\n    }\n\n    function setDirection(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setDirection(val, animation);\n      }\n    }\n\n    function play(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.play(animation);\n      }\n    }\n\n    function resume(nowTime) {\n      var elapsedTime = nowTime - initTime;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.advanceTime(elapsedTime);\n      }\n\n      initTime = nowTime;\n\n      if (playingAnimationsNum && !_isFrozen) {\n        window.requestAnimationFrame(resume);\n      } else {\n        _stopped = true;\n      }\n    }\n\n    function first(nowTime) {\n      initTime = nowTime;\n      window.requestAnimationFrame(resume);\n    }\n\n    function pause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.pause(animation);\n      }\n    }\n\n    function goToAndStop(value, isFrame, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n      }\n    }\n\n    function stop(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.stop(animation);\n      }\n    }\n\n    function togglePause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.togglePause(animation);\n      }\n    }\n\n    function destroy(animation) {\n      var i;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        registeredAnimations[i].animation.destroy(animation);\n      }\n    }\n\n    function searchAnimations(animationData, standalone, renderer) {\n      var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n      var i;\n      var lenAnims = animElements.length;\n\n      for (i = 0; i < lenAnims; i += 1) {\n        if (renderer) {\n          animElements[i].setAttribute('data-bm-type', renderer);\n        }\n\n        registerAnimation(animElements[i], animationData);\n      }\n\n      if (standalone && lenAnims === 0) {\n        if (!renderer) {\n          renderer = 'svg';\n        }\n\n        var body = document.getElementsByTagName('body')[0];\n        body.innerText = '';\n        var div = createTag('div');\n        div.style.width = '100%';\n        div.style.height = '100%';\n        div.setAttribute('data-bm-type', renderer);\n        body.appendChild(div);\n        registerAnimation(div, animationData);\n      }\n    }\n\n    function resize() {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.resize();\n      }\n    }\n\n    function activate() {\n      if (!_isFrozen && playingAnimationsNum) {\n        if (_stopped) {\n          window.requestAnimationFrame(first);\n          _stopped = false;\n        }\n      }\n    }\n\n    function freeze() {\n      _isFrozen = true;\n    }\n\n    function unfreeze() {\n      _isFrozen = false;\n      activate();\n    }\n\n    function setVolume(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setVolume(val, animation);\n      }\n    }\n\n    function mute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.mute(animation);\n      }\n    }\n\n    function unmute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.unmute(animation);\n      }\n    }\n\n    moduleOb.registerAnimation = registerAnimation;\n    moduleOb.loadAnimation = loadAnimation;\n    moduleOb.setSpeed = setSpeed;\n    moduleOb.setDirection = setDirection;\n    moduleOb.play = play;\n    moduleOb.pause = pause;\n    moduleOb.stop = stop;\n    moduleOb.togglePause = togglePause;\n    moduleOb.searchAnimations = searchAnimations;\n    moduleOb.resize = resize; // moduleOb.start = start;\n\n    moduleOb.goToAndStop = goToAndStop;\n    moduleOb.destroy = destroy;\n    moduleOb.freeze = freeze;\n    moduleOb.unfreeze = unfreeze;\n    moduleOb.setVolume = setVolume;\n    moduleOb.mute = mute;\n    moduleOb.unmute = unmute;\n    moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n    return moduleOb;\n  }();\n\n  /* eslint-disable */\n  var BezierFactory = function () {\n    /**\r\n       * BezierEasing - use bezier curve for transition easing function\r\n       * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n       *\r\n       * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n       * Usage:\r\n       * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n       * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n       *\r\n       */\n    var ob = {};\n    ob.getBezierEasing = getBezierEasing;\n    var beziers = {};\n\n    function getBezierEasing(a, b, c, d, nm) {\n      var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n      if (beziers[str]) {\n        return beziers[str];\n      }\n\n      var bezEasing = new BezierEasing([a, b, c, d]);\n      beziers[str] = bezEasing;\n      return bezEasing;\n    } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n    var NEWTON_ITERATIONS = 4;\n    var NEWTON_MIN_SLOPE = 0.001;\n    var SUBDIVISION_PRECISION = 0.0000001;\n    var SUBDIVISION_MAX_ITERATIONS = 10;\n    var kSplineTableSize = 11;\n    var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n    var float32ArraySupported = typeof Float32Array === 'function';\n\n    function A(aA1, aA2) {\n      return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n    }\n\n    function B(aA1, aA2) {\n      return 3.0 * aA2 - 6.0 * aA1;\n    }\n\n    function C(aA1) {\n      return 3.0 * aA1;\n    } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n    function calcBezier(aT, aA1, aA2) {\n      return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n    } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n    function getSlope(aT, aA1, aA2) {\n      return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n    }\n\n    function binarySubdivide(aX, aA, aB, mX1, mX2) {\n      var currentX,\n          currentT,\n          i = 0;\n\n      do {\n        currentT = aA + (aB - aA) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n        if (currentX > 0.0) {\n          aB = currentT;\n        } else {\n          aA = currentT;\n        }\n      } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n      return currentT;\n    }\n\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n      for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n        var currentSlope = getSlope(aGuessT, mX1, mX2);\n        if (currentSlope === 0.0) return aGuessT;\n        var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n        aGuessT -= currentX / currentSlope;\n      }\n\n      return aGuessT;\n    }\n    /**\r\n       * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n       */\n\n\n    function BezierEasing(points) {\n      this._p = points;\n      this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n      this._precomputed = false;\n      this.get = this.get.bind(this);\n    }\n\n    BezierEasing.prototype = {\n      get: function get(x) {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        if (!this._precomputed) this._precompute();\n        if (mX1 === mY1 && mX2 === mY2) return x; // linear\n        // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n        if (x === 0) return 0;\n        if (x === 1) return 1;\n        return calcBezier(this._getTForX(x), mY1, mY2);\n      },\n      // Private part\n      _precompute: function _precompute() {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        this._precomputed = true;\n\n        if (mX1 !== mY1 || mX2 !== mY2) {\n          this._calcSampleValues();\n        }\n      },\n      _calcSampleValues: function _calcSampleValues() {\n        var mX1 = this._p[0],\n            mX2 = this._p[2];\n\n        for (var i = 0; i < kSplineTableSize; ++i) {\n          this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n        }\n      },\n\n      /**\r\n           * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n           */\n      _getTForX: function _getTForX(aX) {\n        var mX1 = this._p[0],\n            mX2 = this._p[2],\n            mSampleValues = this._mSampleValues;\n        var intervalStart = 0.0;\n        var currentSample = 1;\n        var lastSample = kSplineTableSize - 1;\n\n        for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n          intervalStart += kSampleStepSize;\n        }\n\n        --currentSample; // Interpolate to provide an initial guess for t\n\n        var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n        var guessForT = intervalStart + dist * kSampleStepSize;\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n          return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n\n        if (initialSlope === 0.0) {\n          return guessForT;\n        }\n\n        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n      }\n    };\n    return ob;\n  }();\n\n  var pooling = function () {\n    function _double(arr) {\n      return arr.concat(createSizedArray(arr.length));\n    }\n\n    return {\n      \"double\": _double\n    };\n  }();\n\n  var poolFactory = function () {\n    return function (initialLength, _create, _release) {\n      var _length = 0;\n      var _maxLength = initialLength;\n      var pool = createSizedArray(_maxLength);\n      var ob = {\n        newElement: newElement,\n        release: release\n      };\n\n      function newElement() {\n        var element;\n\n        if (_length) {\n          _length -= 1;\n          element = pool[_length];\n        } else {\n          element = _create();\n        }\n\n        return element;\n      }\n\n      function release(element) {\n        if (_length === _maxLength) {\n          pool = pooling[\"double\"](pool);\n          _maxLength *= 2;\n        }\n\n        if (_release) {\n          _release(element);\n        }\n\n        pool[_length] = element;\n        _length += 1;\n      }\n\n      return ob;\n    };\n  }();\n\n  var bezierLengthPool = function () {\n    function create() {\n      return {\n        addedLength: 0,\n        percents: createTypedArray('float32', getDefaultCurveSegments()),\n        lengths: createTypedArray('float32', getDefaultCurveSegments())\n      };\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  var segmentsLengthPool = function () {\n    function create() {\n      return {\n        lengths: [],\n        totalLength: 0\n      };\n    }\n\n    function release(element) {\n      var i;\n      var len = element.lengths.length;\n\n      for (i = 0; i < len; i += 1) {\n        bezierLengthPool.release(element.lengths[i]);\n      }\n\n      element.lengths.length = 0;\n    }\n\n    return poolFactory(8, create, release);\n  }();\n\n  function bezFunction() {\n    var math = Math;\n\n    function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n      var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n      return det1 > -0.001 && det1 < 0.001;\n    }\n\n    function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n      if (z1 === 0 && z2 === 0 && z3 === 0) {\n        return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n      }\n\n      var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n      var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n      var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n      var diffDist;\n\n      if (dist1 > dist2) {\n        if (dist1 > dist3) {\n          diffDist = dist1 - dist2 - dist3;\n        } else {\n          diffDist = dist3 - dist2 - dist1;\n        }\n      } else if (dist3 > dist2) {\n        diffDist = dist3 - dist2 - dist1;\n      } else {\n        diffDist = dist2 - dist1 - dist3;\n      }\n\n      return diffDist > -0.0001 && diffDist < 0.0001;\n    }\n\n    var getBezierLength = function () {\n      return function (pt1, pt2, pt3, pt4) {\n        var curveSegments = getDefaultCurveSegments();\n        var k;\n        var i;\n        var len;\n        var ptCoord;\n        var perc;\n        var addedLength = 0;\n        var ptDistance;\n        var point = [];\n        var lastPoint = [];\n        var lengthData = bezierLengthPool.newElement();\n        len = pt3.length;\n\n        for (k = 0; k < curveSegments; k += 1) {\n          perc = k / (curveSegments - 1);\n          ptDistance = 0;\n\n          for (i = 0; i < len; i += 1) {\n            ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n            point[i] = ptCoord;\n\n            if (lastPoint[i] !== null) {\n              ptDistance += bmPow(point[i] - lastPoint[i], 2);\n            }\n\n            lastPoint[i] = point[i];\n          }\n\n          if (ptDistance) {\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n          }\n\n          lengthData.percents[k] = perc;\n          lengthData.lengths[k] = addedLength;\n        }\n\n        lengthData.addedLength = addedLength;\n        return lengthData;\n      };\n    }();\n\n    function getSegmentsLength(shapeData) {\n      var segmentsLength = segmentsLengthPool.newElement();\n      var closed = shapeData.c;\n      var pathV = shapeData.v;\n      var pathO = shapeData.o;\n      var pathI = shapeData.i;\n      var i;\n      var len = shapeData._length;\n      var lengths = segmentsLength.lengths;\n      var totalLength = 0;\n\n      for (i = 0; i < len - 1; i += 1) {\n        lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      if (closed && len) {\n        lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      segmentsLength.totalLength = totalLength;\n      return segmentsLength;\n    }\n\n    function BezierData(length) {\n      this.segmentLength = 0;\n      this.points = new Array(length);\n    }\n\n    function PointData(partial, point) {\n      this.partialLength = partial;\n      this.point = point;\n    }\n\n    var buildBezierData = function () {\n      var storedData = {};\n      return function (pt1, pt2, pt3, pt4) {\n        var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n        if (!storedData[bezierName]) {\n          var curveSegments = getDefaultCurveSegments();\n          var k;\n          var i;\n          var len;\n          var ptCoord;\n          var perc;\n          var addedLength = 0;\n          var ptDistance;\n          var point;\n          var lastPoint = null;\n\n          if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n            curveSegments = 2;\n          }\n\n          var bezierData = new BezierData(curveSegments);\n          len = pt3.length;\n\n          for (k = 0; k < curveSegments; k += 1) {\n            point = createSizedArray(len);\n            perc = k / (curveSegments - 1);\n            ptDistance = 0;\n\n            for (i = 0; i < len; i += 1) {\n              ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n              point[i] = ptCoord;\n\n              if (lastPoint !== null) {\n                ptDistance += bmPow(point[i] - lastPoint[i], 2);\n              }\n            }\n\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n            bezierData.points[k] = new PointData(ptDistance, point);\n            lastPoint = point;\n          }\n\n          bezierData.segmentLength = addedLength;\n          storedData[bezierName] = bezierData;\n        }\n\n        return storedData[bezierName];\n      };\n    }();\n\n    function getDistancePerc(perc, bezierData) {\n      var percents = bezierData.percents;\n      var lengths = bezierData.lengths;\n      var len = percents.length;\n      var initPos = bmFloor((len - 1) * perc);\n      var lengthPos = perc * bezierData.addedLength;\n      var lPerc = 0;\n\n      if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n        return percents[initPos];\n      }\n\n      var dir = lengths[initPos] > lengthPos ? -1 : 1;\n      var flag = true;\n\n      while (flag) {\n        if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n          lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n          flag = false;\n        } else {\n          initPos += dir;\n        }\n\n        if (initPos < 0 || initPos >= len - 1) {\n          // FIX for TypedArrays that don't store floating point values with enough accuracy\n          if (initPos === len - 1) {\n            return percents[initPos];\n          }\n\n          flag = false;\n        }\n      }\n\n      return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n    }\n\n    function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n      var t1 = getDistancePerc(percent, bezierData);\n      var u1 = 1 - t1;\n      var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n      var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n      return [ptX, ptY];\n    }\n\n    var bezierSegmentPoints = createTypedArray('float32', 8);\n\n    function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n      if (startPerc < 0) {\n        startPerc = 0;\n      } else if (startPerc > 1) {\n        startPerc = 1;\n      }\n\n      var t0 = getDistancePerc(startPerc, bezierData);\n      endPerc = endPerc > 1 ? 1 : endPerc;\n      var t1 = getDistancePerc(endPerc, bezierData);\n      var i;\n      var len = pt1.length;\n      var u0 = 1 - t0;\n      var u1 = 1 - t1;\n      var u0u0u0 = u0 * u0 * u0;\n      var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0t0 = t0 * t0 * t0; //\n\n      var u0u0u1 = u0 * u0 * u1;\n      var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0t1 = t0 * t0 * t1; //\n\n      var u0u1u1 = u0 * u1 * u1;\n      var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1t1 = t0 * t1 * t1; //\n\n      var u1u1u1 = u1 * u1 * u1;\n      var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1t1 = t1 * t1 * t1;\n\n      for (i = 0; i < len; i += 1) {\n        bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n      }\n\n      return bezierSegmentPoints;\n    }\n\n    return {\n      getSegmentsLength: getSegmentsLength,\n      getNewSegment: getNewSegment,\n      getPointInSegment: getPointInSegment,\n      buildBezierData: buildBezierData,\n      pointOnLine2D: pointOnLine2D,\n      pointOnLine3D: pointOnLine3D\n    };\n  }\n\n  var bez = bezFunction();\n\n  var initFrame = initialDefaultFrame;\n  var mathAbs = Math.abs;\n\n  function interpolateValue(frameNum, caching) {\n    var offsetTime = this.offsetTime;\n    var newValue;\n\n    if (this.propType === 'multidimensional') {\n      newValue = createTypedArray('float32', this.pv.length);\n    }\n\n    var iterationIndex = caching.lastIndex;\n    var i = iterationIndex;\n    var len = this.keyframes.length - 1;\n    var flag = true;\n    var keyData;\n    var nextKeyData;\n    var keyframeMetadata;\n\n    while (flag) {\n      keyData = this.keyframes[i];\n      nextKeyData = this.keyframes[i + 1];\n\n      if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n        if (keyData.h) {\n          keyData = nextKeyData;\n        }\n\n        iterationIndex = 0;\n        break;\n      }\n\n      if (nextKeyData.t - offsetTime > frameNum) {\n        iterationIndex = i;\n        break;\n      }\n\n      if (i < len - 1) {\n        i += 1;\n      } else {\n        iterationIndex = 0;\n        flag = false;\n      }\n    }\n\n    keyframeMetadata = this.keyframesMetadata[i] || {};\n    var k;\n    var kLen;\n    var perc;\n    var jLen;\n    var j;\n    var fnc;\n    var nextKeyTime = nextKeyData.t - offsetTime;\n    var keyTime = keyData.t - offsetTime;\n    var endValue;\n\n    if (keyData.to) {\n      if (!keyframeMetadata.bezierData) {\n        keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n      }\n\n      var bezierData = keyframeMetadata.bezierData;\n\n      if (frameNum >= nextKeyTime || frameNum < keyTime) {\n        var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n        kLen = bezierData.points[ind].point.length;\n\n        for (k = 0; k < kLen; k += 1) {\n          newValue[k] = bezierData.points[ind].point[k];\n        } // caching._lastKeyframeIndex = -1;\n\n      } else {\n        if (keyframeMetadata.__fnct) {\n          fnc = keyframeMetadata.__fnct;\n        } else {\n          fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n          keyframeMetadata.__fnct = fnc;\n        }\n\n        perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n        var distanceInLine = bezierData.segmentLength * perc;\n        var segmentPerc;\n        var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n        j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n        flag = true;\n        jLen = bezierData.points.length;\n\n        while (flag) {\n          addedLength += bezierData.points[j].partialLength;\n\n          if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n            kLen = bezierData.points[j].point.length;\n\n            for (k = 0; k < kLen; k += 1) {\n              newValue[k] = bezierData.points[j].point[k];\n            }\n\n            break;\n          } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n            segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n            kLen = bezierData.points[j].point.length;\n\n            for (k = 0; k < kLen; k += 1) {\n              newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n            }\n\n            break;\n          }\n\n          if (j < jLen - 1) {\n            j += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        caching._lastPoint = j;\n        caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n        caching._lastKeyframeIndex = i;\n      }\n    } else {\n      var outX;\n      var outY;\n      var inX;\n      var inY;\n      var keyValue;\n      len = keyData.s.length;\n      endValue = nextKeyData.s || keyData.e;\n\n      if (this.sh && keyData.h !== 1) {\n        if (frameNum >= nextKeyTime) {\n          newValue[0] = endValue[0];\n          newValue[1] = endValue[1];\n          newValue[2] = endValue[2];\n        } else if (frameNum <= keyTime) {\n          newValue[0] = keyData.s[0];\n          newValue[1] = keyData.s[1];\n          newValue[2] = keyData.s[2];\n        } else {\n          var quatStart = createQuaternion(keyData.s);\n          var quatEnd = createQuaternion(endValue);\n          var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n          quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n        }\n      } else {\n        for (i = 0; i < len; i += 1) {\n          if (keyData.h !== 1) {\n            if (frameNum >= nextKeyTime) {\n              perc = 1;\n            } else if (frameNum < keyTime) {\n              perc = 0;\n            } else {\n              if (keyData.o.x.constructor === Array) {\n                if (!keyframeMetadata.__fnct) {\n                  keyframeMetadata.__fnct = [];\n                }\n\n                if (!keyframeMetadata.__fnct[i]) {\n                  outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n                  outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n                  inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n                  inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n                  fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                  keyframeMetadata.__fnct[i] = fnc;\n                } else {\n                  fnc = keyframeMetadata.__fnct[i];\n                }\n              } else if (!keyframeMetadata.__fnct) {\n                outX = keyData.o.x;\n                outY = keyData.o.y;\n                inX = keyData.i.x;\n                inY = keyData.i.y;\n                fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                keyData.keyframeMetadata = fnc;\n              } else {\n                fnc = keyframeMetadata.__fnct;\n              }\n\n              perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n            }\n          }\n\n          endValue = nextKeyData.s || keyData.e;\n          keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n          if (this.propType === 'multidimensional') {\n            newValue[i] = keyValue;\n          } else {\n            newValue = keyValue;\n          }\n        }\n      }\n    }\n\n    caching.lastIndex = iterationIndex;\n    return newValue;\n  } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n  function slerp(a, b, t) {\n    var out = [];\n    var ax = a[0];\n    var ay = a[1];\n    var az = a[2];\n    var aw = a[3];\n    var bx = b[0];\n    var by = b[1];\n    var bz = b[2];\n    var bw = b[3];\n    var omega;\n    var cosom;\n    var sinom;\n    var scale0;\n    var scale1;\n    cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n    if (cosom < 0.0) {\n      cosom = -cosom;\n      bx = -bx;\n      by = -by;\n      bz = -bz;\n      bw = -bw;\n    }\n\n    if (1.0 - cosom > 0.000001) {\n      omega = Math.acos(cosom);\n      sinom = Math.sin(omega);\n      scale0 = Math.sin((1.0 - t) * omega) / sinom;\n      scale1 = Math.sin(t * omega) / sinom;\n    } else {\n      scale0 = 1.0 - t;\n      scale1 = t;\n    }\n\n    out[0] = scale0 * ax + scale1 * bx;\n    out[1] = scale0 * ay + scale1 * by;\n    out[2] = scale0 * az + scale1 * bz;\n    out[3] = scale0 * aw + scale1 * bw;\n    return out;\n  }\n\n  function quaternionToEuler(out, quat) {\n    var qx = quat[0];\n    var qy = quat[1];\n    var qz = quat[2];\n    var qw = quat[3];\n    var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n    var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n    var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n    out[0] = heading / degToRads;\n    out[1] = attitude / degToRads;\n    out[2] = bank / degToRads;\n  }\n\n  function createQuaternion(values) {\n    var heading = values[0] * degToRads;\n    var attitude = values[1] * degToRads;\n    var bank = values[2] * degToRads;\n    var c1 = Math.cos(heading / 2);\n    var c2 = Math.cos(attitude / 2);\n    var c3 = Math.cos(bank / 2);\n    var s1 = Math.sin(heading / 2);\n    var s2 = Math.sin(attitude / 2);\n    var s3 = Math.sin(bank / 2);\n    var w = c1 * c2 * c3 - s1 * s2 * s3;\n    var x = s1 * s2 * c3 + c1 * c2 * s3;\n    var y = s1 * c2 * c3 + c1 * s2 * s3;\n    var z = c1 * s2 * c3 - s1 * c2 * s3;\n    return [x, y, z, w];\n  }\n\n  function getValueAtCurrentTime() {\n    var frameNum = this.comp.renderedFrame - this.offsetTime;\n    var initTime = this.keyframes[0].t - this.offsetTime;\n    var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n    if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n      if (this._caching.lastFrame >= frameNum) {\n        this._caching._lastKeyframeIndex = -1;\n        this._caching.lastIndex = 0;\n      }\n\n      var renderResult = this.interpolateValue(frameNum, this._caching);\n      this.pv = renderResult;\n    }\n\n    this._caching.lastFrame = frameNum;\n    return this.pv;\n  }\n\n  function setVValue(val) {\n    var multipliedValue;\n\n    if (this.propType === 'unidimensional') {\n      multipliedValue = val * this.mult;\n\n      if (mathAbs(this.v - multipliedValue) > 0.00001) {\n        this.v = multipliedValue;\n        this._mdf = true;\n      }\n    } else {\n      var i = 0;\n      var len = this.v.length;\n\n      while (i < len) {\n        multipliedValue = val[i] * this.mult;\n\n        if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n          this.v[i] = multipliedValue;\n          this._mdf = true;\n        }\n\n        i += 1;\n      }\n    }\n  }\n\n  function processEffectsSequence() {\n    if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n      return;\n    }\n\n    if (this.lock) {\n      this.setVValue(this.pv);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = this._isFirstFrame;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = this.kf ? this.pv : this.data.k;\n\n    for (i = 0; i < len; i += 1) {\n      finalValue = this.effectsSequence[i](finalValue);\n    }\n\n    this.setVValue(finalValue);\n    this._isFirstFrame = false;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  }\n\n  function addEffect(effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.container.addDynamicProperty(this);\n  }\n\n  function ValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this.v = mult ? data.k * mult : data.k;\n    this.pv = data.k;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.vel = 0;\n    this.effectsSequence = [];\n    this._isFirstFrame = true;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n\n  function MultiDimensionalProperty(elem, data, mult, container) {\n    this.propType = 'multidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.frameId = -1;\n    var i;\n    var len = data.k.length;\n    this.v = createTypedArray('float32', len);\n    this.pv = createTypedArray('float32', len);\n    this.vel = createTypedArray('float32', len);\n\n    for (i = 0; i < len; i += 1) {\n      this.v[i] = data.k[i] * this.mult;\n      this.pv[i] = data.k[i];\n    }\n\n    this._isFirstFrame = true;\n    this.effectsSequence = [];\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n\n  function KeyframedValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.keyframes = data.k;\n    this.keyframesMetadata = [];\n    this.offsetTime = elem.data.st;\n    this.frameId = -1;\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: 0,\n      _lastKeyframeIndex: -1\n    };\n    this.k = true;\n    this.kf = true;\n    this.data = data;\n    this.mult = mult || 1;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.v = initFrame;\n    this.pv = initFrame;\n    this._isFirstFrame = true;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.interpolateValue = interpolateValue;\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n    this.addEffect = addEffect;\n  }\n\n  function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n    this.propType = 'multidimensional';\n    var i;\n    var len = data.k.length;\n    var s;\n    var e;\n    var to;\n    var ti;\n\n    for (i = 0; i < len - 1; i += 1) {\n      if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n        s = data.k[i].s;\n        e = data.k[i + 1].s;\n        to = data.k[i].to;\n        ti = data.k[i].ti;\n\n        if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n          data.k[i].to = null;\n          data.k[i].ti = null;\n        }\n\n        if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n          if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n            data.k[i].to = null;\n            data.k[i].ti = null;\n          }\n        }\n      }\n    }\n\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n    this.data = data;\n    this.keyframes = data.k;\n    this.keyframesMetadata = [];\n    this.offsetTime = elem.data.st;\n    this.k = true;\n    this.kf = true;\n    this._isFirstFrame = true;\n    this.mult = mult || 1;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.interpolateValue = interpolateValue;\n    this.frameId = -1;\n    var arrLen = data.k[0].s.length;\n    this.v = createTypedArray('float32', arrLen);\n    this.pv = createTypedArray('float32', arrLen);\n\n    for (i = 0; i < arrLen; i += 1) {\n      this.v[i] = initFrame;\n      this.pv[i] = initFrame;\n    }\n\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: createTypedArray('float32', arrLen)\n    };\n    this.addEffect = addEffect;\n  }\n\n  var PropertyFactory = function () {\n    function getProp(elem, data, type, mult, container) {\n      if (data.sid) {\n        data = elem.globalData.slotManager.getProp(data);\n      }\n\n      var p;\n\n      if (!data.k.length) {\n        p = new ValueProperty(elem, data, mult, container);\n      } else if (typeof data.k[0] === 'number') {\n        p = new MultiDimensionalProperty(elem, data, mult, container);\n      } else {\n        switch (type) {\n          case 0:\n            p = new KeyframedValueProperty(elem, data, mult, container);\n            break;\n\n          case 1:\n            p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      if (p.effectsSequence.length) {\n        container.addDynamicProperty(p);\n      }\n\n      return p;\n    }\n\n    var ob = {\n      getProp: getProp\n    };\n    return ob;\n  }();\n\n  function DynamicPropertyContainer() {}\n\n  DynamicPropertyContainer.prototype = {\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n        this.container.addDynamicProperty(this);\n        this._isAnimated = true;\n      }\n    },\n    iterateDynamicProperties: function iterateDynamicProperties() {\n      this._mdf = false;\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.dynamicProperties[i].getValue();\n\n        if (this.dynamicProperties[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    },\n    initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n      this.container = container;\n      this.dynamicProperties = [];\n      this._mdf = false;\n      this._isAnimated = false;\n    }\n  };\n\n  var pointPool = function () {\n    function create() {\n      return createTypedArray('float32', 2);\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  function ShapePath() {\n    this.c = false;\n    this._length = 0;\n    this._maxLength = 8;\n    this.v = createSizedArray(this._maxLength);\n    this.o = createSizedArray(this._maxLength);\n    this.i = createSizedArray(this._maxLength);\n  }\n\n  ShapePath.prototype.setPathData = function (closed, len) {\n    this.c = closed;\n    this.setLength(len);\n    var i = 0;\n\n    while (i < len) {\n      this.v[i] = pointPool.newElement();\n      this.o[i] = pointPool.newElement();\n      this.i[i] = pointPool.newElement();\n      i += 1;\n    }\n  };\n\n  ShapePath.prototype.setLength = function (len) {\n    while (this._maxLength < len) {\n      this.doubleArrayLength();\n    }\n\n    this._length = len;\n  };\n\n  ShapePath.prototype.doubleArrayLength = function () {\n    this.v = this.v.concat(createSizedArray(this._maxLength));\n    this.i = this.i.concat(createSizedArray(this._maxLength));\n    this.o = this.o.concat(createSizedArray(this._maxLength));\n    this._maxLength *= 2;\n  };\n\n  ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n    var arr;\n    this._length = Math.max(this._length, pos + 1);\n\n    if (this._length >= this._maxLength) {\n      this.doubleArrayLength();\n    }\n\n    switch (type) {\n      case 'v':\n        arr = this.v;\n        break;\n\n      case 'i':\n        arr = this.i;\n        break;\n\n      case 'o':\n        arr = this.o;\n        break;\n\n      default:\n        arr = [];\n        break;\n    }\n\n    if (!arr[pos] || arr[pos] && !replace) {\n      arr[pos] = pointPool.newElement();\n    }\n\n    arr[pos][0] = x;\n    arr[pos][1] = y;\n  };\n\n  ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n    this.setXYAt(vX, vY, 'v', pos, replace);\n    this.setXYAt(oX, oY, 'o', pos, replace);\n    this.setXYAt(iX, iY, 'i', pos, replace);\n  };\n\n  ShapePath.prototype.reverse = function () {\n    var newPath = new ShapePath();\n    newPath.setPathData(this.c, this._length);\n    var vertices = this.v;\n    var outPoints = this.o;\n    var inPoints = this.i;\n    var init = 0;\n\n    if (this.c) {\n      newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n      init = 1;\n    }\n\n    var cnt = this._length - 1;\n    var len = this._length;\n    var i;\n\n    for (i = init; i < len; i += 1) {\n      newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n      cnt -= 1;\n    }\n\n    return newPath;\n  };\n\n  ShapePath.prototype.length = function () {\n    return this._length;\n  };\n\n  var shapePool = function () {\n    function create() {\n      return new ShapePath();\n    }\n\n    function release(shapePath) {\n      var len = shapePath._length;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        pointPool.release(shapePath.v[i]);\n        pointPool.release(shapePath.i[i]);\n        pointPool.release(shapePath.o[i]);\n        shapePath.v[i] = null;\n        shapePath.i[i] = null;\n        shapePath.o[i] = null;\n      }\n\n      shapePath._length = 0;\n      shapePath.c = false;\n    }\n\n    function clone(shape) {\n      var cloned = factory.newElement();\n      var i;\n      var len = shape._length === undefined ? shape.v.length : shape._length;\n      cloned.setLength(len);\n      cloned.c = shape.c;\n\n      for (i = 0; i < len; i += 1) {\n        cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n      }\n\n      return cloned;\n    }\n\n    var factory = poolFactory(4, create, release);\n    factory.clone = clone;\n    return factory;\n  }();\n\n  function ShapeCollection() {\n    this._length = 0;\n    this._maxLength = 4;\n    this.shapes = createSizedArray(this._maxLength);\n  }\n\n  ShapeCollection.prototype.addShape = function (shapeData) {\n    if (this._length === this._maxLength) {\n      this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n      this._maxLength *= 2;\n    }\n\n    this.shapes[this._length] = shapeData;\n    this._length += 1;\n  };\n\n  ShapeCollection.prototype.releaseShapes = function () {\n    var i;\n\n    for (i = 0; i < this._length; i += 1) {\n      shapePool.release(this.shapes[i]);\n    }\n\n    this._length = 0;\n  };\n\n  var shapeCollectionPool = function () {\n    var ob = {\n      newShapeCollection: newShapeCollection,\n      release: release\n    };\n    var _length = 0;\n    var _maxLength = 4;\n    var pool = createSizedArray(_maxLength);\n\n    function newShapeCollection() {\n      var shapeCollection;\n\n      if (_length) {\n        _length -= 1;\n        shapeCollection = pool[_length];\n      } else {\n        shapeCollection = new ShapeCollection();\n      }\n\n      return shapeCollection;\n    }\n\n    function release(shapeCollection) {\n      var i;\n      var len = shapeCollection._length;\n\n      for (i = 0; i < len; i += 1) {\n        shapePool.release(shapeCollection.shapes[i]);\n      }\n\n      shapeCollection._length = 0;\n\n      if (_length === _maxLength) {\n        pool = pooling[\"double\"](pool);\n        _maxLength *= 2;\n      }\n\n      pool[_length] = shapeCollection;\n      _length += 1;\n    }\n\n    return ob;\n  }();\n\n  var ShapePropertyFactory = function () {\n    var initFrame = -999999;\n\n    function interpolateShape(frameNum, previousValue, caching) {\n      var iterationIndex = caching.lastIndex;\n      var keyPropS;\n      var keyPropE;\n      var isHold;\n      var j;\n      var k;\n      var jLen;\n      var kLen;\n      var perc;\n      var vertexValue;\n      var kf = this.keyframes;\n\n      if (frameNum < kf[0].t - this.offsetTime) {\n        keyPropS = kf[0].s[0];\n        isHold = true;\n        iterationIndex = 0;\n      } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n        keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n        /* if(kf[kf.length - 1].s){\r\n                  keyPropS = kf[kf.length - 1].s[0];\r\n              }else{\r\n                  keyPropS = kf[kf.length - 2].e[0];\r\n              } */\n\n        isHold = true;\n      } else {\n        var i = iterationIndex;\n        var len = kf.length - 1;\n        var flag = true;\n        var keyData;\n        var nextKeyData;\n        var keyframeMetadata;\n\n        while (flag) {\n          keyData = kf[i];\n          nextKeyData = kf[i + 1];\n\n          if (nextKeyData.t - this.offsetTime > frameNum) {\n            break;\n          }\n\n          if (i < len - 1) {\n            i += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        keyframeMetadata = this.keyframesMetadata[i] || {};\n        isHold = keyData.h === 1;\n        iterationIndex = i;\n\n        if (!isHold) {\n          if (frameNum >= nextKeyData.t - this.offsetTime) {\n            perc = 1;\n          } else if (frameNum < keyData.t - this.offsetTime) {\n            perc = 0;\n          } else {\n            var fnc;\n\n            if (keyframeMetadata.__fnct) {\n              fnc = keyframeMetadata.__fnct;\n            } else {\n              fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n              keyframeMetadata.__fnct = fnc;\n            }\n\n            perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n          }\n\n          keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n        }\n\n        keyPropS = keyData.s[0];\n      }\n\n      jLen = previousValue._length;\n      kLen = keyPropS.i[0].length;\n      caching.lastIndex = iterationIndex;\n\n      for (j = 0; j < jLen; j += 1) {\n        for (k = 0; k < kLen; k += 1) {\n          vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n          previousValue.i[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n          previousValue.o[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n          previousValue.v[j][k] = vertexValue;\n        }\n      }\n    }\n\n    function interpolateShapeCurrentTime() {\n      var frameNum = this.comp.renderedFrame - this.offsetTime;\n      var initTime = this.keyframes[0].t - this.offsetTime;\n      var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n      var lastFrame = this._caching.lastFrame;\n\n      if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n        /// /\n        this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n        this.interpolateShape(frameNum, this.pv, this._caching); /// /\n      }\n\n      this._caching.lastFrame = frameNum;\n      return this.pv;\n    }\n\n    function resetShape() {\n      this.paths = this.localShapeCollection;\n    }\n\n    function shapesEqual(shape1, shape2) {\n      if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n        return false;\n      }\n\n      var i;\n      var len = shape1._length;\n\n      for (i = 0; i < len; i += 1) {\n        if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    function setVValue(newPath) {\n      if (!shapesEqual(this.v, newPath)) {\n        this.v = shapePool.clone(newPath);\n        this.localShapeCollection.releaseShapes();\n        this.localShapeCollection.addShape(this.v);\n        this._mdf = true;\n        this.paths = this.localShapeCollection;\n      }\n    }\n\n    function processEffectsSequence() {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (!this.effectsSequence.length) {\n        this._mdf = false;\n        return;\n      }\n\n      if (this.lock) {\n        this.setVValue(this.pv);\n        return;\n      }\n\n      this.lock = true;\n      this._mdf = false;\n      var finalValue;\n\n      if (this.kf) {\n        finalValue = this.pv;\n      } else if (this.data.ks) {\n        finalValue = this.data.ks.k;\n      } else {\n        finalValue = this.data.pt.k;\n      }\n\n      var i;\n      var len = this.effectsSequence.length;\n\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue);\n      }\n\n      this.setVValue(finalValue);\n      this.lock = false;\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function ShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.container = elem;\n      this.elem = elem;\n      this.data = data;\n      this.k = false;\n      this.kf = false;\n      this._mdf = false;\n      var pathData = type === 3 ? data.pt.k : data.ks.k;\n      this.v = shapePool.clone(pathData);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.reset = resetShape;\n      this.effectsSequence = [];\n    }\n\n    function addEffect(effectFunction) {\n      this.effectsSequence.push(effectFunction);\n      this.container.addDynamicProperty(this);\n    }\n\n    ShapeProperty.prototype.interpolateShape = interpolateShape;\n    ShapeProperty.prototype.getValue = processEffectsSequence;\n    ShapeProperty.prototype.setVValue = setVValue;\n    ShapeProperty.prototype.addEffect = addEffect;\n\n    function KeyframedShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.elem = elem;\n      this.container = elem;\n      this.offsetTime = elem.data.st;\n      this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n      this.keyframesMetadata = [];\n      this.k = true;\n      this.kf = true;\n      var len = this.keyframes[0].s[0].i.length;\n      this.v = shapePool.newElement();\n      this.v.setPathData(this.keyframes[0].s[0].c, len);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.lastFrame = initFrame;\n      this.reset = resetShape;\n      this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0\n      };\n      this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n    }\n\n    KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n    KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n    KeyframedShapeProperty.prototype.setVValue = setVValue;\n    KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n    var EllShapeProperty = function () {\n      var cPoint = roundCorner;\n\n      function EllShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 4);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.paths = this.localShapeCollection;\n        this.localShapeCollection.addShape(this.v);\n        this.d = data.d;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertEllToPath();\n        }\n      }\n\n      EllShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertEllToPath();\n          }\n        },\n        convertEllToPath: function convertEllToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var s0 = this.s.v[0] / 2;\n          var s1 = this.s.v[1] / 2;\n\n          var _cw = this.d !== 3;\n\n          var _v = this.v;\n          _v.v[0][0] = p0;\n          _v.v[0][1] = p1 - s1;\n          _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.v[1][1] = p1;\n          _v.v[2][0] = p0;\n          _v.v[2][1] = p1 + s1;\n          _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.v[3][1] = p1;\n          _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.i[0][1] = p1 - s1;\n          _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.i[1][1] = p1 - s1 * cPoint;\n          _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.i[2][1] = p1 + s1;\n          _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.i[3][1] = p1 + s1 * cPoint;\n          _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.o[0][1] = p1 - s1;\n          _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.o[1][1] = p1 + s1 * cPoint;\n          _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.o[2][1] = p1 + s1;\n          _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.o[3][1] = p1 - s1 * cPoint;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n      return EllShapePropertyFactory;\n    }();\n\n    var StarShapeProperty = function () {\n      function StarShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 0);\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.data = data;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n\n        if (data.sy === 1) {\n          this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n          this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n          this.convertToPath = this.convertStarToPath;\n        } else {\n          this.convertToPath = this.convertPolygonToPath;\n        }\n\n        this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n        this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n        this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertToPath();\n        }\n      }\n\n      StarShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertToPath();\n          }\n        },\n        convertStarToPath: function convertStarToPath() {\n          var numPts = Math.floor(this.pt.v) * 2;\n          var angle = Math.PI * 2 / numPts;\n          /* this.v.v.length = numPts;\r\n                  this.v.i.length = numPts;\r\n                  this.v.o.length = numPts; */\n\n          var longFlag = true;\n          var longRad = this.or.v;\n          var shortRad = this.ir.v;\n          var longRound = this.os.v;\n          var shortRound = this.is.v;\n          var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n          var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n          var i;\n          var rad;\n          var roundness;\n          var perimSegment;\n          var currentAng = -Math.PI / 2;\n          currentAng += this.r.v;\n          var dir = this.data.d === 3 ? -1 : 1;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            rad = longFlag ? longRad : shortRad;\n            roundness = longFlag ? longRound : shortRound;\n            perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            /* this.v.v[i] = [x,y];\r\n                      this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n                      this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n                      this.v._length = numPts; */\n\n            longFlag = !longFlag;\n            currentAng += angle * dir;\n          }\n        },\n        convertPolygonToPath: function convertPolygonToPath() {\n          var numPts = Math.floor(this.pt.v);\n          var angle = Math.PI * 2 / numPts;\n          var rad = this.or.v;\n          var roundness = this.os.v;\n          var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n          var i;\n          var currentAng = -Math.PI * 0.5;\n          var dir = this.data.d === 3 ? -1 : 1;\n          currentAng += this.r.v;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            currentAng += angle * dir;\n          }\n\n          this.paths.length = 0;\n          this.paths[0] = this.v;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n      return StarShapePropertyFactory;\n    }();\n\n    var RectShapeProperty = function () {\n      function RectShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.c = true;\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertRectToPath();\n        }\n      }\n\n      RectShapePropertyFactory.prototype = {\n        convertRectToPath: function convertRectToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var v0 = this.s.v[0] / 2;\n          var v1 = this.s.v[1] / 2;\n          var round = bmMin(v0, v1, this.r.v);\n          var cPoint = round * (1 - roundCorner);\n          this.v._length = 0;\n\n          if (this.d === 2 || this.d === 1) {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n            this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n            }\n          } else {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n            }\n          }\n        },\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertRectToPath();\n          }\n        },\n        reset: resetShape\n      };\n      extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n      return RectShapePropertyFactory;\n    }();\n\n    function getShapeProp(elem, data, type) {\n      var prop;\n\n      if (type === 3 || type === 4) {\n        var dataProp = type === 3 ? data.pt : data.ks;\n        var keys = dataProp.k;\n\n        if (keys.length) {\n          prop = new KeyframedShapeProperty(elem, data, type);\n        } else {\n          prop = new ShapeProperty(elem, data, type);\n        }\n      } else if (type === 5) {\n        prop = new RectShapeProperty(elem, data);\n      } else if (type === 6) {\n        prop = new EllShapeProperty(elem, data);\n      } else if (type === 7) {\n        prop = new StarShapeProperty(elem, data);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    }\n\n    function getConstructorFunction() {\n      return ShapeProperty;\n    }\n\n    function getKeyframedConstructorFunction() {\n      return KeyframedShapeProperty;\n    }\n\n    var ob = {};\n    ob.getShapeProp = getShapeProp;\n    ob.getConstructorFunction = getConstructorFunction;\n    ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n    return ob;\n  }();\n\n  /*!\r\n   Transformation Matrix v2.0\r\n   (c) Epistemex 2014-2015\r\n   www.epistemex.com\r\n   By Ken Fyrstenberg\r\n   Contributions by leeoniya.\r\n   License: MIT, header required.\r\n   */\n\n  /**\r\n   * 2D transformation matrix object initialized with identity matrix.\r\n   *\r\n   * The matrix can synchronize a canvas context by supplying the context\r\n   * as an argument, or later apply current absolute transform to an\r\n   * existing context.\r\n   *\r\n   * All values are handled as floating point values.\r\n   *\r\n   * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n   * @prop {number} a - scale x\r\n   * @prop {number} b - shear y\r\n   * @prop {number} c - shear x\r\n   * @prop {number} d - scale y\r\n   * @prop {number} e - translate x\r\n   * @prop {number} f - translate y\r\n   * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n   * @constructor\r\n   */\n\n  var Matrix = function () {\n    var _cos = Math.cos;\n    var _sin = Math.sin;\n    var _tan = Math.tan;\n    var _rnd = Math.round;\n\n    function reset() {\n      this.props[0] = 1;\n      this.props[1] = 0;\n      this.props[2] = 0;\n      this.props[3] = 0;\n      this.props[4] = 0;\n      this.props[5] = 1;\n      this.props[6] = 0;\n      this.props[7] = 0;\n      this.props[8] = 0;\n      this.props[9] = 0;\n      this.props[10] = 1;\n      this.props[11] = 0;\n      this.props[12] = 0;\n      this.props[13] = 0;\n      this.props[14] = 0;\n      this.props[15] = 1;\n      return this;\n    }\n\n    function rotate(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function rotateX(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateY(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateZ(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function shear(sx, sy) {\n      return this._t(1, sy, sx, 1, 0, 0);\n    }\n\n    function skew(ax, ay) {\n      return this.shear(_tan(ax), _tan(ay));\n    }\n\n    function skewFromAxis(ax, angle) {\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n    }\n\n    function scale(sx, sy, sz) {\n      if (!sz && sz !== 0) {\n        sz = 1;\n      }\n\n      if (sx === 1 && sy === 1 && sz === 1) {\n        return this;\n      }\n\n      return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n    }\n\n    function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n      this.props[0] = a;\n      this.props[1] = b;\n      this.props[2] = c;\n      this.props[3] = d;\n      this.props[4] = e;\n      this.props[5] = f;\n      this.props[6] = g;\n      this.props[7] = h;\n      this.props[8] = i;\n      this.props[9] = j;\n      this.props[10] = k;\n      this.props[11] = l;\n      this.props[12] = m;\n      this.props[13] = n;\n      this.props[14] = o;\n      this.props[15] = p;\n      return this;\n    }\n\n    function translate(tx, ty, tz) {\n      tz = tz || 0;\n\n      if (tx !== 0 || ty !== 0 || tz !== 0) {\n        return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n      }\n\n      return this;\n    }\n\n    function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n      var _p = this.props;\n\n      if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n        // NOTE: commenting this condition because TurboFan deoptimizes code when present\n        // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n        _p[12] = _p[12] * a2 + _p[15] * m2;\n        _p[13] = _p[13] * f2 + _p[15] * n2;\n        _p[14] = _p[14] * k2 + _p[15] * o2;\n        _p[15] *= p2; // }\n\n        this._identityCalculated = false;\n        return this;\n      }\n\n      var a1 = _p[0];\n      var b1 = _p[1];\n      var c1 = _p[2];\n      var d1 = _p[3];\n      var e1 = _p[4];\n      var f1 = _p[5];\n      var g1 = _p[6];\n      var h1 = _p[7];\n      var i1 = _p[8];\n      var j1 = _p[9];\n      var k1 = _p[10];\n      var l1 = _p[11];\n      var m1 = _p[12];\n      var n1 = _p[13];\n      var o1 = _p[14];\n      var p1 = _p[15];\n      /* matrix order (canvas compatible):\r\n           * ace\r\n           * bdf\r\n           * 001\r\n           */\n\n      _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n      _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n      _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n      _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n      _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n      _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n      _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n      _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n      _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n      _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n      _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n      _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n      _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n      _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n      _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n      _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n      this._identityCalculated = false;\n      return this;\n    }\n\n    function multiply(matrix) {\n      var matrixProps = matrix.props;\n      return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\n    }\n\n    function isIdentity() {\n      if (!this._identityCalculated) {\n        this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n        this._identityCalculated = true;\n      }\n\n      return this._identity;\n    }\n\n    function equals(matr) {\n      var i = 0;\n\n      while (i < 16) {\n        if (matr.props[i] !== this.props[i]) {\n          return false;\n        }\n\n        i += 1;\n      }\n\n      return true;\n    }\n\n    function clone(matr) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        matr.props[i] = this.props[i];\n      }\n\n      return matr;\n    }\n\n    function cloneFromProps(props) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        this.props[i] = props[i];\n      }\n    }\n\n    function applyToPoint(x, y, z) {\n      return {\n        x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n        y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n        z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n      };\n      /* return {\r\n           x: x * me.a + y * me.c + me.e,\r\n           y: x * me.b + y * me.d + me.f\r\n           }; */\n    }\n\n    function applyToX(x, y, z) {\n      return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n    }\n\n    function applyToY(x, y, z) {\n      return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n    }\n\n    function applyToZ(x, y, z) {\n      return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n    }\n\n    function getInverseMatrix() {\n      var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n      var a = this.props[5] / determinant;\n      var b = -this.props[1] / determinant;\n      var c = -this.props[4] / determinant;\n      var d = this.props[0] / determinant;\n      var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n      var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n      var inverseMatrix = new Matrix();\n      inverseMatrix.props[0] = a;\n      inverseMatrix.props[1] = b;\n      inverseMatrix.props[4] = c;\n      inverseMatrix.props[5] = d;\n      inverseMatrix.props[12] = e;\n      inverseMatrix.props[13] = f;\n      return inverseMatrix;\n    }\n\n    function inversePoint(pt) {\n      var inverseMatrix = this.getInverseMatrix();\n      return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n    }\n\n    function inversePoints(pts) {\n      var i;\n      var len = pts.length;\n      var retPts = [];\n\n      for (i = 0; i < len; i += 1) {\n        retPts[i] = inversePoint(pts[i]);\n      }\n\n      return retPts;\n    }\n\n    function applyToTriplePoints(pt1, pt2, pt3) {\n      var arr = createTypedArray('float32', 6);\n\n      if (this.isIdentity()) {\n        arr[0] = pt1[0];\n        arr[1] = pt1[1];\n        arr[2] = pt2[0];\n        arr[3] = pt2[1];\n        arr[4] = pt3[0];\n        arr[5] = pt3[1];\n      } else {\n        var p0 = this.props[0];\n        var p1 = this.props[1];\n        var p4 = this.props[4];\n        var p5 = this.props[5];\n        var p12 = this.props[12];\n        var p13 = this.props[13];\n        arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n        arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n        arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n        arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n        arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n        arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n      }\n\n      return arr;\n    }\n\n    function applyToPointArray(x, y, z) {\n      var arr;\n\n      if (this.isIdentity()) {\n        arr = [x, y, z];\n      } else {\n        arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n      }\n\n      return arr;\n    }\n\n    function applyToPointStringified(x, y) {\n      if (this.isIdentity()) {\n        return x + ',' + y;\n      }\n\n      var _p = this.props;\n      return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n    }\n\n    function toCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var i = 0;\n      var props = this.props;\n      var cssValue = 'matrix3d(';\n      var v = 10000;\n\n      while (i < 16) {\n        cssValue += _rnd(props[i] * v) / v;\n        cssValue += i === 15 ? ')' : ',';\n        i += 1;\n      }\n\n      return cssValue;\n    }\n\n    function roundMatrixProperty(val) {\n      var v = 10000;\n\n      if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n        return _rnd(val * v) / v;\n      }\n\n      return val;\n    }\n\n    function to2dCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var props = this.props;\n\n      var _a = roundMatrixProperty(props[0]);\n\n      var _b = roundMatrixProperty(props[1]);\n\n      var _c = roundMatrixProperty(props[4]);\n\n      var _d = roundMatrixProperty(props[5]);\n\n      var _e = roundMatrixProperty(props[12]);\n\n      var _f = roundMatrixProperty(props[13]);\n\n      return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n    }\n\n    return function () {\n      this.reset = reset;\n      this.rotate = rotate;\n      this.rotateX = rotateX;\n      this.rotateY = rotateY;\n      this.rotateZ = rotateZ;\n      this.skew = skew;\n      this.skewFromAxis = skewFromAxis;\n      this.shear = shear;\n      this.scale = scale;\n      this.setTransform = setTransform;\n      this.translate = translate;\n      this.transform = transform;\n      this.multiply = multiply;\n      this.applyToPoint = applyToPoint;\n      this.applyToX = applyToX;\n      this.applyToY = applyToY;\n      this.applyToZ = applyToZ;\n      this.applyToPointArray = applyToPointArray;\n      this.applyToTriplePoints = applyToTriplePoints;\n      this.applyToPointStringified = applyToPointStringified;\n      this.toCSS = toCSS;\n      this.to2dCSS = to2dCSS;\n      this.clone = clone;\n      this.cloneFromProps = cloneFromProps;\n      this.equals = equals;\n      this.inversePoints = inversePoints;\n      this.inversePoint = inversePoint;\n      this.getInverseMatrix = getInverseMatrix;\n      this._t = this.transform;\n      this.isIdentity = isIdentity;\n      this._identity = true;\n      this._identityCalculated = false;\n      this.props = createTypedArray('float32', 16);\n      this.reset();\n    };\n  }();\n\n  function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n  var lottie = {};\n  var standalone = '__[STANDALONE]__';\n  var animationData = '__[ANIMATIONDATA]__';\n  var renderer = '';\n\n  function setLocation(href) {\n    setLocationHref(href);\n  }\n\n  function searchAnimations() {\n    if (standalone === true) {\n      animationManager.searchAnimations(animationData, standalone, renderer);\n    } else {\n      animationManager.searchAnimations();\n    }\n  }\n\n  function setSubframeRendering(flag) {\n    setSubframeEnabled(flag);\n  }\n\n  function setPrefix(prefix) {\n    setIdPrefix(prefix);\n  }\n\n  function loadAnimation(params) {\n    if (standalone === true) {\n      params.animationData = JSON.parse(animationData);\n    }\n\n    return animationManager.loadAnimation(params);\n  }\n\n  function setQuality(value) {\n    if (typeof value === 'string') {\n      switch (value) {\n        case 'high':\n          setDefaultCurveSegments(200);\n          break;\n\n        default:\n        case 'medium':\n          setDefaultCurveSegments(50);\n          break;\n\n        case 'low':\n          setDefaultCurveSegments(10);\n          break;\n      }\n    } else if (!isNaN(value) && value > 1) {\n      setDefaultCurveSegments(value);\n    }\n\n    if (getDefaultCurveSegments() >= 50) {\n      roundValues(false);\n    } else {\n      roundValues(true);\n    }\n  }\n\n  function inBrowser() {\n    return typeof navigator !== 'undefined';\n  }\n\n  function installPlugin(type, plugin) {\n    if (type === 'expressions') {\n      setExpressionsPlugin(plugin);\n    }\n  }\n\n  function getFactory(name) {\n    switch (name) {\n      case 'propertyFactory':\n        return PropertyFactory;\n\n      case 'shapePropertyFactory':\n        return ShapePropertyFactory;\n\n      case 'matrix':\n        return Matrix;\n\n      default:\n        return null;\n    }\n  }\n\n  lottie.play = animationManager.play;\n  lottie.pause = animationManager.pause;\n  lottie.setLocationHref = setLocation;\n  lottie.togglePause = animationManager.togglePause;\n  lottie.setSpeed = animationManager.setSpeed;\n  lottie.setDirection = animationManager.setDirection;\n  lottie.stop = animationManager.stop;\n  lottie.searchAnimations = searchAnimations;\n  lottie.registerAnimation = animationManager.registerAnimation;\n  lottie.loadAnimation = loadAnimation;\n  lottie.setSubframeRendering = setSubframeRendering;\n  lottie.resize = animationManager.resize; // lottie.start = start;\n\n  lottie.goToAndStop = animationManager.goToAndStop;\n  lottie.destroy = animationManager.destroy;\n  lottie.setQuality = setQuality;\n  lottie.inBrowser = inBrowser;\n  lottie.installPlugin = installPlugin;\n  lottie.freeze = animationManager.freeze;\n  lottie.unfreeze = animationManager.unfreeze;\n  lottie.setVolume = animationManager.setVolume;\n  lottie.mute = animationManager.mute;\n  lottie.unmute = animationManager.unmute;\n  lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n  lottie.useWebWorker = setWebWorker;\n  lottie.setIDPrefix = setPrefix;\n  lottie.__getFactory = getFactory;\n  lottie.version = '5.12.2';\n\n  function checkReady() {\n    if (document.readyState === 'complete') {\n      clearInterval(readyStateCheckInterval);\n      searchAnimations();\n    }\n  }\n\n  function getQueryVariable(variable) {\n    var vars = queryString.split('&');\n\n    for (var i = 0; i < vars.length; i += 1) {\n      var pair = vars[i].split('=');\n\n      if (decodeURIComponent(pair[0]) == variable) {\n        // eslint-disable-line eqeqeq\n        return decodeURIComponent(pair[1]);\n      }\n    }\n\n    return null;\n  }\n\n  var queryString = '';\n\n  if (standalone) {\n    var scripts = document.getElementsByTagName('script');\n    var index = scripts.length - 1;\n    var myScript = scripts[index] || {\n      src: ''\n    };\n    queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n    renderer = getQueryVariable('renderer');\n  }\n\n  var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n  try {\n    if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n    ) {\n      window.bodymovin = lottie;\n    }\n  } catch (err) {//\n  }\n\n  var ShapeModifiers = function () {\n    var ob = {};\n    var modifiers = {};\n    ob.registerModifier = registerModifier;\n    ob.getModifier = getModifier;\n\n    function registerModifier(nm, factory) {\n      if (!modifiers[nm]) {\n        modifiers[nm] = factory;\n      }\n    }\n\n    function getModifier(nm, elem, data) {\n      return new modifiers[nm](elem, data);\n    }\n\n    return ob;\n  }();\n\n  function ShapeModifier() {}\n\n  ShapeModifier.prototype.initModifierProperties = function () {};\n\n  ShapeModifier.prototype.addShapeToModifier = function () {};\n\n  ShapeModifier.prototype.addShape = function (data) {\n    if (!this.closed) {\n      // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n      data.sh.container.addDynamicProperty(data.sh);\n      var shapeData = {\n        shape: data.sh,\n        data: data,\n        localShapeCollection: shapeCollectionPool.newShapeCollection()\n      };\n      this.shapes.push(shapeData);\n      this.addShapeToModifier(shapeData);\n\n      if (this._isAnimated) {\n        data.setAsAnimated();\n      }\n    }\n  };\n\n  ShapeModifier.prototype.init = function (elem, data) {\n    this.shapes = [];\n    this.elem = elem;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, data);\n    this.frameId = initialDefaultFrame;\n    this.closed = false;\n    this.k = false;\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  ShapeModifier.prototype.processKeys = function () {\n    if (this.elem.globalData.frameId === this.frameId) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n  function TrimModifier() {}\n\n  extendPrototype([ShapeModifier], TrimModifier);\n\n  TrimModifier.prototype.initModifierProperties = function (elem, data) {\n    this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n    this.sValue = 0;\n    this.eValue = 0;\n    this.getValue = this.processKeys;\n    this.m = data.m;\n    this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n  };\n\n  TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n    shapeData.pathsData = [];\n  };\n\n  TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n    var segments = [];\n\n    if (e <= 1) {\n      segments.push({\n        s: s,\n        e: e\n      });\n    } else if (s >= 1) {\n      segments.push({\n        s: s - 1,\n        e: e - 1\n      });\n    } else {\n      segments.push({\n        s: s,\n        e: 1\n      });\n      segments.push({\n        s: 0,\n        e: e - 1\n      });\n    }\n\n    var shapeSegments = [];\n    var i;\n    var len = segments.length;\n    var segmentOb;\n\n    for (i = 0; i < len; i += 1) {\n      segmentOb = segments[i];\n\n      if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n        var shapeS;\n        var shapeE;\n\n        if (segmentOb.s * totalModifierLength <= addedLength) {\n          shapeS = 0;\n        } else {\n          shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n          shapeE = 1;\n        } else {\n          shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        shapeSegments.push([shapeS, shapeE]);\n      }\n    }\n\n    if (!shapeSegments.length) {\n      shapeSegments.push([0, 0]);\n    }\n\n    return shapeSegments;\n  };\n\n  TrimModifier.prototype.releasePathsData = function (pathsData) {\n    var i;\n    var len = pathsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      segmentsLengthPool.release(pathsData[i]);\n    }\n\n    pathsData.length = 0;\n    return pathsData;\n  };\n\n  TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n    var s;\n    var e;\n\n    if (this._mdf || _isFirstFrame) {\n      var o = this.o.v % 360 / 360;\n\n      if (o < 0) {\n        o += 1;\n      }\n\n      if (this.s.v > 1) {\n        s = 1 + o;\n      } else if (this.s.v < 0) {\n        s = 0 + o;\n      } else {\n        s = this.s.v + o;\n      }\n\n      if (this.e.v > 1) {\n        e = 1 + o;\n      } else if (this.e.v < 0) {\n        e = 0 + o;\n      } else {\n        e = this.e.v + o;\n      }\n\n      if (s > e) {\n        var _s = s;\n        s = e;\n        e = _s;\n      }\n\n      s = Math.round(s * 10000) * 0.0001;\n      e = Math.round(e * 10000) * 0.0001;\n      this.sValue = s;\n      this.eValue = e;\n    } else {\n      s = this.sValue;\n      e = this.eValue;\n    }\n\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var pathsData;\n    var pathData;\n    var totalShapeLength;\n    var totalModifierLength = 0;\n\n    if (e === s) {\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].localShapeCollection.releaseShapes();\n        this.shapes[i].shape._mdf = true;\n        this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n        if (this._mdf) {\n          this.shapes[i].pathsData.length = 0;\n        }\n      }\n    } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n      var segments = [];\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n        if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n          shapeData.shape.paths = shapeData.localShapeCollection;\n        } else {\n          shapePaths = shapeData.shape.paths;\n          jLen = shapePaths._length;\n          totalShapeLength = 0;\n\n          if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n            totalShapeLength = shapeData.totalShapeLength;\n          } else {\n            pathsData = this.releasePathsData(shapeData.pathsData);\n\n            for (j = 0; j < jLen; j += 1) {\n              pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n              pathsData.push(pathData);\n              totalShapeLength += pathData.totalLength;\n            }\n\n            shapeData.totalShapeLength = totalShapeLength;\n            shapeData.pathsData = pathsData;\n          }\n\n          totalModifierLength += totalShapeLength;\n          shapeData.shape._mdf = true;\n        }\n      }\n\n      var shapeS = s;\n      var shapeE = e;\n      var addedLength = 0;\n      var edges;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shapeData = this.shapes[i];\n\n        if (shapeData.shape._mdf) {\n          localShapeCollection = shapeData.localShapeCollection;\n          localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n          if (this.m === 2 && len > 1) {\n            edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n            addedLength += shapeData.totalShapeLength;\n          } else {\n            edges = [[shapeS, shapeE]];\n          }\n\n          jLen = edges.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            shapeS = edges[j][0];\n            shapeE = edges[j][1];\n            segments.length = 0;\n\n            if (shapeE <= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength * shapeE\n              });\n            } else if (shapeS >= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * (shapeS - 1),\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            } else {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength\n              });\n              segments.push({\n                s: 0,\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            }\n\n            var newShapesData = this.addShapes(shapeData, segments[0]);\n\n            if (segments[0].s !== segments[0].e) {\n              if (segments.length > 1) {\n                var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n                if (lastShapeInCollection.c) {\n                  var lastShape = newShapesData.pop();\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n                } else {\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1]);\n                }\n              }\n\n              this.addPaths(newShapesData, localShapeCollection);\n            }\n          }\n\n          shapeData.shape.paths = localShapeCollection;\n        }\n      }\n    } else if (this._mdf) {\n      for (i = 0; i < len; i += 1) {\n        // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n        // Don't remove this even if it's losing cached info.\n        this.shapes[i].pathsData.length = 0;\n        this.shapes[i].shape._mdf = true;\n      }\n    }\n  };\n\n  TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n    var i;\n    var len = newPaths.length;\n\n    for (i = 0; i < len; i += 1) {\n      localShapeCollection.addShape(newPaths[i]);\n    }\n  };\n\n  TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n    shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n    shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n    }\n\n    shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n    shapePath.setXYAt(points[1], points[5], 'o', pos);\n    shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(points[0], points[4], 'v', pos);\n    }\n\n    shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n    var pathsData = shapeData.pathsData;\n    var shapePaths = shapeData.shape.paths.shapes;\n    var i;\n    var len = shapeData.shape.paths._length;\n    var j;\n    var jLen;\n    var addedLength = 0;\n    var currentLengthData;\n    var segmentCount;\n    var lengths;\n    var segment;\n    var shapes = [];\n    var initPos;\n    var newShape = true;\n\n    if (!shapePath) {\n      shapePath = shapePool.newElement();\n      segmentCount = 0;\n      initPos = 0;\n    } else {\n      segmentCount = shapePath._length;\n      initPos = shapePath._length;\n    }\n\n    shapes.push(shapePath);\n\n    for (i = 0; i < len; i += 1) {\n      lengths = pathsData[i].lengths;\n      shapePath.c = shapePaths[i].c;\n      jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n      for (j = 1; j < jLen; j += 1) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n          addedLength += currentLengthData.addedLength;\n          shapePath.c = false;\n        } else if (addedLength > shapeSegment.e) {\n          shapePath.c = false;\n          break;\n        } else {\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n\n          addedLength += currentLengthData.addedLength;\n          segmentCount += 1;\n        }\n      }\n\n      if (shapePaths[i].c && lengths.length) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength <= shapeSegment.e) {\n          var segmentLength = lengths[j - 1].addedLength;\n\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n        } else {\n          shapePath.c = false;\n        }\n\n        addedLength += currentLengthData.addedLength;\n        segmentCount += 1;\n      }\n\n      if (shapePath._length) {\n        shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n        shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n      }\n\n      if (addedLength > shapeSegment.e) {\n        break;\n      }\n\n      if (i < len - 1) {\n        shapePath = shapePool.newElement();\n        newShape = true;\n        shapes.push(shapePath);\n        segmentCount = 0;\n      }\n    }\n\n    return shapes;\n  };\n\n  function PuckerAndBloatModifier() {}\n\n  extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n  PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this._isAnimated = !!this.amount.effectsSequence.length;\n  };\n\n  PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n    var percent = amount / 100;\n    var centerPoint = [0, 0];\n    var pathLength = path._length;\n    var i = 0;\n\n    for (i = 0; i < pathLength; i += 1) {\n      centerPoint[0] += path.v[i][0];\n      centerPoint[1] += path.v[i][1];\n    }\n\n    centerPoint[0] /= pathLength;\n    centerPoint[1] /= pathLength;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < pathLength; i += 1) {\n      vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n      vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n      oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n      oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n      iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n      iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n      clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n    }\n\n    return clonedPath;\n  };\n\n  PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  var TransformPropertyFactory = function () {\n    var defaultVector = [0, 0];\n\n    function applyToMatrix(mat) {\n      var _mdf = this._mdf;\n      this.iterateDynamicProperties();\n      this._mdf = this._mdf || _mdf;\n\n      if (this.a) {\n        mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n      }\n\n      if (this.s) {\n        mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n      }\n\n      if (this.sk) {\n        mat.skewFromAxis(-this.sk.v, this.sa.v);\n      }\n\n      if (this.r) {\n        mat.rotate(-this.r.v);\n      } else {\n        mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n      }\n\n      if (this.data.p.s) {\n        if (this.data.p.z) {\n          mat.translate(this.px.v, this.py.v, -this.pz.v);\n        } else {\n          mat.translate(this.px.v, this.py.v, 0);\n        }\n      } else {\n        mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n      }\n    }\n\n    function processKeys(forceRender) {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (this._isDirty) {\n        this.precalculateMatrix();\n        this._isDirty = false;\n      }\n\n      this.iterateDynamicProperties();\n\n      if (this._mdf || forceRender) {\n        var frameRate;\n        this.v.cloneFromProps(this.pre.props);\n\n        if (this.appliedTransformations < 1) {\n          this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        }\n\n        if (this.appliedTransformations < 2) {\n          this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        }\n\n        if (this.sk && this.appliedTransformations < 3) {\n          this.v.skewFromAxis(-this.sk.v, this.sa.v);\n        }\n\n        if (this.r && this.appliedTransformations < 4) {\n          this.v.rotate(-this.r.v);\n        } else if (!this.r && this.appliedTransformations < 4) {\n          this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        }\n\n        if (this.autoOriented) {\n          var v1;\n          var v2;\n          frameRate = this.elem.globalData.frameRate;\n\n          if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n            if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n              v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n              v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n            } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n              v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n              v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n            } else {\n              v1 = this.p.pv;\n              v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n            }\n          } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n            v1 = [];\n            v2 = [];\n            var px = this.px;\n            var py = this.py;\n\n            if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n              v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n              v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n              v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n              v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n            } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n              v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n              v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n              v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n              v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n            } else {\n              v1 = [px.pv, py.pv];\n              v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n              v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n            }\n          } else {\n            v2 = defaultVector;\n            v1 = v2;\n          }\n\n          this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n        }\n\n        if (this.data.p && this.data.p.s) {\n          if (this.data.p.z) {\n            this.v.translate(this.px.v, this.py.v, -this.pz.v);\n          } else {\n            this.v.translate(this.px.v, this.py.v, 0);\n          }\n        } else {\n          this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n        }\n      }\n\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function precalculateMatrix() {\n      this.appliedTransformations = 0;\n      this.pre.reset();\n\n      if (!this.a.effectsSequence.length) {\n        this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        this.appliedTransformations = 1;\n      } else {\n        return;\n      }\n\n      if (!this.s.effectsSequence.length) {\n        this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        this.appliedTransformations = 2;\n      } else {\n        return;\n      }\n\n      if (this.sk) {\n        if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n          this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n          this.appliedTransformations = 3;\n        } else {\n          return;\n        }\n      }\n\n      if (this.r) {\n        if (!this.r.effectsSequence.length) {\n          this.pre.rotate(-this.r.v);\n          this.appliedTransformations = 4;\n        }\n      } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n        this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        this.appliedTransformations = 4;\n      }\n    }\n\n    function autoOrient() {//\n      // var prevP = this.getValueAtTime();\n    }\n\n    function addDynamicProperty(prop) {\n      this._addDynamicProperty(prop);\n\n      this.elem.addDynamicProperty(prop);\n      this._isDirty = true;\n    }\n\n    function TransformProperty(elem, data, container) {\n      this.elem = elem;\n      this.frameId = -1;\n      this.propType = 'transform';\n      this.data = data;\n      this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n      this.pre = new Matrix();\n      this.appliedTransformations = 0;\n      this.initDynamicPropertyContainer(container || elem);\n\n      if (data.p && data.p.s) {\n        this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n        this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n        if (data.p.z) {\n          this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n        }\n      } else {\n        this.p = PropertyFactory.getProp(elem, data.p || {\n          k: [0, 0, 0]\n        }, 1, 0, this);\n      }\n\n      if (data.rx) {\n        this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n        this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n        this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n        if (data.or.k[0].ti) {\n          var i;\n          var len = data.or.k.length;\n\n          for (i = 0; i < len; i += 1) {\n            data.or.k[i].to = null;\n            data.or.k[i].ti = null;\n          }\n        }\n\n        this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n        this.or.sh = true;\n      } else {\n        this.r = PropertyFactory.getProp(elem, data.r || {\n          k: 0\n        }, 0, degToRads, this);\n      }\n\n      if (data.sk) {\n        this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n        this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n      }\n\n      this.a = PropertyFactory.getProp(elem, data.a || {\n        k: [0, 0, 0]\n      }, 1, 0, this);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: [100, 100, 100]\n      }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n      if (data.o) {\n        this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n      } else {\n        this.o = {\n          _mdf: false,\n          v: 1\n        };\n      }\n\n      this._isDirty = true;\n\n      if (!this.dynamicProperties.length) {\n        this.getValue(true);\n      }\n    }\n\n    TransformProperty.prototype = {\n      applyToMatrix: applyToMatrix,\n      getValue: processKeys,\n      precalculateMatrix: precalculateMatrix,\n      autoOrient: autoOrient\n    };\n    extendPrototype([DynamicPropertyContainer], TransformProperty);\n    TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n    TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n    function getTransformProperty(elem, data, container) {\n      return new TransformProperty(elem, data, container);\n    }\n\n    return {\n      getTransformProperty: getTransformProperty\n    };\n  }();\n\n  function RepeaterModifier() {}\n\n  extendPrototype([ShapeModifier], RepeaterModifier);\n\n  RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n    this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n    this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n    this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n    this.data = data;\n\n    if (!this.dynamicProperties.length) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = !!this.dynamicProperties.length;\n    this.pMatrix = new Matrix();\n    this.rMatrix = new Matrix();\n    this.sMatrix = new Matrix();\n    this.tMatrix = new Matrix();\n    this.matrix = new Matrix();\n  };\n\n  RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n    var dir = inv ? -1 : 1;\n    var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n    var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n    pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n    rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    rMatrix.rotate(-transform.r.v * dir * perc);\n    rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n    sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n    sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n  };\n\n  RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n    this.elem = elem;\n    this.arr = arr;\n    this.pos = pos;\n    this.elemsData = elemsData;\n    this._currentCopies = 0;\n    this._elements = [];\n    this._groups = [];\n    this.frameId = -1;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, arr[pos]);\n\n    while (pos > 0) {\n      pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n      this._elements.unshift(arr[pos]);\n    }\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  RepeaterModifier.prototype.resetElements = function (elements) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._processed = false;\n\n      if (elements[i].ty === 'gr') {\n        this.resetElements(elements[i].it);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.cloneElements = function (elements) {\n    var newElements = JSON.parse(JSON.stringify(elements));\n    this.resetElements(newElements);\n    return newElements;\n  };\n\n  RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._render = renderFlag;\n\n      if (elements[i].ty === 'gr') {\n        this.changeGroupRender(elements[i].it, renderFlag);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n    var items;\n    var itemsTransform;\n    var i;\n    var dir;\n    var cont;\n    var hasReloaded = false;\n\n    if (this._mdf || _isFirstFrame) {\n      var copies = Math.ceil(this.c.v);\n\n      if (this._groups.length < copies) {\n        while (this._groups.length < copies) {\n          var group = {\n            it: this.cloneElements(this._elements),\n            ty: 'gr'\n          };\n          group.it.push({\n            a: {\n              a: 0,\n              ix: 1,\n              k: [0, 0]\n            },\n            nm: 'Transform',\n            o: {\n              a: 0,\n              ix: 7,\n              k: 100\n            },\n            p: {\n              a: 0,\n              ix: 2,\n              k: [0, 0]\n            },\n            r: {\n              a: 1,\n              ix: 6,\n              k: [{\n                s: 0,\n                e: 0,\n                t: 0\n              }, {\n                s: 0,\n                e: 0,\n                t: 1\n              }]\n            },\n            s: {\n              a: 0,\n              ix: 3,\n              k: [100, 100]\n            },\n            sa: {\n              a: 0,\n              ix: 5,\n              k: 0\n            },\n            sk: {\n              a: 0,\n              ix: 4,\n              k: 0\n            },\n            ty: 'tr'\n          });\n          this.arr.splice(0, 0, group);\n\n          this._groups.splice(0, 0, group);\n\n          this._currentCopies += 1;\n        }\n\n        this.elem.reloadShapes();\n        hasReloaded = true;\n      }\n\n      cont = 0;\n      var renderFlag;\n\n      for (i = 0; i <= this._groups.length - 1; i += 1) {\n        renderFlag = cont < copies;\n        this._groups[i]._render = renderFlag;\n        this.changeGroupRender(this._groups[i].it, renderFlag);\n\n        if (!renderFlag) {\n          var elems = this.elemsData[i].it;\n          var transformData = elems[elems.length - 1];\n\n          if (transformData.transform.op.v !== 0) {\n            transformData.transform.op._mdf = true;\n            transformData.transform.op.v = 0;\n          } else {\n            transformData.transform.op._mdf = false;\n          }\n        }\n\n        cont += 1;\n      }\n\n      this._currentCopies = copies; /// /\n\n      var offset = this.o.v;\n      var offsetModulo = offset % 1;\n      var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n      var pProps = this.pMatrix.props;\n      var rProps = this.rMatrix.props;\n      var sProps = this.sMatrix.props;\n      this.pMatrix.reset();\n      this.rMatrix.reset();\n      this.sMatrix.reset();\n      this.tMatrix.reset();\n      this.matrix.reset();\n      var iteration = 0;\n\n      if (offset > 0) {\n        while (iteration < roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          iteration += 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n          iteration += offsetModulo;\n        }\n      } else if (offset < 0) {\n        while (iteration > roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n          iteration -= 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n          iteration -= offsetModulo;\n        }\n      }\n\n      i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n      dir = this.data.m === 1 ? 1 : -1;\n      cont = this._currentCopies;\n      var j;\n      var jLen;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        jLen = itemsTransform.length;\n        items[items.length - 1].transform.mProps._mdf = true;\n        items[items.length - 1].transform.op._mdf = true;\n        items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n        if (iteration !== 0) {\n          if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n            this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          }\n\n          this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n          this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n          this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n\n          this.matrix.reset();\n        } else {\n          this.matrix.reset();\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n        }\n\n        iteration += 1;\n        cont -= 1;\n        i += dir;\n      }\n    } else {\n      cont = this._currentCopies;\n      i = 0;\n      dir = 1;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        items[items.length - 1].transform.mProps._mdf = false;\n        items[items.length - 1].transform.op._mdf = false;\n        cont -= 1;\n        i += dir;\n      }\n    }\n\n    return hasReloaded;\n  };\n\n  RepeaterModifier.prototype.addShape = function () {};\n\n  function RoundCornersModifier() {}\n\n  extendPrototype([ShapeModifier], RoundCornersModifier);\n\n  RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this._isAnimated = !!this.rd.effectsSequence.length;\n  };\n\n  RoundCornersModifier.prototype.processPath = function (path, round) {\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var i;\n    var len = path._length;\n    var currentV;\n    var currentI;\n    var currentO;\n    var closerV;\n    var distance;\n    var newPosPerc;\n    var index = 0;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < len; i += 1) {\n      currentV = path.v[i];\n      currentO = path.o[i];\n      currentI = path.i[i];\n\n      if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n        if ((i === 0 || i === len - 1) && !path.c) {\n          clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n          /* clonedPath.v[index] = currentV;\r\n                  clonedPath.o[index] = currentO;\r\n                  clonedPath.i[index] = currentI; */\n\n          index += 1;\n        } else {\n          if (i === 0) {\n            closerV = path.v[len - 1];\n          } else {\n            closerV = path.v[i - 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = iX;\n          iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n          vY = iY;\n          oX = vX - (vX - currentV[0]) * roundCorner;\n          oY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n\n          if (i === len - 1) {\n            closerV = path.v[0];\n          } else {\n            closerV = path.v[i + 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = oX;\n          oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n          vY = oY;\n          iX = vX - (vX - currentV[0]) * roundCorner;\n          iY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n        }\n      } else {\n        clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n        index += 1;\n      }\n    }\n\n    return clonedPath;\n  };\n\n  RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var rd = this.rd.v;\n\n    if (rd !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function floatEqual(a, b) {\n    return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n  }\n\n  function floatZero(f) {\n    return Math.abs(f) <= 0.00001;\n  }\n\n  function lerp(p0, p1, amount) {\n    return p0 * (1 - amount) + p1 * amount;\n  }\n\n  function lerpPoint(p0, p1, amount) {\n    return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n  }\n\n  function quadRoots(a, b, c) {\n    // no root\n    if (a === 0) return [];\n    var s = b * b - 4 * a * c; // Complex roots\n\n    if (s < 0) return [];\n    var singleRoot = -b / (2 * a); // 1 root\n\n    if (s === 0) return [singleRoot];\n    var delta = Math.sqrt(s) / (2 * a); // 2 roots\n\n    return [singleRoot - delta, singleRoot + delta];\n  }\n\n  function polynomialCoefficients(p0, p1, p2, p3) {\n    return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n  }\n\n  function singlePoint(p) {\n    return new PolynomialBezier(p, p, p, p, false);\n  }\n\n  function PolynomialBezier(p0, p1, p2, p3, linearize) {\n    if (linearize && pointEqual(p0, p1)) {\n      p1 = lerpPoint(p0, p3, 1 / 3);\n    }\n\n    if (linearize && pointEqual(p2, p3)) {\n      p2 = lerpPoint(p0, p3, 2 / 3);\n    }\n\n    var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n    var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n    this.a = [coeffx[0], coeffy[0]];\n    this.b = [coeffx[1], coeffy[1]];\n    this.c = [coeffx[2], coeffy[2]];\n    this.d = [coeffx[3], coeffy[3]];\n    this.points = [p0, p1, p2, p3];\n  }\n\n  PolynomialBezier.prototype.point = function (t) {\n    return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n  };\n\n  PolynomialBezier.prototype.derivative = function (t) {\n    return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n  };\n\n  PolynomialBezier.prototype.tangentAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[1], p[0]);\n  };\n\n  PolynomialBezier.prototype.normalAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[0], p[1]);\n  };\n\n  PolynomialBezier.prototype.inflectionPoints = function () {\n    var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n    if (floatZero(denom)) return [];\n    var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n    var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n    if (square < 0) return [];\n    var root = Math.sqrt(square);\n\n    if (floatZero(root)) {\n      if (root > 0 && root < 1) return [tcusp];\n      return [];\n    }\n\n    return [tcusp - root, tcusp + root].filter(function (r) {\n      return r > 0 && r < 1;\n    });\n  };\n\n  PolynomialBezier.prototype.split = function (t) {\n    if (t <= 0) return [singlePoint(this.points[0]), this];\n    if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n    var p10 = lerpPoint(this.points[0], this.points[1], t);\n    var p11 = lerpPoint(this.points[1], this.points[2], t);\n    var p12 = lerpPoint(this.points[2], this.points[3], t);\n    var p20 = lerpPoint(p10, p11, t);\n    var p21 = lerpPoint(p11, p12, t);\n    var p3 = lerpPoint(p20, p21, t);\n    return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n  };\n\n  function extrema(bez, comp) {\n    var min = bez.points[0][comp];\n    var max = bez.points[bez.points.length - 1][comp];\n\n    if (min > max) {\n      var e = max;\n      max = min;\n      min = e;\n    } // Derivative roots to find min/max\n\n\n    var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n\n    for (var i = 0; i < f.length; i += 1) {\n      if (f[i] > 0 && f[i] < 1) {\n        var val = bez.point(f[i])[comp];\n        if (val < min) min = val;else if (val > max) max = val;\n      }\n    }\n\n    return {\n      min: min,\n      max: max\n    };\n  }\n\n  PolynomialBezier.prototype.bounds = function () {\n    return {\n      x: extrema(this, 0),\n      y: extrema(this, 1)\n    };\n  };\n\n  PolynomialBezier.prototype.boundingBox = function () {\n    var bounds = this.bounds();\n    return {\n      left: bounds.x.min,\n      right: bounds.x.max,\n      top: bounds.y.min,\n      bottom: bounds.y.max,\n      width: bounds.x.max - bounds.x.min,\n      height: bounds.y.max - bounds.y.min,\n      cx: (bounds.x.max + bounds.x.min) / 2,\n      cy: (bounds.y.max + bounds.y.min) / 2\n    };\n  };\n\n  function intersectData(bez, t1, t2) {\n    var box = bez.boundingBox();\n    return {\n      cx: box.cx,\n      cy: box.cy,\n      width: box.width,\n      height: box.height,\n      bez: bez,\n      t: (t1 + t2) / 2,\n      t1: t1,\n      t2: t2\n    };\n  }\n\n  function splitData(data) {\n    var split = data.bez.split(0.5);\n    return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n  }\n\n  function boxIntersect(b1, b2) {\n    return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n  }\n\n  function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n    if (!boxIntersect(d1, d2)) return;\n\n    if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n      intersections.push([d1.t, d2.t]);\n      return;\n    }\n\n    var d1s = splitData(d1);\n    var d2s = splitData(d2);\n    intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n  }\n\n  PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n    if (tolerance === undefined) tolerance = 2;\n    if (maxRecursion === undefined) maxRecursion = 7;\n    var intersections = [];\n    intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n    return intersections;\n  };\n\n  PolynomialBezier.shapeSegment = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n  };\n\n  PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n  };\n\n  function crossProduct(a, b) {\n    return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n  }\n\n  function lineIntersection(start1, end1, start2, end2) {\n    var v1 = [start1[0], start1[1], 1];\n    var v2 = [end1[0], end1[1], 1];\n    var v3 = [start2[0], start2[1], 1];\n    var v4 = [end2[0], end2[1], 1];\n    var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n    if (floatZero(r[2])) return null;\n    return [r[0] / r[2], r[1] / r[2]];\n  }\n\n  function polarOffset(p, angle, length) {\n    return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n  }\n\n  function pointDistance(p1, p2) {\n    return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n  }\n\n  function pointEqual(p1, p2) {\n    return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n  }\n\n  function ZigZagModifier() {}\n\n  extendPrototype([ShapeModifier], ZigZagModifier);\n\n  ZigZagModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);\n    this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);\n    this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;\n  };\n\n  function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {\n    var angO = angle - Math.PI / 2;\n    var angI = angle + Math.PI / 2;\n    var px = point[0] + Math.cos(angle) * direction * amplitude;\n    var py = point[1] - Math.sin(angle) * direction * amplitude;\n    outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());\n  }\n\n  function getPerpendicularVector(pt1, pt2) {\n    var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];\n    var rot = -Math.PI * 0.5;\n    var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];\n    return rotatedVector;\n  }\n\n  function getProjectingAngle(path, cur) {\n    var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;\n    var nextIndex = (cur + 1) % path.length();\n    var prevPoint = path.v[prevIndex];\n    var nextPoint = path.v[nextIndex];\n    var pVector = getPerpendicularVector(prevPoint, nextPoint);\n    return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);\n  }\n\n  function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {\n    var angle = getProjectingAngle(path, cur);\n    var point = path.v[cur % path._length];\n    var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];\n    var nextPoint = path.v[(cur + 1) % path._length];\n    var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;\n    var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;\n    setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);\n  }\n\n  function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {\n    for (var i = 0; i < frequency; i += 1) {\n      var t = (i + 1) / (frequency + 1);\n      var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;\n      var angle = segment.normalAngle(t);\n      var point = segment.point(t);\n      setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);\n      direction = -direction;\n    }\n\n    return direction;\n  }\n\n  ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {\n    var count = path._length;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n\n    if (!path.c) {\n      count -= 1;\n    }\n\n    if (count === 0) return clonedPath;\n    var direction = -1;\n    var segment = PolynomialBezier.shapeSegment(path, 0);\n    zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);\n\n    for (var i = 0; i < count; i += 1) {\n      direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n\n      if (i === count - 1 && !path.c) {\n        segment = null;\n      } else {\n        segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n      }\n\n      zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n    }\n\n    return clonedPath;\n  };\n\n  ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amplitude = this.amplitude.v;\n    var frequency = Math.max(0, Math.round(this.frequency.v));\n    var pointType = this.pointsType.v;\n\n    if (amplitude !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function linearOffset(p1, p2, amount) {\n    var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);\n    return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];\n  }\n\n  function offsetSegment(segment, amount) {\n    var p0;\n    var p1a;\n    var p1b;\n    var p2b;\n    var p2a;\n    var p3;\n    var e;\n    e = linearOffset(segment.points[0], segment.points[1], amount);\n    p0 = e[0];\n    p1a = e[1];\n    e = linearOffset(segment.points[1], segment.points[2], amount);\n    p1b = e[0];\n    p2b = e[1];\n    e = linearOffset(segment.points[2], segment.points[3], amount);\n    p2a = e[0];\n    p3 = e[1];\n    var p1 = lineIntersection(p0, p1a, p1b, p2b);\n    if (p1 === null) p1 = p1a;\n    var p2 = lineIntersection(p2a, p3, p1b, p2b);\n    if (p2 === null) p2 = p2a;\n    return new PolynomialBezier(p0, p1, p2, p3);\n  }\n\n  function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n    var p0 = seg1.points[3];\n    var p1 = seg2.points[0]; // Bevel\n\n    if (lineJoin === 3) return p0; // Connected, they don't need a joint\n\n    if (pointEqual(p0, p1)) return p0; // Round\n\n    if (lineJoin === 2) {\n      var angleOut = -seg1.tangentAngle(1);\n      var angleIn = -seg2.tangentAngle(0) + Math.PI;\n      var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));\n      var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;\n      var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);\n      outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);\n      tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);\n      outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());\n      return p1;\n    } // Miter\n\n\n    var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];\n    var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];\n    var intersection = lineIntersection(t0, p0, p1, t1);\n\n    if (intersection && pointDistance(intersection, p0) < miterLimit) {\n      outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());\n      return intersection;\n    }\n\n    return p0;\n  }\n\n  function getIntersection(a, b) {\n    var intersect = a.intersections(b);\n    if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();\n    if (intersect.length) return intersect[0];\n    return null;\n  }\n\n  function pruneSegmentIntersection(a, b) {\n    var outa = a.slice();\n    var outb = b.slice();\n    var intersect = getIntersection(a[a.length - 1], b[0]);\n\n    if (intersect) {\n      outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];\n      outb[0] = b[0].split(intersect[1])[1];\n    }\n\n    if (a.length > 1 && b.length > 1) {\n      intersect = getIntersection(a[0], b[b.length - 1]);\n\n      if (intersect) {\n        return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n      }\n    }\n\n    return [outa, outb];\n  }\n\n  function pruneIntersections(segments) {\n    var e;\n\n    for (var i = 1; i < segments.length; i += 1) {\n      e = pruneSegmentIntersection(segments[i - 1], segments[i]);\n      segments[i - 1] = e[0];\n      segments[i] = e[1];\n    }\n\n    if (segments.length > 1) {\n      e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);\n      segments[segments.length - 1] = e[0];\n      segments[0] = e[1];\n    }\n\n    return segments;\n  }\n\n  function offsetSegmentSplit(segment, amount) {\n    /*\r\n      We split each bezier segment into smaller pieces based\r\n      on inflection points, this ensures the control point\r\n      polygon is convex.\r\n        (A cubic bezier can have none, one, or two inflection points)\r\n    */\n    var flex = segment.inflectionPoints();\n    var left;\n    var right;\n    var split;\n    var mid;\n\n    if (flex.length === 0) {\n      return [offsetSegment(segment, amount)];\n    }\n\n    if (flex.length === 1 || floatEqual(flex[1], 1)) {\n      split = segment.split(flex[0]);\n      left = split[0];\n      right = split[1];\n      return [offsetSegment(left, amount), offsetSegment(right, amount)];\n    }\n\n    split = segment.split(flex[0]);\n    left = split[0];\n    var t = (flex[1] - flex[0]) / (1 - flex[0]);\n    split = split[1].split(t);\n    mid = split[0];\n    right = split[1];\n    return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];\n  }\n\n  function OffsetPathModifier() {}\n\n  extendPrototype([ShapeModifier], OffsetPathModifier);\n\n  OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);\n    this.lineJoin = data.lj;\n    this._isAnimated = this.amount.effectsSequence.length !== 0;\n  };\n\n  OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n    var outputBezier = shapePool.newElement();\n    outputBezier.c = inputBezier.c;\n    var count = inputBezier.length();\n\n    if (!inputBezier.c) {\n      count -= 1;\n    }\n\n    var i;\n    var j;\n    var segment;\n    var multiSegments = [];\n\n    for (i = 0; i < count; i += 1) {\n      segment = PolynomialBezier.shapeSegment(inputBezier, i);\n      multiSegments.push(offsetSegmentSplit(segment, amount));\n    }\n\n    if (!inputBezier.c) {\n      for (i = count - 1; i >= 0; i -= 1) {\n        segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);\n        multiSegments.push(offsetSegmentSplit(segment, amount));\n      }\n    }\n\n    multiSegments = pruneIntersections(multiSegments); // Add bezier segments to the output and apply line joints\n\n    var lastPoint = null;\n    var lastSeg = null;\n\n    for (i = 0; i < multiSegments.length; i += 1) {\n      var multiSegment = multiSegments[i];\n      if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);\n      lastSeg = multiSegment[multiSegment.length - 1];\n\n      for (j = 0; j < multiSegment.length; j += 1) {\n        segment = multiSegment[j];\n\n        if (lastPoint && pointEqual(segment.points[0], lastPoint)) {\n          outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);\n        } else {\n          outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());\n        }\n\n        outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());\n        lastPoint = segment.points[3];\n      }\n    }\n\n    if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n    return outputBezier;\n  };\n\n  OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n    var miterLimit = this.miterLimit.v;\n    var lineJoin = this.lineJoin;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function getFontProperties(fontData) {\n    var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n    var fWeight = 'normal';\n    var fStyle = 'normal';\n    var len = styles.length;\n    var styleName;\n\n    for (var i = 0; i < len; i += 1) {\n      styleName = styles[i].toLowerCase();\n\n      switch (styleName) {\n        case 'italic':\n          fStyle = 'italic';\n          break;\n\n        case 'bold':\n          fWeight = '700';\n          break;\n\n        case 'black':\n          fWeight = '900';\n          break;\n\n        case 'medium':\n          fWeight = '500';\n          break;\n\n        case 'regular':\n        case 'normal':\n          fWeight = '400';\n          break;\n\n        case 'light':\n        case 'thin':\n          fWeight = '200';\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    return {\n      style: fStyle,\n      weight: fontData.fWeight || fWeight\n    };\n  }\n\n  var FontManager = function () {\n    var maxWaitingTime = 5000;\n    var emptyChar = {\n      w: 0,\n      size: 0,\n      shapes: [],\n      data: {\n        shapes: []\n      }\n    };\n    var combinedCharacters = []; // Hindi characters\n\n    combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n    var BLACK_FLAG_CODE_POINT = 127988;\n    var CANCEL_TAG_CODE_POINT = 917631;\n    var A_TAG_CODE_POINT = 917601;\n    var Z_TAG_CODE_POINT = 917626;\n    var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n    var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n    var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n    var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n    var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n\n    function trimFontOptions(font) {\n      var familyArray = font.split(',');\n      var i;\n      var len = familyArray.length;\n      var enabledFamilies = [];\n\n      for (i = 0; i < len; i += 1) {\n        if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n          enabledFamilies.push(familyArray[i]);\n        }\n      }\n\n      return enabledFamilies.join(',');\n    }\n\n    function setUpNode(font, family) {\n      var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n      parentNode.setAttribute('aria-hidden', true);\n      parentNode.style.fontFamily = family;\n      var node = createTag('span'); // Characters that vary significantly among different fonts\n\n      node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n      parentNode.style.position = 'absolute';\n      parentNode.style.left = '-10000px';\n      parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n      parentNode.style.fontSize = '300px'; // Reset any font properties\n\n      parentNode.style.fontVariant = 'normal';\n      parentNode.style.fontStyle = 'normal';\n      parentNode.style.fontWeight = 'normal';\n      parentNode.style.letterSpacing = '0';\n      parentNode.appendChild(node);\n      document.body.appendChild(parentNode); // Remember width with no applied web font\n\n      var width = node.offsetWidth;\n      node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n      return {\n        node: node,\n        w: width,\n        parent: parentNode\n      };\n    }\n\n    function checkLoadedFonts() {\n      var i;\n      var len = this.fonts.length;\n      var node;\n      var w;\n      var loadedCount = len;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.fonts[i].loaded) {\n          loadedCount -= 1;\n        } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n          this.fonts[i].loaded = true;\n        } else {\n          node = this.fonts[i].monoCase.node;\n          w = this.fonts[i].monoCase.w;\n\n          if (node.offsetWidth !== w) {\n            loadedCount -= 1;\n            this.fonts[i].loaded = true;\n          } else {\n            node = this.fonts[i].sansCase.node;\n            w = this.fonts[i].sansCase.w;\n\n            if (node.offsetWidth !== w) {\n              loadedCount -= 1;\n              this.fonts[i].loaded = true;\n            }\n          }\n\n          if (this.fonts[i].loaded) {\n            this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n            this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n          }\n        }\n      }\n\n      if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n        setTimeout(this.checkLoadedFontsBinded, 20);\n      } else {\n        setTimeout(this.setIsLoadedBinded, 10);\n      }\n    }\n\n    function createHelper(fontData, def) {\n      var engine = document.body && def ? 'svg' : 'canvas';\n      var helper;\n      var fontProps = getFontProperties(fontData);\n\n      if (engine === 'svg') {\n        var tHelper = createNS('text');\n        tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n        tHelper.setAttribute('font-family', fontData.fFamily);\n        tHelper.setAttribute('font-style', fontProps.style);\n        tHelper.setAttribute('font-weight', fontProps.weight);\n        tHelper.textContent = '1';\n\n        if (fontData.fClass) {\n          tHelper.style.fontFamily = 'inherit';\n          tHelper.setAttribute('class', fontData.fClass);\n        } else {\n          tHelper.style.fontFamily = fontData.fFamily;\n        }\n\n        def.appendChild(tHelper);\n        helper = tHelper;\n      } else {\n        var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n        tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n        helper = tCanvasHelper;\n      }\n\n      function measure(text) {\n        if (engine === 'svg') {\n          helper.textContent = text;\n          return helper.getComputedTextLength();\n        }\n\n        return helper.measureText(text).width;\n      }\n\n      return {\n        measureText: measure\n      };\n    }\n\n    function addFonts(fontData, defs) {\n      if (!fontData) {\n        this.isLoaded = true;\n        return;\n      }\n\n      if (this.chars) {\n        this.isLoaded = true;\n        this.fonts = fontData.list;\n        return;\n      }\n\n      if (!document.body) {\n        this.isLoaded = true;\n        fontData.list.forEach(function (data) {\n          data.helper = createHelper(data);\n          data.cache = {};\n        });\n        this.fonts = fontData.list;\n        return;\n      }\n\n      var fontArr = fontData.list;\n      var i;\n      var len = fontArr.length;\n      var _pendingFonts = len;\n\n      for (i = 0; i < len; i += 1) {\n        var shouldLoadFont = true;\n        var loadedSelector;\n        var j;\n        fontArr[i].loaded = false;\n        fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n        fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n        if (!fontArr[i].fPath) {\n          fontArr[i].loaded = true;\n          _pendingFonts -= 1;\n        } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n          loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n          if (loadedSelector.length > 0) {\n            shouldLoadFont = false;\n          }\n\n          if (shouldLoadFont) {\n            var s = createTag('style');\n            s.setAttribute('f-forigin', fontArr[i].fOrigin);\n            s.setAttribute('f-origin', fontArr[i].origin);\n            s.setAttribute('f-family', fontArr[i].fFamily);\n            s.type = 'text/css';\n            s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n            defs.appendChild(s);\n          }\n        } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n          loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var l = createTag('link');\n            l.setAttribute('f-forigin', fontArr[i].fOrigin);\n            l.setAttribute('f-origin', fontArr[i].origin);\n            l.type = 'text/css';\n            l.rel = 'stylesheet';\n            l.href = fontArr[i].fPath;\n            document.body.appendChild(l);\n          }\n        } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n          loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (fontArr[i].fPath === loadedSelector[j].src) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var sc = createTag('link');\n            sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n            sc.setAttribute('f-origin', fontArr[i].origin);\n            sc.setAttribute('rel', 'stylesheet');\n            sc.setAttribute('href', fontArr[i].fPath);\n            defs.appendChild(sc);\n          }\n        }\n\n        fontArr[i].helper = createHelper(fontArr[i], defs);\n        fontArr[i].cache = {};\n        this.fonts.push(fontArr[i]);\n      }\n\n      if (_pendingFonts === 0) {\n        this.isLoaded = true;\n      } else {\n        // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n        // Adding this timeout seems to fix it\n        setTimeout(this.checkLoadedFonts.bind(this), 100);\n      }\n    }\n\n    function addChars(chars) {\n      if (!chars) {\n        return;\n      }\n\n      if (!this.chars) {\n        this.chars = [];\n      }\n\n      var i;\n      var len = chars.length;\n      var j;\n      var jLen = this.chars.length;\n      var found;\n\n      for (i = 0; i < len; i += 1) {\n        j = 0;\n        found = false;\n\n        while (j < jLen) {\n          if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n            found = true;\n          }\n\n          j += 1;\n        }\n\n        if (!found) {\n          this.chars.push(chars[i]);\n          jLen += 1;\n        }\n      }\n    }\n\n    function getCharData(_char, style, font) {\n      var i = 0;\n      var len = this.chars.length;\n\n      while (i < len) {\n        if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n          return this.chars[i];\n        }\n\n        i += 1;\n      }\n\n      if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n      && !this._warned) {\n        this._warned = true;\n        console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n      }\n\n      return emptyChar;\n    }\n\n    function measureText(_char2, fontName, size) {\n      var fontData = this.getFontByName(fontName); // Using the char instead of char.charCodeAt(0)\n      // to avoid collisions between equal chars\n\n      var index = _char2;\n\n      if (!fontData.cache[index]) {\n        var tHelper = fontData.helper;\n\n        if (_char2 === ' ') {\n          var doubleSize = tHelper.measureText('|' + _char2 + '|');\n          var singleSize = tHelper.measureText('||');\n          fontData.cache[index] = (doubleSize - singleSize) / 100;\n        } else {\n          fontData.cache[index] = tHelper.measureText(_char2) / 100;\n        }\n      }\n\n      return fontData.cache[index] * size;\n    }\n\n    function getFontByName(name) {\n      var i = 0;\n      var len = this.fonts.length;\n\n      while (i < len) {\n        if (this.fonts[i].fName === name) {\n          return this.fonts[i];\n        }\n\n        i += 1;\n      }\n\n      return this.fonts[0];\n    }\n\n    function getCodePoint(string) {\n      var codePoint = 0;\n      var first = string.charCodeAt(0);\n\n      if (first >= 0xD800 && first <= 0xDBFF) {\n        var second = string.charCodeAt(1);\n\n        if (second >= 0xDC00 && second <= 0xDFFF) {\n          codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        }\n      }\n\n      return codePoint;\n    } // Skin tone modifiers\n\n\n    function isModifier(firstCharCode, secondCharCode) {\n      var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n      return surrogateModifiers.indexOf(sum) !== -1;\n    }\n\n    function isZeroWidthJoiner(charCode) {\n      return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n    } // This codepoint may change the appearance of the preceding character.\n    // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n    // as a colorful image as compared to a monochrome text variant.\n\n\n    function isVariationSelector(charCode) {\n      return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n    } // The regional indicator symbols are a set of 26 alphabetic Unicode\n    /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n    // two-letter country codes in a way that allows optional special treatment.\n\n\n    function isRegionalCode(string) {\n      var codePoint = getCodePoint(string);\n\n      if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n        return true;\n      }\n\n      return false;\n    } // Some Emoji implementations represent combinations of\n    // two “regional indicator” letters as a single flag symbol.\n\n\n    function isFlagEmoji(string) {\n      return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n    }\n\n    function isCombinedCharacter(_char3) {\n      return combinedCharacters.indexOf(_char3) !== -1;\n    } // Regional flags start with a BLACK_FLAG_CODE_POINT\n    // folowed by 5 chars in the TAG range\n    // and end with a CANCEL_TAG_CODE_POINT\n\n\n    function isRegionalFlag(text, index) {\n      var codePoint = getCodePoint(text.substr(index, 2));\n\n      if (codePoint !== BLACK_FLAG_CODE_POINT) {\n        return false;\n      }\n\n      var count = 0;\n      index += 2;\n\n      while (count < 5) {\n        codePoint = getCodePoint(text.substr(index, 2));\n\n        if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n          return false;\n        }\n\n        count += 1;\n        index += 2;\n      }\n\n      return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n    }\n\n    function setIsLoaded() {\n      this.isLoaded = true;\n    }\n\n    var Font = function Font() {\n      this.fonts = [];\n      this.chars = null;\n      this.typekitLoaded = 0;\n      this.isLoaded = false;\n      this._warned = false;\n      this.initTime = Date.now();\n      this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n      this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n    };\n\n    Font.isModifier = isModifier;\n    Font.isZeroWidthJoiner = isZeroWidthJoiner;\n    Font.isFlagEmoji = isFlagEmoji;\n    Font.isRegionalCode = isRegionalCode;\n    Font.isCombinedCharacter = isCombinedCharacter;\n    Font.isRegionalFlag = isRegionalFlag;\n    Font.isVariationSelector = isVariationSelector;\n    Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\n    var fontPrototype = {\n      addChars: addChars,\n      addFonts: addFonts,\n      getCharData: getCharData,\n      getFontByName: getFontByName,\n      measureText: measureText,\n      checkLoadedFonts: checkLoadedFonts,\n      setIsLoaded: setIsLoaded\n    };\n    Font.prototype = fontPrototype;\n    return Font;\n  }();\n\n  function SlotManager(animationData) {\n    this.animationData = animationData;\n  }\n\n  SlotManager.prototype.getProp = function (data) {\n    if (this.animationData.slots && this.animationData.slots[data.sid]) {\n      return Object.assign(data, this.animationData.slots[data.sid].p);\n    }\n\n    return data;\n  };\n\n  function slotFactory(animationData) {\n    return new SlotManager(animationData);\n  }\n\n  function RenderableElement() {}\n\n  RenderableElement.prototype = {\n    initRenderable: function initRenderable() {\n      // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n      this.isInRange = false; // layer's display state\n\n      this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n      this.isTransparent = false; // list of animated components\n\n      this.renderableComponents = [];\n    },\n    addRenderableComponent: function addRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) === -1) {\n        this.renderableComponents.push(component);\n      }\n    },\n    removeRenderableComponent: function removeRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) !== -1) {\n        this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n      }\n    },\n    prepareRenderableFrame: function prepareRenderableFrame(num) {\n      this.checkLayerLimits(num);\n    },\n    checkTransparency: function checkTransparency() {\n      if (this.finalTransform.mProp.o.v <= 0) {\n        if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n          this.isTransparent = true;\n          this.hide();\n        }\n      } else if (this.isTransparent) {\n        this.isTransparent = false;\n        this.show();\n      }\n    },\n\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       *\r\n       */\n    checkLayerLimits: function checkLayerLimits(num) {\n      if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n        if (this.isInRange !== true) {\n          this.globalData._mdf = true;\n          this._mdf = true;\n          this.isInRange = true;\n          this.show();\n        }\n      } else if (this.isInRange !== false) {\n        this.globalData._mdf = true;\n        this.isInRange = false;\n        this.hide();\n      }\n    },\n    renderRenderable: function renderRenderable() {\n      var i;\n      var len = this.renderableComponents.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderableComponents[i].renderFrame(this._isFirstFrame);\n      }\n      /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n          this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n    },\n    sourceRectAtTime: function sourceRectAtTime() {\n      return {\n        top: 0,\n        left: 0,\n        width: 100,\n        height: 100\n      };\n    },\n    getLayerSize: function getLayerSize() {\n      if (this.data.ty === 5) {\n        return {\n          w: this.data.textData.width,\n          h: this.data.textData.height\n        };\n      }\n\n      return {\n        w: this.data.width,\n        h: this.data.height\n      };\n    }\n  };\n\n  var getBlendMode = function () {\n    var blendModeEnums = {\n      0: 'source-over',\n      1: 'multiply',\n      2: 'screen',\n      3: 'overlay',\n      4: 'darken',\n      5: 'lighten',\n      6: 'color-dodge',\n      7: 'color-burn',\n      8: 'hard-light',\n      9: 'soft-light',\n      10: 'difference',\n      11: 'exclusion',\n      12: 'hue',\n      13: 'saturation',\n      14: 'color',\n      15: 'luminosity'\n    };\n    return function (mode) {\n      return blendModeEnums[mode] || '';\n    };\n  }();\n\n  function SliderEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function AngleEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function ColorEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function PointEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function LayerIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function MaskIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function CheckboxEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function NoValueEffect() {\n    this.p = {};\n  }\n\n  function EffectsManager(data, element) {\n    var effects = data.ef || [];\n    this.effectElements = [];\n    var i;\n    var len = effects.length;\n    var effectItem;\n\n    for (i = 0; i < len; i += 1) {\n      effectItem = new GroupEffect(effects[i], element);\n      this.effectElements.push(effectItem);\n    }\n  }\n\n  function GroupEffect(data, element) {\n    this.init(data, element);\n  }\n\n  extendPrototype([DynamicPropertyContainer], GroupEffect);\n  GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n  GroupEffect.prototype.init = function (data, element) {\n    this.data = data;\n    this.effectElements = [];\n    this.initDynamicPropertyContainer(element);\n    var i;\n    var len = this.data.ef.length;\n    var eff;\n    var effects = this.data.ef;\n\n    for (i = 0; i < len; i += 1) {\n      eff = null;\n\n      switch (effects[i].ty) {\n        case 0:\n          eff = new SliderEffect(effects[i], element, this);\n          break;\n\n        case 1:\n          eff = new AngleEffect(effects[i], element, this);\n          break;\n\n        case 2:\n          eff = new ColorEffect(effects[i], element, this);\n          break;\n\n        case 3:\n          eff = new PointEffect(effects[i], element, this);\n          break;\n\n        case 4:\n        case 7:\n          eff = new CheckboxEffect(effects[i], element, this);\n          break;\n\n        case 10:\n          eff = new LayerIndexEffect(effects[i], element, this);\n          break;\n\n        case 11:\n          eff = new MaskIndexEffect(effects[i], element, this);\n          break;\n\n        case 5:\n          eff = new EffectsManager(effects[i], element, this);\n          break;\n        // case 6:\n\n        default:\n          eff = new NoValueEffect(effects[i], element, this);\n          break;\n      }\n\n      if (eff) {\n        this.effectElements.push(eff);\n      }\n    }\n  };\n\n  function BaseElement() {}\n\n  BaseElement.prototype = {\n    checkMasks: function checkMasks() {\n      if (!this.data.hasMask) {\n        return false;\n      }\n\n      var i = 0;\n      var len = this.data.masksProperties.length;\n\n      while (i < len) {\n        if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n          return true;\n        }\n\n        i += 1;\n      }\n\n      return false;\n    },\n    initExpressions: function initExpressions() {\n      var expressionsInterfaces = getExpressionInterfaces();\n\n      if (!expressionsInterfaces) {\n        return;\n      }\n\n      var LayerExpressionInterface = expressionsInterfaces('layer');\n      var EffectsExpressionInterface = expressionsInterfaces('effects');\n      var ShapeExpressionInterface = expressionsInterfaces('shape');\n      var TextExpressionInterface = expressionsInterfaces('text');\n      var CompExpressionInterface = expressionsInterfaces('comp');\n      this.layerInterface = LayerExpressionInterface(this);\n\n      if (this.data.hasMask && this.maskManager) {\n        this.layerInterface.registerMaskInterface(this.maskManager);\n      }\n\n      var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n      this.layerInterface.registerEffectsInterface(effectsInterface);\n\n      if (this.data.ty === 0 || this.data.xt) {\n        this.compInterface = CompExpressionInterface(this);\n      } else if (this.data.ty === 4) {\n        this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n        this.layerInterface.content = this.layerInterface.shapeInterface;\n      } else if (this.data.ty === 5) {\n        this.layerInterface.textInterface = TextExpressionInterface(this);\n        this.layerInterface.text = this.layerInterface.textInterface;\n      }\n    },\n    setBlendMode: function setBlendMode() {\n      var blendModeValue = getBlendMode(this.data.bm);\n      var elem = this.baseElement || this.layerElement;\n      elem.style['mix-blend-mode'] = blendModeValue;\n    },\n    initBaseData: function initBaseData(data, globalData, comp) {\n      this.globalData = globalData;\n      this.comp = comp;\n      this.data = data;\n      this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n      if (!this.data.sr) {\n        this.data.sr = 1;\n      } // effects manager\n\n\n      this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n    },\n    getType: function getType() {\n      return this.type;\n    },\n    sourceRectAtTime: function sourceRectAtTime() {}\n  };\n\n  /**\r\n   * @file\r\n   * Handles element's layer frame update.\r\n   * Checks layer in point and out point\r\n   *\r\n   */\n  function FrameElement() {}\n\n  FrameElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       */\n    initFrame: function initFrame() {\n      // set to true when inpoint is rendered\n      this._isFirstFrame = false; // list of animated properties\n\n      this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n      this._mdf = false;\n    },\n\n    /**\r\n       * @function\r\n       * Calculates all dynamic values\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       * @param {boolean} isVisible\r\n       * if layers is currently in range\r\n       *\r\n       */\n    prepareProperties: function prepareProperties(num, isVisible) {\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n          this.dynamicProperties[i].getValue();\n\n          if (this.dynamicProperties[i]._mdf) {\n            this.globalData._mdf = true;\n            this._mdf = true;\n          }\n        }\n      }\n    },\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n      }\n    }\n  };\n\n  function FootageElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.footageData = globalData.imageLoader.getAsset(this.assetData);\n    this.initBaseData(data, globalData, comp);\n  }\n\n  FootageElement.prototype.prepareFrame = function () {};\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n  FootageElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  FootageElement.prototype.renderFrame = function () {};\n\n  FootageElement.prototype.destroy = function () {};\n\n  FootageElement.prototype.initExpressions = function () {\n    var expressionsInterfaces = getExpressionInterfaces();\n\n    if (!expressionsInterfaces) {\n      return;\n    }\n\n    var FootageInterface = expressionsInterfaces('footage');\n    this.layerInterface = FootageInterface(this);\n  };\n\n  FootageElement.prototype.getFootageData = function () {\n    return this.footageData;\n  };\n\n  function AudioElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initBaseData(data, globalData, comp);\n    this._isPlaying = false;\n    this._canPlay = false;\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.audio = this.globalData.audioController.createAudio(assetPath);\n    this._currentTime = 0;\n    this.globalData.audioController.addAudio(this);\n    this._volumeMultiplier = 1;\n    this._volume = 1;\n    this._previousVolume = null;\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n    this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n      k: [100]\n    }, 1, 0.01, this);\n  }\n\n  AudioElement.prototype.prepareFrame = function (num) {\n    this.prepareRenderableFrame(num, true);\n    this.prepareProperties(num, true);\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n      this._currentTime = timeRemapped;\n    } else {\n      this._currentTime = num / this.data.sr;\n    }\n\n    this._volume = this.lv.v[0];\n    var totalVolume = this._volume * this._volumeMultiplier;\n\n    if (this._previousVolume !== totalVolume) {\n      this._previousVolume = totalVolume;\n      this.audio.volume(totalVolume);\n    }\n  };\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n  AudioElement.prototype.renderFrame = function () {\n    if (this.isInRange && this._canPlay) {\n      if (!this._isPlaying) {\n        this.audio.play();\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n        this._isPlaying = true;\n      } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n      }\n    }\n  };\n\n  AudioElement.prototype.show = function () {// this.audio.play()\n  };\n\n  AudioElement.prototype.hide = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n  };\n\n  AudioElement.prototype.pause = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n    this._canPlay = false;\n  };\n\n  AudioElement.prototype.resume = function () {\n    this._canPlay = true;\n  };\n\n  AudioElement.prototype.setRate = function (rateValue) {\n    this.audio.rate(rateValue);\n  };\n\n  AudioElement.prototype.volume = function (volumeValue) {\n    this._volumeMultiplier = volumeValue;\n    this._previousVolume = volumeValue * this._volume;\n    this.audio.volume(this._previousVolume);\n  };\n\n  AudioElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  AudioElement.prototype.destroy = function () {};\n\n  AudioElement.prototype.sourceRectAtTime = function () {};\n\n  AudioElement.prototype.initExpressions = function () {};\n\n  function BaseRenderer() {}\n\n  BaseRenderer.prototype.checkLayers = function (num) {\n    var i;\n    var len = this.layers.length;\n    var data;\n    this.completeLayers = true;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (!this.elements[i]) {\n        data = this.layers[i];\n\n        if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n          this.buildItem(i);\n        }\n      }\n\n      this.completeLayers = this.elements[i] ? this.completeLayers : false;\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.createItem = function (layer) {\n    switch (layer.ty) {\n      case 2:\n        return this.createImage(layer);\n\n      case 0:\n        return this.createComp(layer);\n\n      case 1:\n        return this.createSolid(layer);\n\n      case 3:\n        return this.createNull(layer);\n\n      case 4:\n        return this.createShape(layer);\n\n      case 5:\n        return this.createText(layer);\n\n      case 6:\n        return this.createAudio(layer);\n\n      case 13:\n        return this.createCamera(layer);\n\n      case 15:\n        return this.createFootage(layer);\n\n      default:\n        return this.createNull(layer);\n    }\n  };\n\n  BaseRenderer.prototype.createCamera = function () {\n    throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n  };\n\n  BaseRenderer.prototype.createAudio = function (data) {\n    return new AudioElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.createFootage = function (data) {\n    return new FootageElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.buildAllItems = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.buildItem(i);\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.includeLayers = function (newLayers) {\n    this.completeLayers = false;\n    var i;\n    var len = newLayers.length;\n    var j;\n    var jLen = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      j = 0;\n\n      while (j < jLen) {\n        if (this.layers[j].id === newLayers[i].id) {\n          this.layers[j] = newLayers[i];\n          break;\n        }\n\n        j += 1;\n      }\n    }\n  };\n\n  BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n    this.globalData.projectInterface = pInterface;\n  };\n\n  BaseRenderer.prototype.initItems = function () {\n    if (!this.globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n  };\n\n  BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n    var elements = this.elements;\n    var layers = this.layers;\n    var i = 0;\n    var len = layers.length;\n\n    while (i < len) {\n      if (layers[i].ind == parentName) {\n        // eslint-disable-line eqeqeq\n        if (!elements[i] || elements[i] === true) {\n          this.buildItem(i);\n          this.addPendingElement(element);\n        } else {\n          hierarchy.push(elements[i]);\n          elements[i].setAsParent();\n\n          if (layers[i].parent !== undefined) {\n            this.buildElementParenting(element, layers[i].parent, hierarchy);\n          } else {\n            element.setHierarchy(hierarchy);\n          }\n        }\n      }\n\n      i += 1;\n    }\n  };\n\n  BaseRenderer.prototype.addPendingElement = function (element) {\n    this.pendingElements.push(element);\n  };\n\n  BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i]);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  BaseRenderer.prototype.getElementById = function (ind) {\n    var i;\n    var len = this.elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i].data.ind === ind) {\n        return this.elements[i];\n      }\n    }\n\n    return null;\n  };\n\n  BaseRenderer.prototype.getElementByPath = function (path) {\n    var pathValue = path.shift();\n    var element;\n\n    if (typeof pathValue === 'number') {\n      element = this.elements[pathValue];\n    } else {\n      var i;\n      var len = this.elements.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.elements[i].data.nm === pathValue) {\n          element = this.elements[i];\n          break;\n        }\n      }\n    }\n\n    if (path.length === 0) {\n      return element;\n    }\n\n    return element.getElementByPath(path);\n  };\n\n  BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n    this.globalData.fontManager = new FontManager();\n    this.globalData.slotManager = slotFactory(animData);\n    this.globalData.fontManager.addChars(animData.chars);\n    this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n    this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n    this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n    this.globalData.imageLoader = this.animationItem.imagePreloader;\n    this.globalData.audioController = this.animationItem.audioController;\n    this.globalData.frameId = 0;\n    this.globalData.frameRate = animData.fr;\n    this.globalData.nm = animData.nm;\n    this.globalData.compSize = {\n      w: animData.w,\n      h: animData.h\n    };\n  };\n\n  var effectTypes = {\n    TRANSFORM_EFFECT: 'transformEFfect'\n  };\n\n  function TransformElement() {}\n\n  TransformElement.prototype = {\n    initTransform: function initTransform() {\n      var mat = new Matrix();\n      this.finalTransform = {\n        mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n          o: 0\n        },\n        _matMdf: false,\n        _localMatMdf: false,\n        _opMdf: false,\n        mat: mat,\n        localMat: mat,\n        localOpacity: 1\n      };\n\n      if (this.data.ao) {\n        this.finalTransform.mProp.autoOriented = true;\n      } // TODO: check TYPE 11: Guided elements\n\n\n      if (this.data.ty !== 11) {// this.createElements();\n      }\n    },\n    renderTransform: function renderTransform() {\n      this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n      this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n      if (this.hierarchy) {\n        var mat;\n        var finalMat = this.finalTransform.mat;\n        var i = 0;\n        var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n        if (!this.finalTransform._matMdf) {\n          while (i < len) {\n            if (this.hierarchy[i].finalTransform.mProp._mdf) {\n              this.finalTransform._matMdf = true;\n              break;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._matMdf) {\n          mat = this.finalTransform.mProp.v.props;\n          finalMat.cloneFromProps(mat);\n\n          for (i = 0; i < len; i += 1) {\n            finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n          }\n        }\n      }\n\n      if (this.finalTransform._matMdf) {\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderLocalTransform: function renderLocalTransform() {\n      if (this.localTransforms) {\n        var i = 0;\n        var len = this.localTransforms.length;\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n\n        if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n          while (i < len) {\n            if (this.localTransforms[i]._mdf) {\n              this.finalTransform._localMatMdf = true;\n            }\n\n            if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n              this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n              this.finalTransform._opMdf = true;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._localMatMdf) {\n          var localMat = this.finalTransform.localMat;\n          this.localTransforms[0].matrix.clone(localMat);\n\n          for (i = 1; i < len; i += 1) {\n            var lmat = this.localTransforms[i].matrix;\n            localMat.multiply(lmat);\n          }\n\n          localMat.multiply(this.finalTransform.mat);\n        }\n\n        if (this.finalTransform._opMdf) {\n          var localOp = this.finalTransform.localOpacity;\n\n          for (i = 0; i < len; i += 1) {\n            localOp *= this.localTransforms[i].opacity * 0.01;\n          }\n\n          this.finalTransform.localOpacity = localOp;\n        }\n      }\n    },\n    searchEffectTransforms: function searchEffectTransforms() {\n      if (this.renderableEffectsManager) {\n        var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n\n        if (transformEffects.length) {\n          this.localTransforms = [];\n          this.finalTransform.localMat = new Matrix();\n          var i = 0;\n          var len = transformEffects.length;\n\n          for (i = 0; i < len; i += 1) {\n            this.localTransforms.push(transformEffects[i]);\n          }\n        }\n      }\n    },\n    globalToLocal: function globalToLocal(pt) {\n      var transforms = [];\n      transforms.push(this.finalTransform);\n      var flag = true;\n      var comp = this.comp;\n\n      while (flag) {\n        if (comp.finalTransform) {\n          if (comp.data.hasMask) {\n            transforms.splice(0, 0, comp.finalTransform);\n          }\n\n          comp = comp.comp;\n        } else {\n          flag = false;\n        }\n      }\n\n      var i;\n      var len = transforms.length;\n      var ptNew;\n\n      for (i = 0; i < len; i += 1) {\n        ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n        pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n      }\n\n      return pt;\n    },\n    mHelper: new Matrix()\n  };\n\n  function MaskElement(data, element, globalData) {\n    this.data = data;\n    this.element = element;\n    this.globalData = globalData;\n    this.storedData = [];\n    this.masksProperties = this.data.masksProperties || [];\n    this.maskElement = null;\n    var defs = this.globalData.defs;\n    var i;\n    var len = this.masksProperties ? this.masksProperties.length : 0;\n    this.viewData = createSizedArray(len);\n    this.solidPath = '';\n    var path;\n    var properties = this.masksProperties;\n    var count = 0;\n    var currentMasks = [];\n    var j;\n    var jLen;\n    var layerId = createElementID();\n    var rect;\n    var expansor;\n    var feMorph;\n    var x;\n    var maskType = 'clipPath';\n    var maskRef = 'clip-path';\n\n    for (i = 0; i < len; i += 1) {\n      if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n        maskType = 'mask';\n        maskRef = 'mask';\n      }\n\n      if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n        rect = createNS('rect');\n        rect.setAttribute('fill', '#ffffff');\n        rect.setAttribute('width', this.element.comp.data.w || 0);\n        rect.setAttribute('height', this.element.comp.data.h || 0);\n        currentMasks.push(rect);\n      } else {\n        rect = null;\n      }\n\n      path = createNS('path');\n\n      if (properties[i].mode === 'n') {\n        // TODO move this to a factory or to a constructor\n        this.viewData[i] = {\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          elem: path,\n          lastPath: ''\n        };\n        defs.appendChild(path);\n      } else {\n        count += 1;\n        path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        path.setAttribute('clip-rule', 'nonzero');\n        var filterID;\n\n        if (properties[i].x.k !== 0) {\n          maskType = 'mask';\n          maskRef = 'mask';\n          x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n          filterID = createElementID();\n          expansor = createNS('filter');\n          expansor.setAttribute('id', filterID);\n          feMorph = createNS('feMorphology');\n          feMorph.setAttribute('operator', 'erode');\n          feMorph.setAttribute('in', 'SourceGraphic');\n          feMorph.setAttribute('radius', '0');\n          expansor.appendChild(feMorph);\n          defs.appendChild(expansor);\n          path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        } else {\n          feMorph = null;\n          x = null;\n        } // TODO move this to a factory or to a constructor\n\n\n        this.storedData[i] = {\n          elem: path,\n          x: x,\n          expan: feMorph,\n          lastPath: '',\n          lastOperator: '',\n          filterId: filterID,\n          lastRadius: 0\n        };\n\n        if (properties[i].mode === 'i') {\n          jLen = currentMasks.length;\n          var g = createNS('g');\n\n          for (j = 0; j < jLen; j += 1) {\n            g.appendChild(currentMasks[j]);\n          }\n\n          var mask = createNS('mask');\n          mask.setAttribute('mask-type', 'alpha');\n          mask.setAttribute('id', layerId + '_' + count);\n          mask.appendChild(path);\n          defs.appendChild(mask);\n          g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n          currentMasks.length = 0;\n          currentMasks.push(g);\n        } else {\n          currentMasks.push(path);\n        }\n\n        if (properties[i].inv && !this.solidPath) {\n          this.solidPath = this.createLayerSolidPath();\n        } // TODO move this to a factory or to a constructor\n\n\n        this.viewData[i] = {\n          elem: path,\n          lastPath: '',\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          invRect: rect\n        };\n\n        if (!this.viewData[i].prop.k) {\n          this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n        }\n      }\n    }\n\n    this.maskElement = createNS(maskType);\n    len = currentMasks.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.maskElement.appendChild(currentMasks[i]);\n    }\n\n    if (count > 0) {\n      this.maskElement.setAttribute('id', layerId);\n      this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n      defs.appendChild(this.maskElement);\n    }\n\n    if (this.viewData.length) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  MaskElement.prototype.getMaskProperty = function (pos) {\n    return this.viewData[pos].prop;\n  };\n\n  MaskElement.prototype.renderFrame = function (isFirstFrame) {\n    var finalMat = this.element.finalTransform.mat;\n    var i;\n    var len = this.masksProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.viewData[i].prop._mdf || isFirstFrame) {\n        this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n      }\n\n      if (this.viewData[i].op._mdf || isFirstFrame) {\n        this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n      }\n\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n          this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n        }\n\n        if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n          var feMorph = this.storedData[i].expan;\n\n          if (this.storedData[i].x.v < 0) {\n            if (this.storedData[i].lastOperator !== 'erode') {\n              this.storedData[i].lastOperator = 'erode';\n              this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n            }\n\n            feMorph.setAttribute('radius', -this.storedData[i].x.v);\n          } else {\n            if (this.storedData[i].lastOperator !== 'dilate') {\n              this.storedData[i].lastOperator = 'dilate';\n              this.storedData[i].elem.setAttribute('filter', null);\n            }\n\n            this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n          }\n        }\n      }\n    }\n  };\n\n  MaskElement.prototype.getMaskelement = function () {\n    return this.maskElement;\n  };\n\n  MaskElement.prototype.createLayerSolidPath = function () {\n    var path = 'M0,0 ';\n    path += ' h' + this.globalData.compSize.w;\n    path += ' v' + this.globalData.compSize.h;\n    path += ' h-' + this.globalData.compSize.w;\n    path += ' v-' + this.globalData.compSize.h + ' ';\n    return path;\n  };\n\n  MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n    var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    var i;\n    var len;\n    len = pathNodes._length;\n\n    for (i = 1; i < len; i += 1) {\n      // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n    } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n    if (pathNodes.c && len > 1) {\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    } // pathNodes.__renderedString = pathString;\n\n\n    if (viewData.lastPath !== pathString) {\n      var pathShapeValue = '';\n\n      if (viewData.elem) {\n        if (pathNodes.c) {\n          pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n        }\n\n        viewData.elem.setAttribute('d', pathShapeValue);\n      }\n\n      viewData.lastPath = pathString;\n    }\n  };\n\n  MaskElement.prototype.destroy = function () {\n    this.element = null;\n    this.globalData = null;\n    this.maskElement = null;\n    this.data = null;\n    this.masksProperties = null;\n  };\n\n  var filtersFactory = function () {\n    var ob = {};\n    ob.createFilter = createFilter;\n    ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n    function createFilter(filId, skipCoordinates) {\n      var fil = createNS('filter');\n      fil.setAttribute('id', filId);\n\n      if (skipCoordinates !== true) {\n        fil.setAttribute('filterUnits', 'objectBoundingBox');\n        fil.setAttribute('x', '0%');\n        fil.setAttribute('y', '0%');\n        fil.setAttribute('width', '100%');\n        fil.setAttribute('height', '100%');\n      }\n\n      return fil;\n    }\n\n    function createAlphaToLuminanceFilter() {\n      var feColorMatrix = createNS('feColorMatrix');\n      feColorMatrix.setAttribute('type', 'matrix');\n      feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n      feColorMatrix.setAttribute('values', '0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1');\n      return feColorMatrix;\n    }\n\n    return ob;\n  }();\n\n  var featureSupport = function () {\n    var ob = {\n      maskType: true,\n      svgLumaHidden: true,\n      offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\n    };\n\n    if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n      ob.maskType = false;\n    }\n\n    if (/firefox/i.test(navigator.userAgent)) {\n      ob.svgLumaHidden = false;\n    }\n\n    return ob;\n  }();\n\n  var registeredEffects$1 = {};\n  var idPrefix = 'filter_result_';\n\n  function SVGEffects(elem) {\n    var i;\n    var source = 'SourceGraphic';\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    var filId = createElementID();\n    var fil = filtersFactory.createFilter(filId, true);\n    var count = 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects$1[type]) {\n        var Effect = registeredEffects$1[type].effect;\n        filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n        source = idPrefix + count;\n\n        if (registeredEffects$1[type].countsAsEffect) {\n          count += 1;\n        }\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (count) {\n      elem.globalData.defs.appendChild(fil);\n      elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  SVGEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n\n    return effects;\n  };\n\n  function registerEffect$1(id, effect, countsAsEffect) {\n    registeredEffects$1[id] = {\n      effect: effect,\n      countsAsEffect: countsAsEffect\n    };\n  }\n\n  function SVGBaseElement() {}\n\n  SVGBaseElement.prototype = {\n    initRendererElement: function initRendererElement() {\n      this.layerElement = createNS('g');\n    },\n    createContainerElements: function createContainerElements() {\n      this.matteElement = createNS('g');\n      this.transformedElement = this.layerElement;\n      this.maskedElement = this.layerElement;\n      this._sizeChanged = false;\n      var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n      if (this.data.td) {\n        this.matteMasks = {};\n        var gg = createNS('g');\n        gg.setAttribute('id', this.layerId);\n        gg.appendChild(this.layerElement);\n        layerElementParent = gg;\n        this.globalData.defs.appendChild(gg);\n      } else if (this.data.tt) {\n        this.matteElement.appendChild(this.layerElement);\n        layerElementParent = this.matteElement;\n        this.baseElement = this.matteElement;\n      } else {\n        this.baseElement = this.layerElement;\n      }\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n      if (this.data.ty === 0 && !this.data.hd) {\n        var cp = createNS('clipPath');\n        var pt = createNS('path');\n        pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n        var clipId = createElementID();\n        cp.setAttribute('id', clipId);\n        cp.appendChild(pt);\n        this.globalData.defs.appendChild(cp);\n\n        if (this.checkMasks()) {\n          var cpGroup = createNS('g');\n          cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n          cpGroup.appendChild(this.layerElement);\n          this.transformedElement = cpGroup;\n\n          if (layerElementParent) {\n            layerElementParent.appendChild(this.transformedElement);\n          } else {\n            this.baseElement = this.transformedElement;\n          }\n        } else {\n          this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n        }\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      if (this.finalTransform._localMatMdf) {\n        this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\n      }\n    },\n    destroyBaseElement: function destroyBaseElement() {\n      this.layerElement = null;\n      this.matteElement = null;\n      this.maskManager.destroy();\n    },\n    getBaseElement: function getBaseElement() {\n      if (this.data.hd) {\n        return null;\n      }\n\n      return this.baseElement;\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n      this.renderableEffectsManager = new SVGEffects(this);\n      this.searchEffectTransforms();\n    },\n    getMatte: function getMatte(matteType) {\n      // This should not be a common case. But for backward compatibility, we'll create the matte object.\n      // It solves animations that have two consecutive layers marked as matte masks.\n      // Which is an undefined behavior in AE.\n      if (!this.matteMasks) {\n        this.matteMasks = {};\n      }\n\n      if (!this.matteMasks[matteType]) {\n        var id = this.layerId + '_' + matteType;\n        var filId;\n        var fil;\n        var useElement;\n        var gg;\n\n        if (matteType === 1 || matteType === 3) {\n          var masker = createNS('mask');\n          masker.setAttribute('id', id);\n          masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          masker.appendChild(useElement);\n          this.globalData.defs.appendChild(masker);\n\n          if (!featureSupport.maskType && matteType === 1) {\n            masker.setAttribute('mask-type', 'luminance');\n            filId = createElementID();\n            fil = filtersFactory.createFilter(filId);\n            this.globalData.defs.appendChild(fil);\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            gg.appendChild(useElement);\n            masker.appendChild(gg);\n            gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          }\n        } else if (matteType === 2) {\n          var maskGroup = createNS('mask');\n          maskGroup.setAttribute('id', id);\n          maskGroup.setAttribute('mask-type', 'alpha');\n          var maskGrouper = createNS('g');\n          maskGroup.appendChild(maskGrouper);\n          filId = createElementID();\n          fil = filtersFactory.createFilter(filId); /// /\n\n          var feCTr = createNS('feComponentTransfer');\n          feCTr.setAttribute('in', 'SourceGraphic');\n          fil.appendChild(feCTr);\n          var feFunc = createNS('feFuncA');\n          feFunc.setAttribute('type', 'table');\n          feFunc.setAttribute('tableValues', '1.0 0.0');\n          feCTr.appendChild(feFunc); /// /\n\n          this.globalData.defs.appendChild(fil);\n          var alphaRect = createNS('rect');\n          alphaRect.setAttribute('width', this.comp.data.w);\n          alphaRect.setAttribute('height', this.comp.data.h);\n          alphaRect.setAttribute('x', '0');\n          alphaRect.setAttribute('y', '0');\n          alphaRect.setAttribute('fill', '#ffffff');\n          alphaRect.setAttribute('opacity', '0');\n          maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          maskGrouper.appendChild(alphaRect);\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          maskGrouper.appendChild(useElement);\n\n          if (!featureSupport.maskType) {\n            maskGroup.setAttribute('mask-type', 'luminance');\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            maskGrouper.appendChild(alphaRect);\n            gg.appendChild(this.layerElement);\n            maskGrouper.appendChild(gg);\n          }\n\n          this.globalData.defs.appendChild(maskGroup);\n        }\n\n        this.matteMasks[matteType] = id;\n      }\n\n      return this.matteMasks[matteType];\n    },\n    setMatte: function setMatte(id) {\n      if (!this.matteElement) {\n        return;\n      }\n\n      this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n    }\n  };\n\n  /**\r\n   * @file\r\n   * Handles AE's layer parenting property.\r\n   *\r\n   */\n  function HierarchyElement() {}\n\n  HierarchyElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes hierarchy properties\r\n       *\r\n       */\n    initHierarchy: function initHierarchy() {\n      // element's parent list\n      this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n      this._isParent = false;\n      this.checkParenting();\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer's hierarchy.\r\n       * @param {array} hierarch\r\n       * layer's parent list\r\n       *\r\n       */\n    setHierarchy: function setHierarchy(hierarchy) {\n      this.hierarchy = hierarchy;\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer as parent.\r\n       *\r\n       */\n    setAsParent: function setAsParent() {\n      this._isParent = true;\n    },\n\n    /**\r\n       * @function\r\n       * Searches layer's parenting chain\r\n       *\r\n       */\n    checkParenting: function checkParenting() {\n      if (this.data.parent !== undefined) {\n        this.comp.buildElementParenting(this, this.data.parent, []);\n      }\n    }\n  };\n\n  function RenderableDOMElement() {}\n\n  (function () {\n    var _prototype = {\n      initElement: function initElement(data, globalData, comp) {\n        this.initFrame();\n        this.initBaseData(data, globalData, comp);\n        this.initTransform(data, globalData, comp);\n        this.initHierarchy();\n        this.initRenderable();\n        this.initRendererElement();\n        this.createContainerElements();\n        this.createRenderableComponents();\n        this.createContent();\n        this.hide();\n      },\n      hide: function hide() {\n        // console.log('HIDE', this);\n        if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n          var elem = this.baseElement || this.layerElement;\n          elem.style.display = 'none';\n          this.hidden = true;\n        }\n      },\n      show: function show() {\n        // console.log('SHOW', this);\n        if (this.isInRange && !this.isTransparent) {\n          if (!this.data.hd) {\n            var elem = this.baseElement || this.layerElement;\n            elem.style.display = 'block';\n          }\n\n          this.hidden = false;\n          this._isFirstFrame = true;\n        }\n      },\n      renderFrame: function renderFrame() {\n        // If it is exported as hidden (data.hd === true) no need to render\n        // If it is not visible no need to render\n        if (this.data.hd || this.hidden) {\n          return;\n        }\n\n        this.renderTransform();\n        this.renderRenderable();\n        this.renderLocalTransform();\n        this.renderElement();\n        this.renderInnerContent();\n\n        if (this._isFirstFrame) {\n          this._isFirstFrame = false;\n        }\n      },\n      renderInnerContent: function renderInnerContent() {},\n      prepareFrame: function prepareFrame(num) {\n        this._mdf = false;\n        this.prepareRenderableFrame(num);\n        this.prepareProperties(num, this.isInRange);\n        this.checkTransparency();\n      },\n      destroy: function destroy() {\n        this.innerElem = null;\n        this.destroyBaseElement();\n      }\n    };\n    extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n  })();\n\n  function IImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n\n    if (this.assetData && this.assetData.sid) {\n      this.assetData = globalData.slotManager.getProp(this.assetData);\n    }\n\n    this.initElement(data, globalData, comp);\n    this.sourceRect = {\n      top: 0,\n      left: 0,\n      width: this.assetData.w,\n      height: this.assetData.h\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n  IImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.innerElem = createNS('image');\n    this.innerElem.setAttribute('width', this.assetData.w + 'px');\n    this.innerElem.setAttribute('height', this.assetData.h + 'px');\n    this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n    this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n    this.layerElement.appendChild(this.innerElem);\n  };\n\n  IImageElement.prototype.sourceRectAtTime = function () {\n    return this.sourceRect;\n  };\n\n  function ProcessedElement(element, position) {\n    this.elem = element;\n    this.pos = position;\n  }\n\n  function IShapeElement() {}\n\n  IShapeElement.prototype = {\n    addShapeToModifiers: function addShapeToModifiers(data) {\n      var i;\n      var len = this.shapeModifiers.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapeModifiers[i].addShape(data);\n      }\n    },\n    isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n      var i = 0;\n      var len = this.shapeModifiers.length;\n\n      while (i < len) {\n        if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n    renderModifiers: function renderModifiers() {\n      if (!this.shapeModifiers.length) {\n        return;\n      }\n\n      var i;\n      var len = this.shapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].sh.reset();\n      }\n\n      len = this.shapeModifiers.length;\n      var shouldBreakProcess;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n        // TODO: find a better solution for this\n\n        if (shouldBreakProcess) {\n          break;\n        }\n      }\n    },\n    searchProcessedElement: function searchProcessedElement(elem) {\n      var elements = this.processedElements;\n      var i = 0;\n      var len = elements.length;\n\n      while (i < len) {\n        if (elements[i].elem === elem) {\n          return elements[i].pos;\n        }\n\n        i += 1;\n      }\n\n      return 0;\n    },\n    addProcessedElement: function addProcessedElement(elem, pos) {\n      var elements = this.processedElements;\n      var i = elements.length;\n\n      while (i) {\n        i -= 1;\n\n        if (elements[i].elem === elem) {\n          elements[i].pos = pos;\n          return;\n        }\n      }\n\n      elements.push(new ProcessedElement(elem, pos));\n    },\n    prepareFrame: function prepareFrame(num) {\n      this.prepareRenderableFrame(num);\n      this.prepareProperties(num, this.isInRange);\n    }\n  };\n\n  var lineCapEnum = {\n    1: 'butt',\n    2: 'round',\n    3: 'square'\n  };\n  var lineJoinEnum = {\n    1: 'miter',\n    2: 'round',\n    3: 'bevel'\n  };\n\n  function SVGShapeData(transformers, level, shape) {\n    this.caches = [];\n    this.styles = [];\n    this.transformers = transformers;\n    this.lStr = '';\n    this.sh = shape;\n    this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n    // For now, since shapes add up with other shapes. They have to be calculated every time.\n    // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n    this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n    var i = 0;\n    var len = transformers.length;\n\n    while (i < len) {\n      if (transformers[i].mProps.dynamicProperties.length) {\n        this._isAnimated = true;\n        break;\n      }\n\n      i += 1;\n    }\n  }\n\n  SVGShapeData.prototype.setAsAnimated = function () {\n    this._isAnimated = true;\n  };\n\n  function SVGStyleData(data, level) {\n    this.data = data;\n    this.type = data.ty;\n    this.d = '';\n    this.lvl = level;\n    this._mdf = false;\n    this.closed = data.hd === true;\n    this.pElem = createNS('path');\n    this.msElem = null;\n  }\n\n  SVGStyleData.prototype.reset = function () {\n    this.d = '';\n    this._mdf = false;\n  };\n\n  function DashProperty(elem, data, renderer, container) {\n    this.elem = elem;\n    this.frameId = -1;\n    this.dataProps = createSizedArray(data.length);\n    this.renderer = renderer;\n    this.k = false;\n    this.dashStr = '';\n    this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n    this.dashoffset = createTypedArray('float32', 1);\n    this.initDynamicPropertyContainer(container);\n    var i;\n    var len = data.length || 0;\n    var prop;\n\n    for (i = 0; i < len; i += 1) {\n      prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n      this.k = prop.k || this.k;\n      this.dataProps[i] = {\n        n: data[i].n,\n        p: prop\n      };\n    }\n\n    if (!this.k) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = this.k;\n  }\n\n  DashProperty.prototype.getValue = function (forceRender) {\n    if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n    this._mdf = this._mdf || forceRender;\n\n    if (this._mdf) {\n      var i = 0;\n      var len = this.dataProps.length;\n\n      if (this.renderer === 'svg') {\n        this.dashStr = '';\n      }\n\n      for (i = 0; i < len; i += 1) {\n        if (this.dataProps[i].n !== 'o') {\n          if (this.renderer === 'svg') {\n            this.dashStr += ' ' + this.dataProps[i].p.v;\n          } else {\n            this.dashArray[i] = this.dataProps[i].p.v;\n          }\n        } else {\n          this.dashoffset[0] = this.dataProps[i].p.v;\n        }\n      }\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], DashProperty);\n\n  function SVGStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n  function SVGFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n  function SVGNoStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n  function GradientProperty(elem, data, container) {\n    this.data = data;\n    this.c = createTypedArray('uint8c', data.p * 4);\n    var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n    this.o = createTypedArray('float32', cLength);\n    this._cmdf = false;\n    this._omdf = false;\n    this._collapsable = this.checkCollapsable();\n    this._hasOpacity = cLength;\n    this.initDynamicPropertyContainer(container);\n    this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n    this.k = this.prop.k;\n    this.getValue(true);\n  }\n\n  GradientProperty.prototype.comparePoints = function (values, points) {\n    var i = 0;\n    var len = this.o.length / 2;\n    var diff;\n\n    while (i < len) {\n      diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n      if (diff > 0.01) {\n        return false;\n      }\n\n      i += 1;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.checkCollapsable = function () {\n    if (this.o.length / 2 !== this.c.length / 4) {\n      return false;\n    }\n\n    if (this.data.k.k[0].s) {\n      var i = 0;\n      var len = this.data.k.k.length;\n\n      while (i < len) {\n        if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n          return false;\n        }\n\n        i += 1;\n      }\n    } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n      return false;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.getValue = function (forceRender) {\n    this.prop.getValue();\n    this._mdf = false;\n    this._cmdf = false;\n    this._omdf = false;\n\n    if (this.prop._mdf || forceRender) {\n      var i;\n      var len = this.data.p * 4;\n      var mult;\n      var val;\n\n      for (i = 0; i < len; i += 1) {\n        mult = i % 4 === 0 ? 100 : 255;\n        val = Math.round(this.prop.v[i] * mult);\n\n        if (this.c[i] !== val) {\n          this.c[i] = val;\n          this._cmdf = !forceRender;\n        }\n      }\n\n      if (this.o.length) {\n        len = this.prop.v.length;\n\n        for (i = this.data.p * 4; i < len; i += 1) {\n          mult = i % 2 === 0 ? 100 : 1;\n          val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n          if (this.o[i - this.data.p * 4] !== val) {\n            this.o[i - this.data.p * 4] = val;\n            this._omdf = !forceRender;\n          }\n        }\n      }\n\n      this._mdf = !forceRender;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n  function SVGGradientFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.initGradientData(elem, data, styleOb);\n  }\n\n  SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n    this.h = PropertyFactory.getProp(elem, data.h || {\n      k: 0\n    }, 0, 0.01, this);\n    this.a = PropertyFactory.getProp(elem, data.a || {\n      k: 0\n    }, 0, degToRads, this);\n    this.g = new GradientProperty(elem, data.g, this);\n    this.style = styleOb;\n    this.stops = [];\n    this.setGradientData(styleOb.pElem, data);\n    this.setGradientOpacity(data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n    var gradientId = createElementID();\n    var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n    gfill.setAttribute('id', gradientId);\n    gfill.setAttribute('spreadMethod', 'pad');\n    gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n    var stops = [];\n    var stop;\n    var j;\n    var jLen;\n    jLen = data.g.p * 4;\n\n    for (j = 0; j < jLen; j += 4) {\n      stop = createNS('stop');\n      gfill.appendChild(stop);\n      stops.push(stop);\n    }\n\n    pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n    this.gf = gfill;\n    this.cst = stops;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n    if (this.g._hasOpacity && !this.g._collapsable) {\n      var stop;\n      var j;\n      var jLen;\n      var mask = createNS('mask');\n      var maskElement = createNS('path');\n      mask.appendChild(maskElement);\n      var opacityId = createElementID();\n      var maskId = createElementID();\n      mask.setAttribute('id', maskId);\n      var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n      opFill.setAttribute('id', opacityId);\n      opFill.setAttribute('spreadMethod', 'pad');\n      opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n      jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n      var stops = this.stops;\n\n      for (j = data.g.p * 4; j < jLen; j += 2) {\n        stop = createNS('stop');\n        stop.setAttribute('stop-color', 'rgb(255,255,255)');\n        opFill.appendChild(stop);\n        stops.push(stop);\n      }\n\n      maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n      if (data.ty === 'gs') {\n        maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n        maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n        if (data.lj === 1) {\n          maskElement.setAttribute('stroke-miterlimit', data.ml);\n        }\n      }\n\n      this.of = opFill;\n      this.ms = mask;\n      this.ost = stops;\n      this.maskId = maskId;\n      styleOb.msElem = maskElement;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n  function SVGGradientStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.initGradientData(elem, data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n  function ShapeGroupData() {\n    this.it = [];\n    this.prevViewData = [];\n    this.gr = createNS('g');\n  }\n\n  function SVGTransformData(mProps, op, container) {\n    this.transform = {\n      mProps: mProps,\n      op: op,\n      container: container\n    };\n    this.elements = [];\n    this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n  }\n\n  var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n    if (length === 0) {\n      return '';\n    }\n\n    var _o = pathNodes.o;\n    var _i = pathNodes.i;\n    var _v = pathNodes.v;\n    var i;\n    var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n    for (i = 1; i < length; i += 1) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n    }\n\n    if (closed && length) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n      shapeString += 'z';\n    }\n\n    return shapeString;\n  };\n\n  var SVGElementsRenderer = function () {\n    var _identityMatrix = new Matrix();\n\n    var _matrixHelper = new Matrix();\n\n    var ob = {\n      createRenderFunction: createRenderFunction\n    };\n\n    function createRenderFunction(data) {\n      switch (data.ty) {\n        case 'fl':\n          return renderFill;\n\n        case 'gf':\n          return renderGradient;\n\n        case 'gs':\n          return renderGradientStroke;\n\n        case 'st':\n          return renderStroke;\n\n        case 'sh':\n        case 'el':\n        case 'rc':\n        case 'sr':\n          return renderPath;\n\n        case 'tr':\n          return renderContentTransform;\n\n        case 'no':\n          return renderNoop;\n\n        default:\n          return null;\n      }\n    }\n\n    function renderContentTransform(styleData, itemData, isFirstFrame) {\n      if (isFirstFrame || itemData.transform.op._mdf) {\n        itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n      }\n\n      if (isFirstFrame || itemData.transform.mProps._mdf) {\n        itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n      }\n    }\n\n    function renderNoop() {}\n\n    function renderPath(styleData, itemData, isFirstFrame) {\n      var j;\n      var jLen;\n      var pathStringTransformed;\n      var redraw;\n      var pathNodes;\n      var l;\n      var lLen = itemData.styles.length;\n      var lvl = itemData.lvl;\n      var paths;\n      var mat;\n      var iterations;\n      var k;\n\n      for (l = 0; l < lLen; l += 1) {\n        redraw = itemData.sh._mdf || isFirstFrame;\n\n        if (itemData.styles[l].lvl < lvl) {\n          mat = _matrixHelper.reset();\n          iterations = lvl - itemData.styles[l].lvl;\n          k = itemData.transformers.length - 1;\n\n          while (!redraw && iterations > 0) {\n            redraw = itemData.transformers[k].mProps._mdf || redraw;\n            iterations -= 1;\n            k -= 1;\n          }\n\n          if (redraw) {\n            iterations = lvl - itemData.styles[l].lvl;\n            k = itemData.transformers.length - 1;\n\n            while (iterations > 0) {\n              mat.multiply(itemData.transformers[k].mProps.v);\n              iterations -= 1;\n              k -= 1;\n            }\n          }\n        } else {\n          mat = _identityMatrix;\n        }\n\n        paths = itemData.sh.paths;\n        jLen = paths._length;\n\n        if (redraw) {\n          pathStringTransformed = '';\n\n          for (j = 0; j < jLen; j += 1) {\n            pathNodes = paths.shapes[j];\n\n            if (pathNodes && pathNodes._length) {\n              pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n            }\n          }\n\n          itemData.caches[l] = pathStringTransformed;\n        } else {\n          pathStringTransformed = itemData.caches[l];\n        }\n\n        itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n        itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n      }\n    }\n\n    function renderFill(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n\n      if (itemData.c._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n      }\n    }\n\n    function renderGradientStroke(styleData, itemData, isFirstFrame) {\n      renderGradient(styleData, itemData, isFirstFrame);\n      renderStroke(styleData, itemData, isFirstFrame);\n    }\n\n    function renderGradient(styleData, itemData, isFirstFrame) {\n      var gfill = itemData.gf;\n      var hasOpacity = itemData.g._hasOpacity;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (itemData.o._mdf || isFirstFrame) {\n        var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n        itemData.style.pElem.setAttribute(attr, itemData.o.v);\n      }\n\n      if (itemData.s._mdf || isFirstFrame) {\n        var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n        var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n        gfill.setAttribute(attr1, pt1[0]);\n        gfill.setAttribute(attr2, pt1[1]);\n\n        if (hasOpacity && !itemData.g._collapsable) {\n          itemData.of.setAttribute(attr1, pt1[0]);\n          itemData.of.setAttribute(attr2, pt1[1]);\n        }\n      }\n\n      var stops;\n      var i;\n      var len;\n      var stop;\n\n      if (itemData.g._cmdf || isFirstFrame) {\n        stops = itemData.cst;\n        var cValues = itemData.g.c;\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n          stop.setAttribute('offset', cValues[i * 4] + '%');\n          stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n        }\n      }\n\n      if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n        var oValues = itemData.g.o;\n\n        if (itemData.g._collapsable) {\n          stops = itemData.cst;\n        } else {\n          stops = itemData.ost;\n        }\n\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n\n          if (!itemData.g._collapsable) {\n            stop.setAttribute('offset', oValues[i * 2] + '%');\n          }\n\n          stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n        }\n      }\n\n      if (styleData.t === 1) {\n        if (itemData.e._mdf || isFirstFrame) {\n          gfill.setAttribute('x2', pt2[0]);\n          gfill.setAttribute('y2', pt2[1]);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('x2', pt2[0]);\n            itemData.of.setAttribute('y2', pt2[1]);\n          }\n        }\n      } else {\n        var rad;\n\n        if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n          rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          gfill.setAttribute('r', rad);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('r', rad);\n          }\n        }\n\n        if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n          if (!rad) {\n            rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          }\n\n          var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n          var percent = itemData.h.v;\n\n          if (percent >= 1) {\n            percent = 0.99;\n          } else if (percent <= -1) {\n            percent = -0.99;\n          }\n\n          var dist = rad * percent;\n          var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n          var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n          gfill.setAttribute('fx', x);\n          gfill.setAttribute('fy', y);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('fx', x);\n            itemData.of.setAttribute('fy', y);\n          }\n        } // gfill.setAttribute('fy','200');\n\n      }\n    }\n\n    function renderStroke(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n      var d = itemData.d;\n\n      if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n        styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n        styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n      }\n\n      if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n        styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n      }\n\n      if (itemData.w._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n        if (styleElem.msElem) {\n          styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n        }\n      }\n    }\n\n    return ob;\n  }();\n\n  function SVGShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n  SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n  SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n  SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n  SVGShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n  };\n  /*\r\n  This method searches for multiple shapes that affect a single element and one of them is animated\r\n  */\n\n\n  SVGShapeElement.prototype.filterUniqueShapes = function () {\n    var i;\n    var len = this.shapes.length;\n    var shape;\n    var j;\n    var jLen = this.stylesList.length;\n    var style;\n    var tempShapes = [];\n    var areAnimated = false;\n\n    for (j = 0; j < jLen; j += 1) {\n      style = this.stylesList[j];\n      areAnimated = false;\n      tempShapes.length = 0;\n\n      for (i = 0; i < len; i += 1) {\n        shape = this.shapes[i];\n\n        if (shape.styles.indexOf(style) !== -1) {\n          tempShapes.push(shape);\n          areAnimated = shape._isAnimated || areAnimated;\n        }\n      }\n\n      if (tempShapes.length > 1 && areAnimated) {\n        this.setShapesAsAnimated(tempShapes);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n    var i;\n    var len = shapes.length;\n\n    for (i = 0; i < len; i += 1) {\n      shapes[i].setAsAnimated();\n    }\n  };\n\n  SVGShapeElement.prototype.createStyleElement = function (data, level) {\n    // TODO: prevent drawing of hidden styles\n    var elementData;\n    var styleOb = new SVGStyleData(data, level);\n    var pathElement = styleOb.pElem;\n\n    if (data.ty === 'st') {\n      elementData = new SVGStrokeStyleData(this, data, styleOb);\n    } else if (data.ty === 'fl') {\n      elementData = new SVGFillStyleData(this, data, styleOb);\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n      elementData = new GradientConstructor(this, data, styleOb);\n      this.globalData.defs.appendChild(elementData.gf);\n\n      if (elementData.maskId) {\n        this.globalData.defs.appendChild(elementData.ms);\n        this.globalData.defs.appendChild(elementData.of);\n        pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n      }\n    } else if (data.ty === 'no') {\n      elementData = new SVGNoStyleData(this, data, styleOb);\n    }\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n      pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n      pathElement.setAttribute('fill-opacity', '0');\n\n      if (data.lj === 1) {\n        pathElement.setAttribute('stroke-miterlimit', data.ml);\n      }\n    }\n\n    if (data.r === 2) {\n      pathElement.setAttribute('fill-rule', 'evenodd');\n    }\n\n    if (data.ln) {\n      pathElement.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      pathElement.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    this.stylesList.push(styleOb);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createGroupElement = function (data) {\n    var elementData = new ShapeGroupData();\n\n    if (data.ln) {\n      elementData.gr.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      elementData.gr.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createTransformElement = function (data, container) {\n    var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n    var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n    var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n    var i = 0;\n    var len = this.animatedContents.length;\n\n    while (i < len) {\n      if (this.animatedContents[i].element === element) {\n        return;\n      }\n\n      i += 1;\n    }\n\n    this.animatedContents.push({\n      fn: SVGElementsRenderer.createRenderFunction(data),\n      element: element,\n      data: data\n    });\n  };\n\n  SVGShapeElement.prototype.setElementStyles = function (elementData) {\n    var arr = elementData.styles;\n    var j;\n    var jLen = this.stylesList.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      if (!this.stylesList[j].closed) {\n        arr.push(this.stylesList[j]);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n  };\n\n  SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n    var ownTransformers = [].concat(transformers);\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var currentTransform;\n    var modifier;\n    var processedPos;\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._render = render;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], level);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        if (arr[i]._render) {\n          if (itemsData[i].style.pElem.parentNode !== container) {\n            container.appendChild(itemsData[i].style.pElem);\n          }\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n        if (arr[i]._render) {\n          if (itemsData[i].gr.parentNode !== container) {\n            container.appendChild(itemsData[i].gr);\n          }\n        }\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          itemsData[i] = this.createTransformElement(arr[i], container);\n        }\n\n        currentTransform = itemsData[i].transform;\n        ownTransformers.push(currentTransform);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n        }\n\n        this.setElementStyles(itemsData[i]);\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          render = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    len = ownStyles.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownStyles[i].closed = true;\n    }\n\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  SVGShapeElement.prototype.renderInnerContent = function () {\n    this.renderModifiers();\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.stylesList[i].reset();\n    }\n\n    this.renderShape();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.stylesList[i]._mdf || this._isFirstFrame) {\n        if (this.stylesList[i].msElem) {\n          this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n          this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n        }\n\n        this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.renderShape = function () {\n    var i;\n    var len = this.animatedContents.length;\n    var animatedContent;\n\n    for (i = 0; i < len; i += 1) {\n      animatedContent = this.animatedContents[i];\n\n      if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n        animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.destroy = function () {\n    this.destroyBaseElement();\n    this.shapesData = null;\n    this.itemsData = null;\n  };\n\n  function LetterProps(o, sw, sc, fc, m, p) {\n    this.o = o;\n    this.sw = sw;\n    this.sc = sc;\n    this.fc = fc;\n    this.m = m;\n    this.p = p;\n    this._mdf = {\n      o: true,\n      sw: !!sw,\n      sc: !!sc,\n      fc: !!fc,\n      m: true,\n      p: true\n    };\n  }\n\n  LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n    this._mdf.o = false;\n    this._mdf.sw = false;\n    this._mdf.sc = false;\n    this._mdf.fc = false;\n    this._mdf.m = false;\n    this._mdf.p = false;\n    var updated = false;\n\n    if (this.o !== o) {\n      this.o = o;\n      this._mdf.o = true;\n      updated = true;\n    }\n\n    if (this.sw !== sw) {\n      this.sw = sw;\n      this._mdf.sw = true;\n      updated = true;\n    }\n\n    if (this.sc !== sc) {\n      this.sc = sc;\n      this._mdf.sc = true;\n      updated = true;\n    }\n\n    if (this.fc !== fc) {\n      this.fc = fc;\n      this._mdf.fc = true;\n      updated = true;\n    }\n\n    if (this.m !== m) {\n      this.m = m;\n      this._mdf.m = true;\n      updated = true;\n    }\n\n    if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n      this.p = p;\n      this._mdf.p = true;\n      updated = true;\n    }\n\n    return updated;\n  };\n\n  function TextProperty(elem, data) {\n    this._frameId = initialDefaultFrame;\n    this.pv = '';\n    this.v = '';\n    this.kf = false;\n    this._isFirstFrame = true;\n    this._mdf = false;\n\n    if (data.d && data.d.sid) {\n      data.d = elem.globalData.slotManager.getProp(data.d);\n    }\n\n    this.data = data;\n    this.elem = elem;\n    this.comp = this.elem.comp;\n    this.keysIndex = 0;\n    this.canResize = false;\n    this.minimumFontSize = 1;\n    this.effectsSequence = [];\n    this.currentData = {\n      ascent: 0,\n      boxWidth: this.defaultBoxWidth,\n      f: '',\n      fStyle: '',\n      fWeight: '',\n      fc: '',\n      j: '',\n      justifyOffset: '',\n      l: [],\n      lh: 0,\n      lineWidths: [],\n      ls: '',\n      of: '',\n      s: '',\n      sc: '',\n      sw: 0,\n      t: 0,\n      tr: 0,\n      sz: 0,\n      ps: null,\n      fillColorAnim: false,\n      strokeColorAnim: false,\n      strokeWidthAnim: false,\n      yOffset: 0,\n      finalSize: 0,\n      finalText: [],\n      finalLineHeight: 0,\n      __complete: false\n    };\n    this.copyData(this.currentData, this.data.d.k[0].s);\n\n    if (!this.searchProperty()) {\n      this.completeTextData(this.currentData);\n    }\n  }\n\n  TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n  TextProperty.prototype.copyData = function (obj, data) {\n    for (var s in data) {\n      if (Object.prototype.hasOwnProperty.call(data, s)) {\n        obj[s] = data[s];\n      }\n    }\n\n    return obj;\n  };\n\n  TextProperty.prototype.setCurrentData = function (data) {\n    if (!data.__complete) {\n      this.completeTextData(data);\n    }\n\n    this.currentData = data;\n    this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n    this._mdf = true;\n  };\n\n  TextProperty.prototype.searchProperty = function () {\n    return this.searchKeyframes();\n  };\n\n  TextProperty.prototype.searchKeyframes = function () {\n    this.kf = this.data.d.k.length > 1;\n\n    if (this.kf) {\n      this.addEffect(this.getKeyframeValue.bind(this));\n    }\n\n    return this.kf;\n  };\n\n  TextProperty.prototype.addEffect = function (effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.getValue = function (_finalValue) {\n    if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n      return;\n    }\n\n    this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n    var currentValue = this.currentData;\n    var currentIndex = this.keysIndex;\n\n    if (this.lock) {\n      this.setCurrentData(this.currentData);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = false;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n    for (i = 0; i < len; i += 1) {\n      // Checking if index changed to prevent creating a new object every time the expression updates.\n      if (currentIndex !== this.keysIndex) {\n        finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n      } else {\n        finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n      }\n    }\n\n    if (currentValue !== finalValue) {\n      this.setCurrentData(finalValue);\n    }\n\n    this.v = this.currentData;\n    this.pv = this.v;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  };\n\n  TextProperty.prototype.getKeyframeValue = function () {\n    var textKeys = this.data.d.k;\n    var frameNum = this.elem.comp.renderedFrame;\n    var i = 0;\n    var len = textKeys.length;\n\n    while (i <= len - 1) {\n      if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    if (this.keysIndex !== i) {\n      this.keysIndex = i;\n    }\n\n    return this.data.d.k[this.keysIndex].s;\n  };\n\n  TextProperty.prototype.buildFinalText = function (text) {\n    var charactersArray = [];\n    var i = 0;\n    var len = text.length;\n    var charCode;\n    var secondCharCode;\n    var shouldCombine = false;\n    var shouldCombineNext = false;\n    var currentChars = '';\n\n    while (i < len) {\n      shouldCombine = shouldCombineNext;\n      shouldCombineNext = false;\n      charCode = text.charCodeAt(i);\n      currentChars = text.charAt(i);\n\n      if (FontManager.isCombinedCharacter(charCode)) {\n        shouldCombine = true; // It's a potential surrogate pair (this is the High surrogate)\n      } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n        if (FontManager.isRegionalFlag(text, i)) {\n          currentChars = text.substr(i, 14);\n        } else {\n          secondCharCode = text.charCodeAt(i + 1); // It's a surrogate pair (this is the Low surrogate)\n\n          if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n            if (FontManager.isModifier(charCode, secondCharCode)) {\n              currentChars = text.substr(i, 2);\n              shouldCombine = true;\n            } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n              currentChars = text.substr(i, 4);\n            } else {\n              currentChars = text.substr(i, 2);\n            }\n          }\n        }\n      } else if (charCode > 0xDBFF) {\n        secondCharCode = text.charCodeAt(i + 1);\n\n        if (FontManager.isVariationSelector(charCode)) {\n          shouldCombine = true;\n        }\n      } else if (FontManager.isZeroWidthJoiner(charCode)) {\n        shouldCombine = true;\n        shouldCombineNext = true;\n      }\n\n      if (shouldCombine) {\n        charactersArray[charactersArray.length - 1] += currentChars;\n        shouldCombine = false;\n      } else {\n        charactersArray.push(currentChars);\n      }\n\n      i += currentChars.length;\n    }\n\n    return charactersArray;\n  };\n\n  TextProperty.prototype.completeTextData = function (documentData) {\n    documentData.__complete = true;\n    var fontManager = this.elem.globalData.fontManager;\n    var data = this.data;\n    var letters = [];\n    var i;\n    var len;\n    var newLineFlag;\n    var index = 0;\n    var val;\n    var anchorGrouping = data.m.g;\n    var currentSize = 0;\n    var currentPos = 0;\n    var currentLine = 0;\n    var lineWidths = [];\n    var lineWidth = 0;\n    var maxLineWidth = 0;\n    var j;\n    var jLen;\n    var fontData = fontManager.getFontByName(documentData.f);\n    var charData;\n    var cLength = 0;\n    var fontProps = getFontProperties(fontData);\n    documentData.fWeight = fontProps.weight;\n    documentData.fStyle = fontProps.style;\n    documentData.finalSize = documentData.s;\n    documentData.finalText = this.buildFinalText(documentData.t);\n    len = documentData.finalText.length;\n    documentData.finalLineHeight = documentData.lh;\n    var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n    var charCode;\n\n    if (documentData.sz) {\n      var flag = true;\n      var boxWidth = documentData.sz[0];\n      var boxHeight = documentData.sz[1];\n      var currentHeight;\n      var finalText;\n\n      while (flag) {\n        finalText = this.buildFinalText(documentData.t);\n        currentHeight = 0;\n        lineWidth = 0;\n        len = finalText.length;\n        trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n        var lastSpaceIndex = -1;\n\n        for (i = 0; i < len; i += 1) {\n          charCode = finalText[i].charCodeAt(0);\n          newLineFlag = false;\n\n          if (finalText[i] === ' ') {\n            lastSpaceIndex = i;\n          } else if (charCode === 13 || charCode === 3) {\n            lineWidth = 0;\n            newLineFlag = true;\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n          }\n\n          if (fontManager.chars) {\n            charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n            cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n          } else {\n            // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n            cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n          }\n\n          if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n            if (lastSpaceIndex === -1) {\n              len += 1;\n            } else {\n              i = lastSpaceIndex;\n            }\n\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n            finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n            lastSpaceIndex = -1;\n            lineWidth = 0;\n          } else {\n            lineWidth += cLength;\n            lineWidth += trackingOffset;\n          }\n        }\n\n        currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n        if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n          documentData.finalSize -= 1;\n          documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n        } else {\n          documentData.finalText = finalText;\n          len = documentData.finalText.length;\n          flag = false;\n        }\n      }\n    }\n\n    lineWidth = -trackingOffset;\n    cLength = 0;\n    var uncollapsedSpaces = 0;\n    var currentChar;\n\n    for (i = 0; i < len; i += 1) {\n      newLineFlag = false;\n      currentChar = documentData.finalText[i];\n      charCode = currentChar.charCodeAt(0);\n\n      if (charCode === 13 || charCode === 3) {\n        uncollapsedSpaces = 0;\n        lineWidths.push(lineWidth);\n        maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n        lineWidth = -2 * trackingOffset;\n        val = '';\n        newLineFlag = true;\n        currentLine += 1;\n      } else {\n        val = currentChar;\n      }\n\n      if (fontManager.chars) {\n        charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n        cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n      } else {\n        // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n        // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n        cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n      } //\n\n\n      if (currentChar === ' ') {\n        uncollapsedSpaces += cLength + trackingOffset;\n      } else {\n        lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n        uncollapsedSpaces = 0;\n      }\n\n      letters.push({\n        l: cLength,\n        an: cLength,\n        add: currentSize,\n        n: newLineFlag,\n        anIndexes: [],\n        val: val,\n        line: currentLine,\n        animatorJustifyOffset: 0\n      });\n\n      if (anchorGrouping == 2) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || val === ' ' || i === len - 1) {\n          if (val === '' || val === ' ') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          index += 1;\n          currentSize = 0;\n        }\n      } else if (anchorGrouping == 3) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || i === len - 1) {\n          if (val === '') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          currentSize = 0;\n          index += 1;\n        }\n      } else {\n        letters[index].ind = index;\n        letters[index].extra = 0;\n        index += 1;\n      }\n    }\n\n    documentData.l = letters;\n    maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n    lineWidths.push(lineWidth);\n\n    if (documentData.sz) {\n      documentData.boxWidth = documentData.sz[0];\n      documentData.justifyOffset = 0;\n    } else {\n      documentData.boxWidth = maxLineWidth;\n\n      switch (documentData.j) {\n        case 1:\n          documentData.justifyOffset = -documentData.boxWidth;\n          break;\n\n        case 2:\n          documentData.justifyOffset = -documentData.boxWidth / 2;\n          break;\n\n        default:\n          documentData.justifyOffset = 0;\n      }\n    }\n\n    documentData.lineWidths = lineWidths;\n    var animators = data.a;\n    var animatorData;\n    var letterData;\n    jLen = animators.length;\n    var based;\n    var ind;\n    var indexes = [];\n\n    for (j = 0; j < jLen; j += 1) {\n      animatorData = animators[j];\n\n      if (animatorData.a.sc) {\n        documentData.strokeColorAnim = true;\n      }\n\n      if (animatorData.a.sw) {\n        documentData.strokeWidthAnim = true;\n      }\n\n      if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n        documentData.fillColorAnim = true;\n      }\n\n      ind = 0;\n      based = animatorData.s.b;\n\n      for (i = 0; i < len; i += 1) {\n        letterData = letters[i];\n        letterData.anIndexes[j] = ind;\n\n        if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n          // eslint-disable-line eqeqeq\n          if (animatorData.s.rn === 1) {\n            indexes.push(ind);\n          }\n\n          ind += 1;\n        }\n      }\n\n      data.a[j].s.totalChars = ind;\n      var currentInd = -1;\n      var newInd;\n\n      if (animatorData.s.rn === 1) {\n        for (i = 0; i < len; i += 1) {\n          letterData = letters[i];\n\n          if (currentInd != letterData.anIndexes[j]) {\n            // eslint-disable-line eqeqeq\n            currentInd = letterData.anIndexes[j];\n            newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n          }\n\n          letterData.anIndexes[j] = newInd;\n        }\n      }\n    }\n\n    documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n    documentData.ls = documentData.ls || 0;\n    documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n  };\n\n  TextProperty.prototype.updateDocumentData = function (newData, index) {\n    index = index === undefined ? this.keysIndex : index;\n    var dData = this.copyData({}, this.data.d.k[index].s);\n    dData = this.copyData(dData, newData);\n    this.data.d.k[index].s = dData;\n    this.recalculate(index);\n    this.setCurrentData(dData);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.recalculate = function (index) {\n    var dData = this.data.d.k[index].s;\n    dData.__complete = false;\n    this.keysIndex = 0;\n    this._isFirstFrame = true;\n    this.getValue(dData);\n  };\n\n  TextProperty.prototype.canResizeFont = function (_canResize) {\n    this.canResize = _canResize;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n    this.minimumFontSize = Math.floor(_fontValue) || 1;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  var TextSelectorProp = function () {\n    var max = Math.max;\n    var min = Math.min;\n    var floor = Math.floor;\n\n    function TextSelectorPropFactory(elem, data) {\n      this._currentTextLength = -1;\n      this.k = false;\n      this.data = data;\n      this.elem = elem;\n      this.comp = elem.comp;\n      this.finalS = 0;\n      this.finalE = 0;\n      this.initDynamicPropertyContainer(elem);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: 0\n      }, 0, 0, this);\n\n      if ('e' in data) {\n        this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n      } else {\n        this.e = {\n          v: 100\n        };\n      }\n\n      this.o = PropertyFactory.getProp(elem, data.o || {\n        k: 0\n      }, 0, 0, this);\n      this.xe = PropertyFactory.getProp(elem, data.xe || {\n        k: 0\n      }, 0, 0, this);\n      this.ne = PropertyFactory.getProp(elem, data.ne || {\n        k: 0\n      }, 0, 0, this);\n      this.sm = PropertyFactory.getProp(elem, data.sm || {\n        k: 100\n      }, 0, 0, this);\n      this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n      if (!this.dynamicProperties.length) {\n        this.getValue();\n      }\n    }\n\n    TextSelectorPropFactory.prototype = {\n      getMult: function getMult(ind) {\n        if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n          this.getValue();\n        }\n\n        var x1 = 0;\n        var y1 = 0;\n        var x2 = 1;\n        var y2 = 1;\n\n        if (this.ne.v > 0) {\n          x1 = this.ne.v / 100.0;\n        } else {\n          y1 = -this.ne.v / 100.0;\n        }\n\n        if (this.xe.v > 0) {\n          x2 = 1.0 - this.xe.v / 100.0;\n        } else {\n          y2 = 1.0 + this.xe.v / 100.0;\n        }\n\n        var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n        var mult = 0;\n        var s = this.finalS;\n        var e = this.finalE;\n        var type = this.data.sh;\n\n        if (type === 2) {\n          if (e === s) {\n            mult = ind >= e ? 1 : 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 3) {\n          if (e === s) {\n            mult = ind >= e ? 0 : 1;\n          } else {\n            mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 4) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n            if (mult < 0.5) {\n              mult *= 2;\n            } else {\n              mult = 1 - 2 * (mult - 0.5);\n            }\n          }\n\n          mult = easer(mult);\n        } else if (type === 5) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            var tot = e - s;\n            /* ind += 0.5;\r\n                      mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            var x = -tot / 2 + ind;\n            var a = tot / 2;\n            mult = Math.sqrt(1 - x * x / (a * a));\n          }\n\n          mult = easer(mult);\n        } else if (type === 6) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n          }\n\n          mult = easer(mult);\n        } else {\n          if (ind >= floor(s)) {\n            if (ind - s < 0) {\n              mult = max(0, min(min(e, 1) - (s - ind), 1));\n            } else {\n              mult = max(0, min(e - ind, 1));\n            }\n          }\n\n          mult = easer(mult);\n        } // Smoothness implementation.\n        // The smoothness represents a reduced range of the original [0; 1] range.\n        // if smoothness is 25%, the new range will be [0.375; 0.625]\n        // Steps are:\n        // - find the lower value of the new range (threshold)\n        // - if multiplier is smaller than that value, floor it to 0\n        // - if it is larger,\n        //     - subtract the threshold\n        //     - divide it by the smoothness (this will return the range to [0; 1])\n        // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n        if (this.sm.v !== 100) {\n          var smoothness = this.sm.v * 0.01;\n\n          if (smoothness === 0) {\n            smoothness = 0.00000001;\n          }\n\n          var threshold = 0.5 - smoothness * 0.5;\n\n          if (mult < threshold) {\n            mult = 0;\n          } else {\n            mult = (mult - threshold) / smoothness;\n\n            if (mult > 1) {\n              mult = 1;\n            }\n          }\n        }\n\n        return mult * this.a.v;\n      },\n      getValue: function getValue(newCharsFlag) {\n        this.iterateDynamicProperties();\n        this._mdf = newCharsFlag || this._mdf;\n        this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n        if (newCharsFlag && this.data.r === 2) {\n          this.e.v = this._currentTextLength;\n        }\n\n        var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n        var o = this.o.v / divisor;\n        var s = this.s.v / divisor + o;\n        var e = this.e.v / divisor + o;\n\n        if (s > e) {\n          var _s = s;\n          s = e;\n          e = _s;\n        }\n\n        this.finalS = s;\n        this.finalE = e;\n      }\n    };\n    extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n    function getTextSelectorProp(elem, data, arr) {\n      return new TextSelectorPropFactory(elem, data, arr);\n    }\n\n    return {\n      getTextSelectorProp: getTextSelectorProp\n    };\n  }();\n\n  function TextAnimatorDataProperty(elem, animatorProps, container) {\n    var defaultData = {\n      propType: false\n    };\n    var getProp = PropertyFactory.getProp;\n    var textAnimatorAnimatables = animatorProps.a;\n    this.a = {\n      r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n      rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n      ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n      sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n      sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n      s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n      a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n      o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n      p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n      sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n      sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n      fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n      fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n      fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n      fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n      t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n    };\n    this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n    this.s.t = animatorProps.s.t;\n  }\n\n  function TextAnimatorProperty(textData, renderType, elem) {\n    this._isFirstFrame = true;\n    this._hasMaskedPath = false;\n    this._frameId = -1;\n    this._textData = textData;\n    this._renderType = renderType;\n    this._elem = elem;\n    this._animatorsData = createSizedArray(this._textData.a.length);\n    this._pathData = {};\n    this._moreOptions = {\n      alignment: {}\n    };\n    this.renderedLetters = [];\n    this.lettersChangedFlag = false;\n    this.initDynamicPropertyContainer(elem);\n  }\n\n  TextAnimatorProperty.prototype.searchProperties = function () {\n    var i;\n    var len = this._textData.a.length;\n    var animatorProps;\n    var getProp = PropertyFactory.getProp;\n\n    for (i = 0; i < len; i += 1) {\n      animatorProps = this._textData.a[i];\n      this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n    }\n\n    if (this._textData.p && 'm' in this._textData.p) {\n      this._pathData = {\n        a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n        f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n        l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n        r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n        p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n        m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n      };\n      this._hasMaskedPath = true;\n    } else {\n      this._hasMaskedPath = false;\n    }\n\n    this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n  };\n\n  TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n    this.lettersChangedFlag = lettersChangedFlag;\n\n    if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n      return;\n    }\n\n    this._isFirstFrame = false;\n    var alignment = this._moreOptions.alignment.v;\n    var animators = this._animatorsData;\n    var textData = this._textData;\n    var matrixHelper = this.mHelper;\n    var renderType = this._renderType;\n    var renderedLettersCount = this.renderedLetters.length;\n    var xPos;\n    var yPos;\n    var i;\n    var len;\n    var letters = documentData.l;\n    var pathInfo;\n    var currentLength;\n    var currentPoint;\n    var segmentLength;\n    var flag;\n    var pointInd;\n    var segmentInd;\n    var prevPoint;\n    var points;\n    var segments;\n    var partialLength;\n    var totalLength;\n    var perc;\n    var tanAngle;\n    var mask;\n\n    if (this._hasMaskedPath) {\n      mask = this._pathData.m;\n\n      if (!this._pathData.n || this._pathData._mdf) {\n        var paths = mask.v;\n\n        if (this._pathData.r.v) {\n          paths = paths.reverse();\n        } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n        pathInfo = {\n          tLength: 0,\n          segments: []\n        };\n        len = paths._length - 1;\n        var bezierData;\n        totalLength = 0;\n\n        for (i = 0; i < len; i += 1) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        i = len;\n\n        if (mask.v.c) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        this._pathData.pi = pathInfo;\n      }\n\n      pathInfo = this._pathData.pi;\n      currentLength = this._pathData.f.v;\n      segmentInd = 0;\n      pointInd = 1;\n      segmentLength = 0;\n      flag = true;\n      segments = pathInfo.segments;\n\n      if (currentLength < 0 && mask.v.c) {\n        if (pathInfo.tLength < Math.abs(currentLength)) {\n          currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n        }\n\n        segmentInd = segments.length - 1;\n        points = segments[segmentInd].points;\n        pointInd = points.length - 1;\n\n        while (currentLength < 0) {\n          currentLength += points[pointInd].partialLength;\n          pointInd -= 1;\n\n          if (pointInd < 0) {\n            segmentInd -= 1;\n            points = segments[segmentInd].points;\n            pointInd = points.length - 1;\n          }\n        }\n      }\n\n      points = segments[segmentInd].points;\n      prevPoint = points[pointInd - 1];\n      currentPoint = points[pointInd];\n      partialLength = currentPoint.partialLength;\n    }\n\n    len = letters.length;\n    xPos = 0;\n    yPos = 0;\n    var yOff = documentData.finalSize * 1.2 * 0.714;\n    var firstLine = true;\n    var animatorProps;\n    var animatorSelector;\n    var j;\n    var jLen;\n    var letterValue;\n    jLen = animators.length;\n    var mult;\n    var ind = -1;\n    var offf;\n    var xPathPos;\n    var yPathPos;\n    var initPathPos = currentLength;\n    var initSegmentInd = segmentInd;\n    var initPointInd = pointInd;\n    var currentLine = -1;\n    var elemOpacity;\n    var sc;\n    var sw;\n    var fc;\n    var k;\n    var letterSw;\n    var letterSc;\n    var letterFc;\n    var letterM = '';\n    var letterP = this.defaultPropsArray;\n    var letterO; //\n\n    if (documentData.j === 2 || documentData.j === 1) {\n      var animatorJustifyOffset = 0;\n      var animatorFirstCharOffset = 0;\n      var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n      var lastIndex = 0;\n      var isNewLine = true;\n\n      for (i = 0; i < len; i += 1) {\n        if (letters[i].n) {\n          if (animatorJustifyOffset) {\n            animatorJustifyOffset += animatorFirstCharOffset;\n          }\n\n          while (lastIndex < i) {\n            letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n            lastIndex += 1;\n          }\n\n          animatorJustifyOffset = 0;\n          isNewLine = true;\n        } else {\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.t.propType) {\n              if (isNewLine && documentData.j === 2) {\n                animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n              }\n\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n              } else {\n                animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n              }\n            }\n          }\n\n          isNewLine = false;\n        }\n      }\n\n      if (animatorJustifyOffset) {\n        animatorJustifyOffset += animatorFirstCharOffset;\n      }\n\n      while (lastIndex < i) {\n        letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n        lastIndex += 1;\n      }\n    } //\n\n\n    for (i = 0; i < len; i += 1) {\n      matrixHelper.reset();\n      elemOpacity = 1;\n\n      if (letters[i].n) {\n        xPos = 0;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        currentLength = initPathPos;\n        firstLine = false;\n\n        if (this._hasMaskedPath) {\n          segmentInd = initSegmentInd;\n          pointInd = initPointInd;\n          points = segments[segmentInd].points;\n          prevPoint = points[pointInd - 1];\n          currentPoint = points[pointInd];\n          partialLength = currentPoint.partialLength;\n          segmentLength = 0;\n        }\n\n        letterM = '';\n        letterFc = '';\n        letterSw = '';\n        letterO = '';\n        letterP = this.defaultPropsArray;\n      } else {\n        if (this._hasMaskedPath) {\n          if (currentLine !== letters[i].line) {\n            switch (documentData.j) {\n              case 1:\n                currentLength += totalLength - documentData.lineWidths[letters[i].line];\n                break;\n\n              case 2:\n                currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n                break;\n\n              default:\n                break;\n            }\n\n            currentLine = letters[i].line;\n          }\n\n          if (ind !== letters[i].ind) {\n            if (letters[ind]) {\n              currentLength += letters[ind].extra;\n            }\n\n            currentLength += letters[i].an / 2;\n            ind = letters[i].ind;\n          }\n\n          currentLength += alignment[0] * letters[i].an * 0.005;\n          var animatorOffset = 0;\n\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.p.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.p.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.p.v[0] * mult;\n              }\n            }\n\n            if (animatorProps.a.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.a.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.a.v[0] * mult;\n              }\n            }\n          }\n\n          flag = true; // Force alignment only works with a single line for now\n\n          if (this._pathData.a.v) {\n            currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n            currentLength += this._pathData.f.v;\n          }\n\n          while (flag) {\n            if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n              perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n              xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n              yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n              matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n              flag = false;\n            } else if (points) {\n              segmentLength += currentPoint.partialLength;\n              pointInd += 1;\n\n              if (pointInd >= points.length) {\n                pointInd = 0;\n                segmentInd += 1;\n\n                if (!segments[segmentInd]) {\n                  if (mask.v.c) {\n                    pointInd = 0;\n                    segmentInd = 0;\n                    points = segments[segmentInd].points;\n                  } else {\n                    segmentLength -= currentPoint.partialLength;\n                    points = null;\n                  }\n                } else {\n                  points = segments[segmentInd].points;\n                }\n              }\n\n              if (points) {\n                prevPoint = currentPoint;\n                currentPoint = points[pointInd];\n                partialLength = currentPoint.partialLength;\n              }\n            }\n          }\n\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0);\n        } else {\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n          matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.t.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n            if (xPos !== 0 || documentData.j !== 0) {\n              if (this._hasMaskedPath) {\n                if (mult.length) {\n                  currentLength += animatorProps.t.v * mult[0];\n                } else {\n                  currentLength += animatorProps.t.v * mult;\n                }\n              } else if (mult.length) {\n                xPos += animatorProps.t.v * mult[0];\n              } else {\n                xPos += animatorProps.t.v * mult;\n              }\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          sw = documentData.sw || 0;\n        }\n\n        if (documentData.strokeColorAnim) {\n          if (documentData.sc) {\n            sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n          } else {\n            sc = [0, 0, 0];\n          }\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.a.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.s.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n            } else {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          animatorSelector = animators[j].s;\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n          if (animatorProps.sk.propType) {\n            if (mult.length) {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n            } else {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n            }\n          }\n\n          if (animatorProps.r.propType) {\n            if (mult.length) {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n            } else {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult);\n            }\n          }\n\n          if (animatorProps.ry.propType) {\n            if (mult.length) {\n              matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n            } else {\n              matrixHelper.rotateY(animatorProps.ry.v * mult);\n            }\n          }\n\n          if (animatorProps.rx.propType) {\n            if (mult.length) {\n              matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n            } else {\n              matrixHelper.rotateX(animatorProps.rx.v * mult);\n            }\n          }\n\n          if (animatorProps.o.propType) {\n            if (mult.length) {\n              elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n            } else {\n              elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n            }\n          }\n\n          if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n            if (mult.length) {\n              sw += animatorProps.sw.v * mult[0];\n            } else {\n              sw += animatorProps.sw.v * mult;\n            }\n          }\n\n          if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n            for (k = 0; k < 3; k += 1) {\n              if (mult.length) {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n              } else {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n              }\n            }\n          }\n\n          if (documentData.fillColorAnim && documentData.fc) {\n            if (animatorProps.fc.propType) {\n              for (k = 0; k < 3; k += 1) {\n                if (mult.length) {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n                } else {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n                }\n              }\n            }\n\n            if (animatorProps.fh.propType) {\n              if (mult.length) {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n              } else {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n              }\n            }\n\n            if (animatorProps.fs.propType) {\n              if (mult.length) {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n              } else {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n              }\n            }\n\n            if (animatorProps.fb.propType) {\n              if (mult.length) {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n              } else {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n              }\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.p.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (this._hasMaskedPath) {\n              if (mult.length) {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n              } else {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n              }\n            } else if (mult.length) {\n              matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          letterSw = sw < 0 ? 0 : sw;\n        }\n\n        if (documentData.strokeColorAnim) {\n          letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n        }\n\n        if (this._hasMaskedPath) {\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n          if (this._pathData.p.v) {\n            tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n            var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n            if (currentPoint.point[0] < prevPoint.point[0]) {\n              rot += 180;\n            }\n\n            matrixHelper.rotate(-rot * Math.PI / 180);\n          }\n\n          matrixHelper.translate(xPathPos, yPathPos, 0);\n          currentLength -= alignment[0] * letters[i].an * 0.005;\n\n          if (letters[i + 1] && ind !== letters[i + 1].ind) {\n            currentLength += letters[i].an / 2;\n            currentLength += documentData.tr * 0.001 * documentData.finalSize;\n          }\n        } else {\n          matrixHelper.translate(xPos, yPos, 0);\n\n          if (documentData.ps) {\n            // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n            matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n          }\n\n          switch (documentData.j) {\n            case 1:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n              break;\n\n            case 2:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n              break;\n\n            default:\n              break;\n          }\n\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(offf, 0, 0);\n          matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n          xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n        }\n\n        if (renderType === 'html') {\n          letterM = matrixHelper.toCSS();\n        } else if (renderType === 'svg') {\n          letterM = matrixHelper.to2dCSS();\n        } else {\n          letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n        }\n\n        letterO = elemOpacity;\n      }\n\n      if (renderedLettersCount <= i) {\n        letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n        this.renderedLetters.push(letterValue);\n        renderedLettersCount += 1;\n        this.lettersChangedFlag = true;\n      } else {\n        letterValue = this.renderedLetters[i];\n        this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n      }\n    }\n  };\n\n  TextAnimatorProperty.prototype.getValue = function () {\n    if (this._elem.globalData.frameId === this._frameId) {\n      return;\n    }\n\n    this._frameId = this._elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  TextAnimatorProperty.prototype.mHelper = new Matrix();\n  TextAnimatorProperty.prototype.defaultPropsArray = [];\n  extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n  function ITextElement() {}\n\n  ITextElement.prototype.initElement = function (data, globalData, comp) {\n    this.lettersChangedFlag = true;\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n    this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n    this.initRenderable();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n    this.createContent();\n    this.hide();\n    this.textAnimator.searchProperties(this.dynamicProperties);\n  };\n\n  ITextElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n  };\n\n  ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n    var j;\n    var jLen = shapes.length;\n    var pathNodes;\n    var shapeStr = '';\n\n    for (j = 0; j < jLen; j += 1) {\n      if (shapes[j].ty === 'sh') {\n        pathNodes = shapes[j].ks.k;\n        shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n      }\n    }\n\n    return shapeStr;\n  };\n\n  ITextElement.prototype.updateDocumentData = function (newData, index) {\n    this.textProperty.updateDocumentData(newData, index);\n  };\n\n  ITextElement.prototype.canResizeFont = function (_canResize) {\n    this.textProperty.canResizeFont(_canResize);\n  };\n\n  ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n    this.textProperty.setMinimumFontSize(_fontSize);\n  };\n\n  ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n    if (documentData.ps) {\n      matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n    }\n\n    matrixHelper.translate(0, -documentData.ls, 0);\n\n    switch (documentData.j) {\n      case 1:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n        break;\n\n      case 2:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n        break;\n\n      default:\n        break;\n    }\n\n    matrixHelper.translate(xPos, yPos, 0);\n  };\n\n  ITextElement.prototype.buildColor = function (colorData) {\n    return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n  };\n\n  ITextElement.prototype.emptyProp = new LetterProps();\n\n  ITextElement.prototype.destroy = function () {};\n\n  ITextElement.prototype.validateText = function () {\n    if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n      this.buildNewText();\n      this.textProperty._isFirstFrame = false;\n      this.textProperty._mdf = false;\n    }\n  };\n\n  var emptyShapeData = {\n    shapes: []\n  };\n\n  function SVGTextLottieElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.renderType = 'svg';\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n  SVGTextLottieElement.prototype.createContent = function () {\n    if (this.data.singleShape && !this.globalData.fontManager.chars) {\n      this.textContainer = createNS('text');\n    }\n  };\n\n  SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n    var i = 0;\n    var len = textArray.length;\n    var textContents = [];\n    var currentTextContent = '';\n\n    while (i < len) {\n      if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n        textContents.push(currentTextContent);\n        currentTextContent = '';\n      } else {\n        currentTextContent += textArray[i];\n      }\n\n      i += 1;\n    }\n\n    textContents.push(currentTextContent);\n    return textContents;\n  };\n\n  SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n    // data should probably be cloned to apply scale separately to each instance of a text on different layers\n    // but since text internal content gets only rendered once and then it's never rerendered,\n    // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n    // Avoiding cloning is preferred since cloning each character shape data is expensive\n    if (data.shapes && data.shapes.length) {\n      var shape = data.shapes[0];\n\n      if (shape.it) {\n        var shapeItem = shape.it[shape.it.length - 1];\n\n        if (shapeItem.s) {\n          shapeItem.s.k[0] = scale;\n          shapeItem.s.k[1] = scale;\n        }\n      }\n    }\n\n    return data;\n  };\n\n  SVGTextLottieElement.prototype.buildNewText = function () {\n    this.addDynamicProperty(this);\n    var i;\n    var len;\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n    if (documentData.fc) {\n      this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n    } else {\n      this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n    }\n\n    if (documentData.sc) {\n      this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n      this.layerElement.setAttribute('stroke-width', documentData.sw);\n    }\n\n    this.layerElement.setAttribute('font-size', documentData.finalSize);\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (fontData.fClass) {\n      this.layerElement.setAttribute('class', fontData.fClass);\n    } else {\n      this.layerElement.setAttribute('font-family', fontData.fFamily);\n      var fWeight = documentData.fWeight;\n      var fStyle = documentData.fStyle;\n      this.layerElement.setAttribute('font-style', fStyle);\n      this.layerElement.setAttribute('font-weight', fWeight);\n    }\n\n    this.layerElement.setAttribute('aria-label', documentData.t);\n    var letters = documentData.l || [];\n    var usesGlyphs = !!this.globalData.fontManager.chars;\n    len = letters.length;\n    var tSpan;\n    var matrixHelper = this.mHelper;\n    var shapeStr = '';\n    var singleShape = this.data.singleShape;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n    if (singleShape && !usesGlyphs && !documentData.sz) {\n      var tElement = this.textContainer;\n      var justify = 'start';\n\n      switch (documentData.j) {\n        case 1:\n          justify = 'end';\n          break;\n\n        case 2:\n          justify = 'middle';\n          break;\n\n        default:\n          justify = 'start';\n          break;\n      }\n\n      tElement.setAttribute('text-anchor', justify);\n      tElement.setAttribute('letter-spacing', trackingOffset);\n      var textContent = this.buildTextContents(documentData.finalText);\n      len = textContent.length;\n      yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n      for (i = 0; i < len; i += 1) {\n        tSpan = this.textSpans[i].span || createNS('tspan');\n        tSpan.textContent = textContent[i];\n        tSpan.setAttribute('x', 0);\n        tSpan.setAttribute('y', yPos);\n        tSpan.style.display = 'inherit';\n        tElement.appendChild(tSpan);\n\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            glyph: null\n          };\n        }\n\n        this.textSpans[i].span = tSpan;\n        yPos += documentData.finalLineHeight;\n      }\n\n      this.layerElement.appendChild(tElement);\n    } else {\n      var cachedSpansLength = this.textSpans.length;\n      var charData;\n\n      for (i = 0; i < len; i += 1) {\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            childSpan: null,\n            glyph: null\n          };\n        }\n\n        if (!usesGlyphs || !singleShape || i === 0) {\n          tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n          if (cachedSpansLength <= i) {\n            tSpan.setAttribute('stroke-linecap', 'butt');\n            tSpan.setAttribute('stroke-linejoin', 'round');\n            tSpan.setAttribute('stroke-miterlimit', '4');\n            this.textSpans[i].span = tSpan;\n\n            if (usesGlyphs) {\n              var childSpan = createNS('g');\n              tSpan.appendChild(childSpan);\n              this.textSpans[i].childSpan = childSpan;\n            }\n\n            this.textSpans[i].span = tSpan;\n            this.layerElement.appendChild(tSpan);\n          }\n\n          tSpan.style.display = 'inherit';\n        }\n\n        matrixHelper.reset();\n\n        if (singleShape) {\n          if (letters[i].n) {\n            xPos = -trackingOffset;\n            yPos += documentData.yOffset;\n            yPos += firstLine ? 1 : 0;\n            firstLine = false;\n          }\n\n          this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n          xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n          xPos += trackingOffset;\n        }\n\n        if (usesGlyphs) {\n          charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n          var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n          if (charData.t === 1) {\n            glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n          } else {\n            var data = emptyShapeData;\n\n            if (charData.data && charData.data.shapes) {\n              data = this.buildShapeData(charData.data, documentData.finalSize);\n            }\n\n            glyphElement = new SVGShapeElement(data, this.globalData, this);\n          }\n\n          if (this.textSpans[i].glyph) {\n            var glyph = this.textSpans[i].glyph;\n            this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n            glyph.destroy();\n          }\n\n          this.textSpans[i].glyph = glyphElement;\n          glyphElement._debug = true;\n          glyphElement.prepareFrame(0);\n          glyphElement.renderFrame();\n          this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n          // this might have issues with strokes and might need a different solution\n\n          if (charData.t === 1) {\n            this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n          }\n        } else {\n          if (singleShape) {\n            tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n          }\n\n          tSpan.textContent = letters[i].val;\n          tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n        } //\n\n      }\n\n      if (singleShape && tSpan) {\n        tSpan.setAttribute('d', shapeStr);\n      }\n    }\n\n    while (i < this.textSpans.length) {\n      this.textSpans[i].span.style.display = 'none';\n      i += 1;\n    }\n\n    this._sizeChanged = true;\n  };\n\n  SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n    this.prepareFrame(this.comp.renderedFrame - this.data.st);\n    this.renderInnerContent();\n\n    if (this._sizeChanged) {\n      this._sizeChanged = false;\n      var textBox = this.layerElement.getBBox();\n      this.bbox = {\n        top: textBox.y,\n        left: textBox.x,\n        width: textBox.width,\n        height: textBox.height\n      };\n    }\n\n    return this.bbox;\n  };\n\n  SVGTextLottieElement.prototype.getValue = function () {\n    var i;\n    var len = this.textSpans.length;\n    var glyphElement;\n    this.renderedFrame = this.comp.renderedFrame;\n\n    for (i = 0; i < len; i += 1) {\n      glyphElement = this.textSpans[i].glyph;\n\n      if (glyphElement) {\n        glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n        if (glyphElement._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  SVGTextLottieElement.prototype.renderInnerContent = function () {\n    this.validateText();\n\n    if (!this.data.singleShape || this._mdf) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n      if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n        this._sizeChanged = true;\n        var i;\n        var len;\n        var renderedLetters = this.textAnimator.renderedLetters;\n        var letters = this.textProperty.currentData.l;\n        len = letters.length;\n        var renderedLetter;\n        var textSpan;\n        var glyphElement;\n\n        for (i = 0; i < len; i += 1) {\n          if (!letters[i].n) {\n            renderedLetter = renderedLetters[i];\n            textSpan = this.textSpans[i].span;\n            glyphElement = this.textSpans[i].glyph;\n\n            if (glyphElement) {\n              glyphElement.renderFrame();\n            }\n\n            if (renderedLetter._mdf.m) {\n              textSpan.setAttribute('transform', renderedLetter.m);\n            }\n\n            if (renderedLetter._mdf.o) {\n              textSpan.setAttribute('opacity', renderedLetter.o);\n            }\n\n            if (renderedLetter._mdf.sw) {\n              textSpan.setAttribute('stroke-width', renderedLetter.sw);\n            }\n\n            if (renderedLetter._mdf.sc) {\n              textSpan.setAttribute('stroke', renderedLetter.sc);\n            }\n\n            if (renderedLetter._mdf.fc) {\n              textSpan.setAttribute('fill', renderedLetter.fc);\n            }\n          }\n        }\n      }\n    }\n  };\n\n  function ISolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([IImageElement], ISolidElement);\n\n  ISolidElement.prototype.createContent = function () {\n    var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n    /// /rect.style.height = this.data.sh;\n    /// /rect.style.fill = this.data.sc;\n\n    rect.setAttribute('width', this.data.sw);\n    rect.setAttribute('height', this.data.sh);\n    rect.setAttribute('fill', this.data.sc);\n    this.layerElement.appendChild(rect);\n  };\n\n  function NullElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initFrame();\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n  }\n\n  NullElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  NullElement.prototype.renderFrame = function () {};\n\n  NullElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  NullElement.prototype.destroy = function () {};\n\n  NullElement.prototype.sourceRectAtTime = function () {};\n\n  NullElement.prototype.hide = function () {};\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n  function SVGRendererBase() {}\n\n  extendPrototype([BaseRenderer], SVGRendererBase);\n\n  SVGRendererBase.prototype.createNull = function (data) {\n    return new NullElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createShape = function (data) {\n    return new SVGShapeElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createText = function (data) {\n    return new SVGTextLottieElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createImage = function (data) {\n    return new IImageElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createSolid = function (data) {\n    return new ISolidElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.configAnimation = function (animData) {\n    this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n    this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n    if (this.renderConfig.viewBoxSize) {\n      this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n    } else {\n      this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n    }\n\n    if (!this.renderConfig.viewBoxOnly) {\n      this.svgElement.setAttribute('width', animData.w);\n      this.svgElement.setAttribute('height', animData.h);\n      this.svgElement.style.width = '100%';\n      this.svgElement.style.height = '100%';\n      this.svgElement.style.transform = 'translate3d(0,0,0)';\n      this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n    }\n\n    if (this.renderConfig.width) {\n      this.svgElement.setAttribute('width', this.renderConfig.width);\n    }\n\n    if (this.renderConfig.height) {\n      this.svgElement.setAttribute('height', this.renderConfig.height);\n    }\n\n    if (this.renderConfig.className) {\n      this.svgElement.setAttribute('class', this.renderConfig.className);\n    }\n\n    if (this.renderConfig.id) {\n      this.svgElement.setAttribute('id', this.renderConfig.id);\n    }\n\n    if (this.renderConfig.focusable !== undefined) {\n      this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n    }\n\n    this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n    // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n    this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n    var defs = this.globalData.defs;\n    this.setupGlobalData(animData, defs);\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.data = animData;\n    var maskElement = createNS('clipPath');\n    var rect = createNS('rect');\n    rect.setAttribute('width', animData.w);\n    rect.setAttribute('height', animData.h);\n    rect.setAttribute('x', 0);\n    rect.setAttribute('y', 0);\n    var maskId = createElementID();\n    maskElement.setAttribute('id', maskId);\n    maskElement.appendChild(rect);\n    this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n    defs.appendChild(maskElement);\n    this.layers = animData.layers;\n    this.elements = createSizedArray(animData.layers.length);\n  };\n\n  SVGRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.layerElement = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  SVGRendererBase.prototype.updateContainerSize = function () {};\n\n  SVGRendererBase.prototype.findIndexByInd = function (ind) {\n    var i = 0;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ind === ind) {\n        return i;\n      }\n    }\n\n    return -1;\n  };\n\n  SVGRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    elements[pos] = true;\n    var element = this.createItem(this.layers[pos]);\n    elements[pos] = element;\n\n    if (getExpressionsPlugin()) {\n      if (this.layers[pos].ty === 0) {\n        this.globalData.projectInterface.registerComposition(element);\n      }\n\n      element.initExpressions();\n    }\n\n    this.appendElementInPos(element, pos);\n\n    if (this.layers[pos].tt) {\n      var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n\n      if (elementIndex === -1) {\n        return;\n      }\n\n      if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n        this.buildItem(elementIndex);\n        this.addPendingElement(element);\n      } else {\n        var matteElement = elements[elementIndex];\n        var matteMask = matteElement.getMatte(this.layers[pos].tt);\n        element.setMatte(matteMask);\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n\n      if (element.data.tt) {\n        var i = 0;\n        var len = this.elements.length;\n\n        while (i < len) {\n          if (this.elements[i] === element) {\n            var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n            var matteElement = this.elements[elementIndex];\n            var matteMask = matteElement.getMatte(this.layers[i].tt);\n            element.setMatte(matteMask);\n            break;\n          }\n\n          i += 1;\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.renderFrame = function (num) {\n    if (this.renderedFrame === num || this.destroyed) {\n      return;\n    }\n\n    if (num === null) {\n      num = this.renderedFrame;\n    } else {\n      this.renderedFrame = num;\n    } // console.log('-------');\n    // console.log('FRAME ',num);\n\n\n    this.globalData.frameNum = num;\n    this.globalData.frameId += 1;\n    this.globalData.projectInterface.currentFrame = num;\n    this.globalData._mdf = false;\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      for (i = 0; i < len; i += 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newElement = element.getBaseElement();\n\n    if (!newElement) {\n      return;\n    }\n\n    var i = 0;\n    var nextElement;\n\n    while (i < pos) {\n      if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n        nextElement = this.elements[i].getBaseElement();\n      }\n\n      i += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(newElement, nextElement);\n    } else {\n      this.layerElement.appendChild(newElement);\n    }\n  };\n\n  SVGRendererBase.prototype.hide = function () {\n    this.layerElement.style.display = 'none';\n  };\n\n  SVGRendererBase.prototype.show = function () {\n    this.layerElement.style.display = 'block';\n  };\n\n  function ICompElement() {}\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n  ICompElement.prototype.initElement = function (data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initTransform(data, globalData, comp);\n    this.initRenderable();\n    this.initHierarchy();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n\n    if (this.data.xt || !globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n\n    this.hide();\n  };\n  /* ICompElement.prototype.hide = function(){\r\n      if(!this.hidden){\r\n          this.hideElement();\r\n          var i,len = this.elements.length;\r\n          for( i = 0; i < len; i+=1 ){\r\n              if(this.elements[i]){\r\n                  this.elements[i].hide();\r\n              }\r\n          }\r\n      }\r\n  }; */\n\n\n  ICompElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n\n    if (!this.isInRange && !this.data.xt) {\n      return;\n    }\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n\n      if (timeRemapped === this.data.op) {\n        timeRemapped = this.data.op - 1;\n      }\n\n      this.renderedFrame = timeRemapped;\n    } else {\n      this.renderedFrame = num / this.data.sr;\n    }\n\n    var i;\n    var len = this.elements.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(this.renderedFrame);\n    } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n        if (this.elements[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  ICompElement.prototype.renderInnerContent = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  ICompElement.prototype.setElements = function (elems) {\n    this.elements = elems;\n  };\n\n  ICompElement.prototype.getElements = function () {\n    return this.elements;\n  };\n\n  ICompElement.prototype.destroyElements = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n  };\n\n  ICompElement.prototype.destroy = function () {\n    this.destroyElements();\n    this.destroyBaseElement();\n  };\n\n  function SVGCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = true;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n  SVGCompElement.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function SVGRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.svgElement = createNS('svg');\n    var ariaLabel = '';\n\n    if (config && config.title) {\n      var titleElement = createNS('title');\n      var titleId = createElementID();\n      titleElement.setAttribute('id', titleId);\n      titleElement.textContent = config.title;\n      this.svgElement.appendChild(titleElement);\n      ariaLabel += titleId;\n    }\n\n    if (config && config.description) {\n      var descElement = createNS('desc');\n      var descId = createElementID();\n      descElement.setAttribute('id', descId);\n      descElement.textContent = config.description;\n      this.svgElement.appendChild(descElement);\n      ariaLabel += ' ' + descId;\n    }\n\n    if (ariaLabel) {\n      this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n    }\n\n    var defs = createNS('defs');\n    this.svgElement.appendChild(defs);\n    var maskElement = createNS('g');\n    this.svgElement.appendChild(maskElement);\n    this.layerElement = maskElement;\n    this.renderConfig = {\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      progressiveLoad: config && config.progressiveLoad || false,\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      viewBoxOnly: config && config.viewBoxOnly || false,\n      viewBoxSize: config && config.viewBoxSize || false,\n      className: config && config.className || '',\n      id: config && config.id || '',\n      focusable: config && config.focusable,\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '100%',\n        height: config && config.filterSize && config.filterSize.height || '100%',\n        x: config && config.filterSize && config.filterSize.x || '0%',\n        y: config && config.filterSize && config.filterSize.y || '0%'\n      },\n      width: config && config.width,\n      height: config && config.height,\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      defs: defs,\n      renderConfig: this.renderConfig\n    };\n    this.elements = [];\n    this.pendingElements = [];\n    this.destroyed = false;\n    this.rendererType = 'svg';\n  }\n\n  extendPrototype([SVGRendererBase], SVGRenderer);\n\n  SVGRenderer.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function ShapeTransformManager() {\n    this.sequences = {};\n    this.sequenceList = [];\n    this.transform_key_count = 0;\n  }\n\n  ShapeTransformManager.prototype = {\n    addTransformSequence: function addTransformSequence(transforms) {\n      var i;\n      var len = transforms.length;\n      var key = '_';\n\n      for (i = 0; i < len; i += 1) {\n        key += transforms[i].transform.key + '_';\n      }\n\n      var sequence = this.sequences[key];\n\n      if (!sequence) {\n        sequence = {\n          transforms: [].concat(transforms),\n          finalTransform: new Matrix(),\n          _mdf: false\n        };\n        this.sequences[key] = sequence;\n        this.sequenceList.push(sequence);\n      }\n\n      return sequence;\n    },\n    processSequence: function processSequence(sequence, isFirstFrame) {\n      var i = 0;\n      var len = sequence.transforms.length;\n      var _mdf = isFirstFrame;\n\n      while (i < len && !isFirstFrame) {\n        if (sequence.transforms[i].transform.mProps._mdf) {\n          _mdf = true;\n          break;\n        }\n\n        i += 1;\n      }\n\n      if (_mdf) {\n        sequence.finalTransform.reset();\n\n        for (i = len - 1; i >= 0; i -= 1) {\n          sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\n        }\n      }\n\n      sequence._mdf = _mdf;\n    },\n    processSequences: function processSequences(isFirstFrame) {\n      var i;\n      var len = this.sequenceList.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.processSequence(this.sequenceList[i], isFirstFrame);\n      }\n    },\n    getNewKey: function getNewKey() {\n      this.transform_key_count += 1;\n      return '_' + this.transform_key_count;\n    }\n  };\n\n  var lumaLoader = function lumaLoader() {\n    var id = '__lottie_element_luma_buffer';\n    var lumaBuffer = null;\n    var lumaBufferCtx = null;\n    var svg = null; // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.\n    // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.\n    // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.\n    // Naming it solution 2 to mark the extra comment lines.\n\n    /*\r\n    var svgString = [\r\n      '<svg xmlns=\"http://www.w3.org/2000/svg\">',\r\n      '<filter id=\"' + id + '\">',\r\n      '<feColorMatrix type=\"matrix\" color-interpolation-filters=\"sRGB\" values=\"',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0',\r\n      '\"/>',\r\n      '</filter>',\r\n      '</svg>',\r\n    ].join('');\r\n    var blob = new Blob([svgString], { type: 'image/svg+xml' });\r\n    var url = URL.createObjectURL(blob);\r\n    */\n\n    function createLumaSvgFilter() {\n      var _svg = createNS('svg');\n\n      var fil = createNS('filter');\n      var matrix = createNS('feColorMatrix');\n      fil.setAttribute('id', id);\n      matrix.setAttribute('type', 'matrix');\n      matrix.setAttribute('color-interpolation-filters', 'sRGB');\n      matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');\n      fil.appendChild(matrix);\n\n      _svg.appendChild(fil);\n\n      _svg.setAttribute('id', id + '_svg');\n\n      if (featureSupport.svgLumaHidden) {\n        _svg.style.display = 'none';\n      }\n\n      return _svg;\n    }\n\n    function loadLuma() {\n      if (!lumaBuffer) {\n        svg = createLumaSvgFilter();\n        document.body.appendChild(svg);\n        lumaBuffer = createTag('canvas');\n        lumaBufferCtx = lumaBuffer.getContext('2d'); // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n        lumaBufferCtx.filter = 'url(#' + id + ')';\n        lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n        lumaBufferCtx.fillRect(0, 0, 1, 1);\n      }\n    }\n\n    function getLuma(canvas) {\n      if (!lumaBuffer) {\n        loadLuma();\n      }\n\n      lumaBuffer.width = canvas.width;\n      lumaBuffer.height = canvas.height; // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n      lumaBufferCtx.filter = 'url(#' + id + ')';\n      return lumaBuffer;\n    }\n\n    return {\n      load: loadLuma,\n      get: getLuma\n    };\n  };\n\n  function createCanvas(width, height) {\n    if (featureSupport.offscreenCanvas) {\n      return new OffscreenCanvas(width, height);\n    }\n\n    var canvas = createTag('canvas');\n    canvas.width = width;\n    canvas.height = height;\n    return canvas;\n  }\n\n  var assetLoader = function () {\n    return {\n      loadLumaCanvas: lumaLoader.load,\n      getLumaCanvas: lumaLoader.get,\n      createCanvas: createCanvas\n    };\n  }();\n\n  var registeredEffects = {};\n\n  function CVEffects(elem) {\n    var i;\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects[type]) {\n        var Effect = registeredEffects[type].effect;\n        filterManager = new Effect(elem.effectsManager.effectElements[i], elem);\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  CVEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  CVEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n\n    return effects;\n  };\n\n  function registerEffect(id, effect) {\n    registeredEffects[id] = {\n      effect: effect\n    };\n  }\n\n  function CVMaskElement(data, element) {\n    this.data = data;\n    this.element = element;\n    this.masksProperties = this.data.masksProperties || [];\n    this.viewData = createSizedArray(this.masksProperties.length);\n    var i;\n    var len = this.masksProperties.length;\n    var hasMasks = false;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        hasMasks = true;\n      }\n\n      this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n    }\n\n    this.hasMasks = hasMasks;\n\n    if (hasMasks) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  CVMaskElement.prototype.renderFrame = function () {\n    if (!this.hasMasks) {\n      return;\n    }\n\n    var transform = this.element.finalTransform.mat;\n    var ctx = this.element.canvasContext;\n    var i;\n    var len = this.masksProperties.length;\n    var pt;\n    var pts;\n    var data;\n    ctx.beginPath();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.masksProperties[i].inv) {\n          ctx.moveTo(0, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n          ctx.lineTo(0, this.element.globalData.compSize.h);\n          ctx.lineTo(0, 0);\n        }\n\n        data = this.viewData[i].v;\n        pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n        ctx.moveTo(pt[0], pt[1]);\n        var j;\n        var jLen = data._length;\n\n        for (j = 1; j < jLen; j += 1) {\n          pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n          ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n        }\n\n        pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n        ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n      }\n    }\n\n    this.element.globalData.renderer.save(true);\n    ctx.clip();\n  };\n\n  CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n  CVMaskElement.prototype.destroy = function () {\n    this.element = null;\n  };\n\n  function CVBaseElement() {}\n\n  var operationsMap = {\n    1: 'source-in',\n    2: 'source-out',\n    3: 'source-in',\n    4: 'source-out'\n  };\n  CVBaseElement.prototype = {\n    createElements: function createElements() {},\n    initRendererElement: function initRendererElement() {},\n    createContainerElements: function createContainerElements() {\n      // If the layer is masked we will use two buffers to store each different states of the drawing\n      // This solution is not ideal for several reason. But unfortunately, because of the recursive\n      // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.\n      // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer\n      // It might be challenging because the layer most likely is transformed in some way\n      if (this.data.tt >= 1) {\n        this.buffers = [];\n        var canvasContext = this.globalData.canvasContext;\n        var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n        this.buffers.push(bufferCanvas);\n        var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n        this.buffers.push(bufferCanvas2);\n\n        if (this.data.tt >= 3 && !document._isProxy) {\n          assetLoader.loadLumaCanvas();\n        }\n      }\n\n      this.canvasContext = this.globalData.canvasContext;\n      this.transformCanvas = this.globalData.transformCanvas;\n      this.renderableEffectsManager = new CVEffects(this);\n      this.searchEffectTransforms();\n    },\n    createContent: function createContent() {},\n    setBlendMode: function setBlendMode() {\n      var globalData = this.globalData;\n\n      if (globalData.blendMode !== this.data.bm) {\n        globalData.blendMode = this.data.bm;\n        var blendModeValue = getBlendMode(this.data.bm);\n        globalData.canvasContext.globalCompositeOperation = blendModeValue;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new CVMaskElement(this.data, this);\n      this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n    },\n    hideElement: function hideElement() {\n      if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n        this.hidden = true;\n      }\n    },\n    showElement: function showElement() {\n      if (this.isInRange && !this.isTransparent) {\n        this.hidden = false;\n        this._isFirstFrame = true;\n        this.maskManager._isFirstFrame = true;\n      }\n    },\n    clearCanvas: function clearCanvas(canvasContext) {\n      canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n    },\n    prepareLayer: function prepareLayer() {\n      if (this.data.tt >= 1) {\n        var buffer = this.buffers[0];\n        var bufferCtx = buffer.getContext('2d');\n        this.clearCanvas(bufferCtx); // on the first buffer we store the current state of the global drawing\n\n        bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // The next four lines are to clear the canvas\n        // TODO: Check if there is a way to clear the canvas without resetting the transform\n\n        this.currentTransform = this.canvasContext.getTransform();\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n        this.clearCanvas(this.canvasContext);\n        this.canvasContext.setTransform(this.currentTransform);\n      }\n    },\n    exitLayer: function exitLayer() {\n      if (this.data.tt >= 1) {\n        var buffer = this.buffers[1]; // On the second buffer we store the current state of the global drawing\n        // that only contains the content of this layer\n        // (if it is a composition, it also includes the nested layers)\n\n        var bufferCtx = buffer.getContext('2d');\n        this.clearCanvas(bufferCtx);\n        bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // We clear the canvas again\n\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n        this.clearCanvas(this.canvasContext);\n        this.canvasContext.setTransform(this.currentTransform); // We draw the mask\n\n        var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n        mask.renderFrame(true); // We draw the second buffer (that contains the content of this layer)\n\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); // If the mask is a Luma matte, we need to do two extra painting operations\n        // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error\n\n        if (this.data.tt >= 3 && !document._isProxy) {\n          // We copy the painted mask to a buffer that has a color matrix filter applied to it\n          // that applies the rgb values to the alpha channel\n          var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n          var lumaBufferCtx = lumaBuffer.getContext('2d');\n          lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n          this.clearCanvas(this.canvasContext); // we repaint the context with the mask applied to it\n\n          this.canvasContext.drawImage(lumaBuffer, 0, 0);\n        }\n\n        this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n        this.canvasContext.drawImage(buffer, 0, 0); // We finally draw the first buffer (that contains the content of the global drawing)\n        // We use destination-over to draw the global drawing below the current layer\n\n        this.canvasContext.globalCompositeOperation = 'destination-over';\n        this.canvasContext.drawImage(this.buffers[0], 0, 0);\n        this.canvasContext.setTransform(this.currentTransform); // We reset the globalCompositeOperation to source-over, the standard type of operation\n\n        this.canvasContext.globalCompositeOperation = 'source-over';\n      }\n    },\n    renderFrame: function renderFrame(forceRender) {\n      if (this.hidden || this.data.hd) {\n        return;\n      }\n\n      if (this.data.td === 1 && !forceRender) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderLocalTransform();\n      this.setBlendMode();\n      var forceRealStack = this.data.ty === 0;\n      this.prepareLayer();\n      this.globalData.renderer.save(forceRealStack);\n      this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);\n      this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);\n      this.renderInnerContent();\n      this.globalData.renderer.restore(forceRealStack);\n      this.exitLayer();\n\n      if (this.maskManager.hasMasks) {\n        this.globalData.renderer.restore(true);\n      }\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.canvasContext = null;\n      this.data = null;\n      this.globalData = null;\n      this.maskManager.destroy();\n    },\n    mHelper: new Matrix()\n  };\n  CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n  CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n  function CVShapeData(element, data, styles, transformsManager) {\n    this.styledShapes = [];\n    this.tr = [0, 0, 0, 0, 0, 0];\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n    var i;\n    var len = styles.length;\n    var styledShape;\n\n    for (i = 0; i < len; i += 1) {\n      if (!styles[i].closed) {\n        styledShape = {\n          transforms: transformsManager.addTransformSequence(styles[i].transforms),\n          trNodes: []\n        };\n        this.styledShapes.push(styledShape);\n        styles[i].elements.push(styledShape);\n      }\n    }\n  }\n\n  CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n  function CVShapeElement(data, globalData, comp) {\n    this.shapes = [];\n    this.shapesData = data.shapes;\n    this.stylesList = [];\n    this.itemsData = [];\n    this.prevViewData = [];\n    this.shapeModifiers = [];\n    this.processedElements = [];\n    this.transformsManager = new ShapeTransformManager();\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n  CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n  CVShapeElement.prototype.transformHelper = {\n    opacity: 1,\n    _opMdf: false\n  };\n  CVShapeElement.prototype.dashResetter = [];\n\n  CVShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n  };\n\n  CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n    var styleElem = {\n      data: data,\n      type: data.ty,\n      preTransforms: this.transformsManager.addTransformSequence(transforms),\n      transforms: [],\n      elements: [],\n      closed: data.hd === true\n    };\n    var elementData = {};\n\n    if (data.ty === 'fl' || data.ty === 'st') {\n      elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n      if (!elementData.c.k) {\n        styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n      }\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n      elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n      elementData.h = PropertyFactory.getProp(this, data.h || {\n        k: 0\n      }, 0, 0.01, this);\n      elementData.a = PropertyFactory.getProp(this, data.a || {\n        k: 0\n      }, 0, degToRads, this);\n      elementData.g = new GradientProperty(this, data.g, this);\n    }\n\n    elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      styleElem.lc = lineCapEnum[data.lc || 2];\n      styleElem.lj = lineJoinEnum[data.lj || 2];\n\n      if (data.lj == 1) {\n        // eslint-disable-line eqeqeq\n        styleElem.ml = data.ml;\n      }\n\n      elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n      if (!elementData.w.k) {\n        styleElem.wi = elementData.w.v;\n      }\n\n      if (data.d) {\n        var d = new DashProperty(this, data.d, 'canvas', this);\n        elementData.d = d;\n\n        if (!elementData.d.k) {\n          styleElem.da = elementData.d.dashArray;\n          styleElem[\"do\"] = elementData.d.dashoffset[0];\n        }\n      }\n    } else {\n      styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n    }\n\n    this.stylesList.push(styleElem);\n    elementData.style = styleElem;\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createGroupElement = function () {\n    var elementData = {\n      it: [],\n      prevViewData: []\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createTransformElement = function (data) {\n    var elementData = {\n      transform: {\n        opacity: 1,\n        _opMdf: false,\n        key: this.transformsManager.getNewKey(),\n        op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n        mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n      }\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createShapeElement = function (data) {\n    var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    return elementData;\n  };\n\n  CVShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n  };\n\n  CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.push(transform);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.removeTransformFromStyleList = function () {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.pop();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.closeStyles = function (styles) {\n    var i;\n    var len = styles.length;\n\n    for (i = 0; i < len; i += 1) {\n      styles[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var processedPos;\n    var modifier;\n    var currentTransform;\n    var ownTransforms = [].concat(transforms);\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._shouldRender = shouldRender;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          currentTransform = this.createTransformElement(arr[i]);\n          itemsData[i] = currentTransform;\n        }\n\n        ownTransforms.push(itemsData[i]);\n        this.addTransformToStyleList(itemsData[i]);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i]);\n        }\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          shouldRender = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    this.removeTransformFromStyleList();\n    this.closeStyles(ownStyles);\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.renderInnerContent = function () {\n    this.transformHelper.opacity = 1;\n    this.transformHelper._opMdf = false;\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n    this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n  };\n\n  CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n    if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n      groupTransform.opacity = parentTransform.opacity;\n      groupTransform.opacity *= groupTransform.op.v;\n      groupTransform._opMdf = true;\n    }\n  };\n\n  CVShapeElement.prototype.drawLayer = function () {\n    var i;\n    var len = this.stylesList.length;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var elems;\n    var nodes;\n    var renderer = this.globalData.renderer;\n    var ctx = this.globalData.canvasContext;\n    var type;\n    var currentStyle;\n\n    for (i = 0; i < len; i += 1) {\n      currentStyle = this.stylesList[i];\n      type = currentStyle.type; // Skipping style when\n      // Stroke width equals 0\n      // style should not be rendered (extra unused repeaters)\n      // current opacity equals 0\n      // global opacity equals 0\n\n      if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n        renderer.save();\n        elems = currentStyle.elements;\n\n        if (type === 'st' || type === 'gs') {\n          renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n\n          renderer.ctxLineWidth(currentStyle.wi); // ctx.lineWidth = currentStyle.wi;\n\n          renderer.ctxLineCap(currentStyle.lc); // ctx.lineCap = currentStyle.lc;\n\n          renderer.ctxLineJoin(currentStyle.lj); // ctx.lineJoin = currentStyle.lj;\n\n          renderer.ctxMiterLimit(currentStyle.ml || 0); // ctx.miterLimit = currentStyle.ml || 0;\n        } else {\n          renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n        }\n\n        renderer.ctxOpacity(currentStyle.coOp);\n\n        if (type !== 'st' && type !== 'gs') {\n          ctx.beginPath();\n        }\n\n        renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n        jLen = elems.length;\n\n        for (j = 0; j < jLen; j += 1) {\n          if (type === 'st' || type === 'gs') {\n            ctx.beginPath();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(currentStyle.da);\n              ctx.lineDashOffset = currentStyle[\"do\"];\n            }\n          }\n\n          nodes = elems[j].trNodes;\n          kLen = nodes.length;\n\n          for (k = 0; k < kLen; k += 1) {\n            if (nodes[k].t === 'm') {\n              ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n            } else if (nodes[k].t === 'c') {\n              ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n            } else {\n              ctx.closePath();\n            }\n          }\n\n          if (type === 'st' || type === 'gs') {\n            // ctx.stroke();\n            renderer.ctxStroke();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(this.dashResetter);\n            }\n          }\n        }\n\n        if (type !== 'st' && type !== 'gs') {\n          // ctx.fill(currentStyle.r);\n          this.globalData.renderer.ctxFill(currentStyle.r);\n        }\n\n        renderer.restore();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n    var i;\n    var len = items.length - 1;\n    var groupTransform;\n    groupTransform = parentTransform;\n\n    for (i = len; i >= 0; i -= 1) {\n      if (items[i].ty === 'tr') {\n        groupTransform = data[i].transform;\n        this.renderShapeTransform(parentTransform, groupTransform);\n      } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n        this.renderPath(items[i], data[i]);\n      } else if (items[i].ty === 'fl') {\n        this.renderFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'st') {\n        this.renderStroke(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n        this.renderGradientFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gr') {\n        this.renderShape(groupTransform, items[i].it, data[i].it);\n      } else if (items[i].ty === 'tm') {//\n      }\n    }\n\n    if (isMain) {\n      this.drawLayer();\n    }\n  };\n\n  CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n    if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n      var shapeNodes = styledShape.trNodes;\n      var paths = shape.paths;\n      var i;\n      var len;\n      var j;\n      var jLen = paths._length;\n      shapeNodes.length = 0;\n      var groupTransformMat = styledShape.transforms.finalTransform;\n\n      for (j = 0; j < jLen; j += 1) {\n        var pathNodes = paths.shapes[j];\n\n        if (pathNodes && pathNodes.v) {\n          len = pathNodes._length;\n\n          for (i = 1; i < len; i += 1) {\n            if (i === 1) {\n              shapeNodes.push({\n                t: 'm',\n                p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n              });\n            }\n\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n            });\n          }\n\n          if (len === 1) {\n            shapeNodes.push({\n              t: 'm',\n              p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n            });\n          }\n\n          if (pathNodes.c && len) {\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n            });\n            shapeNodes.push({\n              t: 'z'\n            });\n          }\n        }\n      }\n\n      styledShape.trNodes = shapeNodes;\n    }\n  };\n\n  CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n    if (pathData.hd !== true && pathData._shouldRender) {\n      var i;\n      var len = itemData.styledShapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n  };\n\n  CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var grd;\n\n    if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n      var ctx = this.globalData.canvasContext;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (styleData.t === 1) {\n        grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n      } else {\n        var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n        var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n        var percent = itemData.h.v;\n\n        if (percent >= 1) {\n          percent = 0.99;\n        } else if (percent <= -1) {\n          percent = -0.99;\n        }\n\n        var dist = rad * percent;\n        var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n        var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n        grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n      }\n\n      var i;\n      var len = styleData.g.p;\n      var cValues = itemData.g.c;\n      var opacity = 1;\n\n      for (i = 0; i < len; i += 1) {\n        if (itemData.g._hasOpacity && itemData.g._collapsable) {\n          opacity = itemData.g.o[i * 2 + 1];\n        }\n\n        grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n      }\n\n      styleElem.grd = grd;\n    }\n\n    styleElem.coOp = itemData.o.v * groupTransform.opacity;\n  };\n\n  CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var d = itemData.d;\n\n    if (d && (d._mdf || this._isFirstFrame)) {\n      styleElem.da = d.dashArray;\n      styleElem[\"do\"] = d.dashoffset[0];\n    }\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n\n    if (itemData.w._mdf || this._isFirstFrame) {\n      styleElem.wi = itemData.w.v;\n    }\n  };\n\n  CVShapeElement.prototype.destroy = function () {\n    this.shapesData = null;\n    this.globalData = null;\n    this.canvasContext = null;\n    this.stylesList.length = 0;\n    this.itemsData.length = 0;\n  };\n\n  function CVTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.yOffset = 0;\n    this.fillColorAnim = false;\n    this.strokeColorAnim = false;\n    this.strokeWidthAnim = false;\n    this.stroke = false;\n    this.fill = false;\n    this.justifyOffset = 0;\n    this.currentRender = null;\n    this.renderType = 'canvas';\n    this.values = {\n      fill: 'rgba(0,0,0,0)',\n      stroke: 'rgba(0,0,0,0)',\n      sWidth: 0,\n      fValue: ''\n    };\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n  CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n  CVTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var hasFill = false;\n\n    if (documentData.fc) {\n      hasFill = true;\n      this.values.fill = this.buildColor(documentData.fc);\n    } else {\n      this.values.fill = 'rgba(0,0,0,0)';\n    }\n\n    this.fill = hasFill;\n    var hasStroke = false;\n\n    if (documentData.sc) {\n      hasStroke = true;\n      this.values.stroke = this.buildColor(documentData.sc);\n      this.values.sWidth = documentData.sw;\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n    var i;\n    var len;\n    var letters = documentData.l;\n    var matrixHelper = this.mHelper;\n    this.stroke = hasStroke;\n    this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n    len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n    var charData;\n    var shapeData;\n    var k;\n    var kLen;\n    var shapes;\n    var j;\n    var jLen;\n    var pathNodes;\n    var commands;\n    var pathArr;\n    var singleShape = this.data.singleShape;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n      shapeData = charData && charData.data || {};\n      matrixHelper.reset();\n\n      if (singleShape && letters[i].n) {\n        xPos = -trackingOffset;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        firstLine = false;\n      }\n\n      shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n      jLen = shapes.length;\n      matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n      if (singleShape) {\n        this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n      }\n\n      commands = createSizedArray(jLen - 1);\n      var commandsCounter = 0;\n\n      for (j = 0; j < jLen; j += 1) {\n        if (shapes[j].ty === 'sh') {\n          kLen = shapes[j].ks.k.i.length;\n          pathNodes = shapes[j].ks.k;\n          pathArr = [];\n\n          for (k = 1; k < kLen; k += 1) {\n            if (k === 1) {\n              pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n            }\n\n            pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n          }\n\n          pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n          commands[commandsCounter] = pathArr;\n          commandsCounter += 1;\n        }\n      }\n\n      if (singleShape) {\n        xPos += letters[i].l;\n        xPos += trackingOffset;\n      }\n\n      if (this.textSpans[cnt]) {\n        this.textSpans[cnt].elem = commands;\n      } else {\n        this.textSpans[cnt] = {\n          elem: commands\n        };\n      }\n\n      cnt += 1;\n    }\n  };\n\n  CVTextElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    var ctx = this.canvasContext;\n    ctx.font = this.values.fValue;\n    this.globalData.renderer.ctxLineCap('butt'); // ctx.lineCap = 'butt';\n\n    this.globalData.renderer.ctxLineJoin('miter'); // ctx.lineJoin = 'miter';\n\n    this.globalData.renderer.ctxMiterLimit(4); // ctx.miterLimit = 4;\n\n    if (!this.data.singleShape) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n    }\n\n    var i;\n    var len;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var lastFill = null;\n    var lastStroke = null;\n    var lastStrokeW = null;\n    var commands;\n    var pathArr;\n    var renderer = this.globalData.renderer;\n\n    for (i = 0; i < len; i += 1) {\n      if (!letters[i].n) {\n        renderedLetter = renderedLetters[i];\n\n        if (renderedLetter) {\n          renderer.save();\n          renderer.ctxTransform(renderedLetter.p);\n          renderer.ctxOpacity(renderedLetter.o);\n        }\n\n        if (this.fill) {\n          if (renderedLetter && renderedLetter.fc) {\n            if (lastFill !== renderedLetter.fc) {\n              renderer.ctxFillStyle(renderedLetter.fc);\n              lastFill = renderedLetter.fc; // ctx.fillStyle = renderedLetter.fc;\n            }\n          } else if (lastFill !== this.values.fill) {\n            lastFill = this.values.fill;\n            renderer.ctxFillStyle(this.values.fill); // ctx.fillStyle = this.values.fill;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          renderer.ctxFill(); // this.globalData.canvasContext.fill();\n          /// ctx.fillText(this.textSpans[i].val,0,0);\n        }\n\n        if (this.stroke) {\n          if (renderedLetter && renderedLetter.sw) {\n            if (lastStrokeW !== renderedLetter.sw) {\n              lastStrokeW = renderedLetter.sw;\n              renderer.ctxLineWidth(renderedLetter.sw); // ctx.lineWidth = renderedLetter.sw;\n            }\n          } else if (lastStrokeW !== this.values.sWidth) {\n            lastStrokeW = this.values.sWidth;\n            renderer.ctxLineWidth(this.values.sWidth); // ctx.lineWidth = this.values.sWidth;\n          }\n\n          if (renderedLetter && renderedLetter.sc) {\n            if (lastStroke !== renderedLetter.sc) {\n              lastStroke = renderedLetter.sc;\n              renderer.ctxStrokeStyle(renderedLetter.sc); // ctx.strokeStyle = renderedLetter.sc;\n            }\n          } else if (lastStroke !== this.values.stroke) {\n            lastStroke = this.values.stroke;\n            renderer.ctxStrokeStyle(this.values.stroke); // ctx.strokeStyle = this.values.stroke;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          renderer.ctxStroke(); // this.globalData.canvasContext.stroke();\n          /// ctx.strokeText(letters[i].val,0,0);\n        }\n\n        if (renderedLetter) {\n          this.globalData.renderer.restore();\n        }\n      }\n    }\n  };\n\n  function CVImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.img = globalData.imageLoader.getAsset(this.assetData);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n  CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVImageElement.prototype.createContent = function () {\n    if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n      var canvas = createTag('canvas');\n      canvas.width = this.assetData.w;\n      canvas.height = this.assetData.h;\n      var ctx = canvas.getContext('2d');\n      var imgW = this.img.width;\n      var imgH = this.img.height;\n      var imgRel = imgW / imgH;\n      var canvasRel = this.assetData.w / this.assetData.h;\n      var widthCrop;\n      var heightCrop;\n      var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n      if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n        heightCrop = imgH;\n        widthCrop = heightCrop * canvasRel;\n      } else {\n        widthCrop = imgW;\n        heightCrop = widthCrop / canvasRel;\n      }\n\n      ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n      this.img = canvas;\n    }\n  };\n\n  CVImageElement.prototype.renderInnerContent = function () {\n    this.canvasContext.drawImage(this.img, 0, 0);\n  };\n\n  CVImageElement.prototype.destroy = function () {\n    this.img = null;\n  };\n\n  function CVSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n  CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVSolidElement.prototype.renderInnerContent = function () {\n    // var ctx = this.canvasContext;\n    this.globalData.renderer.ctxFillStyle(this.data.sc); // ctx.fillStyle = this.data.sc;\n\n    this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n    //\n  };\n\n  function CanvasRendererBase() {}\n\n  extendPrototype([BaseRenderer], CanvasRendererBase);\n\n  CanvasRendererBase.prototype.createShape = function (data) {\n    return new CVShapeElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createText = function (data) {\n    return new CVTextElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createImage = function (data) {\n    return new CVImageElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createSolid = function (data) {\n    return new CVSolidElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  CanvasRendererBase.prototype.ctxTransform = function (props) {\n    if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n      return;\n    }\n\n    this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n  };\n\n  CanvasRendererBase.prototype.ctxOpacity = function (op) {\n    this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n  };\n\n  CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n    this.canvasContext.fillStyle = value;\n  };\n\n  CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n    this.canvasContext.strokeStyle = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n    this.canvasContext.lineWidth = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineCap = function (value) {\n    this.canvasContext.lineCap = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n    this.canvasContext.lineJoin = value;\n  };\n\n  CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n    this.canvasContext.miterLimit = value;\n  };\n\n  CanvasRendererBase.prototype.ctxFill = function (rule) {\n    this.canvasContext.fill(rule);\n  };\n\n  CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n    this.canvasContext.fillRect(x, y, w, h);\n  };\n\n  CanvasRendererBase.prototype.ctxStroke = function () {\n    this.canvasContext.stroke();\n  };\n\n  CanvasRendererBase.prototype.reset = function () {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    this.contextData.reset();\n  };\n\n  CanvasRendererBase.prototype.save = function () {\n    this.canvasContext.save();\n  };\n\n  CanvasRendererBase.prototype.restore = function (actionFlag) {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    if (actionFlag) {\n      this.globalData.blendMode = 'source-over';\n    }\n\n    this.contextData.restore(actionFlag);\n  };\n\n  CanvasRendererBase.prototype.configAnimation = function (animData) {\n    if (this.animationItem.wrapper) {\n      this.animationItem.container = createTag('canvas');\n      var containerStyle = this.animationItem.container.style;\n      containerStyle.width = '100%';\n      containerStyle.height = '100%';\n      var origin = '0px 0px 0px';\n      containerStyle.transformOrigin = origin;\n      containerStyle.mozTransformOrigin = origin;\n      containerStyle.webkitTransformOrigin = origin;\n      containerStyle['-webkit-transform'] = origin;\n      containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n      this.animationItem.wrapper.appendChild(this.animationItem.container);\n      this.canvasContext = this.animationItem.container.getContext('2d');\n\n      if (this.renderConfig.className) {\n        this.animationItem.container.setAttribute('class', this.renderConfig.className);\n      }\n\n      if (this.renderConfig.id) {\n        this.animationItem.container.setAttribute('id', this.renderConfig.id);\n      }\n    } else {\n      this.canvasContext = this.renderConfig.context;\n    }\n\n    this.contextData.setContext(this.canvasContext);\n    this.data = animData;\n    this.layers = animData.layers;\n    this.transformCanvas = {\n      w: animData.w,\n      h: animData.h,\n      sx: 0,\n      sy: 0,\n      tx: 0,\n      ty: 0\n    };\n    this.setupGlobalData(animData, document.body);\n    this.globalData.canvasContext = this.canvasContext;\n    this.globalData.renderer = this;\n    this.globalData.isDashed = false;\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.globalData.transformCanvas = this.transformCanvas;\n    this.elements = createSizedArray(animData.layers.length);\n    this.updateContainerSize();\n  };\n\n  CanvasRendererBase.prototype.updateContainerSize = function (width, height) {\n    this.reset();\n    var elementWidth;\n    var elementHeight;\n\n    if (width) {\n      elementWidth = width;\n      elementHeight = height;\n      this.canvasContext.canvas.width = elementWidth;\n      this.canvasContext.canvas.height = elementHeight;\n    } else {\n      if (this.animationItem.wrapper && this.animationItem.container) {\n        elementWidth = this.animationItem.wrapper.offsetWidth;\n        elementHeight = this.animationItem.wrapper.offsetHeight;\n      } else {\n        elementWidth = this.canvasContext.canvas.width;\n        elementHeight = this.canvasContext.canvas.height;\n      }\n\n      this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n      this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;\n    }\n\n    var elementRel;\n    var animationRel;\n\n    if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n      var par = this.renderConfig.preserveAspectRatio.split(' ');\n      var fillType = par[1] || 'meet';\n      var pos = par[0] || 'xMidYMid';\n      var xPos = pos.substr(0, 4);\n      var yPos = pos.substr(4);\n      elementRel = elementWidth / elementHeight;\n      animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n      if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n        this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      } else {\n        this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      }\n\n      if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n      } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.tx = 0;\n      }\n\n      if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n      } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.ty = 0;\n      }\n    } else if (this.renderConfig.preserveAspectRatio === 'none') {\n      this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    } else {\n      this.transformCanvas.sx = this.renderConfig.dpr;\n      this.transformCanvas.sy = this.renderConfig.dpr;\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    }\n\n    this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n    /* var i, len = this.elements.length;\r\n      for(i=0;i<len;i+=1){\r\n          if(this.elements[i] && this.elements[i].data.ty === 0){\r\n              this.elements[i].resize(this.globalData.transformCanvas);\r\n          }\r\n      } */\n\n    this.ctxTransform(this.transformCanvas.props);\n    this.canvasContext.beginPath();\n    this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n    this.canvasContext.closePath();\n    this.canvasContext.clip();\n    this.renderFrame(this.renderedFrame, true);\n  };\n\n  CanvasRendererBase.prototype.destroy = function () {\n    if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.globalData.canvasContext = null;\n    this.animationItem.container = null;\n    this.destroyed = true;\n  };\n\n  CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n    if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n      return;\n    }\n\n    this.renderedFrame = num;\n    this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n    this.globalData.frameId += 1;\n    this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n    this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n    // console.log('NEW: ',num);\n\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      if (this.renderConfig.clearCanvas === true) {\n        this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n      } else {\n        this.save();\n      }\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n\n      if (this.renderConfig.clearCanvas !== true) {\n        this.restore();\n      }\n    }\n  };\n\n  CanvasRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    var element = this.createItem(this.layers[pos], this, this.globalData);\n    elements[pos] = element;\n    element.initExpressions();\n    /* if(this.layers[pos].ty === 0){\r\n          element.resize(this.globalData.transformCanvas);\r\n      } */\n  };\n\n  CanvasRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  CanvasRendererBase.prototype.hide = function () {\n    this.animationItem.container.style.display = 'none';\n  };\n\n  CanvasRendererBase.prototype.show = function () {\n    this.animationItem.container.style.display = 'block';\n  };\n\n  function CanvasContext() {\n    this.opacity = -1;\n    this.transform = createTypedArray('float32', 16);\n    this.fillStyle = '';\n    this.strokeStyle = '';\n    this.lineWidth = '';\n    this.lineCap = '';\n    this.lineJoin = '';\n    this.miterLimit = '';\n    this.id = Math.random();\n  }\n\n  function CVContextData() {\n    this.stack = [];\n    this.cArrPos = 0;\n    this.cTr = new Matrix();\n    var i;\n    var len = 15;\n\n    for (i = 0; i < len; i += 1) {\n      var canvasContext = new CanvasContext();\n      this.stack[i] = canvasContext;\n    }\n\n    this._length = len;\n    this.nativeContext = null;\n    this.transformMat = new Matrix();\n    this.currentOpacity = 1; //\n\n    this.currentFillStyle = '';\n    this.appliedFillStyle = ''; //\n\n    this.currentStrokeStyle = '';\n    this.appliedStrokeStyle = ''; //\n\n    this.currentLineWidth = '';\n    this.appliedLineWidth = ''; //\n\n    this.currentLineCap = '';\n    this.appliedLineCap = ''; //\n\n    this.currentLineJoin = '';\n    this.appliedLineJoin = ''; //\n\n    this.appliedMiterLimit = '';\n    this.currentMiterLimit = '';\n  }\n\n  CVContextData.prototype.duplicate = function () {\n    var newLength = this._length * 2;\n    var i = 0;\n\n    for (i = this._length; i < newLength; i += 1) {\n      this.stack[i] = new CanvasContext();\n    }\n\n    this._length = newLength;\n  };\n\n  CVContextData.prototype.reset = function () {\n    this.cArrPos = 0;\n    this.cTr.reset();\n    this.stack[this.cArrPos].opacity = 1;\n  };\n\n  CVContextData.prototype.restore = function (forceRestore) {\n    this.cArrPos -= 1;\n    var currentContext = this.stack[this.cArrPos];\n    var transform = currentContext.transform;\n    var i;\n    var arr = this.cTr.props;\n\n    for (i = 0; i < 16; i += 1) {\n      arr[i] = transform[i];\n    }\n\n    if (forceRestore) {\n      this.nativeContext.restore();\n      var prevStack = this.stack[this.cArrPos + 1];\n      this.appliedFillStyle = prevStack.fillStyle;\n      this.appliedStrokeStyle = prevStack.strokeStyle;\n      this.appliedLineWidth = prevStack.lineWidth;\n      this.appliedLineCap = prevStack.lineCap;\n      this.appliedLineJoin = prevStack.lineJoin;\n      this.appliedMiterLimit = prevStack.miterLimit;\n    }\n\n    this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n\n    if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n      this.nativeContext.globalAlpha = currentContext.opacity;\n      this.currentOpacity = currentContext.opacity;\n    }\n\n    this.currentFillStyle = currentContext.fillStyle;\n    this.currentStrokeStyle = currentContext.strokeStyle;\n    this.currentLineWidth = currentContext.lineWidth;\n    this.currentLineCap = currentContext.lineCap;\n    this.currentLineJoin = currentContext.lineJoin;\n    this.currentMiterLimit = currentContext.miterLimit;\n  };\n\n  CVContextData.prototype.save = function (saveOnNativeFlag) {\n    if (saveOnNativeFlag) {\n      this.nativeContext.save();\n    }\n\n    var props = this.cTr.props;\n\n    if (this._length <= this.cArrPos) {\n      this.duplicate();\n    }\n\n    var currentStack = this.stack[this.cArrPos];\n    var i;\n\n    for (i = 0; i < 16; i += 1) {\n      currentStack.transform[i] = props[i];\n    }\n\n    this.cArrPos += 1;\n    var newStack = this.stack[this.cArrPos];\n    newStack.opacity = currentStack.opacity;\n    newStack.fillStyle = currentStack.fillStyle;\n    newStack.strokeStyle = currentStack.strokeStyle;\n    newStack.lineWidth = currentStack.lineWidth;\n    newStack.lineCap = currentStack.lineCap;\n    newStack.lineJoin = currentStack.lineJoin;\n    newStack.miterLimit = currentStack.miterLimit;\n  };\n\n  CVContextData.prototype.setOpacity = function (value) {\n    this.stack[this.cArrPos].opacity = value;\n  };\n\n  CVContextData.prototype.setContext = function (value) {\n    this.nativeContext = value;\n  };\n\n  CVContextData.prototype.fillStyle = function (value) {\n    if (this.stack[this.cArrPos].fillStyle !== value) {\n      this.currentFillStyle = value;\n      this.stack[this.cArrPos].fillStyle = value;\n    }\n  };\n\n  CVContextData.prototype.strokeStyle = function (value) {\n    if (this.stack[this.cArrPos].strokeStyle !== value) {\n      this.currentStrokeStyle = value;\n      this.stack[this.cArrPos].strokeStyle = value;\n    }\n  };\n\n  CVContextData.prototype.lineWidth = function (value) {\n    if (this.stack[this.cArrPos].lineWidth !== value) {\n      this.currentLineWidth = value;\n      this.stack[this.cArrPos].lineWidth = value;\n    }\n  };\n\n  CVContextData.prototype.lineCap = function (value) {\n    if (this.stack[this.cArrPos].lineCap !== value) {\n      this.currentLineCap = value;\n      this.stack[this.cArrPos].lineCap = value;\n    }\n  };\n\n  CVContextData.prototype.lineJoin = function (value) {\n    if (this.stack[this.cArrPos].lineJoin !== value) {\n      this.currentLineJoin = value;\n      this.stack[this.cArrPos].lineJoin = value;\n    }\n  };\n\n  CVContextData.prototype.miterLimit = function (value) {\n    if (this.stack[this.cArrPos].miterLimit !== value) {\n      this.currentMiterLimit = value;\n      this.stack[this.cArrPos].miterLimit = value;\n    }\n  };\n\n  CVContextData.prototype.transform = function (props) {\n    this.transformMat.cloneFromProps(props); // Taking the last transform value from the stored stack of transforms\n\n    var currentTransform = this.cTr; // Applying the last transform value after the new transform to respect the order of transformations\n\n    this.transformMat.multiply(currentTransform); // Storing the new transformed value in the stored transform\n\n    currentTransform.cloneFromProps(this.transformMat.props);\n    var trProps = currentTransform.props; // Applying the new transform to the canvas\n\n    this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n  };\n\n  CVContextData.prototype.opacity = function (op) {\n    var currentOpacity = this.stack[this.cArrPos].opacity;\n    currentOpacity *= op < 0 ? 0 : op;\n\n    if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n      if (this.currentOpacity !== op) {\n        this.nativeContext.globalAlpha = op;\n        this.currentOpacity = op;\n      }\n\n      this.stack[this.cArrPos].opacity = currentOpacity;\n    }\n  };\n\n  CVContextData.prototype.fill = function (rule) {\n    if (this.appliedFillStyle !== this.currentFillStyle) {\n      this.appliedFillStyle = this.currentFillStyle;\n      this.nativeContext.fillStyle = this.appliedFillStyle;\n    }\n\n    this.nativeContext.fill(rule);\n  };\n\n  CVContextData.prototype.fillRect = function (x, y, w, h) {\n    if (this.appliedFillStyle !== this.currentFillStyle) {\n      this.appliedFillStyle = this.currentFillStyle;\n      this.nativeContext.fillStyle = this.appliedFillStyle;\n    }\n\n    this.nativeContext.fillRect(x, y, w, h);\n  };\n\n  CVContextData.prototype.stroke = function () {\n    if (this.appliedStrokeStyle !== this.currentStrokeStyle) {\n      this.appliedStrokeStyle = this.currentStrokeStyle;\n      this.nativeContext.strokeStyle = this.appliedStrokeStyle;\n    }\n\n    if (this.appliedLineWidth !== this.currentLineWidth) {\n      this.appliedLineWidth = this.currentLineWidth;\n      this.nativeContext.lineWidth = this.appliedLineWidth;\n    }\n\n    if (this.appliedLineCap !== this.currentLineCap) {\n      this.appliedLineCap = this.currentLineCap;\n      this.nativeContext.lineCap = this.appliedLineCap;\n    }\n\n    if (this.appliedLineJoin !== this.currentLineJoin) {\n      this.appliedLineJoin = this.currentLineJoin;\n      this.nativeContext.lineJoin = this.appliedLineJoin;\n    }\n\n    if (this.appliedMiterLimit !== this.currentMiterLimit) {\n      this.appliedMiterLimit = this.currentMiterLimit;\n      this.nativeContext.miterLimit = this.appliedMiterLimit;\n    }\n\n    this.nativeContext.stroke();\n  };\n\n  function CVCompElement(data, globalData, comp) {\n    this.completeLayers = false;\n    this.layers = data.layers;\n    this.pendingElements = [];\n    this.elements = createSizedArray(this.layers.length);\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n  CVCompElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext;\n    ctx.beginPath();\n    ctx.moveTo(0, 0);\n    ctx.lineTo(this.data.w, 0);\n    ctx.lineTo(this.data.w, this.data.h);\n    ctx.lineTo(0, this.data.h);\n    ctx.lineTo(0, 0);\n    ctx.clip();\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  CVCompElement.prototype.destroy = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.layers = null;\n    this.elements = null;\n  };\n\n  CVCompElement.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function CanvasRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.renderConfig = {\n      clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n      context: config && config.context || null,\n      progressiveLoad: config && config.progressiveLoad || false,\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      className: config && config.className || '',\n      id: config && config.id || '',\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.renderConfig.dpr = config && config.dpr || 1;\n\n    if (this.animationItem.wrapper) {\n      this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n    }\n\n    this.renderedFrame = -1;\n    this.globalData = {\n      frameNum: -1,\n      _mdf: false,\n      renderConfig: this.renderConfig,\n      currentGlobalAlpha: -1\n    };\n    this.contextData = new CVContextData();\n    this.elements = [];\n    this.pendingElements = [];\n    this.transformMat = new Matrix();\n    this.completeLayers = false;\n    this.rendererType = 'canvas';\n\n    if (this.renderConfig.clearCanvas) {\n      this.ctxTransform = this.contextData.transform.bind(this.contextData);\n      this.ctxOpacity = this.contextData.opacity.bind(this.contextData);\n      this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);\n      this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);\n      this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);\n      this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);\n      this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);\n      this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);\n      this.ctxFill = this.contextData.fill.bind(this.contextData);\n      this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);\n      this.ctxStroke = this.contextData.stroke.bind(this.contextData);\n      this.save = this.contextData.save.bind(this.contextData);\n    }\n  }\n\n  extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n  CanvasRenderer.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function HBaseElement() {}\n\n  HBaseElement.prototype = {\n    checkBlendMode: function checkBlendMode() {},\n    initRendererElement: function initRendererElement() {\n      this.baseElement = createTag(this.data.tg || 'div');\n\n      if (this.data.hasMask) {\n        this.svgElement = createNS('svg');\n        this.layerElement = createNS('g');\n        this.maskedElement = this.layerElement;\n        this.svgElement.appendChild(this.layerElement);\n        this.baseElement.appendChild(this.svgElement);\n      } else {\n        this.layerElement = this.baseElement;\n      }\n\n      styleDiv(this.baseElement);\n    },\n    createContainerElements: function createContainerElements() {\n      this.renderableEffectsManager = new CVEffects(this);\n      this.transformedElement = this.baseElement;\n      this.maskedElement = this.layerElement;\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n      if (this.finalTransform._matMdf) {\n        var matrixValue = this.finalTransform.mat.toCSS();\n        transformedElementStyle.transform = matrixValue;\n        transformedElementStyle.webkitTransform = matrixValue;\n      }\n\n      if (this.finalTransform._opMdf) {\n        transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderFrame: function renderFrame() {\n      // If it is exported as hidden (data.hd === true) no need to render\n      // If it is not visible no need to render\n      if (this.data.hd || this.hidden) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderElement();\n      this.renderInnerContent();\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.layerElement = null;\n      this.transformedElement = null;\n\n      if (this.matteElement) {\n        this.matteElement = null;\n      }\n\n      if (this.maskManager) {\n        this.maskManager.destroy();\n        this.maskManager = null;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n    },\n    addEffects: function addEffects() {},\n    setMatte: function setMatte() {}\n  };\n  HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n  HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n  HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n  function HSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n  HSolidElement.prototype.createContent = function () {\n    var rect;\n\n    if (this.data.hasMask) {\n      rect = createNS('rect');\n      rect.setAttribute('width', this.data.sw);\n      rect.setAttribute('height', this.data.sh);\n      rect.setAttribute('fill', this.data.sc);\n      this.svgElement.setAttribute('width', this.data.sw);\n      this.svgElement.setAttribute('height', this.data.sh);\n    } else {\n      rect = createTag('div');\n      rect.style.width = this.data.sw + 'px';\n      rect.style.height = this.data.sh + 'px';\n      rect.style.backgroundColor = this.data.sc;\n    }\n\n    this.layerElement.appendChild(rect);\n  };\n\n  function HShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.shapesContainer = createNS('g');\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n  HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n  HShapeElement.prototype.createContent = function () {\n    var cont;\n    this.baseElement.style.fontSize = 0;\n\n    if (this.data.hasMask) {\n      this.layerElement.appendChild(this.shapesContainer);\n      cont = this.svgElement;\n    } else {\n      cont = createNS('svg');\n      var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n      cont.setAttribute('width', size.w);\n      cont.setAttribute('height', size.h);\n      cont.appendChild(this.shapesContainer);\n      this.layerElement.appendChild(cont);\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n    this.filterUniqueShapes();\n    this.shapeCont = cont;\n  };\n\n  HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n    var i;\n    var len = transformers.length;\n\n    for (i = 0; i < len; i += 1) {\n      point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n    }\n\n    return point;\n  };\n\n  HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n    var shape = item.sh.v;\n    var transformers = item.transformers;\n    var i;\n    var len = shape._length;\n    var vPoint;\n    var oPoint;\n    var nextIPoint;\n    var nextVPoint;\n\n    if (len <= 1) {\n      return;\n    }\n\n    for (i = 0; i < len - 1; i += 1) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n\n    if (shape.c) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n  };\n\n  HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n    this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n    var bounds = this.shapeBoundingBox;\n    boundingBox.x = bmMin(bounds.left, boundingBox.x);\n    boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n    boundingBox.y = bmMin(bounds.top, boundingBox.y);\n    boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n  };\n\n  HShapeElement.prototype.shapeBoundingBox = {\n    left: 0,\n    right: 0,\n    top: 0,\n    bottom: 0\n  };\n  HShapeElement.prototype.tempBoundingBox = {\n    x: 0,\n    xMax: 0,\n    y: 0,\n    yMax: 0,\n    width: 0,\n    height: 0\n  };\n\n  HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n    var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n    for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n      // eslint-disable-line no-plusplus\n      b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n      a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n      c = 3 * p1[i] - 3 * p0[i];\n      b |= 0; // eslint-disable-line no-bitwise\n\n      a |= 0; // eslint-disable-line no-bitwise\n\n      c |= 0; // eslint-disable-line no-bitwise\n\n      if (a === 0 && b === 0) {//\n      } else if (a === 0) {\n        t = -c / b;\n\n        if (t > 0 && t < 1) {\n          bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n        }\n      } else {\n        b2ac = b * b - 4 * c * a;\n\n        if (b2ac >= 0) {\n          t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n          if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n          t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n          if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n        }\n      }\n    }\n\n    this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n    this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n    this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n    this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n  };\n\n  HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n    return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n  };\n\n  HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n    var i;\n    var len = itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (itemsData[i] && itemsData[i].sh) {\n        this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n      } else if (itemsData[i] && itemsData[i].it) {\n        this.calculateBoundingBox(itemsData[i].it, boundingBox);\n      } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n        this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n      }\n    }\n  };\n\n  HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n    var width = 0;\n\n    if (widthProperty.keyframes) {\n      for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n        var kfw = widthProperty.keyframes[i].s;\n\n        if (kfw > width) {\n          width = kfw;\n        }\n      }\n\n      width *= widthProperty.mult;\n    } else {\n      width = widthProperty.v * widthProperty.mult;\n    }\n\n    boundingBox.x -= width;\n    boundingBox.xMax += width;\n    boundingBox.y -= width;\n    boundingBox.yMax += width;\n  };\n\n  HShapeElement.prototype.currentBoxContains = function (box) {\n    return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n  };\n\n  HShapeElement.prototype.renderInnerContent = function () {\n    this._renderShapeFrame();\n\n    if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n      var tempBoundingBox = this.tempBoundingBox;\n      var max = 999999;\n      tempBoundingBox.x = max;\n      tempBoundingBox.xMax = -max;\n      tempBoundingBox.y = max;\n      tempBoundingBox.yMax = -max;\n      this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n      tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n      tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n      if (this.currentBoxContains(tempBoundingBox)) {\n        return;\n      }\n\n      var changed = false;\n\n      if (this.currentBBox.w !== tempBoundingBox.width) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.shapeCont.setAttribute('width', tempBoundingBox.width);\n        changed = true;\n      }\n\n      if (this.currentBBox.h !== tempBoundingBox.height) {\n        this.currentBBox.h = tempBoundingBox.height;\n        this.shapeCont.setAttribute('height', tempBoundingBox.height);\n        changed = true;\n      }\n\n      if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.currentBBox.h = tempBoundingBox.height;\n        this.currentBBox.x = tempBoundingBox.x;\n        this.currentBBox.y = tempBoundingBox.y;\n        this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        var shapeStyle = this.shapeCont.style;\n        var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        shapeStyle.transform = shapeTransform;\n        shapeStyle.webkitTransform = shapeTransform;\n      }\n    }\n  };\n\n  function HTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.textPaths = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n    this.renderType = 'svg';\n    this.isMasked = false;\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n  HTextElement.prototype.createContent = function () {\n    this.isMasked = this.checkMasks();\n\n    if (this.isMasked) {\n      this.renderType = 'svg';\n      this.compW = this.comp.data.w;\n      this.compH = this.comp.data.h;\n      this.svgElement.setAttribute('width', this.compW);\n      this.svgElement.setAttribute('height', this.compH);\n      var g = createNS('g');\n      this.maskedElement.appendChild(g);\n      this.innerElem = g;\n    } else {\n      this.renderType = 'html';\n      this.innerElem = this.layerElement;\n    }\n\n    this.checkParenting();\n  };\n\n  HTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var innerElemStyle = this.innerElem.style;\n    var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n    innerElemStyle.fill = textColor;\n    innerElemStyle.color = textColor;\n\n    if (documentData.sc) {\n      innerElemStyle.stroke = this.buildColor(documentData.sc);\n      innerElemStyle.strokeWidth = documentData.sw + 'px';\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (!this.globalData.fontManager.chars) {\n      innerElemStyle.fontSize = documentData.finalSize + 'px';\n      innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n      if (fontData.fClass) {\n        this.innerElem.className = fontData.fClass;\n      } else {\n        innerElemStyle.fontFamily = fontData.fFamily;\n        var fWeight = documentData.fWeight;\n        var fStyle = documentData.fStyle;\n        innerElemStyle.fontStyle = fStyle;\n        innerElemStyle.fontWeight = fWeight;\n      }\n    }\n\n    var i;\n    var len;\n    var letters = documentData.l;\n    len = letters.length;\n    var tSpan;\n    var tParent;\n    var tCont;\n    var matrixHelper = this.mHelper;\n    var shapes;\n    var shapeStr = '';\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.globalData.fontManager.chars) {\n        if (!this.textPaths[cnt]) {\n          tSpan = createNS('path');\n          tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n          tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n          tSpan.setAttribute('stroke-miterlimit', '4');\n        } else {\n          tSpan = this.textPaths[cnt];\n        }\n\n        if (!this.isMasked) {\n          if (this.textSpans[cnt]) {\n            tParent = this.textSpans[cnt];\n            tCont = tParent.children[0];\n          } else {\n            tParent = createTag('div');\n            tParent.style.lineHeight = 0;\n            tCont = createNS('svg');\n            tCont.appendChild(tSpan);\n            styleDiv(tParent);\n          }\n        }\n      } else if (!this.isMasked) {\n        if (this.textSpans[cnt]) {\n          tParent = this.textSpans[cnt];\n          tSpan = this.textPaths[cnt];\n        } else {\n          tParent = createTag('span');\n          styleDiv(tParent);\n          tSpan = createTag('span');\n          styleDiv(tSpan);\n          tParent.appendChild(tSpan);\n        }\n      } else {\n        tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n      } // tSpan.setAttribute('visibility', 'hidden');\n\n\n      if (this.globalData.fontManager.chars) {\n        var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n        var shapeData;\n\n        if (charData) {\n          shapeData = charData.data;\n        } else {\n          shapeData = null;\n        }\n\n        matrixHelper.reset();\n\n        if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n          shapes = shapeData.shapes[0].it;\n          matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n          shapeStr = this.createPathShape(matrixHelper, shapes);\n          tSpan.setAttribute('d', shapeStr);\n        }\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent);\n\n          if (shapeData && shapeData.shapes) {\n            // document.body.appendChild is needed to get exact measure of shape\n            document.body.appendChild(tCont);\n            var boundingBox = tCont.getBBox();\n            tCont.setAttribute('width', boundingBox.width + 2);\n            tCont.setAttribute('height', boundingBox.height + 2);\n            tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n            var tContStyle = tCont.style;\n            var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n            tContStyle.transform = tContTranslation;\n            tContStyle.webkitTransform = tContTranslation;\n            letters[i].yOffset = boundingBox.y - 1;\n          } else {\n            tCont.setAttribute('width', 1);\n            tCont.setAttribute('height', 1);\n          }\n\n          tParent.appendChild(tCont);\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } else {\n        tSpan.textContent = letters[i].val;\n        tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent); //\n\n          var tStyle = tSpan.style;\n          var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n          tStyle.transform = tSpanTranslation;\n          tStyle.webkitTransform = tSpanTranslation;\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } //\n\n\n      if (!this.isMasked) {\n        this.textSpans[cnt] = tParent;\n      } else {\n        this.textSpans[cnt] = tSpan;\n      }\n\n      this.textSpans[cnt].style.display = 'block';\n      this.textPaths[cnt] = tSpan;\n      cnt += 1;\n    }\n\n    while (cnt < this.textSpans.length) {\n      this.textSpans[cnt].style.display = 'none';\n      cnt += 1;\n    }\n  };\n\n  HTextElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    var svgStyle;\n\n    if (this.data.singleShape) {\n      if (!this._isFirstFrame && !this.lettersChangedFlag) {\n        return;\n      }\n\n      if (this.isMasked && this.finalTransform._matMdf) {\n        // Todo Benchmark if using this is better than getBBox\n        this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n        svgStyle = this.svgElement.style;\n        var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n        svgStyle.transform = translation;\n        svgStyle.webkitTransform = translation;\n      }\n    }\n\n    this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n    if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n      return;\n    }\n\n    var i;\n    var len;\n    var count = 0;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var textSpan;\n    var textPath;\n\n    for (i = 0; i < len; i += 1) {\n      if (letters[i].n) {\n        count += 1;\n      } else {\n        textSpan = this.textSpans[i];\n        textPath = this.textPaths[i];\n        renderedLetter = renderedLetters[count];\n        count += 1;\n\n        if (renderedLetter._mdf.m) {\n          if (!this.isMasked) {\n            textSpan.style.webkitTransform = renderedLetter.m;\n            textSpan.style.transform = renderedLetter.m;\n          } else {\n            textSpan.setAttribute('transform', renderedLetter.m);\n          }\n        } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n        textSpan.style.opacity = renderedLetter.o;\n\n        if (renderedLetter.sw && renderedLetter._mdf.sw) {\n          textPath.setAttribute('stroke-width', renderedLetter.sw);\n        }\n\n        if (renderedLetter.sc && renderedLetter._mdf.sc) {\n          textPath.setAttribute('stroke', renderedLetter.sc);\n        }\n\n        if (renderedLetter.fc && renderedLetter._mdf.fc) {\n          textPath.setAttribute('fill', renderedLetter.fc);\n          textPath.style.color = renderedLetter.fc;\n        }\n      }\n    }\n\n    if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n      var boundingBox = this.innerElem.getBBox();\n\n      if (this.currentBBox.w !== boundingBox.width) {\n        this.currentBBox.w = boundingBox.width;\n        this.svgElement.setAttribute('width', boundingBox.width);\n      }\n\n      if (this.currentBBox.h !== boundingBox.height) {\n        this.currentBBox.h = boundingBox.height;\n        this.svgElement.setAttribute('height', boundingBox.height);\n      }\n\n      var margin = 1;\n\n      if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n        this.currentBBox.w = boundingBox.width + margin * 2;\n        this.currentBBox.h = boundingBox.height + margin * 2;\n        this.currentBBox.x = boundingBox.x - margin;\n        this.currentBBox.y = boundingBox.y - margin;\n        this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        svgStyle = this.svgElement.style;\n        var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        svgStyle.transform = svgTransform;\n        svgStyle.webkitTransform = svgTransform;\n      }\n    }\n  };\n\n  function HCameraElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initHierarchy();\n    var getProp = PropertyFactory.getProp;\n    this.pe = getProp(this, data.pe, 0, 0, this);\n\n    if (data.ks.p.s) {\n      this.px = getProp(this, data.ks.p.x, 1, 0, this);\n      this.py = getProp(this, data.ks.p.y, 1, 0, this);\n      this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n    } else {\n      this.p = getProp(this, data.ks.p, 1, 0, this);\n    }\n\n    if (data.ks.a) {\n      this.a = getProp(this, data.ks.a, 1, 0, this);\n    }\n\n    if (data.ks.or.k.length && data.ks.or.k[0].to) {\n      var i;\n      var len = data.ks.or.k.length;\n\n      for (i = 0; i < len; i += 1) {\n        data.ks.or.k[i].to = null;\n        data.ks.or.k[i].ti = null;\n      }\n    }\n\n    this.or = getProp(this, data.ks.or, 1, degToRads, this);\n    this.or.sh = true;\n    this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n    this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n    this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n    this.mat = new Matrix();\n    this._prevMat = new Matrix();\n    this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n    this.finalTransform = {\n      mProp: this\n    };\n  }\n\n  extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n  HCameraElement.prototype.setup = function () {\n    var i;\n    var len = this.comp.threeDElements.length;\n    var comp;\n    var perspectiveStyle;\n    var containerStyle;\n\n    for (i = 0; i < len; i += 1) {\n      // [perspectiveElem,container]\n      comp = this.comp.threeDElements[i];\n\n      if (comp.type === '3d') {\n        perspectiveStyle = comp.perspectiveElem.style;\n        containerStyle = comp.container.style;\n        var perspective = this.pe.v + 'px';\n        var origin = '0px 0px 0px';\n        var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n        perspectiveStyle.perspective = perspective;\n        perspectiveStyle.webkitPerspective = perspective;\n        containerStyle.transformOrigin = origin;\n        containerStyle.mozTransformOrigin = origin;\n        containerStyle.webkitTransformOrigin = origin;\n        perspectiveStyle.transform = matrix;\n        perspectiveStyle.webkitTransform = matrix;\n      }\n    }\n  };\n\n  HCameraElement.prototype.createElements = function () {};\n\n  HCameraElement.prototype.hide = function () {};\n\n  HCameraElement.prototype.renderFrame = function () {\n    var _mdf = this._isFirstFrame;\n    var i;\n    var len;\n\n    if (this.hierarchy) {\n      len = this.hierarchy.length;\n\n      for (i = 0; i < len; i += 1) {\n        _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n      }\n    }\n\n    if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n      this.mat.reset();\n\n      if (this.hierarchy) {\n        len = this.hierarchy.length - 1;\n\n        for (i = len; i >= 0; i -= 1) {\n          var mTransf = this.hierarchy[i].finalTransform.mProp;\n          this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n          this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n          this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n          this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n          this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n        }\n      }\n\n      if (this.p) {\n        this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n      } else {\n        this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n      }\n\n      if (this.a) {\n        var diffVector;\n\n        if (this.p) {\n          diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n        } else {\n          diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n        }\n\n        var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n        var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n        var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n        var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n        var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n        this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n      }\n\n      this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n      this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n      this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n      this.mat.translate(0, 0, this.pe.v);\n      var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n      if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n        len = this.comp.threeDElements.length;\n        var comp;\n        var perspectiveStyle;\n        var containerStyle;\n\n        for (i = 0; i < len; i += 1) {\n          comp = this.comp.threeDElements[i];\n\n          if (comp.type === '3d') {\n            if (hasMatrixChanged) {\n              var matValue = this.mat.toCSS();\n              containerStyle = comp.container.style;\n              containerStyle.transform = matValue;\n              containerStyle.webkitTransform = matValue;\n            }\n\n            if (this.pe._mdf) {\n              perspectiveStyle = comp.perspectiveElem.style;\n              perspectiveStyle.perspective = this.pe.v + 'px';\n              perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n            }\n          }\n        }\n\n        this.mat.clone(this._prevMat);\n      }\n    }\n\n    this._isFirstFrame = false;\n  };\n\n  HCameraElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  HCameraElement.prototype.destroy = function () {};\n\n  HCameraElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  function HImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n  HImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    var img = new Image();\n\n    if (this.data.hasMask) {\n      this.imageElem = createNS('image');\n      this.imageElem.setAttribute('width', this.assetData.w + 'px');\n      this.imageElem.setAttribute('height', this.assetData.h + 'px');\n      this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n      this.layerElement.appendChild(this.imageElem);\n      this.baseElement.setAttribute('width', this.assetData.w);\n      this.baseElement.setAttribute('height', this.assetData.h);\n    } else {\n      this.layerElement.appendChild(img);\n    }\n\n    img.crossOrigin = 'anonymous';\n    img.src = assetPath;\n\n    if (this.data.ln) {\n      this.baseElement.setAttribute('id', this.data.ln);\n    }\n  };\n\n  function HybridRendererBase(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      }\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([BaseRenderer], HybridRendererBase);\n  HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n  HybridRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newDOMElement = element.getBaseElement();\n\n    if (!newDOMElement) {\n      return;\n    }\n\n    var layer = this.layers[pos];\n\n    if (!layer.ddd || !this.supports3d) {\n      if (this.threeDElements) {\n        this.addTo3dContainer(newDOMElement, pos);\n      } else {\n        var i = 0;\n        var nextDOMElement;\n        var nextLayer;\n        var tmpDOMElement;\n\n        while (i < pos) {\n          if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n            nextLayer = this.elements[i];\n            tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n            nextDOMElement = tmpDOMElement || nextDOMElement;\n          }\n\n          i += 1;\n        }\n\n        if (nextDOMElement) {\n          if (!layer.ddd || !this.supports3d) {\n            this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n          }\n        } else if (!layer.ddd || !this.supports3d) {\n          this.layerElement.appendChild(newDOMElement);\n        }\n      }\n    } else {\n      this.addTo3dContainer(newDOMElement, pos);\n    }\n  };\n\n  HybridRendererBase.prototype.createShape = function (data) {\n    if (!this.supports3d) {\n      return new SVGShapeElement(data, this.globalData, this);\n    }\n\n    return new HShapeElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createText = function (data) {\n    if (!this.supports3d) {\n      return new SVGTextLottieElement(data, this.globalData, this);\n    }\n\n    return new HTextElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createCamera = function (data) {\n    this.camera = new HCameraElement(data, this.globalData, this);\n    return this.camera;\n  };\n\n  HybridRendererBase.prototype.createImage = function (data) {\n    if (!this.supports3d) {\n      return new IImageElement(data, this.globalData, this);\n    }\n\n    return new HImageElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createSolid = function (data) {\n    if (!this.supports3d) {\n      return new ISolidElement(data, this.globalData, this);\n    }\n\n    return new HSolidElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n        return this.threeDElements[i].perspectiveElem;\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n    var perspectiveElem = createTag('div');\n    var style;\n    var containerStyle;\n    styleDiv(perspectiveElem);\n    var container = createTag('div');\n    styleDiv(container);\n\n    if (type === '3d') {\n      style = perspectiveElem.style;\n      style.width = this.globalData.compSize.w + 'px';\n      style.height = this.globalData.compSize.h + 'px';\n      var center = '50% 50%';\n      style.webkitTransformOrigin = center;\n      style.mozTransformOrigin = center;\n      style.transformOrigin = center;\n      containerStyle = container.style;\n      var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n      containerStyle.transform = matrix;\n      containerStyle.webkitTransform = matrix;\n    }\n\n    perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n    var threeDContainerData = {\n      container: container,\n      perspectiveElem: perspectiveElem,\n      startPos: pos,\n      endPos: pos,\n      type: type\n    };\n    this.threeDElements.push(threeDContainerData);\n    return threeDContainerData;\n  };\n\n  HybridRendererBase.prototype.build3dContainers = function () {\n    var i;\n    var len = this.layers.length;\n    var lastThreeDContainerData;\n    var currentContainer = '';\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n        if (currentContainer !== '3d') {\n          currentContainer = '3d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      } else {\n        if (currentContainer !== '2d') {\n          currentContainer = '2d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      }\n    }\n\n    len = this.threeDElements.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n    }\n  };\n\n  HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (pos <= this.threeDElements[i].endPos) {\n        var j = this.threeDElements[i].startPos;\n        var nextElement;\n\n        while (j < pos) {\n          if (this.elements[j] && this.elements[j].getBaseElement) {\n            nextElement = this.elements[j].getBaseElement();\n          }\n\n          j += 1;\n        }\n\n        if (nextElement) {\n          this.threeDElements[i].container.insertBefore(elem, nextElement);\n        } else {\n          this.threeDElements[i].container.appendChild(elem);\n        }\n\n        break;\n      }\n\n      i += 1;\n    }\n  };\n\n  HybridRendererBase.prototype.configAnimation = function (animData) {\n    var resizerElem = createTag('div');\n    var wrapper = this.animationItem.wrapper;\n    var style = resizerElem.style;\n    style.width = animData.w + 'px';\n    style.height = animData.h + 'px';\n    this.resizerElem = resizerElem;\n    styleDiv(resizerElem);\n    style.transformStyle = 'flat';\n    style.mozTransformStyle = 'flat';\n    style.webkitTransformStyle = 'flat';\n\n    if (this.renderConfig.className) {\n      resizerElem.setAttribute('class', this.renderConfig.className);\n    }\n\n    wrapper.appendChild(resizerElem);\n    style.overflow = 'hidden';\n    var svg = createNS('svg');\n    svg.setAttribute('width', '1');\n    svg.setAttribute('height', '1');\n    styleDiv(svg);\n    this.resizerElem.appendChild(svg);\n    var defs = createNS('defs');\n    svg.appendChild(defs);\n    this.data = animData; // Mask animation\n\n    this.setupGlobalData(animData, svg);\n    this.globalData.defs = defs;\n    this.layers = animData.layers;\n    this.layerElement = this.resizerElem;\n    this.build3dContainers();\n    this.updateContainerSize();\n  };\n\n  HybridRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.animationItem.container = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  HybridRendererBase.prototype.updateContainerSize = function () {\n    var elementWidth = this.animationItem.wrapper.offsetWidth;\n    var elementHeight = this.animationItem.wrapper.offsetHeight;\n    var elementRel = elementWidth / elementHeight;\n    var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n    var sx;\n    var sy;\n    var tx;\n    var ty;\n\n    if (animationRel > elementRel) {\n      sx = elementWidth / this.globalData.compSize.w;\n      sy = elementWidth / this.globalData.compSize.w;\n      tx = 0;\n      ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n    } else {\n      sx = elementHeight / this.globalData.compSize.h;\n      sy = elementHeight / this.globalData.compSize.h;\n      tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n      ty = 0;\n    }\n\n    var style = this.resizerElem.style;\n    style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n    style.transform = style.webkitTransform;\n  };\n\n  HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n  HybridRendererBase.prototype.hide = function () {\n    this.resizerElem.style.display = 'none';\n  };\n\n  HybridRendererBase.prototype.show = function () {\n    this.resizerElem.style.display = 'block';\n  };\n\n  HybridRendererBase.prototype.initItems = function () {\n    this.buildAllItems();\n\n    if (this.camera) {\n      this.camera.setup();\n    } else {\n      var cWidth = this.globalData.compSize.w;\n      var cHeight = this.globalData.compSize.h;\n      var i;\n      var len = this.threeDElements.length;\n\n      for (i = 0; i < len; i += 1) {\n        var style = this.threeDElements[i].perspectiveElem.style;\n        style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n        style.perspective = style.webkitPerspective;\n      }\n    }\n  };\n\n  HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n    var floatingContainer = createTag('div');\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  function HCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = !data.hasMask;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n  HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n  HCompElement.prototype.createContainerElements = function () {\n    this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n    if (this.data.hasMask) {\n      this.svgElement.setAttribute('width', this.data.w);\n      this.svgElement.setAttribute('height', this.data.h);\n      this.transformedElement = this.baseElement;\n    } else {\n      this.transformedElement = this.layerElement;\n    }\n  };\n\n  HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n    var j = 0;\n    var nextElement;\n\n    while (j < pos) {\n      if (this.elements[j] && this.elements[j].getBaseElement) {\n        nextElement = this.elements[j].getBaseElement();\n      }\n\n      j += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(elem, nextElement);\n    } else {\n      this.layerElement.appendChild(elem);\n    }\n  };\n\n  HCompElement.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  function HybridRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      },\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([HybridRendererBase], HybridRenderer);\n\n  HybridRenderer.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  var CompExpressionInterface = function () {\n    return function (comp) {\n      function _thisLayerFunction(name) {\n        var i = 0;\n        var len = comp.layers.length;\n\n        while (i < len) {\n          if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n            return comp.elements[i].layerInterface;\n          }\n\n          i += 1;\n        }\n\n        return null; // return {active:false};\n      }\n\n      Object.defineProperty(_thisLayerFunction, '_name', {\n        value: comp.data.nm\n      });\n      _thisLayerFunction.layer = _thisLayerFunction;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n      _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n      _thisLayerFunction.displayStartTime = 0;\n      _thisLayerFunction.numLayers = comp.layers.length;\n      return _thisLayerFunction;\n    };\n  }();\n\n  function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n  /* eslint-disable */\n\n  /*\r\n   Copyright 2014 David Bau.\r\n\r\n   Permission is hereby granted, free of charge, to any person obtaining\r\n   a copy of this software and associated documentation files (the\r\n   \"Software\"), to deal in the Software without restriction, including\r\n   without limitation the rights to use, copy, modify, merge, publish,\r\n   distribute, sublicense, and/or sell copies of the Software, and to\r\n   permit persons to whom the Software is furnished to do so, subject to\r\n   the following conditions:\r\n\r\n   The above copyright notice and this permission notice shall be\r\n   included in all copies or substantial portions of the Software.\r\n\r\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n   */\n  function seedRandom(pool, math) {\n    //\n    // The following constants are related to IEEE 754 limits.\n    //\n    var global = this,\n        width = 256,\n        // each RC4 output is 0 <= x < 256\n    chunks = 6,\n        // at least six RC4 outputs for each double\n    digits = 52,\n        // there are 52 significant digits in a double\n    rngname = 'random',\n        // rngname: name for Math.random and Math.seedrandom\n    startdenom = math.pow(width, chunks),\n        significance = math.pow(2, digits),\n        overflow = significance * 2,\n        mask = width - 1,\n        nodecrypto; // node.js crypto module, initialized at the bottom.\n    //\n    // seedrandom()\n    // This is the seedrandom function described above.\n    //\n\n    function seedrandom(seed, options, callback) {\n      var key = [];\n      options = options === true ? {\n        entropy: true\n      } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n      var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n      var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n      // randomness in every bit of the mantissa of the IEEE 754 value.\n\n      var prng = function prng() {\n        var n = arc4.g(chunks),\n            // Start with a numerator n < 2 ^ 48\n        d = startdenom,\n            //   and denominator d = 2 ^ 48.\n        x = 0; //   and no 'extra last byte'.\n\n        while (n < significance) {\n          // Fill up all significant digits by\n          n = (n + x) * width; //   shifting numerator and\n\n          d *= width; //   denominator and generating a\n\n          x = arc4.g(1); //   new least-significant-byte.\n        }\n\n        while (n >= overflow) {\n          // To avoid rounding up, before adding\n          n /= 2; //   last byte, shift everything\n\n          d /= 2; //   right using integer math until\n\n          x >>>= 1; //   we have exactly the desired bits.\n        }\n\n        return (n + x) / d; // Form the number within [0, 1).\n      };\n\n      prng.int32 = function () {\n        return arc4.g(4) | 0;\n      };\n\n      prng.quick = function () {\n        return arc4.g(4) / 0x100000000;\n      };\n\n      prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n      mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n      return (options.pass || callback || function (prng, seed, is_math_call, state) {\n        if (state) {\n          // Load the arc4 state from the given state if it has an S array.\n          if (state.S) {\n            copy(state, arc4);\n          } // Only provide the .state method if requested via options.state.\n\n\n          prng.state = function () {\n            return copy(arc4, {});\n          };\n        } // If called as a method of Math (Math.seedrandom()), mutate\n        // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n        if (is_math_call) {\n          math[rngname] = prng;\n          return seed;\n        } // Otherwise, it is a newer calling convention, so return the\n        // prng directly.\n        else return prng;\n      })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n    }\n\n    math['seed' + rngname] = seedrandom; //\n    // ARC4\n    //\n    // An ARC4 implementation.  The constructor takes a key in the form of\n    // an array of at most (width) integers that should be 0 <= x < (width).\n    //\n    // The g(count) method returns a pseudorandom integer that concatenates\n    // the next (count) outputs from ARC4.  Its return value is a number x\n    // that is in the range 0 <= x < (width ^ count).\n    //\n\n    function ARC4(key) {\n      var t,\n          keylen = key.length,\n          me = this,\n          i = 0,\n          j = me.i = me.j = 0,\n          s = me.S = []; // The empty key [] is treated as [0].\n\n      if (!keylen) {\n        key = [keylen++];\n      } // Set up S using the standard key scheduling algorithm.\n\n\n      while (i < width) {\n        s[i] = i++;\n      }\n\n      for (i = 0; i < width; i++) {\n        s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n        s[j] = t;\n      } // The \"g\" method returns the next (count) outputs as one number.\n\n\n      me.g = function (count) {\n        // Using instance members instead of closure state nearly doubles speed.\n        var t,\n            r = 0,\n            i = me.i,\n            j = me.j,\n            s = me.S;\n\n        while (count--) {\n          t = s[i = mask & i + 1];\n          r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n        }\n\n        me.i = i;\n        me.j = j;\n        return r; // For robust unpredictability, the function call below automatically\n        // discards an initial batch of values.  This is called RC4-drop[256].\n        // See http://google.com/search?q=rsa+fluhrer+response&btnI\n      };\n    } //\n    // copy()\n    // Copies internal state of ARC4 to or from a plain object.\n    //\n\n\n    function copy(f, t) {\n      t.i = f.i;\n      t.j = f.j;\n      t.S = f.S.slice();\n      return t;\n    } //\n    // flatten()\n    // Converts an object tree to nested arrays of strings.\n    //\n\n\n    function flatten(obj, depth) {\n      var result = [],\n          typ = _typeof$2(obj),\n          prop;\n\n      if (depth && typ == 'object') {\n        for (prop in obj) {\n          try {\n            result.push(flatten(obj[prop], depth - 1));\n          } catch (e) {}\n        }\n      }\n\n      return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n    } //\n    // mixkey()\n    // Mixes a string seed into a key that is an array of integers, and\n    // returns a shortened string seed that is equivalent to the result key.\n    //\n\n\n    function mixkey(seed, key) {\n      var stringseed = seed + '',\n          smear,\n          j = 0;\n\n      while (j < stringseed.length) {\n        key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n      }\n\n      return tostring(key);\n    } //\n    // autoseed()\n    // Returns an object for autoseeding, using window.crypto and Node crypto\n    // module if available.\n    //\n\n\n    function autoseed() {\n      try {\n        if (nodecrypto) {\n          return tostring(nodecrypto.randomBytes(width));\n        }\n\n        var out = new Uint8Array(width);\n        (global.crypto || global.msCrypto).getRandomValues(out);\n        return tostring(out);\n      } catch (e) {\n        var browser = global.navigator,\n            plugins = browser && browser.plugins;\n        return [+new Date(), global, plugins, global.screen, tostring(pool)];\n      }\n    } //\n    // tostring()\n    // Converts an array of charcodes to a string\n    //\n\n\n    function tostring(a) {\n      return String.fromCharCode.apply(0, a);\n    } //\n    // When seedrandom.js is loaded, we immediately mix a few bits\n    // from the built-in RNG into the entropy pool.  Because we do\n    // not want to interfere with deterministic PRNG state later,\n    // seedrandom will not call math.random on its own again after\n    // initialization.\n    //\n\n\n    mixkey(math.random(), pool); //\n    // Nodejs and AMD support: export the implementation as a module using\n    // either convention.\n    //\n    // End anonymous scope, and pass initial values.\n  }\n\n  ;\n\n  function initialize$2(BMMath) {\n    seedRandom([], BMMath);\n  }\n\n  var propTypes = {\n    SHAPE: 'shape'\n  };\n\n  function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n  var ExpressionManager = function () {\n    'use strict';\n\n    var ob = {};\n    var Math = BMMath;\n    var window = null;\n    var document = null;\n    var XMLHttpRequest = null;\n    var fetch = null;\n    var frames = null;\n    var _lottieGlobal = {};\n    initialize$2(BMMath);\n\n    function resetFrame() {\n      _lottieGlobal = {};\n    }\n\n    function $bm_isInstanceOfArray(arr) {\n      return arr.constructor === Array || arr.constructor === Float32Array;\n    }\n\n    function isNumerable(tOfV, v) {\n      return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n    }\n\n    function $bm_neg(a) {\n      var tOfA = _typeof$1(a);\n\n      if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\n        return -a;\n      }\n\n      if ($bm_isInstanceOfArray(a)) {\n        var i;\n        var lenA = a.length;\n        var retArr = [];\n\n        for (i = 0; i < lenA; i += 1) {\n          retArr[i] = -a[i];\n        }\n\n        return retArr;\n      }\n\n      if (a.propType) {\n        return a.v;\n      }\n\n      return -a;\n    }\n\n    var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n    var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n    var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n    function sum(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\n        return a + b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] += b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a + b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] + b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    var add = sum;\n\n    function sub(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        if (tOfA === 'string') {\n          a = parseInt(a, 10);\n        }\n\n        if (tOfB === 'string') {\n          b = parseInt(b, 10);\n        }\n\n        return a - b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] -= b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a - b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] - b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    function mul(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a * b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] * b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a * b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function div(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a / b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] / b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a / b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function mod(a, b) {\n      if (typeof a === 'string') {\n        a = parseInt(a, 10);\n      }\n\n      if (typeof b === 'string') {\n        b = parseInt(b, 10);\n      }\n\n      return a % b;\n    }\n\n    var $bm_sum = sum;\n    var $bm_sub = sub;\n    var $bm_mul = mul;\n    var $bm_div = div;\n    var $bm_mod = mod;\n\n    function clamp(num, min, max) {\n      if (min > max) {\n        var mm = max;\n        max = min;\n        min = mm;\n      }\n\n      return Math.min(Math.max(num, min), max);\n    }\n\n    function radiansToDegrees(val) {\n      return val / degToRads;\n    }\n\n    var radians_to_degrees = radiansToDegrees;\n\n    function degreesToRadians(val) {\n      return val * degToRads;\n    }\n\n    var degrees_to_radians = radiansToDegrees;\n    var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n    function length(arr1, arr2) {\n      if (typeof arr1 === 'number' || arr1 instanceof Number) {\n        arr2 = arr2 || 0;\n        return Math.abs(arr1 - arr2);\n      }\n\n      if (!arr2) {\n        arr2 = helperLengthArray;\n      }\n\n      var i;\n      var len = Math.min(arr1.length, arr2.length);\n      var addedLength = 0;\n\n      for (i = 0; i < len; i += 1) {\n        addedLength += Math.pow(arr2[i] - arr1[i], 2);\n      }\n\n      return Math.sqrt(addedLength);\n    }\n\n    function normalize(vec) {\n      return div(vec, length(vec));\n    }\n\n    function rgbToHsl(val) {\n      var r = val[0];\n      var g = val[1];\n      var b = val[2];\n      var max = Math.max(r, g, b);\n      var min = Math.min(r, g, b);\n      var h;\n      var s;\n      var l = (max + min) / 2;\n\n      if (max === min) {\n        h = 0; // achromatic\n\n        s = 0; // achromatic\n      } else {\n        var d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n        switch (max) {\n          case r:\n            h = (g - b) / d + (g < b ? 6 : 0);\n            break;\n\n          case g:\n            h = (b - r) / d + 2;\n            break;\n\n          case b:\n            h = (r - g) / d + 4;\n            break;\n\n          default:\n            break;\n        }\n\n        h /= 6;\n      }\n\n      return [h, s, l, val[3]];\n    }\n\n    function hue2rgb(p, q, t) {\n      if (t < 0) t += 1;\n      if (t > 1) t -= 1;\n      if (t < 1 / 6) return p + (q - p) * 6 * t;\n      if (t < 1 / 2) return q;\n      if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n      return p;\n    }\n\n    function hslToRgb(val) {\n      var h = val[0];\n      var s = val[1];\n      var l = val[2];\n      var r;\n      var g;\n      var b;\n\n      if (s === 0) {\n        r = l; // achromatic\n\n        b = l; // achromatic\n\n        g = l; // achromatic\n      } else {\n        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        var p = 2 * l - q;\n        r = hue2rgb(p, q, h + 1 / 3);\n        g = hue2rgb(p, q, h);\n        b = hue2rgb(p, q, h - 1 / 3);\n      }\n\n      return [r, g, b, val[3]];\n    }\n\n    function linear(t, tMin, tMax, value1, value2) {\n      if (value1 === undefined || value2 === undefined) {\n        value1 = tMin;\n        value2 = tMax;\n        tMin = 0;\n        tMax = 1;\n      }\n\n      if (tMax < tMin) {\n        var _tMin = tMax;\n        tMax = tMin;\n        tMin = _tMin;\n      }\n\n      if (t <= tMin) {\n        return value1;\n      }\n\n      if (t >= tMax) {\n        return value2;\n      }\n\n      var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n      if (!value1.length) {\n        return value1 + (value2 - value1) * perc;\n      }\n\n      var i;\n      var len = value1.length;\n      var arr = createTypedArray('float32', len);\n\n      for (i = 0; i < len; i += 1) {\n        arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n      }\n\n      return arr;\n    }\n\n    function random(min, max) {\n      if (max === undefined) {\n        if (min === undefined) {\n          min = 0;\n          max = 1;\n        } else {\n          max = min;\n          min = undefined;\n        }\n      }\n\n      if (max.length) {\n        var i;\n        var len = max.length;\n\n        if (!min) {\n          min = createTypedArray('float32', len);\n        }\n\n        var arr = createTypedArray('float32', len);\n        var rnd = BMMath.random();\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = min[i] + rnd * (max[i] - min[i]);\n        }\n\n        return arr;\n      }\n\n      if (min === undefined) {\n        min = 0;\n      }\n\n      var rndm = BMMath.random();\n      return min + rndm * (max - min);\n    }\n\n    function createPath(points, inTangents, outTangents, closed) {\n      var i;\n      var len = points.length;\n      var path = shapePool.newElement();\n      path.setPathData(!!closed, len);\n      var arrPlaceholder = [0, 0];\n      var inVertexPoint;\n      var outVertexPoint;\n\n      for (i = 0; i < len; i += 1) {\n        inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n        outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n        path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n      }\n\n      return path;\n    }\n\n    function initiateExpression(elem, data, property) {\n      // Bail out if we don't want expressions\n      function noOp(_value) {\n        return _value;\n      }\n\n      if (!elem.globalData.renderConfig.runExpressions) {\n        return noOp;\n      }\n\n      var val = data.x;\n      var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n      var _needsRandom = val.indexOf('random') !== -1;\n\n      var elemType = elem.data.ty;\n      var transform;\n      var $bm_transform;\n      var content;\n      var effect;\n      var thisProperty = property;\n      thisProperty.valueAtTime = thisProperty.getValueAtTime;\n      Object.defineProperty(thisProperty, 'value', {\n        get: function get() {\n          return thisProperty.v;\n        }\n      });\n      elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n      elem.comp.displayStartTime = 0;\n      var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      var width = elem.data.sw ? elem.data.sw : 0;\n      var height = elem.data.sh ? elem.data.sh : 0;\n      var name = elem.data.nm;\n      var loopIn;\n      var loop_in;\n      var loopOut;\n      var loop_out;\n      var smooth;\n      var toWorld;\n      var fromWorld;\n      var fromComp;\n      var toComp;\n      var fromCompToSurface;\n      var position;\n      var rotation;\n      var anchorPoint;\n      var scale;\n      var thisLayer;\n      var thisComp;\n      var mask;\n      var valueAtTime;\n      var velocityAtTime;\n      var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n      var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n      var numKeys = property.kf ? data.k.length : 0;\n      var active = !this.data || this.data.hd !== true;\n\n      var wiggle = function wiggle(freq, amp) {\n        var iWiggle;\n        var j;\n        var lenWiggle = this.pv.length ? this.pv.length : 1;\n        var addedAmps = createTypedArray('float32', lenWiggle);\n        freq = 5;\n        var iterations = Math.floor(time * freq);\n        iWiggle = 0;\n        j = 0;\n\n        while (iWiggle < iterations) {\n          // var rnd = BMMath.random();\n          for (j = 0; j < lenWiggle; j += 1) {\n            addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n          }\n\n          iWiggle += 1;\n        } // var rnd2 = BMMath.random();\n\n\n        var periods = time * freq;\n        var perc = periods - Math.floor(periods);\n        var arr = createTypedArray('float32', lenWiggle);\n\n        if (lenWiggle > 1) {\n          for (j = 0; j < lenWiggle; j += 1) {\n            arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n            // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n          }\n\n          return arr;\n        }\n\n        return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n      }.bind(this);\n\n      if (thisProperty.loopIn) {\n        loopIn = thisProperty.loopIn.bind(thisProperty);\n        loop_in = loopIn;\n      }\n\n      if (thisProperty.loopOut) {\n        loopOut = thisProperty.loopOut.bind(thisProperty);\n        loop_out = loopOut;\n      }\n\n      if (thisProperty.smooth) {\n        smooth = thisProperty.smooth.bind(thisProperty);\n      }\n\n      function loopInDuration(type, duration) {\n        return loopIn(type, duration, true);\n      }\n\n      function loopOutDuration(type, duration) {\n        return loopOut(type, duration, true);\n      }\n\n      if (this.getValueAtTime) {\n        valueAtTime = this.getValueAtTime.bind(this);\n      }\n\n      if (this.getVelocityAtTime) {\n        velocityAtTime = this.getVelocityAtTime.bind(this);\n      }\n\n      var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n      function lookAt(elem1, elem2) {\n        var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n        var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n        var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n        return [yaw, pitch, 0];\n      }\n\n      function easeOut(t, tMin, tMax, val1, val2) {\n        return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function easeIn(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n      }\n\n      function ease(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function applyEase(fn, t, tMin, tMax, val1, val2) {\n        if (val1 === undefined) {\n          val1 = tMin;\n          val2 = tMax;\n        } else {\n          t = (t - tMin) / (tMax - tMin);\n        }\n\n        if (t > 1) {\n          t = 1;\n        } else if (t < 0) {\n          t = 0;\n        }\n\n        var mult = fn(t);\n\n        if ($bm_isInstanceOfArray(val1)) {\n          var iKey;\n          var lenKey = val1.length;\n          var arr = createTypedArray('float32', lenKey);\n\n          for (iKey = 0; iKey < lenKey; iKey += 1) {\n            arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n          }\n\n          return arr;\n        }\n\n        return (val2 - val1) * mult + val1;\n      }\n\n      function nearestKey(time) {\n        var iKey;\n        var lenKey = data.k.length;\n        var index;\n        var keyTime;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          index = 0;\n          keyTime = 0;\n        } else {\n          index = -1;\n          time *= elem.comp.globalData.frameRate;\n\n          if (time < data.k[0].t) {\n            index = 1;\n            keyTime = data.k[0].t;\n          } else {\n            for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n              if (time === data.k[iKey].t) {\n                index = iKey + 1;\n                keyTime = data.k[iKey].t;\n                break;\n              } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n                if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n                  index = iKey + 2;\n                  keyTime = data.k[iKey + 1].t;\n                } else {\n                  index = iKey + 1;\n                  keyTime = data.k[iKey].t;\n                }\n\n                break;\n              }\n            }\n\n            if (index === -1) {\n              index = iKey + 1;\n              keyTime = data.k[iKey].t;\n            }\n          }\n        }\n\n        var obKey = {};\n        obKey.index = index;\n        obKey.time = keyTime / elem.comp.globalData.frameRate;\n        return obKey;\n      }\n\n      function key(ind) {\n        var obKey;\n        var iKey;\n        var lenKey;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          throw new Error('The property has no keyframe at index ' + ind);\n        }\n\n        ind -= 1;\n        obKey = {\n          time: data.k[ind].t / elem.comp.globalData.frameRate,\n          value: []\n        };\n        var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n        lenKey = arr.length;\n\n        for (iKey = 0; iKey < lenKey; iKey += 1) {\n          obKey[iKey] = arr[iKey];\n          obKey.value[iKey] = arr[iKey];\n        }\n\n        return obKey;\n      }\n\n      function framesToTime(fr, fps) {\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return fr / fps;\n      }\n\n      function timeToFrames(t, fps) {\n        if (!t && t !== 0) {\n          t = time;\n        }\n\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return t * fps;\n      }\n\n      function seedRandom(seed) {\n        BMMath.seedrandom(randSeed + seed);\n      }\n\n      function sourceRectAtTime() {\n        return elem.sourceRectAtTime();\n      }\n\n      function substring(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substring(init);\n          }\n\n          return value.substring(init, end);\n        }\n\n        return '';\n      }\n\n      function substr(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substr(init);\n          }\n\n          return value.substr(init, end);\n        }\n\n        return '';\n      }\n\n      function posterizeTime(framesPerSecond) {\n        time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n        value = valueAtTime(time);\n      }\n\n      var time;\n      var velocity;\n      var value;\n      var text;\n      var textIndex;\n      var textTotal;\n      var selectorValue;\n      var index = elem.data.ind;\n      var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n      var parent;\n      var randSeed = Math.floor(Math.random() * 1000000);\n      var globalData = elem.globalData;\n\n      function executeExpression(_value) {\n        // globalData.pushExpression();\n        value = _value;\n\n        if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n          return value;\n        }\n\n        if (this.propType === 'textSelector') {\n          textIndex = this.textIndex;\n          textTotal = this.textTotal;\n          selectorValue = this.selectorValue;\n        }\n\n        if (!thisLayer) {\n          text = elem.layerInterface.text;\n          thisLayer = elem.layerInterface;\n          thisComp = elem.comp.compInterface;\n          toWorld = thisLayer.toWorld.bind(thisLayer);\n          fromWorld = thisLayer.fromWorld.bind(thisLayer);\n          fromComp = thisLayer.fromComp.bind(thisLayer);\n          toComp = thisLayer.toComp.bind(thisLayer);\n          mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n          fromCompToSurface = fromComp;\n        }\n\n        if (!transform) {\n          transform = elem.layerInterface('ADBE Transform Group');\n          $bm_transform = transform;\n\n          if (transform) {\n            anchorPoint = transform.anchorPoint;\n            /* position = transform.position;\r\n                      rotation = transform.rotation;\r\n                      scale = transform.scale; */\n          }\n        }\n\n        if (elemType === 4 && !content) {\n          content = thisLayer('ADBE Root Vectors Group');\n        }\n\n        if (!effect) {\n          effect = thisLayer(4);\n        }\n\n        hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n        if (hasParent && !parent) {\n          parent = elem.hierarchy[0].layerInterface;\n        }\n\n        time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n        if (_needsRandom) {\n          seedRandom(randSeed + time);\n        }\n\n        if (needsVelocity) {\n          velocity = velocityAtTime(time);\n        }\n\n        expression_function();\n        this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n        // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n        scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n        return scoped_bm_rt;\n      } // Bundlers will see these as dead code and unless we reference them\n\n\n      executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n      return executeExpression;\n    }\n\n    ob.initiateExpression = initiateExpression;\n    ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal];\n    ob.resetFrame = resetFrame;\n    return ob;\n  }();\n\n  var Expressions = function () {\n    var ob = {};\n    ob.initExpressions = initExpressions;\n    ob.resetFrame = ExpressionManager.resetFrame;\n\n    function initExpressions(animation) {\n      var stackCount = 0;\n      var registers = [];\n\n      function pushExpression() {\n        stackCount += 1;\n      }\n\n      function popExpression() {\n        stackCount -= 1;\n\n        if (stackCount === 0) {\n          releaseInstances();\n        }\n      }\n\n      function registerExpressionProperty(expression) {\n        if (registers.indexOf(expression) === -1) {\n          registers.push(expression);\n        }\n      }\n\n      function releaseInstances() {\n        var i;\n        var len = registers.length;\n\n        for (i = 0; i < len; i += 1) {\n          registers[i].release();\n        }\n\n        registers.length = 0;\n      }\n\n      animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n      animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n      animation.renderer.globalData.pushExpression = pushExpression;\n      animation.renderer.globalData.popExpression = popExpression;\n      animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n    }\n\n    return ob;\n  }();\n\n  var MaskManagerInterface = function () {\n    function MaskInterface(mask, data) {\n      this._mask = mask;\n      this._data = data;\n    }\n\n    Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n      get: function get() {\n        if (this._mask.prop.k) {\n          this._mask.prop.getValue();\n        }\n\n        return this._mask.prop;\n      }\n    });\n    Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n      get: function get() {\n        if (this._mask.op.k) {\n          this._mask.op.getValue();\n        }\n\n        return this._mask.op.v * 100;\n      }\n    });\n\n    var MaskManager = function MaskManager(maskManager) {\n      var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n      var i;\n      var len = maskManager.viewData.length;\n\n      for (i = 0; i < len; i += 1) {\n        _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n      }\n\n      var maskFunction = function maskFunction(name) {\n        i = 0;\n\n        while (i < len) {\n          if (maskManager.masksProperties[i].nm === name) {\n            return _masksInterfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      };\n\n      return maskFunction;\n    };\n\n    return MaskManager;\n  }();\n\n  var ExpressionPropertyInterface = function () {\n    var defaultUnidimensionalValue = {\n      pv: 0,\n      v: 0,\n      mult: 1\n    };\n    var defaultMultidimensionalValue = {\n      pv: [0, 0, 0],\n      v: [0, 0, 0],\n      mult: 1\n    };\n\n    function completeProperty(expressionValue, property, type) {\n      Object.defineProperty(expressionValue, 'velocity', {\n        get: function get() {\n          return property.getVelocityAtTime(property.comp.currentFrame);\n        }\n      });\n      expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n      expressionValue.key = function (pos) {\n        if (!expressionValue.numKeys) {\n          return 0;\n        }\n\n        var value = '';\n\n        if ('s' in property.keyframes[pos - 1]) {\n          value = property.keyframes[pos - 1].s;\n        } else if ('e' in property.keyframes[pos - 2]) {\n          value = property.keyframes[pos - 2].e;\n        } else {\n          value = property.keyframes[pos - 2].s;\n        }\n\n        var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n        valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n        valueProp.value = type === 'unidimensional' ? value[0] : value;\n        return valueProp;\n      };\n\n      expressionValue.valueAtTime = property.getValueAtTime;\n      expressionValue.speedAtTime = property.getSpeedAtTime;\n      expressionValue.velocityAtTime = property.getVelocityAtTime;\n      expressionValue.propertyGroup = property.propertyGroup;\n    }\n\n    function UnidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultUnidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var val = property.pv * mult;\n      var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n      expressionValue.value = val;\n      completeProperty(expressionValue, property, 'unidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        val = property.v * mult;\n\n        if (expressionValue.value !== val) {\n          expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n          expressionValue.value = val;\n          completeProperty(expressionValue, property, 'unidimensional');\n        }\n\n        return expressionValue;\n      };\n    }\n\n    function MultidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultMultidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var len = property.data && property.data.l || property.pv.length;\n      var expressionValue = createTypedArray('float32', len);\n      var arrValue = createTypedArray('float32', len);\n      expressionValue.value = arrValue;\n      completeProperty(expressionValue, property, 'multidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        for (var i = 0; i < len; i += 1) {\n          arrValue[i] = property.v[i] * mult;\n          expressionValue[i] = arrValue[i];\n        }\n\n        return expressionValue;\n      };\n    } // TODO: try to avoid using this getter\n\n\n    function defaultGetter() {\n      return defaultUnidimensionalValue;\n    }\n\n    return function (property) {\n      if (!property) {\n        return defaultGetter;\n      }\n\n      if (property.propType === 'unidimensional') {\n        return UnidimensionalPropertyInterface(property);\n      }\n\n      return MultidimensionalPropertyInterface(property);\n    };\n  }();\n\n  var TransformExpressionInterface = function () {\n    return function (transform) {\n      function _thisFunction(name) {\n        switch (name) {\n          case 'scale':\n          case 'Scale':\n          case 'ADBE Scale':\n          case 6:\n            return _thisFunction.scale;\n\n          case 'rotation':\n          case 'Rotation':\n          case 'ADBE Rotation':\n          case 'ADBE Rotate Z':\n          case 10:\n            return _thisFunction.rotation;\n\n          case 'ADBE Rotate X':\n            return _thisFunction.xRotation;\n\n          case 'ADBE Rotate Y':\n            return _thisFunction.yRotation;\n\n          case 'position':\n          case 'Position':\n          case 'ADBE Position':\n          case 2:\n            return _thisFunction.position;\n\n          case 'ADBE Position_0':\n            return _thisFunction.xPosition;\n\n          case 'ADBE Position_1':\n            return _thisFunction.yPosition;\n\n          case 'ADBE Position_2':\n            return _thisFunction.zPosition;\n\n          case 'anchorPoint':\n          case 'AnchorPoint':\n          case 'Anchor Point':\n          case 'ADBE AnchorPoint':\n          case 1:\n            return _thisFunction.anchorPoint;\n\n          case 'opacity':\n          case 'Opacity':\n          case 11:\n            return _thisFunction.opacity;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'rotation', {\n        get: ExpressionPropertyInterface(transform.r || transform.rz)\n      });\n      Object.defineProperty(_thisFunction, 'zRotation', {\n        get: ExpressionPropertyInterface(transform.rz || transform.r)\n      });\n      Object.defineProperty(_thisFunction, 'xRotation', {\n        get: ExpressionPropertyInterface(transform.rx)\n      });\n      Object.defineProperty(_thisFunction, 'yRotation', {\n        get: ExpressionPropertyInterface(transform.ry)\n      });\n      Object.defineProperty(_thisFunction, 'scale', {\n        get: ExpressionPropertyInterface(transform.s)\n      });\n\n      var _px;\n\n      var _py;\n\n      var _pz;\n\n      var _transformFactory;\n\n      if (transform.p) {\n        _transformFactory = ExpressionPropertyInterface(transform.p);\n      } else {\n        _px = ExpressionPropertyInterface(transform.px);\n        _py = ExpressionPropertyInterface(transform.py);\n\n        if (transform.pz) {\n          _pz = ExpressionPropertyInterface(transform.pz);\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'position', {\n        get: function get() {\n          if (transform.p) {\n            return _transformFactory();\n          }\n\n          return [_px(), _py(), _pz ? _pz() : 0];\n        }\n      });\n      Object.defineProperty(_thisFunction, 'xPosition', {\n        get: ExpressionPropertyInterface(transform.px)\n      });\n      Object.defineProperty(_thisFunction, 'yPosition', {\n        get: ExpressionPropertyInterface(transform.py)\n      });\n      Object.defineProperty(_thisFunction, 'zPosition', {\n        get: ExpressionPropertyInterface(transform.pz)\n      });\n      Object.defineProperty(_thisFunction, 'anchorPoint', {\n        get: ExpressionPropertyInterface(transform.a)\n      });\n      Object.defineProperty(_thisFunction, 'opacity', {\n        get: ExpressionPropertyInterface(transform.o)\n      });\n      Object.defineProperty(_thisFunction, 'skew', {\n        get: ExpressionPropertyInterface(transform.sk)\n      });\n      Object.defineProperty(_thisFunction, 'skewAxis', {\n        get: ExpressionPropertyInterface(transform.sa)\n      });\n      Object.defineProperty(_thisFunction, 'orientation', {\n        get: ExpressionPropertyInterface(transform.or)\n      });\n      return _thisFunction;\n    };\n  }();\n\n  var LayerExpressionInterface = function () {\n    function getMatrix(time) {\n      var toWorldMat = new Matrix();\n\n      if (time !== undefined) {\n        var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n        propMatrix.clone(toWorldMat);\n      } else {\n        var transformMat = this._elem.finalTransform.mProp;\n        transformMat.applyToMatrix(toWorldMat);\n      }\n\n      return toWorldMat;\n    }\n\n    function toWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function toWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function fromWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function fromWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function applyPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n    }\n\n    function invertPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.inversePoint(arr);\n    }\n\n    function fromComp(arr) {\n      var toWorldMat = new Matrix();\n      toWorldMat.reset();\n\n      this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n        }\n\n        return toWorldMat.inversePoint(arr);\n      }\n\n      return toWorldMat.inversePoint(arr);\n    }\n\n    function sampleImage() {\n      return [1, 1, 1, 1];\n    }\n\n    return function (elem) {\n      var transformInterface;\n\n      function _registerMaskInterface(maskManager) {\n        _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n      }\n\n      function _registerEffectsInterface(effects) {\n        _thisLayerFunction.effect = effects;\n      }\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Root Vectors Group':\n          case 'Contents':\n          case 2:\n            return _thisLayerFunction.shapeInterface;\n\n          case 1:\n          case 6:\n          case 'Transform':\n          case 'transform':\n          case 'ADBE Transform Group':\n            return transformInterface;\n\n          case 4:\n          case 'ADBE Effect Parade':\n          case 'effects':\n          case 'Effects':\n            return _thisLayerFunction.effect;\n\n          case 'ADBE Text Properties':\n            return _thisLayerFunction.textInterface;\n\n          default:\n            return null;\n        }\n      }\n\n      _thisLayerFunction.getMatrix = getMatrix;\n      _thisLayerFunction.invertPoint = invertPoint;\n      _thisLayerFunction.applyPoint = applyPoint;\n      _thisLayerFunction.toWorld = toWorld;\n      _thisLayerFunction.toWorldVec = toWorldVec;\n      _thisLayerFunction.fromWorld = fromWorld;\n      _thisLayerFunction.fromWorldVec = fromWorldVec;\n      _thisLayerFunction.toComp = toWorld;\n      _thisLayerFunction.fromComp = fromComp;\n      _thisLayerFunction.sampleImage = sampleImage;\n      _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n      _thisLayerFunction._elem = elem;\n      transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n      var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n      Object.defineProperties(_thisLayerFunction, {\n        hasParent: {\n          get: function get() {\n            return elem.hierarchy.length;\n          }\n        },\n        parent: {\n          get: function get() {\n            return elem.hierarchy[0].layerInterface;\n          }\n        },\n        rotation: getDescriptor(transformInterface, 'rotation'),\n        scale: getDescriptor(transformInterface, 'scale'),\n        position: getDescriptor(transformInterface, 'position'),\n        opacity: getDescriptor(transformInterface, 'opacity'),\n        anchorPoint: anchorPointDescriptor,\n        anchor_point: anchorPointDescriptor,\n        transform: {\n          get: function get() {\n            return transformInterface;\n          }\n        },\n        active: {\n          get: function get() {\n            return elem.isInRange;\n          }\n        }\n      });\n      _thisLayerFunction.startTime = elem.data.st;\n      _thisLayerFunction.index = elem.data.ind;\n      _thisLayerFunction.source = elem.data.refId;\n      _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n      _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n      _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      _thisLayerFunction._name = elem.data.nm;\n      _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n      _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n      return _thisLayerFunction;\n    };\n  }();\n\n  var propertyGroupFactory = function () {\n    return function (interfaceFunction, parentPropertyGroup) {\n      return function (val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return parentPropertyGroup(val - 1);\n      };\n    };\n  }();\n\n  var PropertyInterface = function () {\n    return function (propertyName, propertyGroup) {\n      var interfaceFunction = {\n        _name: propertyName\n      };\n\n      function _propertyGroup(val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return propertyGroup(val - 1);\n      }\n\n      return _propertyGroup;\n    };\n  }();\n\n  var EffectsExpressionInterface = function () {\n    var ob = {\n      createEffectsInterface: createEffectsInterface\n    };\n\n    function createEffectsInterface(elem, propertyGroup) {\n      if (elem.effectsManager) {\n        var effectElements = [];\n        var effectsData = elem.data.ef;\n        var i;\n        var len = elem.effectsManager.effectElements.length;\n\n        for (i = 0; i < len; i += 1) {\n          effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n        }\n\n        var effects = elem.data.ef || [];\n\n        var groupInterface = function groupInterface(name) {\n          i = 0;\n          len = effects.length;\n\n          while (i < len) {\n            if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n              return effectElements[i];\n            }\n\n            i += 1;\n          }\n\n          return null;\n        };\n\n        Object.defineProperty(groupInterface, 'numProperties', {\n          get: function get() {\n            return effects.length;\n          }\n        });\n        return groupInterface;\n      }\n\n      return null;\n    }\n\n    function createGroupInterface(data, elements, propertyGroup, elem) {\n      function groupInterface(name) {\n        var effects = data.ef;\n        var i = 0;\n        var len = effects.length;\n\n        while (i < len) {\n          if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n            if (effects[i].ty === 5) {\n              return effectElements[i];\n            }\n\n            return effectElements[i]();\n          }\n\n          i += 1;\n        }\n\n        throw new Error();\n      }\n\n      var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n      var effectElements = [];\n      var i;\n      var len = data.ef.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (data.ef[i].ty === 5) {\n          effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n        } else {\n          effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n        }\n      }\n\n      if (data.mn === 'ADBE Color Control') {\n        Object.defineProperty(groupInterface, 'color', {\n          get: function get() {\n            return effectElements[0]();\n          }\n        });\n      }\n\n      Object.defineProperties(groupInterface, {\n        numProperties: {\n          get: function get() {\n            return data.np;\n          }\n        },\n        _name: {\n          value: data.nm\n        },\n        propertyGroup: {\n          value: _propertyGroup\n        }\n      });\n      groupInterface.enabled = data.en !== 0;\n      groupInterface.active = groupInterface.enabled;\n      return groupInterface;\n    }\n\n    function createValueInterface(element, type, elem, propertyGroup) {\n      var expressionProperty = ExpressionPropertyInterface(element.p);\n\n      function interfaceFunction() {\n        if (type === 10) {\n          return elem.comp.compInterface(element.p.v);\n        }\n\n        return expressionProperty();\n      }\n\n      if (element.p.setGroupProperty) {\n        element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n      }\n\n      return interfaceFunction;\n    }\n\n    return ob;\n  }();\n\n  var ShapePathInterface = function () {\n    return function pathInterfaceFactory(shape, view, propertyGroup) {\n      var prop = view.sh;\n\n      function interfaceFunction(val) {\n        if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n          return interfaceFunction.path;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        path: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        shape: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        ix: {\n          value: shape.ix\n        },\n        propertyIndex: {\n          value: shape.ix\n        },\n        mn: {\n          value: shape.mn\n        },\n        propertyGroup: {\n          value: propertyGroup\n        }\n      });\n      return interfaceFunction;\n    };\n  }();\n\n  var ShapeExpressionInterface = function () {\n    function iterateElements(shapes, view, propertyGroup) {\n      var arr = [];\n      var i;\n      var len = shapes ? shapes.length : 0;\n\n      for (i = 0; i < len; i += 1) {\n        if (shapes[i].ty === 'gr') {\n          arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'fl') {\n          arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'st') {\n          arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tm') {\n          arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n        } else if (shapes[i].ty === 'el') {\n          arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sr') {\n          arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sh') {\n          arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rc') {\n          arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rd') {\n          arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rp') {\n          arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'gf') {\n          arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else {\n          arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n        }\n      }\n\n      return arr;\n    }\n\n    function contentsInterfaceFactory(shape, view, propertyGroup) {\n      var interfaces;\n\n      var interfaceFunction = function _interfaceFunction(value) {\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        if (typeof value === 'number') {\n          return interfaces[value - 1];\n        }\n\n        return null;\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n      interfaceFunction.numProperties = interfaces.length;\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.transform = transformInterface;\n      interfaceFunction.propertyIndex = shape.cix;\n      interfaceFunction._name = shape.nm;\n      return interfaceFunction;\n    }\n\n    function groupInterfaceFactory(shape, view, propertyGroup) {\n      var interfaceFunction = function _interfaceFunction(value) {\n        switch (value) {\n          case 'ADBE Vectors Group':\n          case 'Contents':\n          case 2:\n            return interfaceFunction.content;\n          // Not necessary for now. Keeping them here in case a new case appears\n          // case 'ADBE Vector Transform Group':\n          // case 3:\n\n          default:\n            return interfaceFunction.transform;\n        }\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.content = content;\n      interfaceFunction.transform = transformInterface;\n      Object.defineProperty(interfaceFunction, '_name', {\n        get: function get() {\n          return shape.nm;\n        }\n      }); // interfaceFunction.content = interfaceFunction;\n\n      interfaceFunction.numProperties = shape.np;\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.nm = shape.nm;\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function fillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Start Point' || val === 'start point') {\n          return interfaceFunction.startPoint;\n        }\n\n        if (val === 'End Point' || val === 'end point') {\n          return interfaceFunction.endPoint;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        startPoint: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        endPoint: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        type: {\n          get: function get() {\n            return 'a';\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function defaultInterfaceFactory() {\n      function interfaceFunction() {\n        return null;\n      }\n\n      return interfaceFunction;\n    }\n\n    function strokeInterfaceFactory(shape, view, propertyGroup) {\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n      function addPropertyToDashOb(i) {\n        Object.defineProperty(dashOb, shape.d[i].nm, {\n          get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n        });\n      }\n\n      var i;\n      var len = shape.d ? shape.d.length : 0;\n      var dashOb = {};\n\n      for (i = 0; i < len; i += 1) {\n        addPropertyToDashOb(i);\n        view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n      }\n\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (val === 'Stroke Width' || val === 'stroke width') {\n          return interfaceFunction.strokeWidth;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        strokeWidth: {\n          get: ExpressionPropertyInterface(view.w)\n        },\n        dash: {\n          get: function get() {\n            return dashOb;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n      return interfaceFunction;\n    }\n\n    function trimInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === shape.e.ix || val === 'End' || val === 'end') {\n          return interfaceFunction.end;\n        }\n\n        if (val === shape.s.ix) {\n          return interfaceFunction.start;\n        }\n\n        if (val === shape.o.ix) {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.propertyGroup = propertyGroup;\n      Object.defineProperties(interfaceFunction, {\n        start: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        end: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function transformInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.a.ix === value || value === 'Anchor Point') {\n          return interfaceFunction.anchorPoint;\n        }\n\n        if (shape.o.ix === value || value === 'Opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (shape.p.ix === value || value === 'Position') {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.s.ix === value || value === 'Scale') {\n          return interfaceFunction.scale;\n        }\n\n        if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n          return interfaceFunction.skew;\n        }\n\n        if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n          return interfaceFunction.skewAxis;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n      view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n      view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (view.transform.mProps.sk) {\n        view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n        view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n      }\n\n      view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        opacity: {\n          get: ExpressionPropertyInterface(view.transform.mProps.o)\n        },\n        position: {\n          get: ExpressionPropertyInterface(view.transform.mProps.p)\n        },\n        anchorPoint: {\n          get: ExpressionPropertyInterface(view.transform.mProps.a)\n        },\n        scale: {\n          get: ExpressionPropertyInterface(view.transform.mProps.s)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(view.transform.mProps.r)\n        },\n        skew: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sk)\n        },\n        skewAxis: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sa)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.ty = 'tr';\n      interfaceFunction.mn = shape.mn;\n      interfaceFunction.propertyGroup = propertyGroup;\n      return interfaceFunction;\n    }\n\n    function ellipseInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.s.ix === value) {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function starInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.pt.ix === value) {\n          return interfaceFunction.points;\n        }\n\n        if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n          return interfaceFunction.outerRadius;\n        }\n\n        if (shape.os.ix === value) {\n          return interfaceFunction.outerRoundness;\n        }\n\n        if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n          return interfaceFunction.innerRadius;\n        }\n\n        if (shape.is && shape.is.ix === value) {\n          return interfaceFunction.innerRoundness;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n      prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n      prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (shape.ir) {\n        prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n        prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        points: {\n          get: ExpressionPropertyInterface(prop.pt)\n        },\n        outerRadius: {\n          get: ExpressionPropertyInterface(prop.or)\n        },\n        outerRoundness: {\n          get: ExpressionPropertyInterface(prop.os)\n        },\n        innerRadius: {\n          get: ExpressionPropertyInterface(prop.ir)\n        },\n        innerRoundness: {\n          get: ExpressionPropertyInterface(prop.is)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function rectInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.roundness;\n        }\n\n        if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        roundness: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function roundedInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.r.ix === value || value === 'Round Corners 1') {\n          return interfaceFunction.radius;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        radius: {\n          get: ExpressionPropertyInterface(prop.rd)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function repeaterInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.c.ix === value || value === 'Copies') {\n          return interfaceFunction.copies;\n        }\n\n        if (shape.o.ix === value || value === 'Offset') {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n      prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        copies: {\n          get: ExpressionPropertyInterface(prop.c)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(prop.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    return function (shapes, view, propertyGroup) {\n      var interfaces;\n\n      function _interfaceFunction(value) {\n        if (typeof value === 'number') {\n          value = value === undefined ? 1 : value;\n\n          if (value === 0) {\n            return propertyGroup;\n          }\n\n          return interfaces[value - 1];\n        }\n\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      function parentGroupWrapper() {\n        return propertyGroup;\n      }\n\n      _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n      interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n      _interfaceFunction.numProperties = interfaces.length;\n      _interfaceFunction._name = 'Contents';\n      return _interfaceFunction;\n    };\n  }();\n\n  var TextExpressionInterface = function () {\n    return function (elem) {\n      var _sourceText;\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Text Document':\n            return _thisLayerFunction.sourceText;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisLayerFunction, 'sourceText', {\n        get: function get() {\n          elem.textProperty.getValue();\n          var stringValue = elem.textProperty.currentData.t;\n\n          if (!_sourceText || stringValue !== _sourceText.value) {\n            _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n            // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n            _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n\n            Object.defineProperty(_sourceText, 'style', {\n              get: function get() {\n                return {\n                  fillColor: elem.textProperty.currentData.fc\n                };\n              }\n            });\n          }\n\n          return _sourceText;\n        }\n      });\n      return _thisLayerFunction;\n    };\n  }();\n\n  function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n  var FootageInterface = function () {\n    var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n      var currentPropertyName = '';\n      var currentProperty = elem.getFootageData();\n\n      function init() {\n        currentPropertyName = '';\n        currentProperty = elem.getFootageData();\n        return searchProperty;\n      }\n\n      function searchProperty(value) {\n        if (currentProperty[value]) {\n          currentPropertyName = value;\n          currentProperty = currentProperty[value];\n\n          if (_typeof(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        var propertyNameIndex = value.indexOf(currentPropertyName);\n\n        if (propertyNameIndex !== -1) {\n          var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n          currentProperty = currentProperty[index];\n\n          if (_typeof(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        return '';\n      }\n\n      return init;\n    };\n\n    var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n      function interfaceFunction(value) {\n        if (value === 'Outline') {\n          return interfaceFunction.outlineInterface();\n        }\n\n        return null;\n      }\n\n      interfaceFunction._name = 'Outline';\n      interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n      return interfaceFunction;\n    };\n\n    return function (elem) {\n      function _interfaceFunction(value) {\n        if (value === 'Data') {\n          return _interfaceFunction.dataInterface;\n        }\n\n        return null;\n      }\n\n      _interfaceFunction._name = 'Data';\n      _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n      return _interfaceFunction;\n    };\n  }();\n\n  var interfaces = {\n    layer: LayerExpressionInterface,\n    effects: EffectsExpressionInterface,\n    comp: CompExpressionInterface,\n    shape: ShapeExpressionInterface,\n    text: TextExpressionInterface,\n    footage: FootageInterface\n  };\n\n  function getInterface(type) {\n    return interfaces[type] || null;\n  }\n\n  var expressionHelpers = function () {\n    function searchExpressions(elem, data, prop) {\n      if (data.x) {\n        prop.k = true;\n        prop.x = true;\n        prop.initiateExpression = ExpressionManager.initiateExpression;\n        prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n      }\n    }\n\n    function getValueAtTime(frameNum) {\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastFrame) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n        this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n        this._cachingAtTime.lastFrame = frameNum;\n      }\n\n      return this._cachingAtTime.value;\n    }\n\n    function getSpeedAtTime(frameNum) {\n      var delta = -0.01;\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var speed = 0;\n\n      if (v1.length) {\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          speed += Math.pow(v2[i] - v1[i], 2);\n        }\n\n        speed = Math.sqrt(speed) * 100;\n      } else {\n        speed = 0;\n      }\n\n      return speed;\n    }\n\n    function getVelocityAtTime(frameNum) {\n      if (this.vel !== undefined) {\n        return this.vel;\n      }\n\n      var delta = -0.001; // frameNum += this.elem.data.st;\n\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var velocity;\n\n      if (v1.length) {\n        velocity = createTypedArray('float32', v1.length);\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          // removing frameRate\n          // if needed, don't add it here\n          // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n          velocity[i] = (v2[i] - v1[i]) / delta;\n        }\n      } else {\n        velocity = (v2 - v1) / delta;\n      }\n\n      return velocity;\n    }\n\n    function getStaticValueAtTime() {\n      return this.pv;\n    }\n\n    function setGroupProperty(propertyGroup) {\n      this.propertyGroup = propertyGroup;\n    }\n\n    return {\n      searchExpressions: searchExpressions,\n      getSpeedAtTime: getSpeedAtTime,\n      getVelocityAtTime: getVelocityAtTime,\n      getValueAtTime: getValueAtTime,\n      getStaticValueAtTime: getStaticValueAtTime,\n      setGroupProperty: setGroupProperty\n    };\n  }();\n\n  function addPropertyDecorator() {\n    function loopOut(type, duration, durationFlag) {\n      if (!this.k || !this.keyframes) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n      if (currentFrame <= lastKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var firstKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n        } else {\n          cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n        }\n\n        firstKeyFrame = lastKeyFrame - cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (iterations % 2 !== 0) {\n          return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n        var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n          }\n\n          return ret;\n        }\n\n        return (endV - initV) * repeats + current;\n      } else if (type === 'continue') {\n        var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(lastValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n          }\n\n          return ret;\n        }\n\n        return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n      }\n\n      return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function loopIn(type, duration, durationFlag) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var firstKeyFrame = keyframes[0].t;\n\n      if (currentFrame >= firstKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var lastKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        lastKeyFrame = keyframes[duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n        } else {\n          cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n        }\n\n        lastKeyFrame = firstKeyFrame + cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n        if (iterations % 2 === 0) {\n          return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n        var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n          }\n\n          return ret;\n        }\n\n        return current - (endV - initV) * repeats;\n      } else if (type === 'continue') {\n        var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(firstValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n          }\n\n          return ret;\n        }\n\n        return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n      }\n\n      return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function smooth(width, samples) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      width = (width || 0.4) * 0.5;\n      samples = Math.floor(samples || 5);\n\n      if (samples <= 1) {\n        return this.pv;\n      }\n\n      var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n      var initFrame = currentTime - width;\n      var endFrame = currentTime + width;\n      var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n      var i = 0;\n      var j = 0;\n      var value;\n\n      if (this.pv.length) {\n        value = createTypedArray('float32', this.pv.length);\n      } else {\n        value = 0;\n      }\n\n      var sampleValue;\n\n      while (i < samples) {\n        sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n        if (this.pv.length) {\n          for (j = 0; j < this.pv.length; j += 1) {\n            value[j] += sampleValue[j];\n          }\n        } else {\n          value += sampleValue;\n        }\n\n        i += 1;\n      }\n\n      if (this.pv.length) {\n        for (j = 0; j < this.pv.length; j += 1) {\n          value[j] /= samples;\n        }\n      } else {\n        value /= samples;\n      }\n\n      return value;\n    }\n\n    function getTransformValueAtTime(time) {\n      if (!this._transformCachingAtTime) {\n        this._transformCachingAtTime = {\n          v: new Matrix()\n        };\n      } /// /\n\n\n      var matrix = this._transformCachingAtTime.v;\n      matrix.cloneFromProps(this.pre.props);\n\n      if (this.appliedTransformations < 1) {\n        var anchor = this.a.getValueAtTime(time);\n        matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n      }\n\n      if (this.appliedTransformations < 2) {\n        var scale = this.s.getValueAtTime(time);\n        matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n      }\n\n      if (this.sk && this.appliedTransformations < 3) {\n        var skew = this.sk.getValueAtTime(time);\n        var skewAxis = this.sa.getValueAtTime(time);\n        matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n      }\n\n      if (this.r && this.appliedTransformations < 4) {\n        var rotation = this.r.getValueAtTime(time);\n        matrix.rotate(-rotation * this.r.mult);\n      } else if (!this.r && this.appliedTransformations < 4) {\n        var rotationZ = this.rz.getValueAtTime(time);\n        var rotationY = this.ry.getValueAtTime(time);\n        var rotationX = this.rx.getValueAtTime(time);\n        var orientation = this.or.getValueAtTime(time);\n        matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n      }\n\n      if (this.data.p && this.data.p.s) {\n        var positionX = this.px.getValueAtTime(time);\n        var positionY = this.py.getValueAtTime(time);\n\n        if (this.data.p.z) {\n          var positionZ = this.pz.getValueAtTime(time);\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n        } else {\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n        }\n      } else {\n        var position = this.p.getValueAtTime(time);\n        matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n      }\n\n      return matrix; /// /\n    }\n\n    function getTransformStaticValueAtTime() {\n      return this.v.clone(new Matrix());\n    }\n\n    var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n    TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n      var prop = getTransformProperty(elem, data, container);\n\n      if (prop.dynamicProperties.length) {\n        prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      return prop;\n    };\n\n    var propertyGetProp = PropertyFactory.getProp;\n\n    PropertyFactory.getProp = function (elem, data, type, mult, container) {\n      var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n      // prop.loopOut = loopOut;\n      // prop.loopIn = loopIn;\n\n      if (prop.kf) {\n        prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      prop.loopOut = loopOut;\n      prop.loopIn = loopIn;\n      prop.smooth = smooth;\n      prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n      prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n      prop.numKeys = data.a === 1 ? data.k.length : 0;\n      prop.propertyIndex = data.ix;\n      var value = 0;\n\n      if (type !== 0) {\n        value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n      }\n\n      prop._cachingAtTime = {\n        lastFrame: initialDefaultFrame,\n        lastIndex: 0,\n        value: value\n      };\n      expressionHelpers.searchExpressions(elem, data, prop);\n\n      if (prop.k) {\n        container.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n\n    function getShapeValueAtTime(frameNum) {\n      // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n      if (!this._cachingAtTime) {\n        this._cachingAtTime = {\n          shapeValue: shapePool.clone(this.pv),\n          lastIndex: 0,\n          lastTime: initialDefaultFrame\n        };\n      }\n\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastTime) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n        this._cachingAtTime.lastTime = frameNum;\n        this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n      }\n\n      return this._cachingAtTime.shapeValue;\n    }\n\n    var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n    var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n    function ShapeExpressions() {}\n\n    ShapeExpressions.prototype = {\n      vertices: function vertices(prop, time) {\n        if (this.k) {\n          this.getValue();\n        }\n\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        var i;\n        var len = shapePath._length;\n        var vertices = shapePath[prop];\n        var points = shapePath.v;\n        var arr = createSizedArray(len);\n\n        for (i = 0; i < len; i += 1) {\n          if (prop === 'i' || prop === 'o') {\n            arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n          } else {\n            arr[i] = [vertices[i][0], vertices[i][1]];\n          }\n        }\n\n        return arr;\n      },\n      points: function points(time) {\n        return this.vertices('v', time);\n      },\n      inTangents: function inTangents(time) {\n        return this.vertices('i', time);\n      },\n      outTangents: function outTangents(time) {\n        return this.vertices('o', time);\n      },\n      isClosed: function isClosed() {\n        return this.v.c;\n      },\n      pointOnPath: function pointOnPath(perc, time) {\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        if (!this._segmentsLength) {\n          this._segmentsLength = bez.getSegmentsLength(shapePath);\n        }\n\n        var segmentsLength = this._segmentsLength;\n        var lengths = segmentsLength.lengths;\n        var lengthPos = segmentsLength.totalLength * perc;\n        var i = 0;\n        var len = lengths.length;\n        var accumulatedLength = 0;\n        var pt;\n\n        while (i < len) {\n          if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n            var initIndex = i;\n            var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n            var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n            pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n            break;\n          } else {\n            accumulatedLength += lengths[i].addedLength;\n          }\n\n          i += 1;\n        }\n\n        if (!pt) {\n          pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n        }\n\n        return pt;\n      },\n      vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n        // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n        if (perc == 1) {\n          // eslint-disable-line eqeqeq\n          perc = this.v.c;\n        } else if (perc == 0) {\n          // eslint-disable-line eqeqeq\n          perc = 0.999;\n        }\n\n        var pt1 = this.pointOnPath(perc, time);\n        var pt2 = this.pointOnPath(perc + 0.001, time);\n        var xLength = pt2[0] - pt1[0];\n        var yLength = pt2[1] - pt1[1];\n        var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n        if (magnitude === 0) {\n          return [0, 0];\n        }\n\n        var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n        return unitVector;\n      },\n      tangentOnPath: function tangentOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'tangent');\n      },\n      normalOnPath: function normalOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'normal');\n      },\n      setGroupProperty: expressionHelpers.setGroupProperty,\n      getValueAtTime: expressionHelpers.getStaticValueAtTime\n    };\n    extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n    extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n    KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n    KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n    var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n    ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n      var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n      prop.propertyIndex = data.ix;\n      prop.lock = false;\n\n      if (type === 3) {\n        expressionHelpers.searchExpressions(elem, data.pt, prop);\n      } else if (type === 4) {\n        expressionHelpers.searchExpressions(elem, data.ks, prop);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n  }\n\n  function initialize$1() {\n    addPropertyDecorator();\n  }\n\n  function addDecorator() {\n    function searchExpressions() {\n      if (this.data.d.x) {\n        this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n        this.addEffect(this.getExpressionValue.bind(this));\n        return true;\n      }\n\n      return null;\n    }\n\n    TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n      var newValue = this.calculateExpression(text);\n\n      if (currentValue.t !== newValue) {\n        var newData = {};\n        this.copyData(newData, currentValue);\n        newData.t = newValue.toString();\n        newData.__complete = false;\n        return newData;\n      }\n\n      return currentValue;\n    };\n\n    TextProperty.prototype.searchProperty = function () {\n      var isKeyframed = this.searchKeyframes();\n      var hasExpressions = this.searchExpressions();\n      this.kf = isKeyframed || hasExpressions;\n      return this.kf;\n    };\n\n    TextProperty.prototype.searchExpressions = searchExpressions;\n  }\n\n  function initialize() {\n    addDecorator();\n  }\n\n  function SVGComposableEffect() {}\n\n  SVGComposableEffect.prototype = {\n    createMergeNode: function createMergeNode(resultId, ins) {\n      var feMerge = createNS('feMerge');\n      feMerge.setAttribute('result', resultId);\n      var feMergeNode;\n      var i;\n\n      for (i = 0; i < ins.length; i += 1) {\n        feMergeNode = createNS('feMergeNode');\n        feMergeNode.setAttribute('in', ins[i]);\n        feMerge.appendChild(feMergeNode);\n        feMerge.appendChild(feMergeNode);\n      }\n\n      return feMerge;\n    }\n  };\n\n  var linearFilterValue = '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0';\n\n  function SVGTintFilter(filter, filterManager, elem, id, source) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0');\n    this.linearFilter = feColorMatrix;\n    feColorMatrix.setAttribute('result', id + '_tint_1');\n    filter.appendChild(feColorMatrix);\n    feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id + '_tint_2');\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n    var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n    filter.appendChild(feMerge);\n  }\n\n  extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n  SVGTintFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var colorBlack = this.filterManager.effectElements[0].p.v;\n      var colorWhite = this.filterManager.effectElements[1].p.v;\n      var opacity = this.filterManager.effectElements[2].p.v / 100;\n      this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');\n      this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 1 0');\n    }\n  };\n\n  function SVGFillFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id);\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n  }\n\n  SVGFillFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color = this.filterManager.effectElements[2].p.v;\n      var opacity = this.filterManager.effectElements[6].p.v;\n      this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n    }\n  };\n\n  function SVGStrokeEffect(fil, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.elem = elem;\n    this.paths = [];\n  }\n\n  SVGStrokeEffect.prototype.initialize = function () {\n    var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n    var path;\n    var groupPath;\n    var i;\n    var len;\n\n    if (this.filterManager.effectElements[1].p.v === 1) {\n      len = this.elem.maskManager.masksProperties.length;\n      i = 0;\n    } else {\n      i = this.filterManager.effectElements[0].p.v - 1;\n      len = i + 1;\n    }\n\n    groupPath = createNS('g');\n    groupPath.setAttribute('fill', 'none');\n    groupPath.setAttribute('stroke-linecap', 'round');\n    groupPath.setAttribute('stroke-dashoffset', 1);\n\n    for (i; i < len; i += 1) {\n      path = createNS('path');\n      groupPath.appendChild(path);\n      this.paths.push({\n        p: path,\n        m: i\n      });\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 3) {\n      var mask = createNS('mask');\n      var id = createElementID();\n      mask.setAttribute('id', id);\n      mask.setAttribute('mask-type', 'alpha');\n      mask.appendChild(groupPath);\n      this.elem.globalData.defs.appendChild(mask);\n      var g = createNS('g');\n      g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n      while (elemChildren[0]) {\n        g.appendChild(elemChildren[0]);\n      }\n\n      this.elem.layerElement.appendChild(g);\n      this.masker = mask;\n      groupPath.setAttribute('stroke', '#fff');\n    } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (this.filterManager.effectElements[10].p.v === 2) {\n        elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n        while (elemChildren.length) {\n          this.elem.layerElement.removeChild(elemChildren[0]);\n        }\n      }\n\n      this.elem.layerElement.appendChild(groupPath);\n      this.elem.layerElement.removeAttribute('mask');\n      groupPath.setAttribute('stroke', '#fff');\n    }\n\n    this.initialized = true;\n    this.pathMasker = groupPath;\n  };\n\n  SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    var i;\n    var len = this.paths.length;\n    var mask;\n    var path;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.paths[i].m !== -1) {\n        mask = this.elem.maskManager.viewData[this.paths[i].m];\n        path = this.paths[i].p;\n\n        if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n          path.setAttribute('d', mask.lastPath);\n        }\n\n        if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n          var dasharrayValue;\n\n          if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n            var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var l = path.getTotalLength();\n            dasharrayValue = '0 0 0 ' + l * s + ' ';\n            var lineLength = l * (e - s);\n            var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n            var units = Math.floor(lineLength / segment);\n            var j;\n\n            for (j = 0; j < units; j += 1) {\n              dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n            }\n\n            dasharrayValue += '0 ' + l * 10 + ' 0 0';\n          } else {\n            dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n          }\n\n          path.setAttribute('stroke-dasharray', dasharrayValue);\n        }\n      }\n    }\n\n    if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n      this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n    }\n\n    if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n      this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n        var color = this.filterManager.effectElements[3].p.v;\n        this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n      }\n    }\n  };\n\n  function SVGTritoneFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n    filter.appendChild(feColorMatrix);\n    var feComponentTransfer = createNS('feComponentTransfer');\n    feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n    feComponentTransfer.setAttribute('result', id);\n    this.matrixFilter = feComponentTransfer;\n    var feFuncR = createNS('feFuncR');\n    feFuncR.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncR);\n    this.feFuncR = feFuncR;\n    var feFuncG = createNS('feFuncG');\n    feFuncG.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncG);\n    this.feFuncG = feFuncG;\n    var feFuncB = createNS('feFuncB');\n    feFuncB.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncB);\n    this.feFuncB = feFuncB;\n    filter.appendChild(feComponentTransfer);\n  }\n\n  SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color1 = this.filterManager.effectElements[0].p.v;\n      var color2 = this.filterManager.effectElements[1].p.v;\n      var color3 = this.filterManager.effectElements[2].p.v;\n      var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n      var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n      var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n      this.feFuncR.setAttribute('tableValues', tableR);\n      this.feFuncG.setAttribute('tableValues', tableG);\n      this.feFuncB.setAttribute('tableValues', tableB);\n    }\n  };\n\n  function SVGProLevelsFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var effectElements = this.filterManager.effectElements;\n    var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n    if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n      this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n    } // Green\n\n\n    if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n      this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n    } // Blue\n\n\n    if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n      this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n    } // Alpha\n\n\n    if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n      this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n    } // RGB\n\n\n    if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      filter.appendChild(feComponentTransfer);\n    }\n\n    if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n      feComponentTransfer = createNS('feComponentTransfer');\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      feComponentTransfer.setAttribute('result', id);\n      filter.appendChild(feComponentTransfer);\n      this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n      this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n      this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n    }\n  }\n\n  SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n    var feFunc = createNS(type);\n    feFunc.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFunc);\n    return feFunc;\n  };\n\n  SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n    var cnt = 0;\n    var segments = 256;\n    var perc;\n    var min = Math.min(inputBlack, inputWhite);\n    var max = Math.max(inputBlack, inputWhite);\n    var table = Array.call(null, {\n      length: segments\n    });\n    var colorValue;\n    var pos = 0;\n    var outputDelta = outputWhite - outputBlack;\n    var inputDelta = inputWhite - inputBlack;\n\n    while (cnt <= 256) {\n      perc = cnt / 256;\n\n      if (perc <= min) {\n        colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n      } else if (perc >= max) {\n        colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n      } else {\n        colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n      }\n\n      table[pos] = colorValue;\n      pos += 1;\n      cnt += 256 / (segments - 1);\n    }\n\n    return table.join(' ');\n  };\n\n  SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var val;\n      var effectElements = this.filterManager.effectElements;\n\n      if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n        val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n        this.feFuncRComposed.setAttribute('tableValues', val);\n        this.feFuncGComposed.setAttribute('tableValues', val);\n        this.feFuncBComposed.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n        val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n        this.feFuncR.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n        val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n        this.feFuncG.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n        val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n        this.feFuncB.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n        val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n        this.feFuncA.setAttribute('tableValues', val);\n      }\n    }\n  };\n\n  function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n    var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n    var filterSize = filterManager.data.fs || globalFilterSize;\n    filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n    filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n    filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n    filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('in', 'SourceAlpha');\n    feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n    feGaussianBlur.setAttribute('stdDeviation', '0');\n    this.feGaussianBlur = feGaussianBlur;\n    filter.appendChild(feGaussianBlur);\n    var feOffset = createNS('feOffset');\n    feOffset.setAttribute('dx', '25');\n    feOffset.setAttribute('dy', '0');\n    feOffset.setAttribute('in', id + '_drop_shadow_1');\n    feOffset.setAttribute('result', id + '_drop_shadow_2');\n    this.feOffset = feOffset;\n    filter.appendChild(feOffset);\n    var feFlood = createNS('feFlood');\n    feFlood.setAttribute('flood-color', '#00ff00');\n    feFlood.setAttribute('flood-opacity', '1');\n    feFlood.setAttribute('result', id + '_drop_shadow_3');\n    this.feFlood = feFlood;\n    filter.appendChild(feFlood);\n    var feComposite = createNS('feComposite');\n    feComposite.setAttribute('in', id + '_drop_shadow_3');\n    feComposite.setAttribute('in2', id + '_drop_shadow_2');\n    feComposite.setAttribute('operator', 'in');\n    feComposite.setAttribute('result', id + '_drop_shadow_4');\n    filter.appendChild(feComposite);\n    var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n    filter.appendChild(feMerge); //\n  }\n\n  extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n  SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n        this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n      }\n\n      if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n        var col = this.filterManager.effectElements[0].p.v;\n        this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n      }\n\n      if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n        this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n      }\n\n      if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n        var distance = this.filterManager.effectElements[3].p.v;\n        var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n        var x = distance * Math.cos(angle);\n        var y = distance * Math.sin(angle);\n        this.feOffset.setAttribute('dx', x);\n        this.feOffset.setAttribute('dy', y);\n      }\n    }\n  };\n\n  var _svgMatteSymbols = [];\n\n  function SVGMatte3Effect(filterElem, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.filterElem = filterElem;\n    this.elem = elem;\n    elem.matteElement = createNS('g');\n    elem.matteElement.appendChild(elem.layerElement);\n    elem.matteElement.appendChild(elem.transformedElement);\n    elem.baseElement = elem.matteElement;\n  }\n\n  SVGMatte3Effect.prototype.findSymbol = function (mask) {\n    var i = 0;\n    var len = _svgMatteSymbols.length;\n\n    while (i < len) {\n      if (_svgMatteSymbols[i] === mask) {\n        return _svgMatteSymbols[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n    var parentNode = mask.layerElement.parentNode;\n\n    if (!parentNode) {\n      return;\n    }\n\n    var children = parentNode.children;\n    var i = 0;\n    var len = children.length;\n\n    while (i < len) {\n      if (children[i] === mask.layerElement) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    var nextChild;\n\n    if (i <= len - 2) {\n      nextChild = children[i + 1];\n    }\n\n    var useElem = createNS('use');\n    useElem.setAttribute('href', '#' + symbolId);\n\n    if (nextChild) {\n      parentNode.insertBefore(useElem, nextChild);\n    } else {\n      parentNode.appendChild(useElem);\n    }\n  };\n\n  SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n    if (!this.findSymbol(mask)) {\n      var symbolId = createElementID();\n      var masker = createNS('mask');\n      masker.setAttribute('id', mask.layerId);\n      masker.setAttribute('mask-type', 'alpha');\n\n      _svgMatteSymbols.push(mask);\n\n      var defs = elem.globalData.defs;\n      defs.appendChild(masker);\n      var symbol = createNS('symbol');\n      symbol.setAttribute('id', symbolId);\n      this.replaceInParent(mask, symbolId);\n      symbol.appendChild(mask.layerElement);\n      defs.appendChild(symbol);\n      var useElem = createNS('use');\n      useElem.setAttribute('href', '#' + symbolId);\n      masker.appendChild(useElem);\n      mask.data.hd = false;\n      mask.show();\n    }\n\n    elem.setMatte(mask.layerId);\n  };\n\n  SVGMatte3Effect.prototype.initialize = function () {\n    var ind = this.filterManager.effectElements[0].p.v;\n    var elements = this.elem.comp.elements;\n    var i = 0;\n    var len = elements.length;\n\n    while (i < len) {\n      if (elements[i] && elements[i].data.ind === ind) {\n        this.setElementAsMask(this.elem, elements[i]);\n      }\n\n      i += 1;\n    }\n\n    this.initialized = true;\n  };\n\n  SVGMatte3Effect.prototype.renderFrame = function () {\n    if (!this.initialized) {\n      this.initialize();\n    }\n  };\n\n  function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n    // Outset the filter region by 100% on all sides to accommodate blur expansion.\n    filter.setAttribute('x', '-100%');\n    filter.setAttribute('y', '-100%');\n    filter.setAttribute('width', '300%');\n    filter.setAttribute('height', '300%');\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('result', id);\n    filter.appendChild(feGaussianBlur);\n    this.feGaussianBlur = feGaussianBlur;\n  }\n\n  SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      // Empirical value, matching AE's blur appearance.\n      var kBlurrinessToSigma = 0.3;\n      var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n      //\n      //   1 -> horizontal & vertical\n      //   2 -> horizontal only\n      //   3 -> vertical only\n      //\n\n      var dimensions = this.filterManager.effectElements[1].p.v;\n      var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n      //\n      //   0 -> off -> duplicate\n      //   1 -> on  -> wrap\n\n      var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n    }\n  };\n\n  function TransformEffect() {}\n\n  TransformEffect.prototype.init = function (effectsManager) {\n    this.effectsManager = effectsManager;\n    this.type = effectTypes.TRANSFORM_EFFECT;\n    this.matrix = new Matrix();\n    this.opacity = -1;\n    this._mdf = false;\n    this._opMdf = false;\n  };\n\n  TransformEffect.prototype.renderFrame = function (forceFrame) {\n    this._opMdf = false;\n    this._mdf = false;\n\n    if (forceFrame || this.effectsManager._mdf) {\n      var effectElements = this.effectsManager.effectElements;\n      var anchor = effectElements[0].p.v;\n      var position = effectElements[1].p.v;\n      var isUniformScale = effectElements[2].p.v === 1;\n      var scaleHeight = effectElements[3].p.v;\n      var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;\n      var skew = effectElements[5].p.v;\n      var skewAxis = effectElements[6].p.v;\n      var rotation = effectElements[7].p.v;\n      this.matrix.reset();\n      this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n      this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);\n      this.matrix.rotate(-rotation * degToRads);\n      this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);\n      this.matrix.translate(position[0], position[1], 0);\n      this._mdf = true;\n\n      if (this.opacity !== effectElements[8].p.v) {\n        this.opacity = effectElements[8].p.v;\n        this._opMdf = true;\n      }\n    }\n  };\n\n  function SVGTransformEffect(_, filterManager) {\n    this.init(filterManager);\n  }\n\n  extendPrototype([TransformEffect], SVGTransformEffect);\n\n  function CVTransformEffect(effectsManager) {\n    this.init(effectsManager);\n  }\n\n  extendPrototype([TransformEffect], CVTransformEffect);\n\n  registerRenderer('canvas', CanvasRenderer);\n  registerRenderer('html', HybridRenderer);\n  registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n  ShapeModifiers.registerModifier('tm', TrimModifier);\n  ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n  ShapeModifiers.registerModifier('rp', RepeaterModifier);\n  ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n  ShapeModifiers.registerModifier('zz', ZigZagModifier);\n  ShapeModifiers.registerModifier('op', OffsetPathModifier); // Registering expression plugin\n\n  setExpressionsPlugin(Expressions);\n  setExpressionInterfaces(getInterface);\n  initialize$1();\n  initialize(); // Registering svg effects\n\n  registerEffect$1(20, SVGTintFilter, true);\n  registerEffect$1(21, SVGFillFilter, true);\n  registerEffect$1(22, SVGStrokeEffect, false);\n  registerEffect$1(23, SVGTritoneFilter, true);\n  registerEffect$1(24, SVGProLevelsFilter, true);\n  registerEffect$1(25, SVGDropShadowEffect, true);\n  registerEffect$1(28, SVGMatte3Effect, false);\n  registerEffect$1(29, SVGGaussianBlurEffect, true);\n  registerEffect$1(35, SVGTransformEffect, false);\n  registerEffect(35, CVTransformEffect);\n\n  return lottie;\n\n}));\n","import lottie from 'lottie-web';\n\nconst footer = {\n  elements: {\n    logo: document.querySelector('.site-footer__logo'),\n  },\n\n  init() {\n    this.bindEvents();\n  },\n\n  async bindEvents() {\n    if(!this.elements.logo) return;\n\n    const response = await fetch(this.getPath());\n    const file = await response.json();\n\n    lottie.loadAnimation({\n      container: this.elements.logo,\n      renderer: 'svg',\n      loop: true,\n      autoplay: true,\n      animationData: file,\n    });\n\n  },\n\n  getPath() {\n    const numbers = [ 1, 7 ];\n    const number = Math.floor(Math.random() * numbers.length);\n    return `${window.curtis.themeurl}/public/animations/Curtis_Footer_Animation_${numbers[number]}.json`;\n  }\n};\n\nexport default footer;\n","type Elements = {\n  module: HTMLElement | null;\n  eventsLoadMore: HTMLButtonElement | null;\n  eventsResultsList: HTMLUListElement | null;\n  peopleLoadMore: HTMLButtonElement | null;\n  peopleResultsList: HTMLUListElement | null;\n  postsLoadMore: HTMLButtonElement | null;\n  postsResultsList: HTMLUListElement | null;\n}\n\ntype Search = {\n  postsPerPage: number;\n  elements: Elements;\n  init: () => void;\n  bindEvents: () => void;\n  getResults: (page: number, type: string) => void;\n  handleLoadMoreEventsClick: () => void;\n  handleLoadMorePeopleClick: () => void;\n  handleLoadMorePostsClick: () => void;\n};\n\nconst search: Search = {\n  postsPerPage: 10,\n\n  elements: {\n    module: document.querySelector('.site-search__contents'),\n    eventsLoadMore: document.querySelector('.site-search__events button[data-action=\"load-more\"]'),\n    eventsResultsList: document.querySelector('.site-search__events .site-search__results'),\n    peopleLoadMore: document.querySelector('.site-search__people button[data-action=\"load-more\"]'),\n    peopleResultsList: document.querySelector('.site-search__people .site-search__results'),\n    postsLoadMore: document.querySelector('.site-search__posts button[data-action=\"load-more\"]'),\n    postsResultsList: document.querySelector('.site-search__posts .site-search__results'),\n  },\n\n  init() {\n    if(!this.elements.module) return;\n\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    this.elements.eventsLoadMore?.addEventListener('click', () => this.handleLoadMoreEventsClick());\n    this.elements.peopleLoadMore?.addEventListener('click', () => this.handleLoadMorePeopleClick());\n    this.elements.postsLoadMore?.addEventListener('click', () => this.handleLoadMorePostsClick());\n  },\n\n  handleLoadMoreEventsClick() {\n    const button = this.elements.eventsLoadMore;\n    const newPage = parseInt(button?.dataset.page || '1', 10) + 1;\n    this.getResults(newPage, 'events');\n  },\n\n  handleLoadMorePeopleClick() {\n    const button = this.elements.peopleLoadMore;\n    const newPage = parseInt(button?.dataset.page || '1', 10) + 1;\n    this.getResults(newPage, 'people');\n  },\n\n  handleLoadMorePostsClick() {\n    const button = this.elements.postsLoadMore;\n    const newPage = parseInt(button?.dataset.page || '1', 10) + 1;\n    this.getResults(newPage, 'posts');\n  },\n\n  getResults(page, type) {\n    const button = type === 'events' ? this.elements.eventsLoadMore : type === 'people' ? this.elements.peopleLoadMore : this.elements.postsLoadMore;\n    const resultsList = type === 'events' ? this.elements.eventsResultsList : type === 'people' ? this.elements.peopleResultsList : this.elements.postsResultsList;\n    const showingCount = page * this.postsPerPage;\n\n    window.jQuery.ajax({\n      method: 'POST',\n      url: window.curtis.ajaxurl,\n      data: {\n        action: 'action_get_search',\n        query: button?.dataset.query,\n        events: this.elements.eventsLoadMore?.dataset.page || 1,\n        people: this.elements.peopleLoadMore?.dataset.page || 1,\n        posts: this.elements.postsLoadMore?.dataset.page || 1,\n        [type]: page,\n        type\n      },\n    })\n    .success((success: string) => {\n      const data = JSON.parse(success);\n\n      if(resultsList && data.results && page > 1) {\n        resultsList.innerHTML = `${resultsList.innerHTML}${data.results}`;\n      } else if(resultsList && data.results && page === 1) {\n        resultsList.innerHTML = data.results;\n      } else if(resultsList && !data.results) {\n        resultsList.innerHTML = '<li class=\"not-found\">No results found</li>';\n        button?.classList.add('hidden');\n      }\n\n      /* update the page number */\n      button?.setAttribute('data-page', `${page}`);\n\n      /* hide the load button if we have all results */\n      if(page === -1 || showingCount >= data.total) {\n        button?.classList.add('hidden');\n      }\n    })\n    .fail((_jqXHR: JQuery.jqXHR, _textStatus: string, errorThrown: string) => console.log(errorThrown));\n  }\n\n};\n\nexport default search;\n","interface AccordionGroup {\n  elements: {\n    groups: HTMLElement[];\n  };\n  init: () => void;\n  bindEvents: () => void;\n  setupAccordion: (group: HTMLElement) => void;\n  handleAccordionClick: (details: HTMLDetailsElement[], targetDetail: HTMLDetailsElement) => void;\n}\n\nconst accordionGroup: AccordionGroup = {\n  elements: {\n    groups: Array.from(document.querySelectorAll('.module--accordion-group .module--accordion-group--items')) as HTMLElement[],\n  },\n\n  init() {\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    // if (this.elements.groups.length > 0) {\n    //   this.elements.groups.forEach(group => {\n    //     this.setupAccordion(group);\n    //   });\n    // }\n  },\n\n  setupAccordion(group: HTMLElement) {\n    const details = Array.from(group.querySelectorAll('details')) as HTMLDetailsElement[];\n\n    if (details.length > 0) {\n      details.forEach(targetDetail => {\n        // Calculate and set the max-height value in data-height attribute\n        targetDetail.style.maxHeight = 'none'; // Temporarily set maxHeight to none to calculate full height\n        const contentHeight = targetDetail.scrollHeight;\n        targetDetail.setAttribute('data-height', `${contentHeight}px`);\n        targetDetail.style.maxHeight = '0'; // Reset maxHeight to initial state\n\n        targetDetail.addEventListener('click', () => this.handleAccordionClick(details, targetDetail));\n      });\n    }\n  },\n\n  handleAccordionClick(details: HTMLDetailsElement[], targetDetail: HTMLDetailsElement) {\n    details.forEach((detail) => {\n      if (detail !== targetDetail) {\n        detail.removeAttribute('open');\n        // detail.style.maxHeight = '0';\n      } else {\n        // detail.style.maxHeight = detail.getAttribute('data-height') || '0';\n      }\n    });\n  }\n};\n\nexport default accordionGroup;\n","import lottie from 'lottie-web';\n\ntype Elements = {\n  animations: HTMLDivElement[];\n};\n\ntype Divider = {\n  elements: Elements;\n  init: () => Promise<void>;\n  loadAndPlayAnimations: () => void;\n  getPath: (file: string) => string;\n};\n\nconst divider: Divider = {\n  elements: {\n    animations: [],\n  },\n\n  async init() {\n    this.elements.animations = Array.from(document.querySelectorAll('.module--divider .module__animation'));\n    this.loadAndPlayAnimations();\n  },\n\n  async loadAndPlayAnimations() {\n    if (this.elements.animations.length > 0) {\n      this.elements.animations.forEach(async (element) => {\n        if(!element.dataset.file) return;\n        const response = await fetch(this.getPath(element.dataset.file));\n        const file = await response.json();\n\n        lottie.loadAnimation({\n          container: element,\n          renderer: 'svg',\n          loop: true,\n          autoplay: true,\n          animationData: file,\n        });\n      });\n    }\n  },\n\n  getPath(file) {\n    return `${window.curtis.themeurl}/public/dividers/animated/${file}`;\n  }\n};\n\nexport default divider;\n","import debounce from '@/scripts/helpers/debounce';\n\ntype Elements = {\n  module: HTMLElement | null;\n};\n\ntype Event = {\n  elements: Elements;\n  init: () => void;\n  bindEvents: () => void;\n  handleStickyHeight: () => void;\n};\n\nconst event: Event = {\n  elements: {\n    module: document.querySelector('.module__single--event'),\n  },\n\n  init() {\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    window.addEventListener('load', () => {\n      setTimeout(() => this.handleStickyHeight(), 150);\n    });\n\n    window.addEventListener('resize', debounce(() => {\n      this.handleStickyHeight();\n    }, 250));\n  },\n\n  handleStickyHeight() {\n    if(!this.elements.module) return;\n\n    const stickyElement: HTMLElement | null = this.elements.module.querySelector('.module__content--secondary');\n    const contentElement: HTMLElement | null = this.elements.module.querySelector('.module__content--secondary > ul');\n\n    if (!stickyElement || !contentElement) {\n      return;\n    }\n\n    const stickyHeight = contentElement.clientHeight;\n    stickyElement.style.height = `${stickyHeight}px`;\n  }\n};\n\nexport default event;\n","/*\n     _ _      _       _\n ___| (_) ___| | __  (_)___\n/ __| | |/ __| |/ /  | / __|\n\\__ \\ | | (__|   < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n                   |__/\n\n Version: 1.8.1\n  Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n    Docs: http://kenwheeler.github.io/slick\n    Repo: http://github.com/kenwheeler/slick\n  Issues: http://github.com/kenwheeler/slick/issues\n\n */\n/* global window, document, define, jQuery, setInterval, clearInterval */\n;(function(factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof exports !== 'undefined') {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n\n}(function($) {\n    'use strict';\n    var Slick = window.Slick || {};\n\n    Slick = (function() {\n\n        var instanceUid = 0;\n\n        function Slick(element, settings) {\n\n            var _ = this, dataSettings;\n\n            _.defaults = {\n                accessibility: true,\n                adaptiveHeight: false,\n                appendArrows: $(element),\n                appendDots: $(element),\n                arrows: true,\n                asNavFor: null,\n                prevArrow: '<button class=\"slick-prev\" aria-label=\"Previous\" type=\"button\">Previous</button>',\n                nextArrow: '<button class=\"slick-next\" aria-label=\"Next\" type=\"button\">Next</button>',\n                autoplay: false,\n                autoplaySpeed: 3000,\n                centerMode: false,\n                centerPadding: '50px',\n                cssEase: 'ease',\n                customPaging: function(slider, i) {\n                    return $('<button type=\"button\" />').text(i + 1);\n                },\n                dots: false,\n                dotsClass: 'slick-dots',\n                draggable: true,\n                easing: 'linear',\n                edgeFriction: 0.35,\n                fade: false,\n                focusOnSelect: false,\n                focusOnChange: false,\n                infinite: true,\n                initialSlide: 0,\n                lazyLoad: 'ondemand',\n                mobileFirst: false,\n                pauseOnHover: true,\n                pauseOnFocus: true,\n                pauseOnDotsHover: false,\n                respondTo: 'window',\n                responsive: null,\n                rows: 1,\n                rtl: false,\n                slide: '',\n                slidesPerRow: 1,\n                slidesToShow: 1,\n                slidesToScroll: 1,\n                speed: 500,\n                swipe: true,\n                swipeToSlide: false,\n                touchMove: true,\n                touchThreshold: 5,\n                useCSS: true,\n                useTransform: true,\n                variableWidth: false,\n                vertical: false,\n                verticalSwiping: false,\n                waitForAnimate: true,\n                zIndex: 1000\n            };\n\n            _.initials = {\n                animating: false,\n                dragging: false,\n                autoPlayTimer: null,\n                currentDirection: 0,\n                currentLeft: null,\n                currentSlide: 0,\n                direction: 1,\n                $dots: null,\n                listWidth: null,\n                listHeight: null,\n                loadIndex: 0,\n                $nextArrow: null,\n                $prevArrow: null,\n                scrolling: false,\n                slideCount: null,\n                slideWidth: null,\n                $slideTrack: null,\n                $slides: null,\n                sliding: false,\n                slideOffset: 0,\n                swipeLeft: null,\n                swiping: false,\n                $list: null,\n                touchObject: {},\n                transformsEnabled: false,\n                unslicked: false\n            };\n\n            $.extend(_, _.initials);\n\n            _.activeBreakpoint = null;\n            _.animType = null;\n            _.animProp = null;\n            _.breakpoints = [];\n            _.breakpointSettings = [];\n            _.cssTransitions = false;\n            _.focussed = false;\n            _.interrupted = false;\n            _.hidden = 'hidden';\n            _.paused = true;\n            _.positionProp = null;\n            _.respondTo = null;\n            _.rowCount = 1;\n            _.shouldClick = true;\n            _.$slider = $(element);\n            _.$slidesCache = null;\n            _.transformType = null;\n            _.transitionType = null;\n            _.visibilityChange = 'visibilitychange';\n            _.windowWidth = 0;\n            _.windowTimer = null;\n\n            dataSettings = $(element).data('slick') || {};\n\n            _.options = $.extend({}, _.defaults, settings, dataSettings);\n\n            _.currentSlide = _.options.initialSlide;\n\n            _.originalSettings = _.options;\n\n            if (typeof document.mozHidden !== 'undefined') {\n                _.hidden = 'mozHidden';\n                _.visibilityChange = 'mozvisibilitychange';\n            } else if (typeof document.webkitHidden !== 'undefined') {\n                _.hidden = 'webkitHidden';\n                _.visibilityChange = 'webkitvisibilitychange';\n            }\n\n            _.autoPlay = $.proxy(_.autoPlay, _);\n            _.autoPlayClear = $.proxy(_.autoPlayClear, _);\n            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\n            _.changeSlide = $.proxy(_.changeSlide, _);\n            _.clickHandler = $.proxy(_.clickHandler, _);\n            _.selectHandler = $.proxy(_.selectHandler, _);\n            _.setPosition = $.proxy(_.setPosition, _);\n            _.swipeHandler = $.proxy(_.swipeHandler, _);\n            _.dragHandler = $.proxy(_.dragHandler, _);\n            _.keyHandler = $.proxy(_.keyHandler, _);\n\n            _.instanceUid = instanceUid++;\n\n            // A simple way to check for HTML strings\n            // Strict HTML recognition (must start with <)\n            // Extracted from jQuery v1.11 source\n            _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\n\n\n            _.registerBreakpoints();\n            _.init(true);\n\n        }\n\n        return Slick;\n\n    }());\n\n    Slick.prototype.activateADA = function() {\n        var _ = this;\n\n        _.$slideTrack.find('.slick-active').attr({\n            'aria-hidden': 'false'\n        }).find('a, input, button, select').attr({\n            'tabindex': '0'\n        });\n\n    };\n\n    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            addBefore = index;\n            index = null;\n        } else if (index < 0 || (index >= _.slideCount)) {\n            return false;\n        }\n\n        _.unload();\n\n        if (typeof(index) === 'number') {\n            if (index === 0 && _.$slides.length === 0) {\n                $(markup).appendTo(_.$slideTrack);\n            } else if (addBefore) {\n                $(markup).insertBefore(_.$slides.eq(index));\n            } else {\n                $(markup).insertAfter(_.$slides.eq(index));\n            }\n        } else {\n            if (addBefore === true) {\n                $(markup).prependTo(_.$slideTrack);\n            } else {\n                $(markup).appendTo(_.$slideTrack);\n            }\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slides.each(function(index, element) {\n            $(element).attr('data-slick-index', index);\n        });\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.animateHeight = function() {\n        var _ = this;\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.animate({\n                height: targetHeight\n            }, _.options.speed);\n        }\n    };\n\n    Slick.prototype.animateSlide = function(targetLeft, callback) {\n\n        var animProps = {},\n            _ = this;\n\n        _.animateHeight();\n\n        if (_.options.rtl === true && _.options.vertical === false) {\n            targetLeft = -targetLeft;\n        }\n        if (_.transformsEnabled === false) {\n            if (_.options.vertical === false) {\n                _.$slideTrack.animate({\n                    left: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            } else {\n                _.$slideTrack.animate({\n                    top: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            }\n\n        } else {\n\n            if (_.cssTransitions === false) {\n                if (_.options.rtl === true) {\n                    _.currentLeft = -(_.currentLeft);\n                }\n                $({\n                    animStart: _.currentLeft\n                }).animate({\n                    animStart: targetLeft\n                }, {\n                    duration: _.options.speed,\n                    easing: _.options.easing,\n                    step: function(now) {\n                        now = Math.ceil(now);\n                        if (_.options.vertical === false) {\n                            animProps[_.animType] = 'translate(' +\n                                now + 'px, 0px)';\n                            _.$slideTrack.css(animProps);\n                        } else {\n                            animProps[_.animType] = 'translate(0px,' +\n                                now + 'px)';\n                            _.$slideTrack.css(animProps);\n                        }\n                    },\n                    complete: function() {\n                        if (callback) {\n                            callback.call();\n                        }\n                    }\n                });\n\n            } else {\n\n                _.applyTransition();\n                targetLeft = Math.ceil(targetLeft);\n\n                if (_.options.vertical === false) {\n                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\n                } else {\n                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\n                }\n                _.$slideTrack.css(animProps);\n\n                if (callback) {\n                    setTimeout(function() {\n\n                        _.disableTransition();\n\n                        callback.call();\n                    }, _.options.speed);\n                }\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.getNavTarget = function() {\n\n        var _ = this,\n            asNavFor = _.options.asNavFor;\n\n        if ( asNavFor && asNavFor !== null ) {\n            asNavFor = $(asNavFor).not(_.$slider);\n        }\n\n        return asNavFor;\n\n    };\n\n    Slick.prototype.asNavFor = function(index) {\n\n        var _ = this,\n            asNavFor = _.getNavTarget();\n\n        if ( asNavFor !== null && typeof asNavFor === 'object' ) {\n            asNavFor.each(function() {\n                var target = $(this).slick('getSlick');\n                if(!target.unslicked) {\n                    target.slideHandler(index, true);\n                }\n            });\n        }\n\n    };\n\n    Slick.prototype.applyTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        if (_.options.fade === false) {\n            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\n        } else {\n            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\n        }\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.autoPlay = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        if ( _.slideCount > _.options.slidesToShow ) {\n            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );\n        }\n\n    };\n\n    Slick.prototype.autoPlayClear = function() {\n\n        var _ = this;\n\n        if (_.autoPlayTimer) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n    };\n\n    Slick.prototype.autoPlayIterator = function() {\n\n        var _ = this,\n            slideTo = _.currentSlide + _.options.slidesToScroll;\n\n        if ( !_.paused && !_.interrupted && !_.focussed ) {\n\n            if ( _.options.infinite === false ) {\n\n                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {\n                    _.direction = 0;\n                }\n\n                else if ( _.direction === 0 ) {\n\n                    slideTo = _.currentSlide - _.options.slidesToScroll;\n\n                    if ( _.currentSlide - 1 === 0 ) {\n                        _.direction = 1;\n                    }\n\n                }\n\n            }\n\n            _.slideHandler( slideTo );\n\n        }\n\n    };\n\n    Slick.prototype.buildArrows = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true ) {\n\n            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\n            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\n\n            if( _.slideCount > _.options.slidesToShow ) {\n\n                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n\n                if (_.htmlExpr.test(_.options.prevArrow)) {\n                    _.$prevArrow.prependTo(_.options.appendArrows);\n                }\n\n                if (_.htmlExpr.test(_.options.nextArrow)) {\n                    _.$nextArrow.appendTo(_.options.appendArrows);\n                }\n\n                if (_.options.infinite !== true) {\n                    _.$prevArrow\n                        .addClass('slick-disabled')\n                        .attr('aria-disabled', 'true');\n                }\n\n            } else {\n\n                _.$prevArrow.add( _.$nextArrow )\n\n                    .addClass('slick-hidden')\n                    .attr({\n                        'aria-disabled': 'true',\n                        'tabindex': '-1'\n                    });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.buildDots = function() {\n\n        var _ = this,\n            i, dot;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$slider.addClass('slick-dotted');\n\n            dot = $('<ul />').addClass(_.options.dotsClass);\n\n            for (i = 0; i <= _.getDotCount(); i += 1) {\n                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));\n            }\n\n            _.$dots = dot.appendTo(_.options.appendDots);\n\n            _.$dots.find('li').first().addClass('slick-active');\n\n        }\n\n    };\n\n    Slick.prototype.buildOut = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slider\n                .children( _.options.slide + ':not(.slick-cloned)')\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        _.$slides.each(function(index, element) {\n            $(element)\n                .attr('data-slick-index', index)\n                .data('originalStyling', $(element).attr('style') || '');\n        });\n\n        _.$slider.addClass('slick-slider');\n\n        _.$slideTrack = (_.slideCount === 0) ?\n            $('<div class=\"slick-track\"/>').appendTo(_.$slider) :\n            _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n\n        _.$list = _.$slideTrack.wrap(\n            '<div class=\"slick-list\"/>').parent();\n        _.$slideTrack.css('opacity', 0);\n\n        if (_.options.centerMode === true || _.options.swipeToSlide === true) {\n            _.options.slidesToScroll = 1;\n        }\n\n        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\n\n        _.setupInfinite();\n\n        _.buildArrows();\n\n        _.buildDots();\n\n        _.updateDots();\n\n\n        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        if (_.options.draggable === true) {\n            _.$list.addClass('draggable');\n        }\n\n    };\n\n    Slick.prototype.buildRows = function() {\n\n        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\n\n        newSlides = document.createDocumentFragment();\n        originalSlides = _.$slider.children();\n\n        if(_.options.rows > 0) {\n\n            slidesPerSection = _.options.slidesPerRow * _.options.rows;\n            numOfSlides = Math.ceil(\n                originalSlides.length / slidesPerSection\n            );\n\n            for(a = 0; a < numOfSlides; a++){\n                var slide = document.createElement('div');\n                for(b = 0; b < _.options.rows; b++) {\n                    var row = document.createElement('div');\n                    for(c = 0; c < _.options.slidesPerRow; c++) {\n                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\n                        if (originalSlides.get(target)) {\n                            row.appendChild(originalSlides.get(target));\n                        }\n                    }\n                    slide.appendChild(row);\n                }\n                newSlides.appendChild(slide);\n            }\n\n            _.$slider.empty().append(newSlides);\n            _.$slider.children().children().children()\n                .css({\n                    'width':(100 / _.options.slidesPerRow) + '%',\n                    'display': 'inline-block'\n                });\n\n        }\n\n    };\n\n    Slick.prototype.checkResponsive = function(initial, forceUpdate) {\n\n        var _ = this,\n            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;\n        var sliderWidth = _.$slider.width();\n        var windowWidth = window.innerWidth || $(window).width();\n\n        if (_.respondTo === 'window') {\n            respondToWidth = windowWidth;\n        } else if (_.respondTo === 'slider') {\n            respondToWidth = sliderWidth;\n        } else if (_.respondTo === 'min') {\n            respondToWidth = Math.min(windowWidth, sliderWidth);\n        }\n\n        if ( _.options.responsive &&\n            _.options.responsive.length &&\n            _.options.responsive !== null) {\n\n            targetBreakpoint = null;\n\n            for (breakpoint in _.breakpoints) {\n                if (_.breakpoints.hasOwnProperty(breakpoint)) {\n                    if (_.originalSettings.mobileFirst === false) {\n                        if (respondToWidth < _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    } else {\n                        if (respondToWidth > _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    }\n                }\n            }\n\n            if (targetBreakpoint !== null) {\n                if (_.activeBreakpoint !== null) {\n                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\n                        _.activeBreakpoint =\n                            targetBreakpoint;\n                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                            _.unslick(targetBreakpoint);\n                        } else {\n                            _.options = $.extend({}, _.originalSettings,\n                                _.breakpointSettings[\n                                    targetBreakpoint]);\n                            if (initial === true) {\n                                _.currentSlide = _.options.initialSlide;\n                            }\n                            _.refresh(initial);\n                        }\n                        triggerBreakpoint = targetBreakpoint;\n                    }\n                } else {\n                    _.activeBreakpoint = targetBreakpoint;\n                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                        _.unslick(targetBreakpoint);\n                    } else {\n                        _.options = $.extend({}, _.originalSettings,\n                            _.breakpointSettings[\n                                targetBreakpoint]);\n                        if (initial === true) {\n                            _.currentSlide = _.options.initialSlide;\n                        }\n                        _.refresh(initial);\n                    }\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            } else {\n                if (_.activeBreakpoint !== null) {\n                    _.activeBreakpoint = null;\n                    _.options = _.originalSettings;\n                    if (initial === true) {\n                        _.currentSlide = _.options.initialSlide;\n                    }\n                    _.refresh(initial);\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            }\n\n            // only trigger breakpoints during an actual break. not on initialize.\n            if( !initial && triggerBreakpoint !== false ) {\n                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\n            }\n        }\n\n    };\n\n    Slick.prototype.changeSlide = function(event, dontAnimate) {\n\n        var _ = this,\n            $target = $(event.currentTarget),\n            indexOffset, slideOffset, unevenOffset;\n\n        // If target is a link, prevent default action.\n        if($target.is('a')) {\n            event.preventDefault();\n        }\n\n        // If target is not the <li> element (ie: a child), find the <li>.\n        if(!$target.is('li')) {\n            $target = $target.closest('li');\n        }\n\n        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\n        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\n\n        switch (event.data.message) {\n\n            case 'previous':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'next':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'index':\n                var index = event.data.index === 0 ? 0 :\n                    event.data.index || $target.index() * _.options.slidesToScroll;\n\n                _.slideHandler(_.checkNavigable(index), false, dontAnimate);\n                $target.children().trigger('focus');\n                break;\n\n            default:\n                return;\n        }\n\n    };\n\n    Slick.prototype.checkNavigable = function(index) {\n\n        var _ = this,\n            navigables, prevNavigable;\n\n        navigables = _.getNavigableIndexes();\n        prevNavigable = 0;\n        if (index > navigables[navigables.length - 1]) {\n            index = navigables[navigables.length - 1];\n        } else {\n            for (var n in navigables) {\n                if (index < navigables[n]) {\n                    index = prevNavigable;\n                    break;\n                }\n                prevNavigable = navigables[n];\n            }\n        }\n\n        return index;\n    };\n\n    Slick.prototype.cleanUpEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots && _.$dots !== null) {\n\n            $('li', _.$dots)\n                .off('click.slick', _.changeSlide)\n                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))\n                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n            if (_.options.accessibility === true) {\n                _.$dots.off('keydown.slick', _.keyHandler);\n            }\n        }\n\n        _.$slider.off('focus.slick blur.slick');\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\n            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);\n                _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);\n            }\n        }\n\n        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\n        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\n        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\n        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\n\n        _.$list.off('click.slick', _.clickHandler);\n\n        $(document).off(_.visibilityChange, _.visibility);\n\n        _.cleanUpSlideEvents();\n\n        if (_.options.accessibility === true) {\n            _.$list.off('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().off('click.slick', _.selectHandler);\n        }\n\n        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\n\n        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\n\n        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\n\n        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\n\n    };\n\n    Slick.prototype.cleanUpSlideEvents = function() {\n\n        var _ = this;\n\n        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));\n        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n    };\n\n    Slick.prototype.cleanUpRows = function() {\n\n        var _ = this, originalSlides;\n\n        if(_.options.rows > 0) {\n            originalSlides = _.$slides.children().children();\n            originalSlides.removeAttr('style');\n            _.$slider.empty().append(originalSlides);\n        }\n\n    };\n\n    Slick.prototype.clickHandler = function(event) {\n\n        var _ = this;\n\n        if (_.shouldClick === false) {\n            event.stopImmediatePropagation();\n            event.stopPropagation();\n            event.preventDefault();\n        }\n\n    };\n\n    Slick.prototype.destroy = function(refresh) {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        _.touchObject = {};\n\n        _.cleanUpEvents();\n\n        $('.slick-cloned', _.$slider).detach();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n        if ( _.$prevArrow && _.$prevArrow.length ) {\n\n            _.$prevArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css('display','');\n\n            if ( _.htmlExpr.test( _.options.prevArrow )) {\n                _.$prevArrow.remove();\n            }\n        }\n\n        if ( _.$nextArrow && _.$nextArrow.length ) {\n\n            _.$nextArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css('display','');\n\n            if ( _.htmlExpr.test( _.options.nextArrow )) {\n                _.$nextArrow.remove();\n            }\n        }\n\n\n        if (_.$slides) {\n\n            _.$slides\n                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')\n                .removeAttr('aria-hidden')\n                .removeAttr('data-slick-index')\n                .each(function(){\n                    $(this).attr('style', $(this).data('originalStyling'));\n                });\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slideTrack.detach();\n\n            _.$list.detach();\n\n            _.$slider.append(_.$slides);\n        }\n\n        _.cleanUpRows();\n\n        _.$slider.removeClass('slick-slider');\n        _.$slider.removeClass('slick-initialized');\n        _.$slider.removeClass('slick-dotted');\n\n        _.unslicked = true;\n\n        if(!refresh) {\n            _.$slider.trigger('destroy', [_]);\n        }\n\n    };\n\n    Slick.prototype.disableTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        transition[_.transitionType] = '';\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.fadeSlide = function(slideIndex, callback) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).css({\n                zIndex: _.options.zIndex\n            });\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 1\n            }, _.options.speed, _.options.easing, callback);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 1,\n                zIndex: _.options.zIndex\n            });\n\n            if (callback) {\n                setTimeout(function() {\n\n                    _.disableTransition(slideIndex);\n\n                    callback.call();\n                }, _.options.speed);\n            }\n\n        }\n\n    };\n\n    Slick.prototype.fadeSlideOut = function(slideIndex) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            }, _.options.speed, _.options.easing);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            });\n\n        }\n\n    };\n\n    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\n\n        var _ = this;\n\n        if (filter !== null) {\n\n            _.$slidesCache = _.$slides;\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.focusHandler = function() {\n\n        var _ = this;\n\n        _.$slider\n            .off('focus.slick blur.slick')\n            .on('focus.slick blur.slick', '*', function(event) {\n\n            event.stopImmediatePropagation();\n            var $sf = $(this);\n\n            setTimeout(function() {\n\n                if( _.options.pauseOnFocus ) {\n                    _.focussed = $sf.is(':focus');\n                    _.autoPlay();\n                }\n\n            }, 0);\n\n        });\n    };\n\n    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\n\n        var _ = this;\n        return _.currentSlide;\n\n    };\n\n    Slick.prototype.getDotCount = function() {\n\n        var _ = this;\n\n        var breakPoint = 0;\n        var counter = 0;\n        var pagerQty = 0;\n\n        if (_.options.infinite === true) {\n            if (_.slideCount <= _.options.slidesToShow) {\n                 ++pagerQty;\n            } else {\n                while (breakPoint < _.slideCount) {\n                    ++pagerQty;\n                    breakPoint = counter + _.options.slidesToScroll;\n                    counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n                }\n            }\n        } else if (_.options.centerMode === true) {\n            pagerQty = _.slideCount;\n        } else if(!_.options.asNavFor) {\n            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);\n        }else {\n            while (breakPoint < _.slideCount) {\n                ++pagerQty;\n                breakPoint = counter + _.options.slidesToScroll;\n                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n            }\n        }\n\n        return pagerQty - 1;\n\n    };\n\n    Slick.prototype.getLeft = function(slideIndex) {\n\n        var _ = this,\n            targetLeft,\n            verticalHeight,\n            verticalOffset = 0,\n            targetSlide,\n            coef;\n\n        _.slideOffset = 0;\n        verticalHeight = _.$slides.first().outerHeight(true);\n\n        if (_.options.infinite === true) {\n            if (_.slideCount > _.options.slidesToShow) {\n                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\n                coef = -1\n\n                if (_.options.vertical === true && _.options.centerMode === true) {\n                    if (_.options.slidesToShow === 2) {\n                        coef = -1.5;\n                    } else if (_.options.slidesToShow === 1) {\n                        coef = -2\n                    }\n                }\n                verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;\n            }\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\n                    if (slideIndex > _.slideCount) {\n                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\n                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\n                    } else {\n                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\n                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\n                    }\n                }\n            }\n        } else {\n            if (slideIndex + _.options.slidesToShow > _.slideCount) {\n                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\n                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\n            }\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.slideOffset = 0;\n            verticalOffset = 0;\n        }\n\n        if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {\n            _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);\n        } else if (_.options.centerMode === true && _.options.infinite === true) {\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\n        } else if (_.options.centerMode === true) {\n            _.slideOffset = 0;\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\n        }\n\n        if (_.options.vertical === false) {\n            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\n        } else {\n            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\n        }\n\n        if (_.options.variableWidth === true) {\n\n            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n            } else {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\n            }\n\n            if (_.options.rtl === true) {\n                if (targetSlide[0]) {\n                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n                } else {\n                    targetLeft =  0;\n                }\n            } else {\n                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n            }\n\n            if (_.options.centerMode === true) {\n                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n                } else {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\n                }\n\n                if (_.options.rtl === true) {\n                    if (targetSlide[0]) {\n                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n                    } else {\n                        targetLeft =  0;\n                    }\n                } else {\n                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n                }\n\n                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\n            }\n        }\n\n        return targetLeft;\n\n    };\n\n    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\n\n        var _ = this;\n\n        return _.options[option];\n\n    };\n\n    Slick.prototype.getNavigableIndexes = function() {\n\n        var _ = this,\n            breakPoint = 0,\n            counter = 0,\n            indexes = [],\n            max;\n\n        if (_.options.infinite === false) {\n            max = _.slideCount;\n        } else {\n            breakPoint = _.options.slidesToScroll * -1;\n            counter = _.options.slidesToScroll * -1;\n            max = _.slideCount * 2;\n        }\n\n        while (breakPoint < max) {\n            indexes.push(breakPoint);\n            breakPoint = counter + _.options.slidesToScroll;\n            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n        }\n\n        return indexes;\n\n    };\n\n    Slick.prototype.getSlick = function() {\n\n        return this;\n\n    };\n\n    Slick.prototype.getSlideCount = function() {\n\n        var _ = this,\n            slidesTraversed, swipedSlide, centerOffset;\n\n        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\n\n        if (_.options.swipeToSlide === true) {\n            _.$slideTrack.find('.slick-slide').each(function(index, slide) {\n                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {\n                    swipedSlide = slide;\n                    return false;\n                }\n            });\n\n            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\n\n            return slidesTraversed;\n\n        } else {\n            return _.options.slidesToScroll;\n        }\n\n    };\n\n    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'index',\n                index: parseInt(slide)\n            }\n        }, dontAnimate);\n\n    };\n\n    Slick.prototype.init = function(creation) {\n\n        var _ = this;\n\n        if (!$(_.$slider).hasClass('slick-initialized')) {\n\n            $(_.$slider).addClass('slick-initialized');\n\n            _.buildRows();\n            _.buildOut();\n            _.setProps();\n            _.startLoad();\n            _.loadSlider();\n            _.initializeEvents();\n            _.updateArrows();\n            _.updateDots();\n            _.checkResponsive(true);\n            _.focusHandler();\n\n        }\n\n        if (creation) {\n            _.$slider.trigger('init', [_]);\n        }\n\n        if (_.options.accessibility === true) {\n            _.initADA();\n        }\n\n        if ( _.options.autoplay ) {\n\n            _.paused = false;\n            _.autoPlay();\n\n        }\n\n    };\n\n    Slick.prototype.initADA = function() {\n        var _ = this,\n                numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),\n                tabControlIndexes = _.getNavigableIndexes().filter(function(val) {\n                    return (val >= 0) && (val < _.slideCount);\n                });\n\n        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\n            'aria-hidden': 'true',\n            'tabindex': '-1'\n        }).find('a, input, button, select').attr({\n            'tabindex': '-1'\n        });\n\n        if (_.$dots !== null) {\n            _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\n                var slideControlIndex = tabControlIndexes.indexOf(i);\n\n                $(this).attr({\n                    'role': 'tabpanel',\n                    'id': 'slick-slide' + _.instanceUid + i,\n                    'tabindex': -1\n                });\n\n                if (slideControlIndex !== -1) {\n                   var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex\n                   if ($('#' + ariaButtonControl).length) {\n                     $(this).attr({\n                         'aria-describedby': ariaButtonControl\n                     });\n                   }\n                }\n            });\n\n            _.$dots.attr('role', 'tablist').find('li').each(function(i) {\n                var mappedSlideIndex = tabControlIndexes[i];\n\n                $(this).attr({\n                    'role': 'presentation'\n                });\n\n                $(this).find('button').first().attr({\n                    'role': 'tab',\n                    'id': 'slick-slide-control' + _.instanceUid + i,\n                    'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,\n                    'aria-label': (i + 1) + ' of ' + numDotGroups,\n                    'aria-selected': null,\n                    'tabindex': '-1'\n                });\n\n            }).eq(_.currentSlide).find('button').attr({\n                'aria-selected': 'true',\n                'tabindex': '0'\n            }).end();\n        }\n\n        for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {\n          if (_.options.focusOnChange) {\n            _.$slides.eq(i).attr({'tabindex': '0'});\n          } else {\n            _.$slides.eq(i).removeAttr('tabindex');\n          }\n        }\n\n        _.activateADA();\n\n    };\n\n    Slick.prototype.initArrowEvents = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow\n               .off('click.slick')\n               .on('click.slick', {\n                    message: 'previous'\n               }, _.changeSlide);\n            _.$nextArrow\n               .off('click.slick')\n               .on('click.slick', {\n                    message: 'next'\n               }, _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$prevArrow.on('keydown.slick', _.keyHandler);\n                _.$nextArrow.on('keydown.slick', _.keyHandler);\n            }\n        }\n\n    };\n\n    Slick.prototype.initDotEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n            $('li', _.$dots).on('click.slick', {\n                message: 'index'\n            }, _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$dots.on('keydown.slick', _.keyHandler);\n            }\n        }\n\n        if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {\n\n            $('li', _.$dots)\n                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))\n                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n        }\n\n    };\n\n    Slick.prototype.initSlideEvents = function() {\n\n        var _ = this;\n\n        if ( _.options.pauseOnHover ) {\n\n            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));\n            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n        }\n\n    };\n\n    Slick.prototype.initializeEvents = function() {\n\n        var _ = this;\n\n        _.initArrowEvents();\n\n        _.initDotEvents();\n        _.initSlideEvents();\n\n        _.$list.on('touchstart.slick mousedown.slick', {\n            action: 'start'\n        }, _.swipeHandler);\n        _.$list.on('touchmove.slick mousemove.slick', {\n            action: 'move'\n        }, _.swipeHandler);\n        _.$list.on('touchend.slick mouseup.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n        _.$list.on('touchcancel.slick mouseleave.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n\n        _.$list.on('click.slick', _.clickHandler);\n\n        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\n\n        if (_.options.accessibility === true) {\n            _.$list.on('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\n\n        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\n\n        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\n\n        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\n        $(_.setPosition);\n\n    };\n\n    Slick.prototype.initUI = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.show();\n            _.$nextArrow.show();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.show();\n\n        }\n\n    };\n\n    Slick.prototype.keyHandler = function(event) {\n\n        var _ = this;\n         //Dont slide if the cursor is inside the form fields and arrow keys are pressed\n        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\n            if (event.keyCode === 37 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: _.options.rtl === true ? 'next' :  'previous'\n                    }\n                });\n            } else if (event.keyCode === 39 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: _.options.rtl === true ? 'previous' : 'next'\n                    }\n                });\n            }\n        }\n\n    };\n\n    Slick.prototype.lazyLoad = function() {\n\n        var _ = this,\n            loadRange, cloneRange, rangeStart, rangeEnd;\n\n        function loadImages(imagesScope) {\n\n            $('img[data-lazy]', imagesScope).each(function() {\n\n                var image = $(this),\n                    imageSource = $(this).attr('data-lazy'),\n                    imageSrcSet = $(this).attr('data-srcset'),\n                    imageSizes  = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),\n                    imageToLoad = document.createElement('img');\n\n                imageToLoad.onload = function() {\n\n                    image\n                        .animate({ opacity: 0 }, 100, function() {\n\n                            if (imageSrcSet) {\n                                image\n                                    .attr('srcset', imageSrcSet );\n\n                                if (imageSizes) {\n                                    image\n                                        .attr('sizes', imageSizes );\n                                }\n                            }\n\n                            image\n                                .attr('src', imageSource)\n                                .animate({ opacity: 1 }, 200, function() {\n                                    image\n                                        .removeAttr('data-lazy data-srcset data-sizes')\n                                        .removeClass('slick-loading');\n                                });\n                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n                        });\n\n                };\n\n                imageToLoad.onerror = function() {\n\n                    image\n                        .removeAttr( 'data-lazy' )\n                        .removeClass( 'slick-loading' )\n                        .addClass( 'slick-lazyload-error' );\n\n                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n                };\n\n                imageToLoad.src = imageSource;\n\n            });\n\n        }\n\n        if (_.options.centerMode === true) {\n            if (_.options.infinite === true) {\n                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\n                rangeEnd = rangeStart + _.options.slidesToShow + 2;\n            } else {\n                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\n                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\n            }\n        } else {\n            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\n            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);\n            if (_.options.fade === true) {\n                if (rangeStart > 0) rangeStart--;\n                if (rangeEnd <= _.slideCount) rangeEnd++;\n            }\n        }\n\n        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\n\n        if (_.options.lazyLoad === 'anticipated') {\n            var prevSlide = rangeStart - 1,\n                nextSlide = rangeEnd,\n                $slides = _.$slider.find('.slick-slide');\n\n            for (var i = 0; i < _.options.slidesToScroll; i++) {\n                if (prevSlide < 0) prevSlide = _.slideCount - 1;\n                loadRange = loadRange.add($slides.eq(prevSlide));\n                loadRange = loadRange.add($slides.eq(nextSlide));\n                prevSlide--;\n                nextSlide++;\n            }\n        }\n\n        loadImages(loadRange);\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-slide');\n            loadImages(cloneRange);\n        } else\n        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\n            loadImages(cloneRange);\n        } else if (_.currentSlide === 0) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\n            loadImages(cloneRange);\n        }\n\n    };\n\n    Slick.prototype.loadSlider = function() {\n\n        var _ = this;\n\n        _.setPosition();\n\n        _.$slideTrack.css({\n            opacity: 1\n        });\n\n        _.$slider.removeClass('slick-loading');\n\n        _.initUI();\n\n        if (_.options.lazyLoad === 'progressive') {\n            _.progressiveLazyLoad();\n        }\n\n    };\n\n    Slick.prototype.next = Slick.prototype.slickNext = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'next'\n            }\n        });\n\n    };\n\n    Slick.prototype.orientationChange = function() {\n\n        var _ = this;\n\n        _.checkResponsive();\n        _.setPosition();\n\n    };\n\n    Slick.prototype.pause = Slick.prototype.slickPause = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n        _.paused = true;\n\n    };\n\n    Slick.prototype.play = Slick.prototype.slickPlay = function() {\n\n        var _ = this;\n\n        _.autoPlay();\n        _.options.autoplay = true;\n        _.paused = false;\n        _.focussed = false;\n        _.interrupted = false;\n\n    };\n\n    Slick.prototype.postSlide = function(index) {\n\n        var _ = this;\n\n        if( !_.unslicked ) {\n\n            _.$slider.trigger('afterChange', [_, index]);\n\n            _.animating = false;\n\n            if (_.slideCount > _.options.slidesToShow) {\n                _.setPosition();\n            }\n\n            _.swipeLeft = null;\n\n            if ( _.options.autoplay ) {\n                _.autoPlay();\n            }\n\n            if (_.options.accessibility === true) {\n                _.initADA();\n\n                if (_.options.focusOnChange) {\n                    var $currentSlide = $(_.$slides.get(_.currentSlide));\n                    $currentSlide.attr('tabindex', 0).focus();\n                }\n            }\n\n        }\n\n    };\n\n    Slick.prototype.prev = Slick.prototype.slickPrev = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'previous'\n            }\n        });\n\n    };\n\n    Slick.prototype.preventDefault = function(event) {\n\n        event.preventDefault();\n\n    };\n\n    Slick.prototype.progressiveLazyLoad = function( tryCount ) {\n\n        tryCount = tryCount || 1;\n\n        var _ = this,\n            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),\n            image,\n            imageSource,\n            imageSrcSet,\n            imageSizes,\n            imageToLoad;\n\n        if ( $imgsToLoad.length ) {\n\n            image = $imgsToLoad.first();\n            imageSource = image.attr('data-lazy');\n            imageSrcSet = image.attr('data-srcset');\n            imageSizes  = image.attr('data-sizes') || _.$slider.attr('data-sizes');\n            imageToLoad = document.createElement('img');\n\n            imageToLoad.onload = function() {\n\n                if (imageSrcSet) {\n                    image\n                        .attr('srcset', imageSrcSet );\n\n                    if (imageSizes) {\n                        image\n                            .attr('sizes', imageSizes );\n                    }\n                }\n\n                image\n                    .attr( 'src', imageSource )\n                    .removeAttr('data-lazy data-srcset data-sizes')\n                    .removeClass('slick-loading');\n\n                if ( _.options.adaptiveHeight === true ) {\n                    _.setPosition();\n                }\n\n                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);\n                _.progressiveLazyLoad();\n\n            };\n\n            imageToLoad.onerror = function() {\n\n                if ( tryCount < 3 ) {\n\n                    /**\n                     * try to load the image 3 times,\n                     * leave a slight delay so we don't get\n                     * servers blocking the request.\n                     */\n                    setTimeout( function() {\n                        _.progressiveLazyLoad( tryCount + 1 );\n                    }, 500 );\n\n                } else {\n\n                    image\n                        .removeAttr( 'data-lazy' )\n                        .removeClass( 'slick-loading' )\n                        .addClass( 'slick-lazyload-error' );\n\n                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n                    _.progressiveLazyLoad();\n\n                }\n\n            };\n\n            imageToLoad.src = imageSource;\n\n        } else {\n\n            _.$slider.trigger('allImagesLoaded', [ _ ]);\n\n        }\n\n    };\n\n    Slick.prototype.refresh = function( initializing ) {\n\n        var _ = this, currentSlide, lastVisibleIndex;\n\n        lastVisibleIndex = _.slideCount - _.options.slidesToShow;\n\n        // in non-infinite sliders, we don't want to go past the\n        // last visible index.\n        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {\n            _.currentSlide = lastVisibleIndex;\n        }\n\n        // if less slides than to show, go to start.\n        if ( _.slideCount <= _.options.slidesToShow ) {\n            _.currentSlide = 0;\n\n        }\n\n        currentSlide = _.currentSlide;\n\n        _.destroy(true);\n\n        $.extend(_, _.initials, { currentSlide: currentSlide });\n\n        _.init();\n\n        if( !initializing ) {\n\n            _.changeSlide({\n                data: {\n                    message: 'index',\n                    index: currentSlide\n                }\n            }, false);\n\n        }\n\n    };\n\n    Slick.prototype.registerBreakpoints = function() {\n\n        var _ = this, breakpoint, currentBreakpoint, l,\n            responsiveSettings = _.options.responsive || null;\n\n        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {\n\n            _.respondTo = _.options.respondTo || 'window';\n\n            for ( breakpoint in responsiveSettings ) {\n\n                l = _.breakpoints.length-1;\n\n                if (responsiveSettings.hasOwnProperty(breakpoint)) {\n                    currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\n\n                    // loop through the breakpoints and cut out any existing\n                    // ones with the same breakpoint number, we don't want dupes.\n                    while( l >= 0 ) {\n                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {\n                            _.breakpoints.splice(l,1);\n                        }\n                        l--;\n                    }\n\n                    _.breakpoints.push(currentBreakpoint);\n                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\n\n                }\n\n            }\n\n            _.breakpoints.sort(function(a, b) {\n                return ( _.options.mobileFirst ) ? a-b : b-a;\n            });\n\n        }\n\n    };\n\n    Slick.prototype.reinit = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slideTrack\n                .children(_.options.slide)\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\n            _.currentSlide = _.currentSlide - _.options.slidesToScroll;\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.currentSlide = 0;\n        }\n\n        _.registerBreakpoints();\n\n        _.setProps();\n        _.setupInfinite();\n        _.buildArrows();\n        _.updateArrows();\n        _.initArrowEvents();\n        _.buildDots();\n        _.updateDots();\n        _.initDotEvents();\n        _.cleanUpSlideEvents();\n        _.initSlideEvents();\n\n        _.checkResponsive(false, true);\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        _.setPosition();\n        _.focusHandler();\n\n        _.paused = !_.options.autoplay;\n        _.autoPlay();\n\n        _.$slider.trigger('reInit', [_]);\n\n    };\n\n    Slick.prototype.resize = function() {\n\n        var _ = this;\n\n        if ($(window).width() !== _.windowWidth) {\n            clearTimeout(_.windowDelay);\n            _.windowDelay = window.setTimeout(function() {\n                _.windowWidth = $(window).width();\n                _.checkResponsive();\n                if( !_.unslicked ) { _.setPosition(); }\n            }, 50);\n        }\n    };\n\n    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            removeBefore = index;\n            index = removeBefore === true ? 0 : _.slideCount - 1;\n        } else {\n            index = removeBefore === true ? --index : index;\n        }\n\n        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\n            return false;\n        }\n\n        _.unload();\n\n        if (removeAll === true) {\n            _.$slideTrack.children().remove();\n        } else {\n            _.$slideTrack.children(this.options.slide).eq(index).remove();\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.setCSS = function(position) {\n\n        var _ = this,\n            positionProps = {},\n            x, y;\n\n        if (_.options.rtl === true) {\n            position = -position;\n        }\n        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\n        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\n\n        positionProps[_.positionProp] = position;\n\n        if (_.transformsEnabled === false) {\n            _.$slideTrack.css(positionProps);\n        } else {\n            positionProps = {};\n            if (_.cssTransitions === false) {\n                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\n                _.$slideTrack.css(positionProps);\n            } else {\n                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\n                _.$slideTrack.css(positionProps);\n            }\n        }\n\n    };\n\n    Slick.prototype.setDimensions = function() {\n\n        var _ = this;\n\n        if (_.options.vertical === false) {\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: ('0px ' + _.options.centerPadding)\n                });\n            }\n        } else {\n            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: (_.options.centerPadding + ' 0px')\n                });\n            }\n        }\n\n        _.listWidth = _.$list.width();\n        _.listHeight = _.$list.height();\n\n\n        if (_.options.vertical === false && _.options.variableWidth === false) {\n            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\n            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\n\n        } else if (_.options.variableWidth === true) {\n            _.$slideTrack.width(5000 * _.slideCount);\n        } else {\n            _.slideWidth = Math.ceil(_.listWidth);\n            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\n        }\n\n        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\n        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\n\n    };\n\n    Slick.prototype.setFade = function() {\n\n        var _ = this,\n            targetLeft;\n\n        _.$slides.each(function(index, element) {\n            targetLeft = (_.slideWidth * index) * -1;\n            if (_.options.rtl === true) {\n                $(element).css({\n                    position: 'relative',\n                    right: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            } else {\n                $(element).css({\n                    position: 'relative',\n                    left: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            }\n        });\n\n        _.$slides.eq(_.currentSlide).css({\n            zIndex: _.options.zIndex - 1,\n            opacity: 1\n        });\n\n    };\n\n    Slick.prototype.setHeight = function() {\n\n        var _ = this;\n\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.css('height', targetHeight);\n        }\n\n    };\n\n    Slick.prototype.setOption =\n    Slick.prototype.slickSetOption = function() {\n\n        /**\n         * accepts arguments in format of:\n         *\n         *  - for changing a single option's value:\n         *     .slick(\"setOption\", option, value, refresh )\n         *\n         *  - for changing a set of responsive options:\n         *     .slick(\"setOption\", 'responsive', [{}, ...], refresh )\n         *\n         *  - for updating multiple values at once (not responsive)\n         *     .slick(\"setOption\", { 'option': value, ... }, refresh )\n         */\n\n        var _ = this, l, item, option, value, refresh = false, type;\n\n        if( $.type( arguments[0] ) === 'object' ) {\n\n            option =  arguments[0];\n            refresh = arguments[1];\n            type = 'multiple';\n\n        } else if ( $.type( arguments[0] ) === 'string' ) {\n\n            option =  arguments[0];\n            value = arguments[1];\n            refresh = arguments[2];\n\n            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {\n\n                type = 'responsive';\n\n            } else if ( typeof arguments[1] !== 'undefined' ) {\n\n                type = 'single';\n\n            }\n\n        }\n\n        if ( type === 'single' ) {\n\n            _.options[option] = value;\n\n\n        } else if ( type === 'multiple' ) {\n\n            $.each( option , function( opt, val ) {\n\n                _.options[opt] = val;\n\n            });\n\n\n        } else if ( type === 'responsive' ) {\n\n            for ( item in value ) {\n\n                if( $.type( _.options.responsive ) !== 'array' ) {\n\n                    _.options.responsive = [ value[item] ];\n\n                } else {\n\n                    l = _.options.responsive.length-1;\n\n                    // loop through the responsive object and splice out duplicates.\n                    while( l >= 0 ) {\n\n                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {\n\n                            _.options.responsive.splice(l,1);\n\n                        }\n\n                        l--;\n\n                    }\n\n                    _.options.responsive.push( value[item] );\n\n                }\n\n            }\n\n        }\n\n        if ( refresh ) {\n\n            _.unload();\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.setPosition = function() {\n\n        var _ = this;\n\n        _.setDimensions();\n\n        _.setHeight();\n\n        if (_.options.fade === false) {\n            _.setCSS(_.getLeft(_.currentSlide));\n        } else {\n            _.setFade();\n        }\n\n        _.$slider.trigger('setPosition', [_]);\n\n    };\n\n    Slick.prototype.setProps = function() {\n\n        var _ = this,\n            bodyStyle = document.body.style;\n\n        _.positionProp = _.options.vertical === true ? 'top' : 'left';\n\n        if (_.positionProp === 'top') {\n            _.$slider.addClass('slick-vertical');\n        } else {\n            _.$slider.removeClass('slick-vertical');\n        }\n\n        if (bodyStyle.WebkitTransition !== undefined ||\n            bodyStyle.MozTransition !== undefined ||\n            bodyStyle.msTransition !== undefined) {\n            if (_.options.useCSS === true) {\n                _.cssTransitions = true;\n            }\n        }\n\n        if ( _.options.fade ) {\n            if ( typeof _.options.zIndex === 'number' ) {\n                if( _.options.zIndex < 3 ) {\n                    _.options.zIndex = 3;\n                }\n            } else {\n                _.options.zIndex = _.defaults.zIndex;\n            }\n        }\n\n        if (bodyStyle.OTransform !== undefined) {\n            _.animType = 'OTransform';\n            _.transformType = '-o-transform';\n            _.transitionType = 'OTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.MozTransform !== undefined) {\n            _.animType = 'MozTransform';\n            _.transformType = '-moz-transform';\n            _.transitionType = 'MozTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.webkitTransform !== undefined) {\n            _.animType = 'webkitTransform';\n            _.transformType = '-webkit-transform';\n            _.transitionType = 'webkitTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.msTransform !== undefined) {\n            _.animType = 'msTransform';\n            _.transformType = '-ms-transform';\n            _.transitionType = 'msTransition';\n            if (bodyStyle.msTransform === undefined) _.animType = false;\n        }\n        if (bodyStyle.transform !== undefined && _.animType !== false) {\n            _.animType = 'transform';\n            _.transformType = 'transform';\n            _.transitionType = 'transition';\n        }\n        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);\n    };\n\n\n    Slick.prototype.setSlideClasses = function(index) {\n\n        var _ = this,\n            centerOffset, allSlides, indexOffset, remainder;\n\n        allSlides = _.$slider\n            .find('.slick-slide')\n            .removeClass('slick-active slick-center slick-current')\n            .attr('aria-hidden', 'true');\n\n        _.$slides\n            .eq(index)\n            .addClass('slick-current');\n\n        if (_.options.centerMode === true) {\n\n            var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;\n\n            centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n            if (_.options.infinite === true) {\n\n                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\n                    _.$slides\n                        .slice(index - centerOffset + evenCoef, index + centerOffset + 1)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    indexOffset = _.options.slidesToShow + index;\n                    allSlides\n                        .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n                if (index === 0) {\n\n                    allSlides\n                        .eq(allSlides.length - 1 - _.options.slidesToShow)\n                        .addClass('slick-center');\n\n                } else if (index === _.slideCount - 1) {\n\n                    allSlides\n                        .eq(_.options.slidesToShow)\n                        .addClass('slick-center');\n\n                }\n\n            }\n\n            _.$slides\n                .eq(index)\n                .addClass('slick-center');\n\n        } else {\n\n            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\n\n                _.$slides\n                    .slice(index, index + _.options.slidesToShow)\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else if (allSlides.length <= _.options.slidesToShow) {\n\n                allSlides\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else {\n\n                remainder = _.slideCount % _.options.slidesToShow;\n                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\n\n                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\n\n                    allSlides\n                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    allSlides\n                        .slice(indexOffset, indexOffset + _.options.slidesToShow)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n            }\n\n        }\n\n        if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {\n            _.lazyLoad();\n        }\n    };\n\n    Slick.prototype.setupInfinite = function() {\n\n        var _ = this,\n            i, slideIndex, infiniteCount;\n\n        if (_.options.fade === true) {\n            _.options.centerMode = false;\n        }\n\n        if (_.options.infinite === true && _.options.fade === false) {\n\n            slideIndex = null;\n\n            if (_.slideCount > _.options.slidesToShow) {\n\n                if (_.options.centerMode === true) {\n                    infiniteCount = _.options.slidesToShow + 1;\n                } else {\n                    infiniteCount = _.options.slidesToShow;\n                }\n\n                for (i = _.slideCount; i > (_.slideCount -\n                        infiniteCount); i -= 1) {\n                    slideIndex = i - 1;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex - _.slideCount)\n                        .prependTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                for (i = 0; i < infiniteCount  + _.slideCount; i += 1) {\n                    slideIndex = i;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex + _.slideCount)\n                        .appendTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\n                    $(this).attr('id', '');\n                });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.interrupt = function( toggle ) {\n\n        var _ = this;\n\n        if( !toggle ) {\n            _.autoPlay();\n        }\n        _.interrupted = toggle;\n\n    };\n\n    Slick.prototype.selectHandler = function(event) {\n\n        var _ = this;\n\n        var targetElement =\n            $(event.target).is('.slick-slide') ?\n                $(event.target) :\n                $(event.target).parents('.slick-slide');\n\n        var index = parseInt(targetElement.attr('data-slick-index'));\n\n        if (!index) index = 0;\n\n        if (_.slideCount <= _.options.slidesToShow) {\n\n            _.slideHandler(index, false, true);\n            return;\n\n        }\n\n        _.slideHandler(index);\n\n    };\n\n    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\n\n        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\n            _ = this, navTarget;\n\n        sync = sync || false;\n\n        if (_.animating === true && _.options.waitForAnimate === true) {\n            return;\n        }\n\n        if (_.options.fade === true && _.currentSlide === index) {\n            return;\n        }\n\n        if (sync === false) {\n            _.asNavFor(index);\n        }\n\n        targetSlide = index;\n        targetLeft = _.getLeft(targetSlide);\n        slideLeft = _.getLeft(_.currentSlide);\n\n        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\n\n        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        }\n\n        if ( _.options.autoplay ) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n        if (targetSlide < 0) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\n            } else {\n                animSlide = _.slideCount + targetSlide;\n            }\n        } else if (targetSlide >= _.slideCount) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = 0;\n            } else {\n                animSlide = targetSlide - _.slideCount;\n            }\n        } else {\n            animSlide = targetSlide;\n        }\n\n        _.animating = true;\n\n        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\n\n        oldSlide = _.currentSlide;\n        _.currentSlide = animSlide;\n\n        _.setSlideClasses(_.currentSlide);\n\n        if ( _.options.asNavFor ) {\n\n            navTarget = _.getNavTarget();\n            navTarget = navTarget.slick('getSlick');\n\n            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {\n                navTarget.setSlideClasses(_.currentSlide);\n            }\n\n        }\n\n        _.updateDots();\n        _.updateArrows();\n\n        if (_.options.fade === true) {\n            if (dontAnimate !== true) {\n\n                _.fadeSlideOut(oldSlide);\n\n                _.fadeSlide(animSlide, function() {\n                    _.postSlide(animSlide);\n                });\n\n            } else {\n                _.postSlide(animSlide);\n            }\n            _.animateHeight();\n            return;\n        }\n\n        if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n            _.animateSlide(targetLeft, function() {\n                _.postSlide(animSlide);\n            });\n        } else {\n            _.postSlide(animSlide);\n        }\n\n    };\n\n    Slick.prototype.startLoad = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.hide();\n            _.$nextArrow.hide();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.hide();\n\n        }\n\n        _.$slider.addClass('slick-loading');\n\n    };\n\n    Slick.prototype.swipeDirection = function() {\n\n        var xDist, yDist, r, swipeAngle, _ = this;\n\n        xDist = _.touchObject.startX - _.touchObject.curX;\n        yDist = _.touchObject.startY - _.touchObject.curY;\n        r = Math.atan2(yDist, xDist);\n\n        swipeAngle = Math.round(r * 180 / Math.PI);\n        if (swipeAngle < 0) {\n            swipeAngle = 360 - Math.abs(swipeAngle);\n        }\n\n        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\n            return (_.options.rtl === false ? 'right' : 'left');\n        }\n        if (_.options.verticalSwiping === true) {\n            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\n                return 'down';\n            } else {\n                return 'up';\n            }\n        }\n\n        return 'vertical';\n\n    };\n\n    Slick.prototype.swipeEnd = function(event) {\n\n        var _ = this,\n            slideCount,\n            direction;\n\n        _.dragging = false;\n        _.swiping = false;\n\n        if (_.scrolling) {\n            _.scrolling = false;\n            return false;\n        }\n\n        _.interrupted = false;\n        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;\n\n        if ( _.touchObject.curX === undefined ) {\n            return false;\n        }\n\n        if ( _.touchObject.edgeHit === true ) {\n            _.$slider.trigger('edge', [_, _.swipeDirection() ]);\n        }\n\n        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {\n\n            direction = _.swipeDirection();\n\n            switch ( direction ) {\n\n                case 'left':\n                case 'down':\n\n                    slideCount =\n                        _.options.swipeToSlide ?\n                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :\n                            _.currentSlide + _.getSlideCount();\n\n                    _.currentDirection = 0;\n\n                    break;\n\n                case 'right':\n                case 'up':\n\n                    slideCount =\n                        _.options.swipeToSlide ?\n                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :\n                            _.currentSlide - _.getSlideCount();\n\n                    _.currentDirection = 1;\n\n                    break;\n\n                default:\n\n\n            }\n\n            if( direction != 'vertical' ) {\n\n                _.slideHandler( slideCount );\n                _.touchObject = {};\n                _.$slider.trigger('swipe', [_, direction ]);\n\n            }\n\n        } else {\n\n            if ( _.touchObject.startX !== _.touchObject.curX ) {\n\n                _.slideHandler( _.currentSlide );\n                _.touchObject = {};\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.swipeHandler = function(event) {\n\n        var _ = this;\n\n        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\n            return;\n        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\n            return;\n        }\n\n        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\n            event.originalEvent.touches.length : 1;\n\n        _.touchObject.minSwipe = _.listWidth / _.options\n            .touchThreshold;\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.minSwipe = _.listHeight / _.options\n                .touchThreshold;\n        }\n\n        switch (event.data.action) {\n\n            case 'start':\n                _.swipeStart(event);\n                break;\n\n            case 'move':\n                _.swipeMove(event);\n                break;\n\n            case 'end':\n                _.swipeEnd(event);\n                break;\n\n        }\n\n    };\n\n    Slick.prototype.swipeMove = function(event) {\n\n        var _ = this,\n            edgeWasHit = false,\n            curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;\n\n        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n        if (!_.dragging || _.scrolling || touches && touches.length !== 1) {\n            return false;\n        }\n\n        curLeft = _.getLeft(_.currentSlide);\n\n        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\n        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\n\n        _.touchObject.swipeLength = Math.round(Math.sqrt(\n            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n\n        verticalSwipeLength = Math.round(Math.sqrt(\n            Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n\n        if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {\n            _.scrolling = true;\n            return false;\n        }\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.swipeLength = verticalSwipeLength;\n        }\n\n        swipeDirection = _.swipeDirection();\n\n        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\n            _.swiping = true;\n            event.preventDefault();\n        }\n\n        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\n        if (_.options.verticalSwiping === true) {\n            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\n        }\n\n\n        swipeLength = _.touchObject.swipeLength;\n\n        _.touchObject.edgeHit = false;\n\n        if (_.options.infinite === false) {\n            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {\n                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\n                _.touchObject.edgeHit = true;\n            }\n        }\n\n        if (_.options.vertical === false) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        } else {\n            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\n        }\n        if (_.options.verticalSwiping === true) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        }\n\n        if (_.options.fade === true || _.options.touchMove === false) {\n            return false;\n        }\n\n        if (_.animating === true) {\n            _.swipeLeft = null;\n            return false;\n        }\n\n        _.setCSS(_.swipeLeft);\n\n    };\n\n    Slick.prototype.swipeStart = function(event) {\n\n        var _ = this,\n            touches;\n\n        _.interrupted = true;\n\n        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\n            _.touchObject = {};\n            return false;\n        }\n\n        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\n            touches = event.originalEvent.touches[0];\n        }\n\n        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\n        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\n\n        _.dragging = true;\n\n    };\n\n    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\n\n        var _ = this;\n\n        if (_.$slidesCache !== null) {\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.unload = function() {\n\n        var _ = this;\n\n        $('.slick-cloned', _.$slider).remove();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\n            _.$prevArrow.remove();\n        }\n\n        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\n            _.$nextArrow.remove();\n        }\n\n        _.$slides\n            .removeClass('slick-slide slick-active slick-visible slick-current')\n            .attr('aria-hidden', 'true')\n            .css('width', '');\n\n    };\n\n    Slick.prototype.unslick = function(fromBreakpoint) {\n\n        var _ = this;\n        _.$slider.trigger('unslick', [_, fromBreakpoint]);\n        _.destroy();\n\n    };\n\n    Slick.prototype.updateArrows = function() {\n\n        var _ = this,\n            centerOffset;\n\n        centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n        if ( _.options.arrows === true &&\n            _.slideCount > _.options.slidesToShow &&\n            !_.options.infinite ) {\n\n            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            if (_.currentSlide === 0) {\n\n                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.updateDots = function() {\n\n        var _ = this;\n\n        if (_.$dots !== null) {\n\n            _.$dots\n                .find('li')\n                    .removeClass('slick-active')\n                    .end();\n\n            _.$dots\n                .find('li')\n                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\n                .addClass('slick-active');\n\n        }\n\n    };\n\n    Slick.prototype.visibility = function() {\n\n        var _ = this;\n\n        if ( _.options.autoplay ) {\n\n            if ( document[_.hidden] ) {\n\n                _.interrupted = true;\n\n            } else {\n\n                _.interrupted = false;\n\n            }\n\n        }\n\n    };\n\n    $.fn.slick = function() {\n        var _ = this,\n            opt = arguments[0],\n            args = Array.prototype.slice.call(arguments, 1),\n            l = _.length,\n            i,\n            ret;\n        for (i = 0; i < l; i++) {\n            if (typeof opt == 'object' || typeof opt == 'undefined')\n                _[i].slick = new Slick(_[i], opt);\n            else\n                ret = _[i].slick[opt].apply(_[i].slick, args);\n            if (typeof ret != 'undefined') return ret;\n        }\n        return _;\n    };\n\n}));\n","import 'slick-carousel';\n\ntype Events = {\n  elements: {\n    modules: HTMLElement[];\n  };\n  init: () => void;\n  bindEvents: () => void;\n  createSlider: (module: HTMLElement) => void;\n  handleResize: () => void;\n  equalizeHeights: (slider: JQuery<HTMLElement>) => void;\n  updateNavigation: (module: HTMLElement, currentSlide: number) => void;\n};\n\nconst events: Events = {\n  elements: {\n    modules: Array.from(document.querySelectorAll<HTMLElement>('.module--events'))\n  },\n\n  init() {\n    this.bindEvents();\n    window.addEventListener('resize', this.handleResize.bind(this));\n  },\n\n  bindEvents() {\n    if (this.elements.modules.length > 0) {\n      this.elements.modules.forEach(module => {\n        this.createSlider(module);\n      });\n    }\n  },\n\n  createSlider(module: HTMLElement) {\n    const slider = module.querySelector<HTMLElement>('.module__slider');\n    const desktopNav = module.querySelector<HTMLElement>('.module__slider--nav.desktop');\n    const mobileNav = module.querySelector<HTMLElement>('.module__slider--nav.mobile');\n\n    if (!slider || !desktopNav || !mobileNav) return;\n\n    const $slick = window.jQuery(slider);\n\n    $slick.on('init', (_event: JQuery.Event, slick: JQuerySlick) => {\n      const totalSlides = slick.slideCount || 0;\n      const desktopPageCount = Math.ceil(totalSlides / 2);\n\n      for (let i = 0; i < desktopPageCount; i++) {\n        desktopNav.insertAdjacentHTML('beforeend', `<button type=\"button\" class=\"slide-link\" aria-label=\"Go to page ${i + 1}\"><svg width=\"30\" height=\"24\" viewBox=\"0 0 30 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path id=\"Vector\" d=\"M14.9276 0.670298C6.97533 2.70607 0.5 9.55889 0.5 15.8268C0.5 22.0947 6.97533 25.4437 14.9276 23.4021C22.8741 21.2173 29.5 14.3645 29.5 8.1023C29.5 1.84015 22.8741 -1.52031 14.9276 0.670298Z\" fill=\"black\"></path></svg></button>`);\n      }\n\n      for (let i = 0; i < totalSlides; i++) {\n        mobileNav.insertAdjacentHTML('beforeend', `<button type=\"button\" class=\"slide-link\" aria-label=\"Go to slide ${i + 1}\"><svg width=\"30\" height=\"24\" viewBox=\"0 0 30 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path id=\"Vector\" d=\"M14.9276 0.670298C6.97533 2.70607 0.5 9.55889 0.5 15.8268C0.5 22.0947 6.97533 25.4437 14.9276 23.4021C22.8741 21.2173 29.5 14.3645 29.5 8.1023C29.5 1.84015 22.8741 -1.52031 14.9276 0.670298Z\" fill=\"black\"></path></svg></button>`);\n      }\n\n      this.updateNavigation(module, 0);\n      setTimeout(() => this.equalizeHeights($slick), 100);\n    });\n\n    $slick.slick({\n      slidesToShow: 2,\n      slidesToScroll: 2,\n      adaptiveHeight: false,\n      slide: '.module__slide',\n      rows: 0,\n      arrows: false,\n      dots: false,\n      autoplay: true,\n      autoplaySpeed: 6000,\n      infinite: true,\n      responsive: [\n        {\n          breakpoint: 999,\n          settings: {\n            slidesToShow: 1,\n            slidesToScroll: 1,\n            centerPadding: '64px',\n            centerMode: true,\n            autoplay: false,\n          }\n        }\n      ]\n    });\n\n    $slick.on('beforeChange', (_e: JQuery.Event, _slick: JQuerySlick, _currentSlide: number, nextSlide: number) => {\n      this.updateNavigation(module, nextSlide);\n    });\n\n    window.jQuery('.module__slider--nav').on('click', '.slide-link', function(this: HTMLElement) {\n      const isMobile = window.innerWidth < 999;\n      const $navSet = isMobile ? window.jQuery(mobileNav) : window.jQuery(desktopNav);\n      const dotIndex = Array.from($navSet[0].children).indexOf(this);\n      const slideIndex = isMobile ? dotIndex : dotIndex * 2;\n      if ($slick.hasClass('slick-initialized')) {\n        $slick.slick('slickGoTo', slideIndex);\n      }\n    });\n\n    $slick.on('afterChange', () => this.equalizeHeights($slick));\n  },\n\n  handleResize() {\n    this.elements.modules.forEach(module => {\n      const slider = module.querySelector<HTMLElement>('.module__slider');\n      if (slider) {\n        const $slick = window.jQuery(slider);\n        if ($slick.hasClass('slick-initialized')) {\n          $slick.slick('setPosition');\n          this.equalizeHeights($slick);\n          this.updateNavigation(module, $slick.slick('slickCurrentSlide'));\n        }\n      }\n    });\n  },\n\n  equalizeHeights($slider: JQuery<HTMLElement>) {\n    if (!$slider.hasClass('slick-initialized')) return;\n\n    $slider.find('.module__slide, .module__slide > ul, .module__slide > ul > li').height('auto');\n\n    let maxLiHeight = 0;\n    $slider.find('.module__slide > ul > li').each(function() {\n      maxLiHeight = Math.max(maxLiHeight, window.jQuery(this).outerHeight());\n    });\n\n    const slideHeight = maxLiHeight + 2;\n    $slider.find('.module__slide, .module__slide > ul, .module__slide > ul > li').height(slideHeight);\n\n    if ($slider.hasClass('slick-initialized')) {\n      $slider.slick('setPosition');\n    }\n  },\n\n  updateNavigation(module: HTMLElement, currentSlide: number) {\n    const desktopNav = module.querySelector<HTMLElement>('.module__slider--nav.desktop');\n    const mobileNav = module.querySelector<HTMLElement>('.module__slider--nav.mobile');\n    if (!desktopNav || !mobileNav) return;\n\n    const isMobile = window.innerWidth < 999;\n\n    if (isMobile) {\n      mobileNav.querySelectorAll('.slide-link').forEach((link, index) => {\n        link.classList.toggle('active', index === currentSlide);\n      });\n    } else {\n      desktopNav.querySelectorAll('.slide-link').forEach((link, index) => {\n        link.classList.toggle('active', index === Math.floor(currentSlide / 2));\n      });\n    }\n  }\n};\n\nexport default events;\n","import { Options } from '@/types/general';\n\ntype Elements = {\n  module: HTMLDivElement | null;\n  selects: HTMLSelectElement[];\n  season: HTMLSelectElement | null;\n  month: HTMLSelectElement | null;\n  type: HTMLSelectElement | null;\n  instrument: HTMLSelectElement | null;\n  toggle: HTMLButtonElement | null;\n};\n\ntype SelectedOptions = {\n  season: string | undefined;\n  month: string | undefined;\n  type: string | undefined;\n  instrument: string | undefined;\n  view: string | undefined;\n};\n\ntype EventsList = {\n  elements: Elements;\n  initialMonthValue: string;\n  urlMonthValue: string | null; // Store the month from URL\n  isInitialLoad: boolean; // Flag to track initial page load\n  init: () => void;\n  bindEvents: () => void;\n  updateEvents: (list: string) => void;\n  updateCalendar: (calendar: string) => void;\n  updateOptions: (select: HTMLSelectElement, options: Options) => void;\n  getSelectedOptions: () => SelectedOptions;\n  adjustSelectWidth: (selectElement: HTMLSelectElement) => void;\n  fetchEvents: (select: HTMLSelectElement, overrideOptions?: Partial<SelectedOptions>) => Promise<void>;\n  updateURLParameters: (options: SelectedOptions) => void;\n  setInitialStateFromURL: () => void;\n  hasOptionWithValue: (selectElement: HTMLSelectElement, value: string) => boolean;\n};\n\nconst eventsList: EventsList = {\n  elements: {\n    module: null,\n    selects: [],\n    season: null,\n    month: null,\n    type: null,\n    instrument: null,\n    toggle: null,\n  },\n\n  initialMonthValue: '',\n  urlMonthValue: null,\n  isInitialLoad: true,\n\n  init() {\n    this.elements.module = document.querySelector('.module--events-list');\n\n    if (this.elements.module?.dataset.noFilters === 'true') {\n      return;\n    }\n\n    this.elements.selects = Array.from(document.querySelectorAll<HTMLSelectElement>('.module--events-list select'));\n    this.elements.season = document.querySelector<HTMLSelectElement>('.module--events-list select[data-filter=\"event-season\"]');\n    this.elements.month = document.querySelector<HTMLSelectElement>('.module--events-list select[data-filter=\"event-month\"]');\n    this.elements.type = document.querySelector<HTMLSelectElement>('.module--events-list select[data-filter=\"event-type\"]');\n    this.elements.instrument = document.querySelector<HTMLSelectElement>('.module--events-list select[data-filter=\"event-instrument\"]');\n    this.elements.toggle = document.querySelector<HTMLButtonElement>('.module--events-list button[data-toggle=\"view\"]');\n\n    if(!this.elements.module) return;\n\n    // Capture URL parameters before any processing\n    const searchParams = new URLSearchParams(window.location.search);\n    this.urlMonthValue = searchParams.get('month');\n\n    // Set initial UI state from URL params\n    this.setInitialStateFromURL();\n\n    // Store initial month value after URL params are applied\n    if (this.elements.month) {\n      this.initialMonthValue = this.elements.month.value;\n    }\n\n    this.bindEvents();\n\n    // Initial fetch with URL parameters\n    // If we have URL parameters, use them directly for the initial fetch\n    // This ensures the backend gets the exact URL parameters\n    if (searchParams.toString()) {\n      const urlOptions: Partial<SelectedOptions> = {};\n\n      // Extract all relevant parameters from URL\n      if (searchParams.get('season')) urlOptions.season = searchParams.get('season') || undefined;\n      if (searchParams.get('month')) urlOptions.month = searchParams.get('month') || undefined;\n      if (searchParams.get('type')) urlOptions.type = searchParams.get('type') || undefined;\n      if (searchParams.get('instrument')) urlOptions.instrument = searchParams.get('instrument') || undefined;\n      if (searchParams.get('view')) urlOptions.view = searchParams.get('view') || undefined;\n\n      // Use the season select as the trigger but send the exact URL params\n      if (this.elements.season) {\n        this.fetchEvents(this.elements.season, urlOptions);\n      }\n    } else {\n      // No URL parameters, just do a regular fetch\n      if (this.elements.season) {\n        this.fetchEvents(this.elements.season);\n      }\n    }\n  },\n\n  bindEvents() {\n    window.addEventListener('load', () => {\n      if (this.elements.selects.length) {\n        this.elements.selects.forEach((select) => {\n          if (select.selectedIndex !== -1) {\n            this.adjustSelectWidth(select);\n          }\n\n          select.addEventListener('change', async () => {\n            // If season is changed, override month to 'all' in the backend request\n            if (select === this.elements.season && !this.isInitialLoad) {\n              await this.fetchEvents(select, { month: 'all' });\n            } else {\n              // Update initial month value if month is manually changed\n              if (select === this.elements.month) {\n                this.initialMonthValue = select.value;\n              }\n\n              await this.fetchEvents(select);\n            }\n\n            this.adjustSelectWidth(select);\n          });\n        });\n      }\n\n      if (this.elements.toggle) {\n        this.elements.toggle.addEventListener('click', async () => {\n          if (!this.elements.module || !this.elements.toggle || !this.elements.month) return;\n\n          const currentView = this.elements.module.dataset.view;\n          const newView = currentView === 'list' ? 'calendar' : 'list';\n\n          if (newView === 'calendar') {\n            // Store current month value before switching to calendar\n            const currentMonthValue = this.elements.month.value;\n\n            // When switching to calendar, set to current month if no explicit selection\n            if (currentMonthValue === '' || currentMonthValue === 'upcoming' || currentMonthValue === 'all') {\n              const today = new Date();\n              const year = today.getFullYear();\n              const month = (today.getMonth() + 1).toString().padStart(2, '0');\n              const currentMonthDate = `${year}${month}01`;\n\n              const options = Array.from(this.elements.month.options);\n              const currentMonthOption = options.find(option =>\n                option.value.startsWith(currentMonthDate) &&\n                option.value !== 'all' &&\n                option.value !== 'upcoming'\n              );\n\n              if (currentMonthOption) {\n                this.elements.month.value = currentMonthOption.value;\n              } else {\n                // Find next available month\n                const futureOption = options.find(option =>\n                  option.value > currentMonthDate &&\n                  option.value !== 'all' &&\n                  option.value !== 'upcoming'\n                );\n                if (futureOption) {\n                  this.elements.month.value = futureOption.value;\n                }\n              }\n            }\n          } else {\n            // When switching back to list, return to initial state unless there was\n            // an explicit month selection before any view switching\n            if (this.initialMonthValue === '' ||\n                this.initialMonthValue === 'upcoming' ||\n                this.initialMonthValue === 'all') {\n              this.elements.month.value = 'upcoming';\n            } else {\n              // Keep the explicitly selected month\n              this.elements.month.value = this.initialMonthValue;\n            }\n          }\n\n          // Update the view\n          this.elements.module.dataset.view = newView;\n          this.elements.toggle.textContent = newView === 'list' ? 'Calendar View' : 'List View';\n\n          // Fetch events with the new state\n          await this.fetchEvents(this.elements.month);\n\n          // Update URL parameters after the view change\n          this.updateURLParameters(this.getSelectedOptions());\n        });\n      }\n    });\n\n    window.addEventListener('popstate', () => {\n      this.isInitialLoad = true; // Reset initial load flag for browser navigation\n      this.setInitialStateFromURL();\n\n      // Extract parameters from the new URL\n      const searchParams = new URLSearchParams(window.location.search);\n      const urlOptions: Partial<SelectedOptions> = {};\n\n      if (searchParams.get('season')) urlOptions.season = searchParams.get('season') || undefined;\n      if (searchParams.get('month')) urlOptions.month = searchParams.get('month') || undefined;\n      if (searchParams.get('type')) urlOptions.type = searchParams.get('type') || undefined;\n      if (searchParams.get('instrument')) urlOptions.instrument = searchParams.get('instrument') || undefined;\n      if (searchParams.get('view')) urlOptions.view = searchParams.get('view') || undefined;\n\n      // Fetch with the exact URL parameters\n      if (this.elements.season) {\n        this.fetchEvents(this.elements.season, urlOptions);\n      }\n    });\n  },\n\n  updateEvents(list: string) {\n    const content = this.elements.module?.querySelector<HTMLUListElement>('.module__content--list ul');\n    if (!content) return;\n    content.innerHTML = list;\n  },\n\n  updateCalendar(calendar: string) {\n    const content = this.elements.module?.querySelector<HTMLDivElement>('.module__content--calendar');\n    if (!content) return;\n    content.innerHTML = calendar;\n  },\n\n  updateOptions(select: HTMLSelectElement, options: Options) {\n    if (!this.elements.month || !this.elements.type || !this.elements.instrument) return;\n\n    // Store current values before updating options to preserve selections\n    const currentMonthValue = this.elements.month.value;\n    const currentTypeValue = this.elements.type.value;\n    const currentInstrumentValue = this.elements.instrument.value;\n\n    switch (select.dataset.filter) {\n      case 'event-season':\n        this.elements.month.innerHTML = options.months.map((month) => `<option value=\"${month.value}\">${month.label}</option>`).join('');\n\n        // For season changes, handle month selection differently based on context\n        if (this.isInitialLoad && this.urlMonthValue && this.hasOptionWithValue(this.elements.month, this.urlMonthValue)) {\n          // If this is initial load and we have a URL month value, use it\n          this.elements.month.value = this.urlMonthValue;\n          this.urlMonthValue = null; // Clear after use\n        } else if (!this.isInitialLoad) {\n          // If user changed the season manually, default to 'all'\n          // Find and select the 'all' option\n          const allOption = Array.from(this.elements.month.options).find(option => option.value === 'all');\n          if (allOption) {\n            this.elements.month.value = 'all';\n          }\n        } else if (currentMonthValue && this.hasOptionWithValue(this.elements.month, currentMonthValue)) {\n          // Otherwise, try to keep the current value if available\n          this.elements.month.value = currentMonthValue;\n        }\n\n        if (this.elements.month.selectedIndex !== -1) {\n          this.adjustSelectWidth(this.elements.month);\n        }\n\n        this.elements.type.innerHTML = options.types.map((type) => {\n          let output = `<option value=\"${type.value}\">${type.label}</option>`;\n          if (type.children) {\n            output += type.children.map((child) => `<option value=\"${child.value}\">- ${child.label}</option>`).join('');\n          }\n          return output;\n        }).join('');\n\n        // Try to restore the selected type\n        if (currentTypeValue && this.hasOptionWithValue(this.elements.type, currentTypeValue)) {\n          this.elements.type.value = currentTypeValue;\n        }\n\n        if (this.elements.type.selectedIndex !== -1) {\n          this.adjustSelectWidth(this.elements.type);\n        }\n\n        this.elements.instrument.innerHTML = options.instruments.map((instrument) => `<option value=\"${instrument.value}\">${instrument.label}</option>`).join('');\n\n        // Try to restore the selected instrument\n        if (currentInstrumentValue && this.hasOptionWithValue(this.elements.instrument, currentInstrumentValue)) {\n          this.elements.instrument.value = currentInstrumentValue;\n        }\n\n        if (this.elements.instrument.selectedIndex !== -1) {\n          this.adjustSelectWidth(this.elements.instrument);\n        }\n        break;\n\n      case 'event-month':\n        this.elements.type.innerHTML = options.types.map((type) => {\n          let output = `<option value=\"${type.value}\">${type.label}</option>`;\n          if (type.children) {\n            output += type.children.map((child) => `<option value=\"${child.value}\">- ${child.label}</option>`).join('');\n          }\n          return output;\n        }).join('');\n\n        // Try to restore the selected type\n        if (currentTypeValue && this.hasOptionWithValue(this.elements.type, currentTypeValue)) {\n          this.elements.type.value = currentTypeValue;\n        }\n\n        if (this.elements.type.selectedIndex !== -1) {\n          this.adjustSelectWidth(this.elements.type);\n        }\n\n        this.elements.instrument.innerHTML = options.instruments.map((instrument) => `<option value=\"${instrument.value}\">${instrument.label}</option>`).join('');\n\n        // Try to restore the selected instrument\n        if (currentInstrumentValue && this.hasOptionWithValue(this.elements.instrument, currentInstrumentValue)) {\n          this.elements.instrument.value = currentInstrumentValue;\n        }\n\n        if (this.elements.instrument.selectedIndex !== -1) {\n          this.adjustSelectWidth(this.elements.instrument);\n        }\n        break;\n\n      case 'event-type':\n        this.elements.instrument.innerHTML = options.instruments.map((instrument) => `<option value=\"${instrument.value}\">${instrument.label}</option>`).join('');\n\n        // Try to restore the selected instrument\n        if (currentInstrumentValue && this.hasOptionWithValue(this.elements.instrument, currentInstrumentValue)) {\n          this.elements.instrument.value = currentInstrumentValue;\n        }\n\n        if (this.elements.instrument.selectedIndex !== -1) {\n          this.adjustSelectWidth(this.elements.instrument);\n        }\n        break;\n    }\n  },\n\n  // Helper function to check if a select element has an option with a specific value\n  hasOptionWithValue(selectElement: HTMLSelectElement, value: string): boolean {\n    return Array.from(selectElement.options).some(option => option.value === value);\n  },\n\n  getSelectedOptions(): SelectedOptions {\n    return {\n      season: this.elements.season?.value,\n      month: this.elements.month?.value,\n      type: this.elements.type?.value,\n      instrument: this.elements.instrument?.value,\n      view: this.elements.module?.dataset.view\n    };\n  },\n\n  adjustSelectWidth(selectElement: HTMLSelectElement) {\n    if (!this.elements.module) return;\n\n    // Safety check: ensure there's a selected option\n    if (selectElement.selectedIndex === -1) {\n      // If no option is selected, just use a default width\n      selectElement.style.width = '100px';\n      return;\n    }\n\n    const tmpSelect = document.createElement('select');\n    const tmpOption = document.createElement('option');\n\n    // Get the selected option text\n    const selectedText = selectElement.options[selectElement.selectedIndex].text;\n    tmpOption.textContent = selectedText;\n    tmpSelect.appendChild(tmpOption);\n\n    tmpSelect.style.visibility = 'hidden';\n    tmpSelect.style.position = 'absolute';\n    tmpSelect.style.width = 'auto';\n\n    this.elements.module.appendChild(tmpSelect);\n    const width = tmpSelect.clientWidth;\n    this.elements.module.removeChild(tmpSelect);\n\n    // Set a minimum width of 50px to ensure it's always visible\n    selectElement.style.width = `${Math.max(width, 50)}px`;\n  },\n\n  async fetchEvents(select: HTMLSelectElement, overrideOptions?: Partial<SelectedOptions>) {\n    this.elements.module?.classList.add('loading');\n\n    try {\n      // Get current selections\n      const selectedOptions = this.getSelectedOptions();\n\n      // Apply any override options\n      if (overrideOptions) {\n        Object.assign(selectedOptions, overrideOptions);\n      }\n\n      // Debug log for initial load\n      if (this.isInitialLoad) {\n        console.log('Initial fetch with options:', selectedOptions);\n      }\n\n      const response = await window.jQuery.ajax({\n        method: 'POST',\n        url: window.curtis.ajaxurl,\n        data: {\n          action: 'action_get_events',\n          selected: selectedOptions\n        },\n      });\n\n      const data = JSON.parse(response) as { options: Options; results: string; calendar: string };\n      this.updateOptions(select, data.options);\n      this.updateEvents(data.results);\n      this.updateCalendar(data.calendar);\n\n      // Capture the current selections after options have been updated\n      const currentSelections = this.getSelectedOptions();\n      this.updateURLParameters(currentSelections);\n\n      // Update the initialMonthValue if it changed\n      if (this.elements.month && this.elements.month.value) {\n        this.initialMonthValue = this.elements.month.value;\n      }\n\n      // After first successful fetch, no longer in initial load state\n      this.isInitialLoad = false;\n\n    } catch (error) {\n      console.error('Error fetching events:', error);\n    } finally {\n      this.elements.module?.classList.remove('loading');\n    }\n  },\n\n  updateURLParameters(options: SelectedOptions) {\n    const searchParams = new URLSearchParams();\n    Object.entries(options).forEach(([ key, value ]) => {\n      if (value) {\n        searchParams.set(key, value);\n      }\n    });\n\n    const newURL = `${window.location.pathname}?${searchParams.toString()}`;\n    window.history.pushState(null, '', newURL);\n\n    if (this.elements.selects.length) {\n      this.elements.selects.forEach(select => {\n        // Only adjust if the select has options and one is selected\n        if (select.options.length > 0 && select.selectedIndex !== -1) {\n          this.adjustSelectWidth(select);\n        }\n      });\n    }\n  },\n\n  setInitialStateFromURL() {\n    const searchParams = new URLSearchParams(window.location.search);\n\n    const season = searchParams.get('season');\n    if (season && this.elements.season) {\n      this.elements.season.value = season;\n    }\n\n    const view = searchParams.get('view') || 'list';\n    const month = searchParams.get('month');\n\n    // Remember the month from URL for later use if it's not already set\n    if (month && !this.urlMonthValue) {\n      this.urlMonthValue = month;\n    }\n\n    if (this.elements.month) {\n      if (!month) {\n        // Set default based on view\n        if (view === 'list') {\n          this.elements.month.value = 'upcoming';\n        } else {\n          // For calendar, find current month option\n          const today = new Date();\n          const year = today.getFullYear();\n          const currentMonth = (today.getMonth() + 1).toString().padStart(2, '0');\n          const currentMonthDate = `${year}${currentMonth}01`;\n\n          const options = Array.from(this.elements.month.options);\n          const currentMonthOption = options.find(option =>\n            option.value.startsWith(currentMonthDate) &&\n            option.value !== 'all' &&\n            option.value !== 'upcoming'\n          );\n\n          if (currentMonthOption) {\n            this.elements.month.value = currentMonthOption.value;\n          } else {\n            // Find next available month\n            const futureOption = options.find(option =>\n              option.value > currentMonthDate &&\n              option.value !== 'all' &&\n              option.value !== 'upcoming'\n            );\n            if (futureOption) {\n              this.elements.month.value = futureOption.value;\n            } else {\n              // If no matching month found, default to 'all'\n              this.elements.month.value = 'all';\n            }\n          }\n        }\n      } else {\n        // If the URL has a month parameter and it's available in options, set it\n        if (Array.from(this.elements.month.options).some(option => option.value === month)) {\n          this.elements.month.value = month;\n        }\n        // Note: if it's not in options, we don't set it directly, but we've stored it\n        // in urlMonthValue to use after the AJAX call populates the options\n      }\n    }\n\n    const type = searchParams.get('type');\n    if (type && this.elements.type) {\n      this.elements.type.value = type;\n    }\n\n    const instrument = searchParams.get('instrument');\n    if (instrument && this.elements.instrument) {\n      this.elements.instrument.value = instrument;\n    }\n\n    if (this.elements.module) {\n      this.elements.module.dataset.view = view;\n      if (this.elements.toggle) {\n        this.elements.toggle.textContent = view === 'list' ? 'Calendar View' : 'List View';\n      }\n    }\n\n    if (this.elements.selects.length) {\n      this.elements.selects.forEach(select => {\n        // Only adjust width if the select has a selected option\n        if (select.selectedIndex !== -1) {\n          this.adjustSelectWidth(select);\n        }\n      });\n    }\n  },\n};\n\nexport default eventsList;\n","import 'slick-carousel';\n\ntype GallerySlider = {\n  elements: {\n    sliders: HTMLElement[];\n  };\n  init: () => void;\n  bindEvents: () => void;\n  createSlider: (slider: HTMLElement) => void;\n};\n\nconst gallerySlider: GallerySlider = {\n  elements: {\n    sliders: Array.from(document.querySelectorAll<HTMLElement>('.module__gallery-slider .gallery-slider__slides')),\n  },\n\n  init() {\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    if(this.elements.sliders.length > 0) {\n      this.elements.sliders.forEach(slider => {\n        this.createSlider(slider);\n      });\n    }\n  },\n\n  createSlider(slider: HTMLElement) {\n    const $slick = window.jQuery(slider);\n\n    const options = {\n      centerMode: true,\n      centerPadding: '150px',\n      slidesToShow: 1,\n      adaptiveHeight: false,\n      slide: '.gallery-slider__slide',\n      rows: 0,\n      arrows: false,\n      dots: true,\n      autoplay: true,\n      customPaging: function() {\n        return '<button type=\"button\"><svg width=\"30\" height=\"24\" viewBox=\"0 0 30 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.9276 0.670298C6.97533 2.70607 0.5 9.55889 0.5 15.8268C0.5 22.0947 6.97533 25.4437 14.9276 23.4021C22.8741 21.2173 29.5 14.3645 29.5 8.1023C29.5 1.84015 22.8741 -1.52031 14.9276 0.670298Z\" fill=\"black\"/></svg></button>';\n      },\n      responsive: [\n        {\n          breakpoint: 999,\n          settings: {\n            centerPadding: '32px',\n            dots: true,\n            arrows: false\n          }\n        }\n      ]\n    };\n\n    if(slider.dataset.layout === 'full') {\n      options.centerMode = false;\n      options.centerPadding = '0';\n      options.dots = false;\n      options.responsive = [ {\n        breakpoint: 999,\n        settings: {\n          centerPadding: '0',\n          dots: true,\n          arrows: false\n        }\n      } ];\n    }\n\n    $slick.slick(options);\n\n    const previousButtons = slider.querySelectorAll('.gallery-slider__arrow button[data-action=\"previous\"');\n    const nextButtons = slider.querySelectorAll('.gallery-slider__arrow button[data-action=\"next\"');\n\n    if(previousButtons.length > 0) {\n      previousButtons.forEach(button => {\n        button.addEventListener('click', () => {\n          $slick.slick('slickPrev');\n        });\n      });\n    }\n\n    if(nextButtons.length > 0) {\n      nextButtons.forEach(button => {\n        button.addEventListener('click', () => {\n          $slick.slick('slickNext');\n        });\n      });\n    }\n  }\n};\n\nexport default gallerySlider;\n","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/*!\n * Splide.js\n * Version  : 4.1.4\n * License  : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\nvar MEDIA_PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\nvar CREATED = 1;\nvar MOUNTED = 2;\nvar IDLE = 3;\nvar MOVING = 4;\nvar SCROLLING = 5;\nvar DRAGGING = 6;\nvar DESTROYED = 7;\nvar STATES = {\n  CREATED: CREATED,\n  MOUNTED: MOUNTED,\n  IDLE: IDLE,\n  MOVING: MOVING,\n  SCROLLING: SCROLLING,\n  DRAGGING: DRAGGING,\n  DESTROYED: DESTROYED\n};\n\nfunction empty(array) {\n  array.length = 0;\n}\n\nfunction slice(arrayLike, start, end) {\n  return Array.prototype.slice.call(arrayLike, start, end);\n}\n\nfunction apply(func) {\n  return func.bind.apply(func, [null].concat(slice(arguments, 1)));\n}\n\nvar nextTick = setTimeout;\n\nvar noop = function noop() {};\n\nfunction raf(func) {\n  return requestAnimationFrame(func);\n}\n\nfunction typeOf(type, subject) {\n  return typeof subject === type;\n}\n\nfunction isObject(subject) {\n  return !isNull(subject) && typeOf(\"object\", subject);\n}\n\nvar isArray = Array.isArray;\nvar isFunction = apply(typeOf, \"function\");\nvar isString = apply(typeOf, \"string\");\nvar isUndefined = apply(typeOf, \"undefined\");\n\nfunction isNull(subject) {\n  return subject === null;\n}\n\nfunction isHTMLElement(subject) {\n  try {\n    return subject instanceof (subject.ownerDocument.defaultView || window).HTMLElement;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction toArray(value) {\n  return isArray(value) ? value : [value];\n}\n\nfunction forEach(values, iteratee) {\n  toArray(values).forEach(iteratee);\n}\n\nfunction includes(array, value) {\n  return array.indexOf(value) > -1;\n}\n\nfunction push(array, items) {\n  array.push.apply(array, toArray(items));\n  return array;\n}\n\nfunction toggleClass(elm, classes, add) {\n  if (elm) {\n    forEach(classes, function (name) {\n      if (name) {\n        elm.classList[add ? \"add\" : \"remove\"](name);\n      }\n    });\n  }\n}\n\nfunction addClass(elm, classes) {\n  toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\n\nfunction append(parent, children) {\n  forEach(children, parent.appendChild.bind(parent));\n}\n\nfunction before(nodes, ref) {\n  forEach(nodes, function (node) {\n    var parent = (ref || node).parentNode;\n\n    if (parent) {\n      parent.insertBefore(node, ref);\n    }\n  });\n}\n\nfunction matches(elm, selector) {\n  return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\n\nfunction children(parent, selector) {\n  var children2 = parent ? slice(parent.children) : [];\n  return selector ? children2.filter(function (child) {\n    return matches(child, selector);\n  }) : children2;\n}\n\nfunction child(parent, selector) {\n  return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\n\nvar ownKeys = Object.keys;\n\nfunction forOwn(object, iteratee, right) {\n  if (object) {\n    (right ? ownKeys(object).reverse() : ownKeys(object)).forEach(function (key) {\n      key !== \"__proto__\" && iteratee(object[key], key);\n    });\n  }\n\n  return object;\n}\n\nfunction assign(object) {\n  slice(arguments, 1).forEach(function (source) {\n    forOwn(source, function (value, key) {\n      object[key] = source[key];\n    });\n  });\n  return object;\n}\n\nfunction merge(object) {\n  slice(arguments, 1).forEach(function (source) {\n    forOwn(source, function (value, key) {\n      if (isArray(value)) {\n        object[key] = value.slice();\n      } else if (isObject(value)) {\n        object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);\n      } else {\n        object[key] = value;\n      }\n    });\n  });\n  return object;\n}\n\nfunction omit(object, keys) {\n  forEach(keys || ownKeys(object), function (key) {\n    delete object[key];\n  });\n}\n\nfunction removeAttribute(elms, attrs) {\n  forEach(elms, function (elm) {\n    forEach(attrs, function (attr) {\n      elm && elm.removeAttribute(attr);\n    });\n  });\n}\n\nfunction setAttribute(elms, attrs, value) {\n  if (isObject(attrs)) {\n    forOwn(attrs, function (value2, name) {\n      setAttribute(elms, name, value2);\n    });\n  } else {\n    forEach(elms, function (elm) {\n      isNull(value) || value === \"\" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\n    });\n  }\n}\n\nfunction create(tag, attrs, parent) {\n  var elm = document.createElement(tag);\n\n  if (attrs) {\n    isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n  }\n\n  parent && append(parent, elm);\n  return elm;\n}\n\nfunction style(elm, prop, value) {\n  if (isUndefined(value)) {\n    return getComputedStyle(elm)[prop];\n  }\n\n  if (!isNull(value)) {\n    elm.style[prop] = \"\" + value;\n  }\n}\n\nfunction display(elm, display2) {\n  style(elm, \"display\", display2);\n}\n\nfunction focus(elm) {\n  elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\n    preventScroll: true\n  });\n}\n\nfunction getAttribute(elm, attr) {\n  return elm.getAttribute(attr);\n}\n\nfunction hasClass(elm, className) {\n  return elm && elm.classList.contains(className);\n}\n\nfunction rect(target) {\n  return target.getBoundingClientRect();\n}\n\nfunction remove(nodes) {\n  forEach(nodes, function (node) {\n    if (node && node.parentNode) {\n      node.parentNode.removeChild(node);\n    }\n  });\n}\n\nfunction parseHtml(html) {\n  return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\n\nfunction prevent(e, stopPropagation) {\n  e.preventDefault();\n\n  if (stopPropagation) {\n    e.stopPropagation();\n    e.stopImmediatePropagation();\n  }\n}\n\nfunction query(parent, selector) {\n  return parent && parent.querySelector(selector);\n}\n\nfunction queryAll(parent, selector) {\n  return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\n\nfunction removeClass(elm, classes) {\n  toggleClass(elm, classes, false);\n}\n\nfunction timeOf(e) {\n  return e.timeStamp;\n}\n\nfunction unit(value) {\n  return isString(value) ? value : value ? value + \"px\" : \"\";\n}\n\nvar PROJECT_CODE = \"splide\";\nvar DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\n\nfunction assert(condition, message) {\n  if (!condition) {\n    throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\n  }\n}\n\nvar min = Math.min,\n    max = Math.max,\n    floor = Math.floor,\n    ceil = Math.ceil,\n    abs = Math.abs;\n\nfunction approximatelyEqual(x, y, epsilon) {\n  return abs(x - y) < epsilon;\n}\n\nfunction between(number, x, y, exclusive) {\n  var minimum = min(x, y);\n  var maximum = max(x, y);\n  return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\n}\n\nfunction clamp(number, x, y) {\n  var minimum = min(x, y);\n  var maximum = max(x, y);\n  return min(max(minimum, number), maximum);\n}\n\nfunction sign(x) {\n  return +(x > 0) - +(x < 0);\n}\n\nfunction camelToKebab(string) {\n  return string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nfunction format(string, replacements) {\n  forEach(replacements, function (replacement) {\n    string = string.replace(\"%s\", \"\" + replacement);\n  });\n  return string;\n}\n\nfunction pad(number) {\n  return number < 10 ? \"0\" + number : \"\" + number;\n}\n\nvar ids = {};\n\nfunction uniqueId(prefix) {\n  return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\n}\n\nfunction EventBinder() {\n  var listeners = [];\n\n  function bind(targets, events, callback, options) {\n    forEachEvent(targets, events, function (target, event, namespace) {\n      var isEventTarget = (\"addEventListener\" in target);\n      var remover = isEventTarget ? target.removeEventListener.bind(target, event, callback, options) : target[\"removeListener\"].bind(target, callback);\n      isEventTarget ? target.addEventListener(event, callback, options) : target[\"addListener\"](callback);\n      listeners.push([target, event, namespace, callback, remover]);\n    });\n  }\n\n  function unbind(targets, events, callback) {\n    forEachEvent(targets, events, function (target, event, namespace) {\n      listeners = listeners.filter(function (listener) {\n        if (listener[0] === target && listener[1] === event && listener[2] === namespace && (!callback || listener[3] === callback)) {\n          listener[4]();\n          return false;\n        }\n\n        return true;\n      });\n    });\n  }\n\n  function dispatch(target, type, detail) {\n    var e;\n    var bubbles = true;\n\n    if (typeof CustomEvent === \"function\") {\n      e = new CustomEvent(type, {\n        bubbles: bubbles,\n        detail: detail\n      });\n    } else {\n      e = document.createEvent(\"CustomEvent\");\n      e.initCustomEvent(type, bubbles, false, detail);\n    }\n\n    target.dispatchEvent(e);\n    return e;\n  }\n\n  function forEachEvent(targets, events, iteratee) {\n    forEach(targets, function (target) {\n      target && forEach(events, function (events2) {\n        events2.split(\" \").forEach(function (eventNS) {\n          var fragment = eventNS.split(\".\");\n          iteratee(target, fragment[0], fragment[1]);\n        });\n      });\n    });\n  }\n\n  function destroy() {\n    listeners.forEach(function (data) {\n      data[4]();\n    });\n    empty(listeners);\n  }\n\n  return {\n    bind: bind,\n    unbind: unbind,\n    dispatch: dispatch,\n    destroy: destroy\n  };\n}\n\nvar EVENT_MOUNTED = \"mounted\";\nvar EVENT_READY = \"ready\";\nvar EVENT_MOVE = \"move\";\nvar EVENT_MOVED = \"moved\";\nvar EVENT_CLICK = \"click\";\nvar EVENT_ACTIVE = \"active\";\nvar EVENT_INACTIVE = \"inactive\";\nvar EVENT_VISIBLE = \"visible\";\nvar EVENT_HIDDEN = \"hidden\";\nvar EVENT_REFRESH = \"refresh\";\nvar EVENT_UPDATED = \"updated\";\nvar EVENT_RESIZE = \"resize\";\nvar EVENT_RESIZED = \"resized\";\nvar EVENT_DRAG = \"drag\";\nvar EVENT_DRAGGING = \"dragging\";\nvar EVENT_DRAGGED = \"dragged\";\nvar EVENT_SCROLL = \"scroll\";\nvar EVENT_SCROLLED = \"scrolled\";\nvar EVENT_OVERFLOW = \"overflow\";\nvar EVENT_DESTROY = \"destroy\";\nvar EVENT_ARROWS_MOUNTED = \"arrows:mounted\";\nvar EVENT_ARROWS_UPDATED = \"arrows:updated\";\nvar EVENT_PAGINATION_MOUNTED = \"pagination:mounted\";\nvar EVENT_PAGINATION_UPDATED = \"pagination:updated\";\nvar EVENT_NAVIGATION_MOUNTED = \"navigation:mounted\";\nvar EVENT_AUTOPLAY_PLAY = \"autoplay:play\";\nvar EVENT_AUTOPLAY_PLAYING = \"autoplay:playing\";\nvar EVENT_AUTOPLAY_PAUSE = \"autoplay:pause\";\nvar EVENT_LAZYLOAD_LOADED = \"lazyload:loaded\";\nvar EVENT_SLIDE_KEYDOWN = \"sk\";\nvar EVENT_SHIFTED = \"sh\";\nvar EVENT_END_INDEX_CHANGED = \"ei\";\n\nfunction EventInterface(Splide2) {\n  var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\n  var binder = EventBinder();\n\n  function on(events, callback) {\n    binder.bind(bus, toArray(events).join(\" \"), function (e) {\n      callback.apply(callback, isArray(e.detail) ? e.detail : []);\n    });\n  }\n\n  function emit(event) {\n    binder.dispatch(bus, event, slice(arguments, 1));\n  }\n\n  if (Splide2) {\n    Splide2.event.on(EVENT_DESTROY, binder.destroy);\n  }\n\n  return assign(binder, {\n    bus: bus,\n    on: on,\n    off: apply(binder.unbind, bus),\n    emit: emit\n  });\n}\n\nfunction RequestInterval(interval, onInterval, onUpdate, limit) {\n  var now = Date.now;\n  var startTime;\n  var rate = 0;\n  var id;\n  var paused = true;\n  var count = 0;\n\n  function update() {\n    if (!paused) {\n      rate = interval ? min((now() - startTime) / interval, 1) : 1;\n      onUpdate && onUpdate(rate);\n\n      if (rate >= 1) {\n        onInterval();\n        startTime = now();\n\n        if (limit && ++count >= limit) {\n          return pause();\n        }\n      }\n\n      id = raf(update);\n    }\n  }\n\n  function start(resume) {\n    resume || cancel();\n    startTime = now() - (resume ? rate * interval : 0);\n    paused = false;\n    id = raf(update);\n  }\n\n  function pause() {\n    paused = true;\n  }\n\n  function rewind() {\n    startTime = now();\n    rate = 0;\n\n    if (onUpdate) {\n      onUpdate(rate);\n    }\n  }\n\n  function cancel() {\n    id && cancelAnimationFrame(id);\n    rate = 0;\n    id = 0;\n    paused = true;\n  }\n\n  function set(time) {\n    interval = time;\n  }\n\n  function isPaused() {\n    return paused;\n  }\n\n  return {\n    start: start,\n    rewind: rewind,\n    pause: pause,\n    cancel: cancel,\n    set: set,\n    isPaused: isPaused\n  };\n}\n\nfunction State(initialState) {\n  var state = initialState;\n\n  function set(value) {\n    state = value;\n  }\n\n  function is(states) {\n    return includes(toArray(states), state);\n  }\n\n  return {\n    set: set,\n    is: is\n  };\n}\n\nfunction Throttle(func, duration) {\n  var interval = RequestInterval(duration || 0, func, null, 1);\n  return function () {\n    interval.isPaused() && interval.start();\n  };\n}\n\nfunction Media(Splide2, Components2, options) {\n  var state = Splide2.state;\n  var breakpoints = options.breakpoints || {};\n  var reducedMotion = options.reducedMotion || {};\n  var binder = EventBinder();\n  var queries = [];\n\n  function setup() {\n    var isMin = options.mediaQuery === \"min\";\n    ownKeys(breakpoints).sort(function (n, m) {\n      return isMin ? +n - +m : +m - +n;\n    }).forEach(function (key) {\n      register(breakpoints[key], \"(\" + (isMin ? \"min\" : \"max\") + \"-width:\" + key + \"px)\");\n    });\n    register(reducedMotion, MEDIA_PREFERS_REDUCED_MOTION);\n    update();\n  }\n\n  function destroy(completely) {\n    if (completely) {\n      binder.destroy();\n    }\n  }\n\n  function register(options2, query) {\n    var queryList = matchMedia(query);\n    binder.bind(queryList, \"change\", update);\n    queries.push([options2, queryList]);\n  }\n\n  function update() {\n    var destroyed = state.is(DESTROYED);\n    var direction = options.direction;\n    var merged = queries.reduce(function (merged2, entry) {\n      return merge(merged2, entry[1].matches ? entry[0] : {});\n    }, {});\n    omit(options);\n    set(merged);\n\n    if (options.destroy) {\n      Splide2.destroy(options.destroy === \"completely\");\n    } else if (destroyed) {\n      destroy(true);\n      Splide2.mount();\n    } else {\n      direction !== options.direction && Splide2.refresh();\n    }\n  }\n\n  function reduce(enable) {\n    if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\n      enable ? merge(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\n    }\n  }\n\n  function set(opts, base, notify) {\n    merge(options, opts);\n    base && merge(Object.getPrototypeOf(options), opts);\n\n    if (notify || !state.is(CREATED)) {\n      Splide2.emit(EVENT_UPDATED, options);\n    }\n  }\n\n  return {\n    setup: setup,\n    destroy: destroy,\n    reduce: reduce,\n    set: set\n  };\n}\n\nvar ARROW = \"Arrow\";\nvar ARROW_LEFT = ARROW + \"Left\";\nvar ARROW_RIGHT = ARROW + \"Right\";\nvar ARROW_UP = ARROW + \"Up\";\nvar ARROW_DOWN = ARROW + \"Down\";\nvar LTR = \"ltr\";\nvar RTL = \"rtl\";\nvar TTB = \"ttb\";\nvar ORIENTATION_MAP = {\n  width: [\"height\"],\n  left: [\"top\", \"right\"],\n  right: [\"bottom\", \"left\"],\n  x: [\"y\"],\n  X: [\"Y\"],\n  Y: [\"X\"],\n  ArrowLeft: [ARROW_UP, ARROW_RIGHT],\n  ArrowRight: [ARROW_DOWN, ARROW_LEFT]\n};\n\nfunction Direction(Splide2, Components2, options) {\n  function resolve(prop, axisOnly, direction) {\n    direction = direction || options.direction;\n    var index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1;\n    return ORIENTATION_MAP[prop] && ORIENTATION_MAP[prop][index] || prop.replace(/width|left|right/i, function (match, offset) {\n      var replacement = ORIENTATION_MAP[match.toLowerCase()][index] || match;\n      return offset > 0 ? replacement.charAt(0).toUpperCase() + replacement.slice(1) : replacement;\n    });\n  }\n\n  function orient(value) {\n    return value * (options.direction === RTL ? 1 : -1);\n  }\n\n  return {\n    resolve: resolve,\n    orient: orient\n  };\n}\n\nvar ROLE = \"role\";\nvar TAB_INDEX = \"tabindex\";\nvar DISABLED = \"disabled\";\nvar ARIA_PREFIX = \"aria-\";\nvar ARIA_CONTROLS = ARIA_PREFIX + \"controls\";\nvar ARIA_CURRENT = ARIA_PREFIX + \"current\";\nvar ARIA_SELECTED = ARIA_PREFIX + \"selected\";\nvar ARIA_LABEL = ARIA_PREFIX + \"label\";\nvar ARIA_LABELLEDBY = ARIA_PREFIX + \"labelledby\";\nvar ARIA_HIDDEN = ARIA_PREFIX + \"hidden\";\nvar ARIA_ORIENTATION = ARIA_PREFIX + \"orientation\";\nvar ARIA_ROLEDESCRIPTION = ARIA_PREFIX + \"roledescription\";\nvar ARIA_LIVE = ARIA_PREFIX + \"live\";\nvar ARIA_BUSY = ARIA_PREFIX + \"busy\";\nvar ARIA_ATOMIC = ARIA_PREFIX + \"atomic\";\nvar ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\nvar CLASS_PREFIX = PROJECT_CODE + \"__\";\nvar STATUS_CLASS_PREFIX = \"is-\";\nvar CLASS_ROOT = PROJECT_CODE;\nvar CLASS_TRACK = CLASS_PREFIX + \"track\";\nvar CLASS_LIST = CLASS_PREFIX + \"list\";\nvar CLASS_SLIDE = CLASS_PREFIX + \"slide\";\nvar CLASS_CLONE = CLASS_SLIDE + \"--clone\";\nvar CLASS_CONTAINER = CLASS_SLIDE + \"__container\";\nvar CLASS_ARROWS = CLASS_PREFIX + \"arrows\";\nvar CLASS_ARROW = CLASS_PREFIX + \"arrow\";\nvar CLASS_ARROW_PREV = CLASS_ARROW + \"--prev\";\nvar CLASS_ARROW_NEXT = CLASS_ARROW + \"--next\";\nvar CLASS_PAGINATION = CLASS_PREFIX + \"pagination\";\nvar CLASS_PAGINATION_PAGE = CLASS_PAGINATION + \"__page\";\nvar CLASS_PROGRESS = CLASS_PREFIX + \"progress\";\nvar CLASS_PROGRESS_BAR = CLASS_PROGRESS + \"__bar\";\nvar CLASS_TOGGLE = CLASS_PREFIX + \"toggle\";\nvar CLASS_TOGGLE_PLAY = CLASS_TOGGLE + \"__play\";\nvar CLASS_TOGGLE_PAUSE = CLASS_TOGGLE + \"__pause\";\nvar CLASS_SPINNER = CLASS_PREFIX + \"spinner\";\nvar CLASS_SR = CLASS_PREFIX + \"sr\";\nvar CLASS_INITIALIZED = STATUS_CLASS_PREFIX + \"initialized\";\nvar CLASS_ACTIVE = STATUS_CLASS_PREFIX + \"active\";\nvar CLASS_PREV = STATUS_CLASS_PREFIX + \"prev\";\nvar CLASS_NEXT = STATUS_CLASS_PREFIX + \"next\";\nvar CLASS_VISIBLE = STATUS_CLASS_PREFIX + \"visible\";\nvar CLASS_LOADING = STATUS_CLASS_PREFIX + \"loading\";\nvar CLASS_FOCUS_IN = STATUS_CLASS_PREFIX + \"focus-in\";\nvar CLASS_OVERFLOW = STATUS_CLASS_PREFIX + \"overflow\";\nvar STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING, CLASS_FOCUS_IN, CLASS_OVERFLOW];\nvar CLASSES = {\n  slide: CLASS_SLIDE,\n  clone: CLASS_CLONE,\n  arrows: CLASS_ARROWS,\n  arrow: CLASS_ARROW,\n  prev: CLASS_ARROW_PREV,\n  next: CLASS_ARROW_NEXT,\n  pagination: CLASS_PAGINATION,\n  page: CLASS_PAGINATION_PAGE,\n  spinner: CLASS_SPINNER\n};\n\nfunction closest(from, selector) {\n  if (isFunction(from.closest)) {\n    return from.closest(selector);\n  }\n\n  var elm = from;\n\n  while (elm && elm.nodeType === 1) {\n    if (matches(elm, selector)) {\n      break;\n    }\n\n    elm = elm.parentElement;\n  }\n\n  return elm;\n}\n\nvar FRICTION = 5;\nvar LOG_INTERVAL = 200;\nvar POINTER_DOWN_EVENTS = \"touchstart mousedown\";\nvar POINTER_MOVE_EVENTS = \"touchmove mousemove\";\nvar POINTER_UP_EVENTS = \"touchend touchcancel mouseup click\";\n\nfunction Elements(Splide2, Components2, options) {\n  var _EventInterface = EventInterface(Splide2),\n      on = _EventInterface.on,\n      bind = _EventInterface.bind;\n\n  var root = Splide2.root;\n  var i18n = options.i18n;\n  var elements = {};\n  var slides = [];\n  var rootClasses = [];\n  var trackClasses = [];\n  var track;\n  var list;\n  var isUsingKey;\n\n  function setup() {\n    collect();\n    init();\n    update();\n  }\n\n  function mount() {\n    on(EVENT_REFRESH, destroy);\n    on(EVENT_REFRESH, setup);\n    on(EVENT_UPDATED, update);\n    bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\n      isUsingKey = e.type === \"keydown\";\n    }, {\n      capture: true\n    });\n    bind(root, \"focusin\", function () {\n      toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\n    });\n  }\n\n  function destroy(completely) {\n    var attrs = ALL_ATTRIBUTES.concat(\"style\");\n    empty(slides);\n    removeClass(root, rootClasses);\n    removeClass(track, trackClasses);\n    removeAttribute([track, list], attrs);\n    removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\n  }\n\n  function update() {\n    removeClass(root, rootClasses);\n    removeClass(track, trackClasses);\n    rootClasses = getClasses(CLASS_ROOT);\n    trackClasses = getClasses(CLASS_TRACK);\n    addClass(root, rootClasses);\n    addClass(track, trackClasses);\n    setAttribute(root, ARIA_LABEL, options.label);\n    setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\n  }\n\n  function collect() {\n    track = find(\".\" + CLASS_TRACK);\n    list = child(track, \".\" + CLASS_LIST);\n    assert(track && list, \"A track/list element is missing.\");\n    push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\n    forOwn({\n      arrows: CLASS_ARROWS,\n      pagination: CLASS_PAGINATION,\n      prev: CLASS_ARROW_PREV,\n      next: CLASS_ARROW_NEXT,\n      bar: CLASS_PROGRESS_BAR,\n      toggle: CLASS_TOGGLE\n    }, function (className, key) {\n      elements[key] = find(\".\" + className);\n    });\n    assign(elements, {\n      root: root,\n      track: track,\n      list: list,\n      slides: slides\n    });\n  }\n\n  function init() {\n    var id = root.id || uniqueId(PROJECT_CODE);\n    var role = options.role;\n    root.id = id;\n    track.id = track.id || id + \"-track\";\n    list.id = list.id || id + \"-list\";\n\n    if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n      setAttribute(root, ROLE, role);\n    }\n\n    setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n    setAttribute(list, ROLE, \"presentation\");\n  }\n\n  function find(selector) {\n    var elm = query(root, selector);\n    return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\n  }\n\n  function getClasses(base) {\n    return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\n  }\n\n  return assign(elements, {\n    setup: setup,\n    mount: mount,\n    destroy: destroy\n  });\n}\n\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n  var event = EventInterface(Splide2);\n  var on = event.on,\n      emit = event.emit,\n      bind = event.bind;\n  var Components = Splide2.Components,\n      root = Splide2.root,\n      options = Splide2.options;\n  var isNavigation = options.isNavigation,\n      updateOnMove = options.updateOnMove,\n      i18n = options.i18n,\n      pagination = options.pagination,\n      slideFocus = options.slideFocus;\n  var resolve = Components.Direction.resolve;\n  var styles = getAttribute(slide, \"style\");\n  var label = getAttribute(slide, ARIA_LABEL);\n  var isClone = slideIndex > -1;\n  var container = child(slide, \".\" + CLASS_CONTAINER);\n  var destroyed;\n\n  function mount() {\n    if (!isClone) {\n      slide.id = root.id + \"-slide\" + pad(index + 1);\n      setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n      setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n      setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n    }\n\n    listen();\n  }\n\n  function listen() {\n    bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n    bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n    on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n    on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n    if (updateOnMove) {\n      on(EVENT_MOVE, onMove);\n    }\n  }\n\n  function destroy() {\n    destroyed = true;\n    event.destroy();\n    removeClass(slide, STATUS_CLASSES);\n    removeAttribute(slide, ALL_ATTRIBUTES);\n    setAttribute(slide, \"style\", styles);\n    setAttribute(slide, ARIA_LABEL, label || \"\");\n  }\n\n  function initNavigation() {\n    var controls = Splide2.splides.map(function (target) {\n      var Slide2 = target.splide.Components.Slides.getAt(index);\n      return Slide2 ? Slide2.slide.id : \"\";\n    }).join(\" \");\n    setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n    setAttribute(slide, ARIA_CONTROLS, controls);\n    setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n    slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n  }\n\n  function onMove() {\n    if (!destroyed) {\n      update();\n    }\n  }\n\n  function update() {\n    if (!destroyed) {\n      var curr = Splide2.index;\n      updateActivity();\n      updateVisibility();\n      toggleClass(slide, CLASS_PREV, index === curr - 1);\n      toggleClass(slide, CLASS_NEXT, index === curr + 1);\n    }\n  }\n\n  function updateActivity() {\n    var active = isActive();\n\n    if (active !== hasClass(slide, CLASS_ACTIVE)) {\n      toggleClass(slide, CLASS_ACTIVE, active);\n      setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n      emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n    }\n  }\n\n  function updateVisibility() {\n    var visible = isVisible();\n    var hidden = !visible && (!isActive() || isClone);\n\n    if (!Splide2.state.is([MOVING, SCROLLING])) {\n      setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n    }\n\n    setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\n\n    if (slideFocus) {\n      setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n    }\n\n    if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n      toggleClass(slide, CLASS_VISIBLE, visible);\n      emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n    }\n\n    if (!visible && document.activeElement === slide) {\n      var Slide2 = Components.Slides.getAt(Splide2.index);\n      Slide2 && focus(Slide2.slide);\n    }\n  }\n\n  function style$1(prop, value, useContainer) {\n    style(useContainer && container || slide, prop, value);\n  }\n\n  function isActive() {\n    var curr = Splide2.index;\n    return curr === index || options.cloneStatus && curr === slideIndex;\n  }\n\n  function isVisible() {\n    if (Splide2.is(FADE)) {\n      return isActive();\n    }\n\n    var trackRect = rect(Components.Elements.track);\n    var slideRect = rect(slide);\n    var left = resolve(\"left\", true);\n    var right = resolve(\"right\", true);\n    return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n  }\n\n  function isWithin(from, distance) {\n    var diff = abs(from - index);\n\n    if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n      diff = min(diff, Splide2.length - diff);\n    }\n\n    return diff <= distance;\n  }\n\n  var self = {\n    index: index,\n    slideIndex: slideIndex,\n    slide: slide,\n    container: container,\n    isClone: isClone,\n    mount: mount,\n    destroy: destroy,\n    update: update,\n    style: style$1,\n    isWithin: isWithin\n  };\n  return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n  var _EventInterface2 = EventInterface(Splide2),\n      on = _EventInterface2.on,\n      emit = _EventInterface2.emit,\n      bind = _EventInterface2.bind;\n\n  var _Components2$Elements = Components2.Elements,\n      slides = _Components2$Elements.slides,\n      list = _Components2$Elements.list;\n  var Slides2 = [];\n\n  function mount() {\n    init();\n    on(EVENT_REFRESH, destroy);\n    on(EVENT_REFRESH, init);\n  }\n\n  function init() {\n    slides.forEach(function (slide, index) {\n      register(slide, index, -1);\n    });\n  }\n\n  function destroy() {\n    forEach$1(function (Slide2) {\n      Slide2.destroy();\n    });\n    empty(Slides2);\n  }\n\n  function update() {\n    forEach$1(function (Slide2) {\n      Slide2.update();\n    });\n  }\n\n  function register(slide, index, slideIndex) {\n    var object = Slide$1(Splide2, index, slideIndex, slide);\n    object.mount();\n    Slides2.push(object);\n    Slides2.sort(function (Slide1, Slide2) {\n      return Slide1.index - Slide2.index;\n    });\n  }\n\n  function get(excludeClones) {\n    return excludeClones ? filter(function (Slide2) {\n      return !Slide2.isClone;\n    }) : Slides2;\n  }\n\n  function getIn(page) {\n    var Controller = Components2.Controller;\n    var index = Controller.toIndex(page);\n    var max = Controller.hasFocus() ? 1 : options.perPage;\n    return filter(function (Slide2) {\n      return between(Slide2.index, index, index + max - 1);\n    });\n  }\n\n  function getAt(index) {\n    return filter(index)[0];\n  }\n\n  function add(items, index) {\n    forEach(items, function (slide) {\n      if (isString(slide)) {\n        slide = parseHtml(slide);\n      }\n\n      if (isHTMLElement(slide)) {\n        var ref = slides[index];\n        ref ? before(slide, ref) : append(list, slide);\n        addClass(slide, options.classes.slide);\n        observeImages(slide, apply(emit, EVENT_RESIZE));\n      }\n    });\n    emit(EVENT_REFRESH);\n  }\n\n  function remove$1(matcher) {\n    remove(filter(matcher).map(function (Slide2) {\n      return Slide2.slide;\n    }));\n    emit(EVENT_REFRESH);\n  }\n\n  function forEach$1(iteratee, excludeClones) {\n    get(excludeClones).forEach(iteratee);\n  }\n\n  function filter(matcher) {\n    return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n      return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n    });\n  }\n\n  function style(prop, value, useContainer) {\n    forEach$1(function (Slide2) {\n      Slide2.style(prop, value, useContainer);\n    });\n  }\n\n  function observeImages(elm, callback) {\n    var images = queryAll(elm, \"img\");\n    var length = images.length;\n\n    if (length) {\n      images.forEach(function (img) {\n        bind(img, \"load error\", function () {\n          if (! --length) {\n            callback();\n          }\n        });\n      });\n    } else {\n      callback();\n    }\n  }\n\n  function getLength(excludeClones) {\n    return excludeClones ? slides.length : Slides2.length;\n  }\n\n  function isEnough() {\n    return Slides2.length > options.perPage;\n  }\n\n  return {\n    mount: mount,\n    destroy: destroy,\n    update: update,\n    register: register,\n    get: get,\n    getIn: getIn,\n    getAt: getAt,\n    add: add,\n    remove: remove$1,\n    forEach: forEach$1,\n    filter: filter,\n    style: style,\n    getLength: getLength,\n    isEnough: isEnough\n  };\n}\n\nfunction Layout(Splide2, Components2, options) {\n  var _EventInterface3 = EventInterface(Splide2),\n      on = _EventInterface3.on,\n      bind = _EventInterface3.bind,\n      emit = _EventInterface3.emit;\n\n  var Slides = Components2.Slides;\n  var resolve = Components2.Direction.resolve;\n  var _Components2$Elements2 = Components2.Elements,\n      root = _Components2$Elements2.root,\n      track = _Components2$Elements2.track,\n      list = _Components2$Elements2.list;\n  var getAt = Slides.getAt,\n      styleSlides = Slides.style;\n  var vertical;\n  var rootRect;\n  var overflow;\n\n  function mount() {\n    init();\n    bind(window, \"resize load\", Throttle(apply(emit, EVENT_RESIZE)));\n    on([EVENT_UPDATED, EVENT_REFRESH], init);\n    on(EVENT_RESIZE, resize);\n  }\n\n  function init() {\n    vertical = options.direction === TTB;\n    style(root, \"maxWidth\", unit(options.width));\n    style(track, resolve(\"paddingLeft\"), cssPadding(false));\n    style(track, resolve(\"paddingRight\"), cssPadding(true));\n    resize(true);\n  }\n\n  function resize(force) {\n    var newRect = rect(root);\n\n    if (force || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\n      style(track, \"height\", cssTrackHeight());\n      styleSlides(resolve(\"marginRight\"), unit(options.gap));\n      styleSlides(\"width\", cssSlideWidth());\n      styleSlides(\"height\", cssSlideHeight(), true);\n      rootRect = newRect;\n      emit(EVENT_RESIZED);\n\n      if (overflow !== (overflow = isOverflow())) {\n        toggleClass(root, CLASS_OVERFLOW, overflow);\n        emit(EVENT_OVERFLOW, overflow);\n      }\n    }\n  }\n\n  function cssPadding(right) {\n    var padding = options.padding;\n    var prop = resolve(right ? \"right\" : \"left\");\n    return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n  }\n\n  function cssTrackHeight() {\n    var height = \"\";\n\n    if (vertical) {\n      height = cssHeight();\n      assert(height, \"height or heightRatio is missing.\");\n      height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n    }\n\n    return height;\n  }\n\n  function cssHeight() {\n    return unit(options.height || rect(list).width * options.heightRatio);\n  }\n\n  function cssSlideWidth() {\n    return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n  }\n\n  function cssSlideHeight() {\n    return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n  }\n\n  function cssSlideSize() {\n    var gap = unit(options.gap);\n    return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n  }\n\n  function listSize() {\n    return rect(list)[resolve(\"width\")];\n  }\n\n  function slideSize(index, withoutGap) {\n    var Slide = getAt(index || 0);\n    return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n  }\n\n  function totalSize(index, withoutGap) {\n    var Slide = getAt(index);\n\n    if (Slide) {\n      var right = rect(Slide.slide)[resolve(\"right\")];\n      var left = rect(list)[resolve(\"left\")];\n      return abs(right - left) + (withoutGap ? 0 : getGap());\n    }\n\n    return 0;\n  }\n\n  function sliderSize(withoutGap) {\n    return totalSize(Splide2.length - 1) - totalSize(0) + slideSize(0, withoutGap);\n  }\n\n  function getGap() {\n    var Slide = getAt(0);\n    return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\n  }\n\n  function getPadding(right) {\n    return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n  }\n\n  function isOverflow() {\n    return Splide2.is(FADE) || sliderSize(true) > listSize();\n  }\n\n  return {\n    mount: mount,\n    resize: resize,\n    listSize: listSize,\n    slideSize: slideSize,\n    sliderSize: sliderSize,\n    totalSize: totalSize,\n    getPadding: getPadding,\n    isOverflow: isOverflow\n  };\n}\n\nvar MULTIPLIER = 2;\n\nfunction Clones(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on;\n  var Elements = Components2.Elements,\n      Slides = Components2.Slides;\n  var resolve = Components2.Direction.resolve;\n  var clones = [];\n  var cloneCount;\n\n  function mount() {\n    on(EVENT_REFRESH, remount);\n    on([EVENT_UPDATED, EVENT_RESIZE], observe);\n\n    if (cloneCount = computeCloneCount()) {\n      generate(cloneCount);\n      Components2.Layout.resize(true);\n    }\n  }\n\n  function remount() {\n    destroy();\n    mount();\n  }\n\n  function destroy() {\n    remove(clones);\n    empty(clones);\n    event.destroy();\n  }\n\n  function observe() {\n    var count = computeCloneCount();\n\n    if (cloneCount !== count) {\n      if (cloneCount < count || !count) {\n        event.emit(EVENT_REFRESH);\n      }\n    }\n  }\n\n  function generate(count) {\n    var slides = Slides.get().slice();\n    var length = slides.length;\n\n    if (length) {\n      while (slides.length < count) {\n        push(slides, slides);\n      }\n\n      push(slides.slice(-count), slides.slice(0, count)).forEach(function (Slide, index) {\n        var isHead = index < count;\n        var clone = cloneDeep(Slide.slide, index);\n        isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\n        push(clones, clone);\n        Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\n      });\n    }\n  }\n\n  function cloneDeep(elm, index) {\n    var clone = elm.cloneNode(true);\n    addClass(clone, options.classes.clone);\n    clone.id = Splide2.root.id + \"-clone\" + pad(index + 1);\n    return clone;\n  }\n\n  function computeCloneCount() {\n    var clones2 = options.clones;\n\n    if (!Splide2.is(LOOP)) {\n      clones2 = 0;\n    } else if (isUndefined(clones2)) {\n      var fixedSize = options[resolve(\"fixedWidth\")] && Components2.Layout.slideSize(0);\n      var fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\n      clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n    }\n\n    return clones2;\n  }\n\n  return {\n    mount: mount,\n    destroy: destroy\n  };\n}\n\nfunction Move(Splide2, Components2, options) {\n  var _EventInterface4 = EventInterface(Splide2),\n      on = _EventInterface4.on,\n      emit = _EventInterface4.emit;\n\n  var set = Splide2.state.set;\n  var _Components2$Layout = Components2.Layout,\n      slideSize = _Components2$Layout.slideSize,\n      getPadding = _Components2$Layout.getPadding,\n      totalSize = _Components2$Layout.totalSize,\n      listSize = _Components2$Layout.listSize,\n      sliderSize = _Components2$Layout.sliderSize;\n  var _Components2$Directio = Components2.Direction,\n      resolve = _Components2$Directio.resolve,\n      orient = _Components2$Directio.orient;\n  var _Components2$Elements3 = Components2.Elements,\n      list = _Components2$Elements3.list,\n      track = _Components2$Elements3.track;\n  var Transition;\n\n  function mount() {\n    Transition = Components2.Transition;\n    on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n  }\n\n  function reposition() {\n    if (!Components2.Controller.isBusy()) {\n      Components2.Scroll.cancel();\n      jump(Splide2.index);\n      Components2.Slides.update();\n    }\n  }\n\n  function move(dest, index, prev, callback) {\n    if (dest !== index && canShift(dest > prev)) {\n      cancel();\n      translate(shift(getPosition(), dest > prev), true);\n    }\n\n    set(MOVING);\n    emit(EVENT_MOVE, index, prev, dest);\n    Transition.start(index, function () {\n      set(IDLE);\n      emit(EVENT_MOVED, index, prev, dest);\n      callback && callback();\n    });\n  }\n\n  function jump(index) {\n    translate(toPosition(index, true));\n  }\n\n  function translate(position, preventLoop) {\n    if (!Splide2.is(FADE)) {\n      var destination = preventLoop ? position : loop(position);\n      style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\n      position !== destination && emit(EVENT_SHIFTED);\n    }\n  }\n\n  function loop(position) {\n    if (Splide2.is(LOOP)) {\n      var index = toIndex(position);\n      var exceededMax = index > Components2.Controller.getEnd();\n      var exceededMin = index < 0;\n\n      if (exceededMin || exceededMax) {\n        position = shift(position, exceededMax);\n      }\n    }\n\n    return position;\n  }\n\n  function shift(position, backwards) {\n    var excess = position - getLimit(backwards);\n    var size = sliderSize();\n    position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n    return position;\n  }\n\n  function cancel() {\n    translate(getPosition(), true);\n    Transition.cancel();\n  }\n\n  function toIndex(position) {\n    var Slides = Components2.Slides.get();\n    var index = 0;\n    var minDistance = Infinity;\n\n    for (var i = 0; i < Slides.length; i++) {\n      var slideIndex = Slides[i].index;\n      var distance = abs(toPosition(slideIndex, true) - position);\n\n      if (distance <= minDistance) {\n        minDistance = distance;\n        index = slideIndex;\n      } else {\n        break;\n      }\n    }\n\n    return index;\n  }\n\n  function toPosition(index, trimming) {\n    var position = orient(totalSize(index - 1) - offset(index));\n    return trimming ? trim(position) : position;\n  }\n\n  function getPosition() {\n    var left = resolve(\"left\");\n    return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n  }\n\n  function trim(position) {\n    if (options.trimSpace && Splide2.is(SLIDE)) {\n      position = clamp(position, 0, orient(sliderSize(true) - listSize()));\n    }\n\n    return position;\n  }\n\n  function offset(index) {\n    var focus = options.focus;\n    return focus === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus * slideSize(index) || 0;\n  }\n\n  function getLimit(max) {\n    return toPosition(max ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\n  }\n\n  function canShift(backwards) {\n    var shifted = orient(shift(getPosition(), backwards));\n    return backwards ? shifted >= 0 : shifted <= list[resolve(\"scrollWidth\")] - rect(track)[resolve(\"width\")];\n  }\n\n  function exceededLimit(max, position) {\n    position = isUndefined(position) ? getPosition() : position;\n    var exceededMin = max !== true && orient(position) < orient(getLimit(false));\n    var exceededMax = max !== false && orient(position) > orient(getLimit(true));\n    return exceededMin || exceededMax;\n  }\n\n  return {\n    mount: mount,\n    move: move,\n    jump: jump,\n    translate: translate,\n    shift: shift,\n    cancel: cancel,\n    toIndex: toIndex,\n    toPosition: toPosition,\n    getPosition: getPosition,\n    getLimit: getLimit,\n    exceededLimit: exceededLimit,\n    reposition: reposition\n  };\n}\n\nfunction Controller(Splide2, Components2, options) {\n  var _EventInterface5 = EventInterface(Splide2),\n      on = _EventInterface5.on,\n      emit = _EventInterface5.emit;\n\n  var Move = Components2.Move;\n  var getPosition = Move.getPosition,\n      getLimit = Move.getLimit,\n      toPosition = Move.toPosition;\n  var _Components2$Slides = Components2.Slides,\n      isEnough = _Components2$Slides.isEnough,\n      getLength = _Components2$Slides.getLength;\n  var omitEnd = options.omitEnd;\n  var isLoop = Splide2.is(LOOP);\n  var isSlide = Splide2.is(SLIDE);\n  var getNext = apply(getAdjacent, false);\n  var getPrev = apply(getAdjacent, true);\n  var currIndex = options.start || 0;\n  var endIndex;\n  var prevIndex = currIndex;\n  var slideCount;\n  var perMove;\n  var perPage;\n\n  function mount() {\n    init();\n    on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init);\n    on(EVENT_RESIZED, onResized);\n  }\n\n  function init() {\n    slideCount = getLength(true);\n    perMove = options.perMove;\n    perPage = options.perPage;\n    endIndex = getEnd();\n    var index = clamp(currIndex, 0, omitEnd ? endIndex : slideCount - 1);\n\n    if (index !== currIndex) {\n      currIndex = index;\n      Move.reposition();\n    }\n  }\n\n  function onResized() {\n    if (endIndex !== getEnd()) {\n      emit(EVENT_END_INDEX_CHANGED);\n    }\n  }\n\n  function go(control, allowSameIndex, callback) {\n    if (!isBusy()) {\n      var dest = parse(control);\n      var index = loop(dest);\n\n      if (index > -1 && (allowSameIndex || index !== currIndex)) {\n        setIndex(index);\n        Move.move(dest, index, prevIndex, callback);\n      }\n    }\n  }\n\n  function scroll(destination, duration, snap, callback) {\n    Components2.Scroll.scroll(destination, duration, snap, function () {\n      var index = loop(Move.toIndex(getPosition()));\n      setIndex(omitEnd ? min(index, endIndex) : index);\n      callback && callback();\n    });\n  }\n\n  function parse(control) {\n    var index = currIndex;\n\n    if (isString(control)) {\n      var _ref = control.match(/([+\\-<>])(\\d+)?/) || [],\n          indicator = _ref[1],\n          number = _ref[2];\n\n      if (indicator === \"+\" || indicator === \"-\") {\n        index = computeDestIndex(currIndex + +(\"\" + indicator + (+number || 1)), currIndex);\n      } else if (indicator === \">\") {\n        index = number ? toIndex(+number) : getNext(true);\n      } else if (indicator === \"<\") {\n        index = getPrev(true);\n      }\n    } else {\n      index = isLoop ? control : clamp(control, 0, endIndex);\n    }\n\n    return index;\n  }\n\n  function getAdjacent(prev, destination) {\n    var number = perMove || (hasFocus() ? 1 : perPage);\n    var dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex, !(perMove || hasFocus()));\n\n    if (dest === -1 && isSlide) {\n      if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n        return prev ? 0 : endIndex;\n      }\n    }\n\n    return destination ? dest : loop(dest);\n  }\n\n  function computeDestIndex(dest, from, snapPage) {\n    if (isEnough() || hasFocus()) {\n      var index = computeMovableDestIndex(dest);\n\n      if (index !== dest) {\n        from = dest;\n        dest = index;\n        snapPage = false;\n      }\n\n      if (dest < 0 || dest > endIndex) {\n        if (!perMove && (between(0, dest, from, true) || between(endIndex, from, dest, true))) {\n          dest = toIndex(toPage(dest));\n        } else {\n          if (isLoop) {\n            dest = snapPage ? dest < 0 ? -(slideCount % perPage || perPage) : slideCount : dest;\n          } else if (options.rewind) {\n            dest = dest < 0 ? endIndex : 0;\n          } else {\n            dest = -1;\n          }\n        }\n      } else {\n        if (snapPage && dest !== from) {\n          dest = toIndex(toPage(from) + (dest < from ? -1 : 1));\n        }\n      }\n    } else {\n      dest = -1;\n    }\n\n    return dest;\n  }\n\n  function computeMovableDestIndex(dest) {\n    if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\n      var position = getPosition();\n\n      while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\n        dest < currIndex ? --dest : ++dest;\n      }\n    }\n\n    return dest;\n  }\n\n  function loop(index) {\n    return isLoop ? (index + slideCount) % slideCount || 0 : index;\n  }\n\n  function getEnd() {\n    var end = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage);\n\n    while (omitEnd && end-- > 0) {\n      if (toPosition(slideCount - 1, true) !== toPosition(end, true)) {\n        end++;\n        break;\n      }\n    }\n\n    return clamp(end, 0, slideCount - 1);\n  }\n\n  function toIndex(page) {\n    return clamp(hasFocus() ? page : perPage * page, 0, endIndex);\n  }\n\n  function toPage(index) {\n    return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage);\n  }\n\n  function toDest(destination) {\n    var closest = Move.toIndex(destination);\n    return isSlide ? clamp(closest, 0, endIndex) : closest;\n  }\n\n  function setIndex(index) {\n    if (index !== currIndex) {\n      prevIndex = currIndex;\n      currIndex = index;\n    }\n  }\n\n  function getIndex(prev) {\n    return prev ? prevIndex : currIndex;\n  }\n\n  function hasFocus() {\n    return !isUndefined(options.focus) || options.isNavigation;\n  }\n\n  function isBusy() {\n    return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\n  }\n\n  return {\n    mount: mount,\n    go: go,\n    scroll: scroll,\n    getNext: getNext,\n    getPrev: getPrev,\n    getAdjacent: getAdjacent,\n    getEnd: getEnd,\n    setIndex: setIndex,\n    getIndex: getIndex,\n    toIndex: toIndex,\n    toPage: toPage,\n    toDest: toDest,\n    hasFocus: hasFocus,\n    isBusy: isBusy\n  };\n}\n\nvar XML_NAME_SPACE = \"http://www.w3.org/2000/svg\";\nvar PATH = \"m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z\";\nvar SIZE = 40;\n\nfunction Arrows(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on,\n      bind = event.bind,\n      emit = event.emit;\n  var classes = options.classes,\n      i18n = options.i18n;\n  var Elements = Components2.Elements,\n      Controller = Components2.Controller;\n  var placeholder = Elements.arrows,\n      track = Elements.track;\n  var wrapper = placeholder;\n  var prev = Elements.prev;\n  var next = Elements.next;\n  var created;\n  var wrapperClasses;\n  var arrows = {};\n\n  function mount() {\n    init();\n    on(EVENT_UPDATED, remount);\n  }\n\n  function remount() {\n    destroy();\n    mount();\n  }\n\n  function init() {\n    var enabled = options.arrows;\n\n    if (enabled && !(prev && next)) {\n      createArrows();\n    }\n\n    if (prev && next) {\n      assign(arrows, {\n        prev: prev,\n        next: next\n      });\n      display(wrapper, enabled ? \"\" : \"none\");\n      addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n      if (enabled) {\n        listen();\n        update();\n        setAttribute([prev, next], ARIA_CONTROLS, track.id);\n        emit(EVENT_ARROWS_MOUNTED, prev, next);\n      }\n    }\n  }\n\n  function destroy() {\n    event.destroy();\n    removeClass(wrapper, wrapperClasses);\n\n    if (created) {\n      remove(placeholder ? [prev, next] : wrapper);\n      prev = next = null;\n    } else {\n      removeAttribute([prev, next], ALL_ATTRIBUTES);\n    }\n  }\n\n  function listen() {\n    on([EVENT_MOUNTED, EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED, EVENT_END_INDEX_CHANGED], update);\n    bind(next, \"click\", apply(go, \">\"));\n    bind(prev, \"click\", apply(go, \"<\"));\n  }\n\n  function go(control) {\n    Controller.go(control, true);\n  }\n\n  function createArrows() {\n    wrapper = placeholder || create(\"div\", classes.arrows);\n    prev = createArrow(true);\n    next = createArrow(false);\n    created = true;\n    append(wrapper, [prev, next]);\n    !placeholder && before(wrapper, track);\n  }\n\n  function createArrow(prev2) {\n    var arrow = \"<button class=\\\"\" + classes.arrow + \" \" + (prev2 ? classes.prev : classes.next) + \"\\\" type=\\\"button\\\"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\" focusable=\\\"false\\\"><path d=\\\"\" + (options.arrowPath || PATH) + \"\\\" />\";\n    return parseHtml(arrow);\n  }\n\n  function update() {\n    if (prev && next) {\n      var index = Splide2.index;\n      var prevIndex = Controller.getPrev();\n      var nextIndex = Controller.getNext();\n      var prevLabel = prevIndex > -1 && index < prevIndex ? i18n.last : i18n.prev;\n      var nextLabel = nextIndex > -1 && index > nextIndex ? i18n.first : i18n.next;\n      prev.disabled = prevIndex < 0;\n      next.disabled = nextIndex < 0;\n      setAttribute(prev, ARIA_LABEL, prevLabel);\n      setAttribute(next, ARIA_LABEL, nextLabel);\n      emit(EVENT_ARROWS_UPDATED, prev, next, prevIndex, nextIndex);\n    }\n  }\n\n  return {\n    arrows: arrows,\n    mount: mount,\n    destroy: destroy,\n    update: update\n  };\n}\n\nvar INTERVAL_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-interval\";\n\nfunction Autoplay(Splide2, Components2, options) {\n  var _EventInterface6 = EventInterface(Splide2),\n      on = _EventInterface6.on,\n      bind = _EventInterface6.bind,\n      emit = _EventInterface6.emit;\n\n  var interval = RequestInterval(options.interval, Splide2.go.bind(Splide2, \">\"), onAnimationFrame);\n  var isPaused = interval.isPaused;\n  var Elements = Components2.Elements,\n      _Components2$Elements4 = Components2.Elements,\n      root = _Components2$Elements4.root,\n      toggle = _Components2$Elements4.toggle;\n  var autoplay = options.autoplay;\n  var hovered;\n  var focused;\n  var stopped = autoplay === \"pause\";\n\n  function mount() {\n    if (autoplay) {\n      listen();\n      toggle && setAttribute(toggle, ARIA_CONTROLS, Elements.track.id);\n      stopped || play();\n      update();\n    }\n  }\n\n  function listen() {\n    if (options.pauseOnHover) {\n      bind(root, \"mouseenter mouseleave\", function (e) {\n        hovered = e.type === \"mouseenter\";\n        autoToggle();\n      });\n    }\n\n    if (options.pauseOnFocus) {\n      bind(root, \"focusin focusout\", function (e) {\n        focused = e.type === \"focusin\";\n        autoToggle();\n      });\n    }\n\n    if (toggle) {\n      bind(toggle, \"click\", function () {\n        stopped ? play() : pause(true);\n      });\n    }\n\n    on([EVENT_MOVE, EVENT_SCROLL, EVENT_REFRESH], interval.rewind);\n    on(EVENT_MOVE, onMove);\n  }\n\n  function play() {\n    if (isPaused() && Components2.Slides.isEnough()) {\n      interval.start(!options.resetProgress);\n      focused = hovered = stopped = false;\n      update();\n      emit(EVENT_AUTOPLAY_PLAY);\n    }\n  }\n\n  function pause(stop) {\n    if (stop === void 0) {\n      stop = true;\n    }\n\n    stopped = !!stop;\n    update();\n\n    if (!isPaused()) {\n      interval.pause();\n      emit(EVENT_AUTOPLAY_PAUSE);\n    }\n  }\n\n  function autoToggle() {\n    if (!stopped) {\n      hovered || focused ? pause(false) : play();\n    }\n  }\n\n  function update() {\n    if (toggle) {\n      toggleClass(toggle, CLASS_ACTIVE, !stopped);\n      setAttribute(toggle, ARIA_LABEL, options.i18n[stopped ? \"play\" : \"pause\"]);\n    }\n  }\n\n  function onAnimationFrame(rate) {\n    var bar = Elements.bar;\n    bar && style(bar, \"width\", rate * 100 + \"%\");\n    emit(EVENT_AUTOPLAY_PLAYING, rate);\n  }\n\n  function onMove(index) {\n    var Slide = Components2.Slides.getAt(index);\n    interval.set(Slide && +getAttribute(Slide.slide, INTERVAL_DATA_ATTRIBUTE) || options.interval);\n  }\n\n  return {\n    mount: mount,\n    destroy: interval.cancel,\n    play: play,\n    pause: pause,\n    isPaused: isPaused\n  };\n}\n\nfunction Cover(Splide2, Components2, options) {\n  var _EventInterface7 = EventInterface(Splide2),\n      on = _EventInterface7.on;\n\n  function mount() {\n    if (options.cover) {\n      on(EVENT_LAZYLOAD_LOADED, apply(toggle, true));\n      on([EVENT_MOUNTED, EVENT_UPDATED, EVENT_REFRESH], apply(cover, true));\n    }\n  }\n\n  function cover(cover2) {\n    Components2.Slides.forEach(function (Slide) {\n      var img = child(Slide.container || Slide.slide, \"img\");\n\n      if (img && img.src) {\n        toggle(cover2, img, Slide);\n      }\n    });\n  }\n\n  function toggle(cover2, img, Slide) {\n    Slide.style(\"background\", cover2 ? \"center/cover no-repeat url(\\\"\" + img.src + \"\\\")\" : \"\", true);\n    display(img, cover2 ? \"none\" : \"\");\n  }\n\n  return {\n    mount: mount,\n    destroy: apply(cover, false)\n  };\n}\n\nvar BOUNCE_DIFF_THRESHOLD = 10;\nvar BOUNCE_DURATION = 600;\nvar FRICTION_FACTOR = 0.6;\nvar BASE_VELOCITY = 1.5;\nvar MIN_DURATION = 800;\n\nfunction Scroll(Splide2, Components2, options) {\n  var _EventInterface8 = EventInterface(Splide2),\n      on = _EventInterface8.on,\n      emit = _EventInterface8.emit;\n\n  var set = Splide2.state.set;\n  var Move = Components2.Move;\n  var getPosition = Move.getPosition,\n      getLimit = Move.getLimit,\n      exceededLimit = Move.exceededLimit,\n      translate = Move.translate;\n  var isSlide = Splide2.is(SLIDE);\n  var interval;\n  var callback;\n  var friction = 1;\n\n  function mount() {\n    on(EVENT_MOVE, clear);\n    on([EVENT_UPDATED, EVENT_REFRESH], cancel);\n  }\n\n  function scroll(destination, duration, snap, onScrolled, noConstrain) {\n    var from = getPosition();\n    clear();\n\n    if (snap && (!isSlide || !exceededLimit())) {\n      var size = Components2.Layout.sliderSize();\n      var offset = sign(destination) * size * floor(abs(destination) / size) || 0;\n      destination = Move.toPosition(Components2.Controller.toDest(destination % size)) + offset;\n    }\n\n    var noDistance = approximatelyEqual(from, destination, 1);\n    friction = 1;\n    duration = noDistance ? 0 : duration || max(abs(destination - from) / BASE_VELOCITY, MIN_DURATION);\n    callback = onScrolled;\n    interval = RequestInterval(duration, onEnd, apply(update, from, destination, noConstrain), 1);\n    set(SCROLLING);\n    emit(EVENT_SCROLL);\n    interval.start();\n  }\n\n  function onEnd() {\n    set(IDLE);\n    callback && callback();\n    emit(EVENT_SCROLLED);\n  }\n\n  function update(from, to, noConstrain, rate) {\n    var position = getPosition();\n    var target = from + (to - from) * easing(rate);\n    var diff = (target - position) * friction;\n    translate(position + diff);\n\n    if (isSlide && !noConstrain && exceededLimit()) {\n      friction *= FRICTION_FACTOR;\n\n      if (abs(diff) < BOUNCE_DIFF_THRESHOLD) {\n        scroll(getLimit(exceededLimit(true)), BOUNCE_DURATION, false, callback, true);\n      }\n    }\n  }\n\n  function clear() {\n    if (interval) {\n      interval.cancel();\n    }\n  }\n\n  function cancel() {\n    if (interval && !interval.isPaused()) {\n      clear();\n      onEnd();\n    }\n  }\n\n  function easing(t) {\n    var easingFunc = options.easingFunc;\n    return easingFunc ? easingFunc(t) : 1 - Math.pow(1 - t, 4);\n  }\n\n  return {\n    mount: mount,\n    destroy: clear,\n    scroll: scroll,\n    cancel: cancel\n  };\n}\n\nvar SCROLL_LISTENER_OPTIONS = {\n  passive: false,\n  capture: true\n};\n\nfunction Drag(Splide2, Components2, options) {\n  var _EventInterface9 = EventInterface(Splide2),\n      on = _EventInterface9.on,\n      emit = _EventInterface9.emit,\n      bind = _EventInterface9.bind,\n      unbind = _EventInterface9.unbind;\n\n  var state = Splide2.state;\n  var Move = Components2.Move,\n      Scroll = Components2.Scroll,\n      Controller = Components2.Controller,\n      track = Components2.Elements.track,\n      reduce = Components2.Media.reduce;\n  var _Components2$Directio2 = Components2.Direction,\n      resolve = _Components2$Directio2.resolve,\n      orient = _Components2$Directio2.orient;\n  var getPosition = Move.getPosition,\n      exceededLimit = Move.exceededLimit;\n  var basePosition;\n  var baseEvent;\n  var prevBaseEvent;\n  var isFree;\n  var dragging;\n  var exceeded = false;\n  var clickPrevented;\n  var disabled;\n  var target;\n\n  function mount() {\n    bind(track, POINTER_MOVE_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n    bind(track, POINTER_UP_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n    bind(track, POINTER_DOWN_EVENTS, onPointerDown, SCROLL_LISTENER_OPTIONS);\n    bind(track, \"click\", onClick, {\n      capture: true\n    });\n    bind(track, \"dragstart\", prevent);\n    on([EVENT_MOUNTED, EVENT_UPDATED], init);\n  }\n\n  function init() {\n    var drag = options.drag;\n    disable(!drag);\n    isFree = drag === \"free\";\n  }\n\n  function onPointerDown(e) {\n    clickPrevented = false;\n\n    if (!disabled) {\n      var isTouch = isTouchEvent(e);\n\n      if (isDraggable(e.target) && (isTouch || !e.button)) {\n        if (!Controller.isBusy()) {\n          target = isTouch ? track : window;\n          dragging = state.is([MOVING, SCROLLING]);\n          prevBaseEvent = null;\n          bind(target, POINTER_MOVE_EVENTS, onPointerMove, SCROLL_LISTENER_OPTIONS);\n          bind(target, POINTER_UP_EVENTS, onPointerUp, SCROLL_LISTENER_OPTIONS);\n          Move.cancel();\n          Scroll.cancel();\n          save(e);\n        } else {\n          prevent(e, true);\n        }\n      }\n    }\n  }\n\n  function onPointerMove(e) {\n    if (!state.is(DRAGGING)) {\n      state.set(DRAGGING);\n      emit(EVENT_DRAG);\n    }\n\n    if (e.cancelable) {\n      if (dragging) {\n        Move.translate(basePosition + constrain(diffCoord(e)));\n        var expired = diffTime(e) > LOG_INTERVAL;\n        var hasExceeded = exceeded !== (exceeded = exceededLimit());\n\n        if (expired || hasExceeded) {\n          save(e);\n        }\n\n        clickPrevented = true;\n        emit(EVENT_DRAGGING);\n        prevent(e);\n      } else if (isSliderDirection(e)) {\n        dragging = shouldStart(e);\n        prevent(e);\n      }\n    }\n  }\n\n  function onPointerUp(e) {\n    if (state.is(DRAGGING)) {\n      state.set(IDLE);\n      emit(EVENT_DRAGGED);\n    }\n\n    if (dragging) {\n      move(e);\n      prevent(e);\n    }\n\n    unbind(target, POINTER_MOVE_EVENTS, onPointerMove);\n    unbind(target, POINTER_UP_EVENTS, onPointerUp);\n    dragging = false;\n  }\n\n  function onClick(e) {\n    if (!disabled && clickPrevented) {\n      prevent(e, true);\n    }\n  }\n\n  function save(e) {\n    prevBaseEvent = baseEvent;\n    baseEvent = e;\n    basePosition = getPosition();\n  }\n\n  function move(e) {\n    var velocity = computeVelocity(e);\n    var destination = computeDestination(velocity);\n    var rewind = options.rewind && options.rewindByDrag;\n    reduce(false);\n\n    if (isFree) {\n      Controller.scroll(destination, 0, options.snap);\n    } else if (Splide2.is(FADE)) {\n      Controller.go(orient(sign(velocity)) < 0 ? rewind ? \"<\" : \"-\" : rewind ? \">\" : \"+\");\n    } else if (Splide2.is(SLIDE) && exceeded && rewind) {\n      Controller.go(exceededLimit(true) ? \">\" : \"<\");\n    } else {\n      Controller.go(Controller.toDest(destination), true);\n    }\n\n    reduce(true);\n  }\n\n  function shouldStart(e) {\n    var thresholds = options.dragMinThreshold;\n    var isObj = isObject(thresholds);\n    var mouse = isObj && thresholds.mouse || 0;\n    var touch = (isObj ? thresholds.touch : +thresholds) || 10;\n    return abs(diffCoord(e)) > (isTouchEvent(e) ? touch : mouse);\n  }\n\n  function isSliderDirection(e) {\n    return abs(diffCoord(e)) > abs(diffCoord(e, true));\n  }\n\n  function computeVelocity(e) {\n    if (Splide2.is(LOOP) || !exceeded) {\n      var time = diffTime(e);\n\n      if (time && time < LOG_INTERVAL) {\n        return diffCoord(e) / time;\n      }\n    }\n\n    return 0;\n  }\n\n  function computeDestination(velocity) {\n    return getPosition() + sign(velocity) * min(abs(velocity) * (options.flickPower || 600), isFree ? Infinity : Components2.Layout.listSize() * (options.flickMaxPages || 1));\n  }\n\n  function diffCoord(e, orthogonal) {\n    return coordOf(e, orthogonal) - coordOf(getBaseEvent(e), orthogonal);\n  }\n\n  function diffTime(e) {\n    return timeOf(e) - timeOf(getBaseEvent(e));\n  }\n\n  function getBaseEvent(e) {\n    return baseEvent === e && prevBaseEvent || baseEvent;\n  }\n\n  function coordOf(e, orthogonal) {\n    return (isTouchEvent(e) ? e.changedTouches[0] : e)[\"page\" + resolve(orthogonal ? \"Y\" : \"X\")];\n  }\n\n  function constrain(diff) {\n    return diff / (exceeded && Splide2.is(SLIDE) ? FRICTION : 1);\n  }\n\n  function isDraggable(target2) {\n    var noDrag = options.noDrag;\n    return !matches(target2, \".\" + CLASS_PAGINATION_PAGE + \", .\" + CLASS_ARROW) && (!noDrag || !matches(target2, noDrag));\n  }\n\n  function isTouchEvent(e) {\n    return typeof TouchEvent !== \"undefined\" && e instanceof TouchEvent;\n  }\n\n  function isDragging() {\n    return dragging;\n  }\n\n  function disable(value) {\n    disabled = value;\n  }\n\n  return {\n    mount: mount,\n    disable: disable,\n    isDragging: isDragging\n  };\n}\n\nvar NORMALIZATION_MAP = {\n  Spacebar: \" \",\n  Right: ARROW_RIGHT,\n  Left: ARROW_LEFT,\n  Up: ARROW_UP,\n  Down: ARROW_DOWN\n};\n\nfunction normalizeKey(key) {\n  key = isString(key) ? key : key.key;\n  return NORMALIZATION_MAP[key] || key;\n}\n\nvar KEYBOARD_EVENT = \"keydown\";\n\nfunction Keyboard(Splide2, Components2, options) {\n  var _EventInterface10 = EventInterface(Splide2),\n      on = _EventInterface10.on,\n      bind = _EventInterface10.bind,\n      unbind = _EventInterface10.unbind;\n\n  var root = Splide2.root;\n  var resolve = Components2.Direction.resolve;\n  var target;\n  var disabled;\n\n  function mount() {\n    init();\n    on(EVENT_UPDATED, destroy);\n    on(EVENT_UPDATED, init);\n    on(EVENT_MOVE, onMove);\n  }\n\n  function init() {\n    var keyboard = options.keyboard;\n\n    if (keyboard) {\n      target = keyboard === \"global\" ? window : root;\n      bind(target, KEYBOARD_EVENT, onKeydown);\n    }\n  }\n\n  function destroy() {\n    unbind(target, KEYBOARD_EVENT);\n  }\n\n  function disable(value) {\n    disabled = value;\n  }\n\n  function onMove() {\n    var _disabled = disabled;\n    disabled = true;\n    nextTick(function () {\n      disabled = _disabled;\n    });\n  }\n\n  function onKeydown(e) {\n    if (!disabled) {\n      var key = normalizeKey(e);\n\n      if (key === resolve(ARROW_LEFT)) {\n        Splide2.go(\"<\");\n      } else if (key === resolve(ARROW_RIGHT)) {\n        Splide2.go(\">\");\n      }\n    }\n  }\n\n  return {\n    mount: mount,\n    destroy: destroy,\n    disable: disable\n  };\n}\n\nvar SRC_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-lazy\";\nvar SRCSET_DATA_ATTRIBUTE = SRC_DATA_ATTRIBUTE + \"-srcset\";\nvar IMAGE_SELECTOR = \"[\" + SRC_DATA_ATTRIBUTE + \"], [\" + SRCSET_DATA_ATTRIBUTE + \"]\";\n\nfunction LazyLoad(Splide2, Components2, options) {\n  var _EventInterface11 = EventInterface(Splide2),\n      on = _EventInterface11.on,\n      off = _EventInterface11.off,\n      bind = _EventInterface11.bind,\n      emit = _EventInterface11.emit;\n\n  var isSequential = options.lazyLoad === \"sequential\";\n  var events = [EVENT_MOVED, EVENT_SCROLLED];\n  var entries = [];\n\n  function mount() {\n    if (options.lazyLoad) {\n      init();\n      on(EVENT_REFRESH, init);\n    }\n  }\n\n  function init() {\n    empty(entries);\n    register();\n\n    if (isSequential) {\n      loadNext();\n    } else {\n      off(events);\n      on(events, check);\n      check();\n    }\n  }\n\n  function register() {\n    Components2.Slides.forEach(function (Slide) {\n      queryAll(Slide.slide, IMAGE_SELECTOR).forEach(function (img) {\n        var src = getAttribute(img, SRC_DATA_ATTRIBUTE);\n        var srcset = getAttribute(img, SRCSET_DATA_ATTRIBUTE);\n\n        if (src !== img.src || srcset !== img.srcset) {\n          var className = options.classes.spinner;\n          var parent = img.parentElement;\n          var spinner = child(parent, \".\" + className) || create(\"span\", className, parent);\n          entries.push([img, Slide, spinner]);\n          img.src || display(img, \"none\");\n        }\n      });\n    });\n  }\n\n  function check() {\n    entries = entries.filter(function (data) {\n      var distance = options.perPage * ((options.preloadPages || 1) + 1) - 1;\n      return data[1].isWithin(Splide2.index, distance) ? load(data) : true;\n    });\n    entries.length || off(events);\n  }\n\n  function load(data) {\n    var img = data[0];\n    addClass(data[1].slide, CLASS_LOADING);\n    bind(img, \"load error\", apply(onLoad, data));\n    setAttribute(img, \"src\", getAttribute(img, SRC_DATA_ATTRIBUTE));\n    setAttribute(img, \"srcset\", getAttribute(img, SRCSET_DATA_ATTRIBUTE));\n    removeAttribute(img, SRC_DATA_ATTRIBUTE);\n    removeAttribute(img, SRCSET_DATA_ATTRIBUTE);\n  }\n\n  function onLoad(data, e) {\n    var img = data[0],\n        Slide = data[1];\n    removeClass(Slide.slide, CLASS_LOADING);\n\n    if (e.type !== \"error\") {\n      remove(data[2]);\n      display(img, \"\");\n      emit(EVENT_LAZYLOAD_LOADED, img, Slide);\n      emit(EVENT_RESIZE);\n    }\n\n    isSequential && loadNext();\n  }\n\n  function loadNext() {\n    entries.length && load(entries.shift());\n  }\n\n  return {\n    mount: mount,\n    destroy: apply(empty, entries),\n    check: check\n  };\n}\n\nfunction Pagination(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on,\n      emit = event.emit,\n      bind = event.bind;\n  var Slides = Components2.Slides,\n      Elements = Components2.Elements,\n      Controller = Components2.Controller;\n  var hasFocus = Controller.hasFocus,\n      getIndex = Controller.getIndex,\n      go = Controller.go;\n  var resolve = Components2.Direction.resolve;\n  var placeholder = Elements.pagination;\n  var items = [];\n  var list;\n  var paginationClasses;\n\n  function mount() {\n    destroy();\n    on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], mount);\n    var enabled = options.pagination;\n    placeholder && display(placeholder, enabled ? \"\" : \"none\");\n\n    if (enabled) {\n      on([EVENT_MOVE, EVENT_SCROLL, EVENT_SCROLLED], update);\n      createPagination();\n      update();\n      emit(EVENT_PAGINATION_MOUNTED, {\n        list: list,\n        items: items\n      }, getAt(Splide2.index));\n    }\n  }\n\n  function destroy() {\n    if (list) {\n      remove(placeholder ? slice(list.children) : list);\n      removeClass(list, paginationClasses);\n      empty(items);\n      list = null;\n    }\n\n    event.destroy();\n  }\n\n  function createPagination() {\n    var length = Splide2.length;\n    var classes = options.classes,\n        i18n = options.i18n,\n        perPage = options.perPage;\n    var max = hasFocus() ? Controller.getEnd() + 1 : ceil(length / perPage);\n    list = placeholder || create(\"ul\", classes.pagination, Elements.track.parentElement);\n    addClass(list, paginationClasses = CLASS_PAGINATION + \"--\" + getDirection());\n    setAttribute(list, ROLE, \"tablist\");\n    setAttribute(list, ARIA_LABEL, i18n.select);\n    setAttribute(list, ARIA_ORIENTATION, getDirection() === TTB ? \"vertical\" : \"\");\n\n    for (var i = 0; i < max; i++) {\n      var li = create(\"li\", null, list);\n      var button = create(\"button\", {\n        class: classes.page,\n        type: \"button\"\n      }, li);\n      var controls = Slides.getIn(i).map(function (Slide) {\n        return Slide.slide.id;\n      });\n      var text = !hasFocus() && perPage > 1 ? i18n.pageX : i18n.slideX;\n      bind(button, \"click\", apply(onClick, i));\n\n      if (options.paginationKeyboard) {\n        bind(button, \"keydown\", apply(onKeydown, i));\n      }\n\n      setAttribute(li, ROLE, \"presentation\");\n      setAttribute(button, ROLE, \"tab\");\n      setAttribute(button, ARIA_CONTROLS, controls.join(\" \"));\n      setAttribute(button, ARIA_LABEL, format(text, i + 1));\n      setAttribute(button, TAB_INDEX, -1);\n      items.push({\n        li: li,\n        button: button,\n        page: i\n      });\n    }\n  }\n\n  function onClick(page) {\n    go(\">\" + page, true);\n  }\n\n  function onKeydown(page, e) {\n    var length = items.length;\n    var key = normalizeKey(e);\n    var dir = getDirection();\n    var nextPage = -1;\n\n    if (key === resolve(ARROW_RIGHT, false, dir)) {\n      nextPage = ++page % length;\n    } else if (key === resolve(ARROW_LEFT, false, dir)) {\n      nextPage = (--page + length) % length;\n    } else if (key === \"Home\") {\n      nextPage = 0;\n    } else if (key === \"End\") {\n      nextPage = length - 1;\n    }\n\n    var item = items[nextPage];\n\n    if (item) {\n      focus(item.button);\n      go(\">\" + nextPage);\n      prevent(e, true);\n    }\n  }\n\n  function getDirection() {\n    return options.paginationDirection || options.direction;\n  }\n\n  function getAt(index) {\n    return items[Controller.toPage(index)];\n  }\n\n  function update() {\n    var prev = getAt(getIndex(true));\n    var curr = getAt(getIndex());\n\n    if (prev) {\n      var button = prev.button;\n      removeClass(button, CLASS_ACTIVE);\n      removeAttribute(button, ARIA_SELECTED);\n      setAttribute(button, TAB_INDEX, -1);\n    }\n\n    if (curr) {\n      var _button = curr.button;\n      addClass(_button, CLASS_ACTIVE);\n      setAttribute(_button, ARIA_SELECTED, true);\n      setAttribute(_button, TAB_INDEX, \"\");\n    }\n\n    emit(EVENT_PAGINATION_UPDATED, {\n      list: list,\n      items: items\n    }, prev, curr);\n  }\n\n  return {\n    items: items,\n    mount: mount,\n    destroy: destroy,\n    getAt: getAt,\n    update: update\n  };\n}\n\nvar TRIGGER_KEYS = [\" \", \"Enter\"];\n\nfunction Sync(Splide2, Components2, options) {\n  var isNavigation = options.isNavigation,\n      slideFocus = options.slideFocus;\n  var events = [];\n\n  function mount() {\n    Splide2.splides.forEach(function (target) {\n      if (!target.isParent) {\n        sync(Splide2, target.splide);\n        sync(target.splide, Splide2);\n      }\n    });\n\n    if (isNavigation) {\n      navigate();\n    }\n  }\n\n  function destroy() {\n    events.forEach(function (event) {\n      event.destroy();\n    });\n    empty(events);\n  }\n\n  function remount() {\n    destroy();\n    mount();\n  }\n\n  function sync(splide, target) {\n    var event = EventInterface(splide);\n    event.on(EVENT_MOVE, function (index, prev, dest) {\n      target.go(target.is(LOOP) ? dest : index);\n    });\n    events.push(event);\n  }\n\n  function navigate() {\n    var event = EventInterface(Splide2);\n    var on = event.on;\n    on(EVENT_CLICK, onClick);\n    on(EVENT_SLIDE_KEYDOWN, onKeydown);\n    on([EVENT_MOUNTED, EVENT_UPDATED], update);\n    events.push(event);\n    event.emit(EVENT_NAVIGATION_MOUNTED, Splide2.splides);\n  }\n\n  function update() {\n    setAttribute(Components2.Elements.list, ARIA_ORIENTATION, options.direction === TTB ? \"vertical\" : \"\");\n  }\n\n  function onClick(Slide) {\n    Splide2.go(Slide.index);\n  }\n\n  function onKeydown(Slide, e) {\n    if (includes(TRIGGER_KEYS, normalizeKey(e))) {\n      onClick(Slide);\n      prevent(e);\n    }\n  }\n\n  return {\n    setup: apply(Components2.Media.set, {\n      slideFocus: isUndefined(slideFocus) ? isNavigation : slideFocus\n    }, true),\n    mount: mount,\n    destroy: destroy,\n    remount: remount\n  };\n}\n\nfunction Wheel(Splide2, Components2, options) {\n  var _EventInterface12 = EventInterface(Splide2),\n      bind = _EventInterface12.bind;\n\n  var lastTime = 0;\n\n  function mount() {\n    if (options.wheel) {\n      bind(Components2.Elements.track, \"wheel\", onWheel, SCROLL_LISTENER_OPTIONS);\n    }\n  }\n\n  function onWheel(e) {\n    if (e.cancelable) {\n      var deltaY = e.deltaY;\n      var backwards = deltaY < 0;\n      var timeStamp = timeOf(e);\n\n      var _min = options.wheelMinThreshold || 0;\n\n      var sleep = options.wheelSleep || 0;\n\n      if (abs(deltaY) > _min && timeStamp - lastTime > sleep) {\n        Splide2.go(backwards ? \"<\" : \">\");\n        lastTime = timeStamp;\n      }\n\n      shouldPrevent(backwards) && prevent(e);\n    }\n  }\n\n  function shouldPrevent(backwards) {\n    return !options.releaseWheel || Splide2.state.is(MOVING) || Components2.Controller.getAdjacent(backwards) !== -1;\n  }\n\n  return {\n    mount: mount\n  };\n}\n\nvar SR_REMOVAL_DELAY = 90;\n\nfunction Live(Splide2, Components2, options) {\n  var _EventInterface13 = EventInterface(Splide2),\n      on = _EventInterface13.on;\n\n  var track = Components2.Elements.track;\n  var enabled = options.live && !options.isNavigation;\n  var sr = create(\"span\", CLASS_SR);\n  var interval = RequestInterval(SR_REMOVAL_DELAY, apply(toggle, false));\n\n  function mount() {\n    if (enabled) {\n      disable(!Components2.Autoplay.isPaused());\n      setAttribute(track, ARIA_ATOMIC, true);\n      sr.textContent = \"\\u2026\";\n      on(EVENT_AUTOPLAY_PLAY, apply(disable, true));\n      on(EVENT_AUTOPLAY_PAUSE, apply(disable, false));\n      on([EVENT_MOVED, EVENT_SCROLLED], apply(toggle, true));\n    }\n  }\n\n  function toggle(active) {\n    setAttribute(track, ARIA_BUSY, active);\n\n    if (active) {\n      append(track, sr);\n      interval.start();\n    } else {\n      remove(sr);\n      interval.cancel();\n    }\n  }\n\n  function destroy() {\n    removeAttribute(track, [ARIA_LIVE, ARIA_ATOMIC, ARIA_BUSY]);\n    remove(sr);\n  }\n\n  function disable(disabled) {\n    if (enabled) {\n      setAttribute(track, ARIA_LIVE, disabled ? \"off\" : \"polite\");\n    }\n  }\n\n  return {\n    mount: mount,\n    disable: disable,\n    destroy: destroy\n  };\n}\n\nvar ComponentConstructors = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  Media: Media,\n  Direction: Direction,\n  Elements: Elements,\n  Slides: Slides,\n  Layout: Layout,\n  Clones: Clones,\n  Move: Move,\n  Controller: Controller,\n  Arrows: Arrows,\n  Autoplay: Autoplay,\n  Cover: Cover,\n  Scroll: Scroll,\n  Drag: Drag,\n  Keyboard: Keyboard,\n  LazyLoad: LazyLoad,\n  Pagination: Pagination,\n  Sync: Sync,\n  Wheel: Wheel,\n  Live: Live\n});\nvar I18N = {\n  prev: \"Previous slide\",\n  next: \"Next slide\",\n  first: \"Go to first slide\",\n  last: \"Go to last slide\",\n  slideX: \"Go to slide %s\",\n  pageX: \"Go to page %s\",\n  play: \"Start autoplay\",\n  pause: \"Pause autoplay\",\n  carousel: \"carousel\",\n  slide: \"slide\",\n  select: \"Select a slide to show\",\n  slideLabel: \"%s of %s\"\n};\nvar DEFAULTS = {\n  type: \"slide\",\n  role: \"region\",\n  speed: 400,\n  perPage: 1,\n  cloneStatus: true,\n  arrows: true,\n  pagination: true,\n  paginationKeyboard: true,\n  interval: 5e3,\n  pauseOnHover: true,\n  pauseOnFocus: true,\n  resetProgress: true,\n  easing: \"cubic-bezier(0.25, 1, 0.5, 1)\",\n  drag: true,\n  direction: \"ltr\",\n  trimSpace: true,\n  focusableNodes: \"a, button, textarea, input, select, iframe\",\n  live: true,\n  classes: CLASSES,\n  i18n: I18N,\n  reducedMotion: {\n    speed: 0,\n    rewindSpeed: 0,\n    autoplay: \"pause\"\n  }\n};\n\nfunction Fade(Splide2, Components2, options) {\n  var Slides = Components2.Slides;\n\n  function mount() {\n    EventInterface(Splide2).on([EVENT_MOUNTED, EVENT_REFRESH], init);\n  }\n\n  function init() {\n    Slides.forEach(function (Slide) {\n      Slide.style(\"transform\", \"translateX(-\" + 100 * Slide.index + \"%)\");\n    });\n  }\n\n  function start(index, done) {\n    Slides.style(\"transition\", \"opacity \" + options.speed + \"ms \" + options.easing);\n    nextTick(done);\n  }\n\n  return {\n    mount: mount,\n    start: start,\n    cancel: noop\n  };\n}\n\nfunction Slide(Splide2, Components2, options) {\n  var Move = Components2.Move,\n      Controller = Components2.Controller,\n      Scroll = Components2.Scroll;\n  var list = Components2.Elements.list;\n  var transition = apply(style, list, \"transition\");\n  var endCallback;\n\n  function mount() {\n    EventInterface(Splide2).bind(list, \"transitionend\", function (e) {\n      if (e.target === list && endCallback) {\n        cancel();\n        endCallback();\n      }\n    });\n  }\n\n  function start(index, done) {\n    var destination = Move.toPosition(index, true);\n    var position = Move.getPosition();\n    var speed = getSpeed(index);\n\n    if (abs(destination - position) >= 1 && speed >= 1) {\n      if (options.useScroll) {\n        Scroll.scroll(destination, speed, false, done);\n      } else {\n        transition(\"transform \" + speed + \"ms \" + options.easing);\n        Move.translate(destination, true);\n        endCallback = done;\n      }\n    } else {\n      Move.jump(index);\n      done();\n    }\n  }\n\n  function cancel() {\n    transition(\"\");\n    Scroll.cancel();\n  }\n\n  function getSpeed(index) {\n    var rewindSpeed = options.rewindSpeed;\n\n    if (Splide2.is(SLIDE) && rewindSpeed) {\n      var prev = Controller.getIndex(true);\n      var end = Controller.getEnd();\n\n      if (prev === 0 && index >= end || prev >= end && index === 0) {\n        return rewindSpeed;\n      }\n    }\n\n    return options.speed;\n  }\n\n  return {\n    mount: mount,\n    start: start,\n    cancel: cancel\n  };\n}\n\nvar _Splide = /*#__PURE__*/function () {\n  function _Splide(target, options) {\n    this.event = EventInterface();\n    this.Components = {};\n    this.state = State(CREATED);\n    this.splides = [];\n    this._o = {};\n    this._E = {};\n    var root = isString(target) ? query(document, target) : target;\n    assert(root, root + \" is invalid.\");\n    this.root = root;\n    options = merge({\n      label: getAttribute(root, ARIA_LABEL) || \"\",\n      labelledby: getAttribute(root, ARIA_LABELLEDBY) || \"\"\n    }, DEFAULTS, _Splide.defaults, options || {});\n\n    try {\n      merge(options, JSON.parse(getAttribute(root, DATA_ATTRIBUTE)));\n    } catch (e) {\n      assert(false, \"Invalid JSON\");\n    }\n\n    this._o = Object.create(merge({}, options));\n  }\n\n  var _proto = _Splide.prototype;\n\n  _proto.mount = function mount(Extensions, Transition) {\n    var _this = this;\n\n    var state = this.state,\n        Components2 = this.Components;\n    assert(state.is([CREATED, DESTROYED]), \"Already mounted!\");\n    state.set(CREATED);\n    this._C = Components2;\n    this._T = Transition || this._T || (this.is(FADE) ? Fade : Slide);\n    this._E = Extensions || this._E;\n    var Constructors = assign({}, ComponentConstructors, this._E, {\n      Transition: this._T\n    });\n    forOwn(Constructors, function (Component, key) {\n      var component = Component(_this, Components2, _this._o);\n      Components2[key] = component;\n      component.setup && component.setup();\n    });\n    forOwn(Components2, function (component) {\n      component.mount && component.mount();\n    });\n    this.emit(EVENT_MOUNTED);\n    addClass(this.root, CLASS_INITIALIZED);\n    state.set(IDLE);\n    this.emit(EVENT_READY);\n    return this;\n  };\n\n  _proto.sync = function sync(splide) {\n    this.splides.push({\n      splide: splide\n    });\n    splide.splides.push({\n      splide: this,\n      isParent: true\n    });\n\n    if (this.state.is(IDLE)) {\n      this._C.Sync.remount();\n\n      splide.Components.Sync.remount();\n    }\n\n    return this;\n  };\n\n  _proto.go = function go(control) {\n    this._C.Controller.go(control);\n\n    return this;\n  };\n\n  _proto.on = function on(events, callback) {\n    this.event.on(events, callback);\n    return this;\n  };\n\n  _proto.off = function off(events) {\n    this.event.off(events);\n    return this;\n  };\n\n  _proto.emit = function emit(event) {\n    var _this$event;\n\n    (_this$event = this.event).emit.apply(_this$event, [event].concat(slice(arguments, 1)));\n\n    return this;\n  };\n\n  _proto.add = function add(slides, index) {\n    this._C.Slides.add(slides, index);\n\n    return this;\n  };\n\n  _proto.remove = function remove(matcher) {\n    this._C.Slides.remove(matcher);\n\n    return this;\n  };\n\n  _proto.is = function is(type) {\n    return this._o.type === type;\n  };\n\n  _proto.refresh = function refresh() {\n    this.emit(EVENT_REFRESH);\n    return this;\n  };\n\n  _proto.destroy = function destroy(completely) {\n    if (completely === void 0) {\n      completely = true;\n    }\n\n    var event = this.event,\n        state = this.state;\n\n    if (state.is(CREATED)) {\n      EventInterface(this).on(EVENT_READY, this.destroy.bind(this, completely));\n    } else {\n      forOwn(this._C, function (component) {\n        component.destroy && component.destroy(completely);\n      }, true);\n      event.emit(EVENT_DESTROY);\n      event.destroy();\n      completely && empty(this.splides);\n      state.set(DESTROYED);\n    }\n\n    return this;\n  };\n\n  _createClass(_Splide, [{\n    key: \"options\",\n    get: function get() {\n      return this._o;\n    },\n    set: function set(options) {\n      this._C.Media.set(options, true, true);\n    }\n  }, {\n    key: \"length\",\n    get: function get() {\n      return this._C.Slides.getLength(true);\n    }\n  }, {\n    key: \"index\",\n    get: function get() {\n      return this._C.Controller.getIndex();\n    }\n  }]);\n\n  return _Splide;\n}();\n\nvar Splide = _Splide;\nSplide.defaults = {};\nSplide.STATES = STATES;\nvar CLASS_RENDERED = \"is-rendered\";\nvar RENDERER_DEFAULT_CONFIG = {\n  listTag: \"ul\",\n  slideTag: \"li\"\n};\n\nvar Style = /*#__PURE__*/function () {\n  function Style(id, options) {\n    this.styles = {};\n    this.id = id;\n    this.options = options;\n  }\n\n  var _proto2 = Style.prototype;\n\n  _proto2.rule = function rule(selector, prop, value, breakpoint) {\n    breakpoint = breakpoint || \"default\";\n    var selectors = this.styles[breakpoint] = this.styles[breakpoint] || {};\n    var styles = selectors[selector] = selectors[selector] || {};\n    styles[prop] = value;\n  };\n\n  _proto2.build = function build() {\n    var _this2 = this;\n\n    var css = \"\";\n\n    if (this.styles.default) {\n      css += this.buildSelectors(this.styles.default);\n    }\n\n    Object.keys(this.styles).sort(function (n, m) {\n      return _this2.options.mediaQuery === \"min\" ? +n - +m : +m - +n;\n    }).forEach(function (breakpoint) {\n      if (breakpoint !== \"default\") {\n        css += \"@media screen and (max-width: \" + breakpoint + \"px) {\";\n        css += _this2.buildSelectors(_this2.styles[breakpoint]);\n        css += \"}\";\n      }\n    });\n    return css;\n  };\n\n  _proto2.buildSelectors = function buildSelectors(selectors) {\n    var _this3 = this;\n\n    var css = \"\";\n    forOwn(selectors, function (styles, selector) {\n      selector = (\"#\" + _this3.id + \" \" + selector).trim();\n      css += selector + \" {\";\n      forOwn(styles, function (value, prop) {\n        if (value || value === 0) {\n          css += prop + \": \" + value + \";\";\n        }\n      });\n      css += \"}\";\n    });\n    return css;\n  };\n\n  return Style;\n}();\n\nvar SplideRenderer = /*#__PURE__*/function () {\n  function SplideRenderer(contents, options, config, defaults) {\n    this.slides = [];\n    this.options = {};\n    this.breakpoints = [];\n    merge(DEFAULTS, defaults || {});\n    merge(merge(this.options, DEFAULTS), options || {});\n    this.contents = contents;\n    this.config = assign({}, RENDERER_DEFAULT_CONFIG, config || {});\n    this.id = this.config.id || uniqueId(\"splide\");\n    this.Style = new Style(this.id, this.options);\n    this.Direction = Direction(null, null, this.options);\n    assert(this.contents.length, \"Provide at least 1 content.\");\n    this.init();\n  }\n\n  SplideRenderer.clean = function clean(splide) {\n    var _EventInterface14 = EventInterface(splide),\n        on = _EventInterface14.on;\n\n    var root = splide.root;\n    var clones = queryAll(root, \".\" + CLASS_CLONE);\n    on(EVENT_MOUNTED, function () {\n      remove(child(root, \"style\"));\n    });\n    remove(clones);\n  };\n\n  var _proto3 = SplideRenderer.prototype;\n\n  _proto3.init = function init() {\n    this.parseBreakpoints();\n    this.initSlides();\n    this.registerRootStyles();\n    this.registerTrackStyles();\n    this.registerSlideStyles();\n    this.registerListStyles();\n  };\n\n  _proto3.initSlides = function initSlides() {\n    var _this4 = this;\n\n    push(this.slides, this.contents.map(function (content, index) {\n      content = isString(content) ? {\n        html: content\n      } : content;\n      content.styles = content.styles || {};\n      content.attrs = content.attrs || {};\n\n      _this4.cover(content);\n\n      var classes = _this4.options.classes.slide + \" \" + (index === 0 ? CLASS_ACTIVE : \"\");\n      assign(content.attrs, {\n        class: (classes + \" \" + (content.attrs.class || \"\")).trim(),\n        style: _this4.buildStyles(content.styles)\n      });\n      return content;\n    }));\n\n    if (this.isLoop()) {\n      this.generateClones(this.slides);\n    }\n  };\n\n  _proto3.registerRootStyles = function registerRootStyles() {\n    var _this5 = this;\n\n    this.breakpoints.forEach(function (_ref2) {\n      var width = _ref2[0],\n          options = _ref2[1];\n\n      _this5.Style.rule(\" \", \"max-width\", unit(options.width), width);\n    });\n  };\n\n  _proto3.registerTrackStyles = function registerTrackStyles() {\n    var _this6 = this;\n\n    var Style2 = this.Style;\n    var selector = \".\" + CLASS_TRACK;\n    this.breakpoints.forEach(function (_ref3) {\n      var width = _ref3[0],\n          options = _ref3[1];\n      Style2.rule(selector, _this6.resolve(\"paddingLeft\"), _this6.cssPadding(options, false), width);\n      Style2.rule(selector, _this6.resolve(\"paddingRight\"), _this6.cssPadding(options, true), width);\n      Style2.rule(selector, \"height\", _this6.cssTrackHeight(options), width);\n    });\n  };\n\n  _proto3.registerListStyles = function registerListStyles() {\n    var _this7 = this;\n\n    var Style2 = this.Style;\n    var selector = \".\" + CLASS_LIST;\n    this.breakpoints.forEach(function (_ref4) {\n      var width = _ref4[0],\n          options = _ref4[1];\n      Style2.rule(selector, \"transform\", _this7.buildTranslate(options), width);\n\n      if (!_this7.cssSlideHeight(options)) {\n        Style2.rule(selector, \"aspect-ratio\", _this7.cssAspectRatio(options), width);\n      }\n    });\n  };\n\n  _proto3.registerSlideStyles = function registerSlideStyles() {\n    var _this8 = this;\n\n    var Style2 = this.Style;\n    var selector = \".\" + CLASS_SLIDE;\n    this.breakpoints.forEach(function (_ref5) {\n      var width = _ref5[0],\n          options = _ref5[1];\n      Style2.rule(selector, \"width\", _this8.cssSlideWidth(options), width);\n      Style2.rule(selector, \"height\", _this8.cssSlideHeight(options) || \"100%\", width);\n      Style2.rule(selector, _this8.resolve(\"marginRight\"), unit(options.gap) || \"0px\", width);\n      Style2.rule(selector + \" > img\", \"display\", options.cover ? \"none\" : \"inline\", width);\n    });\n  };\n\n  _proto3.buildTranslate = function buildTranslate(options) {\n    var _this$Direction = this.Direction,\n        resolve = _this$Direction.resolve,\n        orient = _this$Direction.orient;\n    var values = [];\n    values.push(this.cssOffsetClones(options));\n    values.push(this.cssOffsetGaps(options));\n\n    if (this.isCenter(options)) {\n      values.push(this.buildCssValue(orient(-50), \"%\"));\n      values.push.apply(values, this.cssOffsetCenter(options));\n    }\n\n    return values.filter(Boolean).map(function (value) {\n      return \"translate\" + resolve(\"X\") + \"(\" + value + \")\";\n    }).join(\" \");\n  };\n\n  _proto3.cssOffsetClones = function cssOffsetClones(options) {\n    var _this$Direction2 = this.Direction,\n        resolve = _this$Direction2.resolve,\n        orient = _this$Direction2.orient;\n    var cloneCount = this.getCloneCount();\n\n    if (this.isFixedWidth(options)) {\n      var _this$parseCssValue = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n          value = _this$parseCssValue.value,\n          unit2 = _this$parseCssValue.unit;\n\n      return this.buildCssValue(orient(value) * cloneCount, unit2);\n    }\n\n    var percent = 100 * cloneCount / options.perPage;\n    return orient(percent) + \"%\";\n  };\n\n  _proto3.cssOffsetCenter = function cssOffsetCenter(options) {\n    var _this$Direction3 = this.Direction,\n        resolve = _this$Direction3.resolve,\n        orient = _this$Direction3.orient;\n\n    if (this.isFixedWidth(options)) {\n      var _this$parseCssValue2 = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n          value = _this$parseCssValue2.value,\n          unit2 = _this$parseCssValue2.unit;\n\n      return [this.buildCssValue(orient(value / 2), unit2)];\n    }\n\n    var values = [];\n    var perPage = options.perPage,\n        gap = options.gap;\n    values.push(orient(50 / perPage) + \"%\");\n\n    if (gap) {\n      var _this$parseCssValue3 = this.parseCssValue(gap),\n          _value = _this$parseCssValue3.value,\n          _unit = _this$parseCssValue3.unit;\n\n      var gapOffset = (_value / perPage - _value) / 2;\n      values.push(this.buildCssValue(orient(gapOffset), _unit));\n    }\n\n    return values;\n  };\n\n  _proto3.cssOffsetGaps = function cssOffsetGaps(options) {\n    var cloneCount = this.getCloneCount();\n\n    if (cloneCount && options.gap) {\n      var orient = this.Direction.orient;\n\n      var _this$parseCssValue4 = this.parseCssValue(options.gap),\n          value = _this$parseCssValue4.value,\n          unit2 = _this$parseCssValue4.unit;\n\n      if (this.isFixedWidth(options)) {\n        return this.buildCssValue(orient(value * cloneCount), unit2);\n      }\n\n      var perPage = options.perPage;\n      var gaps = cloneCount / perPage;\n      return this.buildCssValue(orient(gaps * value), unit2);\n    }\n\n    return \"\";\n  };\n\n  _proto3.resolve = function resolve(prop) {\n    return camelToKebab(this.Direction.resolve(prop));\n  };\n\n  _proto3.cssPadding = function cssPadding(options, right) {\n    var padding = options.padding;\n    var prop = this.Direction.resolve(right ? \"right\" : \"left\", true);\n    return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n  };\n\n  _proto3.cssTrackHeight = function cssTrackHeight(options) {\n    var height = \"\";\n\n    if (this.isVertical()) {\n      height = this.cssHeight(options);\n      assert(height, '\"height\" is missing.');\n      height = \"calc(\" + height + \" - \" + this.cssPadding(options, false) + \" - \" + this.cssPadding(options, true) + \")\";\n    }\n\n    return height;\n  };\n\n  _proto3.cssHeight = function cssHeight(options) {\n    return unit(options.height);\n  };\n\n  _proto3.cssSlideWidth = function cssSlideWidth(options) {\n    return options.autoWidth ? \"\" : unit(options.fixedWidth) || (this.isVertical() ? \"\" : this.cssSlideSize(options));\n  };\n\n  _proto3.cssSlideHeight = function cssSlideHeight(options) {\n    return unit(options.fixedHeight) || (this.isVertical() ? options.autoHeight ? \"\" : this.cssSlideSize(options) : this.cssHeight(options));\n  };\n\n  _proto3.cssSlideSize = function cssSlideSize(options) {\n    var gap = unit(options.gap);\n    return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n  };\n\n  _proto3.cssAspectRatio = function cssAspectRatio(options) {\n    var heightRatio = options.heightRatio;\n    return heightRatio ? \"\" + 1 / heightRatio : \"\";\n  };\n\n  _proto3.buildCssValue = function buildCssValue(value, unit2) {\n    return \"\" + value + unit2;\n  };\n\n  _proto3.parseCssValue = function parseCssValue(value) {\n    if (isString(value)) {\n      var number = parseFloat(value) || 0;\n      var unit2 = value.replace(/\\d*(\\.\\d*)?/, \"\") || \"px\";\n      return {\n        value: number,\n        unit: unit2\n      };\n    }\n\n    return {\n      value: value,\n      unit: \"px\"\n    };\n  };\n\n  _proto3.parseBreakpoints = function parseBreakpoints() {\n    var _this9 = this;\n\n    var breakpoints = this.options.breakpoints;\n    this.breakpoints.push([\"default\", this.options]);\n\n    if (breakpoints) {\n      forOwn(breakpoints, function (options, width) {\n        _this9.breakpoints.push([width, merge(merge({}, _this9.options), options)]);\n      });\n    }\n  };\n\n  _proto3.isFixedWidth = function isFixedWidth(options) {\n    return !!options[this.Direction.resolve(\"fixedWidth\")];\n  };\n\n  _proto3.isLoop = function isLoop() {\n    return this.options.type === LOOP;\n  };\n\n  _proto3.isCenter = function isCenter(options) {\n    if (options.focus === \"center\") {\n      if (this.isLoop()) {\n        return true;\n      }\n\n      if (this.options.type === SLIDE) {\n        return !this.options.trimSpace;\n      }\n    }\n\n    return false;\n  };\n\n  _proto3.isVertical = function isVertical() {\n    return this.options.direction === TTB;\n  };\n\n  _proto3.buildClasses = function buildClasses() {\n    var options = this.options;\n    return [CLASS_ROOT, CLASS_ROOT + \"--\" + options.type, CLASS_ROOT + \"--\" + options.direction, options.drag && CLASS_ROOT + \"--draggable\", options.isNavigation && CLASS_ROOT + \"--nav\", CLASS_ACTIVE, !this.config.hidden && CLASS_RENDERED].filter(Boolean).join(\" \");\n  };\n\n  _proto3.buildAttrs = function buildAttrs(attrs) {\n    var attr = \"\";\n    forOwn(attrs, function (value, key) {\n      attr += value ? \" \" + camelToKebab(key) + \"=\\\"\" + value + \"\\\"\" : \"\";\n    });\n    return attr.trim();\n  };\n\n  _proto3.buildStyles = function buildStyles(styles) {\n    var style = \"\";\n    forOwn(styles, function (value, key) {\n      style += \" \" + camelToKebab(key) + \":\" + value + \";\";\n    });\n    return style.trim();\n  };\n\n  _proto3.renderSlides = function renderSlides() {\n    var _this10 = this;\n\n    var tag = this.config.slideTag;\n    return this.slides.map(function (content) {\n      return \"<\" + tag + \" \" + _this10.buildAttrs(content.attrs) + \">\" + (content.html || \"\") + \"</\" + tag + \">\";\n    }).join(\"\");\n  };\n\n  _proto3.cover = function cover(content) {\n    var styles = content.styles,\n        _content$html = content.html,\n        html = _content$html === void 0 ? \"\" : _content$html;\n\n    if (this.options.cover && !this.options.lazyLoad) {\n      var src = html.match(/<img.*?src\\s*=\\s*(['\"])(.+?)\\1.*?>/);\n\n      if (src && src[2]) {\n        styles.background = \"center/cover no-repeat url('\" + src[2] + \"')\";\n      }\n    }\n  };\n\n  _proto3.generateClones = function generateClones(contents) {\n    var classes = this.options.classes;\n    var count = this.getCloneCount();\n    var slides = contents.slice();\n\n    while (slides.length < count) {\n      push(slides, slides);\n    }\n\n    push(slides.slice(-count).reverse(), slides.slice(0, count)).forEach(function (content, index) {\n      var attrs = assign({}, content.attrs, {\n        class: content.attrs.class + \" \" + classes.clone\n      });\n      var clone = assign({}, content, {\n        attrs: attrs\n      });\n      index < count ? contents.unshift(clone) : contents.push(clone);\n    });\n  };\n\n  _proto3.getCloneCount = function getCloneCount() {\n    if (this.isLoop()) {\n      var options = this.options;\n\n      if (options.clones) {\n        return options.clones;\n      }\n\n      var perPage = max.apply(void 0, this.breakpoints.map(function (_ref6) {\n        var options2 = _ref6[1];\n        return options2.perPage;\n      }));\n      return perPage * ((options.flickMaxPages || 1) + 1);\n    }\n\n    return 0;\n  };\n\n  _proto3.renderArrows = function renderArrows() {\n    var html = \"\";\n    html += \"<div class=\\\"\" + this.options.classes.arrows + \"\\\">\";\n    html += this.renderArrow(true);\n    html += this.renderArrow(false);\n    html += \"</div>\";\n    return html;\n  };\n\n  _proto3.renderArrow = function renderArrow(prev) {\n    var _this$options = this.options,\n        classes = _this$options.classes,\n        i18n = _this$options.i18n;\n    var attrs = {\n      class: classes.arrow + \" \" + (prev ? classes.prev : classes.next),\n      type: \"button\",\n      ariaLabel: prev ? i18n.prev : i18n.next\n    };\n    return \"<button \" + this.buildAttrs(attrs) + \"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\"><path d=\\\"\" + (this.options.arrowPath || PATH) + \"\\\" /></svg></button>\";\n  };\n\n  _proto3.html = function html() {\n    var _this$config = this.config,\n        rootClass = _this$config.rootClass,\n        listTag = _this$config.listTag,\n        arrows = _this$config.arrows,\n        beforeTrack = _this$config.beforeTrack,\n        afterTrack = _this$config.afterTrack,\n        slider = _this$config.slider,\n        beforeSlider = _this$config.beforeSlider,\n        afterSlider = _this$config.afterSlider;\n    var html = \"\";\n    html += \"<div id=\\\"\" + this.id + \"\\\" class=\\\"\" + this.buildClasses() + \" \" + (rootClass || \"\") + \"\\\">\";\n    html += \"<style>\" + this.Style.build() + \"</style>\";\n\n    if (slider) {\n      html += beforeSlider || \"\";\n      html += \"<div class=\\\"splide__slider\\\">\";\n    }\n\n    html += beforeTrack || \"\";\n\n    if (arrows) {\n      html += this.renderArrows();\n    }\n\n    html += \"<div class=\\\"splide__track\\\">\";\n    html += \"<\" + listTag + \" class=\\\"splide__list\\\">\";\n    html += this.renderSlides();\n    html += \"</\" + listTag + \">\";\n    html += \"</div>\";\n    html += afterTrack || \"\";\n\n    if (slider) {\n      html += \"</div>\";\n      html += afterSlider || \"\";\n    }\n\n    html += \"</div>\";\n    return html;\n  };\n\n  return SplideRenderer;\n}();\n\nexport { CLASSES, CLASS_ACTIVE, CLASS_ARROW, CLASS_ARROWS, CLASS_ARROW_NEXT, CLASS_ARROW_PREV, CLASS_CLONE, CLASS_CONTAINER, CLASS_FOCUS_IN, CLASS_INITIALIZED, CLASS_LIST, CLASS_LOADING, CLASS_NEXT, CLASS_OVERFLOW, CLASS_PAGINATION, CLASS_PAGINATION_PAGE, CLASS_PREV, CLASS_PROGRESS, CLASS_PROGRESS_BAR, CLASS_ROOT, CLASS_SLIDE, CLASS_SPINNER, CLASS_SR, CLASS_TOGGLE, CLASS_TOGGLE_PAUSE, CLASS_TOGGLE_PLAY, CLASS_TRACK, CLASS_VISIBLE, DEFAULTS, EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_END_INDEX_CHANGED, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_OVERFLOW, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_READY, EVENT_REFRESH, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_SHIFTED, EVENT_SLIDE_KEYDOWN, EVENT_UPDATED, EVENT_VISIBLE, EventBinder, EventInterface, FADE, LOOP, LTR, RTL, RequestInterval, SLIDE, STATUS_CLASSES, Splide, SplideRenderer, State, TTB, Throttle, Splide as default };\n","import Splide from '@splidejs/splide';\n\ntype Elements = {\n  sliders: HTMLElement[];\n  videos: HTMLVideoElement[];\n};\n\ntype Hero = {\n  elements: Elements;\n  init: () => void;\n  bindEvents: () => void;\n  initializeVideoPlayers: () => void;\n  initializeSliders: () => void;\n  setupCustomNavigation: (slider: HTMLElement) => void;\n};\n\nconst hero: Hero = {\n  elements: {\n    sliders: [],\n    videos: []\n  },\n\n  init() {\n    this.elements.videos = Array.from(document.querySelectorAll<HTMLVideoElement>('.module__hero video'));\n    this.elements.sliders = Array.from(document.querySelectorAll<HTMLElement>('.module__hero .splide'));\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    if (this.elements.videos.length > 0) {\n      this.initializeVideoPlayers();\n    }\n\n    if (this.elements.sliders.length > 0) {\n      this.initializeSliders();\n    }\n  },\n\n  initializeVideoPlayers() {\n    this.elements.videos.forEach(video => {\n      const wrapper = video.parentElement;\n      const button = wrapper?.querySelector('button');\n\n      // Function to handle video ready state (metadata loaded)\n      const handleVideoReady = () => {\n        wrapper?.classList.add('is-ready');\n      };\n\n      // Check if video is already loaded\n      if (video.readyState >= 4) { // HAVE_ENOUGH_DATA\n        handleVideoReady();\n      } else if (video.readyState >= 2) { // HAVE_CURRENT_DATA\n        handleVideoReady();\n      } else {\n        // If not loaded, wait for both events\n        video.addEventListener('loadedmetadata', handleVideoReady);\n      }\n\n      video.addEventListener('click', () => {\n        if (wrapper?.classList.contains('is-playing')) {\n          video.pause();\n          wrapper?.classList.remove('is-playing');\n        }\n      });\n\n      video.addEventListener('playing', () => {\n        if(video.dataset.controls === 'playing') {\n          video.controls = true;\n        }\n      });\n\n      if (button) {\n        button.addEventListener('click', () => {\n          if (video.paused) {\n            video.play();\n            wrapper?.classList.add('is-playing');\n          } else {\n            video.pause();\n            wrapper?.classList.remove('is-playing');\n          }\n        });\n      }\n    });\n  },\n\n  initializeSliders() {\n    this.elements.sliders.forEach(slider => {\n      this.setupCustomNavigation(slider);\n\n      const splide = new Splide(slider, {\n        type: 'loop',\n        perPage: 1,\n        autoplay: true,\n        interval: 7000,\n        arrows: true,\n        pagination: false,\n      });\n\n      splide.on('mounted', () => {\n        if (splide.length === 1) {\n          splide.options = { ...splide.options, drag: false };\n        }\n      });\n\n      splide.mount();\n    });\n  },\n\n  setupCustomNavigation(slider: HTMLElement) {\n    const buttons: HTMLButtonElement[] = Array.from(slider.querySelectorAll('.module__slide--button button'));\n\n    buttons.forEach(button => {\n      button.addEventListener('click', () => {\n        const isPrevious = button.dataset.action === 'previous';\n        const selector = isPrevious ? '.splide__arrow--prev' : '.splide__arrow--next';\n        const splideButton: HTMLButtonElement | null = slider.querySelector(selector);\n\n        if (splideButton) {\n          splideButton.click();\n        }\n      });\n    });\n  },\n};\n\nexport default hero;\n","import 'slick-carousel';\n\ntype News = {\n  elements: {\n    modules: HTMLElement[];\n  };\n  init: () => void;\n  bindEvents: () => void;\n  createSlider: (module: HTMLElement) => void;\n  handleResize: () => void;\n  equalizeHeights: (slider: JQuery<HTMLElement>) => void;\n  updateNavigation: (module: HTMLElement, currentSlide: number) => void;\n};\n\nconst news: News = {\n  elements: {\n    modules: Array.from(document.querySelectorAll<HTMLElement>('.module--news'))\n  },\n\n  init() {\n    this.bindEvents();\n    window.addEventListener('resize', this.handleResize.bind(this));\n  },\n\n  bindEvents() {\n    if (this.elements.modules.length > 0) {\n      this.elements.modules.forEach(module => {\n        this.createSlider(module);\n      });\n    }\n  },\n\n  createSlider(module: HTMLElement) {\n    const slider = module.querySelector<HTMLElement>('.module__slider');\n    const nav = module.querySelector<HTMLElement>('.module__slider--nav');\n\n    if (!slider || !nav) return;\n\n    const $slick = window.jQuery(slider);\n\n    $slick.on('init', (_event: JQuery.Event, slick: JQuerySlick) => {\n      const totalSlides = slick.slideCount || 0;\n\n      for (let i = 0; i < totalSlides; i++) {\n        nav.insertAdjacentHTML('beforeend', `<button type=\"button\" class=\"slide-link\" aria-label=\"Go to slide ${i + 1}\"><svg width=\"30\" height=\"24\" viewBox=\"0 0 30 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path id=\"Vector\" d=\"M14.9276 0.670298C6.97533 2.70607 0.5 9.55889 0.5 15.8268C0.5 22.0947 6.97533 25.4437 14.9276 23.4021C22.8741 21.2173 29.5 14.3645 29.5 8.1023C29.5 1.84015 22.8741 -1.52031 14.9276 0.670298Z\" fill=\"black\"></path></svg></button>`);\n      }\n\n      this.updateNavigation(module, 0);\n      //setTimeout(() => this.equalizeHeights($slick), 100);\n    });\n\n    $slick.slick({\n      slidesToShow: 3,\n      slidesToScroll: 1,\n      adaptiveHeight: false,\n      slide: '.module__slide',\n      rows: 0,\n      arrows: false,\n      dots: false,\n      autoplay: true,\n      autoplaySpeed: 6000,\n      infinite: true,\n      responsive: [\n        {\n          breakpoint: 999,\n          settings: {\n            slidesToShow: 1,\n            slidesToScroll: 1,\n            autoplay: false,\n          }\n        }\n      ]\n    });\n\n    $slick.on('beforeChange', (_e: JQuery.Event, _slick: JQuerySlick, _currentSlide: number, nextSlide: number) => {\n      this.updateNavigation(module, nextSlide);\n    });\n\n    window.jQuery('.module__slider--nav').on('click', '.slide-link', function(this: HTMLElement) {\n      const isMobile = window.innerWidth < 999;\n      const $navSet = window.jQuery(nav);\n      const dotIndex = Array.from($navSet[0].children).indexOf(this);\n      const slideIndex = isMobile ? dotIndex : dotIndex * 2;\n      if ($slick.hasClass('slick-initialized')) {\n        $slick.slick('slickGoTo', slideIndex);\n      }\n    });\n\n    // $slick.on('afterChange', () => this.equalizeHeights($slick));\n  },\n\n  handleResize() {\n    this.elements.modules.forEach(module => {\n      const slider = module.querySelector<HTMLElement>('.module__slider');\n      if (slider) {\n        const $slick = window.jQuery(slider);\n        if ($slick.hasClass('slick-initialized')) {\n          $slick.slick('setPosition');\n          //this.equalizeHeights($slick);\n          this.updateNavigation(module, $slick.slick('slickCurrentSlide'));\n        }\n      }\n    });\n  },\n\n  equalizeHeights($slider: JQuery<HTMLElement>) {\n    if (!$slider.hasClass('slick-initialized')) return;\n\n    $slider.find('.module__slide, .module__slide > ul, .module__slide > ul > li').height('auto');\n\n    let maxLiHeight = 0;\n    $slider.find('.module__slide > ul > li').each(function() {\n      maxLiHeight = Math.max(maxLiHeight, window.jQuery(this).outerHeight());\n    });\n\n    const slideHeight = maxLiHeight + 2;\n    $slider.find('.module__slide, .module__slide > ul, .module__slide > ul > li').height(slideHeight);\n\n    if ($slider.hasClass('slick-initialized')) {\n      $slider.slick('setPosition');\n    }\n  },\n\n  updateNavigation(module: HTMLElement, currentSlide: number) {\n    const nav = module.querySelector<HTMLElement>('.module__slider--nav');\n\n    if (!nav) return;\n\n    nav.querySelectorAll('.slide-link').forEach((link, index) => {\n      link.classList.toggle('active', index === currentSlide);\n    });\n  }\n};\n\nexport default news;\n","type Elements = {\n  module: HTMLElement | null;\n  categories: HTMLUListElement | null;\n  loadMore: HTMLButtonElement | null;\n  resultsList: HTMLUListElement | null;\n}\n\ntype Inputs = {\n  category: HTMLInputElement | null;\n}\n\ntype NewsList = {\n  postsPerPage: number;\n  elements: Elements;\n  inputs: Inputs;\n  init: () => void;\n  setInputs: () => void;\n  bindEvents: () => void;\n  getValues: () => {\n    page: string | null;\n    category: string | null;\n  };\n  getResults: (page: number) => void;\n  handleCategoryChange: (input: HTMLInputElement) => void;\n  handleLoadMoreClick: () => void;\n  updateURLParameters: (values: ReturnType<NewsList['getValues']>) => void;\n  setInitialStateFromURL: () => void;\n}\n\nconst newsList: NewsList = {\n  postsPerPage: 6,\n\n  elements: {\n    module: document.querySelector('.module--news-list'),\n    categories: document.querySelector('.module--news-list .module__filters'),\n    loadMore: document.querySelector('.module--news-list button[data-action=\"load-more\"]'),\n    resultsList: document.querySelector('.module--news-list .module__content--list ul'),\n  },\n\n  inputs: {\n    category: null\n  },\n\n  init() {\n    if(!this.elements.module) return;\n\n    this.setInputs();\n    this.setInitialStateFromURL();\n    this.bindEvents();\n    this.getResults(parseInt(this.elements.module?.dataset.page || '1', 10));\n  },\n\n  setInputs() {\n    if(!this.elements.categories) return;\n\n    this.inputs.category = this.elements.categories.querySelector('input[type=\"radio\"]:checked');\n  },\n\n  bindEvents() {\n    const radios: HTMLInputElement[] = Array.from(this.elements.categories?.querySelectorAll('input[type=\"radio\"]') || []);\n    if(radios.length > 0) {\n      radios.forEach((radio) => {\n        radio.addEventListener('change', () => this.handleCategoryChange(radio));\n      });\n    }\n\n    this.elements.loadMore?.addEventListener('click', () => this.handleLoadMoreClick());\n\n    window.addEventListener('popstate', () => {\n      this.setInitialStateFromURL();\n      if (this.elements.module) {\n        this.getResults(parseInt(this.elements.module.dataset.page || '1', 10));\n      }\n    });\n  },\n\n  getValues() {\n    return {\n      page: this.elements.module?.dataset.page || '1',\n      category: this.inputs.category?.value || null\n    };\n  },\n\n  getResults(page) {\n    const values = this.getValues();\n    const showingCount = page * this.postsPerPage;\n\n    this.elements.module?.classList.add('loading');\n\n    this.updateURLParameters({ ...values, page: page.toString() });\n\n    window.jQuery.ajax({\n      method: 'POST',\n      url: window.curtis.ajaxurl,\n      data: {\n        action: 'action_get_articles',\n        selected: { ...values, page }\n      },\n    })\n    .success((success: string) => {\n      const data = JSON.parse(success);\n\n      /* update the results html */\n      if(this.elements.resultsList && data.results && page > 1) {\n        this.elements.resultsList.innerHTML = `${this.elements.resultsList.innerHTML}${data.results}`;\n      } else if(this.elements.resultsList && data.results && page === 1) {\n        this.elements.resultsList.innerHTML = data.results;\n      } else if(this.elements.resultsList && !data.results) {\n        this.elements.resultsList.innerHTML = '<li class=\"not-found\">No results found</li>';\n      }\n\n      /* update the page number */\n      this.elements.module?.setAttribute('data-page', `${page}`);\n\n      /* hide the load button if we have all results */\n      if(page === -1 || showingCount >= data.total) {\n        this.elements.loadMore?.classList.add('hidden');\n      } else {\n        this.elements.loadMore?.classList.remove('hidden');\n      }\n    })\n    .fail((_jqXHR: JQuery.jqXHR, _textStatus: string, errorThrown: string) => console.log(errorThrown))\n    .always(() => this.elements.module?.classList.remove('loading'));\n  },\n\n  handleCategoryChange(input: HTMLInputElement) {\n    this.inputs.category = input;\n    this.elements.module?.setAttribute('data-page', '1');\n    this.getResults(1);\n  },\n\n  handleLoadMoreClick() {\n    const newPage = parseInt(this.elements.module?.dataset.page || '1') + 1;\n    this.getResults(newPage);\n  },\n\n  updateURLParameters(values: ReturnType<NewsList['getValues']>) {\n    const searchParams = new URLSearchParams(window.location.search);\n    Object.entries(values).forEach(([ key, value ]) => {\n      if (value !== null && value !== 'all') {\n        searchParams.set(key, value);\n      } else {\n        searchParams.delete(key);\n      }\n    });\n\n    const newURL = `${window.location.pathname}?${searchParams.toString()}`;\n    window.history.pushState(null, '', newURL);\n  },\n\n  setInitialStateFromURL() {\n    const searchParams = new URLSearchParams(window.location.search);\n\n    const page = searchParams.get('page');\n    if (page) {\n      this.elements.module?.setAttribute('data-page', page);\n    }\n\n    const category = searchParams.get('category');\n    if (category && this.elements.categories) {\n      const radio = this.elements.categories.querySelector(`input[type=\"radio\"][value=\"${category}\"]`) as HTMLInputElement | null;\n      if (radio) {\n        radio.checked = true;\n        this.inputs.category = radio;\n      }\n    }\n  },\n};\n\nexport default newsList;\n","type Elements = {\n  module: HTMLElement | null;\n  form: HTMLFormElement | null;\n  sortButtons: HTMLButtonElement[];\n  loadMore: HTMLButtonElement | null;\n  resultsList: HTMLUListElement | null;\n  showingCount: HTMLElement | null;\n  totalCount: HTMLElement | null;\n};\n\ntype Inputs = {\n  name: HTMLInputElement | null;\n  discipline: HTMLSelectElement | null;\n  instrument: HTMLSelectElement | null;\n  yearStart: HTMLSelectElement | null;\n  yearEnd: HTMLSelectElement | null;\n};\n\ntype PeopleSearch = {\n  postsPerPage: number;\n  elements: Elements;\n  inputs: Inputs;\n  init: () => void;\n  setInputs: () => void;\n  bindEvents: () => void;\n  getValues: () => {\n    page: string | null;\n    sort: string | null;\n    search: string | null;\n    discipline: string | null;\n    instrument: string | null;\n    yearStart: string | null;\n    yearEnd: string | null;\n  };\n  getResults: (page: number) => void;\n  handleSortClick: (button: HTMLButtonElement) => void;\n  handleLoadMoreClick: () => void;\n  handleFormSubmit: (e: SubmitEvent) => void;\n  updateURLParameters: (values: ReturnType<PeopleSearch['getValues']>) => void;\n  setInitialStateFromURL: () => void;\n};\n\ntype URLParams = {\n  search?: string;\n  discipline?: string;\n  instrument?: string;\n  yearStart?: string;\n  yearEnd?: string;\n  page?: string;\n  sort?: string;\n};\n\ntype InputKey = keyof Inputs;\n\ntype ParamToInputMap = {\n  [K in keyof URLParams]?: InputKey;\n};\n\nconst paramToInputMap: ParamToInputMap = {\n  search: 'name',\n  discipline: 'discipline',\n  instrument: 'instrument',\n  yearStart: 'yearStart',\n  yearEnd: 'yearEnd',\n};\n\nconst peopleSearch: PeopleSearch = {\n  postsPerPage: 12,\n\n  elements: {\n    module: document.querySelector('.module--people-search[data-search=\"people\"]'),\n    form: document.querySelector('.module--people-search form'),\n    sortButtons: Array.from(document.querySelectorAll('.module--people-search button[data-action=\"sort\"]')),\n    loadMore: document.querySelector('.module--people-search button[data-action=\"load-more\"]'),\n    resultsList: document.querySelector('.module--people-search .module__content--list ul'),\n    showingCount: document.querySelector('.module--people-search .module__content--header span[data-value=\"showing\"]'),\n    totalCount: document.querySelector('.module--people-search .module__content--header span[data-value=\"total\"]'),\n  },\n\n  inputs: {\n    name: null,\n    discipline: null,\n    instrument: null,\n    yearStart: null,\n    yearEnd: null,\n  },\n\n  init() {\n    if (!this.elements.module) {\n      return;\n    }\n\n    this.setInputs();\n    this.setInitialStateFromURL();\n    this.bindEvents();\n  },\n\n  setInputs() {\n    if(!this.elements.form) {\n      return;\n    }\n\n    this.inputs.name = this.elements.form.querySelector('input[name=\"people-name\"]');\n    this.inputs.discipline = this.elements.form.querySelector('select[name=\"people-discipline\"]');\n    this.inputs.instrument = this.elements.form.querySelector('select[name=\"people-instrument\"]');\n    this.inputs.yearStart = this.elements.form.querySelector('select[name=\"people-year-start\"]');\n    this.inputs.yearEnd = this.elements.form.querySelector('select[name=\"people-year-end\"]');\n  },\n\n  bindEvents() {\n    this.elements.form?.addEventListener('submit', (e) => this.handleFormSubmit(e));\n    this.elements.sortButtons.forEach((button) => {\n      button.addEventListener('click', () => this.handleSortClick(button));\n    });\n    this.elements.loadMore?.addEventListener('click', () => this.handleLoadMoreClick());\n\n    window.addEventListener('popstate', () => {\n      this.setInitialStateFromURL();\n      if (this.elements.module) {\n        this.getResults(parseInt(this.elements.module.dataset.page || '1', 10));\n      }\n    });\n  },\n\n  getValues() {\n    return {\n      page: this.elements.module?.dataset.page || null,\n      sort: this.elements.module?.dataset.sort || null,\n      search: this.inputs.name?.value || null,\n      discipline: this.inputs.discipline?.value || null,\n      instrument: this.inputs.instrument?.value || null,\n      yearStart: this.inputs.yearStart?.value || null,\n      yearEnd: this.inputs.yearEnd?.value || null,\n    };\n  },\n\n  getResults(page) {\n    const values = this.getValues();\n    const showingCount = page * this.postsPerPage;\n    const isFaculty = this.elements.module?.classList.contains('faculty');\n\n    this.elements.module?.classList.add('loading');\n\n    this.updateURLParameters({ ...values, page: page.toString() });\n\n    const backendData = {\n      action: 'action_get_people',\n      layout: isFaculty ? 'faculty' : 'default',\n      selected: {\n        ...values,\n        page,\n        discipline: values.discipline || 'all',\n        name: values.search,  // Use 'name' for backend communication\n        types: this.elements.module?.dataset.types || null,\n      },\n    };\n\n    window.jQuery.ajax({\n      method: 'POST',\n      url: window.curtis.ajaxurl,\n      data: backendData,\n    })\n    .success((success: string) => {\n      let data;\n\n      try {\n        data = JSON.parse(success);\n      } catch (e) {\n        console.error('Failed to parse JSON response:', e);\n        return;\n      }\n\n      /* update the results html */\n      if(this.elements.resultsList && data.results && page > 1) {\n        this.elements.resultsList.innerHTML = `${this.elements.resultsList.innerHTML}${data.results}`;\n      } else if(this.elements.resultsList && data.results && (page === 1 || page === -1)) {\n        this.elements.resultsList.innerHTML = data.results;\n      } else if(this.elements.resultsList && !data.results) {\n        this.elements.resultsList.innerHTML = '<li class=\"not-found\">No results found</li>';\n      }\n\n      /* update the page number */\n      this.elements.module?.setAttribute('data-page', `${page}`);\n\n      /* update showing count */\n      if(this.elements.showingCount && page !== -1) {\n        this.elements.showingCount.textContent = `${showingCount > data.total ? data.total : showingCount}`;\n      } else if (this.elements.showingCount && page === -1) {\n        this.elements.showingCount.textContent = `${data.total}`;\n      }\n\n      /* update total matches */\n      if(this.elements.totalCount) {\n        this.elements.totalCount.textContent = `${data.total}`;\n      }\n\n      /* hide the load button if we have all results */\n      if(page === -1 || showingCount >= data.total) {\n        this.elements.loadMore?.classList.add('hidden');\n      } else {\n        this.elements.loadMore?.classList.remove('hidden');\n      }\n    })\n    .fail((_jqXHR: JQuery.jqXHR, _textStatus: string, errorThrown: string) => {\n      console.error('AJAX request failed:', errorThrown);\n    })\n    .always(() => this.elements.module?.classList.remove('loading'));\n  },\n\n  handleSortClick(button) {\n    const sort = button.dataset.type || '';\n    const page = this.elements.module?.dataset.page || '1';\n\n    this.elements.module?.setAttribute('data-sort', sort);\n    if(page !== '-1') {\n      this.elements.module?.setAttribute('data-page', '1');\n    }\n\n    this.getResults(parseInt(page, 10));\n  },\n\n  handleLoadMoreClick() {\n    const newPage = parseInt(this.elements.module?.dataset.page || '1') + 1;\n    this.getResults(newPage);\n  },\n\n  handleFormSubmit(e) {\n    e.preventDefault();\n\n    const page = this.elements.module?.dataset.page || '1';\n    if(page !== '-1') {\n      this.elements.module?.setAttribute('data-page', '1');\n    }\n\n    this.getResults(parseInt(page, 10));\n  },\n\n  updateURLParameters(values: ReturnType<PeopleSearch['getValues']>) {\n    const searchParams = new URLSearchParams(window.location.search);\n    Object.entries(values).forEach(([ key, value ]) => {\n      if (value !== null && value !== 'all') {\n        searchParams.set(key, value);\n      } else {\n        searchParams.delete(key);\n      }\n    });\n\n    const newURL = `${window.location.pathname}?${searchParams.toString()}`;\n    window.history.replaceState(null, '', newURL);\n  },\n\n  setInitialStateFromURL() {\n    const searchParams = new URLSearchParams(window.location.search);\n    const params: Partial<URLParams> = {};\n\n    searchParams.forEach((value, key) => {\n      if (key in paramToInputMap || key === 'page' || key === 'sort') {\n        params[key as keyof URLParams] = value;\n      }\n    });\n\n    let stateChanged = false;\n\n    Object.entries(params).forEach(([ key, value ]) => {\n      if (key === 'page' || key === 'sort') {\n        this.elements.module?.setAttribute(`data-${key}`, value);\n        stateChanged = true;\n      } else {\n        const inputKey = paramToInputMap[key as keyof URLParams];\n        if (inputKey) {\n          const input = this.inputs[inputKey];\n          if (input && value) {\n            if (input instanceof HTMLSelectElement || input instanceof HTMLInputElement) {\n              input.value = value;\n              stateChanged = true;\n            }\n          }\n        }\n      }\n    });\n\n    if (stateChanged) {\n      this.getResults(parseInt(params.page || '1', 10));\n    }\n  }\n};\n\nexport default peopleSearch;\n","import 'slick-carousel';\n\ntype PeopleFeatured = {\n  elements: {\n    modules: NodeListOf<HTMLElement>;\n  };\n  init: () => void;\n  bindEvents: () => void;\n  createSlider: (module: HTMLElement) => void;\n  updateNavigation: (module: HTMLElement, currentSlide: number) => void;\n};\n\nconst peopleFeatured: PeopleFeatured = {\n  elements: {\n    modules: document.querySelectorAll('.module--people-featured')\n  },\n\n  init() {\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    if (this.elements.modules.length > 0) {\n      this.elements.modules.forEach(module => {\n        this.createSlider(module);\n      });\n    }\n  },\n\n  createSlider(module: HTMLElement) {\n    const slider = module.querySelector<HTMLElement>('.module__slider');\n    const nav = module.querySelector<HTMLElement>('.module__slider--nav');\n\n    if (!slider || !nav) return;\n\n    const $slick = window.jQuery(slider);\n\n    $slick.on('init', (_event: JQuery.Event, slick: JQuerySlick) => {\n      const totalSlides = slick.slideCount || 0;\n\n      for (let i = 0; i < totalSlides; i++) {\n        nav.insertAdjacentHTML('beforeend', `<button type=\"button\" class=\"slide-link\" aria-label=\"Go to slide ${i + 1}\"><svg width=\"30\" height=\"24\" viewBox=\"0 0 30 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path id=\"Vector\" d=\"M14.9276 0.670298C6.97533 2.70607 0.5 9.55889 0.5 15.8268C0.5 22.0947 6.97533 25.4437 14.9276 23.4021C22.8741 21.2173 29.5 14.3645 29.5 8.1023C29.5 1.84015 22.8741 -1.52031 14.9276 0.670298Z\" fill=\"black\"></path></svg></button>`);\n      }\n\n      this.updateNavigation(module, 0);\n    });\n\n    $slick.slick({\n      slidesToShow: 1,\n      slidesToScroll: 1,\n      adaptiveHeight: false,\n      slide: '.module__slide',\n      rows: 0,\n      arrows: false,\n      dots: false,\n      autoplay: true,\n      autoplaySpeed: 5000,\n      infinite: true\n    });\n\n    $slick.on('beforeChange', (_e: JQuery.Event, _slick: JQuerySlick, _currentSlide: number, nextSlide: number) => {\n      this.updateNavigation(module, nextSlide);\n    });\n\n    window.jQuery('.module__slider--nav').on('click', '.slide-link', function(this: HTMLElement) {\n      const $navSet = window.jQuery(nav);\n      const dotIndex = Array.from($navSet[0].children).indexOf(this);\n      if ($slick.hasClass('slick-initialized')) {\n        $slick.slick('slickGoTo', dotIndex);\n      }\n    });\n  },\n\n  updateNavigation(module: HTMLElement, currentSlide: number) {\n    const nav = module.querySelector<HTMLElement>('.module__slider--nav');\n\n    if (!nav) return;\n\n    nav.querySelectorAll('.slide-link').forEach((link, index) => {\n      link.classList.toggle('active', index === currentSlide);\n    });\n  }\n};\n\nexport default peopleFeatured;\n","function createStickyObserver(element: HTMLElement) {\n  let stickyTriggered = false;\n  const originalTopPosition = element.getBoundingClientRect().top + window.scrollY;\n  const style = window.getComputedStyle(element);\n\n  // Create an observer for the element\n  const observer = new IntersectionObserver((entries) => {\n    const entry = entries[0];\n\n    if (entry.isIntersecting) {\n      // Element is visible, start listening for scroll events\n      window.addEventListener('scroll', checkStickyState);\n    } else {\n      // Element is not visible, remove scroll listener\n      window.removeEventListener('scroll', checkStickyState);\n      element.classList.remove('stuck');\n      stickyTriggered = false;\n    }\n  }, { threshold: 0 });\n\n  function checkStickyState() {\n    const STICKY_THRESHOLD = parseFloat(style.getPropertyValue('top'));\n    const scrollY = window.scrollY;\n\n    if (!stickyTriggered && scrollY + STICKY_THRESHOLD >= originalTopPosition) {\n      element.classList.add('stuck');\n      stickyTriggered = true;\n    } else if (stickyTriggered && scrollY + STICKY_THRESHOLD < originalTopPosition) {\n      element.classList.remove('stuck');\n      stickyTriggered = false;\n    }\n  }\n\n  observer.observe(element);\n\n  // Clean up function\n  return () => {\n    observer.disconnect();\n    window.removeEventListener('scroll', checkStickyState);\n  };\n}\n\nexport default createStickyObserver;\n","import createStickyObserver from '@/scripts/helpers/sticky-observer';\n\ninterface AlumniResponse {\n  results?: string;\n  total?: number;\n}\n\ntype Elements = {\n  module: HTMLElement | null;\n  intro: HTMLElement | null;\n  formWrapper: HTMLElement | null;\n  form: HTMLFormElement | null;\n  sortButtons: HTMLButtonElement[];\n  loadMore: HTMLButtonElement | null;\n  resultsList: HTMLUListElement | null;\n  showingCount: HTMLElement | null;\n  totalCount: HTMLElement | null;\n};\n\ntype Inputs = {\n  name: HTMLInputElement | null;\n  major: HTMLSelectElement | null;\n  yearStart: HTMLSelectElement | null;\n  yearEnd: HTMLSelectElement | null;\n};\n\ntype FilterValues = {\n  page: string | null;\n  sort: string | null;\n  order: string | null;\n  search: string | null;\n  major: string | null;\n  yearStart: string | null;\n  yearEnd: string | null;\n};\n\ntype URLParams = {\n  page?: string;\n  sort?: string;\n  order?: string;\n  search?: string;\n  major?: string;\n  yearStart?: string;\n  yearEnd?: string;\n};\n\ntype InputKey = keyof Inputs;\n\ntype ParamToInputMap = {\n  [K in keyof URLParams]: InputKey | null;\n};\n\nconst paramToInputMap: ParamToInputMap = {\n  search: 'name',\n  major: 'major',\n  yearStart: 'yearStart',\n  yearEnd: 'yearEnd',\n  page: null,    // These don't map to inputs but need to be included\n  sort: null,    // for the ParamToInputMap type\n  order: null\n};\n\ninterface AlumniSearch {\n  postsPerPage: number;\n  elements: Elements;\n  inputs: Inputs;\n  init(): void;\n  setInputs(): void;\n  bindEvents(): void;\n  getValues(): FilterValues;\n  getResults(page: number): void;\n  handleSortClick(button: HTMLButtonElement): void;\n  handleLoadMoreClick(): void;\n  handleFormSubmit(e: SubmitEvent): void;\n  updateURLParameters(values: FilterValues): void;\n  setInitialStateFromURL(): void;\n}\n\nconst alumniSearch: AlumniSearch = {\n  postsPerPage: 48,\n\n  elements: {\n    module: document.querySelector('.module--people-search[data-search=\"alumni\"]'),\n    intro: document.querySelector('.module--people-search[data-search=\"alumni\"] .module__intro'),\n    formWrapper: document.querySelector('.module--people-search[data-search=\"alumni\"] .module__form'),\n    form: document.querySelector('.module--people-search[data-search=\"alumni\"] form'),\n    sortButtons: Array.from(document.querySelectorAll('.module--people-search[data-search=\"alumni\"] button[data-action=\"sort\"]')),\n    loadMore: document.querySelector('.module--people-search[data-search=\"alumni\"] button[data-action=\"load-more\"]'),\n    resultsList: document.querySelector('.module--people-search[data-search=\"alumni\"] .module__content--list ul'),\n    showingCount: document.querySelector('.module--people-search[data-search=\"alumni\"] .module__content--header span[data-value=\"showing\"]'),\n    totalCount: document.querySelector('.module--people-search[data-search=\"alumni\"] .module__content--header span[data-value=\"total\"]'),\n  },\n\n  inputs: {\n    name: null,\n    major: null,\n    yearStart: null,\n    yearEnd: null,\n  },\n\n  init() {\n    if (!this.elements.module) {\n      return;\n    }\n\n    this.setInputs();\n    this.setInitialStateFromURL();\n    this.bindEvents();\n    this.getResults(parseInt(this.elements.module.dataset.page || '1', 10));\n  },\n\n  setInputs() {\n    if(!this.elements.form) {\n      return;\n    }\n\n    this.inputs.name = this.elements.form.querySelector('input[name=\"people-name\"]');\n    this.inputs.major = this.elements.form.querySelector('select[name=\"people-major\"]');\n    this.inputs.yearStart = this.elements.form.querySelector('select[name=\"people-year-start\"]');\n    this.inputs.yearEnd = this.elements.form.querySelector('select[name=\"people-year-end\"]');\n  },\n\n  bindEvents() {\n    this.elements.form?.addEventListener('submit', (e) => this.handleFormSubmit(e));\n    this.elements.sortButtons.forEach((button) => {\n      button.addEventListener('click', () => this.handleSortClick(button));\n    });\n    this.elements.loadMore?.addEventListener('click', () => this.handleLoadMoreClick());\n\n    window.addEventListener('popstate', () => {\n      this.setInitialStateFromURL();\n      if (this.elements.module) {\n        this.getResults(parseInt(this.elements.module.dataset.page || '1', 10));\n      }\n    });\n\n    window.addEventListener('load', () => {\n      if(this.elements.intro) {\n        createStickyObserver(this.elements.intro);\n      }\n\n      if(this.elements.formWrapper) {\n        createStickyObserver(this.elements.formWrapper);\n      }\n    });\n  },\n\n  getValues(): FilterValues {\n    return {\n      page: this.elements.module?.dataset.page || null,\n      sort: this.elements.module?.dataset.sort || null,\n      order: this.elements.module?.dataset.order || null,\n      search: this.inputs.name?.value || null,\n      major: this.inputs.major?.value || null,\n      yearStart: this.inputs.yearStart?.value || null,\n      yearEnd: this.inputs.yearEnd?.value || null,\n    };\n  },\n\n  getResults(page: number) {\n    const values = this.getValues();\n    const showingCount = page * this.postsPerPage;\n\n    this.elements.module?.classList.add('loading');\n\n    this.updateURLParameters({ ...values, page: page.toString() });\n\n    const backendData = {\n      action: 'action_get_alumni',\n      selected: {\n        ...values,\n        page,\n        name: values.search,\n        major: values.major,\n        'year-start': values.yearStart,\n        'year-end': values.yearEnd,\n        types: this.elements.module?.dataset.types || null,\n      },\n    };\n\n    console.log(backendData);\n\n    window.jQuery.ajax({\n      method: 'POST',\n      url: window.curtis.ajaxurl,\n      data: backendData,\n    })\n    .done((success: string) => {\n      let data: AlumniResponse;\n      try {\n        data = JSON.parse(success);\n      } catch (e) {\n        console.error('Failed to parse JSON response:', e);\n        return;\n      }\n\n      if(this.elements.resultsList && data.results && page > 1) {\n        this.elements.resultsList.innerHTML = `${this.elements.resultsList.innerHTML}${data.results}`;\n      } else if(this.elements.resultsList && data.results && (page === 1 || page === -1)) {\n        this.elements.resultsList.innerHTML = data.results;\n      } else if(this.elements.resultsList) {\n        this.elements.resultsList.innerHTML = '<li class=\"not-found\">No results found</li>';\n      }\n\n      if(data.total !== undefined) {\n        /* update the page number */\n        this.elements.module?.setAttribute('data-page', `${page}`);\n\n        /* update showing count */\n        if(this.elements.showingCount && page !== -1) {\n          this.elements.showingCount.textContent = `${showingCount > data.total ? data.total : showingCount}`;\n        } else if (this.elements.showingCount && page === -1) {\n          this.elements.showingCount.textContent = `${data.total}`;\n        }\n\n        /* update total matches */\n        if(this.elements.totalCount) {\n          this.elements.totalCount.textContent = `${data.total}`;\n        }\n\n        /* hide the load button if we have all results */\n        if(page === -1 || showingCount >= data.total) {\n          this.elements.loadMore?.classList.add('hidden');\n        } else {\n          this.elements.loadMore?.classList.remove('hidden');\n        }\n      }\n    })\n    .fail((_jqXHR: JQuery.jqXHR, _textStatus: string, errorThrown: string) => {\n      console.error('AJAX request failed:', errorThrown);\n    })\n    .always(() => this.elements.module?.classList.remove('loading'));\n  },\n\n  handleSortClick(button: HTMLButtonElement) {\n    const newSortType = button.dataset.type || '';\n    const newSortOrder = button.dataset.order || 'asc';\n    const currentSortType = this.elements.module?.dataset.sort || '';\n    const currentSortOrder = this.elements.module?.dataset.order || 'asc';\n    const page = this.elements.module?.dataset.page || '1';\n\n    let finalSortOrder: 'asc' | 'desc';\n\n    if (newSortType === currentSortType) {\n      finalSortOrder = currentSortOrder === 'asc' ? 'desc' : 'asc';\n      button.setAttribute('data-order', finalSortOrder);\n    } else {\n      finalSortOrder = newSortOrder as 'asc' | 'desc';\n    }\n\n    this.elements.module?.setAttribute('data-sort', newSortType);\n    this.elements.module?.setAttribute('data-order', finalSortOrder);\n\n    if (page !== '-1') {\n      this.elements.module?.setAttribute('data-page', '1');\n    }\n\n    this.getResults(parseInt(page, 10));\n  },\n\n  handleLoadMoreClick() {\n    const newPage = parseInt(this.elements.module?.dataset.page || '1') + 1;\n    this.getResults(newPage);\n  },\n\n  handleFormSubmit(e: SubmitEvent) {\n    e.preventDefault();\n\n    const page = this.elements.module?.dataset.page || '1';\n    if(page !== '-1') {\n      this.elements.module?.setAttribute('data-page', '1');\n    }\n\n    this.getResults(parseInt(page, 10));\n  },\n\n  updateURLParameters(values: FilterValues) {\n    const searchParams = new URLSearchParams(window.location.search);\n    Object.entries(values).forEach(([ key, value ]) => {\n        // Only set parameters if they have a meaningful value\n        if (value !== null && value !== '' && value !== 'all' && value !== 'asc') {\n            searchParams.set(key, value);\n        } else {\n            searchParams.delete(key);\n        }\n    });\n\n    const newURL = `${window.location.pathname}${searchParams.toString() ? '?' + searchParams.toString() : ''}`;\n    window.history.pushState(null, '', newURL);\n  },\n\n  setInitialStateFromURL() {\n    const searchParams = new URLSearchParams(window.location.search);\n    const params: Partial<URLParams> = {};\n\n    searchParams.forEach((value, key) => {\n      if (key in paramToInputMap) {\n        params[key as keyof URLParams] = value;\n      }\n    });\n\n    Object.entries(params).forEach(([ key, value ]) => {\n      const inputKey = paramToInputMap[key as keyof URLParams];\n      if (inputKey && value) {  // Only proceed if inputKey is not null\n        const input = this.inputs[inputKey];\n        if (input && (input instanceof HTMLSelectElement || input instanceof HTMLInputElement)) {\n          input.value = value;\n        }\n      }\n    });\n  }\n};\n\nexport default alumniSearch;\n","// Add interface for AJAX response\ninterface WorksResponse {\n  results?: string;\n  total?: number;\n}\n\ntype Elements = {\n  module: HTMLElement | null;\n  intro: HTMLElement | null;\n  form: HTMLFormElement | null;\n  toggle: HTMLButtonElement | null;\n  resultsList: HTMLUListElement | null;\n};\n\ntype Inputs = {\n  keyword: HTMLInputElement | null;\n  composer: HTMLSelectElement | null;\n  instrument: HTMLSelectElement | null;\n  year: HTMLSelectElement | null;\n  centennial: HTMLInputElement | null;\n};\n\ntype FilterValues = {\n  keyword: string | null;\n  composer: string | null;\n  instrument: string | null;\n  year: string | null;\n  centennial: boolean;\n};\n\ntype URLParams = {\n  keyword?: string;\n  composer?: string;\n  instrument?: string;\n  year?: string;\n  centennial?: 'true' | 'false';\n};\n\ntype InputKey = keyof Inputs;\n\ntype ParamToInputMap = {\n  [K in keyof URLParams]: InputKey;\n};\n\nconst paramToInputMap: ParamToInputMap = {\n  keyword: 'keyword',\n  composer: 'composer',\n  instrument: 'instrument',\n  year: 'year',\n  centennial: 'centennial'\n};\n\ninterface WorksSearch {\n  postsPerPage: number;\n  elements: Elements;\n  inputs: Inputs;\n  init(): void;\n  setInputs(): void;\n  bindEvents(): void;\n  getValues(): FilterValues;\n  updateURLParameters(values: FilterValues): void;\n  setInitialStateFromURL(): void;\n  handleFormSubmit(e: SubmitEvent): void;\n  handleToggleClick(): void;\n  getResults(): void;\n}\n\nconst worksSearch: WorksSearch = {\n  postsPerPage: 48,\n\n  elements: {\n    module: document.querySelector('.module--works'),\n    intro: document.querySelector('.module--works .module__intro'),\n    form: document.querySelector('.module--works form'),\n    toggle: document.querySelector('.module--works button[data-action=\"works-filter-toggle\"]'),\n    resultsList: document.querySelector('.module--works .module__list > .container')\n  },\n\n  inputs: {\n    keyword: null,\n    composer: null,\n    instrument: null,\n    year: null,\n    centennial: null,\n  },\n\n  init() {\n    if (!this.elements.module) {\n      return;\n    }\n\n    this.setInputs();\n    this.setInitialStateFromURL();\n    this.bindEvents();\n    this.getResults();\n  },\n\n  setInputs() {\n    if(!this.elements.form) {\n      return;\n    }\n\n    this.inputs.keyword = this.elements.form.querySelector('input[name=\"filter-keyword\"]');\n    this.inputs.composer = this.elements.form.querySelector('select[name=\"filter-composer\"]');\n    this.inputs.instrument = this.elements.form.querySelector('select[name=\"filter-instrument\"]');\n    this.inputs.year = this.elements.form.querySelector('select[name=\"filter-year\"]');\n    this.inputs.centennial = this.elements.form.querySelector('input[name=\"filter-centennial\"]');\n  },\n\n  bindEvents() {\n    this.elements.form?.addEventListener('submit', (e) => this.handleFormSubmit(e));\n    this.elements.toggle?.addEventListener('click', () => this.handleToggleClick());\n\n    Object.values(this.inputs).forEach(input => {\n      if (input) {\n        if (input instanceof HTMLSelectElement ||\n            (input instanceof HTMLInputElement && input.type === 'checkbox')) {\n          input.addEventListener('change', () => this.getResults());\n        }\n      }\n    });\n\n    window.addEventListener('popstate', () => {\n      this.setInitialStateFromURL();\n      if (this.elements.module) {\n        this.getResults();\n      }\n    });\n  },\n\n  getValues(): FilterValues {\n    return {\n      keyword: this.inputs.keyword?.value || null,\n      composer: this.inputs.composer?.value || null,\n      instrument: this.inputs.instrument?.value || null,\n      year: this.inputs.year?.value || null,\n      centennial: Boolean(this.inputs.centennial?.checked),\n    };\n  },\n\n  updateURLParameters(values: FilterValues) {\n    const searchParams = new URLSearchParams(window.location.search);\n\n    Object.entries(values).forEach(([ key, value ]) => {\n      if (key === 'centennial') {\n        if (value === true) {\n          searchParams.set(key, 'true');\n        } else {\n          searchParams.delete(key);\n        }\n      } else if (value !== null && value !== 'all') {\n        searchParams.set(key, String(value));\n      } else {\n        searchParams.delete(key);\n      }\n    });\n\n    const newURL = `${window.location.pathname}?${searchParams.toString()}`;\n    window.history.pushState(null, '', newURL);\n  },\n\n  setInitialStateFromURL() {\n    const searchParams = new URLSearchParams(window.location.search);\n    const params: Partial<URLParams> = {};\n\n    searchParams.forEach((value, key) => {\n      if (key in paramToInputMap) {\n        if (key === 'centennial') {\n          if (value === 'true' || value === 'false') {\n            params[key] = value;\n          }\n        } else {\n          params[key as Exclude<keyof URLParams, 'centennial'>] = value;\n        }\n      }\n    });\n\n    Object.entries(params).forEach(([ key, value ]) => {\n      const inputKey = paramToInputMap[key as keyof URLParams];\n      if (inputKey && value) {\n        const input = this.inputs[inputKey];\n        if (input) {\n          if (input instanceof HTMLInputElement && input.type === 'checkbox') {\n            input.checked = value === 'true';\n          } else if (input instanceof HTMLSelectElement || input instanceof HTMLInputElement) {\n            input.value = value;\n          }\n        }\n      }\n    });\n  },\n\n  handleFormSubmit(e: SubmitEvent) {\n    e.preventDefault();\n    this.getResults();\n  },\n\n  handleToggleClick() {\n    this.elements.module?.classList.toggle('filter-open');\n  },\n\n  getResults() {\n    const values = this.getValues();\n    this.elements.module?.classList.add('loading');\n    this.updateURLParameters(values);\n\n    const backendData = {\n      action: 'action_get_works',\n      selected: {\n        ...values,\n        centennial: values.centennial ? 'true' : 'false'\n      },\n    };\n\n    window.jQuery.ajax({\n      method: 'POST',\n      url: window.curtis.ajaxurl,\n      data: backendData,\n    })\n    .done((success: string) => {\n      let data: WorksResponse;\n      try {\n        data = JSON.parse(success);\n      } catch (e) {\n        console.error('Failed to parse JSON response:', e);\n        return;\n      }\n\n      if(this.elements.resultsList && data.results) {\n        this.elements.resultsList.innerHTML = data.results;\n      } else if(this.elements.resultsList) {\n        this.elements.resultsList.innerHTML = '<li class=\"not-found\">No results found</li>';\n      }\n    })\n    .fail((_jqXHR: JQuery.jqXHR, _textStatus: string, errorThrown: string) => {\n      console.error('AJAX request failed:', errorThrown);\n    })\n    .always(() => this.elements.module?.classList.remove('loading'));\n  },\n};\n\nexport default worksSearch;\n","import Splide from '@splidejs/splide';\n\ntype Elements = {\n  sliders: HTMLElement[];\n};\n\ntype Quotes = {\n  elements: Elements;\n  init: () => void;\n  bindEvents: () => void;\n  initializeSliders: () => void;\n};\n\nconst quotes: Quotes = {\n  elements: {\n    sliders: [],\n  },\n\n  init() {\n    this.elements.sliders = Array.from(document.querySelectorAll<HTMLElement>('.module--quotes .splide'));\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', () => this.initializeSliders());\n    } else {\n      this.initializeSliders();\n    }\n  },\n\n  initializeSliders() {\n    if (this.elements.sliders.length > 0) {\n      this.elements.sliders.forEach(slider => {\n        const splide = new Splide(slider, {\n          type: 'loop',\n          perPage: 1,\n          autoplay: true,\n          arrows: false,\n          pagination: false,\n        });\n\n        splide.on('mounted', () => {\n          if (splide.length === 1) {\n            splide.options = { ...splide.options, drag: false };\n          }\n        });\n\n        splide.mount();\n      });\n    }\n  }\n};\n\nexport default quotes;\n","import Splide from '@splidejs/splide';\n\nconst sectionSlider = {\n  elements: {\n    sections: Array.from(document.querySelectorAll<HTMLElement>('.module__content--slideshow'))\n  },\n\n  init() {\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    if(!this.elements.sections.length) return;\n\n    this.elements.sections.forEach(section => this.createSlider(section));\n  },\n\n  createSlider(section: HTMLElement) {\n    const counter: HTMLElement | null = section.querySelector('[data-value=\"current\"]');\n    const slider: HTMLElement | null = section.querySelector('.splide');\n\n    if(!slider || !counter) return;\n\n    const buttonPrev = section.querySelector('button[data-action=\"previous\"]');\n    const buttonNext = section.querySelector('button[data-action=\"next\"]');\n\n    const splide = new Splide(slider, {\n      type: 'loop',\n      perPage: 1,\n      autoplay: true,\n      arrows: false,\n      pagination: false,\n    });\n\n    buttonPrev?.addEventListener('click', () => {\n      splide.go('<');\n    });\n\n    buttonNext?.addEventListener('click', () => {\n      splide.go('>');\n    });\n\n    splide.on('mounted', () => {\n      if ( splide.length === 1 ) {\n        splide.options.drag = false;\n      }\n    });\n\n    splide.on('moved', (newIndex) => {\n      counter.textContent = `${newIndex + 1}`;\n    });\n\n    splide.mount();\n  }\n};\n\nexport default sectionSlider;\n","import lottie from 'lottie-web';\n\nconst designs = {\n  elements: {\n    figures: Array.from(document.querySelectorAll('.design-assets figure'))\n  },\n\n  init() {\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    if(!this.elements.figures.length) return;\n\n    this.elements.figures.forEach((figure) => this.setupFigure(figure));\n  },\n\n  setupFigure(figure: Element) {\n    const path = figure.getAttribute('data-path');\n    const element = figure.querySelector('.design-assets__animation');\n\n    if(path && element) {\n      fetch(path)\n        .then(response => response.json())\n        .then(file => {\n          lottie.loadAnimation({\n            container: element,\n            renderer: 'svg',\n            loop: true,\n            autoplay: true,\n            animationData: file,\n          });\n        });\n    }\n  }\n};\n\nexport default designs;\n","const typography = {\n  elements: {\n    colons: [],\n    percentages: []\n  },\n\n  init() {\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    document.addEventListener('DOMContentLoaded', () => {\n      this.setElements();\n      this.adjustCharacter(':', 'colon', this.elements.colons);\n      this.adjustCharacter('%', 'percent', this.elements.percentages);\n    });\n  },\n\n  setElements() {\n    this.elements.colons = Array.from(document.querySelectorAll('.module--statistics__item--value'));\n    this.elements.percentages = Array.from(document.querySelectorAll('.module--statistics__item--value'));\n  },\n\n  adjustCharacter(character: string, name: string, elements: HTMLElement[]) {\n    elements.forEach(element => {\n      element.innerHTML = element.innerHTML.replace(\n        new RegExp(character, 'g'),\n        `<span class=\"character--${name}\">${character}</span>`\n      );\n    });\n  }\n};\n\nexport default typography;\n","const iframes = {\n  elements: {\n    iframes: Array.from(document.querySelectorAll('.curtis-text iframe')) as HTMLIFrameElement[],\n    videos: [] as HTMLIFrameElement[]\n  },\n\n  init() {\n    this.elements.videos = Array.from(this.elements.iframes).filter(iframe => {\n      const src = iframe.src.toLowerCase();\n      return src.includes('youtube.com') ||\n             src.includes('vimeo.com') ||\n             src.includes('dailymotion.com') ||\n            src.includes('video');\n    });\n\n    this.bindEvents();\n  },\n\n  bindEvents() {\n    if(!this.elements.videos.length) return;\n\n    this.elements.videos.forEach((iframe) => this.wrap(iframe));\n  },\n\n  wrap(element: Element) {\n    if(!element || !element.parentNode) return;\n\n    const wrapper = document.createElement('div');\n    wrapper.classList.add('iframe-wrapper');\n    element.parentNode.insertBefore(wrapper, element);\n    wrapper.appendChild(element);\n  }\n};\n\nexport default iframes;\n","/* Scripts: Parts */\nimport header from '@/scripts/parts/header';\nimport navigation from '@/scripts/parts/navigation';\nimport footer from '@/scripts/parts/footer';\nimport search from '@/scripts/parts/search';\n\n/* Scripts: Modules */\nimport accordionGroup from '@/scripts/modules/accordion-group';\nimport divider from '@/scripts/modules/divider';\nimport event from '@/scripts/modules/event';\nimport events from '@/scripts/modules/events';\nimport eventsList from '@/scripts/modules/events-list';\nimport gallerySlider from '@/scripts/modules/gallery-slider';\nimport hero from '@/scripts/modules/hero';\nimport news from '@/scripts/modules/news';\nimport newsList from '@/scripts/modules/news-list';\nimport peopleSearch from '@/scripts/modules/people-search';\nimport peopleFeatured from '@/scripts/modules/people-featured';\nimport alumniSearch from '@/scripts/modules/alumni-search';\nimport worksSearch from '@/scripts/modules/works-search';\nimport quotes from '@/scripts/modules/quotes';\nimport sectionSlider from '@/scripts/modules/section-slider';\n\n/* Scripts: Elements */\nimport designs from '@/scripts/elements/designs';\nimport typography from '@/scripts/elements/typography';\nimport iframes from '@/scripts/elements/iframes';\n\n/* Initialize: Parts */\nheader.init();\nnavigation.init();\nfooter.init();\nsearch.init();\n\n/* Initialize: Modules */\naccordionGroup.init();\ndivider.init();\nevent.init();\nevents.init();\neventsList.init();\ngallerySlider.init();\nhero.init();\nnews.init();\nnewsList.init();\npeopleFeatured.init();\npeopleSearch.init();\nalumniSearch.init();\nworksSearch.init();\nquotes.init();\nsectionSlider.init();\n\n/* Initialize: Elements */\ndesigns.init();\ntypography.init();\niframes.init();\n\n/* Styles */\nimport './styles/main.scss';\nimport '@splidejs/splide/dist/css/splide.min.css';\nimport 'slick-carousel/slick/slick.css';\n\n/* Assets */\nimport './fonts/Curtis-Regular.otf';\n\n/* Ready */\nwindow.addEventListener('DOMContentLoaded', () => {\n  console.log('Assets Loaded');\n});\n"],"names":["func","wait","immediate","timeout","args","callNow","later","element","className","threshold","lastScrollPosition","handleScroll","_a","_b","currentScrollPosition","ticking","menu","overview","secondaryMenu","closest","closestDistance","module","distance","scrollPosition","windowHeight","headerHeight","activeIndex","i","moduleTop","moduleBottom","link","index","button","item","toggle","_c","_d","label","activeItem","wasOpen","global","factory","this","flag","value","type","sources","destination","len","sourcePrototype","attr","object","prop","prototype","ProxyFunction","AudioController","audioFactory","audio","rateValue","assetPath","createRegularArray","arr","createTypedArrayFactory","obj","propertyNames","val","tOfVal","absArr","currentTime","totalTime","frameMultiplier","totalLoops","currentLoop","firstFrame","totalFrames","target","nativeError","_count","h","s","v","r","g","b","f","p","q","t","max","min","d","color","offset","hsv","colorMap","hex","_counterId","processes","workerFn","workerInstance","workerProxy","path","_workerSelf","data","createWorker","fn","blob","url","setupWorker","e","dataFunctionManager","completeLayers","layers","comps","layerData","j","jLen","k","kLen","maskProps","convertPathsToAbsoluteValues","findCompLayers","completeShapes","completeText","completeChars","chars","assets","findComp","id","comp","checkVersion","minimum","animVersionString","animVersion","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","animationData","checkChars","charData","checkPathProperties","pathData","checkColors","iterateShapes","shapes","checkShapes","completeClosingShapes","completeData","moduleOb","formatResponse","xhr","contentTypeHeader","loadAsset","fullPath","callback","errorCallback","response","err","animation","event","process","createProcess","onComplete","onError","loadAnimation","processId","loadData","completeAnimation","anim","proxyImage","canvas","ctx","imageLoaded","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","testImageLoaded","img","intervalId","box","createImageData","ob","createImgData","createFootageData","footageData","loadAssets","cb","setPath","setAssetsPath","getAsset","destroy","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","eventName","callbacks","parsePayloadLines","payload","lines","keys","line","keysCount","_markers","markers","_marker","markerData","registerComposition","_thisProjectFunction","name","key","params","animType","RendererClass","wrapper","wrapperAttributes","loop","autoplay","prerender","newLayers","expressionsPlugin","segments","segment","segmentPath","animData","error","width","height","_width","_height","markerName","marker","isFrame","numValue","nextValue","_isComplete","init","end","pendingFrame","forceFlag","isLooping","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","setupAnimation","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","setSpeed","setDirection","play","resume","nowTime","elapsedTime","first","pause","goToAndStop","stop","togglePause","searchAnimations","standalone","renderer","animElements","body","div","resize","freeze","unfreeze","setVolume","mute","unmute","getBezierEasing","beziers","a","c","nm","str","bezEasing","BezierEasing","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","points","x","mY1","mY2","mSampleValues","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","_double","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","create","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","pointOnLine3D","z1","z2","z3","dist1","dist2","dist3","diffDist","getBezierLength","pt1","pt2","pt3","pt4","curveSegments","ptCoord","perc","addedLength","ptDistance","point","lastPoint","lengthData","getSegmentsLength","shapeData","segmentsLength","closed","pathV","pathO","pathI","lengths","totalLength","BezierData","length","PointData","partial","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","percents","initPos","lengthPos","lPerc","dir","getPointInSegment","percent","t1","u1","ptX","ptY","bezierSegmentPoints","getNewSegment","startPerc","endPerc","t0","u0","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","frameNum","caching","offsetTime","newValue","iterationIndex","keyData","nextKeyData","keyframeMetadata","fnc","nextKeyTime","keyTime","endValue","ind","distanceInLine","segmentPerc","outX","outY","inX","inY","keyValue","quatStart","quatEnd","time","out","ax","ay","az","aw","bx","by","bz","bw","omega","cosom","sinom","scale0","scale1","quat","qx","qy","qz","qw","heading","attitude","bank","values","c1","c2","c3","s1","s2","s3","w","y","z","endTime","renderResult","multipliedValue","finalValue","effectFunction","elem","mult","container","to","ti","arrLen","getProp","pos","replace","vX","vY","oX","oY","iX","iY","newPath","vertices","outPoints","inPoints","cnt","shapePath","clone","shape","cloned","newShapeCollection","shapeCollection","initFrame","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","kf","interpolateShapeCurrentTime","lastFrame","resetShape","shapesEqual","shape1","shape2","setVValue","processEffectsSequence","ShapeProperty","addEffect","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","rad","roundness","perimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","v0","v1","round","getShapeProp","dataProp","getConstructorFunction","getKeyframedConstructorFunction","_cos","_sin","_tan","_rnd","reset","rotate","mCos","mSin","rotateX","rotateY","rotateZ","shear","sx","sy","skew","skewFromAxis","scale","sz","setTransform","l","m","n","o","translate","tx","ty","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_p","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","equals","matr","cloneFromProps","props","applyToPoint","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","pt","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointArray","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_e","_f","href","prefix","plugin","variable","vars","pair","modifiers","registerModifier","getModifier","shapeLength","totalModifierLength","shapeSegments","segmentOb","shapeS","shapeE","pathsData","_isFirstFrame","_s","shapePaths","totalShapeLength","localShapeCollection","edges","newShapesData","lastShapeInCollection","lastShape","newPaths","newShape","shapeSegment","currentLengthData","segmentCount","segmentLength","amount","centerPoint","pathLength","clonedPath","defaultVector","applyToMatrix","mat","_mdf","processKeys","forceRender","frameRate","v2","px","py","precalculateMatrix","autoOrient","addDynamicProperty","TransformProperty","getTransformProperty","pMatrix","rMatrix","sMatrix","inv","scaleX","scaleY","elemsData","elements","newElements","renderFlag","items","itemsTransform","cont","hasReloaded","copies","group","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","currentV","currentI","currentO","closerV","newPosPerc","rd","singleRoot","delta","p3","linearize","coeffx","coeffy","denom","tcusp","square","root","p10","p11","p20","p21","bez","bounds","t2","split","depth","tolerance","intersections","maxRecursion","d1s","d2s","other","nextIndex","start1","end1","start2","end2","v3","v4","outputBezier","direction","amplitude","outAmplitude","inAmplitude","angO","angI","vector","rot","rotatedVector","cur","prevIndex","prevPoint","nextPoint","pVector","frequency","pointType","prevDist","nextDist","count","p1a","p1b","p2b","p2a","seg1","seg2","lineJoin","miterLimit","angleOut","angleIn","center","radius","tan","intersection","intersect","outa","outb","flex","left","right","mid","inputBezier","multiSegments","lastSeg","multiSegment","fontData","styles","fWeight","fStyle","styleName","maxWaitingTime","emptyChar","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","node","checkLoadedFonts","loadedCount","createHelper","def","engine","helper","fontProps","tHelper","tCanvasHelper","measure","text","addFonts","defs","fontArr","_pendingFonts","shouldLoadFont","loadedSelector","sc","addChars","found","getCharData","_char","style","measureText","_char2","fontName","size","doubleSize","singleSize","getFontByName","getCodePoint","string","codePoint","second","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isVariationSelector","isRegionalCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","setIsLoaded","Font","fontPrototype","component","num","blendModeEnums","mode","effects","effectItem","eff","expressionsInterfaces","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","effectsInterface","blendModeValue","globalData","isVisible","FootageInterface","timeRemapped","totalVolume","volumeValue","layer","pInterface","parentName","hierarchy","pathValue","fontsContainer","finalMat","localMat","lmat","localOp","transformEffects","transforms","ptNew","properties","currentMasks","layerId","rect","expansor","feMorph","maskType","maskRef","filterID","mask","isFirstFrame","pathNodes","viewData","pathString","pathShapeValue","createFilter","createAlphaToLuminanceFilter","filId","skipCoordinates","fil","feColorMatrix","source","filterManager","Effect","effect","countsAsEffect","layerElementParent","gg","cp","clipId","cpGroup","matteType","useElement","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","_prototype","position","shouldBreakProcess","transformers","level","styleOb","cLength","diff","pathElement","gradientId","gfill","stops","maskElement","opacityId","maskId","opFill","mProps","op","_o","_i","shapeString","_identityMatrix","_matrixHelper","createRenderFunction","renderFill","renderGradient","renderGradientStroke","renderStroke","renderPath","renderContentTransform","renderNoop","styleData","itemData","pathStringTransformed","redraw","lLen","lvl","paths","iterations","styleElem","hasOpacity","attr1","attr2","cValues","oValues","ang","tempShapes","areAnimated","elementData","GradientConstructor","transformProperty","ownTransformers","shapeProperty","itemsData","prevViewData","render","ownStyles","ownModifiers","currentTransform","modifier","processedPos","animatedContent","sw","fc","updated","_finalValue","currentValue","currentIndex","textKeys","charactersArray","shouldCombine","shouldCombineNext","currentChars","fontManager","letters","newLineFlag","anchorGrouping","currentSize","currentPos","currentLine","lineWidths","lineWidth","maxLineWidth","trackingOffset","boxWidth","boxHeight","currentHeight","finalText","lastSpaceIndex","uncollapsedSpaces","currentChar","animators","animatorData","letterData","based","indexes","currentInd","newInd","newData","dData","_canResize","_fontValue","floor","TextSelectorPropFactory","easer","tot","smoothness","newCharsFlag","divisor","getTextSelectorProp","animatorProps","defaultData","textAnimatorAnimatables","textData","renderType","lettersChangedFlag","alignment","matrixHelper","renderedLettersCount","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","partialLength","tanAngle","yOff","firstLine","animatorSelector","letterValue","offf","xPathPos","yPathPos","initPathPos","initSegmentInd","initPointInd","elemOpacity","letterSw","letterSc","letterFc","letterM","letterP","letterO","animatorJustifyOffset","animatorFirstCharOffset","justifyOffsetMult","lastIndex","isNewLine","animatorOffset","shapeStr","_fontSize","lineNumber","colorData","textArray","textContents","currentTextContent","shapeItem","usesGlyphs","tSpan","singleShape","tElement","justify","textContent","cachedSpansLength","childSpan","glyphElement","glyph","textBox","renderedLetters","renderedLetter","textSpan","elementIndex","matteElement","matteMask","nextElement","animationItem","config","ariaLabel","titleElement","titleId","descElement","descId","sequence","lumaBuffer","lumaBufferCtx","svg","createLumaSvgFilter","_svg","loadLuma","getLuma","hasMasks","canvasContext","bufferCanvas","bufferCanvas2","buffer","bufferCtx","forceRealStack","transformsManager","styledShape","shouldRender","ownTransforms","parentTransform","groupTransform","nodes","currentStyle","isMain","shapeNodes","groupTransformMat","grd","opacity","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","imgW","imgH","imgRel","canvasRel","widthCrop","heightCrop","par","rule","actionFlag","containerStyle","origin","elementWidth","elementHeight","elementRel","animationRel","fillType","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","trProps","currentOpacity","transformedElementStyle","matrixValue","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","b2ac","widthProperty","kfw","tempBoundingBox","changed","shapeStyle","shapeTransform","innerElemStyle","textColor","tParent","tCont","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","perspectiveStyle","perspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","newDOMElement","nextDOMElement","nextLayer","tmpDOMElement","perspectiveElem","threeDContainerData","lastThreeDContainerData","currentContainer","resizerElem","cWidth","cHeight","floatingContainer","_thisLayerFunction","chunks","digits","rngname","startdenom","significance","overflow","nodecrypto","seedrandom","seed","options","shortseed","mixkey","flatten","tostring","autoseed","arc4","ARC4","prng","is_math_call","state","copy","keylen","me","result","typ","stringseed","smear","browser","plugins","BMMath","tOfV","tOfA","lenA","retArr","tOfB","lenB","mm","arr1","arr2","vec","tMin","tMax","value1","value2","_tMin","rnd","rndm","inTangents","outTangents","arrPlaceholder","inVertexPoint","outVertexPoint","_value","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","duration","elem1","elem2","fVec","pitch","yaw","val1","val2","iKey","lenKey","obKey","fr","fps","framesPerSecond","initExpressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","MaskInterface","MaskManager","maskManager","_masksInterfaces","maskFunction","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","property","valueProp","UnidimensionalPropertyInterface","MultidimensionalPropertyInterface","arrValue","defaultGetter","_thisFunction","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","propMatrix","transformMat","toWorldVec","toWorld","fromWorldVec","fromWorld","applyPoint","invertPoint","fromComp","sampleImage","transformInterface","_registerMaskInterface","_registerEffectsInterface","anchorPointDescriptor","interfaceFunction","parentPropertyGroup","propertyName","propertyGroup","_propertyGroup","createEffectsInterface","effectElements","effectsData","createGroupInterface","groupInterface","createValueInterface","expressionProperty","view","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","defaultInterfaceFactory","contentsInterfaceFactory","interfaces","transformInterfaceFactory","content","_dashPropertyGroup","dashOb","addPropertyToDashOb","_interfaceFunction","parentGroupWrapper","_sourceText","stringValue","outlineInterfaceFactory","currentPropertyName","currentProperty","searchProperty","propertyNameIndex","dataInterfaceFactory","searchExpressions","getValueAtTime","getSpeedAtTime","speed","getVelocityAtTime","velocity","getStaticValueAtTime","setGroupProperty","loopOut","durationFlag","currentFrame","keyframes","lastKeyFrame","cycleDuration","firstKeyFrame","ret","initV","endV","current","repeats","lastValue","nextLastValue","loopIn","firstValue","nextFirstValue","smooth","samples","endFrame","sampleFrequency","sampleValue","getTransformValueAtTime","anchor","skewAxis","rotation","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","getShapeValueAtTime","ShapePropertyConstructorFunction","KeyframedShapePropertyConstructorFunction","ShapeExpressions","accumulatedLength","initIndex","endIndex","vectorType","xLength","yLength","magnitude","unitVector","propertyGetShapeProp","trims","isKeyframed","hasExpressions","createMergeNode","resultId","ins","feMerge","feMergeNode","filter","colorBlack","colorWhite","elemChildren","groupPath","dasharrayValue","lineLength","units","feComponentTransfer","feFuncR","feFuncG","feFuncB","color1","color2","color3","tableR","tableG","tableB","inputBlack","inputWhite","gamma","outputBlack","outputWhite","table","colorValue","outputDelta","inputDelta","globalFilterSize","filterSize","feGaussianBlur","feOffset","feFlood","feComposite","col","filterElem","symbolId","children","nextChild","useElem","symbol","kBlurrinessToSigma","sigma","dimensions","sigmaX","sigmaY","edgeMode","effectsManager","forceFrame","isUniformScale","scaleHeight","scaleWidth","_","file","numbers","number","newPage","page","resultsList","showingCount","success","_jqXHR","_textStatus","errorThrown","details","targetDetail","contentHeight","detail","stickyElement","contentElement","stickyHeight","require$$0","$","Slick","instanceUid","settings","dataSettings","slider","markup","addBefore","targetHeight","targetLeft","animProps","now","asNavFor","slide","transition","slideTo","dot","newSlides","numOfSlides","originalSlides","slidesPerSection","row","initial","forceUpdate","breakpoint","targetBreakpoint","respondToWidth","triggerBreakpoint","sliderWidth","windowWidth","dontAnimate","$target","indexOffset","slideOffset","unevenOffset","navigables","prevNavigable","refresh","slideIndex","$sf","breakPoint","counter","pagerQty","verticalHeight","verticalOffset","targetSlide","coef","option","slidesTraversed","swipedSlide","centerOffset","creation","numDotGroups","tabControlIndexes","slideControlIndex","ariaButtonControl","mappedSlideIndex","loadRange","cloneRange","rangeStart","rangeEnd","loadImages","imagesScope","image","imageSource","imageSrcSet","imageSizes","imageToLoad","prevSlide","nextSlide","$slides","$currentSlide","tryCount","$imgsToLoad","initializing","currentSlide","lastVisibleIndex","currentBreakpoint","responsiveSettings","removeBefore","removeAll","positionProps","opt","bodyStyle","allSlides","remainder","evenCoef","infiniteCount","targetElement","sync","animSlide","oldSlide","slideLeft","navTarget","xDist","yDist","swipeAngle","slideCount","curLeft","swipeDirection","swipeLength","positionOffset","touches","verticalSwipeLength","fromBreakpoint","desktopNav","mobileNav","$slick","_event","slick","totalSlides","desktopPageCount","_slick","_currentSlide","isMobile","$navSet","dotIndex","$slider","maxLiHeight","slideHeight","searchParams","urlOptions","select","newView","currentMonthValue","today","year","month","currentMonthDate","currentMonthOption","futureOption","list","calendar","currentTypeValue","currentInstrumentValue","output","child","instrument","selectElement","tmpSelect","tmpOption","selectedText","overrideOptions","selectedOptions","currentSelections","newURL","season","currentMonth","previousButtons","nextButtons","descriptor","Constructor","protoProps","staticProps","array","arrayLike","start","noop","subject","iteratee","elm","classes","add","parent","ref","selector","children2","elms","attrs","tag","display2","html","stopPropagation","condition","message","epsilon","exclusive","maximum","replacements","replacement","listeners","bind","targets","events","forEachEvent","namespace","isEventTarget","remover","unbind","listener","dispatch","bubbles","events2","eventNS","fragment","Splide2","bus","binder","on","emit","interval","onInterval","onUpdate","limit","startTime","rate","paused","update","cancel","rewind","set","isPaused","initialState","is","states","Components2","breakpoints","reducedMotion","queries","setup","isMin","register","completely","options2","query","queryList","destroyed","merged","merged2","entry","reduce","enable","opts","base","notify","resolve","axisOnly","match","orient","from","_EventInterface","i18n","slides","rootClasses","trackClasses","track","isUsingKey","collect","mount","getClasses","find","role","Components","isNavigation","updateOnMove","pagination","slideFocus","isClone","listen","self","initNavigation","onMove","controls","Slide2","curr","updateActivity","updateVisibility","active","isActive","visible","hidden","style$1","useContainer","trackRect","slideRect","isWithin","_EventInterface2","_Components2$Elements","Slides2","forEach$1","Slide1","get","excludeClones","getIn","Controller","getAt","observeImages","remove$1","matcher","images","getLength","isEnough","_EventInterface3","Slides","_Components2$Elements2","styleSlides","vertical","rootRect","cssPadding","force","newRect","cssTrackHeight","cssSlideWidth","cssSlideHeight","isOverflow","padding","cssHeight","cssSlideSize","gap","listSize","slideSize","withoutGap","Slide","getGap","totalSize","sliderSize","getPadding","Elements","clones","cloneCount","remount","observe","computeCloneCount","generate","isHead","cloneDeep","clones2","fixedSize","fixedCount","_EventInterface4","_Components2$Layout","_Components2$Directio","_Components2$Elements3","Transition","reposition","jump","move","dest","prev","canShift","shift","getPosition","toPosition","preventLoop","toIndex","exceededMax","exceededMin","backwards","excess","getLimit","minDistance","trimming","trim","focus","shifted","exceededLimit","_EventInterface5","Move","_Components2$Slides","omitEnd","isLoop","isSlide","getNext","getAdjacent","getPrev","currIndex","perMove","perPage","onResized","getEnd","go","control","allowSameIndex","isBusy","parse","setIndex","scroll","snap","_ref","indicator","computeDestIndex","hasFocus","snapPage","computeMovableDestIndex","toPage","toDest","getIndex","placeholder","next","created","wrapperClasses","arrows","enabled","createArrows","createArrow","prev2","arrow","prevLabel","nextLabel","_EventInterface6","onAnimationFrame","_Components2$Elements4","hovered","focused","stopped","autoToggle","bar","_EventInterface7","cover","cover2","_EventInterface8","friction","clear","onScrolled","noConstrain","noDistance","onEnd","easing","easingFunc","_EventInterface9","Scroll","_Components2$Directio2","basePosition","baseEvent","prevBaseEvent","isFree","dragging","exceeded","clickPrevented","disabled","onPointerDown","onClick","drag","disable","isTouch","isTouchEvent","isDraggable","onPointerMove","onPointerUp","save","constrain","diffCoord","expired","diffTime","hasExceeded","isSliderDirection","shouldStart","computeVelocity","computeDestination","thresholds","isObj","mouse","touch","orthogonal","coordOf","getBaseEvent","target2","noDrag","isDragging","_EventInterface10","keyboard","onKeydown","_disabled","_EventInterface11","off","isSequential","entries","loadNext","check","src","srcset","spinner","load","onLoad","paginationClasses","createPagination","getDirection","li","nextPage","_button","navigate","splide","_EventInterface12","lastTime","onWheel","deltaY","timeStamp","_min","sleep","shouldPrevent","_EventInterface13","sr","done","endCallback","getSpeed","rewindSpeed","_Splide","_proto","Extensions","_this","Constructors","Component","_this$event","video","handleVideoReady","splideButton","nav","radios","radio","input","category","paramToInputMap","_g","isFaculty","backendData","sort","stateChanged","inputKey","stickyTriggered","originalTopPosition","observer","checkStickyState","STICKY_THRESHOLD","scrollY","newSortType","newSortOrder","currentSortType","currentSortOrder","finalSortOrder","section","buttonPrev","buttonNext","newIndex","figure","character","iframe"],"mappings":"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","x_google_ignoreList":[3,9,13]}