{"version":3,"sources":["webpack:///assets/js/main.js","webpack:///webpack/bootstrap e74be848559b16a57e2e","webpack:///./node_modules/throttle-debounce/dist/index.esm.js","webpack:///./node_modules/simple-parallax-js/dist/simpleParallax.min.js","webpack:///./src/js/inc/helpers.js","webpack:///./src/js/main.js","webpack:///./src/js/slick/slick.js","webpack:///external \"window.jQuery\"","webpack:///./src/js/svg/jquery.svg.js","webpack:///./src/js/inc/vendor/jquery-closestchild.js","webpack:///./src/js/inc/setup.js","webpack:///./src/js/inc/launcher.js","webpack:///./src/js/inc/acf.js","webpack:///./src/js/inc/slider.js","webpack:///./src/js/inc/dynamic-height-guy.js","webpack:///./src/js/inc/slick-trigger.js","webpack:///./src/js/inc/scroll-animation.js","webpack:///./src/js/inc/scroll-shadow-guy.js","webpack:///./src/js/inc/move-tabs.js","webpack:///./src/js/inc/embed-guy.js","webpack:///./src/js/inc/tab.js","webpack:///./src/js/inc/ninja-forms.js","webpack:///./src/js/inc/preloader.js","webpack:///./src/js/inc/burger.js","webpack:///./src/js/inc/header.js","webpack:///./src/js/inc/tabbed.js","webpack:///./src/js/inc/paralmax.js","webpack:///./src/js/inc/parallax.js","webpack:///./src/js/inc/accordion.js","webpack:///./src/js/inc/form.js","webpack:///./src/js/inc/card-click.js","webpack:///./src/js/inc/form-row.js","webpack:///./src/js/inc/sliding-link.js","webpack:///./src/js/inc/ajax.js","webpack:///./src/js/inc/background-video.js","webpack:///./src/js/inc/throttle-debounce/index.esm.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","throttle","delay","noTrailing","callback","debounceMode","clearExistingTimeout","timeoutID","clearTimeout","cancel","cancelled","wrapper","exec","lastExec","Date","now","apply","self","args","clear","undefined","this","elapsed","arguments","setTimeout","debounce","atBegin","t","e","window","length","writable","key","Array","isArray","Symbol","iterator","toString","from","TypeError","u","r","positions","top","bottom","height","value","scrollTop","pageYOffset","clientHeight","document","documentElement","NodeList","isPrototypeOf","HTMLCollection","String","querySelectorAll","split","createElement","style","a","complete","naturalWidth","h","element","elementContainer","settings","isVisible","isInit","oldTranslateValue","init","bind","addEventListener","closest","overflow","wrapElement","setTransformCSS","getElementOffset","intersectionObserver","getTranslateValue","animate","setTransitionCSS","classList","add","parentNode","insertBefore","appendChild","replaceWith","childNodes","concat","scale","willChange","transition","getBoundingClientRect","elementHeight","elementTop","customContainer","elementBottom","push","root","threshold","buildThresholdList","observer","IntersectionObserver","intersectionObserverCallback","observe","isIntersecting","rangeMax","toFixed","Math","min","max","oldPercentage","getRangeMax","translateValue","orientation","includes","y","f","g","v","elements","defaults","assign","console","log","lastPosition","resizeIsDone","handleResize","proceedRequestAnimationFrame","setViewportAll","setViewportTop","setViewportBottom","proceedElement","requestAnimationFrame","checkIfVisible","filter","unSetStyle","unWrapElement","cancelAnimationFrame","removeEventListener","toStringTag","create","default","helpers","isInViewport","scrollBottom","offset","innerHeight","clamp","number","wrapAround","Number","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_typeof","obj","constructor","factory","define","$","Slick","dataSettings","_","accessibility","adaptiveHeight","appendArrows","appendDots","arrows","asNavFor","prevArrow","nextArrow","autoplay","autoplaySpeed","centerMode","centerPadding","cssEase","customPaging","slider","text","dots","dotsClass","draggable","easing","edgeFriction","fade","focusOnSelect","focusOnChange","infinite","initialSlide","lazyLoad","mobileFirst","pauseOnHover","pauseOnFocus","pauseOnDotsHover","respondTo","responsive","rows","rtl","slide","slidesPerRow","slidesToShow","slidesToScroll","speed","swipe","swipeToSlide","touchMove","touchThreshold","useCSS","useTransform","variableWidth","vertical","verticalSwiping","waitForAnimate","zIndex","initials","animating","dragging","autoPlayTimer","currentDirection","currentLeft","currentSlide","direction","$dots","listWidth","listHeight","loadIndex","$nextArrow","$prevArrow","scrolling","slideCount","slideWidth","$slideTrack","$slides","sliding","slideOffset","swipeLeft","swiping","$list","touchObject","transformsEnabled","unslicked","extend","activeBreakpoint","animType","animProp","breakpoints","breakpointSettings","cssTransitions","focussed","interrupted","hidden","paused","positionProp","rowCount","shouldClick","$slider","$slidesCache","transformType","transitionType","visibilityChange","windowWidth","windowTimer","data","options","originalSettings","mozHidden","webkitHidden","autoPlay","proxy","autoPlayClear","autoPlayIterator","changeSlide","clickHandler","selectHandler","setPosition","swipeHandler","dragHandler","keyHandler","instanceUid","htmlExpr","registerBreakpoints","activateADA","find","attr","addSlide","slickAdd","markup","index","addBefore","unload","appendTo","eq","insertAfter","prependTo","children","detach","append","each","reinit","animateHeight","targetHeight","outerHeight","animateSlide","targetLeft","animProps","left","animStart","duration","step","ceil","css","applyTransition","disableTransition","getNavTarget","not","target","slick","slideHandler","setInterval","clearInterval","slideTo","buildArrows","addClass","removeClass","removeAttr","test","buildDots","dot","getDotCount","first","buildOut","wrapAll","parent","wrap","setupInfinite","updateDots","setSlideClasses","buildRows","b","newSlides","numOfSlides","originalSlides","slidesPerSection","createDocumentFragment","row","empty","checkResponsive","initial","forceUpdate","breakpoint","targetBreakpoint","respondToWidth","triggerBreakpoint","sliderWidth","width","innerWidth","unslick","refresh","trigger","event","dontAnimate","indexOffset","unevenOffset","$target","currentTarget","is","preventDefault","message","checkNavigable","navigables","prevNavigable","getNavigableIndexes","cleanUpEvents","off","interrupt","visibility","cleanUpSlideEvents","orientationChange","resize","cleanUpRows","stopImmediatePropagation","stopPropagation","destroy","remove","fadeSlide","slideIndex","opacity","fadeSlideOut","filterSlides","slickFilter","focusHandler","on","$sf","getCurrent","slickCurrentSlide","breakPoint","counter","pagerQty","getLeft","verticalHeight","targetSlide","coef","verticalOffset","floor","offsetLeft","outerWidth","getOption","slickGetOption","option","indexes","getSlick","getSlideCount","swipedSlide","centerOffset","abs","goTo","slickGoTo","parseInt","creation","hasClass","setProps","startLoad","loadSlider","initializeEvents","updateArrows","initADA","numDotGroups","tabControlIndexes","val","slideControlIndex","indexOf","mappedSlideIndex","end","initArrowEvents","initDotEvents","initSlideEvents","action","initUI","show","tagName","match","keyCode","loadImages","imagesScope","image","imageSource","imageSrcSet","imageSizes","imageToLoad","onload","onerror","src","loadRange","cloneRange","rangeStart","rangeEnd","slice","prevSlide","nextSlide","progressiveLazyLoad","next","slickNext","pause","slickPause","play","slickPlay","postSlide","focus","prev","slickPrev","tryCount","$imgsToLoad","initializing","lastVisibleIndex","currentBreakpoint","responsiveSettings","type","splice","sort","windowDelay","removeSlide","slickRemove","removeBefore","removeAll","setCSS","position","x","positionProps","setDimensions","padding","setFade","right","setHeight","setOption","slickSetOption","item","opt","bodyStyle","body","WebkitTransition","MozTransition","msTransition","OTransform","perspectiveProperty","webkitPerspective","MozTransform","MozPerspective","webkitTransform","msTransform","transform","allSlides","remainder","evenCoef","infiniteCount","clone","toggle","targetElement","parents","sync","animSlide","oldSlide","slideLeft","navTarget","hide","swipeDirection","xDist","yDist","swipeAngle","startX","curX","startY","curY","atan2","round","PI","swipeEnd","swipeLength","edgeHit","minSwipe","fingerCount","originalEvent","touches","swipeStart","swipeMove","curLeft","positionOffset","verticalSwipeLength","pageX","clientX","pageY","clientY","sqrt","pow","unfilterSlides","slickUnfilter","fromBreakpoint","fn","ret","jQuery","SVGManager","_settings","_extensions","regional","errorLoadingText","local","_uuid","getTime","_ie","ActiveXObject","SVGWrapper","svg","container","_svg","_container","extension","SVGPath","_path","SVGText","_parts","markerClassName","propertyName","svgNS","xlinkNS","_wrapperClass","_attrNames","class_","in_","alignmentBaseline","baselineShift","clipPath","clipRule","colorInterpolation","colorInterpolationFilters","colorRendering","dominantBaseline","enableBackground","fillOpacity","fillRule","floodColor","floodOpacity","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","glyphOrientationHorizontal","glyphOrientationVertical","horizAdvX","horizOriginX","imageRendering","letterSpacing","lightingColor","markerEnd","markerMid","markerStart","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeOpacity","strokeWidth","textAnchor","textDecoration","textRendering","underlinePosition","underlineThickness","vertAdvY","vertOriginY","wordSpacing","writingMode","_attachSVG","namespaceURI","loadURL","onLoad","createElementNS","setAttribute","clientWidth","_afterLoad","html","id","load","configure","alert","_getSVG","_destroySVG","removeData","addExtension","extClass","isSVGElem","node","nodeType","nodeName","attributes","substring","removeNamedItem","attrName","getElementById","ownerDocument","change","removeAttribute","_args","values","names","optSettings","jquery","title","_makeNode","createTextNode","describe","defs","symbol","x1","y1","viewBox","marker","refX","refY","mWidth","mHeight","orient","markerWidth","markerHeight","styles","script","globalEval","linearGradient","stops","x2","y2","sets","_gradient","radialGradient","cx","cy","fx","fy","stop","pattern","vx","vy","vwidth","vheight","units","clipPathUnits","mask","createPath","createText","group","use","ref","setAttributeNS","link","path","rect","rx","ry","circle","ellipse","line","polyline","points","_poly","polygon","ps","join","trim","_text","textpath","part","child","set","href","other","cloneNode","_cloneAsSVG","newNodes","newNode","_checkName","nodeValue","prefix","localName","baseName","createCDATASection","replace","toLowerCase","url","addTo","size","getAttribute","reportError","loadSVG","errors","getElementsByTagName","messages","firstChild","attrs","nodes","importNode","textContent","keepRelativeLinks","base","changeSize","DOMParser","parseFromString","ajax","dataType","success","xml","error","http","exc","removeChild","attrsToo","toSVG","XMLSerializer","_toSVG","serializeToString","svgDoc","nextSibling","reset","move","relative","_coords","horiz","vert","curveC","smoothC","curveQ","smoothQ","cmd","x3","y3","cs","arc","xRotate","large","clockwise","close","moveTo","lineTo","horizTo","vertTo","curveCTo","smoothCTo","curveQTo","smoothQTo","arcTo","string","span","otherArgs","closestChild","selector","$children","$results","_extends","source","setup","config","initEvent","browserClass","deviceClass","browser","device","sniffBrowsers","userAgent","navigator","launcher","launcherClass","parentToDelegateEvents","launchers","events","handleHover","interactionTarget","_helpers2","_helpers","sliderClass","automatedSliderInterval","sliders","automatedSliders","theDynamicHeightGuy","removeLoadingState","sliderElement","activeSlide","automateSliders","jQueryWindow","resizeSlider","arrow","parentSlider","parentControls","controlIndex","nextIndex","scrollToControlIndex","control","sliderOverride","directionOverride","indexOverride","forceChange","hasFocus","setActiveSlide","setActiveControl","getActiveSlide","targetSlider","getActiveControl","newIndex","slides","slidesInner","controls","currentControl","targetSliders","includeParents","controlsInner","controlsHousing","targetControl","targetControlPosition","maxScroll","scrollTo","dynamicHeightGuy","dynamicHeightGuyClass","animationDuration","guys","targetDynamicHeightGuys","innersOverride","guy","inners","largestInnerHeight","map","heightDifference","parentGuys","parentGuy","scrollAnimation","scrollAnimationClass","resolverClass","scrollListenerThrottle","screenBottomOffset","isSafari","animatedElements","windowHeight","one","setElementOffsets","processScroll","jQueryElement","offsetForScroll","resolveAnimation","currentClass","makeSafariNotSuck","animationName","tempAnimationName","scrollShadowGuy","scrollShadowGuyClass","scrollShadowGuys","scrollShadowGuyContents","setElementScrollWidths","placeShadow","targetScrollShadowGuyContents","targetScrollShadowGuyContent","scrollDifference","scrollWidthForScrollShadow","widthForScrollShadow","scrollLeft","parentScrollShadowGuy","scrollWidth","ready","to","current","total","click","tab_id","embedGuy","embedGuyClass","embedGuys","embed","menu","tabID","hash","location","$this","$data","$tabID","toggleSidebar","toggleClass","keyup","header","paralmax","resizable","start","_simpleParallaxJs2","_simpleParallaxJs","getElementsByClassName","simpleParallax","toggleAccordion","nextElementSibling","forEach","$inputItem","$input","placeholderTxt","after","aid","submit","newCustomerForm","serialize","_throttleDebounce","backgroundVideo","backgroundVideoClassName","backgroundVideoJsClassName","resizeListenerDebounce","backgroundVideos","resizeVideos","video","containerRect","videoHeight","videoWidth"],"mappings":"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","file":"assets/js/main.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"throttle\", function() { return throttle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"debounce\", function() { return debounce; });\n/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param  {Number}    delay          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}   [noTrailing]   Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n *                                    throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n *                                    after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n *                                    the internal counter is reset)\n * @param  {Function}  callback       A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                    to `callback` when the throttled-function is executed.\n * @param  {Boolean}   [debounceMode] If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n *                                    schedule `callback` to execute after `delay` ms.\n *\n * @return {Function}  A new, throttled, function.\n */\nfunction throttle (delay, noTrailing, callback, debounceMode) {\n  /*\n   * After wrapper has stopped being called, this timeout ensures that\n   * `callback` is executed at the proper times in `throttle` and `end`\n   * debounce modes.\n   */\n  var timeoutID;\n  var cancelled = false; // Keep track of the last time `callback` was executed.\n\n  var lastExec = 0; // Function to clear existing timeout\n\n  function clearExistingTimeout() {\n    if (timeoutID) {\n      clearTimeout(timeoutID);\n    }\n  } // Function to cancel next exec\n\n\n  function cancel() {\n    clearExistingTimeout();\n    cancelled = true;\n  } // `noTrailing` defaults to falsy.\n\n\n  if (typeof noTrailing !== 'boolean') {\n    debounceMode = callback;\n    callback = noTrailing;\n    noTrailing = undefined;\n  }\n  /*\n   * The `wrapper` function encapsulates all of the throttling / debouncing\n   * functionality and when executed will limit the rate at which `callback`\n   * is executed.\n   */\n\n\n  function wrapper() {\n    var self = this;\n    var elapsed = Date.now() - lastExec;\n    var args = arguments;\n\n    if (cancelled) {\n      return;\n    } // Execute `callback` and update the `lastExec` timestamp.\n\n\n    function exec() {\n      lastExec = Date.now();\n      callback.apply(self, args);\n    }\n    /*\n     * If `debounceMode` is true (at begin) this is used to clear the flag\n     * to allow future `callback` executions.\n     */\n\n\n    function clear() {\n      timeoutID = undefined;\n    }\n\n    if (debounceMode && !timeoutID) {\n      /*\n       * Since `wrapper` is being called for the first time and\n       * `debounceMode` is true (at begin), execute `callback`.\n       */\n      exec();\n    }\n\n    clearExistingTimeout();\n\n    if (debounceMode === undefined && elapsed > delay) {\n      /*\n       * In throttle mode, if `delay` time has been exceeded, execute\n       * `callback`.\n       */\n      exec();\n    } else if (noTrailing !== true) {\n      /*\n       * In trailing throttle mode, since `delay` time has not been\n       * exceeded, schedule `callback` to execute `delay` ms after most\n       * recent execution.\n       *\n       * If `debounceMode` is true (at begin), schedule `clear` to execute\n       * after `delay` ms.\n       *\n       * If `debounceMode` is false (at end), schedule `callback` to\n       * execute after `delay` ms.\n       */\n      timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n    }\n  }\n\n  wrapper.cancel = cancel; // Return the wrapper function.\n\n  return wrapper;\n}\n\n/* eslint-disable no-undefined */\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param  {Number}   delay         A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}  [atBegin]     Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n *                                  after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n *                                  (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param  {Function} callback      A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                  to `callback` when the debounced-function is executed.\n *\n * @return {Function} A new, debounced function.\n */\n\nfunction debounce (delay, atBegin, callback) {\n  return callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n}\n\n\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*!\n * simpleParallax.min - simpleParallax is a simple JavaScript library that gives your website parallax animations on any images, \n * @date: 07-12-2019 18:53:52, \n * @version: 5.2.0,\n * @link: https://simpleparallax.com/\n */\n!function(t,e){ true?module.exports=e():\"function\"==typeof define&&define.amd?define(\"simpleParallax\",[],e):\"object\"==typeof exports?exports.simpleParallax=e():t.simpleParallax=e()}(window,function(){return(n={},s.m=i=[function(t,e,i){\"use strict\";function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}i.r(e);var s=new(function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.positions={top:0,bottom:0,height:0}}return function(t,e,i){e&&n(t.prototype,e),i&&n(t,i)}(t,[{key:\"setViewportTop\",value:function(t){return this.positions.top=t?t.scrollTop:window.pageYOffset,this.positions}},{key:\"setViewportBottom\",value:function(){return this.positions.bottom=this.positions.top+this.positions.height,this.positions}},{key:\"setViewportAll\",value:function(t){return this.positions.top=t?t.scrollTop:window.pageYOffset,this.positions.height=t?t.clientHeight:document.documentElement.clientHeight,this.positions.bottom=this.positions.top+this.positions.height,this.positions}}]),t}()),o=function(t){return NodeList.prototype.isPrototypeOf(t)||HTMLCollection.prototype.isPrototypeOf(t)?Array.from(t):\"string\"==typeof t||t instanceof String?document.querySelectorAll(t):[t]},r=function(){for(var t,e=\"transform webkitTransform mozTransform oTransform msTransform\".split(\" \"),i=0;void 0===t;)t=void 0!==document.createElement(\"div\").style[e[i]]?e[i]:void 0,i+=1;return t}(),a=function(t){return!!t&&(!!t.complete&&(void 0===t.naturalWidth||0!==t.naturalWidth))};function l(t){return function(t){if(Array.isArray(t)){for(var e=0,i=new Array(t.length);e<t.length;e++)i[e]=t[e];return i}}(t)||function(t){if(Symbol.iterator in Object(t)||\"[object Arguments]\"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}()}function u(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var h=function(){function i(t,e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,i),this.element=t,this.elementContainer=t,this.settings=e,this.isVisible=!0,this.isInit=!1,this.oldTranslateValue=-1,this.init=this.init.bind(this),a(t)?this.init():this.element.addEventListener(\"load\",this.init)}return function(t,e,i){e&&u(t.prototype,e),i&&u(t,i)}(i,[{key:\"init\",value:function(){var t=this;this.isInit||this.element.closest(\".simpleParallax\")||(!1===this.settings.overflow&&this.wrapElement(this.element),this.setTransformCSS(),this.getElementOffset(),this.intersectionObserver(),this.getTranslateValue(),this.animate(),0<this.settings.delay&&setTimeout(function(){t.setTransitionCSS()},10),this.isInit=!0)}},{key:\"wrapElement\",value:function(){var t=this.element.closest(\"picture\")||this.element,e=document.createElement(\"div\");e.classList.add(\"simpleParallax\"),e.style.overflow=\"hidden\",t.parentNode.insertBefore(e,t),e.appendChild(t),this.elementContainer=e}},{key:\"unWrapElement\",value:function(){var t=this.elementContainer;t.replaceWith.apply(t,l(t.childNodes))}},{key:\"setTransformCSS\",value:function(){!1===this.settings.overflow&&(this.element.style[r]=\"scale(\".concat(this.settings.scale,\")\")),this.element.style.willChange=\"transform\"}},{key:\"setTransitionCSS\",value:function(){this.element.style.transition=\"transform \".concat(this.settings.delay,\"s \").concat(this.settings.transition)}},{key:\"unSetStyle\",value:function(){this.element.style.willChange=\"\",this.element.style[r]=\"\",this.element.style.transition=\"\"}},{key:\"getElementOffset\",value:function(){var t=this.elementContainer.getBoundingClientRect();if(this.elementHeight=t.height,this.elementTop=t.top+s.positions.top,this.settings.customContainer){var e=this.settings.customContainer.getBoundingClientRect();this.elementTop=t.top-e.top+s.positions.top}this.elementBottom=this.elementHeight+this.elementTop}},{key:\"buildThresholdList\",value:function(){for(var t=[],e=1;e<=this.elementHeight;e++){var i=e/this.elementHeight;t.push(i)}return t}},{key:\"intersectionObserver\",value:function(){var t={root:null,threshold:this.buildThresholdList()};this.observer=new IntersectionObserver(this.intersectionObserverCallback.bind(this),t),this.observer.observe(this.element)}},{key:\"intersectionObserverCallback\",value:function(t){for(var e=t.length-1;0<=e;e--)t[e].isIntersecting?this.isVisible=!0:this.isVisible=!1}},{key:\"checkIfVisible\",value:function(){return this.elementBottom>s.positions.top&&this.elementTop<s.positions.bottom}},{key:\"getRangeMax\",value:function(){var t=this.element.clientHeight;this.rangeMax=t*this.settings.scale-t}},{key:\"getTranslateValue\",value:function(){var t=((s.positions.bottom-this.elementTop)/((s.positions.height+this.elementHeight)/100)).toFixed(1);return t=Math.min(100,Math.max(0,t)),this.oldPercentage!==t&&(this.rangeMax||this.getRangeMax(),this.translateValue=(t/100*this.rangeMax-this.rangeMax/2).toFixed(0),this.oldTranslateValue!==this.translateValue&&(this.oldPercentage=t,this.oldTranslateValue=this.translateValue,!0))}},{key:\"animate\",value:function(){var t,e=0,i=0;(this.settings.orientation.includes(\"left\")||this.settings.orientation.includes(\"right\"))&&(i=\"\".concat(this.settings.orientation.includes(\"left\")?-1*this.translateValue:this.translateValue,\"px\")),(this.settings.orientation.includes(\"up\")||this.settings.orientation.includes(\"down\"))&&(e=\"\".concat(this.settings.orientation.includes(\"up\")?-1*this.translateValue:this.translateValue,\"px\")),t=!1===this.settings.overflow?\"translate3d(\".concat(i,\", \").concat(e,\", 0) scale(\").concat(this.settings.scale,\")\"):\"translate3d(\".concat(i,\", \").concat(e,\", 0)\"),this.element.style[r]=t}}]),i}();function c(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}i.d(e,\"default\",function(){return y});var f,m,p,d=!0,g=!1,v=[],y=function(){function i(t,e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,i),t&&(this.elements=o(t),this.defaults={delay:.4,orientation:\"up\",scale:1.3,overflow:!1,transition:\"cubic-bezier(0,0,0,1)\",customContainer:!1},this.settings=Object.assign(this.defaults,e),\"IntersectionObserver\"in window||(d=!1),this.settings.customContainer&&(console.log(o(this.settings.customContainer)[0]),this.customContainer=o(this.settings.customContainer)[0]),this.lastPosition=-1,this.resizeIsDone=this.resizeIsDone.bind(this),this.handleResize=this.handleResize.bind(this),this.proceedRequestAnimationFrame=this.proceedRequestAnimationFrame.bind(this),this.init())}return function(t,e,i){e&&c(t.prototype,e),i&&c(t,i)}(i,[{key:\"init\",value:function(){s.setViewportAll(this.customContainer);for(var t=this.elements.length-1;0<=t;t--){var e=new h(this.elements[t],this.settings);v.push(e)}f=v.length,g||(this.proceedRequestAnimationFrame(),window.addEventListener(\"resize\",this.resizeIsDone),g=!0)}},{key:\"resizeIsDone\",value:function(){clearTimeout(p),p=setTimeout(this.handleResize,500)}},{key:\"handleResize\",value:function(){s.setViewportAll(this.customContainer);for(var t=f-1;0<=t;t--)v[t].getElementOffset(),v[t].getRangeMax();this.lastPosition=-1}},{key:\"proceedRequestAnimationFrame\",value:function(){if(s.setViewportTop(this.customContainer),this.lastPosition!==s.positions.top){s.setViewportBottom();for(var t=f-1;0<=t;t--)this.proceedElement(v[t]);m=window.requestAnimationFrame(this.proceedRequestAnimationFrame),this.lastPosition=s.positions.top}else m=window.requestAnimationFrame(this.proceedRequestAnimationFrame)}},{key:\"proceedElement\",value:function(t){(!d||this.customContainer?t.checkIfVisible():t.isVisible)&&t.getTranslateValue()&&t.animate()}},{key:\"destroy\",value:function(){var e=this,i=[];v=v.filter(function(t){return e.elements.includes(t.element)?(i.push(t),!1):t});for(var t=i.length-1;0<=t;t--)i[t].unSetStyle(),!1===this.settings.overflow&&i[t].unWrapElement();(f=v.length)||(window.cancelAnimationFrame(m),window.removeEventListener(\"resize\",this.handleResize))}}]),i}()}],s.c=n,s.d=function(t,e,i){s.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},s.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(s.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)s.d(i,n,function(t){return e[t]}.bind(null,n));return i},s.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return s.d(e,\"a\",e),e},s.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},s.p=\"\",s(s.s=0)).default;function s(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return i[t].call(e.exports,e,e.exports,s),e.l=!0,e.exports}var i,n});\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n// Helpers\n\n/* eslint-disable max-params */\n/* exported helpers */\n\nvar helpers = {\n\n\t// Determine if element is within viewport\n\tisInViewport: function isInViewport(elementTop, elementBottom) {\n\t\tvar scrollTop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\t\tvar scrollBottom = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\t\tvar offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n\n\t\t// If scrollTop and scrollBottom are not defined, get them from the window object\n\t\tif (scrollTop === null || scrollBottom === null) {\n\n\t\t\t// Set scroll constants\n\t\t\tscrollTop = window.pageYOffset || document.documentElement.scrollTop;\n\t\t\tscrollBottom = scrollTop + window.innerHeight;\n\t\t}\n\n\t\t// Return whether or not the element is in the viewport\n\t\treturn (\n\t\t\t// Top is between top and bottom of viewport\n\t\t\telementTop >= scrollTop + offset && elementTop <= scrollBottom - offset\n\n\t\t\t// Bottom is between top and bottom of viewport\n\t\t\t|| elementBottom >= scrollTop + offset && elementBottom <= scrollBottom - offset\n\n\t\t\t// Top is above viewport while bottom is beneath (component is larger than viewport)\n\t\t\t|| elementTop <= scrollTop && elementBottom >= scrollBottom\n\t\t);\n\t},\n\n\t// Clamp a number\n\tclamp: function clamp(number, min, max) {\n\t\treturn Math.min(Math.max(number, min), max);\n\t},\n\n\t// Wraparound numbers\n\twrapAround: function wrapAround(number, min, max) {\n\n\t\t// Parse the number\n\t\tnumber = Number(number);\n\n\t\t// If the number is less than the min, return the max\n\t\tif (number < min) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Otherwise, if the number is greater than the max, return the min\n\t\telse if (number > max) {\n\t\t\t\treturn min;\n\t\t\t}\n\n\t\t// Otherwise, return the number\n\t\treturn number;\n\t}\n};\n\nexports.default = helpers;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(4);\nmodule.exports = __webpack_require__(35);\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(5);\n\n__webpack_require__(7);\n\n__webpack_require__(8);\n\n__webpack_require__(9);\n\n__webpack_require__(10);\n\n__webpack_require__(11);\n\n__webpack_require__(12);\n\n__webpack_require__(14);\n\n__webpack_require__(15);\n\n__webpack_require__(16);\n\n__webpack_require__(17);\n\n__webpack_require__(18);\n\n__webpack_require__(19);\n\n__webpack_require__(20);\n\n__webpack_require__(21);\n\n__webpack_require__(22);\n\n__webpack_require__(23);\n\n__webpack_require__(24);\n\n__webpack_require__(25);\n\n__webpack_require__(26);\n\n__webpack_require__(27);\n\n__webpack_require__(28);\n\n__webpack_require__(29);\n\n__webpack_require__(30);\n\n__webpack_require__(31);\n\n__webpack_require__(32);\n\n__webpack_require__(33);\n\nconsole.log('Slick JS Loaded');\n\n// SVG\n// Default WordPress JS\n\n// Slick\n\nconsole.log('SVG JS Loaded');\n\n// Vendors\n// import './inc/vendor/navigation';\n\n\n// Custom\n\n\nconsole.log('Main JS Loaded');\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*\n     _ _      _       _\n ___| (_) ___| | __  (_)___\n/ __| | |/ __| |/ /  | / __|\n\\__ \\ | | (__|   < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n                   |__/\n\n Version: 1.8.0\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\n;(function (factory) {\n    'use strict';\n\n    if (true) {\n        !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(6)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n    } else if (typeof exports !== 'undefined') {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n})(function ($) {\n    'use strict';\n\n    var Slick = window.Slick || {};\n\n    Slick = function () {\n\n        var instanceUid = 0;\n\n        function Slick(element, settings) {\n\n            var _ = this,\n                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 customPaging(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            _.registerBreakpoints();\n            _.init(true);\n        }\n\n        return Slick;\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    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    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        } 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 step(now) {\n                        now = Math.ceil(now);\n                        if (_.options.vertical === false) {\n                            animProps[_.animType] = 'translate(' + now + 'px, 0px)';\n                            _.$slideTrack.css(animProps);\n                        } else {\n                            animProps[_.animType] = 'translate(0px,' + now + 'px)';\n                            _.$slideTrack.css(animProps);\n                        }\n                    },\n                    complete: function complete() {\n                        if (callback) {\n                            callback.call();\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    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    Slick.prototype.asNavFor = function (index) {\n\n        var _ = this,\n            asNavFor = _.getNavTarget();\n\n        if (asNavFor !== null && (typeof asNavFor === 'undefined' ? 'undefined' : _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    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    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    Slick.prototype.autoPlayClear = function () {\n\n        var _ = this;\n\n        if (_.autoPlayTimer) {\n            clearInterval(_.autoPlayTimer);\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                } else if (_.direction === 0) {\n\n                    slideTo = _.currentSlide - _.options.slidesToScroll;\n\n                    if (_.currentSlide - 1 === 0) {\n                        _.direction = 1;\n                    }\n                }\n            }\n\n            _.slideHandler(slideTo);\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.addClass('slick-disabled').attr('aria-disabled', 'true');\n                }\n            } else {\n\n                _.$prevArrow.add(_.$nextArrow).addClass('slick-hidden').attr({\n                    'aria-disabled': 'true',\n                    'tabindex': '-1'\n                });\n            }\n        }\n    };\n\n    Slick.prototype.buildDots = function () {\n\n        var _ = this,\n            i,\n            dot;\n\n        if (_.options.dots === true) {\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    Slick.prototype.buildOut = function () {\n\n        var _ = this;\n\n        _.$slides = _.$slider.children(_.options.slide + ':not(.slick-cloned)').addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        _.$slides.each(function (index, element) {\n            $(element).attr('data-slick-index', index).data('originalStyling', $(element).attr('style') || '');\n        });\n\n        _.$slider.addClass('slick-slider');\n\n        _.$slideTrack = _.slideCount === 0 ? $('<div class=\"slick-track\"/>').appendTo(_.$slider) : _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n\n        _.$list = _.$slideTrack.wrap('<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        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        if (_.options.draggable === true) {\n            _.$list.addClass('draggable');\n        }\n    };\n\n    Slick.prototype.buildRows = function () {\n\n        var _ = this,\n            a,\n            b,\n            c,\n            newSlides,\n            numOfSlides,\n            originalSlides,\n            slidesPerSection;\n\n        newSlides = document.createDocumentFragment();\n        originalSlides = _.$slider.children();\n\n        if (_.options.rows > 1) {\n\n            slidesPerSection = _.options.slidesPerRow * _.options.rows;\n            numOfSlides = Math.ceil(originalSlides.length / slidesPerSection);\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().css({\n                'width': 100 / _.options.slidesPerRow + '%',\n                'display': 'inline-block'\n            });\n        }\n    };\n\n    Slick.prototype.checkResponsive = function (initial, forceUpdate) {\n\n        var _ = this,\n            breakpoint,\n            targetBreakpoint,\n            respondToWidth,\n            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 && _.options.responsive.length && _.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 = targetBreakpoint;\n                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                            _.unslick(targetBreakpoint);\n                        } else {\n                            _.options = $.extend({}, _.originalSettings, _.breakpointSettings[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, _.breakpointSettings[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    Slick.prototype.changeSlide = function (event, dontAnimate) {\n\n        var _ = this,\n            $target = $(event.currentTarget),\n            indexOffset,\n            slideOffset,\n            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 : 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    Slick.prototype.checkNavigable = function (index) {\n\n        var _ = this,\n            navigables,\n            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).off('click.slick', _.changeSlide).off('mouseenter.slick', $.proxy(_.interrupt, _, true)).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    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    Slick.prototype.cleanUpRows = function () {\n\n        var _ = this,\n            originalSlides;\n\n        if (_.options.rows > 1) {\n            originalSlides = _.$slides.children().children();\n            originalSlides.removeAttr('style');\n            _.$slider.empty().append(originalSlides);\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    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.removeClass('slick-disabled slick-arrow slick-hidden').removeAttr('aria-hidden aria-disabled tabindex').css('display', '');\n\n            if (_.htmlExpr.test(_.options.prevArrow)) {\n                _.$prevArrow.remove();\n            }\n        }\n\n        if (_.$nextArrow && _.$nextArrow.length) {\n\n            _.$nextArrow.removeClass('slick-disabled slick-arrow slick-hidden').removeAttr('aria-hidden aria-disabled tabindex').css('display', '');\n\n            if (_.htmlExpr.test(_.options.nextArrow)) {\n                _.$nextArrow.remove();\n            }\n        }\n\n        if (_.$slides) {\n\n            _.$slides.removeClass('slick-slide slick-active slick-center slick-visible slick-current').removeAttr('aria-hidden').removeAttr('data-slick-index').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    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    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        } 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    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        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\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    Slick.prototype.focusHandler = function () {\n\n        var _ = this;\n\n        _.$slider.off('focus.slick blur.slick').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            }, 0);\n        });\n    };\n\n    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function () {\n\n        var _ = this;\n        return _.currentSlide;\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    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    Slick.prototype.getOption = Slick.prototype.slickGetOption = function (option) {\n\n        var _ = this;\n\n        return _.options[option];\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    Slick.prototype.getSlick = function () {\n\n        return this;\n    };\n\n    Slick.prototype.getSlideCount = function () {\n\n        var _ = this,\n            slidesTraversed,\n            swipedSlide,\n            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        } else {\n            return _.options.slidesToScroll;\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    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        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    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                    $(this).attr({\n                        'aria-describedby': 'slick-slide-control' + _.instanceUid + slideControlIndex\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            }).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            _.$slides.eq(i).attr('tabindex', 0);\n        }\n\n        _.activateADA();\n    };\n\n    Slick.prototype.initArrowEvents = function () {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow.off('click.slick').on('click.slick', {\n                message: 'previous'\n            }, _.changeSlide);\n            _.$nextArrow.off('click.slick').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    Slick.prototype.initDotEvents = function () {\n\n        var _ = this;\n\n        if (_.options.dots === true) {\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) {\n\n            $('li', _.$dots).on('mouseenter.slick', $.proxy(_.interrupt, _, true)).on('mouseleave.slick', $.proxy(_.interrupt, _, false));\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    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    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        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.show();\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    Slick.prototype.lazyLoad = function () {\n\n        var _ = this,\n            loadRange,\n            cloneRange,\n            rangeStart,\n            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.animate({ opacity: 0 }, 100, function () {\n\n                        if (imageSrcSet) {\n                            image.attr('srcset', imageSrcSet);\n\n                            if (imageSizes) {\n                                image.attr('sizes', imageSizes);\n                            }\n                        }\n\n                        image.attr('src', imageSource).animate({ opacity: 1 }, 200, function () {\n                            image.removeAttr('data-lazy data-srcset data-sizes').removeClass('slick-loading');\n                        });\n                        _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n                    });\n                };\n\n                imageToLoad.onerror = function () {\n\n                    image.removeAttr('data-lazy').removeClass('slick-loading').addClass('slick-lazyload-error');\n\n                    _.$slider.trigger('lazyLoadError', [_, image, imageSource]);\n                };\n\n                imageToLoad.src = imageSource;\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 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    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    Slick.prototype.next = Slick.prototype.slickNext = function () {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'next'\n            }\n        });\n    };\n\n    Slick.prototype.orientationChange = function () {\n\n        var _ = this;\n\n        _.checkResponsive();\n        _.setPosition();\n    };\n\n    Slick.prototype.pause = Slick.prototype.slickPause = function () {\n\n        var _ = this;\n\n        _.autoPlayClear();\n        _.paused = true;\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    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    Slick.prototype.prev = Slick.prototype.slickPrev = function () {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'previous'\n            }\n        });\n    };\n\n    Slick.prototype.preventDefault = function (event) {\n\n        event.preventDefault();\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.attr('srcset', imageSrcSet);\n\n                    if (imageSizes) {\n                        image.attr('sizes', imageSizes);\n                    }\n                }\n\n                image.attr('src', imageSource).removeAttr('data-lazy data-srcset data-sizes').removeClass('slick-loading');\n\n                if (_.options.adaptiveHeight === true) {\n                    _.setPosition();\n                }\n\n                _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n                _.progressiveLazyLoad();\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                } else {\n\n                    image.removeAttr('data-lazy').removeClass('slick-loading').addClass('slick-lazyload-error');\n\n                    _.$slider.trigger('lazyLoadError', [_, image, imageSource]);\n\n                    _.progressiveLazyLoad();\n                }\n            };\n\n            imageToLoad.src = imageSource;\n        } else {\n\n            _.$slider.trigger('allImagesLoaded', [_]);\n        }\n    };\n\n    Slick.prototype.refresh = function (initializing) {\n\n        var _ = this,\n            currentSlide,\n            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        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    Slick.prototype.registerBreakpoints = function () {\n\n        var _ = this,\n            breakpoint,\n            currentBreakpoint,\n            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            _.breakpoints.sort(function (a, b) {\n                return _.options.mobileFirst ? a - b : b - a;\n            });\n        }\n    };\n\n    Slick.prototype.reinit = function () {\n\n        var _ = this;\n\n        _.$slides = _.$slideTrack.children(_.options.slide).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    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) {\n                    _.setPosition();\n                }\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    Slick.prototype.setCSS = function (position) {\n\n        var _ = this,\n            positionProps = {},\n            x,\n            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    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        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        } 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    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    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    Slick.prototype.setOption = 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,\n            l,\n            item,\n            option,\n            value,\n            refresh = false,\n            type;\n\n        if ($.type(arguments[0]) === 'object') {\n\n            option = arguments[0];\n            refresh = arguments[1];\n            type = 'multiple';\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            } else if (typeof arguments[1] !== 'undefined') {\n\n                type = 'single';\n            }\n        }\n\n        if (type === 'single') {\n\n            _.options[option] = value;\n        } else if (type === 'multiple') {\n\n            $.each(option, function (opt, val) {\n\n                _.options[opt] = val;\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                } 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                        l--;\n                    }\n\n                    _.options.responsive.push(value[item]);\n                }\n            }\n        }\n\n        if (refresh) {\n\n            _.unload();\n            _.reinit();\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    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 || bodyStyle.MozTransition !== undefined || 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    Slick.prototype.setSlideClasses = function (index) {\n\n        var _ = this,\n            centerOffset,\n            allSlides,\n            indexOffset,\n            remainder;\n\n        allSlides = _.$slider.find('.slick-slide').removeClass('slick-active slick-center slick-current').attr('aria-hidden', 'true');\n\n        _.$slides.eq(index).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.slice(index - centerOffset + evenCoef, index + centerOffset + 1).addClass('slick-active').attr('aria-hidden', 'false');\n                } else {\n\n                    indexOffset = _.options.slidesToShow + index;\n                    allSlides.slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2).addClass('slick-active').attr('aria-hidden', 'false');\n                }\n\n                if (index === 0) {\n\n                    allSlides.eq(allSlides.length - 1 - _.options.slidesToShow).addClass('slick-center');\n                } else if (index === _.slideCount - 1) {\n\n                    allSlides.eq(_.options.slidesToShow).addClass('slick-center');\n                }\n            }\n\n            _.$slides.eq(index).addClass('slick-center');\n        } else {\n\n            if (index >= 0 && index <= _.slideCount - _.options.slidesToShow) {\n\n                _.$slides.slice(index, index + _.options.slidesToShow).addClass('slick-active').attr('aria-hidden', 'false');\n            } else if (allSlides.length <= _.options.slidesToShow) {\n\n                allSlides.addClass('slick-active').attr('aria-hidden', 'false');\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.slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder).addClass('slick-active').attr('aria-hidden', 'false');\n                } else {\n\n                    allSlides.slice(indexOffset, indexOffset + _.options.slidesToShow).addClass('slick-active').attr('aria-hidden', 'false');\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,\n            slideIndex,\n            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 - infiniteCount; i -= 1) {\n                    slideIndex = i - 1;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '').attr('data-slick-index', slideIndex - _.slideCount).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', '').attr('data-slick-index', slideIndex + _.slideCount).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    Slick.prototype.interrupt = function (toggle) {\n\n        var _ = this;\n\n        if (!toggle) {\n            _.autoPlay();\n        }\n        _.interrupted = toggle;\n    };\n\n    Slick.prototype.selectHandler = function (event) {\n\n        var _ = this;\n\n        var targetElement = $(event.target).is('.slick-slide') ? $(event.target) : $(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        _.slideHandler(index);\n    };\n\n    Slick.prototype.slideHandler = function (index, sync, dontAnimate) {\n\n        var targetSlide,\n            animSlide,\n            oldSlide,\n            slideLeft,\n            targetLeft = null,\n            _ = this,\n            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) {\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) {\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        _.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            } else {\n                _.postSlide(animSlide);\n            }\n            _.animateHeight();\n            return;\n        }\n\n        if (dontAnimate !== true) {\n            _.animateSlide(targetLeft, function () {\n                _.postSlide(animSlide);\n            });\n        } else {\n            _.postSlide(animSlide);\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        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.hide();\n        }\n\n        _.$slider.addClass('slick-loading');\n    };\n\n    Slick.prototype.swipeDirection = function () {\n\n        var xDist,\n            yDist,\n            r,\n            swipeAngle,\n            _ = 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    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 = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide + _.getSlideCount()) : _.currentSlide + _.getSlideCount();\n\n                    _.currentDirection = 0;\n\n                    break;\n\n                case 'right':\n                case 'up':\n\n                    slideCount = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide - _.getSlideCount()) : _.currentSlide - _.getSlideCount();\n\n                    _.currentDirection = 1;\n\n                    break;\n\n                default:\n\n            }\n\n            if (direction != 'vertical') {\n\n                _.slideHandler(slideCount);\n                _.touchObject = {};\n                _.$slider.trigger('swipe', [_, direction]);\n            }\n        } else {\n\n            if (_.touchObject.startX !== _.touchObject.curX) {\n\n                _.slideHandler(_.currentSlide);\n                _.touchObject = {};\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 ? event.originalEvent.touches.length : 1;\n\n        _.touchObject.minSwipe = _.listWidth / _.options.touchThreshold;\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.minSwipe = _.listHeight / _.options.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    Slick.prototype.swipeMove = function (event) {\n\n        var _ = this,\n            edgeWasHit = false,\n            curLeft,\n            swipeDirection,\n            swipeLength,\n            positionOffset,\n            touches,\n            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(Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n\n        verticalSwipeLength = Math.round(Math.sqrt(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        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    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    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    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.removeClass('slick-slide slick-active slick-visible slick-current').attr('aria-hidden', 'true').css('width', '');\n    };\n\n    Slick.prototype.unslick = function (fromBreakpoint) {\n\n        var _ = this;\n        _.$slider.trigger('unslick', [_, fromBreakpoint]);\n        _.destroy();\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 && _.slideCount > _.options.slidesToShow && !_.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            } 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            } 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    Slick.prototype.updateDots = function () {\n\n        var _ = this;\n\n        if (_.$dots !== null) {\n\n            _.$dots.find('li').removeClass('slick-active').end();\n\n            _.$dots.find('li').eq(Math.floor(_.currentSlide / _.options.slidesToScroll)).addClass('slick-active');\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            } else {\n\n                _.interrupted = false;\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 === 'undefined' ? 'undefined' : _typeof(opt)) == 'object' || typeof opt == 'undefined') _[i].slick = new Slick(_[i], opt);else ret = _[i].slick[opt].apply(_[i].slick, args);\n            if (typeof ret != 'undefined') return ret;\n        }\n        return _;\n    };\n});\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nmodule.exports = window.jQuery;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/* http://keith-wood.name/svg.html\r\n   SVG for jQuery v1.5.0.\r\n   Written by Keith Wood (kbwood{at}iinet.com.au) August 2007.\r\n   Available under the MIT (http://keith-wood.name/licence.html) license. \r\n   Please attribute the author if you use it. */\n\n(function ($) {\n\t// Hide scope, no $ conflict\n\n\t/** The SVG manager.\r\n \t<p>Use the singleton instance of this class, $.svg, \r\n \tto interact with the SVG functionality.</p>\r\n \t<p>Expects HTML like:</p>\r\n \t<pre>&lt;div>&lt;/div></pre>\r\n \t@module SVGManager */\n\tfunction SVGManager() {\n\t\tthis._settings = []; // Settings to be remembered per SVG object\n\t\tthis._extensions = []; // List of SVG extensions added to SVGWrapper\n\t\t// for each entry [0] is extension name, [1] is extension class (function)\n\t\t// the function takes one parameter - the SVGWrapper instance\n\t\tthis.regional = []; // Localisations, indexed by language, '' for default (English)\n\t\tthis.regional[''] = { errorLoadingText: 'Error loading' };\n\t\tthis.local = this.regional['']; // Current localisation\n\t\tthis._uuid = new Date().getTime();\n\t\tthis._ie = !!window.ActiveXObject;\n\t}\n\n\t$.extend(SVGManager.prototype, {\n\t\t/** Class name added to elements to indicate already configured with SVG. */\n\t\tmarkerClassName: 'hasSVG',\n\t\t/** Name of the data property for instance settings. */\n\t\tpropertyName: 'svgwrapper',\n\n\t\t/** SVG namespace. */\n\t\tsvgNS: 'http://www.w3.org/2000/svg',\n\t\t/** XLink namespace. */\n\t\txlinkNS: 'http://www.w3.org/1999/xlink',\n\n\t\t/** SVG wrapper class. */\n\t\t_wrapperClass: SVGWrapper,\n\n\t\t/* Camel-case versions of attribute names containing dashes or are reserved words. */\n\t\t_attrNames: { class_: 'class', in_: 'in',\n\t\t\talignmentBaseline: 'alignment-baseline', baselineShift: 'baseline-shift',\n\t\t\tclipPath: 'clip-path', clipRule: 'clip-rule',\n\t\t\tcolorInterpolation: 'color-interpolation',\n\t\t\tcolorInterpolationFilters: 'color-interpolation-filters',\n\t\t\tcolorRendering: 'color-rendering', dominantBaseline: 'dominant-baseline',\n\t\t\tenableBackground: 'enable-background', fillOpacity: 'fill-opacity',\n\t\t\tfillRule: 'fill-rule', floodColor: 'flood-color',\n\t\t\tfloodOpacity: 'flood-opacity', fontFamily: 'font-family',\n\t\t\tfontSize: 'font-size', fontSizeAdjust: 'font-size-adjust',\n\t\t\tfontStretch: 'font-stretch', fontStyle: 'font-style',\n\t\t\tfontVariant: 'font-variant', fontWeight: 'font-weight',\n\t\t\tglyphOrientationHorizontal: 'glyph-orientation-horizontal',\n\t\t\tglyphOrientationVertical: 'glyph-orientation-vertical',\n\t\t\thorizAdvX: 'horiz-adv-x', horizOriginX: 'horiz-origin-x',\n\t\t\timageRendering: 'image-rendering', letterSpacing: 'letter-spacing',\n\t\t\tlightingColor: 'lighting-color', markerEnd: 'marker-end',\n\t\t\tmarkerMid: 'marker-mid', markerStart: 'marker-start',\n\t\t\tstopColor: 'stop-color', stopOpacity: 'stop-opacity',\n\t\t\tstrikethroughPosition: 'strikethrough-position',\n\t\t\tstrikethroughThickness: 'strikethrough-thickness',\n\t\t\tstrokeDashArray: 'stroke-dasharray', strokeDashOffset: 'stroke-dashoffset',\n\t\t\tstrokeLineCap: 'stroke-linecap', strokeLineJoin: 'stroke-linejoin',\n\t\t\tstrokeMiterLimit: 'stroke-miterlimit', strokeOpacity: 'stroke-opacity',\n\t\t\tstrokeWidth: 'stroke-width', textAnchor: 'text-anchor',\n\t\t\ttextDecoration: 'text-decoration', textRendering: 'text-rendering',\n\t\t\tunderlinePosition: 'underline-position', underlineThickness: 'underline-thickness',\n\t\t\tvertAdvY: 'vert-adv-y', vertOriginY: 'vert-origin-y',\n\t\t\twordSpacing: 'word-spacing', writingMode: 'writing-mode' },\n\n\t\t/* Add the SVG object to its container. */\n\t\t_attachSVG: function _attachSVG(container, settings) {\n\t\t\tvar svg = container.namespaceURI === this.svgNS ? container : null;\n\t\t\tvar container = svg ? null : container;\n\t\t\tif ($(container || svg).hasClass(this.markerClassName)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof settings === 'string') {\n\t\t\t\tsettings = { loadURL: settings };\n\t\t\t} else if (typeof settings === 'function') {\n\t\t\t\tsettings = { onLoad: settings };\n\t\t\t}\n\t\t\t$(container || svg).addClass(this.markerClassName);\n\t\t\ttry {\n\t\t\t\tif (!svg) {\n\t\t\t\t\tsvg = document.createElementNS(this.svgNS, 'svg');\n\t\t\t\t\tsvg.setAttribute('version', '1.1');\n\t\t\t\t\tif (container.clientWidth > 0) {\n\t\t\t\t\t\tsvg.setAttribute('width', container.clientWidth);\n\t\t\t\t\t}\n\t\t\t\t\tif (container.clientHeight > 0) {\n\t\t\t\t\t\tsvg.setAttribute('height', container.clientHeight);\n\t\t\t\t\t}\n\t\t\t\t\tcontainer.appendChild(svg);\n\t\t\t\t}\n\t\t\t\tthis._afterLoad(container, svg, settings || {});\n\t\t\t} catch (e) {\n\t\t\t\t$(container).html('<p>SVG is not supported natively on this browser</p>');\n\t\t\t}\n\t\t},\n\n\t\t/* Post-processing once loaded. */\n\t\t_afterLoad: function _afterLoad(container, svg, settings) {\n\t\t\tvar settings = settings || this._settings[container.id];\n\t\t\tthis._settings[container ? container.id : ''] = null;\n\t\t\tvar wrapper = new this._wrapperClass(svg, container);\n\t\t\t$.data(container || svg, $.svg.propertyName, wrapper);\n\t\t\ttry {\n\t\t\t\tif (settings.loadURL) {\n\t\t\t\t\t// Load URL\n\t\t\t\t\twrapper.load(settings.loadURL, settings);\n\t\t\t\t}\n\t\t\t\tif (settings.settings) {\n\t\t\t\t\t// Additional settings\n\t\t\t\t\twrapper.configure(settings.settings);\n\t\t\t\t}\n\t\t\t\tif (settings.onLoad && !settings.loadURL) {\n\t\t\t\t\t// Onload callback\n\t\t\t\t\tsettings.onLoad.apply(container || svg, [wrapper]);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\talert(e);\n\t\t\t}\n\t\t},\n\n\t\t/** Return the SVG wrapper created for a given container.\r\n  \t@param container {string|Element|jQuery} Selector for the container or\r\n  \t\t\tthe container for the SVG object or jQuery collection where first entry is the container.\r\n  \t@return {SVGWrapper} The corresponding SVG wrapper element, or <code>null</code> if not attached. */\n\t\t_getSVG: function _getSVG(container) {\n\t\t\treturn $(container).data(this.propertyName);\n\t\t},\n\n\t\t/** Remove the SVG functionality from a div.\r\n  \t@param container {Element} The container for the SVG object. */\n\t\t_destroySVG: function _destroySVG(container) {\n\t\t\tcontainer = $(container);\n\t\t\tif (!container.hasClass(this.markerClassName)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcontainer.removeClass(this.markerClassName).removeData(this.propertyName);\n\t\t\tif (container[0].namespaceURI !== this.svgNS) {\n\t\t\t\tcontainer.empty();\n\t\t\t}\n\t\t},\n\n\t\t/** Extend the SVGWrapper object with an embedded class.\r\n  \t<p>The constructor function must take a single parameter that is\r\n     a reference to the owning SVG root object. This allows the \r\n  \textension to access the basic SVG functionality.</p>\r\n  \t@param name {string} The name of the <code>SVGWrapper</code> attribute to access the new class.\r\n  \t@param extClass {function} The extension class constructor. */\n\t\taddExtension: function addExtension(name, extClass) {\n\t\t\tthis._extensions.push([name, extClass]);\n\t\t},\n\n\t\t/** Does this node belong to SVG?\r\n  \t@param node {Element} The node to be tested.\r\n  \t@return {boolean} <code>true</code> if an SVG node, <code>false</code> if not. */\n\t\tisSVGElem: function isSVGElem(node) {\n\t\t\treturn node.nodeType === 1 && node.namespaceURI === $.svg.svgNS;\n\t\t}\n\t});\n\n\t/** The main SVG interface, which encapsulates the SVG element.\r\n \t<p>Obtain a reference from $().svg('get')</p>\r\n \t@module SVGWrapper */\n\tfunction SVGWrapper(svg, container) {\n\t\tthis._svg = svg; // The SVG root node\n\t\tthis._container = container; // The containing div\n\t\tfor (var i = 0; i < $.svg._extensions.length; i++) {\n\t\t\tvar extension = $.svg._extensions[i];\n\t\t\tthis[extension[0]] = new extension[1](this);\n\t\t}\n\t}\n\n\t$.extend(SVGWrapper.prototype, {\n\n\t\t/** Retrieve the width of the SVG object.\r\n  \t@return {number} The width of the SVG canvas. */\n\t\twidth: function width() {\n\t\t\treturn this._container ? this._container.clientWidth : this._svg.width;\n\t\t},\n\n\t\t/** Retrieve the height of the SVG object.\r\n  \t@return {number} The height of the SVG canvas. */\n\t\theight: function height() {\n\t\t\treturn this._container ? this._container.clientHeight : this._svg.height;\n\t\t},\n\n\t\t/** Retrieve the root SVG element.\r\n  \t@return {SVGElement} The top-level SVG element. */\n\t\troot: function root() {\n\t\t\treturn this._svg;\n\t\t},\n\n\t\t/** Configure a SVG node.\r\n  \t@param [node] {SVGElement} The node to configure, or the SVG root if not specified.\r\n  \t@param settings {object} Additional settings for the root.\r\n  \t@param [clear=false] {boolean} <code>true</code> to remove existing attributes first,\r\n  \t\t\t<code>false</code> to add to what is already there.\r\n  \t@return {SVGWrapper} This wrapper. */\n\t\tconfigure: function configure(node, settings, clear) {\n\t\t\tif (!node.nodeName) {\n\t\t\t\tclear = settings;\n\t\t\t\tsettings = node;\n\t\t\t\tnode = this._svg;\n\t\t\t}\n\t\t\tif (clear) {\n\t\t\t\tfor (var i = node.attributes.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar attr = node.attributes.item(i);\n\t\t\t\t\tif (!(attr.nodeName === 'onload' || attr.nodeName === 'version' || attr.nodeName.substring(0, 5) === 'xmlns')) {\n\t\t\t\t\t\tnode.attributes.removeNamedItem(attr.nodeName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var attrName in settings) {\n\t\t\t\tnode.setAttribute($.svg._attrNames[attrName] || attrName, settings[attrName]);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Locate a specific element in the SVG document.\r\n  \t@param id {string} The element's identifier.\r\n  \t@return {SVGElement} The element reference, or <code>null</code> if not found. */\n\t\tgetElementById: function getElementById(id) {\n\t\t\treturn this._svg.ownerDocument.getElementById(id);\n\t\t},\n\n\t\t/** Change the attributes for a SVG node.\r\n  \t@param element {SVGElement} The node to change.\r\n  \t@param settings {object} The new settings.\r\n  \t@return {SVGWrapper} This wrapper. */\n\t\tchange: function change(element, settings) {\n\t\t\tif (element) {\n\t\t\t\tfor (var name in settings) {\n\t\t\t\t\tif (settings[name] == null) {\n\t\t\t\t\t\telement.removeAttribute($.svg._attrNames[name] || name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.setAttribute($.svg._attrNames[name] || name, settings[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Check for parent being absent and adjust arguments accordingly.\r\n  \t@private\r\n  \t@param values {string[]} The given parameters.\r\n  \t@param names {string[]} The names of the parameters in order.\r\n  \t@param optSettings {string[]} The names of optional parameters.\r\n  \t@return {object} An object representing the named parameters. */\n\t\t_args: function _args(values, names, optSettings) {\n\t\t\tnames.splice(0, 0, 'parent');\n\t\t\tnames.splice(names.length, 0, 'settings');\n\t\t\tvar args = {};\n\t\t\tvar offset = 0;\n\t\t\tif (values[0] != null && values[0].jquery) {\n\t\t\t\tvalues[0] = values[0][0];\n\t\t\t}\n\t\t\tif (values[0] != null && !(_typeof(values[0]) === 'object' && values[0].nodeName)) {\n\t\t\t\targs['parent'] = null;\n\t\t\t\toffset = 1;\n\t\t\t}\n\t\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\t\targs[names[i + offset]] = values[i];\n\t\t\t}\n\t\t\tif (optSettings) {\n\t\t\t\t$.each(optSettings, function (i, value) {\n\t\t\t\t\tif (_typeof(args[value]) === 'object') {\n\t\t\t\t\t\targs.settings = args[value];\n\t\t\t\t\t\targs[value] = null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn args;\n\t\t},\n\n\t\t/** Add a title.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param text {string} The text of the title.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new title node. */\n\t\ttitle: function title(parent, text, settings) {\n\t\t\tvar args = this._args(arguments, ['text']);\n\t\t\tvar node = this._makeNode(args.parent, 'title', args.settings || {});\n\t\t\tnode.appendChild(this._svg.ownerDocument.createTextNode(args.text));\n\t\t\treturn node;\n\t\t},\n\n\t\t/** Add a description.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param text {string} The text of the description.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new description node. */\n\t\tdescribe: function describe(parent, text, settings) {\n\t\t\tvar args = this._args(arguments, ['text']);\n\t\t\tvar node = this._makeNode(args.parent, 'desc', args.settings || {});\n\t\t\tnode.appendChild(this._svg.ownerDocument.createTextNode(args.text));\n\t\t\treturn node;\n\t\t},\n\n\t\t/** Add a definitions node.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param [id] {string} The ID of this definitions (optional).\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new definitions node. */\n\t\tdefs: function defs(parent, id, settings) {\n\t\t\tvar args = this._args(arguments, ['id'], ['id']);\n\t\t\treturn this._makeNode(args.parent, 'defs', $.extend(args.id ? { id: args.id } : {}, args.settings || {}));\n\t\t},\n\n\t\t/** Add a symbol definition.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param id {string} The ID of this symbol.\r\n  \t@param x1 {number} The left coordinate for this symbol.\r\n  \t@param y1 {number} The top coordinate for this symbol.\r\n  \t@param width {number} The width of this symbol.\r\n  \t@param height {number} The height of this symbol.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new symbol node. */\n\t\tsymbol: function symbol(parent, id, x1, y1, width, height, settings) {\n\t\t\tvar args = this._args(arguments, ['id', 'x1', 'y1', 'width', 'height']);\n\t\t\treturn this._makeNode(args.parent, 'symbol', $.extend({ id: args.id,\n\t\t\t\tviewBox: args.x1 + ' ' + args.y1 + ' ' + args.width + ' ' + args.height }, args.settings || {}));\n\t\t},\n\n\t\t/** Add a marker definition.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param id {string} The ID of this marker.\r\n  \t@param refX {number} The x-coordinate for the reference point.\r\n  \t@param refY {number} The y-coordinate for the reference point.\r\n  \t@param mWidth {number} The marker viewport width.\r\n  \t@param mHeight {number} The marker viewport height.\r\n  \t@param [orient] {string|number} 'auto' or angle (degrees).\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new marker node. */\n\t\tmarker: function marker(parent, id, refX, refY, mWidth, mHeight, orient, settings) {\n\t\t\tvar args = this._args(arguments, ['id', 'refX', 'refY', 'mWidth', 'mHeight', 'orient'], ['orient']);\n\t\t\treturn this._makeNode(args.parent, 'marker', $.extend({ id: args.id, refX: args.refX, refY: args.refY, markerWidth: args.mWidth,\n\t\t\t\tmarkerHeight: args.mHeight, orient: args.orient || 'auto' }, args.settings || {}));\n\t\t},\n\n\t\t/** Add a style node.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param styles {string} The CSS styles.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new style node. */\n\t\tstyle: function style(parent, styles, settings) {\n\t\t\tvar args = this._args(arguments, ['styles']);\n\t\t\tvar node = this._makeNode(args.parent, 'style', $.extend({ type: 'text/css' }, args.settings || {}));\n\t\t\tnode.appendChild(this._svg.ownerDocument.createTextNode(args.styles));\n\t\t\treturn node;\n\t\t},\n\n\t\t/** Add a script node.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param script {string} The JavaScript code.\r\n  \t@param [type='text/javascript'] {string} The MIME type for the code.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new script node. */\n\t\tscript: function script(parent, _script, type, settings) {\n\t\t\tvar args = this._args(arguments, ['script', 'type'], ['type']);\n\t\t\tvar node = this._makeNode(args.parent, 'script', $.extend({ type: args.type || 'text/javascript' }, args.settings || {}));\n\t\t\tnode.appendChild(this._svg.ownerDocument.createTextNode(args.script));\n\t\t\tif ($.svg._ie) {\n\t\t\t\t$.globalEval(args.script);\n\t\t\t}\n\t\t\treturn node;\n\t\t},\n\n\t\t/** Add a linear gradient definition.\r\n  \t<p>Specify all of <code>x1</code>, <code>y1</code>, <code>x2</code>, <code>y2</code> or none of them.</p>\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param id {string} The ID for this gradient.\r\n  \t@param stops {string[][]} The gradient stops, each entry is [0] is offset (0.0-1.0 or 0%-100%),\r\n  \t\t\t[1] is colour, [2] is opacity (optional).\r\n  \t@param [x1] {number} The x-coordinate of the gradient start.\r\n  \t@param [y1] {number} The y-coordinate of the gradient start.\r\n  \t@param [x2] {number} The x-coordinate of the gradient end.\r\n  \t@param [y2] {number} The y-coordinate of the gradient end.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new linear gradient node. */\n\t\tlinearGradient: function linearGradient(parent, id, stops, x1, y1, x2, y2, settings) {\n\t\t\tvar args = this._args(arguments, ['id', 'stops', 'x1', 'y1', 'x2', 'y2'], ['x1']);\n\t\t\tvar sets = $.extend({ id: args.id }, args.x1 != null ? { x1: args.x1, y1: args.y1, x2: args.x2, y2: args.y2 } : {});\n\t\t\treturn this._gradient(args.parent, 'linearGradient', $.extend(sets, args.settings || {}), args.stops);\n\t\t},\n\n\t\t/** Add a radial gradient definition.\r\n  \t<p>Specify all of <code>cx</code>, <code>cy</code>, <code>r</code>,\r\n  \t<code>fx</code>, <code>fy</code> or none of them.</p>\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param id {string} The ID for this gradient.\r\n  \t@param stops {string[][]} The gradient stops, each entry [0] is offset (0.0-1.0 or 0%-100%),\r\n  \t\t\t[1] is colour, [2] is opacity (optional).\r\n  \t@param [cx] {number} The x-coordinate of the largest circle centre.\r\n  \t@param [cy] {number} The y-coordinate of the largest circle centre.\r\n  \t@param [r] {number} The radius of the largest circle.\r\n  \t@param [fx] {number} The x-coordinate of the gradient focus.\r\n  \t@param [fy] {number} The y-coordinate of the gradient focus.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new radial gradient node. */\n\t\tradialGradient: function radialGradient(parent, id, stops, cx, cy, r, fx, fy, settings) {\n\t\t\tvar args = this._args(arguments, ['id', 'stops', 'cx', 'cy', 'r', 'fx', 'fy'], ['cx']);\n\t\t\tvar sets = $.extend({ id: args.id }, args.cx != null ? { cx: args.cx, cy: args.cy, r: args.r, fx: args.fx, fy: args.fy } : {});\n\t\t\treturn this._gradient(args.parent, 'radialGradient', $.extend(sets, args.settings || {}), args.stops);\n\t\t},\n\n\t\t/** Add a gradient node.\r\n  \t@private\r\n  \t@param parent {SVGElement|jQuery} The parent node for the new node.\r\n  \t@param name {string} The type of gradient node to create.\r\n  \t@param settings {object} The settings for this node.\r\n  \t@param stops {string[][]} The gradient stops.\r\n  \t@return {SVGElement} The new gradient node. */\n\t\t_gradient: function _gradient(parent, name, settings, stops) {\n\t\t\tvar node = this._makeNode(parent, name, settings);\n\t\t\tfor (var i = 0; i < stops.length; i++) {\n\t\t\t\tvar stop = stops[i];\n\t\t\t\tthis._makeNode(node, 'stop', $.extend({ offset: stop[0], stopColor: stop[1] }, stop[2] != null ? { stopOpacity: stop[2] } : {}));\n\t\t\t}\n\t\t\treturn node;\n\t\t},\n\n\t\t/** Add a pattern definition.\r\n  \t<p>Specify all of <code>vx</code>, <code>vy</code>, <code>xwidth</code>,\r\n  \t<code>vheight</code> or none of them.</p>\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param id {string} The ID for this pattern.\r\n  \t@param x {number} The x-coordinate for the left edge of the pattern.\r\n  \t@param y {number} The y-coordinate for the top edge of the pattern.\r\n  \t@param width {number} The width of the pattern.\r\n  \t@param height {number} The height of the pattern.\r\n  \t@param [vx] {number} The minimum x-coordinate for view box.\r\n  \t@param [vy] {number} The minimum y-coordinate for the view box.\r\n  \t@param [vwidth] {number} The width of the view box.\r\n  \t@param [vheight] {number} The height of the view box.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new pattern definition node. */\n\t\tpattern: function pattern(parent, id, x, y, width, height, vx, vy, vwidth, vheight, settings) {\n\t\t\tvar args = this._args(arguments, ['id', 'x', 'y', 'width', 'height', 'vx', 'vy', 'vwidth', 'vheight'], ['vx']);\n\t\t\tvar sets = $.extend({ id: args.id, x: args.x, y: args.y, width: args.width, height: args.height }, args.vx != null ? { viewBox: args.vx + ' ' + args.vy + ' ' + args.vwidth + ' ' + args.vheight } : {});\n\t\t\treturn this._makeNode(args.parent, 'pattern', $.extend(sets, args.settings || {}));\n\t\t},\n\n\t\t/** Add a clip path definition.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param id {string} The ID for this path.\r\n  \t@param [units='userSpaceOnUse'] {string} Either 'userSpaceOnUse' or 'objectBoundingBox'.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new clip path definition node. */\n\t\tclipPath: function clipPath(parent, id, units, settings) {\n\t\t\tvar args = this._args(arguments, ['id', 'units']);\n\t\t\targs.units = args.units || 'userSpaceOnUse';\n\t\t\treturn this._makeNode(args.parent, 'clipPath', $.extend({ id: args.id, clipPathUnits: args.units }, args.settings || {}));\n\t\t},\n\n\t\t/** Add a mask definition.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param id {string} The ID for this mask.\r\n  \t@param x {number} The x-coordinate for the left edge of the mask.\r\n  \t@param y {number} The y-coordinate for the top edge of the mask.\r\n  \t@param width {number} The width of the mask.\r\n  \t@param height {number} The height of the mask.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new mask definition node. */\n\t\tmask: function mask(parent, id, x, y, width, height, settings) {\n\t\t\tvar args = this._args(arguments, ['id', 'x', 'y', 'width', 'height']);\n\t\t\treturn this._makeNode(args.parent, 'mask', $.extend({ id: args.id, x: args.x, y: args.y, width: args.width, height: args.height }, args.settings || {}));\n\t\t},\n\n\t\t/** Create a new path object.\r\n  \t@return {SVGPath} A new path object. */\n\t\tcreatePath: function createPath() {\n\t\t\treturn new SVGPath();\n\t\t},\n\n\t\t/** Create a new text object.\r\n  \t@return {SVGText} A new text object. */\n\t\tcreateText: function createText() {\n\t\t\treturn new SVGText();\n\t\t},\n\n\t\t/** Add an embedded SVG element.\r\n  \t<p>Specify all of <code>vx</code>, <code>vy</code>,\r\n  \t<code>vwidth</code>, <code>vheight</code> or none of them.</p>\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param x {number} The x-coordinate for the left edge of the node.\r\n  \t@param y {number} The y-coordinate for the top edge of the node.\r\n  \t@param width {number} The width of the node.\r\n  \t@param height {number} The height of the node.\r\n  \t@param [vx] {number} The minimum x-coordinate for view box.\r\n  \t@param [vy] {number} The minimum y-coordinate for the view box.\r\n  \t@param [vwidth] {number} The width of the view box.\r\n  \t@param [vheight] {number} The height of the view box.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new svg node. */\n\t\tsvg: function svg(parent, x, y, width, height, vx, vy, vwidth, vheight, settings) {\n\t\t\tvar args = this._args(arguments, ['x', 'y', 'width', 'height', 'vx', 'vy', 'vwidth', 'vheight'], ['vx']);\n\t\t\tvar sets = $.extend({ x: args.x, y: args.y, width: args.width, height: args.height }, args.vx != null ? { viewBox: args.vx + ' ' + args.vy + ' ' + args.vwidth + ' ' + args.vheight } : {});\n\t\t\treturn this._makeNode(args.parent, 'svg', $.extend(sets, args.settings || {}));\n\t\t},\n\n\t\t/** Create a group.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param [id] {string} The ID of this group.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new group node. */\n\t\tgroup: function group(parent, id, settings) {\n\t\t\tvar args = this._args(arguments, ['id'], ['id']);\n\t\t\treturn this._makeNode(args.parent, 'g', $.extend({ id: args.id }, args.settings || {}));\n\t\t},\n\n\t\t/** Add a usage reference.\r\n  \t<p>Specify all of <code>x</code>, <code>y</code>, <code>width</code>, <code>height</code> or none of them.</p>\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param [x] {number} The x-coordinate for the left edge of the node.\r\n  \t@param [y] {number} The y-coordinate for the top edge of the node.\r\n  \t@param [width] {number} The width of the node.\r\n  \t@param [height] {number} The height of the node.\r\n  \t@param ref {string} The ID of the definition node.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new usage reference node. */\n\t\tuse: function use(parent, x, y, width, height, ref, settings) {\n\t\t\tvar args = this._args(arguments, ['x', 'y', 'width', 'height', 'ref']);\n\t\t\tif (typeof args.x === 'string') {\n\t\t\t\targs.ref = args.x;\n\t\t\t\targs.settings = args.y;\n\t\t\t\targs.x = args.y = args.width = args.height = null;\n\t\t\t}\n\t\t\tvar node = this._makeNode(args.parent, 'use', $.extend({ x: args.x, y: args.y, width: args.width, height: args.height }, args.settings || {}));\n\t\t\tnode.setAttributeNS($.svg.xlinkNS, 'href', args.ref);\n\t\t\treturn node;\n\t\t},\n\n\t\t/** Add a link, which applies to all child elements.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param ref {string} The target URL.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new link node. */\n\t\tlink: function link(parent, ref, settings) {\n\t\t\tvar args = this._args(arguments, ['ref']);\n\t\t\tvar node = this._makeNode(args.parent, 'a', args.settings);\n\t\t\tnode.setAttributeNS($.svg.xlinkNS, 'href', args.ref);\n\t\t\treturn node;\n\t\t},\n\n\t\t/** Add an image.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param x {number} The x-coordinate for the left edge of the image.\r\n  \t@param y {number} The y-coordinate for the top edge of the image.\r\n  \t@param width {number} The width of the image.\r\n  \t@param height {number} The height of the image.\r\n  \t@param ref {string} The path to the image.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new image node. */\n\t\timage: function image(parent, x, y, width, height, ref, settings) {\n\t\t\tvar args = this._args(arguments, ['x', 'y', 'width', 'height', 'ref']);\n\t\t\tvar node = this._makeNode(args.parent, 'image', $.extend({ x: args.x, y: args.y, width: args.width, height: args.height }, args.settings || {}));\n\t\t\tnode.setAttributeNS($.svg.xlinkNS, 'href', args.ref);\n\t\t\treturn node;\n\t\t},\n\n\t\t/** Draw a path.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param path {string|SVGPath} The path to draw.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new path node. */\n\t\tpath: function path(parent, _path, settings) {\n\t\t\tvar args = this._args(arguments, ['path']);\n\t\t\treturn this._makeNode(args.parent, 'path', $.extend({ d: args.path.path ? args.path.path() : args.path }, args.settings || {}));\n\t\t},\n\n\t\t/** Draw a rectangle.\r\n  \t<p>Specify both of <code>rx</code> and <code>ry</code> or neither.</p>\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param x {number} The x-coordinate for the left edge of the rectangle.\r\n  \t@param y {number} The y-coordinate for the top edge of the rectangle.\r\n  \t@param width {number} The width of the rectangle.\r\n  \t@param height {number} The height of the rectangle.\r\n  \t@param [rx] {number} The x-radius of the ellipse for the rounded corners.\r\n  \t@param [ry] {number} The y-radius of the ellipse for the rounded corners.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new rectangle node. */\n\t\trect: function rect(parent, x, y, width, height, rx, ry, settings) {\n\t\t\tvar args = this._args(arguments, ['x', 'y', 'width', 'height', 'rx', 'ry'], ['rx']);\n\t\t\treturn this._makeNode(args.parent, 'rect', $.extend({ x: args.x, y: args.y, width: args.width, height: args.height }, args.rx ? { rx: args.rx, ry: args.ry } : {}, args.settings || {}));\n\t\t},\n\n\t\t/** Draw a circle.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param cx {number} The x-coordinate for the centre of the circle.\r\n  \t@param cy {number} The y-coordinate for the centre of the circle.\r\n  \t@param r {number} The radius of the circle.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new circle node. */\n\t\tcircle: function circle(parent, cx, cy, r, settings) {\n\t\t\tvar args = this._args(arguments, ['cx', 'cy', 'r']);\n\t\t\treturn this._makeNode(args.parent, 'circle', $.extend({ cx: args.cx, cy: args.cy, r: args.r }, args.settings || {}));\n\t\t},\n\n\t\t/** Draw an ellipse.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param cx {number} The x-coordinate for the centre of the ellipse.\r\n  \t@param cy {number} The y-coordinate for the centre of the ellipse.\r\n  \t@param rx {number} The x-radius of the ellipse.\r\n  \t@param ry {number} The y-radius of the ellipse.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new ellipse node. */\n\t\tellipse: function ellipse(parent, cx, cy, rx, ry, settings) {\n\t\t\tvar args = this._args(arguments, ['cx', 'cy', 'rx', 'ry']);\n\t\t\treturn this._makeNode(args.parent, 'ellipse', $.extend({ cx: args.cx, cy: args.cy, rx: args.rx, ry: args.ry }, args.settings || {}));\n\t\t},\n\n\t\t/** Draw a line.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param x1 {number} The x-coordinate for the start of the line.\r\n  \t@param y1 {number} The y-coordinate for the start of the line.\r\n  \t@param x2 {number} The x-coordinate for the end of the line.\r\n  \t@param y2 {number} The y-coordinate for the end of the line.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new line node. */\n\t\tline: function line(parent, x1, y1, x2, y2, settings) {\n\t\t\tvar args = this._args(arguments, ['x1', 'y1', 'x2', 'y2']);\n\t\t\treturn this._makeNode(args.parent, 'line', $.extend({ x1: args.x1, y1: args.y1, x2: args.x2, y2: args.y2 }, args.settings || {}));\n\t\t},\n\n\t\t/** Draw a polygonal line.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param points {number[][]} The x-/y-coordinates for the points on the line.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new polygonal line node. */\n\t\tpolyline: function polyline(parent, points, settings) {\n\t\t\tvar args = this._args(arguments, ['points']);\n\t\t\treturn this._poly(args.parent, 'polyline', args.points, args.settings);\n\t\t},\n\n\t\t/** Draw a polygonal shape.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param points {number[][]} The x-/y-coordinates for the points on the shape.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new polygonal shape node. */\n\t\tpolygon: function polygon(parent, points, settings) {\n\t\t\tvar args = this._args(arguments, ['points']);\n\t\t\treturn this._poly(args.parent, 'polygon', args.points, args.settings);\n\t\t},\n\n\t\t/** Draw a polygonal line or shape.\r\n  \t@private\r\n  \t@param parent {SVGElement|jQuery} The parent node for the new node.\r\n  \t@param name {string} The type of polygon to create.\r\n  \t@param points {number[][]} The x-/y-coordinates for the points on the shape.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new polygon node. */\n\t\t_poly: function _poly(parent, name, points, settings) {\n\t\t\tvar ps = '';\n\t\t\tfor (var i = 0; i < points.length; i++) {\n\t\t\t\tps += points[i].join() + ' ';\n\t\t\t}\n\t\t\treturn this._makeNode(parent, name, $.extend({ points: $.trim(ps) }, settings || {}));\n\t\t},\n\n\t\t/** Draw text.\r\n  \t<p>Specify both of <code>x</code> and <code>y</code> or neither of them.</p>\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param [x] {number|number[]} The x-coordinate(s) for the text.\r\n  \t@param [y] {number|number[]} The y-coordinate(s) for the text.\r\n  \t@param value {string|SVGText} The text content or text with spans and references.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new text node. */\n\t\ttext: function text(parent, x, y, value, settings) {\n\t\t\tvar args = this._args(arguments, ['x', 'y', 'value']);\n\t\t\tif (typeof args.x === 'string' && arguments.length < 4) {\n\t\t\t\targs.value = args.x;\n\t\t\t\targs.settings = args.y;\n\t\t\t\targs.x = args.y = null;\n\t\t\t}\n\t\t\treturn this._text(args.parent, 'text', args.value, $.extend({ x: args.x && $.isArray(args.x) ? args.x.join(' ') : args.x,\n\t\t\t\ty: args.y && $.isArray(args.y) ? args.y.join(' ') : args.y }, args.settings || {}));\n\t\t},\n\n\t\t/** Draw text along a path.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param path {string} The ID of the path.\r\n  \t@param value {string|SVGText} The text content or text with spans and references.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new textpath node. */\n\t\ttextpath: function textpath(parent, path, value, settings) {\n\t\t\tvar args = this._args(arguments, ['path', 'value']);\n\t\t\tvar node = this._text(args.parent, 'textPath', args.value, args.settings || {});\n\t\t\tnode.setAttributeNS($.svg.xlinkNS, 'href', args.path);\n\t\t\treturn node;\n\t\t},\n\n\t\t/** Draw text.\r\n  \t@private\r\n  \t@param parent {SVGElement|jQuery} The parent node for the new node.\r\n  \t@param name {string} The type of text to create.\r\n  \t@param value {string|SVGText} The text content or text with spans and references.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new text node. */\n\t\t_text: function _text(parent, name, value, settings) {\n\t\t\tvar node = this._makeNode(parent, name, settings);\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tnode.appendChild(node.ownerDocument.createTextNode(value));\n\t\t\t} else {\n\t\t\t\tfor (var i = 0; i < value._parts.length; i++) {\n\t\t\t\t\tvar part = value._parts[i];\n\t\t\t\t\tif (part[0] === 'tspan') {\n\t\t\t\t\t\tvar child = this._makeNode(node, part[0], part[2]);\n\t\t\t\t\t\tchild.appendChild(node.ownerDocument.createTextNode(part[1]));\n\t\t\t\t\t\tnode.appendChild(child);\n\t\t\t\t\t} else if (part[0] === 'tref') {\n\t\t\t\t\t\tvar child = this._makeNode(node, part[0], part[2]);\n\t\t\t\t\t\tchild.setAttributeNS($.svg.xlinkNS, 'href', part[1]);\n\t\t\t\t\t\tnode.appendChild(child);\n\t\t\t\t\t} else if (part[0] === 'textpath') {\n\t\t\t\t\t\tvar set = $.extend({}, part[2]);\n\t\t\t\t\t\tset.href = null;\n\t\t\t\t\t\tvar child = this._makeNode(node, part[0], set);\n\t\t\t\t\t\tchild.setAttributeNS($.svg.xlinkNS, 'href', part[2].href);\n\t\t\t\t\t\tchild.appendChild(node.ownerDocument.createTextNode(part[1]));\n\t\t\t\t\t\tnode.appendChild(child);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// straight text\n\t\t\t\t\t\tnode.appendChild(node.ownerDocument.createTextNode(part[1]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn node;\n\t\t},\n\n\t\t/** Add a custom SVG element.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param name {string} The name of the element.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new custom node. */\n\t\tother: function other(parent, name, settings) {\n\t\t\tvar args = this._args(arguments, ['name']);\n\t\t\treturn this._makeNode(args.parent, args.name, args.settings || {});\n\t\t},\n\n\t\t/** Create a SVG node with the given settings.\r\n  \t@private\r\n  \t@param parent {SVGElement|jQuery} The parent node for the new node, or SVG root if <code>null</code>.\r\n  \t@param name {string} The name of the element.\r\n  \t@param [settings] {object} Additional settings for this node.\r\n  \t@return {SVGElement} The new node. */\n\t\t_makeNode: function _makeNode(parent, name, settings) {\n\t\t\tparent = parent || this._svg;\n\t\t\tvar node = this._svg.ownerDocument.createElementNS($.svg.svgNS, name);\n\t\t\tfor (var name in settings) {\n\t\t\t\tvar value = settings[name];\n\t\t\t\tif (value != null && (typeof value !== 'string' || value !== '')) {\n\t\t\t\t\tnode.setAttribute($.svg._attrNames[name] || name, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tparent.appendChild(node);\n\t\t\treturn node;\n\t\t},\n\n\t\t/** Add an existing SVG node to the document.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param node {SVGElement|string|jQuery} The new node to add or\r\n  \t\t\tthe jQuery selector for the node or the set of nodes to add.\r\n  \t@return {SVGWrapper} This wrapper. */\n\t\tadd: function add(parent, node) {\n\t\t\tvar args = this._args(arguments.length === 1 ? [null, parent] : arguments, ['node']);\n\t\t\tvar svg = this;\n\t\t\targs.parent = args.parent || this._svg;\n\t\t\targs.node = args.node.jquery ? args.node : $(args.node);\n\t\t\ttry {\n\t\t\t\targs.parent.appendChild(args.node.cloneNode(true));\n\t\t\t} catch (e) {\n\t\t\t\targs.node.each(function () {\n\t\t\t\t\tvar child = svg._cloneAsSVG(this);\n\t\t\t\t\tif (child) {\n\t\t\t\t\t\targs.parent.appendChild(child);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Clone an existing SVG node and add it to the document.\r\n  \t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n  \t@param node {SVGEelement|string|jQuery} The new node to add or\r\n  \t\t\tthe jQuery selector for the node or the set of nodes to clone.\r\n  \t@return {SVGElement[]} The collection of new nodes. */\n\t\tclone: function clone(parent, node) {\n\t\t\tvar svg = this;\n\t\t\tvar args = this._args(arguments.length === 1 ? [null, parent] : arguments, ['node']);\n\t\t\targs.parent = args.parent || this._svg;\n\t\t\targs.node = args.node.jquery ? args.node : $(args.node);\n\t\t\tvar newNodes = [];\n\t\t\targs.node.each(function () {\n\t\t\t\tvar child = svg._cloneAsSVG(this);\n\t\t\t\tif (child) {\n\t\t\t\t\tchild.id = '';\n\t\t\t\t\targs.parent.appendChild(child);\n\t\t\t\t\tnewNodes.push(child);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn newNodes;\n\t\t},\n\n\t\t/** SVG nodes must belong to the SVG namespace, so clone and ensure this is so.\r\n  \t@private\r\n  \t@param node {SVGElement} The SVG node to clone.\r\n  \t@return {SVGElement} The cloned node. */\n\t\t_cloneAsSVG: function _cloneAsSVG(node) {\n\t\t\tvar newNode = null;\n\t\t\tif (node.nodeType === 1) {\n\t\t\t\t// element\n\t\t\t\tnewNode = this._svg.ownerDocument.createElementNS($.svg.svgNS, this._checkName(node.nodeName));\n\t\t\t\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\t\t\t\tvar attr = node.attributes.item(i);\n\t\t\t\t\tif (attr.nodeName !== 'xmlns' && attr.nodeValue) {\n\t\t\t\t\t\tif (attr.prefix === 'xlink') {\n\t\t\t\t\t\t\tnewNode.setAttributeNS($.svg.xlinkNS, attr.localName || attr.baseName, attr.nodeValue);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewNode.setAttribute(this._checkName(attr.nodeName), attr.nodeValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var i = 0; i < node.childNodes.length; i++) {\n\t\t\t\t\tvar child = this._cloneAsSVG(node.childNodes[i]);\n\t\t\t\t\tif (child) {\n\t\t\t\t\t\tnewNode.appendChild(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (node.nodeType === 3) {\n\t\t\t\t// text\n\t\t\t\tif ($.trim(node.nodeValue)) {\n\t\t\t\t\tnewNode = this._svg.ownerDocument.createTextNode(node.nodeValue);\n\t\t\t\t}\n\t\t\t} else if (node.nodeType === 4) {\n\t\t\t\t// CDATA\n\t\t\t\tif ($.trim(node.nodeValue)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tnewNode = this._svg.ownerDocument.createCDATASection(node.nodeValue);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tnewNode = this._svg.ownerDocument.createTextNode(node.nodeValue.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;'));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn newNode;\n\t\t},\n\n\t\t/** Node names must be lower case and without SVG namespace prefix.\r\n  \t@private\r\n  \t@param name {string} The name to check.\r\n  \t@return {string} The corrected name. */\n\t\t_checkName: function _checkName(name) {\n\t\t\tname = name.substring(0, 1) >= 'A' && name.substring(0, 1) <= 'Z' ? name.toLowerCase() : name;\n\t\t\treturn name.substring(0, 4) === 'svg:' ? name.substring(4) : name;\n\t\t},\n\n\t\t/** Load an external SVG document.\r\n  \t@param url {string} The location of the SVG document or\r\n  \t\t\tthe actual SVG content (starting with '<code>&lt;svg</code>'.\r\n  \t@param settings {boolean|function|object} Either <code>addTo</code> below or <code>onLoad</code> below or\r\n  \t\t\tadditional settings for the load with attributes below:\r\n  \t\t\t<code>addTo</code> {boolean} <code>true</code> to add to what's already there,\r\n  \t\t\tor <code>false</code> to clear the canvas first,\r\n  \t\t\t<code>changeSize</code> {boolean} <code>true</code> to allow the canvas size to change,\r\n  \t\t\tor <code>false</code> to retain the original,\r\n  \t\t\t<code>onLoad</code> {function} callback after the document has loaded,\r\n  \t\t\t'<code>this</code>' is the container, receives SVG object and optional error message as a parameter,\r\n  \t\t\t<code>parent</code> {string|SVGElement|jQuery} the parent to load into,\r\n  \t\t\tdefaults to top-level svg element.\r\n  \t@return {SVGWrapper} This wrapper. */\n\t\tload: function load(url, settings) {\n\t\t\tsettings = typeof settings === 'boolean' ? { addTo: settings } : typeof settings === 'function' ? { onLoad: settings } : typeof settings === 'string' ? { parent: settings } : (typeof settings === 'undefined' ? 'undefined' : _typeof(settings)) === 'object' && settings.nodeName ? { parent: settings } : (typeof settings === 'undefined' ? 'undefined' : _typeof(settings)) === 'object' && settings.jquery ? { parent: settings } : settings || {};\n\t\t\tif (!settings.parent && !settings.addTo) {\n\t\t\t\tthis.clear(false);\n\t\t\t}\n\t\t\tvar size = [this._svg.getAttribute('width'), this._svg.getAttribute('height')];\n\t\t\tvar wrapper = this;\n\t\t\t// Report a problem with the load\n\t\t\tvar reportError = function reportError(message) {\n\t\t\t\tmessage = $.svg.local.errorLoadingText + ': ' + message;\n\t\t\t\tif (settings.onLoad) {\n\t\t\t\t\tsettings.onLoad.apply(wrapper._container || wrapper._svg, [wrapper, message]);\n\t\t\t\t} else {\n\t\t\t\t\twrapper.text(null, 10, 20, message);\n\t\t\t\t}\n\t\t\t};\n\t\t\t// Create a DOM from SVG content\n\t\t\tvar loadXML4IE = function loadXML4IE(data) {\n\t\t\t\tvar xml = new ActiveXObject('Microsoft.XMLDOM');\n\t\t\t\txml.validateOnParse = false;\n\t\t\t\txml.resolveExternals = false;\n\t\t\t\txml.async = false;\n\t\t\t\txml.loadXML(data);\n\t\t\t\tif (xml.parseError.errorCode !== 0) {\n\t\t\t\t\treportError(xml.parseError.reason);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn xml;\n\t\t\t};\n\t\t\t// Load the SVG DOM\n\t\t\tvar loadSVG = function loadSVG(data) {\n\t\t\t\tif (!data) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (data.documentElement.nodeName !== 'svg') {\n\t\t\t\t\tvar errors = data.getElementsByTagName('parsererror');\n\t\t\t\t\tvar messages = errors.length ? errors[0].getElementsByTagName('div') : []; // Safari\n\t\t\t\t\treportError(!errors.length ? '???' : (messages.length ? messages[0] : errors[0]).firstChild.nodeValue);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar parent = settings.parent ? $(settings.parent)[0] : wrapper._svg;\n\t\t\t\tvar attrs = {};\n\t\t\t\tfor (var i = 0; i < data.documentElement.attributes.length; i++) {\n\t\t\t\t\tvar attr = data.documentElement.attributes.item(i);\n\t\t\t\t\tif (!(attr.nodeName === 'version' || attr.nodeName.substring(0, 5) === 'xmlns')) {\n\t\t\t\t\t\tattrs[attr.nodeName] = attr.nodeValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twrapper.configure(parent, attrs, !settings.parent);\n\t\t\t\tvar nodes = data.documentElement.childNodes;\n\t\t\t\tfor (var i = 0; i < nodes.length; i++) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tparent.appendChild(wrapper._svg.ownerDocument.importNode(nodes[i], true));\n\t\t\t\t\t\tif (nodes[i].nodeName === 'script') {\n\t\t\t\t\t\t\t$.globalEval(nodes[i].textContent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\twrapper.add(parent, nodes[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!settings.keepRelativeLinks && url.match('/')) {\n\t\t\t\t\tvar base = url.replace(/\\/[^\\/]*$/, '/');\n\t\t\t\t\t$('*', parent).each(function () {\n\t\t\t\t\t\tvar href = $(this).attr('xlink:href');\n\t\t\t\t\t\tif (href && !href.match(/(^[a-z][-a-z0-9+.]*:.*$)|(^\\/.*$)|(^#.*$)/i)) {\n\t\t\t\t\t\t\t$(this).attr('xlink:href', base + href);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (!settings.changeSize) {\n\t\t\t\t\twrapper.configure(parent, { width: size[0], height: size[1] });\n\t\t\t\t}\n\t\t\t\tif (settings.onLoad) {\n\t\t\t\t\tsettings.onLoad.apply(wrapper._container || wrapper._svg, [wrapper]);\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (url.match('<svg')) {\n\t\t\t\t// Inline SVG\n\t\t\t\ttry {\n\t\t\t\t\tloadSVG(new DOMParser().parseFromString(url, 'text/xml'));\n\t\t\t\t} catch (e) {\n\t\t\t\t\treportError(e);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Remote SVG\n\t\t\t\t$.ajax({ url: url, dataType: 'xml',\n\t\t\t\t\tsuccess: function success(xml) {\n\t\t\t\t\t\tloadSVG(xml);\n\t\t\t\t\t}, error: function error(http, message, exc) {\n\t\t\t\t\t\treportError(message + (exc ? ' ' + exc.message : ''));\n\t\t\t\t\t} });\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Delete a specified node.\r\n  \t@param node {SVGElement|jQuery} The drawing node to remove.\r\n  \t@return {SVGWrapper} This wrapper. */\n\t\tremove: function remove(node) {\n\t\t\tnode = node.jquery ? node[0] : node;\n\t\t\tnode.parentNode.removeChild(node);\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Delete everything in the current document.\r\n  \t@param [attrsToo=false] {boolean} <code>true</code> to clear any root attributes as well,\r\n  \t\t\t<code>false</code> to leave them.\r\n  \t@return {SVGWrapper} This wrapper. */\n\t\tclear: function clear(attrsToo) {\n\t\t\tif (attrsToo) {\n\t\t\t\tthis.configure({}, true);\n\t\t\t}\n\t\t\twhile (this._svg.firstChild) {\n\t\t\t\tthis._svg.removeChild(this._svg.firstChild);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Serialise the current diagram into an SVG text document.\r\n  \t@param [node] {SVGElement} The starting node, or SVG root if not specified .\r\n  \t@return {string} The SVG as text. */\n\t\ttoSVG: function toSVG(node) {\n\t\t\tnode = node || this._svg;\n\t\t\treturn typeof XMLSerializer === 'undefined' ? this._toSVG(node) : new XMLSerializer().serializeToString(node);\n\t\t},\n\n\t\t/** Serialise one node in the SVG hierarchy.\r\n  \t@private\r\n  \t@param node {SVGElement} The current node to serialise.\r\n  \t@return {string} The serialised SVG. */\n\t\t_toSVG: function _toSVG(node) {\n\t\t\tvar svgDoc = '';\n\t\t\tif (!node) {\n\t\t\t\treturn svgDoc;\n\t\t\t}\n\t\t\tif (node.nodeType === 3) {\n\t\t\t\t// Text\n\t\t\t\tsvgDoc = node.nodeValue;\n\t\t\t} else if (node.nodeType === 4) {\n\t\t\t\t// CDATA\n\t\t\t\tsvgDoc = '<![CDATA[' + node.nodeValue + ']]>';\n\t\t\t} else {\n\t\t\t\t// Element\n\t\t\t\tsvgDoc = '<' + node.nodeName;\n\t\t\t\tif (node.attributes) {\n\t\t\t\t\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\t\t\t\t\tvar attr = node.attributes.item(i);\n\t\t\t\t\t\tif (!($.trim(attr.nodeValue) === '' || attr.nodeValue.match(/^\\[object/) || attr.nodeValue.match(/^function/))) {\n\t\t\t\t\t\t\tsvgDoc += ' ' + (attr.namespaceURI === $.svg.xlinkNS ? 'xlink:' : '') + attr.nodeName + '=\"' + attr.nodeValue + '\"';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.firstChild) {\n\t\t\t\t\tsvgDoc += '>';\n\t\t\t\t\tvar child = node.firstChild;\n\t\t\t\t\twhile (child) {\n\t\t\t\t\t\tsvgDoc += this._toSVG(child);\n\t\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t\tsvgDoc += '</' + node.nodeName + '>';\n\t\t\t\t} else {\n\t\t\t\t\tsvgDoc += '/>';\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn svgDoc;\n\t\t}\n\t});\n\n\t/** Helper to generate an SVG path.\r\n \t<p>Obtain an instance from the SVGWrapper object.</p>\r\n \t<p>String calls together to generate the path and use its value:</p>\r\n \t@module SVGPath\r\n \t@example var path = root.createPath();\r\n    root.path(null, path.move(100, 100).line(300, 100).line(200, 300).close(), {fill: 'red'});\r\n  // or\r\n    root.path(null, path.move(100, 100).line([[300, 100], [200, 300]]).close(), {fill: 'red'}); */\n\tfunction SVGPath() {\n\t\tthis._path = '';\n\t}\n\n\t$.extend(SVGPath.prototype, {\n\t\t/** Prepare to create a new path.\r\n  \t@return {SVGPath} This path. */\n\t\treset: function reset() {\n\t\t\tthis._path = '';\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Move the pointer to a position.\r\n  \t@param x {number|number[][]} x-coordinate to move to or x-/y-coordinates to move to.\r\n  \t@param [y] {number} y-coordinate to move to (omitted if <code>x</code> is array).\r\n  \t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n  \t\t\t<code>false</code> for coordinates being absolute.\r\n  \t@return {SVGPath} This path. */\n\t\tmove: function move(x, y, relative) {\n\t\t\trelative = $.isArray(x) ? y : relative;\n\t\t\treturn this._coords(relative ? 'm' : 'M', x, y);\n\t\t},\n\n\t\t/** Draw a line to a position.\r\n  \t@param x {number|number[][]} x-coordinate to move to or x-/y-coordinates to move to.\r\n  \t@param [y] {number} y-coordinate to move to (omitted if <code>x</code> is array).\r\n  \t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n  \t\t\t<code>false</code> for coordinates being absolute.\r\n  \t@return {SVGPath} This path. */\n\t\tline: function line(x, y, relative) {\n\t\t\trelative = $.isArray(x) ? y : relative;\n\t\t\treturn this._coords(relative ? 'l' : 'L', x, y);\n\t\t},\n\n\t\t/** Draw a horizontal line to a position.\r\n  \t@param x {number|number[]} x-coordinate to draw to or x-coordinates to draw to.\r\n  \t@param relative {boolean} <code>true</code> for coordinates relative to the current point,\r\n  \t\t\t<code>false</code> for coordinates being absolute.\r\n  \t@return {SVGPath} This path. */\n\t\thoriz: function horiz(x, relative) {\n\t\t\tthis._path += (relative ? 'h' : 'H') + ($.isArray(x) ? x.join(' ') : x);\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Draw a vertical line to a position.\r\n  \t@param y {number|number[]} y-coordinate to draw to or y-coordinates to draw to.\r\n  \t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n  \t\t\t<code>false</code> for coordinates being absolute.\r\n  \t@return {SVGPath} This path. */\n\t\tvert: function vert(y, relative) {\n\t\t\tthis._path += (relative ? 'v' : 'V') + ($.isArray(y) ? y.join(' ') : y);\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Draw a cubic Bézier curve.\r\n  \t@param x1 {number|number[][]} x-coordinate of beginning control point or\r\n  \t\t\tx-/y-coordinates of control and end points to draw to.\r\n  \t@param [y1] {number} y-coordinate of beginning control point (omitted if <code>x1</code> is array).\r\n  \t@param [x2] {number} x-coordinate of ending control point (omitted if <code>x1</code> is array).\r\n  \t@param [y2] {number} y-coordinate of ending control point (omitted if <code>x1</code> is array).\r\n  \t@param [x] {number} x-coordinate of curve end (omitted if <code>x1</code> is array).\r\n  \t@param [y] {number} y-coordinate of curve end (omitted if <code>x1</code> is array).\r\n  \t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n  \t\t\t<code>false</code> for coordinates being absolute.\r\n  \t@return {SVGPath} This path. */\n\t\tcurveC: function curveC(x1, y1, x2, y2, x, y, relative) {\n\t\t\trelative = $.isArray(x1) ? y1 : relative;\n\t\t\treturn this._coords(relative ? 'c' : 'C', x1, y1, x2, y2, x, y);\n\t\t},\n\n\t\t/** Continue a cubic Bézier curve.\r\n  \t<p>Starting control point is the reflection of the previous end control point.</p>\r\n  \t@param x2 {number|number[][]} x-coordinate of ending control point or\r\n  \t\t\tx-/y-coordinates of control and end points to draw to.\r\n  \t@param [y2] {number} y-coordinate of ending control point (omitted if <code>x2</code> is array).\r\n  \t@param [x] {number} x-coordinate of curve end (omitted if <code>x2</code> is array).\r\n  \t@param [y] {number} y-coordinate of curve end (omitted if <code>x2</code> is array).\r\n  \t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n  \t\t\t<code>false</code> for coordinates being absolute.\r\n  \t@return {SVGPath} This path. */\n\t\tsmoothC: function smoothC(x2, y2, x, y, relative) {\n\t\t\trelative = $.isArray(x2) ? y2 : relative;\n\t\t\treturn this._coords(relative ? 's' : 'S', x2, y2, x, y);\n\t\t},\n\n\t\t/** Draw a quadratic Bézier curve.\r\n  \t@param x1 {number|number[][]} x-coordinate of control point or\r\n  \t\t\tx-/y-coordinates of control and end points to draw to.\r\n  \t@param [y1] {number} y-coordinate of control point (omitted if <code>x1</code> is array).\r\n  \t@param [x] {number} x-coordinate of curve end (omitted if <code>x1</code> is array).\r\n  \t@param [y] {number} y-coordinate of curve end (omitted if <code>x1</code> is array).\r\n  \t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n  \t\t\t<code>false</code> for coordinates being absolute.\r\n  \t@return {SVGPath} This path. */\n\t\tcurveQ: function curveQ(x1, y1, x, y, relative) {\n\t\t\trelative = $.isArray(x1) ? y1 : relative;\n\t\t\treturn this._coords(relative ? 'q' : 'Q', x1, y1, x, y);\n\t\t},\n\n\t\t/** Continue a quadratic Bézier curve.\r\n  \t<p>Control point is the reflection of the previous control point.</p>\r\n  \t@param x {number|number[][]} x-coordinate of curve end or x-/y-coordinates of points to draw to.\r\n  \t@param [y] {number} y-coordinate of curve end (omitted if <code>x</code> is array).\r\n  \t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n  \t\t\t<code>false</code> for coordinates being absolute.\r\n  \t@return {SVGPath} This path. */\n\t\tsmoothQ: function smoothQ(x, y, relative) {\n\t\t\trelative = $.isArray(x) ? y : relative;\n\t\t\treturn this._coords(relative ? 't' : 'T', x, y);\n\t\t},\n\n\t\t/** Generate a path command with (a list of) coordinates.\r\n  \t@private\r\n  \t@param cmd {string} The command for the path element.\r\n  \t@param x1 {number} The first x-coordinate.\r\n  \t@param y1 {number} The first y-coordinate.\r\n  \t@param [x2] {number} The second x-coordinate.\r\n  \t@param [y2] {number} The second y-coordinate.\r\n  \t@param [x3] {number} The third x-coordinate.\r\n  \t@param [y3] {number} The third y-coordinate.\r\n  \t@return {SVGPath} This path. */\n\t\t_coords: function _coords(cmd, x1, y1, x2, y2, x3, y3) {\n\t\t\tif ($.isArray(x1)) {\n\t\t\t\tfor (var i = 0; i < x1.length; i++) {\n\t\t\t\t\tvar cs = x1[i];\n\t\t\t\t\tthis._path += (i === 0 ? cmd : ' ') + cs[0] + ',' + cs[1] + (cs.length < 4 ? '' : ' ' + cs[2] + ',' + cs[3] + (cs.length < 6 ? '' : ' ' + cs[4] + ',' + cs[5]));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._path += cmd + x1 + ',' + y1 + (x2 == null ? '' : ' ' + x2 + ',' + y2 + (x3 == null ? '' : ' ' + x3 + ',' + y3));\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Draw an arc to a position.\r\n  \t@param rx {number|any[][]} x-radius of arc or x-/y-coordinates and flags for points to draw to.\r\n  \t@param [ry] {number} y-radius of arc (omitted if <code>rx</code> is array).\r\n  \t@param [xRotate] {number} x-axis rotation (degrees, clockwise) (omitted if <code>rx</code> is array).\r\n  \t@param [large] {boolean} <code>true</code> to draw the large part of the arc,\r\n  \t\t\t<code>false</code> to draw the small part (omitted if <code>rx</code> is array).\r\n  \t@param [clockwise] {boolean} <code>true</code> to draw the clockwise arc,\r\n  \t\t\t<code>false</code> to draw the anti-clockwise arc (omitted if <code>rx</code> is array).\r\n  \t@param [x] {number} x-coordinate of arc end (omitted if <code>rx</code> is array).\r\n  \t@param [y] {number} y-coordinate of arc end (omitted if <code>rx</code> is array).\r\n  \t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n  \t\t\t<code>false</code> for coordinates being absolute.\r\n  \t@return {SVGPath} This path. */\n\t\tarc: function arc(rx, ry, xRotate, large, clockwise, x, y, relative) {\n\t\t\trelative = $.isArray(rx) ? ry : relative;\n\t\t\tthis._path += relative ? 'a' : 'A';\n\t\t\tif ($.isArray(rx)) {\n\t\t\t\tfor (var i = 0; i < rx.length; i++) {\n\t\t\t\t\tvar cs = rx[i];\n\t\t\t\t\tthis._path += (i === 0 ? '' : ' ') + cs[0] + ',' + cs[1] + ' ' + cs[2] + ' ' + (cs[3] ? '1' : '0') + ',' + (cs[4] ? '1' : '0') + ' ' + cs[5] + ',' + cs[6];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._path += rx + ',' + ry + ' ' + xRotate + ' ' + (large ? '1' : '0') + ',' + (clockwise ? '1' : '0') + ' ' + x + ',' + y;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Close the current path.\r\n  \t@return {SVGPath} This path. */\n\t\tclose: function close() {\n\t\t\tthis._path += 'z';\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Return the string rendering of the specified path.\r\n  \t@return {string} The stringified path. */\n\t\tpath: function path() {\n\t\t\treturn this._path;\n\t\t}\n\t});\n\n\tSVGPath.prototype.moveTo = SVGPath.prototype.move;\n\tSVGPath.prototype.lineTo = SVGPath.prototype.line;\n\tSVGPath.prototype.horizTo = SVGPath.prototype.horiz;\n\tSVGPath.prototype.vertTo = SVGPath.prototype.vert;\n\tSVGPath.prototype.curveCTo = SVGPath.prototype.curveC;\n\tSVGPath.prototype.smoothCTo = SVGPath.prototype.smoothC;\n\tSVGPath.prototype.curveQTo = SVGPath.prototype.curveQ;\n\tSVGPath.prototype.smoothQTo = SVGPath.prototype.smoothQ;\n\tSVGPath.prototype.arcTo = SVGPath.prototype.arc;\n\n\t/** Helper to generate an SVG text object.\r\n \t<p>Obtain an instance from the SVGWrapper object.</p>\r\n \t<p>String calls together to generate the text and use its value:</p>\r\n \t@module SVGText\r\n \t@example var text = root.createText();\r\n    root.text(null, x, y, text.string('This is ').\r\n      span('red', {fill: 'red'}).string('!'), {fill: 'blue'}); */\n\tfunction SVGText() {\n\t\tthis._parts = []; // The components of the text object\n\t}\n\n\t$.extend(SVGText.prototype, {\n\t\t/** Prepare to create a new text object.\r\n  \t@return {SVGText} This text object. */\n\t\treset: function reset() {\n\t\t\tthis._parts = [];\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Add a straight string value.\r\n  \t@param value {string} The actual text.\r\n  \t@return {SVGText} This text object. */\n\t\tstring: function string(value) {\n\t\t\tthis._parts.push(['text', value]);\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Add a separate text span that has its own settings.\r\n  \t@param value {string} The actual text.\r\n  \t@param settings {object} The settings for this text.\r\n  \t@return {SVGText} This text object. */\n\t\tspan: function span(value, settings) {\n\t\t\tthis._parts.push(['tspan', value, settings]);\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Add a reference to a previously defined text string.\r\n  \t@param id {string} The ID of the actual text.\r\n  \t@param settings {object} The settings for this text.\r\n  \t@return {SVGText} This text object. */\n\t\tref: function ref(id, settings) {\n\t\t\tthis._parts.push(['tref', id, settings]);\n\t\t\treturn this;\n\t\t},\n\n\t\t/** Add text drawn along a path.\r\n  \t@param id {string} The ID of the path.\r\n  \t@param value {string} The actual text.\r\n  \t@param settings {object} The settings for this text.\r\n  \t@return {SVGText} This text object. */\n\t\tpath: function path(id, value, settings) {\n\t\t\tthis._parts.push(['textpath', value, $.extend({ href: id }, settings || {})]);\n\t\t\treturn this;\n\t\t}\n\t});\n\n\t/** Attach the SVG functionality to a jQuery selection.\r\n \t@param [command] {string} The command to run.\r\n \t@param [options] {object} The new settings to use for these SVG instances.\r\n \t@return {jQuery} For chaining further calls. */\n\t$.fn.svg = function (options) {\n\t\tvar otherArgs = Array.prototype.slice.call(arguments, 1);\n\t\tif (typeof options === 'string' && options === 'get') {\n\t\t\treturn $.svg['_' + options + 'SVG'].apply($.svg, [this[0]].concat(otherArgs));\n\t\t}\n\t\treturn this.each(function () {\n\t\t\tif (typeof options === 'string') {\n\t\t\t\t$.svg['_' + options + 'SVG'].apply($.svg, [this].concat(otherArgs));\n\t\t\t} else {\n\t\t\t\t$.svg._attachSVG(this, options || {});\n\t\t\t}\n\t\t});\n\t};\n\n\t// Singleton primary SVG interface\n\t$.svg = new SVGManager();\n})(jQuery);\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*\n * jquery.closestchild 0.1.1\n *\n * Author: Andrey Mikhaylov aka lolmaus\n * Email: lolmaus@gmail.com\n *\n */\n\n/* eslint-disable */\n\n;(function ($) {\n  $.fn.closestChild = function (selector) {\n    var $children, $results;\n\n    $children = this.children();\n\n    if ($children.length === 0) return $();\n\n    $results = $children.filter(selector);\n\n    if ($results.length > 0) return $results;else return $children.closestChild(selector);\n  };\n})(window.jQuery);\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n// Setup\n\n/* eslint-disable wrap-iife */\n/* eslint-disable complexity */\n/* eslint-disable max-statements */\n\n/* global jQuery */\n\n(function ($) {\n\n\tfunction setup() {\n\t\tvar config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\n\t\t// Create return object\n\t\tvar object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'ready',\n\t\t\t\tbrowserClass: '_browser',\n\t\t\t\tdeviceClass: '_device'\n\t\t\t},\n\t\t\tbrowser: null,\n\t\t\tdevice: null\n\t\t};\n\n\t\t// Overwrite default config\n\t\t_extends(object.config, config);\n\n\t\t// Init\n\t\tobject.init = function () {\n\n\t\t\t// Initialize everything on the correct event\n\t\t\t$(document).on(object.config.initEvent, function () {\n\n\t\t\t\t// Sniff and set browser classes\n\t\t\t\tobject.sniffBrowsers();\n\n\t\t\t\t// Trigger setupfinish event\n\t\t\t\t$(window).trigger('setupfinish');\n\t\t\t});\n\t\t};\n\n\t\t// Sniff browsers and add their classes to the body\n\t\tobject.sniffBrowsers = function () {\n\n\t\t\t// Get the user agent\n\t\t\tvar userAgent = window.navigator.userAgent;\n\n\t\t\t// If the user agent contains these browser strings, add their browser class to the body and set the browser variable\n\n\t\t\t// Lynx\n\t\t\tif (userAgent.indexOf('Lynx') !== -1) {\n\t\t\t\t$('body').addClass(object.config.browserClass + '--lynx');\n\t\t\t\tobject.browser = 'lynx';\n\t\t\t}\n\n\t\t\t// Edge\n\t\t\telse if (userAgent.indexOf('Edge') !== -1) {\n\t\t\t\t\t$('body').addClass(object.config.browserClass + '--edge');\n\t\t\t\t\tobject.browser = 'edge';\n\t\t\t\t}\n\n\t\t\t\t// Chrome\n\t\t\t\telse if (userAgent.toLowerCase().indexOf('chrome') !== -1) {\n\t\t\t\t\t\t$('body').addClass(object.config.browserClass + '--chrome');\n\t\t\t\t\t\tobject.browser = 'chrome';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Safari\n\t\t\t\t\telse if (userAgent.toLowerCase().indexOf('safari') !== -1) {\n\t\t\t\t\t\t\t$('body').addClass(object.config.browserClass + '--safari');\n\t\t\t\t\t\t\tobject.browser = 'safari';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// IE\n\t\t\t\t\t\telse if (userAgent.indexOf('MSIE') !== -1 || userAgent.indexOf('Trident') !== -1) {\n\t\t\t\t\t\t\t\t$('body').addClass(object.config.browserClass + '--ie');\n\t\t\t\t\t\t\t\tobject.browser = 'ie';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Gecko\n\t\t\t\t\t\t\telse if (userAgent.indexOf('Gecko') !== -1) {\n\t\t\t\t\t\t\t\t\t$('body').addClass(object.config.browserClass + '--gecko');\n\t\t\t\t\t\t\t\t\tobject.browser = 'gecko';\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Opera\n\t\t\t\t\t\t\t\telse if (userAgent.indexOf('Opera') !== -1) {\n\t\t\t\t\t\t\t\t\t\t$('body').addClass(object.config.browserClass + '--opera');\n\t\t\t\t\t\t\t\t\t\tobject.browser = 'opera';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Netscape (what?)\n\t\t\t\t\t\t\t\t\telse if (userAgent.indexOf('Nav') !== -1 && userAgent.indexOf('Mozilla/4.') !== -1) {\n\t\t\t\t\t\t\t\t\t\t\t$('body').addClass(object.config.browserClass + '--ns4');\n\t\t\t\t\t\t\t\t\t\t\tobject.browser = 'ns4';\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Unknown\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t$('body').addClass(object.config.browserClass + '--unknown');\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t// If the browser is Safari and there is a 'mobile' string in the UA\n\t\t\tif (object.browser === 'safari' && userAgent.toLowerCase().indexOf('mobile') !== -1) {\n\t\t\t\t$('body').addClass(object.config.deviceClass + '--ios');\n\t\t\t\tobject.device = 'ios';\n\t\t\t}\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the setup\n\tfunction summonSetup() {\n\t\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\treturn Object.create(setup(args));\n\t}\n\n\t// Instantiate and initialize a new setup object\n\tvar theSetup = summonSetup();\n\ttheSetup.init();\n})(jQuery);\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n// Launcher\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n\n/* global jQuery */\n\n(function ($) {\n\n\tfunction launcher() {\n\t\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\n\t\t// Return object\n\t\tvar object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'load',\n\t\t\t\tlauncherClass: 'js-launcher',\n\t\t\t\tparentToDelegateEvents: $('.site-main')\n\t\t\t},\n\t\t\tlaunchers: []\n\t\t};\n\n\t\t// Overwrite default config\n\t\t_extends(object.config, args);\n\n\t\t// Init\n\t\tobject.init = function () {\n\n\t\t\t// Query up launchers based on selector\n\t\t\tobject.launchers = $('.' + object.config.launcherClass);\n\n\t\t\t// If there are launchers on the page, initialize\n\t\t\tif (object.launchers.length) {\n\n\t\t\t\t// Initialize everything on the correct event\n\t\t\t\t$(window).on(object.config.initEvent, function () {\n\n\t\t\t\t\t// Wire up events\n\t\t\t\t\tobject.events();\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t// Events\n\t\tobject.events = function () {\n\n\t\t\t// Hovering over one\n\t\t\tobject.config.parentToDelegateEvents.on('hover', '.' + object.config.launcherClass + '__interaction', object.handleHover);\n\t\t};\n\n\t\t// Hovering into or out\n\t\tobject.handleHover = function (event) {\n\n\t\t\t// Get the target and its interaction target\n\t\t\tvar target = $(event.currentTarget);\n\t\t\tvar interactionTarget = $(target.data('launcher-interaction-target'));\n\n\t\t\t// iI the interaction target doesn't exist, return\n\t\t\tif (!interactionTarget.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Otherwise, add/remove the interaction class\n\t\t\tinteractionTarget[event.type === 'mouseenter' ? 'addClass' : 'removeClass']('is-launcher-interacted');\n\t\t\treturn true;\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the launcher\n\tfunction summonLauncher() {\n\t\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\treturn Object.create(launcher(args));\n\t}\n\n\t// Instantiate and initialize new launcher\n\tvar theLauncher = summonLauncher();\n\ttheLauncher.init();\n})(jQuery);\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n(function ($) {\n\n    $('.acf-icon.-minus.small.acf-js-tooltip').on('mouseEnter', function () {\n        $(this).attr('title', 'Remove row');\n    });\n})(jQuery);\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; // Slider\n\n/* eslint-disable no-nested-ternary */\n/* eslint-disable no-invalid-this */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-params */\n/* eslint-disable function-name-case */\n\n/* global jQuery */\n\nvar _helpers = __webpack_require__(2);\n\nvar _helpers2 = _interopRequireDefault(_helpers);\n\nvar _dynamicHeightGuy = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n\n\tfunction slider() {\n\t\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\n\t\t// Return object\n\t\tvar object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'load',\n\t\t\t\tsliderClass: 'js-slider',\n\t\t\t\tautomatedSliderInterval: 6000,\n\t\t\t\tparentToDelegateEvents: $('.site-main')\n\t\t\t},\n\t\t\tsliders: [],\n\t\t\tautomatedSliders: []\n\t\t};\n\n\t\t// Overwrite default config\n\t\t_extends(object.config, args);\n\n\t\t// Init\n\t\tobject.init = function () {\n\n\t\t\t// Query up sliders based on selector\n\t\t\tobject.sliders = $('.' + object.config.sliderClass);\n\n\t\t\t// Query up automated sliders based on selector\n\t\t\tobject.automatedSliders = $('.' + object.config.sliderClass + '--automated');\n\n\t\t\t// If there are sliders on the page, initialize\n\t\t\tif (object.sliders.length) {\n\n\t\t\t\t// Initialize everything on the correct event\n\t\t\t\t$(window).on(object.config.initEvent, function () {\n\n\t\t\t\t\t// Wire up events\n\t\t\t\t\tobject.events();\n\n\t\t\t\t\t// Remove loading states from slides\n\t\t\t\t\t_dynamicHeightGuy.theDynamicHeightGuy.removeLoadingState();\n\n\t\t\t\t\t// Set active slides\n\t\t\t\t\tobject.sliders.each(function (index, sliderElement) {\n\n\t\t\t\t\t\t// Get the slider\n\t\t\t\t\t\tsliderElement = $(sliderElement);\n\n\t\t\t\t\t\t// Get the active slide\n\t\t\t\t\t\tvar activeSlide = sliderElement.data('slider-index');\n\n\t\t\t\t\t\t// Set it\n\t\t\t\t\t\tobject.changeSlide(null, sliderElement, null, activeSlide, true);\n\t\t\t\t\t});\n\n\t\t\t\t\t// Run automate sliders\n\t\t\t\t\twindow.setInterval(object.automateSliders, object.config.automatedSliderInterval);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t// Events\n\t\tobject.events = function () {\n\n\t\t\t// Get jQueryatized window\n\t\t\tvar jQueryWindow = $(window);\n\n\t\t\t// Control click listener (delegated from parent)\n\t\t\tobject.config.parentToDelegateEvents.on('click', '.' + object.config.sliderClass + '__control', function () {\n\t\t\t\tobject.changeSlide(this);\n\t\t\t\t$(this).closest('.' + object.config.sliderClass + '--automated').addClass('is-paused');\n\t\t\t});\n\n\t\t\t// Resize listener\n\t\t\tjQueryWindow.on('resize the-cloisters-on-the-platte-force-slider-resize', function () {\n\t\t\t\tobject.resizeSlider(object.sliders);\n\t\t\t});\n\n\t\t\t// Focusing into an automated slider pauses it\n\t\t\tobject.config.parentToDelegateEvents.on('focusin', '.' + object.config.sliderClass + '--automated', function () {\n\t\t\t\t$(this).addClass('is-paused');\n\t\t\t});\n\n\t\t\t// Clicking on an arrow advences the controls\n\t\t\tobject.config.parentToDelegateEvents.on('click', '.' + object.config.sliderClass + '__arrow', function () {\n\n\t\t\t\t// Gat stuff\n\t\t\t\tvar arrow = $(this);\n\t\t\t\tvar parentSlider = arrow.closest('.' + object.config.sliderClass);\n\t\t\t\tvar slideCount = parseInt(parentSlider.data('slider-slide-count'), 10);\n\t\t\t\tvar parentControls = arrow.closest('.' + object.config.sliderClass + '__controls');\n\t\t\t\tvar controlIndex = parseInt(parentControls.data('control-index'), 10);\n\t\t\t\tvar direction = arrow.data('control-direction');\n\n\t\t\t\t// Determine index\n\t\t\t\tvar nextIndex = direction === 'next' ? _helpers2.default.wrapAround(controlIndex + 1, 0, slideCount - 1) : _helpers2.default.wrapAround(controlIndex - 1, 0, slideCount - 1);\n\n\t\t\t\t// Scroll to it\n\t\t\t\tobject.scrollToControlIndex(parentSlider, nextIndex, slideCount);\n\t\t\t});\n\n\t\t\t$('.' + object.config.sliderClass).on('forceslidechange', function (event) {\n\t\t\t\tif ('nextIndex' in event) {\n\t\t\t\t\tobject.changeSlide(null, $(this), null, event.nextIndex);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// Change slider\n\t\tobject.changeSlide = function (control, sliderOverride, directionOverride) {\n\t\t\tvar indexOverride = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\t\t\tvar forceChange = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n\n\t\t\t// Jqueryatize the control\n\t\t\tcontrol = $(control);\n\n\t\t\t// Set vars\n\t\t\tvar direction = directionOverride || control.data('slider-direction');\n\t\t\tvar controlIndex = control.data('slider-target');\n\t\t\tvar parentSlider = '';\n\t\t\tvar nextIndex = '';\n\n\t\t\t// Determine parent slider\n\t\t\tparentSlider = sliderOverride ? sliderOverride : control.closest('.' + object.config.sliderClass);\n\n\t\t\t// Set index and slide count\n\t\t\tvar index = parseInt(parentSlider.data('slider-index'), 10);\n\t\t\tvar slideCount = parseInt(parentSlider.data('slider-slide-count'), 10);\n\n\t\t\t// Set next index\n\t\t\tnextIndex = indexOverride !== null ? indexOverride : direction ? direction === 'next' ? _helpers2.default.wrapAround(index + 1, 0, slideCount - 1) : _helpers2.default.wrapAround(index - 1, 0, slideCount - 1) : controlIndex;\n\n\t\t\t// If the current index and the next index are not the same and the window has focus, change the slide\n\t\t\tif (forceChange || index !== nextIndex && document.hasFocus()) {\n\n\t\t\t\t// Change slide\n\t\t\t\tobject.setActiveSlide(parentSlider, nextIndex);\n\n\t\t\t\t// If there is not a direction specified, set the active control\n\t\t\t\tobject.setActiveControl(parentSlider, nextIndex);\n\t\t\t}\n\t\t};\n\n\t\t// Get active slide\n\t\tobject.getActiveSlide = function (targetSlider) {\n\t\t\treturn targetSlider.closestChild('.' + object.config.sliderClass + '__slide.is-active');\n\t\t};\n\n\t\t// Get active control\n\t\tobject.getActiveControl = function (targetSlider) {\n\t\t\treturn targetSlider.closestChild('.' + object.config.sliderClass + '__control.is-active');\n\t\t};\n\n\t\t// Set active slide\n\t\tobject.setActiveSlide = function (targetSlider, newIndex) {\n\n\t\t\t// Get slides\n\t\t\tvar slides = targetSlider.closestChild('.' + object.config.sliderClass + '__slide');\n\n\t\t\t// Get slides inner\n\t\t\tvar slidesInner = targetSlider.closestChild('.' + object.config.sliderClass + '__slides-inner');\n\n\t\t\t// If the slider has popovers, animate the 'left' prop\n\t\t\tif (targetSlider.hasClass('has-popovers')) {\n\t\t\t\tslidesInner.css('left', '-' + newIndex * 100 + '%');\n\t\t\t}\n\n\t\t\t// Otherwise, use transforms\n\t\t\telse {\n\t\t\t\t\tslidesInner.css('transform', 'translate(-' + newIndex * 100 + '%, 0)');\n\t\t\t\t}\n\n\t\t\t// Remove active class from active slide, add recently active class\n\t\t\tvar currentSlide = object.getActiveSlide(targetSlider);\n\t\t\tcurrentSlide.removeClass('is-active');\n\n\t\t\t// Get new slide\n\t\t\tvar newSlide = slides.eq(newIndex);\n\n\t\t\t// Add active class\n\t\t\tnewSlide.addClass('is-active');\n\n\t\t\t// Set height of slider\n\t\t\tobject.resizeSlider(targetSlider, true);\n\n\t\t\t// Change index data attribute\n\t\t\ttargetSlider.data('slider-index', newIndex);\n\t\t};\n\n\t\t// Set active control\n\t\tobject.setActiveControl = function (targetSlider, newIndex) {\n\n\t\t\t// Get controls\n\t\t\tvar controls = targetSlider.closestChild('.' + object.config.sliderClass + '__control');\n\n\t\t\t// Remove active class from active control, add recently active class\n\t\t\tvar currentControl = object.getActiveControl(targetSlider);\n\t\t\tcontrols.not(currentControl).removeClass('was-just-active');\n\t\t\tcurrentControl.removeClass('is-active');\n\t\t\tcurrentControl.addClass('was-just-active');\n\n\t\t\t// Add active class to new control\n\t\t\tvar newControl = controls.eq(newIndex);\n\t\t\tnewControl.addClass('is-active');\n\t\t};\n\n\t\t// Resize sliders\n\t\tobject.resizeSlider = function (targetSliders) {\n\t\t\tvar includeParents = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\n\t\t\t// Loop through target sliders\n\t\t\tfor (var i = 0; i < targetSliders.length; i++) {\n\n\t\t\t\t// Get target slider\n\t\t\t\tvar targetSlider = $(targetSliders[i]);\n\n\t\t\t\t_dynamicHeightGuy.theDynamicHeightGuy.setHeight(targetSlider.closestChild('.' + object.config.sliderClass + '__slides'), object.getActiveSlide(targetSlider).find('.' + object.config.sliderClass + '__slides-inner'), includeParents);\n\n\t\t\t\t// Scroll the active container\n\t\t\t\tif (targetSlider.hasClass(object.config.sliderClass + '--button')) {\n\t\t\t\t\tobject.scrollToControlIndex(targetSlider, targetSlider.find('.' + object.config.sliderClass + '__controls').data('control-index'), targetSlider.data('slider-slide-count'));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Automate slider\n\t\tobject.automateSliders = function () {\n\n\t\t\t// Loop through automated sliders\n\t\t\tfor (var i = 0; i < object.automatedSliders.length; i++) {\n\n\t\t\t\t// Ref slider\n\t\t\t\tvar targetSlider = $(object.automatedSliders[i]);\n\n\t\t\t\tif (!targetSlider.hasClass('is-paused')) {\n\t\t\t\t\tobject.changeSlide(null, targetSlider, 'next');\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Scroll to control index\n\t\tobject.scrollToControlIndex = function (targetSlider, nextIndex, slideCount) {\n\n\t\t\t// Ref slider\n\t\t\ttargetSlider = $(targetSlider);\n\n\t\t\tvar controlsInner = targetSlider.closestChild('.' + object.config.sliderClass + '__controls-inner');\n\t\t\tvar controlsHousing = targetSlider.closestChild('.' + object.config.sliderClass + '__controls-housing');\n\t\t\tvar controls = controlsHousing.find('.' + object.config.sliderClass + '__control');\n\n\t\t\tvar targetControl = controls.eq(nextIndex);\n\t\t\tvar targetControlPosition = targetControl.position();\n\n\t\t\tvar maxScroll = controlsHousing.width() - controlsInner.width();\n\n\t\t\tvar scrollTo = targetControlPosition.left;\n\n\t\t\t// If the scrollTo is more than the max, make the index 0\n\t\t\tif (scrollTo > maxScroll) {\n\t\t\t\tnextIndex = slideCount - 1;\n\t\t\t\tscrollTo = maxScroll;\n\t\t\t}\n\n\t\t\t// Scroll to the control and change the current control index\n\t\t\tcontrolsHousing.css({\n\t\t\t\ttransform: 'translate(-' + Math.min(scrollTo, maxScroll) + 'px, 0)' /* stylelint-disable-line */ // eslint-disable-line\n\t\t\t});\n\t\t\ttargetSlider.find('.' + object.config.sliderClass + '__controls').data('control-index', nextIndex);\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the slider\n\tfunction summonSlider() {\n\t\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\treturn Object.create(slider(args));\n\t}\n\n\t// Instantiate and initialize new slider\n\tvar theSlider = summonSlider();\n\ttheSlider.init();\n})(jQuery);\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n// Dynamic Height Guy\n\n/* global jQuery */\n\nfunction dynamicHeightGuy() {\n\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\n\t// Return object\n\tvar object = {\n\t\tconfig: {\n\t\t\tdynamicHeightGuyClass: 'js-dynamic-height-guy',\n\t\t\tanimationDuration: 625\n\t\t}\n\t};\n\n\t// Overwrite default config\n\t_extends(object.config, args);\n\n\t// Remove loading state\n\tobject.removeLoadingState = function (guys) {\n\t\tjQuery(window).trigger('dynamicheightguyload');\n\t};\n\n\t// Set height\n\tobject.setHeight = function (targetDynamicHeightGuys) {\n\t\tvar innersOverride = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\t\tvar includeParents = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\t\tvar _loop = function _loop(i) {\n\n\t\t\t// Reference and jQueryatize the guy\n\t\t\tvar guy = jQuery(targetDynamicHeightGuys[i]);\n\n\t\t\t// Get the inners except for the excluded ones\n\t\t\tvar inners = innersOverride.length ? innersOverride : guy.closestChild('.' + object.config.dynamicHeightGuyClass + '__inner');\n\n\t\t\t// Get largest height of all inners\n\t\t\tvar largestInnerHeight = Math.max.apply(null, inners.map(function (index) {\n\t\t\t\treturn jQuery(inners[index]).outerHeight();\n\t\t\t}));\n\n\t\t\t// Get difference in height of current guy vs largest inner\n\t\t\tvar heightDifference = largestInnerHeight - guy.outerHeight();\n\n\t\t\t// Get guys that are the parents of this one\n\t\t\tvar parentGuys = guy.parents('.' + object.config.dynamicHeightGuyClass);\n\n\t\t\t// Set the guy's height to the largest height of all inners\n\t\t\tguy.css('height', largestInnerHeight);\n\n\t\t\t// If parents are included, modify the height of all parent guys\n\t\t\tif (includeParents) {\n\n\t\t\t\t// Loop through the parent guys\n\t\t\t\tfor (var c = 0; c < parentGuys.length; c++) {\n\n\t\t\t\t\t// Reference and jQueryatize the parent guy\n\t\t\t\t\tvar parentGuy = jQuery(parentGuys[c]);\n\n\t\t\t\t\t// Change parent guy's height by the height difference\n\t\t\t\t\tparentGuy.css('height', parseInt(parentGuy.css('height'), 10) + heightDifference);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// After the guy is done animating, fire the resize event adn animate the\n\t\t\twindow.setTimeout(function () {\n\t\t\t\tjQuery(window).trigger('dynamicheightguyresize');\n\t\t\t}, object.config.animationDuration);\n\t\t};\n\n\t\t// Loop through each guy and resize\n\t\tfor (var i = 0; i < targetDynamicHeightGuys.length; i++) {\n\t\t\t_loop(i);\n\t\t}\n\t};\n\n\t// If there are no dynamic height guys on the page, trigger the dynamicheightguyload event\n\tjQuery(window).on('load', function () {\n\t\tif (!jQuery('.' + object.config.dynamicHeightGuyClass).length) {\n\t\t\tjQuery(window).trigger('dynamicheightguyload');\n\t\t}\n\t});\n\n\treturn object;\n}\n\n// Instantiate the Dynamic Height Guy\nfunction summonDynamicHeightGuy() {\n\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\treturn Object.create(dynamicHeightGuy(args));\n}\n\nvar theDynamicHeightGuy = exports.theDynamicHeightGuy = summonDynamicHeightGuy();\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Slider\n\n/* eslint-disable no-nested-ternary */\n/* eslint-disable no-invalid-this */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-params */\n/* eslint-disable function-name-case */\n\n/* global jQuery */\n\n(function ($) {\n\n    $('.c-slick-slider--practice-areas').slick({\n        dots: true,\n        prevArrow: false,\n        nextArrow: false,\n        autoplay: true,\n        autoplaySpeed: 10000,\n        speed: 500,\n        slidesToShow: 2,\n        slidesToScroll: 1,\n        cssEase: 'ease-in-out',\n        responsive: [{\n            breakpoint: 1023,\n            settings: {\n                slidesToShow: 2,\n                slidesToScroll: 1\n            }\n        }, {\n            breakpoint: 767,\n            settings: {\n                slidesToShow: 1,\n                slidesToScroll: 1\n            }\n        }]\n    });\n\n    $('.c-slick-slider--testimonial').slick({\n        dots: true,\n        prevArrow: false,\n        nextArrow: false,\n        autoplay: true,\n        autoplaySpeed: 10000,\n        speed: 500,\n        slidesToShow: 1,\n        slidesToScroll: 1,\n        cssEase: 'ease-in-out'\n    });\n})(jQuery);\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; // Scroll animations\n\n/* eslint-disable wrap-iife */\n\n/* global jQuery */\n\nvar _helpers = __webpack_require__(2);\n\nvar _helpers2 = _interopRequireDefault(_helpers);\n\nvar _throttleDebounce = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n\n\tfunction scrollAnimation() {\n\t\tvar config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\n\t\t// Create return object\n\t\tvar object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'load',\n\t\t\t\tscrollAnimationClass: 'js-animation--scroll',\n\t\t\t\tresolverClass: 'is-resolved',\n\t\t\t\tscrollListenerThrottle: 125,\n\t\t\t\tscreenBottomOffset: 30\n\t\t\t},\n\t\t\tisSafari: $('body').hasClass('_browser--safari'),\n\t\t\tanimatedElements: [],\n\t\t\twindowHeight: window.innerHeight\n\t\t};\n\n\t\t// Create object config\n\t\tobject.config = _extends(object.config, config);\n\n\t\t// Init\n\t\tobject.init = function () {\n\n\t\t\t// Query up animated elements based on selector\n\t\t\tobject.animatedElements = $('.' + object.config.scrollAnimationClass);\n\n\t\t\t// If there are any scroll animation elements on the page, initialize\n\t\t\tif (object.animatedElements.length) {\n\n\t\t\t\t// Initialize everything on the correct event\n\t\t\t\t$(window).one(object.config.initEvent, function () {\n\n\t\t\t\t\t// Set whether or not device is Safari\n\t\t\t\t\tobject.isSafari = $('body').hasClass('_browser--safari');\n\n\t\t\t\t\t// Initially set all element offsets\n\t\t\t\t\tobject.setElementOffsets();\n\n\t\t\t\t\t// Wire up animation events\n\t\t\t\t\tobject.events();\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t// Events\n\t\tobject.events = function () {\n\n\t\t\t// Get jQueryatized window\n\t\t\tvar jQueryWindow = $(window);\n\n\t\t\t// Scroll\n\t\t\tjQueryWindow.on('scroll.scrollAnimationScroll', (0, _throttleDebounce.throttle)(object.config.scrollListenerThrottle, function () {\n\n\t\t\t\t// Process scroll\n\t\t\t\tobject.processScroll();\n\n\t\t\t\t// If there are no animated elements left, remove the scroll event listener\n\t\t\t\tif (!object.animatedElements.length) {\n\t\t\t\t\tjQueryWindow.off('scroll.scrollAnimationScroll');\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\t// Resize\n\t\t\tjQueryWindow.on('resize.scrollAnimationResize dynamicheightguyresize', (0, _throttleDebounce.debounce)(object.config.scrollListenerThrottle, function () {\n\n\t\t\t\t// Reset offsets of elements\n\t\t\t\tobject.setElementOffsets();\n\n\t\t\t\t// Reset windowHeight\n\t\t\t\tobject.windowHeight = window.innerHeight;\n\n\t\t\t\t// Process as if scrolled\n\t\t\t\tobject.processScroll();\n\n\t\t\t\t// If there are no animated elements left, remove the resize event listener\n\t\t\t\tif (!object.animatedElements.length) {\n\t\t\t\t\tjQueryWindow.off('resize.scrollAnimationResize');\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\t// Process scroll first time\n\t\t\tobject.processScroll();\n\t\t};\n\n\t\t// Set offsets\n\t\tobject.setElementOffsets = function () {\n\n\t\t\t// Loop through animated elements and set offsets\n\t\t\tfor (var i = 0; i < object.animatedElements.length; i++) {\n\n\t\t\t\t// Reference element\n\t\t\t\tvar element = object.animatedElements[i];\n\n\t\t\t\t// Get jQueryatized element\n\t\t\t\tvar jQueryElement = $(element);\n\n\t\t\t\t// Set up offsets array\n\t\t\t\tif (!element.offsetForScroll) {\n\t\t\t\t\telement.offsetForScroll = {};\n\t\t\t\t}\n\n\t\t\t\t// Set offsets\n\t\t\t\telement.offsetForScroll.top = jQueryElement.offset().top;\n\t\t\t\telement.offsetForScroll.bottom = element.offsetForScroll.top + element.getBoundingClientRect().height;\n\t\t\t}\n\t\t};\n\n\t\t// Process the scrolls\n\t\tobject.processScroll = function () {\n\n\t\t\t// Get scrollTop and scrollBottom\n\t\t\tvar scrollTop = window.pageYOffset;\n\t\t\tvar scrollBottom = scrollTop + object.windowHeight;\n\n\t\t\t// Loop through animated elements and resolve them\n\n\t\t\tvar _loop = function _loop(i) {\n\n\t\t\t\t// Get element\n\t\t\t\tvar element = object.animatedElements[i];\n\n\t\t\t\t// Resolve animation on element\n\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\tobject.resolveAnimation(element, scrollTop, scrollBottom);\n\t\t\t\t}, 0);\n\t\t\t};\n\n\t\t\tfor (var i = 0; i < object.animatedElements.length; i++) {\n\t\t\t\t_loop(i);\n\t\t\t}\n\t\t};\n\n\t\t// Resolve animations\n\t\tobject.resolveAnimation = function (element, scrollTop, scrollBottom) {\n\n\t\t\t// If the element is in the viewport, resolve the animation\n\t\t\tif (_helpers2.default.isInViewport(element.offsetForScroll.top, element.offsetForScroll.bottom, scrollTop, scrollBottom, object.config.screenBottomOffset)) {\n\n\t\t\t\t// jQueryatize element\n\t\t\t\tvar jQueryElement = $(element);\n\n\t\t\t\t// If element is an SVG, add the class manually\n\t\t\t\tif (jQueryElement.is('svg, line, circle, path')) {\n\n\t\t\t\t\t// Get current class\n\t\t\t\t\tvar currentClass = jQueryElement.attr('class');\n\n\t\t\t\t\t// Add the class\n\t\t\t\t\tjQueryElement.attr('class', currentClass + ' ' + object.config.resolverClass);\n\t\t\t\t}\n\n\t\t\t\t// Otherwise, just add resolver class\n\t\t\t\telse {\n\t\t\t\t\t\tjQueryElement.addClass(object.config.resolverClass);\n\t\t\t\t\t}\n\n\t\t\t\t// If the browser is Safari or whatever else makes it suck, make it not suck\n\t\t\t\tobject.makeSafariNotSuck(jQueryElement);\n\n\t\t\t\t// Remove element from animated element array\n\t\t\t\tobject.animatedElements = object.animatedElements.not(element);\n\t\t\t}\n\t\t};\n\n\t\t// Force animation to work on Safari\n\t\tobject.makeSafariNotSuck = function (jQueryElement) {\n\n\t\t\t// Get the animation name property\n\t\t\tvar animationName = jQueryElement.css('animation-name');\n\n\t\t\t// Determine what to change the animation name to temporarily\n\t\t\tvar tempAnimationName = object.isSafari ? 'none' : '';\n\n\t\t\t// Reset that animation name\n\t\t\tjQueryElement.css('animation-name', tempAnimationName);\n\n\t\t\t// Immediately bring it back\n\t\t\twindow.setTimeout(function () {\n\t\t\t\tjQueryElement.css('animation-name', animationName);\n\t\t\t}, 0);\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the scroll animations\n\tfunction summonScrollAnimation() {\n\t\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\treturn Object.create(scrollAnimation(args));\n\t}\n\n\t// Instantiate and initialize a new scrollAnimations object\n\tvar theScrollAnimation = summonScrollAnimation();\n\ttheScrollAnimation.init();\n})(jQuery);\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; // Scroll Shadow Guy\n\n/* eslint-disable no-invalid-this */\n\n/* global jQuery */\n\n\nvar _throttleDebounce = __webpack_require__(0);\n\n(function ($) {\n\n\tfunction scrollShadowGuy() {\n\t\tvar config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\n\t\t// Return object\n\t\tvar object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'load',\n\t\t\t\tscrollShadowGuyClass: 'js-scroll-shadow-guy',\n\t\t\t\tscrollListenerThrottle: 75\n\t\t\t},\n\t\t\tscrollShadowGuys: [],\n\t\t\tscrollShadowGuyContents: []\n\t\t};\n\n\t\t// Overwrite default config\n\t\t_extends(object.config, config);\n\n\t\t// Init\n\t\tobject.init = function () {\n\n\t\t\t// Query up scroll shadow guys based on selector\n\t\t\tobject.scrollShadowGuys = $('.' + object.config.scrollShadowGuyClass);\n\n\t\t\t// If there are scroll shadow guys on the page, initialize\n\t\t\tif (object.scrollShadowGuys.length) {\n\n\t\t\t\t// Query up scroll shadow guy contents based on selector\n\t\t\t\tobject.scrollShadowGuyContents = $('.' + object.config.scrollShadowGuyClass + '__content');\n\n\t\t\t\t// Go through and set element scroll widths\n\t\t\t\tobject.setElementScrollWidths();\n\n\t\t\t\t// Initialize everything on the correct event\n\t\t\t\t$(window).on(object.config.initEvent, object.events);\n\t\t\t}\n\t\t};\n\n\t\t// Events\n\t\tobject.events = function () {\n\n\t\t\t// Get jQueryatized window\n\t\t\tvar jQueryWindow = $(window);\n\n\t\t\t// Place shadow on init event\n\t\t\tobject.placeShadow(object.scrollShadowGuyContents);\n\n\t\t\t// Scroll listener on the content\n\t\t\tobject.scrollShadowGuys.closestChild('.' + object.config.scrollShadowGuyClass + '__content').on('scroll', (0, _throttleDebounce.throttle)(object.scrollListenerThrottle, function () {\n\t\t\t\tobject.placeShadow($(this));\n\t\t\t}));\n\n\t\t\t// Resize event listener\n\t\t\tjQueryWindow.on('resize.scrollShadowGuyResize', (0, _throttleDebounce.debounce)(object.config.scrollListenerThrottle, function () {\n\n\t\t\t\t// Reset element scroll widths\n\t\t\t\tobject.setElementScrollWidths();\n\n\t\t\t\t// Place shadow\n\t\t\t\tobject.placeShadow(object.scrollShadowGuyContents);\n\t\t\t}));\n\t\t};\n\n\t\t// Place the shadows\n\t\tobject.placeShadow = function (targetScrollShadowGuyContents) {\n\n\t\t\t// Loop through target scroll shadow guy contents\n\t\t\ttargetScrollShadowGuyContents.each(function (index, targetScrollShadowGuyContent) {\n\n\t\t\t\t// Get scroll difference\n\t\t\t\tvar scrollDifference = targetScrollShadowGuyContent.scrollWidthForScrollShadow - targetScrollShadowGuyContent.widthForScrollShadow;\n\n\t\t\t\t// jQueryatize target scroll shadow guy\n\t\t\t\ttargetScrollShadowGuyContent = $(targetScrollShadowGuyContent);\n\n\t\t\t\t// Get scroll left\n\t\t\t\tvar scrollLeft = targetScrollShadowGuyContent.scrollLeft();\n\n\t\t\t\t// Get parent scrollSliderGuy\n\t\t\t\tvar parentScrollShadowGuy = targetScrollShadowGuyContent.closest('.' + object.config.scrollShadowGuyClass);\n\n\t\t\t\t// If the scroll difference is zero, it does not need to be scrolled\n\t\t\t\tif (scrollDifference === 0) {\n\n\t\t\t\t\t// Remove other scroll state classes\n\t\t\t\t\tparentScrollShadowGuy.removeClass('is-not-scrolled');\n\t\t\t\t\tparentScrollShadowGuy.removeClass('is-partially-scrolled');\n\t\t\t\t\tparentScrollShadowGuy.removeClass('is-fully-scrolled');\n\t\t\t\t}\n\n\t\t\t\t// Otherwise, if the scroll left is 0, the guy isn't scrolled\n\t\t\t\telse if (scrollLeft === 0) {\n\n\t\t\t\t\t\t// Remove other scroll state classes\n\t\t\t\t\t\tparentScrollShadowGuy.removeClass('is-partially-scrolled');\n\t\t\t\t\t\tparentScrollShadowGuy.removeClass('is-fully-scrolled');\n\n\t\t\t\t\t\t// Add is not scrolled class\n\t\t\t\t\t\tparentScrollShadowGuy.addClass('is-not-scrolled');\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the scroll left is the same as the scroll difference, the guy is fully scrolled\n\t\t\t\t\telse if (scrollLeft === scrollDifference) {\n\n\t\t\t\t\t\t\t// Remove other scroll state classes\n\t\t\t\t\t\t\tparentScrollShadowGuy.removeClass('is-not-scrolled');\n\t\t\t\t\t\t\tparentScrollShadowGuy.removeClass('is-partially-scrolled');\n\n\t\t\t\t\t\t\t// Add is fully scrolled class\n\t\t\t\t\t\t\tparentScrollShadowGuy.addClass('is-fully-scrolled');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, the guy is partially scrolled\n\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\t\t// Remove other scroll state classes\n\t\t\t\t\t\t\t\tparentScrollShadowGuy.removeClass('is-not-scrolled');\n\t\t\t\t\t\t\t\tparentScrollShadowGuy.removeClass('is-fully-scrolled');\n\n\t\t\t\t\t\t\t\t// Add is fully scrolled class\n\t\t\t\t\t\t\t\tparentScrollShadowGuy.addClass('is-partially-scrolled');\n\t\t\t\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// Set element scroll widths\n\t\tobject.setElementScrollWidths = function () {\n\n\t\t\t// Loop through scrollShadowGuys and set scroll widths\n\t\t\tfor (var i = 0; i < object.scrollShadowGuyContents.length; i++) {\n\n\t\t\t\t// Reference element\n\t\t\t\tvar element = object.scrollShadowGuyContents[i];\n\n\t\t\t\t// jQueryatize element\n\t\t\t\tvar jQueryElement = $(element);\n\n\t\t\t\t// Set width\n\t\t\t\telement.widthForScrollShadow = jQueryElement.outerWidth();\n\n\t\t\t\t// Set scroll width\n\t\t\t\telement.scrollWidthForScrollShadow = element.scrollWidth;\n\t\t\t}\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the scroll shadow guy\n\tfunction summonScrollShadowGuy() {\n\t\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\treturn Object.create(scrollShadowGuy(args));\n\t}\n\n\t// Instantiate and initialize new scroll shadow guy\n\tvar theScrollShadowGuy = summonScrollShadowGuy();\n\ttheScrollShadowGuy.init();\n})(jQuery);\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n(function ($) {\n\n  $(document).ready(function () {\n\n    $('ul.tabs li').click(function () {\n      var tab_id = $(this).attr('data-tab');\n\n      $('ul.tabs li').removeClass('current');\n      $('.tab-content').removeClass('current');\n\n      $(this).addClass('current');\n      $(\"#\" + tab_id).addClass('current');\n    });\n\n    $('.left').click(function () {\n      move('left');\n    });\n    $('.right').click(function () {\n      move('right');\n    });\n    function move(to) {\n      var current = $('li.current').index();\n      var total = $('.tabs .tab-link').length;\n      var add;\n      switch (to) {\n        case 'left':\n          add = -1;\n          break;\n        case 'right':\n          add = 1;\n          break;\n      }\n      $('.tabs li.tab-link').eq((current + add) % total).click();\n    }\n  });\n})(jQuery);\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n// Embed guy\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n\n/* global jQuery */\n\n(function ($) {\n\n\tfunction embedGuy() {\n\t\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\n\t\t// Return object\n\t\tvar object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'load',\n\t\t\t\tembedGuyClass: 'js-embed-guy',\n\t\t\t\tparentToDelegateEvents: $('.site-main')\n\t\t\t},\n\t\t\tembedGuys: []\n\t\t};\n\n\t\t// Overwrite default config\n\t\t_extends(object.config, args);\n\n\t\t// Init\n\t\tobject.init = function () {\n\n\t\t\t// Query up embed guys based on selector\n\t\t\tobject.embedGuys = $('.' + object.config.embedGuyClass);\n\n\t\t\t// If there are embed guys on the page, initialize\n\t\t\tif (object.embedGuys.length) {\n\n\t\t\t\t// Initialize everything on the correct event\n\t\t\t\t$(window).on(object.config.initEvent, function () {\n\n\t\t\t\t\t// Get all of the embeds and make their defer source their actual source\n\t\t\t\t\tobject.embedGuys.find('.' + object.config.embedGuyClass + '__embed').each(function (index, embed) {\n\t\t\t\t\t\tembed = $(embed);\n\t\t\t\t\t\tembed.attr('src', embed.data('defer-src'));\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the embed guy\n\tfunction summonEmbedGuy() {\n\t\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\treturn Object.create(embedGuy(args));\n\t}\n\n\t// Instantiate and initialize new embed guy\n\tvar theEmbedGuy = summonEmbedGuy();\n\ttheEmbedGuy.init();\n})(jQuery);\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n(function ($) {\n\t$(function () {\n\n\t\t$.each($(\".c-hero .c-hero__controls > li\"), function (index, value) {\n\t\t\tvar menu = $(value).data('tab-menu');\n\t\t\tvar tabID = $(value).parent().parent().data('tab-id');\n\t\t\tvar hash = window.location.hash.split(\"#\").join('');\n\n\t\t\tif (hash.length > 0) {\n\n\t\t\t\tif (menu == hash) {\n\t\t\t\t\t$('.c-hero[data-tab-id=\"' + tabID + '\"] .c-hero__controls > li[data-tab-menu=\"' + menu + '\"]').addClass('active');\n\t\t\t\t\t$('.c-hero[data-tab-id=\"' + tabID + '\"] .c-hero__content > div[data-tab-content=\"' + menu + '\"]').addClass('view');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$('.c-hero[data-tab-id=\"' + tabID + '\"] .c-hero__controls > li:eq(0)').addClass('active');\n\t\t\t\t$('.c-hero[data-tab-id=\"' + tabID + '\"] .c-hero__content > div:eq(0)').addClass('view');\n\t\t\t}\n\t\t});\n\n\t\t$(\".c-hero .c-hero__controls > li\").click(function (event) {\n\t\t\tvar $this = $(this),\n\t\t\t    $data = $this.data('tab-menu'),\n\t\t\t    $tabID = $this.parent().parent().data('tab-id');\n\t\t\tif (!$(this).hasClass(\"active\")) {\n\n\t\t\t\twindow.location.hash = $data;\n\n\t\t\t\t$('.c-hero[data-tab-id=\"' + $tabID + '\"] .c-hero__controls > li').removeClass('active');\n\t\t\t\t$(this).addClass('active');\n\n\t\t\t\t$('.c-hero[data-tab-id=\"' + $tabID + '\"] .c-hero__content > div.view').removeClass('view');\n\t\t\t\t$('.c-hero[data-tab-id=\"' + $tabID + '\"] .c-hero__content > div[data-tab-content=\"' + $data + '\"]').addClass('view');\n\t\t\t}\n\t\t});\n\t});\n})(jQuery);\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Slider\n\n/* eslint-disable no-nested-ternary */\n/* eslint-disable no-invalid-this */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-params */\n/* eslint-disable function-name-case */\n\n/* global jQuery */\n\n(function ($) {\n\n\t$(document).ready(function () {\n\n\t\t$('.nf-field .ninja-forms-field').on({\n\t\t\tfocus: function focus() {\n\t\t\t\t$('.nf-field .nf-field-label label').addClass('is-focused');\n\t\t\t}\n\t\t});\n\t});\n})(jQuery);\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable wrap-iife */\n\n/* global jQuery */\n\n// Preloader\n\n(function ($) {\n\n       $(window).on('load', function () {\n              $(\"#site-preloader\").removeClass('is-active');\n       }, 3500);\n})(jQuery);\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n(function ($) {\n\n\t$(document).ready(function () {\n\n\t\tfunction toggleSidebar() {\n\t\t\t$('.c-burger-menu').toggleClass('is-active');\n\t\t\t$('.plate1').toggleClass('active');\n\t\t\t$('#primary-menu').toggleClass('is-active');\n\t\t\t$('#secondary-menu').toggleClass('is-active');\n\t\t\t$('.c-header__sub .c-footer__social').toggleClass('is-active');\n\t\t\t$('body').toggleClass('locked-by-menu');\n\t\t}\n\n\t\t$('.c-burger-menu').on('click tap', function () {\n\t\t\ttoggleSidebar();\n\t\t});\n\n\t\t$(document).keyup(function (e) {\n\t\t\tif (e.keyCode === 27) {\n\t\t\t\ttoggleSidebar();\n\t\t\t}\n\t\t});\n\t});\n})(jQuery);\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n(function ($) {\n\n\t$(window).on('scroll', function () {\n\n\t\t// Get header\n\t\tvar header = $('.c-header');\n\n\t\t// Add Header\n\t\tif (window.pageYOffset > 1) {\n\t\t\theader.addClass('is-scrolled');\n\t\t}\n\n\t\t// Remove Header\n\t\telse {\n\t\t\t\theader.removeClass('is-scrolled');\n\t\t\t}\n\t});\n})(jQuery);\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n(function ($) {\n\n  $('.c-tab').click(function () {\n    var tab_id = $(this).attr('data-tab');\n\n    $('.c-tab').removeClass('is-current');\n    $('.c-tab__content').removeClass('is-current');\n\n    $(this).addClass('is-current');\n    $(\"#\" + tab_id).addClass('is-current');\n  });\n})(jQuery);\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* ========================================================================= */\n/* http://www.jksakura.com/paralmax */\n/**\n * Paralmax is a JQuery responsive parallax plugin for multiple uses, including full size section background image, page parallax elements and more based on different use cases. With many built-in settings, users can set parallax speed, resize background image to full size or not, disable it below specific screen size, offset of the parallax element from it's center. The advantage of Paralmax is that it only adds parallax effet to elements, but not changes their style/looking, so users can easily customise/style any elements with pure HTML or CSS (position, size, image, background, content, etc).\n * @author Jake Zhong\n----------------------  \n-------------| |   / /\n     | |     | |  / /\n     | |     | | / /\n     | |     | |/ /\n     | |     | |\\ \\\n     | |     | | \\ \\\n     | |     | |  \\ \\\n-----  |     | |   \\ \\\n-----------------------\n**/\n/* ========================================================================= */\njQuery.fn.extend({ paralmax: function paralmax() {\n          var t;return $(window).width(), t = $(window).height(), $(this).each(function () {\n               function e() {\n                    s() ? $(i).data(\"speed\") || 0 === $(i).data(\"speed\") ? d.speed = $(i).data(\"speed\") : d.speed = .5 : d.speed = 0;\n               }function a() {\n                    var e,\n                        a,\n                        r = i;!0 === d.resizable && ($(window).width() > d.breakpoint ? (e = parseInt($(r).parent().outerHeight()), a = parseInt($(r).parent().offset().top) > parseInt(t) ? parseInt(t * d.speed) : parseInt($(r).parent().offset().top) * d.speed, $(r).height(e + a)) : $(r).height(e));\n               }function r() {\n                    var t = i,\n                        e = $(\"html\").scrollTop(),\n                        a = $(\"body\").scrollTop(),\n                        r = (e > a ? e : a) - d.start,\n                        n = parseInt(r * d.speed) + d.offset;$(t).css({ webkitTransform: \"translate3d(0, \" + n + \"px, 0)\", MozTransform: \"translate3d(0, \" + n + \"px, 0)\", msTransform: \"translateY(\" + n + \"px)\", OTransform: \"translate3d(0, \" + n + \"px, 0)\", transform: \"translate3d(0, \" + n + \"px, 0)\" });\n               }function n() {\n                    if (!s()) {\n                         var t = i;$(t).css({ webkitTransform: \"translate3d(0, 0, 0)\", MozTransform: \"translate3d(0, 0, 0)\", msTransform: \"translateY(0)\", OTransform: \"translate3d(0, 0, 0)\", transform: \"translate3d(0, 0, 0)\" });\n                    }\n               }function s() {\n                    return $(window).width() > d.breakpoint;\n               }var o,\n                   i = this,\n                   d = { start: (o = $(i).offset()).top, stop: o.top + $(i).outerHeight(), speed: 0, resizable: !!$(i).data(\"resize\") && $(i).data(\"resize\"), breakpoint: $(i).data(\"breakpoint\") ? $(i).data(\"breakpoint\") : 0, offset: $(i).data(\"offset\") ? $(i).data(\"offset\") * $(i).outerHeight() : 0 };e(), a(), n(), s() && r(), $(window).bind(\"scroll\", function () {\n                    s() && r();\n               }), $(window).bind(\"resize\", function () {\n                    e(), a(), n();\n               });\n          });\n     } });\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _simpleParallaxJs = __webpack_require__(1);\n\nvar _simpleParallaxJs2 = _interopRequireDefault(_simpleParallaxJs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n\n  var image = document.getElementsByClassName('js-parallax--scroll');\n  new _simpleParallaxJs2.default(image);\n})(jQuery); // Scroll animations\n\n/* eslint-disable wrap-iife */\n\n/* global jQuery */\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n(function ($) {\n\n  var items = document.querySelectorAll(\".accordion a\");\n\n  function toggleAccordion() {\n    this.classList.toggle('active');\n    this.nextElementSibling.classList.toggle('active');\n  }\n\n  items.forEach(function (item) {\n    return item.addEventListener('click', toggleAccordion);\n  });\n})(jQuery);\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n/* eslint-disable no-invalid-this */\n\n(function ($) {\n\n\t$(document).on('nfFormReady', function () {\n\t\tconsole.log('Form is ready');\n\n\t\t$(document).on('focus', '#nf-field-1-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-1-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-1-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-2-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-2-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-2-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-3-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-3-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-3-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-4-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-4-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-4-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-5-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-5-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-5-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-6-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-6-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-6-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-7-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-7-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-7-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-8-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-8-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-8-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-9-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-9-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-9-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-10-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-10-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-10-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-11-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-11-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-11-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});$(document).on('focus', '#nf-field-12-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-12-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-12-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-13-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-13-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-13-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-14-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-14-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-14-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('focus', '#nf-field-15-wrap', function () {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-15-wrap', function () {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-15-wrap', function () {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t} else {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n\t\t});\n\t});\n})(jQuery);\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n/* eslint-disable no-invalid-this */\n\n(function ($) {\n\n\t$('.c-card--practice-area').click(function () {\n\n\t\twindow.location = $(this).find('a').attr('href');\n\t\treturn false;\n\t});\n})(jQuery);\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Slider\n\n/* eslint-disable no-nested-ternary */\n/* eslint-disable no-invalid-this */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-params */\n/* eslint-disable function-name-case */\n\n/* global jQuery */\n\n(function ($) {\n\n    var $inputItem = $(\".js-inputWrapper\");\n    $inputItem.length && $inputItem.each(function () {\n        var $this = $(this),\n            $input = $this.find(\".formRow--input\"),\n            placeholderTxt = $input.attr(\"placeholder\"),\n            $placeholder;\n\n        $input.after('<span class=\"placeholder\">' + placeholderTxt + \"</span>\"), $input.attr(\"placeholder\", \"\"), $placeholder = $this.find(\".placeholder\"), $input.val().length ? $this.addClass(\"active\") : $this.removeClass(\"active\"), $input.on(\"focusout\", function () {\n            $input.val().length ? $this.addClass(\"active\") : $this.removeClass(\"active\");\n        }).on(\"focus\", function () {\n            $this.addClass(\"active\");\n        });\n    });\n})(jQuery);\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n/* eslint-disable no-invaid-this */\n\n(function ($) {\n\n\t$('.js--sliding-link').click(function (e) {\n\t\te.preventDefault();\n\t\tvar aid = $(this).attr('href');\n\t\t$('html,body').animate({ scrollTop: $(aid).offset().top }, 'slow');\n\t});\n})(jQuery);\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Slider\n\n/* eslint-disable no-nested-ternary */\n/* eslint-disable no-invalid-this */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-params */\n/* eslint-disable function-name-case */\n\n/* global jQuery */\n\n(function ($) {\n\n\t// $( '#contactform' ).on( 'submit', function(e) {\n\t//     var form_data = $( this ).serializeArray();\n\n\t//     // Here we add our nonce (The one we created on our functions.php. WordPress needs this code to verify if the request comes from a valid source.\n\t//     form_data.push( { \"name\" : \"security\", \"value\" : ajax_nonce } );\n\n\t//     // Here is the ajax petition.\n\t//     $.ajax({\n\t//         url : ajax_url, // Here goes our WordPress AJAX endpoint.\n\t//         type : 'post',\n\t//         data: form_data,\n\t//         success : function( response ) {\n\t//             // You can craft something here to handle the message return\n\t//             alert( response );\n\t//         },\n\t//         fail : function( err ) {\n\t//             // You can craft something here to handle an error if something goes wrong when doing the AJAX request.\n\t//             alert( \"There was an error: \" + err );\n\t//         }\n\t//     });\n\n\t//     // This return prevents the submit event to refresh the page.\n\t//     return false;\n\n\t// });\n\n\tvar submit = 0;\n\t$(document).ready(function () {\n\t\t$('body').bind('submit', '#contactform', function (e) {\n\t\t\tif (submit === 0) {\n\t\t\t\te.preventDefault();\n\t\t\t\tvar newCustomerForm = $('#contactform').serialize();\n\t\t\t\tif ($('#agree').is(':checked')) {\n\t\t\t\t\t$.ajax({\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\turl: '/wp-admin/admin-ajax.php',\n\t\t\t\t\t\tdata: newCustomerForm,\n\t\t\t\t\t\tsuccess: function success(data) {\n\t\t\t\t\t\t\tsubmit = 1;\n\t\t\t\t\t\t\t$('#action').remove();\n\t\t\t\t\t\t\t$('#contactform').submit();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\t// $('#contactform')\n\t});\n})(jQuery);\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n// import 'jquery-background-video';\n\nvar _throttleDebounce = __webpack_require__(34);\n\nvar _throttleDebounce2 = _interopRequireDefault(_throttleDebounce);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n\n\tfunction backgroundVideo() {\n\t\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\n\t\t// Return object\n\t\tvar object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'setupfinish',\n\t\t\t\tbackgroundVideoClassName: 'o-background-video',\n\t\t\t\tbackgroundVideoJsClassName: 'js-background-video',\n\t\t\t\tresizeListenerDebounce: 25\n\t\t\t},\n\t\t\tbackgroundVideos: []\n\t\t};\n\n\t\t// Overwrite default config\n\t\t_extends(object.config, args);\n\n\t\t// Init\n\t\tobject.init = function () {\n\n\t\t\t// Query up background videos\n\t\t\tobject.backgroundVideos = $('.' + object.config.backgroundVideoJsClassName);\n\n\t\t\t// Run init event\n\t\t\t$(window).on(object.config.initEvent, function () {\n\n\t\t\t\t// If there are background videos on teh page, initialize\n\t\t\t\tif (object.backgroundVideos.length) {\n\n\t\t\t\t\t// Wire up events\n\t\t\t\t\tobject.events();\n\n\t\t\t\t\t// Resize videos initially\n\t\t\t\t\tobject.resizeVideos();\n\t\t\t\t}\n\n\t\t\t\t// Trigger background video finish event\n\t\t\t\t$(window).trigger('backgroundvideofinish');\n\t\t\t});\n\t\t};\n\n\t\t// Wire up events\n\t\tobject.events = function () {\n\n\t\t\t// Resize\n\t\t\t$(window).on('resize.backgroundVideoResize focus.backgroundVideoResize', $.debounce(object.resizeListenerDebounce, object.resizeVideos));\n\t\t\tobject.backgroundVideos.find('video').on('resize', object.resizeVideos);\n\t\t};\n\n\t\t// Resize the videos\n\t\tobject.resizeVideos = function () {\n\n\t\t\t// Loop through background videos\n\t\t\tfor (var i = 0; i < object.backgroundVideos.length; i++) {\n\n\t\t\t\t// Reference container\n\t\t\t\tvar container = $(object.backgroundVideos[i]);\n\n\t\t\t\t// Get video\n\t\t\t\tvar video = container.find('.' + object.config.backgroundVideoJsClassName + '__video').get(0);\n\n\t\t\t\t// Get bounding client rect of container\n\t\t\t\tvar containerRect = container.get(0).getBoundingClientRect();\n\n\t\t\t\t// Get aspect ratio of container\n\t\t\t\tvar containerAspectRatio = containerRect.height / containerRect.width;\n\n\t\t\t\t// If aspect ratio of the video\n\t\t\t\tvar videoAspectRatio = video.videoHeight / video.videoWidth;\n\n\t\t\t\t// If the aspect ratio of the container is less than or equal to the aspect ratio of the video, set the container class\n\t\t\t\tif (containerAspectRatio <= videoAspectRatio) {\n\t\t\t\t\tcontainer.addClass(object.config.backgroundVideoClassName + '--landscape');\n\t\t\t\t}\n\n\t\t\t\t// Otherwise, remove it\n\t\t\t\telse {\n\t\t\t\t\t\tcontainer.removeClass(object.config.backgroundVideoClassName + '--landscape');\n\t\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the background videos\n\tfunction summonBackgroundVideo() {\n\t\tvar args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t\treturn Object.create(backgroundVideo(args));\n\t}\n\n\t// Instantiate and initialize a new backgroundVideo object\n\tvar theBackgroundVideo = summonBackgroundVideo();\n\ttheBackgroundVideo.init();\n})(jQuery);\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param  {Number}    delay          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}   [noTrailing]   Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n *                                    throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n *                                    after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n *                                    the internal counter is reset)\n * @param  {Function}  callback       A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                    to `callback` when the throttled-function is executed.\n * @param  {Boolean}   [debounceMode] If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n *                                    schedule `callback` to execute after `delay` ms.\n *\n * @return {Function}  A new, throttled, function.\n */\nfunction throttle(delay, noTrailing, callback, debounceMode) {\n\n\t/*\n  * After wrapper has stopped being called, this timeout ensures that\n  * `callback` is executed at the proper times in `throttle` and `end`\n  * debounce modes.\n  */\n\tvar timeoutID;\n\n\t// Keep track of the last time `callback` was executed.\n\tvar lastExec = 0;\n\n\t// `noTrailing` defaults to falsy.\n\tif (typeof noTrailing !== 'boolean') {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t/*\n  * The `wrapper` function encapsulates all of the throttling / debouncing\n  * functionality and when executed will limit the rate at which `callback`\n  * is executed.\n  */\n\tfunction wrapper() {\n\n\t\tvar self = this;\n\t\tvar elapsed = Number(new Date()) - lastExec;\n\t\tvar args = arguments;\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec() {\n\t\t\tlastExec = Number(new Date());\n\t\t\tcallback.apply(self, args);\n\t\t}\n\n\t\t/*\n   * If `debounceMode` is true (at begin) this is used to clear the flag\n   * to allow future `callback` executions.\n   */\n\t\tfunction clear() {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif (debounceMode && !timeoutID) {\n\t\t\t/*\n    * Since `wrapper` is being called for the first time and\n    * `debounceMode` is true (at begin), execute `callback`.\n    */\n\t\t\texec();\n\t\t}\n\n\t\t// Clear any existing timeout.\n\t\tif (timeoutID) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\n\t\tif (debounceMode === undefined && elapsed > delay) {\n\t\t\t/*\n    * In throttle mode, if `delay` time has been exceeded, execute\n    * `callback`.\n    */\n\t\t\texec();\n\t\t} else if (noTrailing !== true) {\n\t\t\t/*\n    * In trailing throttle mode, since `delay` time has not been\n    * exceeded, schedule `callback` to execute `delay` ms after most\n    * recent execution.\n    *\n    * If `debounceMode` is true (at begin), schedule `clear` to execute\n    * after `delay` ms.\n    *\n    * If `debounceMode` is false (at end), schedule `callback` to\n    * execute after `delay` ms.\n    */\n\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n\t\t}\n\t}\n\n\t// Return the wrapper function.\n\treturn wrapper;\n}\n\n/* eslint-disable no-undefined */\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param  {Number}   delay         A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}  [atBegin]     Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n *                                  after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n *                                  (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param  {Function} callback      A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                  to `callback` when the debounced-function is executed.\n *\n * @return {Function} A new, debounced function.\n */\nfunction debounce(delay, atBegin, callback) {\n\treturn callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n}\n\nexports.throttle = throttle;\nexports.debounce = debounce;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// assets/js/main.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap e74be848559b16a57e2e","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param  {Number}    delay          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}   [noTrailing]   Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n *                                    throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n *                                    after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n *                                    the internal counter is reset)\n * @param  {Function}  callback       A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                    to `callback` when the throttled-function is executed.\n * @param  {Boolean}   [debounceMode] If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n *                                    schedule `callback` to execute after `delay` ms.\n *\n * @return {Function}  A new, throttled, function.\n */\nfunction throttle (delay, noTrailing, callback, debounceMode) {\n  /*\n   * After wrapper has stopped being called, this timeout ensures that\n   * `callback` is executed at the proper times in `throttle` and `end`\n   * debounce modes.\n   */\n  var timeoutID;\n  var cancelled = false; // Keep track of the last time `callback` was executed.\n\n  var lastExec = 0; // Function to clear existing timeout\n\n  function clearExistingTimeout() {\n    if (timeoutID) {\n      clearTimeout(timeoutID);\n    }\n  } // Function to cancel next exec\n\n\n  function cancel() {\n    clearExistingTimeout();\n    cancelled = true;\n  } // `noTrailing` defaults to falsy.\n\n\n  if (typeof noTrailing !== 'boolean') {\n    debounceMode = callback;\n    callback = noTrailing;\n    noTrailing = undefined;\n  }\n  /*\n   * The `wrapper` function encapsulates all of the throttling / debouncing\n   * functionality and when executed will limit the rate at which `callback`\n   * is executed.\n   */\n\n\n  function wrapper() {\n    var self = this;\n    var elapsed = Date.now() - lastExec;\n    var args = arguments;\n\n    if (cancelled) {\n      return;\n    } // Execute `callback` and update the `lastExec` timestamp.\n\n\n    function exec() {\n      lastExec = Date.now();\n      callback.apply(self, args);\n    }\n    /*\n     * If `debounceMode` is true (at begin) this is used to clear the flag\n     * to allow future `callback` executions.\n     */\n\n\n    function clear() {\n      timeoutID = undefined;\n    }\n\n    if (debounceMode && !timeoutID) {\n      /*\n       * Since `wrapper` is being called for the first time and\n       * `debounceMode` is true (at begin), execute `callback`.\n       */\n      exec();\n    }\n\n    clearExistingTimeout();\n\n    if (debounceMode === undefined && elapsed > delay) {\n      /*\n       * In throttle mode, if `delay` time has been exceeded, execute\n       * `callback`.\n       */\n      exec();\n    } else if (noTrailing !== true) {\n      /*\n       * In trailing throttle mode, since `delay` time has not been\n       * exceeded, schedule `callback` to execute `delay` ms after most\n       * recent execution.\n       *\n       * If `debounceMode` is true (at begin), schedule `clear` to execute\n       * after `delay` ms.\n       *\n       * If `debounceMode` is false (at end), schedule `callback` to\n       * execute after `delay` ms.\n       */\n      timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n    }\n  }\n\n  wrapper.cancel = cancel; // Return the wrapper function.\n\n  return wrapper;\n}\n\n/* eslint-disable no-undefined */\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param  {Number}   delay         A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}  [atBegin]     Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n *                                  after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n *                                  (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param  {Function} callback      A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                  to `callback` when the debounced-function is executed.\n *\n * @return {Function} A new, debounced function.\n */\n\nfunction debounce (delay, atBegin, callback) {\n  return callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n}\n\nexport { throttle, debounce };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/throttle-debounce/dist/index.esm.js\n// module id = 0\n// module chunks = 0 1","/*!\n * simpleParallax.min - simpleParallax is a simple JavaScript library that gives your website parallax animations on any images, \n * @date: 07-12-2019 18:53:52, \n * @version: 5.2.0,\n * @link: https://simpleparallax.com/\n */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(\"simpleParallax\",[],e):\"object\"==typeof exports?exports.simpleParallax=e():t.simpleParallax=e()}(window,function(){return(n={},s.m=i=[function(t,e,i){\"use strict\";function n(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}i.r(e);var s=new(function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.positions={top:0,bottom:0,height:0}}return function(t,e,i){e&&n(t.prototype,e),i&&n(t,i)}(t,[{key:\"setViewportTop\",value:function(t){return this.positions.top=t?t.scrollTop:window.pageYOffset,this.positions}},{key:\"setViewportBottom\",value:function(){return this.positions.bottom=this.positions.top+this.positions.height,this.positions}},{key:\"setViewportAll\",value:function(t){return this.positions.top=t?t.scrollTop:window.pageYOffset,this.positions.height=t?t.clientHeight:document.documentElement.clientHeight,this.positions.bottom=this.positions.top+this.positions.height,this.positions}}]),t}()),o=function(t){return NodeList.prototype.isPrototypeOf(t)||HTMLCollection.prototype.isPrototypeOf(t)?Array.from(t):\"string\"==typeof t||t instanceof String?document.querySelectorAll(t):[t]},r=function(){for(var t,e=\"transform webkitTransform mozTransform oTransform msTransform\".split(\" \"),i=0;void 0===t;)t=void 0!==document.createElement(\"div\").style[e[i]]?e[i]:void 0,i+=1;return t}(),a=function(t){return!!t&&(!!t.complete&&(void 0===t.naturalWidth||0!==t.naturalWidth))};function l(t){return function(t){if(Array.isArray(t)){for(var e=0,i=new Array(t.length);e<t.length;e++)i[e]=t[e];return i}}(t)||function(t){if(Symbol.iterator in Object(t)||\"[object Arguments]\"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}()}function u(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}var h=function(){function i(t,e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,i),this.element=t,this.elementContainer=t,this.settings=e,this.isVisible=!0,this.isInit=!1,this.oldTranslateValue=-1,this.init=this.init.bind(this),a(t)?this.init():this.element.addEventListener(\"load\",this.init)}return function(t,e,i){e&&u(t.prototype,e),i&&u(t,i)}(i,[{key:\"init\",value:function(){var t=this;this.isInit||this.element.closest(\".simpleParallax\")||(!1===this.settings.overflow&&this.wrapElement(this.element),this.setTransformCSS(),this.getElementOffset(),this.intersectionObserver(),this.getTranslateValue(),this.animate(),0<this.settings.delay&&setTimeout(function(){t.setTransitionCSS()},10),this.isInit=!0)}},{key:\"wrapElement\",value:function(){var t=this.element.closest(\"picture\")||this.element,e=document.createElement(\"div\");e.classList.add(\"simpleParallax\"),e.style.overflow=\"hidden\",t.parentNode.insertBefore(e,t),e.appendChild(t),this.elementContainer=e}},{key:\"unWrapElement\",value:function(){var t=this.elementContainer;t.replaceWith.apply(t,l(t.childNodes))}},{key:\"setTransformCSS\",value:function(){!1===this.settings.overflow&&(this.element.style[r]=\"scale(\".concat(this.settings.scale,\")\")),this.element.style.willChange=\"transform\"}},{key:\"setTransitionCSS\",value:function(){this.element.style.transition=\"transform \".concat(this.settings.delay,\"s \").concat(this.settings.transition)}},{key:\"unSetStyle\",value:function(){this.element.style.willChange=\"\",this.element.style[r]=\"\",this.element.style.transition=\"\"}},{key:\"getElementOffset\",value:function(){var t=this.elementContainer.getBoundingClientRect();if(this.elementHeight=t.height,this.elementTop=t.top+s.positions.top,this.settings.customContainer){var e=this.settings.customContainer.getBoundingClientRect();this.elementTop=t.top-e.top+s.positions.top}this.elementBottom=this.elementHeight+this.elementTop}},{key:\"buildThresholdList\",value:function(){for(var t=[],e=1;e<=this.elementHeight;e++){var i=e/this.elementHeight;t.push(i)}return t}},{key:\"intersectionObserver\",value:function(){var t={root:null,threshold:this.buildThresholdList()};this.observer=new IntersectionObserver(this.intersectionObserverCallback.bind(this),t),this.observer.observe(this.element)}},{key:\"intersectionObserverCallback\",value:function(t){for(var e=t.length-1;0<=e;e--)t[e].isIntersecting?this.isVisible=!0:this.isVisible=!1}},{key:\"checkIfVisible\",value:function(){return this.elementBottom>s.positions.top&&this.elementTop<s.positions.bottom}},{key:\"getRangeMax\",value:function(){var t=this.element.clientHeight;this.rangeMax=t*this.settings.scale-t}},{key:\"getTranslateValue\",value:function(){var t=((s.positions.bottom-this.elementTop)/((s.positions.height+this.elementHeight)/100)).toFixed(1);return t=Math.min(100,Math.max(0,t)),this.oldPercentage!==t&&(this.rangeMax||this.getRangeMax(),this.translateValue=(t/100*this.rangeMax-this.rangeMax/2).toFixed(0),this.oldTranslateValue!==this.translateValue&&(this.oldPercentage=t,this.oldTranslateValue=this.translateValue,!0))}},{key:\"animate\",value:function(){var t,e=0,i=0;(this.settings.orientation.includes(\"left\")||this.settings.orientation.includes(\"right\"))&&(i=\"\".concat(this.settings.orientation.includes(\"left\")?-1*this.translateValue:this.translateValue,\"px\")),(this.settings.orientation.includes(\"up\")||this.settings.orientation.includes(\"down\"))&&(e=\"\".concat(this.settings.orientation.includes(\"up\")?-1*this.translateValue:this.translateValue,\"px\")),t=!1===this.settings.overflow?\"translate3d(\".concat(i,\", \").concat(e,\", 0) scale(\").concat(this.settings.scale,\")\"):\"translate3d(\".concat(i,\", \").concat(e,\", 0)\"),this.element.style[r]=t}}]),i}();function c(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}i.d(e,\"default\",function(){return y});var f,m,p,d=!0,g=!1,v=[],y=function(){function i(t,e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,i),t&&(this.elements=o(t),this.defaults={delay:.4,orientation:\"up\",scale:1.3,overflow:!1,transition:\"cubic-bezier(0,0,0,1)\",customContainer:!1},this.settings=Object.assign(this.defaults,e),\"IntersectionObserver\"in window||(d=!1),this.settings.customContainer&&(console.log(o(this.settings.customContainer)[0]),this.customContainer=o(this.settings.customContainer)[0]),this.lastPosition=-1,this.resizeIsDone=this.resizeIsDone.bind(this),this.handleResize=this.handleResize.bind(this),this.proceedRequestAnimationFrame=this.proceedRequestAnimationFrame.bind(this),this.init())}return function(t,e,i){e&&c(t.prototype,e),i&&c(t,i)}(i,[{key:\"init\",value:function(){s.setViewportAll(this.customContainer);for(var t=this.elements.length-1;0<=t;t--){var e=new h(this.elements[t],this.settings);v.push(e)}f=v.length,g||(this.proceedRequestAnimationFrame(),window.addEventListener(\"resize\",this.resizeIsDone),g=!0)}},{key:\"resizeIsDone\",value:function(){clearTimeout(p),p=setTimeout(this.handleResize,500)}},{key:\"handleResize\",value:function(){s.setViewportAll(this.customContainer);for(var t=f-1;0<=t;t--)v[t].getElementOffset(),v[t].getRangeMax();this.lastPosition=-1}},{key:\"proceedRequestAnimationFrame\",value:function(){if(s.setViewportTop(this.customContainer),this.lastPosition!==s.positions.top){s.setViewportBottom();for(var t=f-1;0<=t;t--)this.proceedElement(v[t]);m=window.requestAnimationFrame(this.proceedRequestAnimationFrame),this.lastPosition=s.positions.top}else m=window.requestAnimationFrame(this.proceedRequestAnimationFrame)}},{key:\"proceedElement\",value:function(t){(!d||this.customContainer?t.checkIfVisible():t.isVisible)&&t.getTranslateValue()&&t.animate()}},{key:\"destroy\",value:function(){var e=this,i=[];v=v.filter(function(t){return e.elements.includes(t.element)?(i.push(t),!1):t});for(var t=i.length-1;0<=t;t--)i[t].unSetStyle(),!1===this.settings.overflow&&i[t].unWrapElement();(f=v.length)||(window.cancelAnimationFrame(m),window.removeEventListener(\"resize\",this.handleResize))}}]),i}()}],s.c=n,s.d=function(t,e,i){s.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},s.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(s.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)s.d(i,n,function(t){return e[t]}.bind(null,n));return i},s.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return s.d(e,\"a\",e),e},s.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},s.p=\"\",s(s.s=0)).default;function s(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return i[t].call(e.exports,e,e.exports,s),e.l=!0,e.exports}var i,n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/simple-parallax-js/dist/simpleParallax.min.js\n// module id = 1\n// module chunks = 0 1","// Helpers\n\n/* eslint-disable max-params */\n/* exported helpers */\n\nconst helpers = {\n\n\t// Determine if element is within viewport\n\tisInViewport: function( elementTop, elementBottom, scrollTop = null, scrollBottom = null, offset = 0 ) {\n\n\t\t// If scrollTop and scrollBottom are not defined, get them from the window object\n\t\tif ( scrollTop === null || scrollBottom === null ) {\n\n\t\t\t// Set scroll constants\n\t\t\tscrollTop = window.pageYOffset || document.documentElement.scrollTop;\n\t\t\tscrollBottom = scrollTop + window.innerHeight;\n\t\t}\n\n\t\t// Return whether or not the element is in the viewport\n\t\treturn (\n\t\t\t// Top is between top and bottom of viewport\n\t\t\telementTop >= scrollTop + offset && elementTop <= scrollBottom - offset\n\n\t\t\t// Bottom is between top and bottom of viewport\n\t\t\t|| elementBottom >= scrollTop + offset && elementBottom <= scrollBottom - offset\n\n\t\t\t// Top is above viewport while bottom is beneath (component is larger than viewport)\n\t\t\t|| elementTop <= scrollTop && elementBottom >= scrollBottom\n\t\t);\n\t},\n\n\t// Clamp a number\n\tclamp: function( number, min, max ) {\n\t\treturn Math.min( Math.max( number, min ), max );\n\t},\n\n\t// Wraparound numbers\n\twrapAround: function( number, min, max ) {\n\n\t\t// Parse the number\n\t\tnumber = Number( number );\n\n\t\t// If the number is less than the min, return the max\n\t\tif ( number < min ) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Otherwise, if the number is greater than the max, return the min\n\t\telse if ( number > max ) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// Otherwise, return the number\n\t\treturn number;\n\t}\n};\n\nexport default helpers;\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/helpers.js","// Default WordPress JS\n\n// Slick\nimport './slick/slick';\nconsole.log( 'Slick JS Loaded' );\n\n// SVG\nimport './svg/jquery.svg';\nconsole.log( 'SVG JS Loaded' );\n\n// Vendors\n// import './inc/vendor/navigation';\nimport './inc/vendor/jquery-closestchild';\n\n// Custom\nimport './inc/setup';\nimport './inc/launcher';\nimport './inc/acf';\nimport './inc/slider';\nimport './inc/slick-trigger';\nimport './inc/scroll-animation';\nimport './inc/scroll-shadow-guy';\nimport './inc/move-tabs';\nimport './inc/embed-guy';\nimport './inc/tab';\nimport './inc/ninja-forms';\nimport './inc/preloader';\nimport './inc/burger';\nimport './inc/header';\nimport './inc/tabbed';\nimport './inc/paralmax';\nimport './inc/parallax';\nimport './inc/accordion';\nimport './inc/form';\nimport './inc/card-click';\nimport './inc/form-row';\nimport './inc/sliding-link';\nimport './inc/ajax';\nimport './inc/background-video';\n\nconsole.log( 'Main JS Loaded' );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/main.js","/*\n     _ _      _       _\n ___| (_) ___| | __  (_)___\n/ __| | |/ __| |/ /  | / __|\n\\__ \\ | | (__|   < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n                   |__/\n\n Version: 1.8.0\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\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) {\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 > 1) {\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 > 1) {\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                    $(this).attr({\n                        'aria-describedby': 'slick-slide-control' + _.instanceUid + slideControlIndex\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            _.$slides.eq(i).attr('tabindex', 0);\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) {\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 ) {\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) {\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) {\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) {\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\n\n\n// WEBPACK FOOTER //\n// ./src/js/slick/slick.js","module.exports = window.jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"window.jQuery\"\n// module id = 6\n// module chunks = 0","/* http://keith-wood.name/svg.html\r\n   SVG for jQuery v1.5.0.\r\n   Written by Keith Wood (kbwood{at}iinet.com.au) August 2007.\r\n   Available under the MIT (http://keith-wood.name/licence.html) license. \r\n   Please attribute the author if you use it. */\r\n\r\n(function($) { // Hide scope, no $ conflict\r\n\r\n/** The SVG manager.\r\n\t<p>Use the singleton instance of this class, $.svg, \r\n\tto interact with the SVG functionality.</p>\r\n\t<p>Expects HTML like:</p>\r\n\t<pre>&lt;div>&lt;/div></pre>\r\n\t@module SVGManager */\r\nfunction SVGManager() {\r\n\tthis._settings = []; // Settings to be remembered per SVG object\r\n\tthis._extensions = []; // List of SVG extensions added to SVGWrapper\r\n\t\t// for each entry [0] is extension name, [1] is extension class (function)\r\n\t\t// the function takes one parameter - the SVGWrapper instance\r\n\tthis.regional = []; // Localisations, indexed by language, '' for default (English)\r\n\tthis.regional[''] = {errorLoadingText: 'Error loading'};\r\n\tthis.local = this.regional['']; // Current localisation\r\n\tthis._uuid = new Date().getTime();\r\n\tthis._ie = !!window.ActiveXObject;\r\n}\r\n\r\n$.extend(SVGManager.prototype, {\r\n\t/** Class name added to elements to indicate already configured with SVG. */\r\n\tmarkerClassName: 'hasSVG',\r\n\t/** Name of the data property for instance settings. */\r\n\tpropertyName: 'svgwrapper',\r\n\r\n\t/** SVG namespace. */\r\n\tsvgNS: 'http://www.w3.org/2000/svg',\r\n\t/** XLink namespace. */\r\n\txlinkNS: 'http://www.w3.org/1999/xlink',\r\n\r\n\t/** SVG wrapper class. */\r\n\t_wrapperClass: SVGWrapper,\r\n\r\n\t/* Camel-case versions of attribute names containing dashes or are reserved words. */\r\n\t_attrNames: {class_: 'class', in_: 'in',\r\n\t\talignmentBaseline: 'alignment-baseline', baselineShift: 'baseline-shift',\r\n\t\tclipPath: 'clip-path', clipRule: 'clip-rule',\r\n\t\tcolorInterpolation: 'color-interpolation',\r\n\t\tcolorInterpolationFilters: 'color-interpolation-filters',\r\n\t\tcolorRendering: 'color-rendering', dominantBaseline: 'dominant-baseline',\r\n\t\tenableBackground: 'enable-background', fillOpacity: 'fill-opacity',\r\n\t\tfillRule: 'fill-rule', floodColor: 'flood-color',\r\n\t\tfloodOpacity: 'flood-opacity', fontFamily: 'font-family',\r\n\t\tfontSize: 'font-size', fontSizeAdjust: 'font-size-adjust',\r\n\t\tfontStretch: 'font-stretch', fontStyle: 'font-style',\r\n\t\tfontVariant: 'font-variant', fontWeight: 'font-weight',\r\n\t\tglyphOrientationHorizontal: 'glyph-orientation-horizontal',\r\n\t\tglyphOrientationVertical: 'glyph-orientation-vertical',\r\n\t\thorizAdvX: 'horiz-adv-x', horizOriginX: 'horiz-origin-x',\r\n\t\timageRendering: 'image-rendering', letterSpacing: 'letter-spacing',\r\n\t\tlightingColor: 'lighting-color', markerEnd: 'marker-end',\r\n\t\tmarkerMid: 'marker-mid', markerStart: 'marker-start',\r\n\t\tstopColor: 'stop-color', stopOpacity: 'stop-opacity',\r\n\t\tstrikethroughPosition: 'strikethrough-position',\r\n\t\tstrikethroughThickness: 'strikethrough-thickness',\r\n\t\tstrokeDashArray: 'stroke-dasharray', strokeDashOffset: 'stroke-dashoffset',\r\n\t\tstrokeLineCap: 'stroke-linecap', strokeLineJoin: 'stroke-linejoin',\r\n\t\tstrokeMiterLimit: 'stroke-miterlimit', strokeOpacity: 'stroke-opacity',\r\n\t\tstrokeWidth: 'stroke-width', textAnchor: 'text-anchor',\r\n\t\ttextDecoration: 'text-decoration', textRendering: 'text-rendering',\r\n\t\tunderlinePosition: 'underline-position', underlineThickness: 'underline-thickness',\r\n\t\tvertAdvY: 'vert-adv-y', vertOriginY: 'vert-origin-y',\r\n\t\twordSpacing: 'word-spacing', writingMode: 'writing-mode'},\r\n\r\n\t/* Add the SVG object to its container. */\r\n\t_attachSVG: function(container, settings) {\r\n\t\tvar svg = (container.namespaceURI === this.svgNS ? container : null);\r\n\t\tvar container = (svg ? null : container);\r\n\t\tif ($(container || svg).hasClass(this.markerClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (typeof settings === 'string') {\r\n\t\t\tsettings = {loadURL: settings};\r\n\t\t}\r\n\t\telse if (typeof settings === 'function') {\r\n\t\t\tsettings = {onLoad: settings};\r\n\t\t}\r\n\t\t$(container || svg).addClass(this.markerClassName);\r\n\t\ttry {\r\n\t\t\tif (!svg) {\r\n\t\t\t\tsvg = document.createElementNS(this.svgNS, 'svg');\r\n\t\t\t\tsvg.setAttribute('version', '1.1');\r\n\t\t\t\tif (container.clientWidth > 0) {\r\n\t\t\t\t\tsvg.setAttribute('width', container.clientWidth);\r\n\t\t\t\t}\r\n\t\t\t\tif (container.clientHeight > 0) {\r\n\t\t\t\t\tsvg.setAttribute('height', container.clientHeight);\r\n\t\t\t\t}\r\n\t\t\t\tcontainer.appendChild(svg);\r\n\t\t\t}\r\n\t\t\tthis._afterLoad(container, svg, settings || {});\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\t$(container).html('<p>SVG is not supported natively on this browser</p>');\r\n\t\t}\r\n\t},\r\n\r\n\t/* Post-processing once loaded. */\r\n\t_afterLoad: function(container, svg, settings) {\r\n\t\tvar settings = settings || this._settings[container.id];\r\n\t\tthis._settings[container ? container.id : ''] = null;\r\n\t\tvar wrapper = new this._wrapperClass(svg, container);\r\n\t\t$.data(container || svg, $.svg.propertyName, wrapper);\r\n\t\ttry {\r\n\t\t\tif (settings.loadURL) { // Load URL\r\n\t\t\t\twrapper.load(settings.loadURL, settings);\r\n\t\t\t}\r\n\t\t\tif (settings.settings) { // Additional settings\r\n\t\t\t\twrapper.configure(settings.settings);\r\n\t\t\t}\r\n\t\t\tif (settings.onLoad && !settings.loadURL) { // Onload callback\r\n\t\t\t\tsettings.onLoad.apply(container || svg, [wrapper]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\talert(e);\r\n\t\t}\r\n\t},\r\n\r\n\t/** Return the SVG wrapper created for a given container.\r\n\t\t@param container {string|Element|jQuery} Selector for the container or\r\n\t\t\t\tthe container for the SVG object or jQuery collection where first entry is the container.\r\n\t\t@return {SVGWrapper} The corresponding SVG wrapper element, or <code>null</code> if not attached. */\r\n\t_getSVG: function(container) {\r\n\t\treturn $(container).data(this.propertyName);\r\n\t},\r\n\r\n\t/** Remove the SVG functionality from a div.\r\n\t\t@param container {Element} The container for the SVG object. */\r\n\t_destroySVG: function(container) {\r\n\t\tcontainer = $(container);\r\n\t\tif (!container.hasClass(this.markerClassName)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tcontainer.removeClass(this.markerClassName).removeData(this.propertyName);\r\n\t\tif (container[0].namespaceURI !== this.svgNS) {\r\n\t\t\tcontainer.empty();\r\n\t\t}\r\n\t},\r\n\r\n\t/** Extend the SVGWrapper object with an embedded class.\r\n\t\t<p>The constructor function must take a single parameter that is\r\n\t   a reference to the owning SVG root object. This allows the \r\n\t\textension to access the basic SVG functionality.</p>\r\n\t\t@param name {string} The name of the <code>SVGWrapper</code> attribute to access the new class.\r\n\t\t@param extClass {function} The extension class constructor. */\r\n\taddExtension: function(name, extClass) {\r\n\t\tthis._extensions.push([name, extClass]);\r\n\t},\r\n\r\n\t/** Does this node belong to SVG?\r\n\t\t@param node {Element} The node to be tested.\r\n\t\t@return {boolean} <code>true</code> if an SVG node, <code>false</code> if not. */\r\n\tisSVGElem: function(node) {\r\n\t\treturn (node.nodeType === 1 && node.namespaceURI === $.svg.svgNS);\r\n\t}\r\n});\r\n\r\n/** The main SVG interface, which encapsulates the SVG element.\r\n\t<p>Obtain a reference from $().svg('get')</p>\r\n\t@module SVGWrapper */\r\nfunction SVGWrapper(svg, container) {\r\n\tthis._svg = svg; // The SVG root node\r\n\tthis._container = container; // The containing div\r\n\tfor (var i = 0; i < $.svg._extensions.length; i++) {\r\n\t\tvar extension = $.svg._extensions[i];\r\n\t\tthis[extension[0]] = new extension[1](this);\r\n\t}\r\n}\r\n\r\n$.extend(SVGWrapper.prototype, {\r\n\r\n\t/** Retrieve the width of the SVG object.\r\n\t\t@return {number} The width of the SVG canvas. */\r\n\twidth: function() {\r\n\t\treturn (this._container ? this._container.clientWidth : this._svg.width);\r\n\t},\r\n\r\n\t/** Retrieve the height of the SVG object.\r\n\t\t@return {number} The height of the SVG canvas. */\r\n\theight: function() {\r\n\t\treturn (this._container ? this._container.clientHeight : this._svg.height);\r\n\t},\r\n\r\n\t/** Retrieve the root SVG element.\r\n\t\t@return {SVGElement} The top-level SVG element. */\r\n\troot: function() {\r\n\t\treturn this._svg;\r\n\t},\r\n\r\n\t/** Configure a SVG node.\r\n\t\t@param [node] {SVGElement} The node to configure, or the SVG root if not specified.\r\n\t\t@param settings {object} Additional settings for the root.\r\n\t\t@param [clear=false] {boolean} <code>true</code> to remove existing attributes first,\r\n\t\t\t\t<code>false</code> to add to what is already there.\r\n\t\t@return {SVGWrapper} This wrapper. */\r\n\tconfigure: function(node, settings, clear) {\r\n\t\tif (!node.nodeName) {\r\n\t\t\tclear = settings;\r\n\t\t\tsettings = node;\r\n\t\t\tnode = this._svg;\r\n\t\t}\r\n\t\tif (clear) {\r\n\t\t\tfor (var i = node.attributes.length - 1; i >= 0; i--) {\r\n\t\t\t\tvar attr = node.attributes.item(i);\r\n\t\t\t\tif (!(attr.nodeName === 'onload' || attr.nodeName === 'version' || \r\n\t\t\t\t\t\tattr.nodeName.substring(0, 5) === 'xmlns')) {\r\n\t\t\t\t\tnode.attributes.removeNamedItem(attr.nodeName);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (var attrName in settings) {\r\n\t\t\tnode.setAttribute($.svg._attrNames[attrName] || attrName, settings[attrName]);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Locate a specific element in the SVG document.\r\n\t\t@param id {string} The element's identifier.\r\n\t\t@return {SVGElement} The element reference, or <code>null</code> if not found. */\r\n\tgetElementById: function(id) {\r\n\t\treturn this._svg.ownerDocument.getElementById(id);\r\n\t},\r\n\r\n\t/** Change the attributes for a SVG node.\r\n\t\t@param element {SVGElement} The node to change.\r\n\t\t@param settings {object} The new settings.\r\n\t\t@return {SVGWrapper} This wrapper. */\r\n\tchange: function(element, settings) {\r\n\t\tif (element) {\r\n\t\t\tfor (var name in settings) {\r\n\t\t\t\tif (settings[name] == null) {\r\n\t\t\t\t\telement.removeAttribute($.svg._attrNames[name] || name);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\telement.setAttribute($.svg._attrNames[name] || name, settings[name]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Check for parent being absent and adjust arguments accordingly.\r\n\t\t@private\r\n\t\t@param values {string[]} The given parameters.\r\n\t\t@param names {string[]} The names of the parameters in order.\r\n\t\t@param optSettings {string[]} The names of optional parameters.\r\n\t\t@return {object} An object representing the named parameters. */\r\n\t_args: function(values, names, optSettings) {\r\n\t\tnames.splice(0, 0, 'parent');\r\n\t\tnames.splice(names.length, 0, 'settings');\r\n\t\tvar args = {};\r\n\t\tvar offset = 0;\r\n\t\tif (values[0] != null && values[0].jquery) {\r\n\t\t\tvalues[0] = values[0][0];\r\n\t\t}\r\n\t\tif (values[0] != null && !(typeof values[0] === 'object' && values[0].nodeName)) {\r\n\t\t\targs['parent'] = null;\r\n\t\t\toffset = 1;\r\n\t\t}\r\n\t\tfor (var i = 0; i < values.length; i++) {\r\n\t\t\targs[names[i + offset]] = values[i];\r\n\t\t}\r\n\t\tif (optSettings) {\r\n\t\t\t$.each(optSettings, function(i, value) {\r\n\t\t\t\tif (typeof args[value] === 'object') {\r\n\t\t\t\t\targs.settings = args[value];\r\n\t\t\t\t\targs[value] = null;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn args;\r\n\t},\r\n\r\n\t/** Add a title.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param text {string} The text of the title.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new title node. */\r\n\ttitle: function(parent, text, settings) {\r\n\t\tvar args = this._args(arguments, ['text']);\r\n\t\tvar node = this._makeNode(args.parent, 'title', args.settings || {});\r\n\t\tnode.appendChild(this._svg.ownerDocument.createTextNode(args.text));\r\n\t\treturn node;\r\n\t},\r\n\r\n\t/** Add a description.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param text {string} The text of the description.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new description node. */\r\n\tdescribe: function(parent, text, settings) {\r\n\t\tvar args = this._args(arguments, ['text']);\r\n\t\tvar node = this._makeNode(args.parent, 'desc', args.settings || {});\r\n\t\tnode.appendChild(this._svg.ownerDocument.createTextNode(args.text));\r\n\t\treturn node;\r\n\t},\r\n\r\n\t/** Add a definitions node.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param [id] {string} The ID of this definitions (optional).\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new definitions node. */\r\n\tdefs: function(parent, id, settings) {\r\n\t\tvar args = this._args(arguments, ['id'], ['id']);\r\n\t\treturn this._makeNode(args.parent, 'defs', $.extend((args.id ? {id: args.id} : {}), args.settings || {}));\r\n\t},\r\n\r\n\t/** Add a symbol definition.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param id {string} The ID of this symbol.\r\n\t\t@param x1 {number} The left coordinate for this symbol.\r\n\t\t@param y1 {number} The top coordinate for this symbol.\r\n\t\t@param width {number} The width of this symbol.\r\n\t\t@param height {number} The height of this symbol.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new symbol node. */\r\n\tsymbol: function(parent, id, x1, y1, width, height, settings) {\r\n\t\tvar args = this._args(arguments, ['id', 'x1', 'y1', 'width', 'height']);\r\n\t\treturn this._makeNode(args.parent, 'symbol', $.extend({id: args.id,\r\n\t\t\t\tviewBox: args.x1 + ' ' + args.y1 + ' ' + args.width + ' ' + args.height}, args.settings || {}));\r\n\t},\r\n\r\n\t/** Add a marker definition.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param id {string} The ID of this marker.\r\n\t\t@param refX {number} The x-coordinate for the reference point.\r\n\t\t@param refY {number} The y-coordinate for the reference point.\r\n\t\t@param mWidth {number} The marker viewport width.\r\n\t\t@param mHeight {number} The marker viewport height.\r\n\t\t@param [orient] {string|number} 'auto' or angle (degrees).\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new marker node. */\r\n\tmarker: function(parent, id, refX, refY, mWidth, mHeight, orient, settings) {\r\n\t\tvar args = this._args(arguments, ['id', 'refX', 'refY', 'mWidth', 'mHeight', 'orient'], ['orient']);\r\n\t\treturn this._makeNode(args.parent, 'marker', $.extend(\r\n\t\t\t{id: args.id, refX: args.refX, refY: args.refY, markerWidth: args.mWidth, \r\n\t\t\tmarkerHeight: args.mHeight, orient: args.orient || 'auto'}, args.settings || {}));\r\n\t},\r\n\r\n\t/** Add a style node.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param styles {string} The CSS styles.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new style node. */\r\n\tstyle: function(parent, styles, settings) {\r\n\t\tvar args = this._args(arguments, ['styles']);\r\n\t\tvar node = this._makeNode(args.parent, 'style', $.extend({type: 'text/css'}, args.settings || {}));\r\n\t\tnode.appendChild(this._svg.ownerDocument.createTextNode(args.styles));\r\n\t\treturn node;\r\n\t},\r\n\r\n\t/** Add a script node.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param script {string} The JavaScript code.\r\n\t\t@param [type='text/javascript'] {string} The MIME type for the code.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new script node. */\r\n\tscript: function(parent, script, type, settings) {\r\n\t\tvar args = this._args(arguments, ['script', 'type'], ['type']);\r\n\t\tvar node = this._makeNode(args.parent, 'script', $.extend(\r\n\t\t\t{type: args.type || 'text/javascript'}, args.settings || {}));\r\n\t\tnode.appendChild(this._svg.ownerDocument.createTextNode(args.script));\r\n\t\tif ($.svg._ie) {\r\n\t\t\t$.globalEval(args.script);\r\n\t\t}\r\n\t\treturn node;\r\n\t},\r\n\r\n\t/** Add a linear gradient definition.\r\n\t\t<p>Specify all of <code>x1</code>, <code>y1</code>, <code>x2</code>, <code>y2</code> or none of them.</p>\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param id {string} The ID for this gradient.\r\n\t\t@param stops {string[][]} The gradient stops, each entry is [0] is offset (0.0-1.0 or 0%-100%),\r\n\t\t\t\t[1] is colour, [2] is opacity (optional).\r\n\t\t@param [x1] {number} The x-coordinate of the gradient start.\r\n\t\t@param [y1] {number} The y-coordinate of the gradient start.\r\n\t\t@param [x2] {number} The x-coordinate of the gradient end.\r\n\t\t@param [y2] {number} The y-coordinate of the gradient end.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new linear gradient node. */\r\n\tlinearGradient: function(parent, id, stops, x1, y1, x2, y2, settings) {\r\n\t\tvar args = this._args(arguments, ['id', 'stops', 'x1', 'y1', 'x2', 'y2'], ['x1']);\r\n\t\tvar sets = $.extend({id: args.id},\r\n\t\t\t\t(args.x1 != null ? {x1: args.x1, y1: args.y1, x2: args.x2, y2: args.y2} : {}));\r\n\t\treturn this._gradient(args.parent, 'linearGradient', $.extend(sets, args.settings || {}), args.stops);\r\n\t},\r\n\r\n\t/** Add a radial gradient definition.\r\n\t\t<p>Specify all of <code>cx</code>, <code>cy</code>, <code>r</code>,\r\n\t\t<code>fx</code>, <code>fy</code> or none of them.</p>\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param id {string} The ID for this gradient.\r\n\t\t@param stops {string[][]} The gradient stops, each entry [0] is offset (0.0-1.0 or 0%-100%),\r\n\t\t\t\t[1] is colour, [2] is opacity (optional).\r\n\t\t@param [cx] {number} The x-coordinate of the largest circle centre.\r\n\t\t@param [cy] {number} The y-coordinate of the largest circle centre.\r\n\t\t@param [r] {number} The radius of the largest circle.\r\n\t\t@param [fx] {number} The x-coordinate of the gradient focus.\r\n\t\t@param [fy] {number} The y-coordinate of the gradient focus.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new radial gradient node. */\r\n\tradialGradient: function(parent, id, stops, cx, cy, r, fx, fy, settings) {\r\n\t\tvar args = this._args(arguments, ['id', 'stops', 'cx', 'cy', 'r', 'fx', 'fy'], ['cx']);\r\n\t\tvar sets = $.extend({id: args.id},\r\n\t\t\t(args.cx != null ? {cx: args.cx, cy: args.cy, r: args.r, fx: args.fx, fy: args.fy} : {}));\r\n\t\treturn this._gradient(args.parent, 'radialGradient', $.extend(sets, args.settings || {}), args.stops);\r\n\t},\r\n\r\n\t/** Add a gradient node.\r\n\t\t@private\r\n\t\t@param parent {SVGElement|jQuery} The parent node for the new node.\r\n\t\t@param name {string} The type of gradient node to create.\r\n\t\t@param settings {object} The settings for this node.\r\n\t\t@param stops {string[][]} The gradient stops.\r\n\t\t@return {SVGElement} The new gradient node. */\r\n\t_gradient: function(parent, name, settings, stops) {\r\n\t\tvar node = this._makeNode(parent, name, settings);\r\n\t\tfor (var i = 0; i < stops.length; i++) {\r\n\t\t\tvar stop = stops[i];\r\n\t\t\tthis._makeNode(node, 'stop', $.extend({offset: stop[0], stopColor: stop[1]}, \r\n\t\t\t\t(stop[2] != null ? {stopOpacity: stop[2]} : {})));\r\n\t\t}\r\n\t\treturn node;\r\n\t},\r\n\r\n\t/** Add a pattern definition.\r\n\t\t<p>Specify all of <code>vx</code>, <code>vy</code>, <code>xwidth</code>,\r\n\t\t<code>vheight</code> or none of them.</p>\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param id {string} The ID for this pattern.\r\n\t\t@param x {number} The x-coordinate for the left edge of the pattern.\r\n\t\t@param y {number} The y-coordinate for the top edge of the pattern.\r\n\t\t@param width {number} The width of the pattern.\r\n\t\t@param height {number} The height of the pattern.\r\n\t\t@param [vx] {number} The minimum x-coordinate for view box.\r\n\t\t@param [vy] {number} The minimum y-coordinate for the view box.\r\n\t\t@param [vwidth] {number} The width of the view box.\r\n\t\t@param [vheight] {number} The height of the view box.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new pattern definition node. */\r\n\tpattern: function(parent, id, x, y, width, height, vx, vy, vwidth, vheight, settings) {\r\n\t\tvar args = this._args(arguments, ['id', 'x', 'y', 'width', 'height', 'vx', 'vy', 'vwidth', 'vheight'], ['vx']);\r\n\t\tvar sets = $.extend({id: args.id, x: args.x, y: args.y, width: args.width, height: args.height},\r\n\t\t\t(args.vx != null ? {viewBox: args.vx + ' ' + args.vy + ' ' + args.vwidth + ' ' + args.vheight} : {}));\r\n\t\treturn this._makeNode(args.parent, 'pattern', $.extend(sets, args.settings || {}));\r\n\t},\r\n\r\n\t/** Add a clip path definition.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param id {string} The ID for this path.\r\n\t\t@param [units='userSpaceOnUse'] {string} Either 'userSpaceOnUse' or 'objectBoundingBox'.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new clip path definition node. */\r\n\tclipPath: function(parent, id, units, settings) {\r\n\t\tvar args = this._args(arguments, ['id', 'units']);\r\n\t\targs.units = args.units || 'userSpaceOnUse';\r\n\t\treturn this._makeNode(args.parent, 'clipPath', $.extend(\r\n\t\t\t{id: args.id, clipPathUnits: args.units}, args.settings || {}));\r\n\t},\r\n\r\n\t/** Add a mask definition.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param id {string} The ID for this mask.\r\n\t\t@param x {number} The x-coordinate for the left edge of the mask.\r\n\t\t@param y {number} The y-coordinate for the top edge of the mask.\r\n\t\t@param width {number} The width of the mask.\r\n\t\t@param height {number} The height of the mask.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new mask definition node. */\r\n\tmask: function(parent, id, x, y, width, height, settings) {\r\n\t\tvar args = this._args(arguments, ['id', 'x', 'y', 'width', 'height']);\r\n\t\treturn this._makeNode(args.parent, 'mask', $.extend(\r\n\t\t\t{id: args.id, x: args.x, y: args.y, width: args.width, height: args.height}, args.settings || {}));\r\n\t},\r\n\r\n\t/** Create a new path object.\r\n\t\t@return {SVGPath} A new path object. */\r\n\tcreatePath: function() {\r\n\t\treturn new SVGPath();\r\n\t},\r\n\r\n\t/** Create a new text object.\r\n\t\t@return {SVGText} A new text object. */\r\n\tcreateText: function() {\r\n\t\treturn new SVGText();\r\n\t},\r\n\r\n\t/** Add an embedded SVG element.\r\n\t\t<p>Specify all of <code>vx</code>, <code>vy</code>,\r\n\t\t<code>vwidth</code>, <code>vheight</code> or none of them.</p>\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param x {number} The x-coordinate for the left edge of the node.\r\n\t\t@param y {number} The y-coordinate for the top edge of the node.\r\n\t\t@param width {number} The width of the node.\r\n\t\t@param height {number} The height of the node.\r\n\t\t@param [vx] {number} The minimum x-coordinate for view box.\r\n\t\t@param [vy] {number} The minimum y-coordinate for the view box.\r\n\t\t@param [vwidth] {number} The width of the view box.\r\n\t\t@param [vheight] {number} The height of the view box.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new svg node. */\r\n\tsvg: function(parent, x, y, width, height, vx, vy, vwidth, vheight, settings) {\r\n\t\tvar args = this._args(arguments, ['x', 'y', 'width', 'height', 'vx', 'vy', 'vwidth', 'vheight'], ['vx']);\r\n\t\tvar sets = $.extend({x: args.x, y: args.y, width: args.width, height: args.height}, \r\n\t\t\t(args.vx != null ? {viewBox: args.vx + ' ' + args.vy + ' ' + args.vwidth + ' ' + args.vheight} : {}));\r\n\t\treturn this._makeNode(args.parent, 'svg', $.extend(sets, args.settings || {}));\r\n\t},\r\n\r\n\t/** Create a group.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param [id] {string} The ID of this group.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new group node. */\r\n\tgroup: function(parent, id, settings) {\r\n\t\tvar args = this._args(arguments, ['id'], ['id']);\r\n\t\treturn this._makeNode(args.parent, 'g', $.extend({id: args.id}, args.settings || {}));\r\n\t},\r\n\r\n\t/** Add a usage reference.\r\n\t\t<p>Specify all of <code>x</code>, <code>y</code>, <code>width</code>, <code>height</code> or none of them.</p>\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param [x] {number} The x-coordinate for the left edge of the node.\r\n\t\t@param [y] {number} The y-coordinate for the top edge of the node.\r\n\t\t@param [width] {number} The width of the node.\r\n\t\t@param [height] {number} The height of the node.\r\n\t\t@param ref {string} The ID of the definition node.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new usage reference node. */\r\n\tuse: function(parent, x, y, width, height, ref, settings) {\r\n\t\tvar args = this._args(arguments, ['x', 'y', 'width', 'height', 'ref']);\r\n\t\tif (typeof args.x === 'string') {\r\n\t\t\targs.ref = args.x;\r\n\t\t\targs.settings = args.y;\r\n\t\t\targs.x = args.y = args.width = args.height = null;\r\n\t\t}\r\n\t\tvar node = this._makeNode(args.parent, 'use', $.extend(\r\n\t\t\t{x: args.x, y: args.y, width: args.width, height: args.height}, args.settings || {}));\r\n\t\tnode.setAttributeNS($.svg.xlinkNS, 'href', args.ref);\r\n\t\treturn node;\r\n\t},\r\n\r\n\t/** Add a link, which applies to all child elements.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param ref {string} The target URL.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new link node. */\r\n\tlink: function(parent, ref, settings) {\r\n\t\tvar args = this._args(arguments, ['ref']);\r\n\t\tvar node = this._makeNode(args.parent, 'a', args.settings);\r\n\t\tnode.setAttributeNS($.svg.xlinkNS, 'href', args.ref);\r\n\t\treturn node;\r\n\t},\r\n\r\n\t/** Add an image.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param x {number} The x-coordinate for the left edge of the image.\r\n\t\t@param y {number} The y-coordinate for the top edge of the image.\r\n\t\t@param width {number} The width of the image.\r\n\t\t@param height {number} The height of the image.\r\n\t\t@param ref {string} The path to the image.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new image node. */\r\n\timage: function(parent, x, y, width, height, ref, settings) {\r\n\t\tvar args = this._args(arguments, ['x', 'y', 'width', 'height', 'ref']);\r\n\t\tvar node = this._makeNode(args.parent, 'image', $.extend(\r\n\t\t\t{x: args.x, y: args.y, width: args.width, height: args.height}, args.settings || {}));\r\n\t\tnode.setAttributeNS($.svg.xlinkNS, 'href', args.ref);\r\n\t\treturn node;\r\n\t},\r\n\r\n\t/** Draw a path.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param path {string|SVGPath} The path to draw.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new path node. */\r\n\tpath: function(parent, path, settings) {\r\n\t\tvar args = this._args(arguments, ['path']);\r\n\t\treturn this._makeNode(args.parent, 'path', $.extend(\r\n\t\t\t{d: (args.path.path ? args.path.path() : args.path)}, args.settings || {}));\r\n\t},\r\n\r\n\t/** Draw a rectangle.\r\n\t\t<p>Specify both of <code>rx</code> and <code>ry</code> or neither.</p>\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param x {number} The x-coordinate for the left edge of the rectangle.\r\n\t\t@param y {number} The y-coordinate for the top edge of the rectangle.\r\n\t\t@param width {number} The width of the rectangle.\r\n\t\t@param height {number} The height of the rectangle.\r\n\t\t@param [rx] {number} The x-radius of the ellipse for the rounded corners.\r\n\t\t@param [ry] {number} The y-radius of the ellipse for the rounded corners.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new rectangle node. */\r\n\trect: function(parent, x, y, width, height, rx, ry, settings) {\r\n\t\tvar args = this._args(arguments, ['x', 'y', 'width', 'height', 'rx', 'ry'], ['rx']);\r\n\t\treturn this._makeNode(args.parent, 'rect', $.extend(\r\n\t\t\t{x: args.x, y: args.y, width: args.width, height: args.height},\r\n\t\t\t(args.rx ? {rx: args.rx, ry: args.ry} : {}), args.settings || {}));\r\n\t},\r\n\r\n\t/** Draw a circle.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param cx {number} The x-coordinate for the centre of the circle.\r\n\t\t@param cy {number} The y-coordinate for the centre of the circle.\r\n\t\t@param r {number} The radius of the circle.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new circle node. */\r\n\tcircle: function(parent, cx, cy, r, settings) {\r\n\t\tvar args = this._args(arguments, ['cx', 'cy', 'r']);\r\n\t\treturn this._makeNode(args.parent, 'circle', $.extend(\r\n\t\t\t{cx: args.cx, cy: args.cy, r: args.r}, args.settings || {}));\r\n\t},\r\n\r\n\t/** Draw an ellipse.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param cx {number} The x-coordinate for the centre of the ellipse.\r\n\t\t@param cy {number} The y-coordinate for the centre of the ellipse.\r\n\t\t@param rx {number} The x-radius of the ellipse.\r\n\t\t@param ry {number} The y-radius of the ellipse.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new ellipse node. */\r\n\tellipse: function(parent, cx, cy, rx, ry, settings) {\r\n\t\tvar args = this._args(arguments, ['cx', 'cy', 'rx', 'ry']);\r\n\t\treturn this._makeNode(args.parent, 'ellipse', $.extend(\r\n\t\t\t{cx: args.cx, cy: args.cy, rx: args.rx, ry: args.ry}, args.settings || {}));\r\n\t},\r\n\r\n\t/** Draw a line.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param x1 {number} The x-coordinate for the start of the line.\r\n\t\t@param y1 {number} The y-coordinate for the start of the line.\r\n\t\t@param x2 {number} The x-coordinate for the end of the line.\r\n\t\t@param y2 {number} The y-coordinate for the end of the line.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new line node. */\r\n\tline: function(parent, x1, y1, x2, y2, settings) {\r\n\t\tvar args = this._args(arguments, ['x1', 'y1', 'x2', 'y2']);\r\n\t\treturn this._makeNode(args.parent, 'line', $.extend(\r\n\t\t\t{x1: args.x1, y1: args.y1, x2: args.x2, y2: args.y2}, args.settings || {}));\r\n\t},\r\n\r\n\t/** Draw a polygonal line.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param points {number[][]} The x-/y-coordinates for the points on the line.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new polygonal line node. */\r\n\tpolyline: function(parent, points, settings) {\r\n\t\tvar args = this._args(arguments, ['points']);\r\n\t\treturn this._poly(args.parent, 'polyline', args.points, args.settings);\r\n\t},\r\n\r\n\t/** Draw a polygonal shape.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param points {number[][]} The x-/y-coordinates for the points on the shape.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new polygonal shape node. */\r\n\tpolygon: function(parent, points, settings) {\r\n\t\tvar args = this._args(arguments, ['points']);\r\n\t\treturn this._poly(args.parent, 'polygon', args.points, args.settings);\r\n\t},\r\n\r\n\t/** Draw a polygonal line or shape.\r\n\t\t@private\r\n\t\t@param parent {SVGElement|jQuery} The parent node for the new node.\r\n\t\t@param name {string} The type of polygon to create.\r\n\t\t@param points {number[][]} The x-/y-coordinates for the points on the shape.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new polygon node. */\r\n\t_poly: function(parent, name, points, settings) {\r\n\t\tvar ps = '';\r\n\t\tfor (var i = 0; i < points.length; i++) {\r\n\t\t\tps += points[i].join() + ' ';\r\n\t\t}\r\n\t\treturn this._makeNode(parent, name, $.extend({points: $.trim(ps)}, settings || {}));\r\n\t},\r\n\r\n\t/** Draw text.\r\n\t\t<p>Specify both of <code>x</code> and <code>y</code> or neither of them.</p>\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param [x] {number|number[]} The x-coordinate(s) for the text.\r\n\t\t@param [y] {number|number[]} The y-coordinate(s) for the text.\r\n\t\t@param value {string|SVGText} The text content or text with spans and references.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new text node. */\r\n\ttext: function(parent, x, y, value, settings) {\r\n\t\tvar args = this._args(arguments, ['x', 'y', 'value']);\r\n\t\tif (typeof args.x === 'string' && arguments.length < 4) {\r\n\t\t\targs.value = args.x;\r\n\t\t\targs.settings = args.y;\r\n\t\t\targs.x = args.y = null;\r\n\t\t}\r\n\t\treturn this._text(args.parent, 'text', args.value, $.extend(\r\n\t\t\t{x: (args.x && $.isArray(args.x) ? args.x.join(' ') : args.x),\r\n\t\t\ty: (args.y && $.isArray(args.y) ? args.y.join(' ') : args.y)}, args.settings || {}));\r\n\t},\r\n\r\n\t/** Draw text along a path.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param path {string} The ID of the path.\r\n\t\t@param value {string|SVGText} The text content or text with spans and references.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new textpath node. */\r\n\ttextpath: function(parent, path, value, settings) {\r\n\t\tvar args = this._args(arguments, ['path', 'value']);\r\n\t\tvar node = this._text(args.parent, 'textPath', args.value, args.settings || {});\r\n\t\tnode.setAttributeNS($.svg.xlinkNS, 'href', args.path);\r\n\t\treturn node;\r\n\t},\r\n\r\n\t/** Draw text.\r\n\t\t@private\r\n\t\t@param parent {SVGElement|jQuery} The parent node for the new node.\r\n\t\t@param name {string} The type of text to create.\r\n\t\t@param value {string|SVGText} The text content or text with spans and references.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new text node. */\r\n\t_text: function(parent, name, value, settings) {\r\n\t\tvar node = this._makeNode(parent, name, settings);\r\n\t\tif (typeof value === 'string') {\r\n\t\t\tnode.appendChild(node.ownerDocument.createTextNode(value));\r\n\t\t}\r\n\t\telse {\r\n\t\t\tfor (var i = 0; i < value._parts.length; i++) {\r\n\t\t\t\tvar part = value._parts[i];\r\n\t\t\t\tif (part[0] === 'tspan') {\r\n\t\t\t\t\tvar child = this._makeNode(node, part[0], part[2]);\r\n\t\t\t\t\tchild.appendChild(node.ownerDocument.createTextNode(part[1]));\r\n\t\t\t\t\tnode.appendChild(child);\r\n\t\t\t\t}\r\n\t\t\t\telse if (part[0] === 'tref') {\r\n\t\t\t\t\tvar child = this._makeNode(node, part[0], part[2]);\r\n\t\t\t\t\tchild.setAttributeNS($.svg.xlinkNS, 'href', part[1]);\r\n\t\t\t\t\tnode.appendChild(child);\r\n\t\t\t\t}\r\n\t\t\t\telse if (part[0] === 'textpath') {\r\n\t\t\t\t\tvar set = $.extend({}, part[2]);\r\n\t\t\t\t\tset.href = null;\r\n\t\t\t\t\tvar child = this._makeNode(node, part[0], set);\r\n\t\t\t\t\tchild.setAttributeNS($.svg.xlinkNS, 'href', part[2].href);\r\n\t\t\t\t\tchild.appendChild(node.ownerDocument.createTextNode(part[1]));\r\n\t\t\t\t\tnode.appendChild(child);\r\n\t\t\t\t}\r\n\t\t\t\telse { // straight text\r\n\t\t\t\t\tnode.appendChild(node.ownerDocument.createTextNode(part[1]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn node;\r\n\t},\r\n\r\n\t/** Add a custom SVG element.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param name {string} The name of the element.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new custom node. */\r\n\tother: function(parent, name, settings) {\r\n\t\tvar args = this._args(arguments, ['name']);\r\n\t\treturn this._makeNode(args.parent, args.name, args.settings || {});\r\n\t},\r\n\r\n\t/** Create a SVG node with the given settings.\r\n\t\t@private\r\n\t\t@param parent {SVGElement|jQuery} The parent node for the new node, or SVG root if <code>null</code>.\r\n\t\t@param name {string} The name of the element.\r\n\t\t@param [settings] {object} Additional settings for this node.\r\n\t\t@return {SVGElement} The new node. */\r\n\t_makeNode: function(parent, name, settings) {\r\n\t\tparent = parent || this._svg;\r\n\t\tvar node = this._svg.ownerDocument.createElementNS($.svg.svgNS, name);\r\n\t\tfor (var name in settings) {\r\n\t\t\tvar value = settings[name];\r\n\t\t\tif (value != null && (typeof value !== 'string' || value !== '')) {\r\n\t\t\t\tnode.setAttribute($.svg._attrNames[name] || name, value);\r\n\t\t\t}\r\n\t\t}\r\n\t\tparent.appendChild(node);\r\n\t\treturn node;\r\n\t},\r\n\r\n\t/** Add an existing SVG node to the document.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param node {SVGElement|string|jQuery} The new node to add or\r\n\t\t\t\tthe jQuery selector for the node or the set of nodes to add.\r\n\t\t@return {SVGWrapper} This wrapper. */\r\n\tadd: function(parent, node) {\r\n\t\tvar args = this._args((arguments.length === 1 ? [null, parent] : arguments), ['node']);\r\n\t\tvar svg = this;\r\n\t\targs.parent = args.parent || this._svg;\r\n\t\targs.node = (args.node.jquery ? args.node : $(args.node));\r\n\t\ttry {\r\n\t\t\targs.parent.appendChild(args.node.cloneNode(true));\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\targs.node.each(function() {\r\n\t\t\t\tvar child = svg._cloneAsSVG(this);\r\n\t\t\t\tif (child) {\r\n\t\t\t\t\targs.parent.appendChild(child);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Clone an existing SVG node and add it to the document.\r\n\t\t@param [parent] {SVGElement|jQuery} The parent node for the new node, or SVG root if not specified.\r\n\t\t@param node {SVGEelement|string|jQuery} The new node to add or\r\n\t\t\t\tthe jQuery selector for the node or the set of nodes to clone.\r\n\t\t@return {SVGElement[]} The collection of new nodes. */\r\n\tclone: function(parent, node) {\r\n\t\tvar svg = this;\r\n\t\tvar args = this._args((arguments.length === 1 ? [null, parent] : arguments), ['node']);\r\n\t\targs.parent = args.parent || this._svg;\r\n\t\targs.node = (args.node.jquery ? args.node : $(args.node));\r\n\t\tvar newNodes = [];\r\n\t\targs.node.each(function() {\r\n\t\t\tvar child = svg._cloneAsSVG(this);\r\n\t\t\tif (child) {\r\n\t\t\t\tchild.id = '';\r\n\t\t\t\targs.parent.appendChild(child);\r\n\t\t\t\tnewNodes.push(child);\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn newNodes;\r\n\t},\r\n\r\n\t/** SVG nodes must belong to the SVG namespace, so clone and ensure this is so.\r\n\t\t@private\r\n\t\t@param node {SVGElement} The SVG node to clone.\r\n\t\t@return {SVGElement} The cloned node. */\r\n\t_cloneAsSVG: function(node) {\r\n\t\tvar newNode = null;\r\n\t\tif (node.nodeType === 1) { // element\r\n\t\t\tnewNode = this._svg.ownerDocument.createElementNS($.svg.svgNS, this._checkName(node.nodeName));\r\n\t\t\tfor (var i = 0; i < node.attributes.length; i++) {\r\n\t\t\t\tvar attr = node.attributes.item(i);\r\n\t\t\t\tif (attr.nodeName !== 'xmlns' && attr.nodeValue) {\r\n\t\t\t\t\tif (attr.prefix === 'xlink') {\r\n\t\t\t\t\t\tnewNode.setAttributeNS($.svg.xlinkNS, attr.localName || attr.baseName, attr.nodeValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tnewNode.setAttribute(this._checkName(attr.nodeName), attr.nodeValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfor (var i = 0; i < node.childNodes.length; i++) {\r\n\t\t\t\tvar child = this._cloneAsSVG(node.childNodes[i]);\r\n\t\t\t\tif (child) {\r\n\t\t\t\t\tnewNode.appendChild(child);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (node.nodeType === 3) { // text\r\n\t\t\tif ($.trim(node.nodeValue)) {\r\n\t\t\t\tnewNode = this._svg.ownerDocument.createTextNode(node.nodeValue);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (node.nodeType === 4) { // CDATA\r\n\t\t\tif ($.trim(node.nodeValue)) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tnewNode = this._svg.ownerDocument.createCDATASection(node.nodeValue);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (e) {\r\n\t\t\t\t\tnewNode = this._svg.ownerDocument.createTextNode(\r\n\t\t\t\t\t\tnode.nodeValue.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;'));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn newNode;\r\n\t},\r\n\r\n\t/** Node names must be lower case and without SVG namespace prefix.\r\n\t\t@private\r\n\t\t@param name {string} The name to check.\r\n\t\t@return {string} The corrected name. */\r\n\t_checkName: function(name) {\r\n\t\tname = (name.substring(0, 1) >= 'A' && name.substring(0, 1) <= 'Z' ? name.toLowerCase() : name);\r\n\t\treturn (name.substring(0, 4) === 'svg:' ? name.substring(4) : name);\r\n\t},\r\n\r\n\t/** Load an external SVG document.\r\n\t\t@param url {string} The location of the SVG document or\r\n\t\t\t\tthe actual SVG content (starting with '<code>&lt;svg</code>'.\r\n\t\t@param settings {boolean|function|object} Either <code>addTo</code> below or <code>onLoad</code> below or\r\n\t\t\t\tadditional settings for the load with attributes below:\r\n\t\t\t\t<code>addTo</code> {boolean} <code>true</code> to add to what's already there,\r\n\t\t\t\tor <code>false</code> to clear the canvas first,\r\n\t\t\t\t<code>changeSize</code> {boolean} <code>true</code> to allow the canvas size to change,\r\n\t\t\t\tor <code>false</code> to retain the original,\r\n\t\t\t\t<code>onLoad</code> {function} callback after the document has loaded,\r\n\t\t\t\t'<code>this</code>' is the container, receives SVG object and optional error message as a parameter,\r\n\t\t\t\t<code>parent</code> {string|SVGElement|jQuery} the parent to load into,\r\n\t\t\t\tdefaults to top-level svg element.\r\n\t\t@return {SVGWrapper} This wrapper. */\r\n\tload: function(url, settings) {\r\n\t\tsettings = (typeof settings === 'boolean' ? {addTo: settings} :\r\n\t\t\t\t(typeof settings === 'function' ? {onLoad: settings} :\r\n\t\t\t\t(typeof settings === 'string' ? {parent: settings} : \r\n\t\t\t\t(typeof settings === 'object' && settings.nodeName ? {parent: settings} :\r\n\t\t\t\t(typeof settings === 'object' && settings.jquery ? {parent: settings} : settings || {})))));\r\n\t\tif (!settings.parent && !settings.addTo) {\r\n\t\t\tthis.clear(false);\r\n\t\t}\r\n\t\tvar size = [this._svg.getAttribute('width'), this._svg.getAttribute('height')];\r\n\t\tvar wrapper = this;\r\n\t\t// Report a problem with the load\r\n\t\tvar reportError = function(message) {\r\n\t\t\tmessage = $.svg.local.errorLoadingText + ': ' + message;\r\n\t\t\tif (settings.onLoad) {\r\n\t\t\t\tsettings.onLoad.apply(wrapper._container || wrapper._svg, [wrapper, message]);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\twrapper.text(null, 10, 20, message);\r\n\t\t\t}\r\n\t\t};\r\n\t\t// Create a DOM from SVG content\r\n\t\tvar loadXML4IE = function(data) {\r\n\t\t\tvar xml = new ActiveXObject('Microsoft.XMLDOM');\r\n\t\t\txml.validateOnParse = false;\r\n\t\t\txml.resolveExternals = false;\r\n\t\t\txml.async = false;\r\n\t\t\txml.loadXML(data);\r\n\t\t\tif (xml.parseError.errorCode !== 0) {\r\n\t\t\t\treportError(xml.parseError.reason);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn xml;\r\n\t\t};\r\n\t\t// Load the SVG DOM\r\n\t\tvar loadSVG = function(data) {\r\n\t\t\tif (!data) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (data.documentElement.nodeName !== 'svg') {\r\n\t\t\t\tvar errors = data.getElementsByTagName('parsererror');\r\n\t\t\t\tvar messages = (errors.length ? errors[0].getElementsByTagName('div') : []); // Safari\r\n\t\t\t\treportError(!errors.length ? '???' : (messages.length ? messages[0] : errors[0]).firstChild.nodeValue);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar parent = (settings.parent ? $(settings.parent)[0] : wrapper._svg);\r\n\t\t\tvar attrs = {};\r\n\t\t\tfor (var i = 0; i < data.documentElement.attributes.length; i++) {\r\n\t\t\t\tvar attr = data.documentElement.attributes.item(i);\r\n\t\t\t\tif (!(attr.nodeName === 'version' || attr.nodeName.substring(0, 5) === 'xmlns')) {\r\n\t\t\t\t\tattrs[attr.nodeName] = attr.nodeValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\twrapper.configure(parent, attrs, !settings.parent);\r\n\t\t\tvar nodes = data.documentElement.childNodes;\r\n\t\t\tfor (var i = 0; i < nodes.length; i++) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tparent.appendChild(wrapper._svg.ownerDocument.importNode(nodes[i], true));\r\n\t\t\t\t\tif (nodes[i].nodeName === 'script') {\r\n\t\t\t\t\t\t$.globalEval(nodes[i].textContent);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcatch (e) {\r\n\t\t\t\t\twrapper.add(parent, nodes[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!settings.keepRelativeLinks && url.match('/')) {\r\n\t\t\t\tvar base = url.replace(/\\/[^\\/]*$/, '/');\r\n\t\t\t\t$('*', parent).each(function() {\r\n\t\t\t\t\tvar href = $(this).attr('xlink:href');\r\n\t\t\t\t\tif (href && !href.match(/(^[a-z][-a-z0-9+.]*:.*$)|(^\\/.*$)|(^#.*$)/i)) {\r\n\t\t\t\t\t\t$(this).attr('xlink:href', base + href);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (!settings.changeSize) {\r\n\t\t\t\twrapper.configure(parent, {width: size[0], height: size[1]});\r\n\t\t\t}\r\n\t\t\tif (settings.onLoad) {\r\n\t\t\t\tsettings.onLoad.apply(wrapper._container || wrapper._svg, [wrapper]);\r\n\t\t\t}\r\n\t\t};\r\n\t\tif (url.match('<svg')) { // Inline SVG\r\n\t\t\ttry {\r\n\t\t\t\tloadSVG(new DOMParser().parseFromString(url, 'text/xml'));\r\n\t\t\t} catch (e) {\r\n\t\t\t\treportError(e);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse { // Remote SVG\r\n\t\t\t$.ajax({url: url, dataType: 'xml',\r\n\t\t\t\tsuccess: function(xml) {\r\n\t\t\t\t\tloadSVG(xml);\r\n\t\t\t\t}, error: function(http, message, exc) {\r\n\t\t\t\t\treportError(message + (exc ? ' ' + exc.message : ''));\r\n\t\t\t\t}});\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Delete a specified node.\r\n\t\t@param node {SVGElement|jQuery} The drawing node to remove.\r\n\t\t@return {SVGWrapper} This wrapper. */\r\n\tremove: function(node) {\r\n\t\tnode = (node.jquery ? node[0] : node);\r\n\t\tnode.parentNode.removeChild(node);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Delete everything in the current document.\r\n\t\t@param [attrsToo=false] {boolean} <code>true</code> to clear any root attributes as well,\r\n\t\t\t\t<code>false</code> to leave them.\r\n\t\t@return {SVGWrapper} This wrapper. */\r\n\tclear: function(attrsToo) {\r\n\t\tif (attrsToo) {\r\n\t\t\tthis.configure({}, true);\r\n\t\t}\r\n\t\twhile (this._svg.firstChild) {\r\n\t\t\tthis._svg.removeChild(this._svg.firstChild);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Serialise the current diagram into an SVG text document.\r\n\t\t@param [node] {SVGElement} The starting node, or SVG root if not specified .\r\n\t\t@return {string} The SVG as text. */\r\n\ttoSVG: function(node) {\r\n\t\tnode = node || this._svg;\r\n\t\treturn (typeof XMLSerializer === 'undefined' ? this._toSVG(node) : new XMLSerializer().serializeToString(node));\r\n\t},\r\n\r\n\t/** Serialise one node in the SVG hierarchy.\r\n\t\t@private\r\n\t\t@param node {SVGElement} The current node to serialise.\r\n\t\t@return {string} The serialised SVG. */\r\n\t_toSVG: function(node) {\r\n\t\tvar svgDoc = '';\r\n\t\tif (!node) {\r\n\t\t\treturn svgDoc;\r\n\t\t}\r\n\t\tif (node.nodeType === 3) { // Text\r\n\t\t\tsvgDoc = node.nodeValue;\r\n\t\t}\r\n\t\telse if (node.nodeType === 4) { // CDATA\r\n\t\t\tsvgDoc = '<![CDATA[' + node.nodeValue + ']]>';\r\n\t\t}\r\n\t\telse { // Element\r\n\t\t\tsvgDoc = '<' + node.nodeName;\r\n\t\t\tif (node.attributes) {\r\n\t\t\t\tfor (var i = 0; i < node.attributes.length; i++) {\r\n\t\t\t\t\tvar attr = node.attributes.item(i);\r\n\t\t\t\t\tif (!($.trim(attr.nodeValue) === '' || attr.nodeValue.match(/^\\[object/) ||\r\n\t\t\t\t\t\t\tattr.nodeValue.match(/^function/))) {\r\n\t\t\t\t\t\tsvgDoc += ' ' + (attr.namespaceURI === $.svg.xlinkNS ? 'xlink:' : '') +\r\n\t\t\t\t\t\t\tattr.nodeName + '=\"' + attr.nodeValue + '\"';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\t\r\n\t\t\tif (node.firstChild) {\r\n\t\t\t\tsvgDoc += '>';\r\n\t\t\t\tvar child = node.firstChild;\r\n\t\t\t\twhile (child) {\r\n\t\t\t\t\tsvgDoc += this._toSVG(child);\r\n\t\t\t\t\tchild = child.nextSibling;\r\n\t\t\t\t}\r\n\t\t\t\tsvgDoc += '</' + node.nodeName + '>';\r\n\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\tsvgDoc += '/>';\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn svgDoc;\r\n\t}\r\n});\r\n\r\n/** Helper to generate an SVG path.\r\n\t<p>Obtain an instance from the SVGWrapper object.</p>\r\n\t<p>String calls together to generate the path and use its value:</p>\r\n\t@module SVGPath\r\n\t@example var path = root.createPath();\r\n   root.path(null, path.move(100, 100).line(300, 100).line(200, 300).close(), {fill: 'red'});\r\n // or\r\n   root.path(null, path.move(100, 100).line([[300, 100], [200, 300]]).close(), {fill: 'red'}); */\r\nfunction SVGPath() {\r\n\tthis._path = '';\r\n}\r\n\r\n$.extend(SVGPath.prototype, {\r\n\t/** Prepare to create a new path.\r\n\t\t@return {SVGPath} This path. */\r\n\treset: function() {\r\n\t\tthis._path = '';\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Move the pointer to a position.\r\n\t\t@param x {number|number[][]} x-coordinate to move to or x-/y-coordinates to move to.\r\n\t\t@param [y] {number} y-coordinate to move to (omitted if <code>x</code> is array).\r\n\t\t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n\t\t\t\t<code>false</code> for coordinates being absolute.\r\n\t\t@return {SVGPath} This path. */\r\n\tmove: function(x, y, relative) {\r\n\t\trelative = ($.isArray(x) ? y : relative);\r\n\t\treturn this._coords((relative ? 'm' : 'M'), x, y);\r\n\t},\r\n\r\n\t/** Draw a line to a position.\r\n\t\t@param x {number|number[][]} x-coordinate to move to or x-/y-coordinates to move to.\r\n\t\t@param [y] {number} y-coordinate to move to (omitted if <code>x</code> is array).\r\n\t\t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n\t\t\t\t<code>false</code> for coordinates being absolute.\r\n\t\t@return {SVGPath} This path. */\r\n\tline: function(x, y, relative) {\r\n\t\trelative = ($.isArray(x) ? y : relative);\r\n\t\treturn this._coords((relative ? 'l' : 'L'), x, y);\r\n\t},\r\n\r\n\t/** Draw a horizontal line to a position.\r\n\t\t@param x {number|number[]} x-coordinate to draw to or x-coordinates to draw to.\r\n\t\t@param relative {boolean} <code>true</code> for coordinates relative to the current point,\r\n\t\t\t\t<code>false</code> for coordinates being absolute.\r\n\t\t@return {SVGPath} This path. */\r\n\thoriz: function(x, relative) {\r\n\t\tthis._path += (relative ? 'h' : 'H') + ($.isArray(x) ? x.join(' ') : x);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Draw a vertical line to a position.\r\n\t\t@param y {number|number[]} y-coordinate to draw to or y-coordinates to draw to.\r\n\t\t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n\t\t\t\t<code>false</code> for coordinates being absolute.\r\n\t\t@return {SVGPath} This path. */\r\n\tvert: function(y, relative) {\r\n\t\tthis._path += (relative ? 'v' : 'V') + ($.isArray(y) ? y.join(' ') : y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Draw a cubic Bézier curve.\r\n\t\t@param x1 {number|number[][]} x-coordinate of beginning control point or\r\n\t\t\t\tx-/y-coordinates of control and end points to draw to.\r\n\t\t@param [y1] {number} y-coordinate of beginning control point (omitted if <code>x1</code> is array).\r\n\t\t@param [x2] {number} x-coordinate of ending control point (omitted if <code>x1</code> is array).\r\n\t\t@param [y2] {number} y-coordinate of ending control point (omitted if <code>x1</code> is array).\r\n\t\t@param [x] {number} x-coordinate of curve end (omitted if <code>x1</code> is array).\r\n\t\t@param [y] {number} y-coordinate of curve end (omitted if <code>x1</code> is array).\r\n\t\t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n\t\t\t\t<code>false</code> for coordinates being absolute.\r\n\t\t@return {SVGPath} This path. */\r\n\tcurveC: function(x1, y1, x2, y2, x, y, relative) {\r\n\t\trelative = ($.isArray(x1) ? y1 : relative);\r\n\t\treturn this._coords((relative ? 'c' : 'C'), x1, y1, x2, y2, x, y);\r\n\t},\r\n\r\n\t/** Continue a cubic Bézier curve.\r\n\t\t<p>Starting control point is the reflection of the previous end control point.</p>\r\n\t\t@param x2 {number|number[][]} x-coordinate of ending control point or\r\n\t\t\t\tx-/y-coordinates of control and end points to draw to.\r\n\t\t@param [y2] {number} y-coordinate of ending control point (omitted if <code>x2</code> is array).\r\n\t\t@param [x] {number} x-coordinate of curve end (omitted if <code>x2</code> is array).\r\n\t\t@param [y] {number} y-coordinate of curve end (omitted if <code>x2</code> is array).\r\n\t\t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n\t\t\t\t<code>false</code> for coordinates being absolute.\r\n\t\t@return {SVGPath} This path. */\r\n\tsmoothC: function(x2, y2, x, y, relative) {\r\n\t\trelative = ($.isArray(x2) ? y2 : relative);\r\n\t\treturn this._coords((relative ? 's' : 'S'), x2, y2, x, y);\r\n\t},\r\n\r\n\t/** Draw a quadratic Bézier curve.\r\n\t\t@param x1 {number|number[][]} x-coordinate of control point or\r\n\t\t\t\tx-/y-coordinates of control and end points to draw to.\r\n\t\t@param [y1] {number} y-coordinate of control point (omitted if <code>x1</code> is array).\r\n\t\t@param [x] {number} x-coordinate of curve end (omitted if <code>x1</code> is array).\r\n\t\t@param [y] {number} y-coordinate of curve end (omitted if <code>x1</code> is array).\r\n\t\t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n\t\t\t\t<code>false</code> for coordinates being absolute.\r\n\t\t@return {SVGPath} This path. */\r\n\tcurveQ: function(x1, y1, x, y, relative) {\r\n\t\trelative = ($.isArray(x1) ? y1 : relative);\r\n\t\treturn this._coords((relative ? 'q' : 'Q'), x1, y1, x, y);\r\n\t},\r\n\r\n\t/** Continue a quadratic Bézier curve.\r\n\t\t<p>Control point is the reflection of the previous control point.</p>\r\n\t\t@param x {number|number[][]} x-coordinate of curve end or x-/y-coordinates of points to draw to.\r\n\t\t@param [y] {number} y-coordinate of curve end (omitted if <code>x</code> is array).\r\n\t\t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n\t\t\t\t<code>false</code> for coordinates being absolute.\r\n\t\t@return {SVGPath} This path. */\r\n\tsmoothQ: function(x, y, relative) {\r\n\t\trelative = ($.isArray(x) ? y : relative);\r\n\t\treturn this._coords((relative ? 't' : 'T'), x, y);\r\n\t},\r\n\r\n\t/** Generate a path command with (a list of) coordinates.\r\n\t\t@private\r\n\t\t@param cmd {string} The command for the path element.\r\n\t\t@param x1 {number} The first x-coordinate.\r\n\t\t@param y1 {number} The first y-coordinate.\r\n\t\t@param [x2] {number} The second x-coordinate.\r\n\t\t@param [y2] {number} The second y-coordinate.\r\n\t\t@param [x3] {number} The third x-coordinate.\r\n\t\t@param [y3] {number} The third y-coordinate.\r\n\t\t@return {SVGPath} This path. */\r\n\t_coords: function(cmd, x1, y1, x2, y2, x3, y3) {\r\n\t\tif ($.isArray(x1)) {\r\n\t\t\tfor (var i = 0; i < x1.length; i++) {\r\n\t\t\t\tvar cs = x1[i];\r\n\t\t\t\tthis._path += (i === 0 ? cmd : ' ') + cs[0] + ',' + cs[1] + (cs.length < 4 ? '' :\r\n\t\t\t\t\t\t' ' + cs[2] + ',' + cs[3] + (cs.length < 6 ? '': ' ' + cs[4] + ',' + cs[5]));\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._path += cmd + x1 + ',' + y1 + \r\n\t\t\t\t(x2 == null ? '' : ' ' + x2 + ',' + y2 + (x3 == null ? '' : ' ' + x3 + ',' + y3));\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Draw an arc to a position.\r\n\t\t@param rx {number|any[][]} x-radius of arc or x-/y-coordinates and flags for points to draw to.\r\n\t\t@param [ry] {number} y-radius of arc (omitted if <code>rx</code> is array).\r\n\t\t@param [xRotate] {number} x-axis rotation (degrees, clockwise) (omitted if <code>rx</code> is array).\r\n\t\t@param [large] {boolean} <code>true</code> to draw the large part of the arc,\r\n\t\t\t\t<code>false</code> to draw the small part (omitted if <code>rx</code> is array).\r\n\t\t@param [clockwise] {boolean} <code>true</code> to draw the clockwise arc,\r\n\t\t\t\t<code>false</code> to draw the anti-clockwise arc (omitted if <code>rx</code> is array).\r\n\t\t@param [x] {number} x-coordinate of arc end (omitted if <code>rx</code> is array).\r\n\t\t@param [y] {number} y-coordinate of arc end (omitted if <code>rx</code> is array).\r\n\t\t@param [relative=false] {boolean} <code>true</code> for coordinates relative to the current point,\r\n\t\t\t\t<code>false</code> for coordinates being absolute.\r\n\t\t@return {SVGPath} This path. */\r\n\tarc: function(rx, ry, xRotate, large, clockwise, x, y, relative) {\r\n\t\trelative = ($.isArray(rx) ? ry : relative);\r\n\t\tthis._path += (relative ? 'a' : 'A');\r\n\t\tif ($.isArray(rx)) {\r\n\t\t\tfor (var i = 0; i < rx.length; i++) {\r\n\t\t\t\tvar cs = rx[i];\r\n\t\t\t\tthis._path += (i === 0 ? '' : ' ') + cs[0] + ',' + cs[1] + ' ' +\r\n\t\t\t\t\tcs[2] + ' ' + (cs[3] ? '1' : '0') + ',' + (cs[4] ? '1' : '0') + ' ' + cs[5] + ',' + cs[6];\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._path += rx + ',' + ry + ' ' + xRotate + ' ' +\r\n\t\t\t\t(large ? '1' : '0') + ',' + (clockwise ? '1' : '0') + ' ' + x + ',' + y;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Close the current path.\r\n\t\t@return {SVGPath} This path. */\r\n\tclose: function() {\r\n\t\tthis._path += 'z';\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Return the string rendering of the specified path.\r\n\t\t@return {string} The stringified path. */\r\n\tpath: function() {\r\n\t\treturn this._path;\r\n\t}\r\n});\r\n\r\nSVGPath.prototype.moveTo = SVGPath.prototype.move;\r\nSVGPath.prototype.lineTo = SVGPath.prototype.line;\r\nSVGPath.prototype.horizTo = SVGPath.prototype.horiz;\r\nSVGPath.prototype.vertTo = SVGPath.prototype.vert;\r\nSVGPath.prototype.curveCTo = SVGPath.prototype.curveC;\r\nSVGPath.prototype.smoothCTo = SVGPath.prototype.smoothC;\r\nSVGPath.prototype.curveQTo = SVGPath.prototype.curveQ;\r\nSVGPath.prototype.smoothQTo = SVGPath.prototype.smoothQ;\r\nSVGPath.prototype.arcTo = SVGPath.prototype.arc;\r\n\r\n/** Helper to generate an SVG text object.\r\n\t<p>Obtain an instance from the SVGWrapper object.</p>\r\n\t<p>String calls together to generate the text and use its value:</p>\r\n\t@module SVGText\r\n\t@example var text = root.createText();\r\n   root.text(null, x, y, text.string('This is ').\r\n     span('red', {fill: 'red'}).string('!'), {fill: 'blue'}); */\r\nfunction SVGText() {\r\n\tthis._parts = []; // The components of the text object\r\n}\r\n\r\n$.extend(SVGText.prototype, {\r\n\t/** Prepare to create a new text object.\r\n\t\t@return {SVGText} This text object. */\r\n\treset: function() {\r\n\t\tthis._parts = [];\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Add a straight string value.\r\n\t\t@param value {string} The actual text.\r\n\t\t@return {SVGText} This text object. */\r\n\tstring: function(value) {\r\n\t\tthis._parts.push(['text', value]);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Add a separate text span that has its own settings.\r\n\t\t@param value {string} The actual text.\r\n\t\t@param settings {object} The settings for this text.\r\n\t\t@return {SVGText} This text object. */\r\n\tspan: function(value, settings) {\r\n\t\tthis._parts.push(['tspan', value, settings]);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Add a reference to a previously defined text string.\r\n\t\t@param id {string} The ID of the actual text.\r\n\t\t@param settings {object} The settings for this text.\r\n\t\t@return {SVGText} This text object. */\r\n\tref: function(id, settings) {\r\n\t\tthis._parts.push(['tref', id, settings]);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/** Add text drawn along a path.\r\n\t\t@param id {string} The ID of the path.\r\n\t\t@param value {string} The actual text.\r\n\t\t@param settings {object} The settings for this text.\r\n\t\t@return {SVGText} This text object. */\r\n\tpath: function(id, value, settings) {\r\n\t\tthis._parts.push(['textpath', value, $.extend({href: id}, settings || {})]);\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/** Attach the SVG functionality to a jQuery selection.\r\n\t@param [command] {string} The command to run.\r\n\t@param [options] {object} The new settings to use for these SVG instances.\r\n\t@return {jQuery} For chaining further calls. */\r\n$.fn.svg = function(options) {\r\n\tvar otherArgs = Array.prototype.slice.call(arguments, 1);\r\n\tif (typeof options === 'string' && options === 'get') {\r\n\t\treturn $.svg['_' + options + 'SVG'].apply($.svg, [this[0]].concat(otherArgs));\r\n\t}\r\n\treturn this.each(function() {\r\n\t\tif (typeof options === 'string') {\r\n\t\t\t$.svg['_' + options + 'SVG'].apply($.svg, [this].concat(otherArgs));\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$.svg._attachSVG(this, options || {});\r\n\t\t} \r\n\t});\r\n};\r\n\r\n// Singleton primary SVG interface\r\n$.svg = new SVGManager();\r\n\r\n})(jQuery);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/svg/jquery.svg.js","/*\n * jquery.closestchild 0.1.1\n *\n * Author: Andrey Mikhaylov aka lolmaus\n * Email: lolmaus@gmail.com\n *\n */\n\n/* eslint-disable */\n\n ;(function($){\n  $.fn.closestChild = function(selector) {\n    var $children, $results;\n\n    $children = this.children();\n\n    if ($children.length === 0)\n      return $();\n\n    $results = $children.filter(selector);\n\n    if ($results.length > 0)\n      return $results;\n    else\n      return $children.closestChild(selector);\n  };\n})(window.jQuery);\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/vendor/jquery-closestchild.js","// Setup\n\n/* eslint-disable wrap-iife */\n/* eslint-disable complexity */\n/* eslint-disable max-statements */\n\n/* global jQuery */\n\n( function( $ ) {\n\n\tfunction setup( config = {} ) {\n\n\t\t// Create return object\n\t\tconst object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'ready',\n\t\t\t\tbrowserClass: '_browser',\n\t\t\t\tdeviceClass: '_device'\n\t\t\t},\n\t\t\tbrowser: null,\n\t\t\tdevice: null\n\t\t};\n\n\t\t// Overwrite default config\n\t\tObject.assign( object.config, config );\n\n\t\t// Init\n\t\tobject.init = function() {\n\n\t\t\t// Initialize everything on the correct event\n\t\t\t$( document ).on( object.config.initEvent, function() {\n\n\t\t\t\t// Sniff and set browser classes\n\t\t\t\tobject.sniffBrowsers();\n\n\t\t\t\t// Trigger setupfinish event\n\t\t\t\t$( window ).trigger( 'setupfinish' );\n\t\t\t} );\n\t\t};\n\n\t\t// Sniff browsers and add their classes to the body\n\t\tobject.sniffBrowsers = function() {\n\n\t\t\t// Get the user agent\n\t\t\tconst userAgent = window.navigator.userAgent;\n\n\t\t\t// If the user agent contains these browser strings, add their browser class to the body and set the browser variable\n\n\t\t\t// Lynx\n\t\t\tif ( userAgent.indexOf( 'Lynx' ) !== -1 ) {\n\t\t\t\t$( 'body' ).addClass( object.config.browserClass + '--lynx' );\n\t\t\t\tobject.browser = 'lynx';\n\t\t\t}\n\n\t\t\t// Edge\n\t\t\telse if ( userAgent.indexOf( 'Edge' ) !== -1 ) {\n\t\t\t\t$( 'body' ).addClass( object.config.browserClass + '--edge' );\n\t\t\t\tobject.browser = 'edge';\n\t\t\t}\n\n\t\t\t// Chrome\n\t\t\telse if ( userAgent.toLowerCase().indexOf( 'chrome' ) !== -1 ) {\n\t\t\t\t$( 'body' ).addClass( object.config.browserClass + '--chrome' );\n\t\t\t\tobject.browser = 'chrome';\n\t\t\t}\n\n\t\t\t// Safari\n\t\t\telse if ( userAgent.toLowerCase().indexOf( 'safari' ) !== -1 ) {\n\t\t\t\t$( 'body' ).addClass( object.config.browserClass + '--safari' );\n\t\t\t\tobject.browser = 'safari';\n\t\t\t}\n\n\t\t\t// IE\n\t\t\telse if (\n\t\t\t\tuserAgent.indexOf( 'MSIE' ) !== -1\n\t\t\t\t|| userAgent.indexOf( 'Trident' ) !== -1\n\t\t\t) {\n\t\t\t\t$( 'body' ).addClass( object.config.browserClass + '--ie' );\n\t\t\t\tobject.browser = 'ie';\n\t\t\t}\n\n\t\t\t// Gecko\n\t\t\telse if ( userAgent.indexOf( 'Gecko' ) !== -1 ) {\n\t\t\t\t$( 'body' ).addClass( object.config.browserClass + '--gecko' );\n\t\t\t\tobject.browser = 'gecko';\n\t\t\t}\n\n\t\t\t// Opera\n\t\t\telse if ( userAgent.indexOf( 'Opera' ) !== -1 ) {\n\t\t\t\t$( 'body' ).addClass( object.config.browserClass + '--opera' );\n\t\t\t\tobject.browser = 'opera';\n\t\t\t}\n\n\t\t\t// Netscape (what?)\n\t\t\telse if ( userAgent.indexOf( 'Nav' ) !== -1 && userAgent.indexOf( 'Mozilla/4.' ) !== -1 ) {\n\t\t\t\t$( 'body' ).addClass( object.config.browserClass + '--ns4' );\n\t\t\t\tobject.browser = 'ns4';\n\t\t\t}\n\n\t\t\t// Unknown\n\t\t\telse {\n\t\t\t\t$( 'body' ).addClass( object.config.browserClass + '--unknown' );\n\t\t\t}\n\n\t\t\t// If the browser is Safari and there is a 'mobile' string in the UA\n\t\t\tif ( object.browser === 'safari' && userAgent.toLowerCase().indexOf( 'mobile' ) !== -1 ) {\n\t\t\t\t$( 'body' ).addClass( object.config.deviceClass + '--ios' );\n\t\t\t\tobject.device = 'ios';\n\t\t\t}\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the setup\n\tfunction summonSetup( args = {} ) {\n\t\treturn Object.create( setup( args ) );\n\t}\n\n\t// Instantiate and initialize a new setup object\n\tconst theSetup = summonSetup();\n\ttheSetup.init();\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/setup.js","// Launcher\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n\n/* global jQuery */\n\n( function( $ ) {\n\n\tfunction launcher( args = {} ) {\n\n\t\t// Return object\n\t\tconst object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'load',\n\t\t\t\tlauncherClass: 'js-launcher',\n\t\t\t\tparentToDelegateEvents: $( '.site-main' )\n\t\t\t},\n\t\t\tlaunchers: []\n\t\t};\n\n\t\t// Overwrite default config\n\t\tObject.assign( object.config, args );\n\n\t\t// Init\n\t\tobject.init = function() {\n\n\t\t\t// Query up launchers based on selector\n\t\t\tobject.launchers = $( '.' + object.config.launcherClass );\n\n\t\t\t// If there are launchers on the page, initialize\n\t\t\tif ( object.launchers.length ) {\n\n\t\t\t\t// Initialize everything on the correct event\n\t\t\t\t$( window ).on( object.config.initEvent, function() {\n\n\t\t\t\t\t// Wire up events\n\t\t\t\t\tobject.events();\n\t\t\t\t} );\n\t\t\t}\n\t\t};\n\n\t\t// Events\n\t\tobject.events = function() {\n\n\t\t\t// Hovering over one\n\t\t\tobject.config.parentToDelegateEvents.on(\n\t\t\t\t'hover',\n\t\t\t\t'.' + object.config.launcherClass + '__interaction',\n\t\t\t\tobject.handleHover\n\t\t\t);\n\t\t};\n\n\t\t// Hovering into or out\n\t\tobject.handleHover = function( event ) {\n\n\t\t\t// Get the target and its interaction target\n\t\t\tconst target = $( event.currentTarget );\n\t\t\tconst interactionTarget = $( target.data( 'launcher-interaction-target' ) );\n\n\t\t\t// iI the interaction target doesn't exist, return\n\t\t\tif ( !interactionTarget.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Otherwise, add/remove the interaction class\n\t\t\tinteractionTarget[event.type === 'mouseenter' ? 'addClass' : 'removeClass']( 'is-launcher-interacted' );\n\t\t\treturn true;\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the launcher\n\tfunction summonLauncher( args = {} ) {\n\t\treturn Object.create( launcher( args ) );\n\t}\n\n\t// Instantiate and initialize new launcher\n\tconst theLauncher = summonLauncher();\n\ttheLauncher.init();\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/launcher.js","/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n( function( $ ) {\n\n    $('.acf-icon.-minus.small.acf-js-tooltip').on('mouseEnter', function() {\n        $(this).attr('title', 'Remove row');\n    });\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/acf.js","// Slider\n\n/* eslint-disable no-nested-ternary */\n/* eslint-disable no-invalid-this */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-params */\n/* eslint-disable function-name-case */\n\n/* global jQuery */\n\nimport helpers from './helpers';\nimport { theDynamicHeightGuy } from './dynamic-height-guy';\n\n( function( $ ) {\n\n\tfunction slider( args = {} ) {\n\n\t\t// Return object\n\t\tconst object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'load',\n\t\t\t\tsliderClass: 'js-slider',\n\t\t\t\tautomatedSliderInterval: 6000,\n\t\t\t\tparentToDelegateEvents: $( '.site-main' )\n\t\t\t},\n\t\t\tsliders: [],\n\t\t\tautomatedSliders: []\n\t\t};\n\n\t\t// Overwrite default config\n\t\tObject.assign( object.config, args );\n\n\t\t// Init\n\t\tobject.init = function() {\n\n\t\t\t// Query up sliders based on selector\n\t\t\tobject.sliders = $( '.' + object.config.sliderClass );\n\n\t\t\t// Query up automated sliders based on selector\n\t\t\tobject.automatedSliders = $( '.' + object.config.sliderClass + '--automated' );\n\n\t\t\t// If there are sliders on the page, initialize\n\t\t\tif ( object.sliders.length ) {\n\n\t\t\t\t// Initialize everything on the correct event\n\t\t\t\t$( window ).on( object.config.initEvent, function() {\n\n\t\t\t\t\t// Wire up events\n\t\t\t\t\tobject.events();\n\n\t\t\t\t\t// Remove loading states from slides\n\t\t\t\t\ttheDynamicHeightGuy.removeLoadingState();\n\n\t\t\t\t\t// Set active slides\n\t\t\t\t\tobject.sliders.each(\n\t\t\t\t\t\tfunction( index, sliderElement ) {\n\n\t\t\t\t\t\t\t// Get the slider\n\t\t\t\t\t\t\tsliderElement = $( sliderElement );\n\n\t\t\t\t\t\t\t// Get the active slide\n\t\t\t\t\t\t\tconst activeSlide = sliderElement.data( 'slider-index' );\n\n\t\t\t\t\t\t\t// Set it\n\t\t\t\t\t\t\tobject.changeSlide( null, sliderElement, null, activeSlide, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\t// Run automate sliders\n\t\t\t\t\twindow.setInterval( object.automateSliders, object.config.automatedSliderInterval );\n\t\t\t\t} );\n\t\t\t}\n\t\t};\n\n\t\t// Events\n\t\tobject.events = function() {\n\n\t\t\t// Get jQueryatized window\n\t\t\tconst jQueryWindow = $( window );\n\n\t\t\t// Control click listener (delegated from parent)\n\t\t\tobject.config.parentToDelegateEvents.on( 'click', '.' + object.config.sliderClass + '__control', function() {\n\t\t\t\tobject.changeSlide( this );\n\t\t\t\t$(this).closest( '.' + object.config.sliderClass + '--automated' ).addClass( 'is-paused' );\n\t\t\t});\n\n\t\t\t// Resize listener\n\t\t\tjQueryWindow.on( 'resize the-cloisters-on-the-platte-force-slider-resize', function() {\n\t\t\t\tobject.resizeSlider( object.sliders );\n\t\t\t} );\n\n\t\t\t// Focusing into an automated slider pauses it\n\t\t\tobject.config.parentToDelegateEvents.on( 'focusin', '.' + object.config.sliderClass + '--automated', function() {\n\t\t\t\t$(this).addClass( 'is-paused' );\n\t\t\t} );\n\n\t\t\t// Clicking on an arrow advences the controls\n\t\t\tobject.config.parentToDelegateEvents.on( 'click', '.' + object.config.sliderClass + '__arrow', function() {\n\n\t\t\t\t// Gat stuff\n\t\t\t\tconst arrow = $(this);\n\t\t\t\tconst parentSlider = arrow.closest( '.' + object.config.sliderClass );\n\t\t\t\tconst slideCount = parseInt( parentSlider.data( 'slider-slide-count' ), 10 );\n\t\t\t\tconst parentControls = arrow.closest( '.' + object.config.sliderClass + '__controls' );\n\t\t\t\tconst controlIndex = parseInt( parentControls.data( 'control-index' ), 10 );\n\t\t\t\tconst direction = arrow.data( 'control-direction' );\n\n\t\t\t\t// Determine index\n\t\t\t\tconst nextIndex = direction === 'next'\n\t\t\t\t\t? helpers.wrapAround( controlIndex + 1, 0, slideCount - 1 )\n\t\t\t\t\t: helpers.wrapAround( controlIndex - 1, 0, slideCount - 1 );\n\n\t\t\t\t// Scroll to it\n\t\t\t\tobject.scrollToControlIndex( parentSlider, nextIndex, slideCount );\n\t\t\t});\n\n\t\t\t$( '.' + object.config.sliderClass ).on( 'forceslidechange', function( event ) {\n\t\t\t\tif ( 'nextIndex' in event ) {\n\t\t\t\t\tobject.changeSlide( null, $(this), null, event.nextIndex );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\n\t\t// Change slider\n    \tobject.changeSlide = function( control, sliderOverride, directionOverride, indexOverride = null, forceChange = false ) {\n\n\t\t\t// Jqueryatize the control\n\t\t\tcontrol = $( control );\n\n\t\t\t// Set vars\n\t\t\tconst direction = directionOverride || control.data( 'slider-direction' );\n\t\t\tconst controlIndex = control.data( 'slider-target' );\n\t\t\tlet parentSlider = '';\n\t\t\tlet nextIndex = '';\n\n\t\t\t// Determine parent slider\n\t\t\tparentSlider = sliderOverride\n\t\t\t\t? sliderOverride\n\t\t\t\t: control.closest( '.' + object.config.sliderClass );\n\n\t\t\t// Set index and slide count\n\t\t\tconst index = parseInt( parentSlider.data( 'slider-index' ), 10 );\n\t\t\tconst slideCount = parseInt( parentSlider.data( 'slider-slide-count' ), 10 );\n\n\t\t\t// Set next index\n\t\t\tnextIndex = indexOverride !== null\n\t\t\t\t? indexOverride\n\t\t\t\t: direction\n\t\t\t\t\t? direction === 'next'\n\t\t\t\t\t\t? helpers.wrapAround( index + 1, 0, slideCount - 1 )\n\t\t\t\t\t\t: helpers.wrapAround( index - 1, 0, slideCount - 1 )\n\t\t\t\t\t: controlIndex;\n\n\t\t\t// If the current index and the next index are not the same and the window has focus, change the slide\n\t\t\tif ( forceChange || index !== nextIndex && document.hasFocus() ) {\n\n\t\t\t\t// Change slide\n\t\t\t\tobject.setActiveSlide( parentSlider, nextIndex );\n\n\t\t\t\t// If there is not a direction specified, set the active control\n\t\t\t\tobject.setActiveControl( parentSlider, nextIndex );\n\t\t\t}\n\t\t};\n\n\t\t// Get active slide\n\t\tobject.getActiveSlide = function( targetSlider ) {\n\t\t\treturn targetSlider.closestChild( '.' + object.config.sliderClass + '__slide.is-active' );\n\t\t};\n\n\t\t// Get active control\n\t\tobject.getActiveControl = function( targetSlider ) {\n\t\t\treturn targetSlider.closestChild( '.' + object.config.sliderClass + '__control.is-active');\n\t\t};\n\n\t\t// Set active slide\n\t\tobject.setActiveSlide = function( targetSlider, newIndex ) {\n\n\t\t\t// Get slides\n\t\t\tconst slides = targetSlider.closestChild( '.' + object.config.sliderClass + '__slide' );\n\n\t\t\t// Get slides inner\n\t\t\tconst slidesInner = targetSlider.closestChild( '.' + object.config.sliderClass + '__slides-inner' );\n\n\t\t\t// If the slider has popovers, animate the 'left' prop\n\t\t\tif ( targetSlider.hasClass( 'has-popovers' ) ) {\n\t\t\t\tslidesInner.css( 'left', '-' + newIndex * 100 + '%' );\n\t\t\t}\n\n\t\t\t// Otherwise, use transforms\n\t\t\telse {\n\t\t\t\tslidesInner.css( 'transform', 'translate(-' + newIndex * 100 + '%, 0)' );\n\t\t\t}\n\n\t\t\t// Remove active class from active slide, add recently active class\n\t\t\tconst currentSlide = object.getActiveSlide( targetSlider );\n\t\t\tcurrentSlide.removeClass( 'is-active' );\n\n\t\t\t// Get new slide\n\t\t\tconst newSlide = slides.eq( newIndex );\n\n\t\t\t// Add active class\n\t\t\tnewSlide.addClass( 'is-active' );\n\n\t\t\t// Set height of slider\n\t\t\tobject.resizeSlider( targetSlider, true );\n\n\t\t\t// Change index data attribute\n\t\t\ttargetSlider.data( 'slider-index', newIndex );\n\t\t};\n\n\t\t// Set active control\n\t\tobject.setActiveControl = function( targetSlider, newIndex ) {\n\n\t\t\t// Get controls\n\t\t\tconst controls = targetSlider.closestChild( '.' + object.config.sliderClass + '__control' );\n\n\t\t\t// Remove active class from active control, add recently active class\n\t\t\tconst currentControl = object.getActiveControl( targetSlider );\n\t\t\tcontrols.not( currentControl ).removeClass( 'was-just-active' );\n\t\t\tcurrentControl.removeClass( 'is-active' );\n\t\t\tcurrentControl.addClass( 'was-just-active' );\n\n\t\t\t// Add active class to new control\n\t\t\tconst newControl = controls.eq( newIndex );\n\t\t\tnewControl.addClass( 'is-active' );\n\t\t};\n\n\t\t// Resize sliders\n\t\tobject.resizeSlider = function( targetSliders, includeParents = false ) {\n\n\t\t\t// Loop through target sliders\n\t\t\tfor ( let i = 0; i < targetSliders.length; i++ ) {\n\n\t\t\t\t// Get target slider\n\t\t\t\tconst targetSlider = $( targetSliders[i] );\n\n\t\t\t\ttheDynamicHeightGuy.setHeight(\n\t\t\t\t\ttargetSlider.closestChild( '.' + object.config.sliderClass + '__slides' ),\n\t\t\t\t\tobject.getActiveSlide( targetSlider ).find( '.' + object.config.sliderClass + '__slides-inner' ),\n\t\t\t\t\tincludeParents\n\t\t\t\t);\n\n\t\t\t\t// Scroll the active container\n\t\t\t\tif ( targetSlider.hasClass( object.config.sliderClass + '--button' ) ) {\n\t\t\t\t\tobject.scrollToControlIndex(\n\t\t\t\t\t\ttargetSlider,\n\t\t\t\t\t\ttargetSlider.find( '.' + object.config.sliderClass + '__controls' ).data( 'control-index' ),\n\t\t\t\t\t\ttargetSlider.data( 'slider-slide-count' )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Automate slider\n\t\tobject.automateSliders = function() {\n\n\t\t\t// Loop through automated sliders\n\t\t\tfor ( let i = 0; i < object.automatedSliders.length; i++ ) {\n\n\t\t\t\t// Ref slider\n\t\t\t\tconst targetSlider = $( object.automatedSliders[i] );\n\n\t\t\t\tif ( !targetSlider.hasClass( 'is-paused' ) ) {\n\t\t\t\t\tobject.changeSlide( null, targetSlider, 'next' );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Scroll to control index\n\t\tobject.scrollToControlIndex = function( targetSlider, nextIndex, slideCount ) {\n\n\t\t\t// Ref slider\n\t\t\ttargetSlider = $( targetSlider );\n\n\t\t\tconst controlsInner = targetSlider.closestChild( '.' + object.config.sliderClass + '__controls-inner' );\n\t\t\tconst controlsHousing = targetSlider.closestChild( '.' + object.config.sliderClass + '__controls-housing' );\n\t\t\tconst controls = controlsHousing.find( '.' + object.config.sliderClass + '__control' );\n\n\t\t\tconst targetControl = controls.eq(nextIndex);\n\t\t\tconst targetControlPosition = targetControl.position();\n\n\t\t\tconst maxScroll = controlsHousing.width() - controlsInner.width();\n\n\t\t\tvar scrollTo = targetControlPosition.left;\n\n\t\t\t// If the scrollTo is more than the max, make the index 0\n\t\t\tif ( scrollTo > maxScroll ) {\n\t\t\t\tnextIndex = slideCount - 1;\n\t\t\t\tscrollTo = maxScroll;\n\t\t\t}\n\n\t\t\t// Scroll to the control and change the current control index\n\t\t\tcontrolsHousing.css({\n\t\t\t\ttransform: 'translate(-' + Math.min( scrollTo, maxScroll ) + 'px, 0)' /* stylelint-disable-line */ // eslint-disable-line\n\t\t\t});\n\t\t\ttargetSlider.find( '.' + object.config.sliderClass + '__controls' ).data( 'control-index', nextIndex );\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the slider\n\tfunction summonSlider( args = {} ) {\n\t\treturn Object.create( slider( args ) );\n\t}\n\n\t// Instantiate and initialize new slider\n\tconst theSlider = summonSlider();\n\ttheSlider.init();\n\n}( jQuery ) );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/slider.js","// Dynamic Height Guy\n\n/* global jQuery */\n\nfunction dynamicHeightGuy( args = {} ) {\n\n\t// Return object\n\tconst object = {\n\t\tconfig: {\n\t\t\tdynamicHeightGuyClass: 'js-dynamic-height-guy',\n\t\t\tanimationDuration: 625\n\t\t}\n\t};\n\n\t// Overwrite default config\n\tObject.assign( object.config, args );\n\n\t// Remove loading state\n\tobject.removeLoadingState = function( guys ) {\n\t\tjQuery( window ).trigger( 'dynamicheightguyload' );\n\t};\n\n\t// Set height\n\tobject.setHeight = function( targetDynamicHeightGuys, innersOverride = [], includeParents = false ) {\n\n\t\t// Loop through each guy and resize\n\t\tfor ( let i = 0; i < targetDynamicHeightGuys.length; i++ ) {\n\n\t\t\t// Reference and jQueryatize the guy\n\t\t\tconst guy = jQuery( targetDynamicHeightGuys[i] );\n\n\t\t\t// Get the inners except for the excluded ones\n\t\t\tconst inners = innersOverride.length\n\t\t\t\t? innersOverride\n\t\t\t\t: guy.closestChild( '.' + object.config.dynamicHeightGuyClass + '__inner' );\n\n\t\t\t// Get largest height of all inners\n\t\t\tconst largestInnerHeight = Math.max.apply(\n\t\t\t\tnull,\n\t\t\t\tinners.map(\n\t\t\t\t\tfunction( index ) {\n\t\t\t\t\t\treturn jQuery( inners[index] ).outerHeight();\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t);\n\n\t\t\t// Get difference in height of current guy vs largest inner\n\t\t\tconst heightDifference = largestInnerHeight - guy.outerHeight();\n\n\t\t\t// Get guys that are the parents of this one\n\t\t\tconst parentGuys = guy.parents( '.' + object.config.dynamicHeightGuyClass );\n\n\t\t\t// Set the guy's height to the largest height of all inners\n\t\t\tguy.css( 'height', largestInnerHeight );\n\n\t\t\t// If parents are included, modify the height of all parent guys\n\t\t\tif ( includeParents ) {\n\n\t\t\t\t// Loop through the parent guys\n\t\t\t\tfor ( let c = 0; c < parentGuys.length; c++ ) {\n\n\t\t\t\t\t// Reference and jQueryatize the parent guy\n\t\t\t\t\tconst parentGuy = jQuery( parentGuys[c] );\n\n\t\t\t\t\t// Change parent guy's height by the height difference\n\t\t\t\t\tparentGuy.css( 'height', parseInt( parentGuy.css( 'height' ), 10 ) + heightDifference );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// After the guy is done animating, fire the resize event adn animate the\n\t\t\twindow.setTimeout(\n\t\t\t\tfunction() {\n\t\t\t\t\tjQuery( window ).trigger( 'dynamicheightguyresize' );\n\t\t\t\t},\n\t\t\t\tobject.config.animationDuration\n\t\t\t);\n\t\t}\n\t};\n\n\t// If there are no dynamic height guys on the page, trigger the dynamicheightguyload event\n\tjQuery( window ).on( 'load', function() {\n\t\tif ( !jQuery( '.' + object.config.dynamicHeightGuyClass ).length ) {\n\t\t\tjQuery( window ).trigger( 'dynamicheightguyload' );\n\t\t}\n\t} );\n\n\treturn object;\n}\n\n// Instantiate the Dynamic Height Guy\nfunction summonDynamicHeightGuy( args = {} ) {\n\treturn Object.create( dynamicHeightGuy( args ) );\n}\n\nexport const theDynamicHeightGuy = summonDynamicHeightGuy();\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/dynamic-height-guy.js","// Slider\n\n/* eslint-disable no-nested-ternary */\n/* eslint-disable no-invalid-this */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-params */\n/* eslint-disable function-name-case */\n\n/* global jQuery */\n\n( function( $ ) {\n\n\t$('.c-slick-slider--practice-areas').slick({\n\t\tdots: true,\n\t\tprevArrow: false,\n\t\tnextArrow: false,\n\t\tautoplay: true,\n\t\tautoplaySpeed: 10000,\n\t\tspeed: 500,\n\t\tslidesToShow: 2,\n\t\tslidesToScroll: 1,\n        cssEase: 'ease-in-out',\n        responsive: [\n            {\n                breakpoint: 1023,\n                settings: {\n                slidesToShow: 2,\n                slidesToScroll: 1\n                }\n            },\n            {\n                breakpoint: 767,\n                settings: {\n                slidesToShow: 1,\n                slidesToScroll: 1\n                }\n            }\n    \n            ]\n    });\n\n    $('.c-slick-slider--testimonial').slick({\n\t\tdots: true,\n\t\tprevArrow: false,\n\t\tnextArrow: false,\n\t\tautoplay: true,\n\t\tautoplaySpeed: 10000,\n\t\tspeed: 500,\n\t\tslidesToShow: 1,\n\t\tslidesToScroll: 1,\n        cssEase: 'ease-in-out',\n    });\n    \n}( jQuery ) );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/slick-trigger.js","// Scroll animations\n\n/* eslint-disable wrap-iife */\n\n/* global jQuery */\n\nimport helpers from './helpers';\nimport { throttle, debounce } from 'throttle-debounce';\n\n( function( $ ) {\n\n\tfunction scrollAnimation( config = {} ) {\n\n\t\t// Create return object\n\t\tconst object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'load',\n\t\t\t\tscrollAnimationClass: 'js-animation--scroll',\n\t\t\t\tresolverClass: 'is-resolved',\n\t\t\t\tscrollListenerThrottle: 125,\n\t\t\t\tscreenBottomOffset: 30\n\t\t\t},\n\t\t\tisSafari: $( 'body' ).hasClass( '_browser--safari' ),\n\t\t\tanimatedElements: [],\n\t\t\twindowHeight: window.innerHeight\n\t\t};\n\n\t\t// Create object config\n\t\tobject.config = Object.assign( object.config, config );\n\n\t\t// Init\n\t\tobject.init = function() {\n\n\t\t\t// Query up animated elements based on selector\n\t\t\tobject.animatedElements = $( '.' + object.config.scrollAnimationClass );\n\n\t\t\t// If there are any scroll animation elements on the page, initialize\n\t\t\tif ( object.animatedElements.length ) {\n\n\t\t\t\t// Initialize everything on the correct event\n\t\t\t\t$( window ).one( object.config.initEvent, function() {\n\n\t\t\t\t\t// Set whether or not device is Safari\n\t\t\t\t\tobject.isSafari = $( 'body' ).hasClass( '_browser--safari' );\n\n\t\t\t\t\t// Initially set all element offsets\n\t\t\t\t\tobject.setElementOffsets();\n\n\t\t\t\t\t// Wire up animation events\n\t\t\t\t\tobject.events();\n\t\t\t\t} );\n\t\t\t}\n\t\t};\n\n\t\t// Events\n\t\tobject.events = function() {\n\n\t\t\t// Get jQueryatized window\n\t\t\tconst jQueryWindow = $(window);\n\n\t\t\t// Scroll\n\t\t\tjQueryWindow.on( 'scroll.scrollAnimationScroll', throttle( object.config.scrollListenerThrottle, function() {\n\n\t\t\t\t// Process scroll\n\t\t\t\tobject.processScroll();\n\n\t\t\t\t// If there are no animated elements left, remove the scroll event listener\n\t\t\t\tif ( !object.animatedElements.length ) {\n\t\t\t\t\tjQueryWindow.off( 'scroll.scrollAnimationScroll' );\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\t// Resize\n\t\t\tjQueryWindow.on( 'resize.scrollAnimationResize dynamicheightguyresize', debounce( object.config.scrollListenerThrottle, function() {\n\n\t\t\t\t// Reset offsets of elements\n\t\t\t\tobject.setElementOffsets();\n\n\t\t\t\t// Reset windowHeight\n\t\t\t\tobject.windowHeight = window.innerHeight;\n\n\t\t\t\t// Process as if scrolled\n\t\t\t\tobject.processScroll();\n\n\t\t\t\t// If there are no animated elements left, remove the resize event listener\n\t\t\t\tif ( !object.animatedElements.length ) {\n\t\t\t\t\tjQueryWindow.off( 'resize.scrollAnimationResize' );\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\t// Process scroll first time\n\t\t\tobject.processScroll();\n\t\t};\n\n\t\t// Set offsets\n\t\tobject.setElementOffsets = function() {\n\n\t\t\t// Loop through animated elements and set offsets\n\t\t\tfor ( let i = 0; i < object.animatedElements.length; i++ ) {\n\n\t\t\t\t// Reference element\n\t\t\t\tconst element = object.animatedElements[i];\n\n\t\t\t\t// Get jQueryatized element\n\t\t\t\tconst jQueryElement = $( element );\n\n\t\t\t\t// Set up offsets array\n\t\t\t\tif ( !element.offsetForScroll ) {\n\t\t\t\t\telement.offsetForScroll = {};\n\t\t\t\t}\n\n\t\t\t\t// Set offsets\n\t\t\t\telement.offsetForScroll.top = jQueryElement.offset().top;\n\t\t\t\telement.offsetForScroll.bottom = element.offsetForScroll.top + element.getBoundingClientRect().height;\n\t\t\t}\n\t\t};\n\n\t\t// Process the scrolls\n\t\tobject.processScroll = function() {\n\n\t\t\t// Get scrollTop and scrollBottom\n\t\t\tconst scrollTop = window.pageYOffset;\n\t\t\tconst scrollBottom = scrollTop + object.windowHeight;\n\n\t\t\t// Loop through animated elements and resolve them\n\t\t\tfor ( let i = 0; i < object.animatedElements.length; i++ ) {\n\n\t\t\t\t// Get element\n\t\t\t\tconst element = object.animatedElements[i];\n\n\t\t\t\t// Resolve animation on element\n\t\t\t\twindow.setTimeout(\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tobject.resolveAnimation( element, scrollTop, scrollBottom );\n\t\t\t\t\t},\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\t// Resolve animations\n\t\tobject.resolveAnimation = function( element, scrollTop, scrollBottom ) {\n\n\t\t\t// If the element is in the viewport, resolve the animation\n\t\t\tif ( helpers.isInViewport( element.offsetForScroll.top, element.offsetForScroll.bottom, scrollTop, scrollBottom, object.config.screenBottomOffset ) ) {\n\n\t\t\t\t// jQueryatize element\n\t\t\t\tconst jQueryElement = $(element);\n\n\t\t\t\t// If element is an SVG, add the class manually\n\t\t\t\tif ( jQueryElement.is( 'svg, line, circle, path' ) ) {\n\n\t\t\t\t\t// Get current class\n\t\t\t\t\tconst currentClass = jQueryElement.attr( 'class' );\n\n\t\t\t\t\t// Add the class\n\t\t\t\t\tjQueryElement.attr( 'class', currentClass + ' ' + object.config.resolverClass );\n\t\t\t\t}\n\n\t\t\t\t// Otherwise, just add resolver class\n\t\t\t\telse {\n\t\t\t\t\tjQueryElement.addClass( object.config.resolverClass );\n\t\t\t\t}\n\n\t\t\t\t// If the browser is Safari or whatever else makes it suck, make it not suck\n\t\t\t\tobject.makeSafariNotSuck( jQueryElement );\n\n\t\t\t\t// Remove element from animated element array\n\t\t\t\tobject.animatedElements = object.animatedElements.not( element );\n\t\t\t}\n\t\t};\n\n\t\t// Force animation to work on Safari\n\t\tobject.makeSafariNotSuck = function( jQueryElement ) {\n\n\t\t\t// Get the animation name property\n\t\t\tconst animationName = jQueryElement.css( 'animation-name' );\n\n\t\t\t// Determine what to change the animation name to temporarily\n\t\t\tconst tempAnimationName = object.isSafari ? 'none' : '';\n\n\t\t\t// Reset that animation name\n\t\t\tjQueryElement.css( 'animation-name', tempAnimationName );\n\n\t\t\t// Immediately bring it back\n\t\t\twindow.setTimeout(\n\t\t\t\tfunction() {\n\t\t\t\t\tjQueryElement.css( 'animation-name', animationName );\n\t\t\t\t},\n\t\t\t\t0\n\t\t\t);\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the scroll animations\n\tfunction summonScrollAnimation( args = {} ) {\n\t\treturn Object.create( scrollAnimation( args ) );\n\t}\n\n\t// Instantiate and initialize a new scrollAnimations object\n\tconst theScrollAnimation = summonScrollAnimation();\n\ttheScrollAnimation.init();\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/scroll-animation.js","// Scroll Shadow Guy\n\n/* eslint-disable no-invalid-this */\n\n/* global jQuery */\nimport { throttle, debounce } from 'throttle-debounce';\n\n( function( $ ) {\n\n\tfunction scrollShadowGuy( config = {} ) {\n\n\t\t// Return object\n\t\tconst object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'load',\n\t\t\t\tscrollShadowGuyClass: 'js-scroll-shadow-guy',\n\t\t\t\tscrollListenerThrottle: 75\n\t\t\t},\n\t\t\tscrollShadowGuys: [],\n\t\t\tscrollShadowGuyContents: []\n\t\t};\n\n\t\t// Overwrite default config\n\t\tObject.assign( object.config, config );\n\n\t\t// Init\n\t\tobject.init = function() {\n\n\t\t\t// Query up scroll shadow guys based on selector\n\t\t\tobject.scrollShadowGuys = $( '.' + object.config.scrollShadowGuyClass );\n\n\t\t\t// If there are scroll shadow guys on the page, initialize\n\t\t\tif ( object.scrollShadowGuys.length ) {\n\n\t\t\t\t// Query up scroll shadow guy contents based on selector\n\t\t\t\tobject.scrollShadowGuyContents = $( '.' + object.config.scrollShadowGuyClass + '__content' );\n\n\t\t\t\t// Go through and set element scroll widths\n\t\t\t\tobject.setElementScrollWidths();\n\n\t\t\t\t// Initialize everything on the correct event\n\t\t\t\t$( window ).on( object.config.initEvent, object.events );\n\t\t\t}\n\t\t};\n\n\t\t// Events\n\t\tobject.events = function() {\n\n\t\t\t// Get jQueryatized window\n\t\t\tconst jQueryWindow = $( window );\n\n\t\t\t// Place shadow on init event\n\t\t\tobject.placeShadow( object.scrollShadowGuyContents );\n\n\t\t\t// Scroll listener on the content\n\t\t\tobject.scrollShadowGuys.closestChild( '.' + object.config.scrollShadowGuyClass + '__content' )\n\t\t\t\t.on( 'scroll', throttle( object.scrollListenerThrottle, function() {\n\t\t\t\t\tobject.placeShadow( $( this ) );\n\t\t\t\t} )\t);\n\n\t\t\t// Resize event listener\n\t\t\tjQueryWindow.on( 'resize.scrollShadowGuyResize', debounce( object.config.scrollListenerThrottle, function() {\n\n\t\t\t\t// Reset element scroll widths\n\t\t\t\tobject.setElementScrollWidths();\n\n\t\t\t\t// Place shadow\n\t\t\t\tobject.placeShadow( object.scrollShadowGuyContents );\n\t\t\t} ) );\n\t\t};\n\n\t\t// Place the shadows\n\t\tobject.placeShadow = function( targetScrollShadowGuyContents ) {\n\n\t\t\t// Loop through target scroll shadow guy contents\n\t\t\ttargetScrollShadowGuyContents.each( function( index, targetScrollShadowGuyContent ) {\n\n\t\t\t\t// Get scroll difference\n\t\t\t\tconst scrollDifference = targetScrollShadowGuyContent.scrollWidthForScrollShadow - targetScrollShadowGuyContent.widthForScrollShadow;\n\n\t\t\t\t// jQueryatize target scroll shadow guy\n\t\t\t\ttargetScrollShadowGuyContent = $( targetScrollShadowGuyContent );\n\n\t\t\t\t// Get scroll left\n\t\t\t\tconst scrollLeft = targetScrollShadowGuyContent.scrollLeft();\n\n\t\t\t\t// Get parent scrollSliderGuy\n\t\t\t\tconst parentScrollShadowGuy = targetScrollShadowGuyContent.closest( '.' + object.config.scrollShadowGuyClass );\n\n\t\t\t\t// If the scroll difference is zero, it does not need to be scrolled\n\t\t\t\tif ( scrollDifference === 0 ) {\n\n\t\t\t\t\t// Remove other scroll state classes\n\t\t\t\t\tparentScrollShadowGuy.removeClass( 'is-not-scrolled' );\n\t\t\t\t\tparentScrollShadowGuy.removeClass( 'is-partially-scrolled' );\n\t\t\t\t\tparentScrollShadowGuy.removeClass( 'is-fully-scrolled' );\n\t\t\t\t}\n\n\t\t\t\t// Otherwise, if the scroll left is 0, the guy isn't scrolled\n\t\t\t\telse if ( scrollLeft === 0 ) {\n\n\t\t\t\t\t// Remove other scroll state classes\n\t\t\t\t\tparentScrollShadowGuy.removeClass( 'is-partially-scrolled' );\n\t\t\t\t\tparentScrollShadowGuy.removeClass( 'is-fully-scrolled' );\n\n\t\t\t\t\t// Add is not scrolled class\n\t\t\t\t\tparentScrollShadowGuy.addClass( 'is-not-scrolled' );\n\t\t\t\t}\n\n\t\t\t\t// If the scroll left is the same as the scroll difference, the guy is fully scrolled\n\t\t\t\telse if ( scrollLeft === scrollDifference ) {\n\n\t\t\t\t\t// Remove other scroll state classes\n\t\t\t\t\tparentScrollShadowGuy.removeClass( 'is-not-scrolled' );\n\t\t\t\t\tparentScrollShadowGuy.removeClass( 'is-partially-scrolled' );\n\n\t\t\t\t\t// Add is fully scrolled class\n\t\t\t\t\tparentScrollShadowGuy.addClass( 'is-fully-scrolled' );\n\t\t\t\t}\n\n\t\t\t\t// Otherwise, the guy is partially scrolled\n\t\t\t\telse {\n\n\t\t\t\t\t// Remove other scroll state classes\n\t\t\t\t\tparentScrollShadowGuy.removeClass( 'is-not-scrolled' );\n\t\t\t\t\tparentScrollShadowGuy.removeClass( 'is-fully-scrolled' );\n\n\t\t\t\t\t// Add is fully scrolled class\n\t\t\t\t\tparentScrollShadowGuy.addClass( 'is-partially-scrolled' );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\n\t\t// Set element scroll widths\n\t\tobject.setElementScrollWidths = function() {\n\n\t\t\t// Loop through scrollShadowGuys and set scroll widths\n\t\t\tfor ( let i = 0; i < object.scrollShadowGuyContents.length; i++ ) {\n\n\t\t\t\t// Reference element\n\t\t\t\tconst element = object.scrollShadowGuyContents[i];\n\n\t\t\t\t// jQueryatize element\n\t\t\t\tconst jQueryElement = $( element );\n\n\t\t\t\t// Set width\n\t\t\t\telement.widthForScrollShadow = jQueryElement.outerWidth();\n\n\t\t\t\t// Set scroll width\n\t\t\t\telement.scrollWidthForScrollShadow = element.scrollWidth;\n\t\t\t}\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the scroll shadow guy\n\tfunction summonScrollShadowGuy( args = {} ) {\n\t\treturn Object.create( scrollShadowGuy( args ) );\n\t}\n\n\t// Instantiate and initialize new scroll shadow guy\n\tconst theScrollShadowGuy = summonScrollShadowGuy();\n\ttheScrollShadowGuy.init();\n\n}( jQuery ) );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/scroll-shadow-guy.js","/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n( function( $ ) {\n\n\t$(document).ready(function(){\n\t\n        $('ul.tabs li').click(function(){\n            var tab_id = $(this).attr('data-tab');\n    \n            $('ul.tabs li').removeClass('current');\n            $('.tab-content').removeClass('current');\n    \n            $(this).addClass('current');\n            $(\"#\"+tab_id).addClass('current');\n        })\n      \n      $('.left').click(function(){\n        move('left');\n      })\n      $('.right').click(function(){\n        move('right');\n      })\n      function move(to) {\n        var current = $('li.current').index();\n        var total = $('.tabs .tab-link').length;\n        var add;\n        switch (to) {\n          case 'left':\n            add = -1;\n            break;\n          case 'right':\n            add = 1;\n            break;\n        }\n        $('.tabs li.tab-link').eq((current+add)%total).click();\n      }\n    })\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/move-tabs.js","// Embed guy\n\n/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n\n/* global jQuery */\n\n( function( $ ) {\n\n\tfunction embedGuy( args = {} ) {\n\n\t\t// Return object\n\t\tconst object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'load',\n\t\t\t\tembedGuyClass: 'js-embed-guy',\n\t\t\t\tparentToDelegateEvents: $( '.site-main' )\n\t\t\t},\n\t\t\tembedGuys: []\n\t\t};\n\n\t\t// Overwrite default config\n\t\tObject.assign( object.config, args );\n\n\t\t// Init\n\t\tobject.init = function() {\n\n\t\t\t// Query up embed guys based on selector\n\t\t\tobject.embedGuys = $( '.' + object.config.embedGuyClass );\n\n\t\t\t// If there are embed guys on the page, initialize\n\t\t\tif ( object.embedGuys.length ) {\n\n\n\t\t\t\t// Initialize everything on the correct event\n\t\t\t\t$( window ).on( object.config.initEvent, function() {\n\n\t\t\t\t\t// Get all of the embeds and make their defer source their actual source\n\t\t\t\t\tobject.embedGuys\n\t\t\t\t\t\t.find( '.' + object.config.embedGuyClass + '__embed' )\n\t\t\t\t\t\t.each( ( index, embed ) => {\n\t\t\t\t\t\t\tembed = $( embed );\n\t\t\t\t\t\t\tembed.attr( 'src', embed.data( 'defer-src' ) );\n\t\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t}\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the embed guy\n\tfunction summonEmbedGuy( args = {} ) {\n\t\treturn Object.create( embedGuy( args ) );\n\t}\n\n\t// Instantiate and initialize new embed guy\n\tconst theEmbedGuy = summonEmbedGuy();\n\ttheEmbedGuy.init();\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/embed-guy.js","/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n( function( $ ) {\n    $(function(){\n\n\t\t$.each($(\".c-hero .c-hero__controls > li\"), function(index, value){\n\t\t\tvar menu = $(value).data('tab-menu');\n\t\t\tvar tabID = $(value).parent().parent().data('tab-id');\n\t\t\tvar hash = window.location.hash.split(\"#\").join('');\n\t\t\t\n\t\t\tif(hash.length > 0){\n\t\t\t\t\t\n\t\t\t\tif(menu == hash){\n\t\t\t\t\t$('.c-hero[data-tab-id=\"' + tabID + '\"] .c-hero__controls > li[data-tab-menu=\"' + menu + '\"]').addClass('active');\n\t\t\t\t\t$('.c-hero[data-tab-id=\"' + tabID + '\"] .c-hero__content > div[data-tab-content=\"' + menu + '\"]').addClass('view');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\t$('.c-hero[data-tab-id=\"' + tabID + '\"] .c-hero__controls > li:eq(0)').addClass('active');\n\t\t\t\t$('.c-hero[data-tab-id=\"' + tabID + '\"] .c-hero__content > div:eq(0)').addClass('view');\n\t\t\t}\n\t\t});\n\t\t\n\n\n\t\t$(\".c-hero .c-hero__controls > li\").click(function(event){\n\t\t\tvar $this = $(this),\n\t\t\t\t$data = $this.data('tab-menu'),\n\t\t\t\t$tabID = $this.parent().parent().data('tab-id');\n\t\t\tif(!$(this).hasClass(\"active\")){\n\n\t\t\t\twindow.location.hash = $data;\n\t\t\t\t\n\t\t\t\t$('.c-hero[data-tab-id=\"' + $tabID + '\"] .c-hero__controls > li').removeClass('active');\n\t\t\t\t$(this).addClass('active');\n\t\t\t\t\n\t\t\t\t$('.c-hero[data-tab-id=\"' + $tabID + '\"] .c-hero__content > div.view').removeClass('view');\n\t\t\t\t$('.c-hero[data-tab-id=\"' + $tabID + '\"] .c-hero__content > div[data-tab-content=\"' + $data + '\"]').addClass('view');\n\t\t\t}\n\t\t});\n\t});\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/tab.js","// Slider\n\n/* eslint-disable no-nested-ternary */\n/* eslint-disable no-invalid-this */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-params */\n/* eslint-disable function-name-case */\n\n/* global jQuery */\n\n( function( $ ) {\n\n\t$(document).ready(function() {\n\n\t\t$('.nf-field .ninja-forms-field').on({\n\t\t\tfocus: function() {\n\t\t\t\t$('.nf-field .nf-field-label label').addClass('is-focused');\n\t\t\t}\n\t\t});\n\n\t});\n\n}( jQuery ) );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/ninja-forms.js","/* eslint-disable wrap-iife */\n\n/* global jQuery */\n\n// Preloader\n\n(function ($) {\n\n\t$(window).on('load', function () {\n        $(\"#site-preloader\").removeClass('is-active');\n        }, 3500);\n\n})(jQuery);\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/preloader.js","/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n( function( $ ) {\n\n\t$(document).ready(function() {\n\n\t\tfunction toggleSidebar() {\n\t\t\t$('.c-burger-menu').toggleClass('is-active');\n\t\t\t$('.plate1').toggleClass('active');\n            $('#primary-menu').toggleClass('is-active');\n            $('#secondary-menu').toggleClass('is-active');\n            $('.c-header__sub .c-footer__social').toggleClass('is-active');\n\t\t\t$('body').toggleClass('locked-by-menu');\n\t\t}\n\n\t\t$('.c-burger-menu').on('click tap', function() {\n\t\t\ttoggleSidebar();\n\t\t});\n\n\t\t$(document).keyup(function(e) {\n\t\t\tif (e.keyCode === 27) {\n\t\t\t\ttoggleSidebar();\n\t\t\t}\n\t\t});\n\n\t});\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/burger.js","/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n( function( $ ) {\n\n\t$( window ).on( 'scroll', function() {\n\n\t\t// Get header\n\t\tconst header = $( '.c-header' );\n\n\t\t// Add Header\n\t\tif ( window.pageYOffset > 1 ) {\n\t\t\theader.addClass( 'is-scrolled' );\n\t\t}\n\n\t\t// Remove Header\n\t\telse {\n\t\t\theader.removeClass( 'is-scrolled' );\n\t\t}\n\n\t});\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/header.js","/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n( function( $ ) {\n\n\t\n    $('.c-tab').click(function(){\n      var tab_id = $(this).attr('data-tab');\n  \n      $('.c-tab').removeClass('is-current');\n      $('.c-tab__content').removeClass('is-current');\n  \n      $(this).addClass('is-current');\n      $(\"#\"+tab_id).addClass('is-current');\n    })\n  \n  \n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/tabbed.js","/* ========================================================================= */\n/* http://www.jksakura.com/paralmax */\n/**\n * Paralmax is a JQuery responsive parallax plugin for multiple uses, including full size section background image, page parallax elements and more based on different use cases. With many built-in settings, users can set parallax speed, resize background image to full size or not, disable it below specific screen size, offset of the parallax element from it's center. The advantage of Paralmax is that it only adds parallax effet to elements, but not changes their style/looking, so users can easily customise/style any elements with pure HTML or CSS (position, size, image, background, content, etc).\n * @author Jake Zhong\n----------------------  \n-------------| |   / /\n     | |     | |  / /\n     | |     | | / /\n     | |     | |/ /\n     | |     | |\\ \\\n     | |     | | \\ \\\n     | |     | |  \\ \\\n-----  |     | |   \\ \\\n-----------------------\n**/\n/* ========================================================================= */\t\njQuery.fn.extend({paralmax:function(){var t;return $(window).width(),t=$(window).height(),$(this).each(function(){function e(){s()?$(i).data(\"speed\")||0===$(i).data(\"speed\")?d.speed=$(i).data(\"speed\"):d.speed=.5:d.speed=0}function a(){var e,a,r=i;!0===d.resizable&&($(window).width()>d.breakpoint?(e=parseInt($(r).parent().outerHeight()),a=parseInt($(r).parent().offset().top)>parseInt(t)?parseInt(t*d.speed):parseInt($(r).parent().offset().top)*d.speed,$(r).height(e+a)):$(r).height(e))}function r(){var t=i,e=$(\"html\").scrollTop(),a=$(\"body\").scrollTop(),r=(e>a?e:a)-d.start,n=parseInt(r*d.speed)+d.offset;$(t).css({webkitTransform:\"translate3d(0, \"+n+\"px, 0)\",MozTransform:\"translate3d(0, \"+n+\"px, 0)\",msTransform:\"translateY(\"+n+\"px)\",OTransform:\"translate3d(0, \"+n+\"px, 0)\",transform:\"translate3d(0, \"+n+\"px, 0)\"})}function n(){if(!s()){var t=i;$(t).css({webkitTransform:\"translate3d(0, 0, 0)\",MozTransform:\"translate3d(0, 0, 0)\",msTransform:\"translateY(0)\",OTransform:\"translate3d(0, 0, 0)\",transform:\"translate3d(0, 0, 0)\"})}}function s(){return $(window).width()>d.breakpoint}var o,i=this,d={start:(o=$(i).offset()).top,stop:o.top+$(i).outerHeight(),speed:0,resizable:!!$(i).data(\"resize\")&&$(i).data(\"resize\"),breakpoint:$(i).data(\"breakpoint\")?$(i).data(\"breakpoint\"):0,offset:$(i).data(\"offset\")?$(i).data(\"offset\")*$(i).outerHeight():0};e(),a(),n(),s()&&r(),$(window).bind(\"scroll\",function(){s()&&r()}),$(window).bind(\"resize\",function(){e(),a(),n()})})}});\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/paralmax.js","// Scroll animations\n\n/* eslint-disable wrap-iife */\n\n/* global jQuery */\n\nimport simpleParallax from 'simple-parallax-js';\n\n( function( $ ) {\n\n\tvar image = document.getElementsByClassName('js-parallax--scroll');\n    new simpleParallax(image);\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/parallax.js","/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n( function( $ ) {\n\n  const items = document.querySelectorAll(\".accordion a\");\n\n  function toggleAccordion(){\n    this.classList.toggle('active');\n    this.nextElementSibling.classList.toggle('active');\n  }\n  \n  items.forEach(item => item.addEventListener('click', toggleAccordion));\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/accordion.js","/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n/* eslint-disable no-invalid-this */\n\n( function( $ ) {\n\n\t$(document).on( 'nfFormReady', function() {\n\t\tconsole.log('Form is ready');\n\n        $(document).on('focus', '#nf-field-1-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-1-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-1-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-2-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-2-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-2-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-3-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-3-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-3-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-4-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-4-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-4-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-5-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-5-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-5-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-6-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-6-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-6-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-7-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-7-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-7-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-8-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-8-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-8-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n\n        $(document).on('focus', '#nf-field-9-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-9-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-9-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-10-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-10-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-10-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-11-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-11-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-11-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });$(document).on('focus', '#nf-field-12-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-12-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-12-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-13-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-13-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-13-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-14-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-14-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-14-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n\n        $(document).on('focus', '#nf-field-15-wrap', function() {\n\t\t\t$(this).addClass('is-active');\n\t\t});\n\t\t$(document).on('focusout', '#nf-field-15-wrap', function() {\n\t\t\t$(this).removeClass('is-active');\n\t\t});\n\t\t$(document).on('blur', '#nf-field-15-wrap', function() {\n\t\t\tif ($('input.ninja-forms-field').val().length > 0) {\n\t\t\t\t$(this).addClass('is-active');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$(this).removeClass('is-active');\n\t\t\t}\n        });\n        \n\t});\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/form.js","/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n/* eslint-disable no-invalid-this */\n\n( function( $ ) {\n\n\t$('.c-card--practice-area').click(function() {\n\n\t\twindow.location = $(this).find('a')\n\t\t\t.attr('href');\n\t\treturn false;\n\n\t});\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/card-click.js","// Slider\n\n/* eslint-disable no-nested-ternary */\n/* eslint-disable no-invalid-this */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-params */\n/* eslint-disable function-name-case */\n\n/* global jQuery */\n\n( function( $ ) {\n\n\tvar $inputItem = $(\".js-inputWrapper\");\n$inputItem.length && $inputItem.each(function() {\n    var $this = $(this),\n        $input = $this.find(\".formRow--input\"),\n        placeholderTxt = $input.attr(\"placeholder\"),\n        $placeholder;\n    \n    $input.after('<span class=\"placeholder\">' + placeholderTxt + \"</span>\"),\n    $input.attr(\"placeholder\", \"\"),\n    $placeholder = $this.find(\".placeholder\"),\n    \n    $input.val().length ? $this.addClass(\"active\") : $this.removeClass(\"active\"),\n        \n    $input.on(\"focusout\", function() {\n        $input.val().length ? $this.addClass(\"active\") : $this.removeClass(\"active\");\n    }).on(\"focus\", function() {\n        $this.addClass(\"active\");\n    });\n});\n\n}( jQuery ) );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/form-row.js","/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n/* eslint-disable no-invaid-this */\n\n( function( $ ) {\n\n\t$( '.js--sliding-link' ).click(function(e) {\n\t\te.preventDefault();\n\t\tvar aid = $(this).attr( 'href' );\n\t\t$('html,body').animate({ scrollTop: $(aid).offset().top }, 'slow');\n\t});\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/sliding-link.js","// Slider\n\n/* eslint-disable no-nested-ternary */\n/* eslint-disable no-invalid-this */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-params */\n/* eslint-disable function-name-case */\n\n/* global jQuery */\n\n( function( $ ) {\n\n\t// $( '#contactform' ).on( 'submit', function(e) {\n\t//     var form_data = $( this ).serializeArray();\n\t\t \n\t//     // Here we add our nonce (The one we created on our functions.php. WordPress needs this code to verify if the request comes from a valid source.\n\t//     form_data.push( { \"name\" : \"security\", \"value\" : ajax_nonce } );\n\t \n\t//     // Here is the ajax petition.\n\t//     $.ajax({\n\t//         url : ajax_url, // Here goes our WordPress AJAX endpoint.\n\t//         type : 'post',\n\t//         data: form_data,\n\t//         success : function( response ) {\n\t//             // You can craft something here to handle the message return\n\t//             alert( response );\n\t//         },\n\t//         fail : function( err ) {\n\t//             // You can craft something here to handle an error if something goes wrong when doing the AJAX request.\n\t//             alert( \"There was an error: \" + err );\n\t//         }\n\t//     });\n\t\t \n\t//     // This return prevents the submit event to refresh the page.\n\t//     return false;\n\n\t// });\n\n\tvar submit = 0;\n\t$(document).ready(function () {\n\t\t$('body').bind('submit', '#contactform', function(e) {\n\t\t\tif ( submit === 0 ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tvar newCustomerForm = $('#contactform').serialize();\n\t\t\t\tif ( $('#agree').is(':checked') ) { \n\t\t\t\t\t$.ajax({\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\turl: '/wp-admin/admin-ajax.php',\n\t\t\t\t\t\tdata: newCustomerForm,\n\t\t\t\t\t\tsuccess: function(data) {\n\t\t\t\t\t\t\tsubmit = 1;\n\t\t\t\t\t\t\t$('#action').remove();\n\t\t\t\t\t\t\t$('#contactform').submit();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\t// $('#contactform')\n\t});\n\n}( jQuery ) );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/ajax.js","/* eslint-disable no-undef */\n/* eslint-disable wrap-iife */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable max-statements */\n\n// import 'jquery-background-video';\n\nimport debounce from './throttle-debounce';\n\n( function( $ ) {\n\n    function backgroundVideo( args = {} ) {\n\n\t\t// Return object\n\t\tconst object = {\n\t\t\tconfig: {\n\t\t\t\tinitEvent: 'setupfinish',\n\t\t\t\tbackgroundVideoClassName: 'o-background-video',\n\t\t\t\tbackgroundVideoJsClassName: 'js-background-video',\n\t\t\t\tresizeListenerDebounce: 25\n\t\t\t},\n\t\t\tbackgroundVideos: []\n\t\t};\n\n\t\t// Overwrite default config\n\t\tObject.assign( object.config, args );\n\n\t\t// Init\n\t\tobject.init = function() {\n\n\t\t\t// Query up background videos\n\t\t\tobject.backgroundVideos = $( '.' + object.config.backgroundVideoJsClassName );\n\n\t\t\t// Run init event\n\t\t\t$( window ).on( object.config.initEvent, function() {\n\n\t\t\t\t// If there are background videos on teh page, initialize\n\t\t\t\tif ( object.backgroundVideos.length ) {\n\n\t\t\t\t\t// Wire up events\n\t\t\t\t\tobject.events();\n\n\t\t\t\t\t// Resize videos initially\n\t\t\t\t\tobject.resizeVideos();\n\t\t\t\t}\n\n\t\t\t\t// Trigger background video finish event\n\t\t\t\t$( window ).trigger( 'backgroundvideofinish' );\n\t\t\t} );\n\t\t};\n\n\t\t// Wire up events\n\t\tobject.events = function() {\n\n\t\t\t// Resize\n\t\t\t$( window ).on( 'resize.backgroundVideoResize focus.backgroundVideoResize', $.debounce( object.resizeListenerDebounce, object.resizeVideos ) );\n\t\t\tobject.backgroundVideos.find( 'video' ).on( 'resize', object.resizeVideos );\n\t\t};\n\n\t\t// Resize the videos\n\t\tobject.resizeVideos = function() {\n\n\t\t\t// Loop through background videos\n\t\t\tfor ( let i = 0; i < object.backgroundVideos.length; i++ ) {\n\n\t\t\t\t// Reference container\n\t\t\t\tconst container = $( object.backgroundVideos[i] );\n\n\t\t\t\t// Get video\n\t\t\t\tconst video = container.find( '.' + object.config.backgroundVideoJsClassName + '__video' ).get( 0 );\n\n\t\t\t\t// Get bounding client rect of container\n\t\t\t\tconst containerRect = container.get( 0 ).getBoundingClientRect();\n\n\t\t\t\t// Get aspect ratio of container\n\t\t\t\tconst containerAspectRatio = containerRect.height / containerRect.width;\n\n\t\t\t\t// If aspect ratio of the video\n\t\t\t\tconst videoAspectRatio = video.videoHeight / video.videoWidth;\n\n\t\t\t\t// If the aspect ratio of the container is less than or equal to the aspect ratio of the video, set the container class\n\t\t\t\tif ( containerAspectRatio <= videoAspectRatio ) {\n\t\t\t\t\tcontainer.addClass( object.config.backgroundVideoClassName + '--landscape' );\n\t\t\t\t}\n\n\t\t\t\t// Otherwise, remove it\n\t\t\t\telse {\n\t\t\t\t\tcontainer.removeClass( object.config.backgroundVideoClassName + '--landscape' );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn object;\n\t}\n\n\t// Instantiate the background videos\n\tfunction summonBackgroundVideo( args = {} ) {\n\t\treturn Object.create( backgroundVideo( args ) );\n\t}\n\n\t// Instantiate and initialize a new backgroundVideo object\n\tconst theBackgroundVideo = summonBackgroundVideo();\n\ttheBackgroundVideo.init();\n\n\n} )( jQuery );\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/background-video.js","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param  {Number}    delay          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}   [noTrailing]   Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n *                                    throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n *                                    after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n *                                    the internal counter is reset)\n * @param  {Function}  callback       A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                    to `callback` when the throttled-function is executed.\n * @param  {Boolean}   [debounceMode] If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n *                                    schedule `callback` to execute after `delay` ms.\n *\n * @return {Function}  A new, throttled, function.\n */\nfunction throttle ( delay, noTrailing, callback, debounceMode ) {\n\n\t/*\n\t * After wrapper has stopped being called, this timeout ensures that\n\t * `callback` is executed at the proper times in `throttle` and `end`\n\t * debounce modes.\n\t */\n\tvar timeoutID;\n\n\t// Keep track of the last time `callback` was executed.\n\tvar lastExec = 0;\n\n\t// `noTrailing` defaults to falsy.\n\tif ( typeof noTrailing !== 'boolean' ) {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t/*\n\t * The `wrapper` function encapsulates all of the throttling / debouncing\n\t * functionality and when executed will limit the rate at which `callback`\n\t * is executed.\n\t */\n\tfunction wrapper () {\n\n\t\tvar self = this;\n\t\tvar elapsed = Number(new Date()) - lastExec;\n\t\tvar args = arguments;\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec () {\n\t\t\tlastExec = Number(new Date());\n\t\t\tcallback.apply(self, args);\n\t\t}\n\n\t\t/*\n\t\t * If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t * to allow future `callback` executions.\n\t\t */\n\t\tfunction clear () {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif ( debounceMode && !timeoutID ) {\n\t\t\t/*\n\t\t\t * Since `wrapper` is being called for the first time and\n\t\t\t * `debounceMode` is true (at begin), execute `callback`.\n\t\t\t */\n\t\t\texec();\n\t\t}\n\n\t\t// Clear any existing timeout.\n\t\tif ( timeoutID ) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\n\t\tif ( debounceMode === undefined && elapsed > delay ) {\n\t\t\t/*\n\t\t\t * In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t * `callback`.\n\t\t\t */\n\t\t\texec();\n\n\t\t} else if ( noTrailing !== true ) {\n\t\t\t/*\n\t\t\t * In trailing throttle mode, since `delay` time has not been\n\t\t\t * exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t * recent execution.\n\t\t\t *\n\t\t\t * If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t * after `delay` ms.\n\t\t\t *\n\t\t\t * If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t * execute after `delay` ms.\n\t\t\t */\n\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n\t\t}\n\n\t}\n\n\t// Return the wrapper function.\n\treturn wrapper;\n\n}\n\n/* eslint-disable no-undefined */\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param  {Number}   delay         A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}  [atBegin]     Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n *                                  after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n *                                  (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param  {Function} callback      A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                  to `callback` when the debounced-function is executed.\n *\n * @return {Function} A new, debounced function.\n */\nfunction debounce ( delay, atBegin, callback ) {\n\treturn callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n}\n\nexport { throttle, debounce };\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/inc/throttle-debounce/index.esm.js"],"sourceRoot":""}