{ "version": 3, "sources": ["../../node_modules/ng-infinite-scroll/build/ng-infinite-scroll.js", "../../node_modules/angulartics/src/angulartics.js", "../../node_modules/angulartics/src/index.js", "../../node_modules/angulartics-google-analytics/lib/angulartics-ga.js", "../../node_modules/angulartics-google-analytics/lib/index.js", "../../node_modules/angulartics-scroll/lib/angulartics-scroll.js", "../../node_modules/angulartics-scroll/lib/index.js", "../../node_modules/hammerjs/hammer.js", "../../assets/scripts/src/application.ts", "../../assets/scripts/src/fliptoWeb.ts", "../../assets/scripts/src/constants/_call-times.ts", "../../assets/scripts/src/constants/_configuration.ts", "../../assets/scripts/src/constants/_events.ts", "../../assets/scripts/src/constants/_time-zones.ts", "../../assets/scripts/src/_router.ts", "../../assets/components/layout/head/head.controller.ts", "../../assets/components/about/team-member.directive.ts", "../../assets/components/blog/blog-article.controller.ts", "../../assets/components/blog/blog.controller.ts", "../../assets/components/contact-forms/contact/contact.controller.ts", "../../assets/components/contact-forms/get-started/get-started.controller.ts", "../../assets/components/contact-forms/get-started/get-started.directive.ts", "../../assets/components/contact-forms/partner-signup/partner-signup.controller.ts", "../../assets/components/contact-forms/partner-portal-signup/partner-portal-signup.controller.ts", "../../assets/components/features/carousel/carousel-features.directive.ts", "../../assets/components/features/going-live/going-live.controller.ts", "../../assets/components/features/management/management.controller.ts", "../../assets/components/features/photo-advocacy/photo-advocacy.controller.ts", "../../assets/components/features/post-stay-advocacy/poststay.controller.ts", "../../assets/components/features/pre-stay-advocacy/prestay.controller.ts", "../../assets/components/features/superchargers/superchargers.controller.ts", "../../assets/components/features/features.controller.ts", "../../assets/components/intro/positional-class.ts", "../../assets/components/layout/navigation/navigation.controller.ts", "../../assets/components/error-pages/404/404.controller.ts", "../../assets/components/intro/contacts.constant.ts", "../../assets/components/intro/representatives.service.ts", "../../assets/components/intro/intro.controller.ts", "../../assets/components/intro/introPersonalized.controller.ts", "../../assets/components/content/webisode/fuel-reimagined-marketing/webisodeFuel.controller.ts", "../../assets/scripts/src/animations/_carousels.ts", "../../assets/scripts/src/animations/_modal.ts", "../../assets/scripts/src/animations/_navigation.ts", "../../assets/scripts/src/animations/_view.ts", "../../assets/scripts/src/directives/loadingAnimation.ts", "../../assets/scripts/src/directives/spinner.ts", "../../assets/scripts/src/directives/squashingMenu.ts", "../../assets/scripts/src/directives/hoverClass.ts", "../../assets/scripts/src/directives/hoverPanels.ts", "../../assets/scripts/src/directives/canvasSlides.ts", "../../assets/scripts/src/directives/sections.ts", "../../assets/scripts/src/directives/carouselCards.ts", "../../assets/scripts/src/services/_api-service.ts", "../../assets/scripts/src/services/api-service-news.ts", "../../assets/scripts/src/services/_server.ts", "../../assets/scripts/src/services/copyToClipboard.ts", "../../assets/scripts/src/services/userAgent.ts"], "sourcesContent": ["/* ng-infinite-scroll - v1.3.0 - 2016-06-30 */\nangular.module('infinite-scroll', []).value('THROTTLE_MILLISECONDS', null).directive('infiniteScroll', [\n '$rootScope', '$window', '$interval', 'THROTTLE_MILLISECONDS', function($rootScope, $window, $interval, THROTTLE_MILLISECONDS) {\n return {\n scope: {\n infiniteScroll: '&',\n infiniteScrollContainer: '=',\n infiniteScrollDistance: '=',\n infiniteScrollDisabled: '=',\n infiniteScrollUseDocumentBottom: '=',\n infiniteScrollListenForEvent: '@'\n },\n link: function(scope, elem, attrs) {\n var changeContainer, checkInterval, checkWhenEnabled, container, handleInfiniteScrollContainer, handleInfiniteScrollDisabled, handleInfiniteScrollDistance, handleInfiniteScrollUseDocumentBottom, handler, height, immediateCheck, offsetTop, pageYOffset, scrollDistance, scrollEnabled, throttle, unregisterEventListener, useDocumentBottom, windowElement;\n windowElement = angular.element($window);\n scrollDistance = null;\n scrollEnabled = null;\n checkWhenEnabled = null;\n container = null;\n immediateCheck = true;\n useDocumentBottom = false;\n unregisterEventListener = null;\n checkInterval = false;\n height = function(elem) {\n elem = elem[0] || elem;\n if (isNaN(elem.offsetHeight)) {\n return elem.document.documentElement.clientHeight;\n } else {\n return elem.offsetHeight;\n }\n };\n offsetTop = function(elem) {\n if (!elem[0].getBoundingClientRect || elem.css('none')) {\n return;\n }\n return elem[0].getBoundingClientRect().top + pageYOffset(elem);\n };\n pageYOffset = function(elem) {\n elem = elem[0] || elem;\n if (isNaN(window.pageYOffset)) {\n return elem.document.documentElement.scrollTop;\n } else {\n return elem.ownerDocument.defaultView.pageYOffset;\n }\n };\n handler = function() {\n var containerBottom, containerTopOffset, elementBottom, remaining, shouldScroll;\n if (container === windowElement) {\n containerBottom = height(container) + pageYOffset(container[0].document.documentElement);\n elementBottom = offsetTop(elem) + height(elem);\n } else {\n containerBottom = height(container);\n containerTopOffset = 0;\n if (offsetTop(container) !== void 0) {\n containerTopOffset = offsetTop(container);\n }\n elementBottom = offsetTop(elem) - containerTopOffset + height(elem);\n }\n if (useDocumentBottom) {\n elementBottom = height((elem[0].ownerDocument || elem[0].document).documentElement);\n }\n remaining = elementBottom - containerBottom;\n shouldScroll = remaining <= height(container) * scrollDistance + 1;\n if (shouldScroll) {\n checkWhenEnabled = true;\n if (scrollEnabled) {\n if (scope.$$phase || $rootScope.$$phase) {\n return scope.infiniteScroll();\n } else {\n return scope.$apply(scope.infiniteScroll);\n }\n }\n } else {\n if (checkInterval) {\n $interval.cancel(checkInterval);\n }\n return checkWhenEnabled = false;\n }\n };\n throttle = function(func, wait) {\n var later, previous, timeout;\n timeout = null;\n previous = 0;\n later = function() {\n previous = new Date().getTime();\n $interval.cancel(timeout);\n timeout = null;\n return func.call();\n };\n return function() {\n var now, remaining;\n now = new Date().getTime();\n remaining = wait - (now - previous);\n if (remaining <= 0) {\n $interval.cancel(timeout);\n timeout = null;\n previous = now;\n return func.call();\n } else {\n if (!timeout) {\n return timeout = $interval(later, remaining, 1);\n }\n }\n };\n };\n if (THROTTLE_MILLISECONDS != null) {\n handler = throttle(handler, THROTTLE_MILLISECONDS);\n }\n scope.$on('$destroy', function() {\n container.unbind('scroll', handler);\n if (unregisterEventListener != null) {\n unregisterEventListener();\n unregisterEventListener = null;\n }\n if (checkInterval) {\n return $interval.cancel(checkInterval);\n }\n });\n handleInfiniteScrollDistance = function(v) {\n return scrollDistance = parseFloat(v) || 0;\n };\n scope.$watch('infiniteScrollDistance', handleInfiniteScrollDistance);\n handleInfiniteScrollDistance(scope.infiniteScrollDistance);\n handleInfiniteScrollDisabled = function(v) {\n scrollEnabled = !v;\n if (scrollEnabled && checkWhenEnabled) {\n checkWhenEnabled = false;\n return handler();\n }\n };\n scope.$watch('infiniteScrollDisabled', handleInfiniteScrollDisabled);\n handleInfiniteScrollDisabled(scope.infiniteScrollDisabled);\n handleInfiniteScrollUseDocumentBottom = function(v) {\n return useDocumentBottom = v;\n };\n scope.$watch('infiniteScrollUseDocumentBottom', handleInfiniteScrollUseDocumentBottom);\n handleInfiniteScrollUseDocumentBottom(scope.infiniteScrollUseDocumentBottom);\n changeContainer = function(newContainer) {\n if (container != null) {\n container.unbind('scroll', handler);\n }\n container = newContainer;\n if (newContainer != null) {\n return container.bind('scroll', handler);\n }\n };\n changeContainer(windowElement);\n if (scope.infiniteScrollListenForEvent) {\n unregisterEventListener = $rootScope.$on(scope.infiniteScrollListenForEvent, handler);\n }\n handleInfiniteScrollContainer = function(newContainer) {\n if ((newContainer == null) || newContainer.length === 0) {\n return;\n }\n if (newContainer.nodeType && newContainer.nodeType === 1) {\n newContainer = angular.element(newContainer);\n } else if (typeof newContainer.append === 'function') {\n newContainer = angular.element(newContainer[newContainer.length - 1]);\n } else if (typeof newContainer === 'string') {\n newContainer = angular.element(document.querySelector(newContainer));\n }\n if (newContainer != null) {\n return changeContainer(newContainer);\n } else {\n throw new Error(\"invalid infinite-scroll-container attribute.\");\n }\n };\n scope.$watch('infiniteScrollContainer', handleInfiniteScrollContainer);\n handleInfiniteScrollContainer(scope.infiniteScrollContainer || []);\n if (attrs.infiniteScrollParent != null) {\n changeContainer(angular.element(elem.parent()));\n }\n if (attrs.infiniteScrollImmediateCheck != null) {\n immediateCheck = scope.$eval(attrs.infiniteScrollImmediateCheck);\n }\n return checkInterval = $interval((function() {\n if (immediateCheck) {\n handler();\n }\n return $interval.cancel(checkInterval);\n }));\n }\n };\n }\n]);\n\nif (typeof module !== \"undefined\" && typeof exports !== \"undefined\" && module.exports === exports) {\n module.exports = 'infinite-scroll';\n}\n", "/**\n * @license Angulartics\n * (c) 2013 Luis Farzati http://angulartics.github.io/\n * License: MIT\n */\n(function(angular, analytics) {\n'use strict';\n\nvar angulartics = window.angulartics || (window.angulartics = {});\nangulartics.waitForVendorCount = 0;\nangulartics.waitForVendorApi = function (objectName, delay, containsField, registerFn, onTimeout) {\n if (!onTimeout) { angulartics.waitForVendorCount++; }\n if (!registerFn) { registerFn = containsField; containsField = undefined; }\n if (!Object.prototype.hasOwnProperty.call(window, objectName) || (containsField !== undefined && window[objectName][containsField] === undefined)) {\n setTimeout(function () { angulartics.waitForVendorApi(objectName, delay, containsField, registerFn, true); }, delay);\n }\n else {\n angulartics.waitForVendorCount--;\n registerFn(window[objectName]);\n }\n};\n\n/**\n * @ngdoc overview\n * @name angulartics\n */\nangular.module('angulartics', [])\n.provider('$analytics', $analytics)\n.run(['$rootScope', '$window', '$analytics', '$injector', $analyticsRun])\n.directive('analyticsOn', ['$analytics', analyticsOn])\n.config(['$provide', exceptionTrack]);\n\nfunction $analytics() {\n var vm = this;\n\n var settings = {\n pageTracking: {\n autoTrackFirstPage: true,\n autoTrackVirtualPages: true,\n trackRelativePath: false,\n trackRoutes: true,\n trackStates: true,\n autoBasePath: false,\n basePath: '',\n excludedRoutes: [],\n queryKeysWhitelisted: [],\n queryKeysBlacklisted: [],\n filterUrlSegments: []\n },\n eventTracking: {},\n bufferFlushDelay: 1000, // Support only one configuration for buffer flush delay to simplify buffering\n trackExceptions: false,\n optOut: false,\n developerMode: false // Prevent sending data in local/development environment\n };\n\n // List of known handlers that plugins can register themselves for\n var knownHandlers = [\n 'pageTrack',\n 'eventTrack',\n 'exceptionTrack',\n 'transactionTrack',\n 'setAlias',\n 'setUsername',\n 'setUserProperties',\n 'setUserPropertiesOnce',\n 'setSuperProperties',\n 'setSuperPropertiesOnce',\n 'incrementProperty',\n 'userTimings',\n 'clearCookies'\n ];\n // Cache and handler properties will match values in 'knownHandlers' as the buffering functons are installed.\n var cache = {};\n var handlers = {};\n var handlerOptions = {};\n\n // General buffering handler\n function bufferedHandler(handlerName){\n return function(){\n if(angulartics.waitForVendorCount){\n if(!cache[handlerName]){ cache[handlerName] = []; }\n cache[handlerName].push(arguments);\n }\n };\n }\n\n // As handlers are installed by plugins, they get pushed into a list and invoked in order.\n function updateHandlers(handlerName, fn, options){\n if(!handlers[handlerName]){\n handlers[handlerName] = [];\n }\n handlers[handlerName].push(fn);\n handlerOptions[fn] = options;\n return function(){\n if(!this.settings.optOut) {\n var handlerArgs = Array.prototype.slice.apply(arguments);\n return this.$inject(['$q', angular.bind(this, function($q) {\n return $q.all(handlers[handlerName].map(function(handlerFn) {\n var options = handlerOptions[handlerFn] || {};\n if (options.async) {\n var deferred = $q.defer();\n var currentArgs = angular.copy(handlerArgs);\n currentArgs.unshift(deferred.resolve);\n handlerFn.apply(this, currentArgs);\n return deferred.promise;\n } else{\n return $q.when(handlerFn.apply(this, handlerArgs));\n }\n }, this));\n })]);\n }\n };\n }\n\n // The api (returned by this provider) gets populated with handlers below.\n var api = {\n settings: settings\n };\n\n // Opt in and opt out functions\n api.setOptOut = function(optOut) {\n this.settings.optOut = optOut;\n triggerRegister();\n };\n\n api.getOptOut = function() {\n return this.settings.optOut;\n };\n\n\n // Will run setTimeout if delay is > 0\n // Runs immediately if no delay to make sure cache/buffer is flushed before anything else.\n // Plugins should take care to register handlers by order of precedence.\n function onTimeout(fn, delay){\n if(delay){\n setTimeout(fn, delay);\n } else {\n fn();\n }\n }\n\n var provider = {\n $get: ['$injector', function($injector) {\n return apiWithInjector($injector);\n }],\n api: api,\n settings: settings,\n virtualPageviews: function (value) { this.settings.pageTracking.autoTrackVirtualPages = value; },\n trackStates: function (value) { this.settings.pageTracking.trackStates = value; },\n trackRoutes: function (value) { this.settings.pageTracking.trackRoutes = value; },\n excludeRoutes: function(routes) { this.settings.pageTracking.excludedRoutes = routes; },\n queryKeysWhitelist: function(keys) { this.settings.pageTracking.queryKeysWhitelisted = keys; },\n queryKeysBlacklist: function(keys) { this.settings.pageTracking.queryKeysBlacklisted = keys; },\n filterUrlSegments: function(filters) { this.settings.pageTracking.filterUrlSegments = filters; },\n firstPageview: function (value) { this.settings.pageTracking.autoTrackFirstPage = value; },\n withBase: function (value) {\n this.settings.pageTracking.basePath = (value) ? angular.element(document).find('base').attr('href') : '';\n },\n withAutoBase: function (value) { this.settings.pageTracking.autoBasePath = value; },\n trackExceptions: function (value) { this.settings.trackExceptions = value; },\n developerMode: function(value) { this.settings.developerMode = value; }\n };\n\n // General function to register plugin handlers. Flushes buffers immediately upon registration according to the specified delay.\n function register(handlerName, fn, options){\n // Do not add a handler if developerMode is true\n if (settings.developerMode) {\n return;\n }\n api[handlerName] = updateHandlers(handlerName, fn, options);\n var handlerSettings = settings[handlerName];\n var handlerDelay = (handlerSettings) ? handlerSettings.bufferFlushDelay : null;\n var delay = (handlerDelay !== null) ? handlerDelay : settings.bufferFlushDelay;\n angular.forEach(cache[handlerName], function (args, index) {\n onTimeout(function () { fn.apply(this, args); }, index * delay);\n });\n }\n\n function capitalize(input) {\n return input.replace(/^./, function (match) {\n return match.toUpperCase();\n });\n }\n\n //provide a method to inject services into handlers\n var apiWithInjector = function(injector) {\n return angular.extend(api, {\n '$inject': injector.invoke\n });\n };\n\n // Adds to the provider a 'register#{handlerName}' function that manages multiple plugins and buffer flushing.\n function installHandlerRegisterFunction(handlerName){\n var registerName = 'register'+capitalize(handlerName);\n provider[registerName] = function(fn, options){\n register(handlerName, fn, options);\n };\n api[handlerName] = updateHandlers(handlerName, bufferedHandler(handlerName));\n }\n\n function startRegistering(_provider, _knownHandlers, _installHandlerRegisterFunction) {\n angular.forEach(_knownHandlers, _installHandlerRegisterFunction);\n\n for (var key in _provider) {\n vm[key] = _provider[key];\n }\n }\n\n // Allow $angulartics to trigger the register to update opt in/out\n var triggerRegister = function() {\n startRegistering(provider, knownHandlers, installHandlerRegisterFunction);\n };\n\n // Initial register\n startRegistering(provider, knownHandlers, installHandlerRegisterFunction);\n\n}\n\nfunction $analyticsRun($rootScope, $window, $analytics, $injector) {\n\n function matchesExcludedRoute(url) {\n for (var i = 0; i < $analytics.settings.pageTracking.excludedRoutes.length; i++) {\n var excludedRoute = $analytics.settings.pageTracking.excludedRoutes[i];\n if ((excludedRoute instanceof RegExp && excludedRoute.test(url)) || url.indexOf(excludedRoute) > -1) {\n return true;\n }\n }\n return false;\n }\n\n function arrayDifference(a1, a2) {\n var result = [];\n for (var i = 0; i < a1.length; i++) {\n if (a2.indexOf(a1[i]) === -1) {\n result.push(a1[i]);\n }\n }\n return result;\n }\n\n function filterQueryString(url, keysMatchArr, thisType){\n if (/\\?/.test(url) && keysMatchArr.length > 0) {\n var urlArr = url.split('?');\n var urlBase = urlArr[0];\n var pairs = urlArr[1].split('&');\n var matchedPairs = [];\n\n for (var i = 0; i < keysMatchArr.length; i++) {\n var listedKey = keysMatchArr[i];\n for (var j = 0; j < pairs.length; j++) {\n if ((listedKey instanceof RegExp && listedKey.test(pairs[j])) || pairs[j].indexOf(listedKey) > -1) matchedPairs.push(pairs[j]);\n }\n }\n\n var matchedPairsArr = (thisType == 'white' ? matchedPairs : arrayDifference(pairs,matchedPairs));\n if(matchedPairsArr.length > 0){\n return urlBase + '?' + matchedPairsArr.join('&');\n }else{\n return urlBase;\n }\n } else {\n return url;\n }\n }\n\n function whitelistQueryString(url){\n return filterQueryString(url, $analytics.settings.pageTracking.queryKeysWhitelisted, 'white');\n }\n\n function blacklistQueryString(url){\n return filterQueryString(url, $analytics.settings.pageTracking.queryKeysBlacklisted, 'black');\n }\n\n function filterUrlSegments(url){\n var segmentFiltersArr = $analytics.settings.pageTracking.filterUrlSegments;\n\n if (segmentFiltersArr.length > 0) {\n var urlArr = url.split('?');\n var urlBase = urlArr[0];\n\n var segments = urlBase.split('/');\n\n for (var i = 0; i < segmentFiltersArr.length; i++) {\n var segmentFilter = segmentFiltersArr[i];\n\n for (var j = 1; j < segments.length; j++) {\n /* First segment will be host/protocol or base path. */\n if ((segmentFilter instanceof RegExp && segmentFilter.test(segments[j])) || segments[j].indexOf(segmentFilter) > -1) {\n segments[j] = 'FILTERED';\n }\n }\n }\n\n return segments.join('/');\n } else {\n return url;\n }\n }\n\n function pageTrack(url, $location) {\n if (!matchesExcludedRoute(url)) {\n url = whitelistQueryString(url);\n url = blacklistQueryString(url);\n url = filterUrlSegments(url);\n $analytics.pageTrack(url, $location);\n }\n }\n\n if ($analytics.settings.pageTracking.autoTrackFirstPage) {\n /* Only track the 'first page' if there are no routes or states on the page */\n var noRoutesOrStates = true;\n if ($injector.has('$route')) {\n var $route = $injector.get('$route');\n if ($route) {\n for (var route in $route.routes) {\n noRoutesOrStates = false;\n break;\n }\n } else if ($route === null){\n noRoutesOrStates = false;\n }\n } else if ($injector.has('$state')) {\n var $state = $injector.get('$state');\n if ($state.get().length > 1) noRoutesOrStates = false;\n }\n if (noRoutesOrStates) {\n if ($analytics.settings.pageTracking.autoBasePath) {\n $analytics.settings.pageTracking.basePath = $window.location.pathname;\n }\n $injector.invoke(['$location', function ($location) {\n if ($analytics.settings.pageTracking.trackRelativePath) {\n var url = $analytics.settings.pageTracking.basePath + $location.url();\n pageTrack(url, $location);\n } else {\n pageTrack($location.absUrl(), $location);\n }\n }]);\n }\n }\n\n if ($analytics.settings.pageTracking.autoTrackVirtualPages) {\n if ($analytics.settings.pageTracking.autoBasePath) {\n /* Add the full route to the base. */\n $analytics.settings.pageTracking.basePath = $window.location.pathname + \"#\";\n }\n var noRoutesOrStates = true;\n\n if ($analytics.settings.pageTracking.trackRoutes) {\n if ($injector.has('$route')) {\n var $route = $injector.get('$route');\n if ($route) {\n for (var route in $route.routes) {\n noRoutesOrStates = false;\n break;\n }\n } else if ($route === null){\n noRoutesOrStates = false;\n }\n $rootScope.$on('$routeChangeSuccess', function (event, current) {\n if (current && (current.$$route||current).redirectTo) return;\n $injector.invoke(['$location', function ($location) {\n var url = $analytics.settings.pageTracking.basePath + $location.url();\n pageTrack(url, $location);\n }]);\n });\n }\n }\n\n if ($analytics.settings.pageTracking.trackStates) {\n if ($injector.has('$state') && !$injector.has('$transitions')) {\n noRoutesOrStates = false;\n $rootScope.$on('$stateChangeSuccess', function (event, current) {\n $injector.invoke(['$location', function ($location) {\n var url = $analytics.settings.pageTracking.basePath + $location.url();\n pageTrack(url, $location);\n }]);\n });\n }\n if ($injector.has('$state') && $injector.has('$transitions')) {\n noRoutesOrStates = false;\n $injector.invoke(['$transitions', function($transitions) {\n $transitions.onSuccess({}, function($transition$) {\n var transitionOptions = $transition$.options();\n\n // only track for transitions that would have triggered $stateChangeSuccess\n if (transitionOptions.notify) {\n $injector.invoke(['$location', function ($location) {\n var url = $analytics.settings.pageTracking.basePath + $location.url();\n pageTrack(url, $location);\n }]);\n }\n });\n }]);\n }\n }\n\n if (noRoutesOrStates) {\n $rootScope.$on('$locationChangeSuccess', function (event, current) {\n if (current && (current.$$route || current).redirectTo) return;\n $injector.invoke(['$location', function ($location) {\n if ($analytics.settings.pageTracking.trackRelativePath) {\n var url = $analytics.settings.pageTracking.basePath + $location.url();\n pageTrack(url, $location);\n } else {\n pageTrack($location.absUrl(), $location);\n }\n }]);\n });\n }\n }\n if ($analytics.settings.developerMode) {\n angular.forEach($analytics, function(attr, name) {\n if (typeof attr === 'function') {\n $analytics[name] = function(){};\n }\n });\n }\n}\n\nfunction analyticsOn($analytics) {\n return {\n restrict: 'A',\n link: function ($scope, $element, $attrs) {\n var eventType = $attrs.analyticsOn || 'click';\n var trackingData = {};\n\n angular.forEach($attrs.$attr, function(attr, name) {\n if (isProperty(name)) {\n trackingData[propertyName(name)] = $attrs[name];\n $attrs.$observe(name, function(value){\n trackingData[propertyName(name)] = value;\n });\n }\n });\n\n angular.element($element[0]).on(eventType, function ($event) {\n var eventName = $attrs.analyticsEvent || inferEventName($element[0]);\n trackingData.eventType = $event.type;\n\n if($attrs.analyticsIf){\n if(! $scope.$eval($attrs.analyticsIf)){\n return; // Cancel this event if we don't pass the analytics-if condition\n }\n }\n // Allow components to pass through an expression that gets merged on to the event properties\n // eg. analytics-properites='myComponentScope.someConfigExpression.$analyticsProperties'\n if($attrs.analyticsProperties){\n angular.extend(trackingData, $scope.$eval($attrs.analyticsProperties));\n }\n $analytics.eventTrack(eventName, trackingData);\n });\n }\n };\n}\n\nfunction exceptionTrack($provide) {\n $provide.decorator('$exceptionHandler', ['$delegate', '$injector', function ($delegate, $injector) {\n return function (error, cause) {\n var result = $delegate(error, cause);\n var $analytics = $injector.get('$analytics');\n if ($analytics.settings.trackExceptions) {\n $analytics.exceptionTrack(error, cause);\n }\n return result;\n };\n }]);\n}\n\nfunction isCommand(element) {\n return ['a:','button:','button:button','button:submit','input:button','input:submit'].indexOf(\n element.tagName.toLowerCase()+':'+(element.type||'')) >= 0;\n}\n\nfunction inferEventType(element) {\n if (isCommand(element)) return 'click';\n return 'click';\n}\n\nfunction inferEventName(element) {\n if (isCommand(element)) return element.innerText || element.value;\n return element.id || element.name || element.tagName;\n}\n\nfunction isProperty(name) {\n return name.substr(0, 9) === 'analytics' && ['On', 'Event', 'If', 'Properties', 'EventType'].indexOf(name.substr(9)) === -1;\n}\n\nfunction propertyName(name) {\n var s = name.slice(9); // slice off the 'analytics' prefix\n if (typeof s !== 'undefined' && s!==null && s.length > 0) {\n return s.substring(0, 1).toLowerCase() + s.substring(1);\n }\n else {\n return s;\n }\n}\n})(angular);\n", "require('./angulartics');\nmodule.exports = 'angulartics';\n", "(function(window, angular, undefined) {'use strict';\n\n/**\n * @ngdoc overview\n * @name angulartics.google.analytics\n * Enables analytics support for Google Analytics (http://google.com/analytics)\n */\nangular.module('angulartics.google.analytics', ['angulartics'])\n.config(['$analyticsProvider', '$windowProvider', function ($analyticsProvider, $windowProvider) {\n\n var $window = $windowProvider.$get();\n\n // GA already supports buffered invocations so we don't need\n // to wrap these inside angulartics.waitForVendorApi\n $analyticsProvider.settings.pageTracking.trackRelativePath = true;\n\n // We cache the latest pageTrack path value here to ensure consistent\n // tracking of the page dimension with other hits\n var pagePathCache;\n \n // Set the default settings for this module\n $analyticsProvider.settings.ga = {\n additionalAccountNames: undefined,\n // Select hits to send to all additional accounts\n additionalAccountHitTypes: {\n pageview: true,\n event: true,\n exception: false,\n ecommerce: false,\n userTiming: false,\n setUserProperties: false,\n userId: false\n },\n disableEventTracking: null,\n disablePageTracking: null,\n enhancedEcommerce: false, \n // GA supports transporting data via gif requests, XHRs, or sendBeacons\n // @link https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#transport\n transport: null,\n userId: null\n };\n\n /**\n * Track Pageview in GA\n * @name pageTrack\n *\n * @param {string} path value of Page dimension stored with hit e.g. '/home'\n * @param {object} properties Object with optional addtional Custom Dimensions/Metrics\n *\n * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/pages\n * @link https://developers.google.com/analytics/devguides/collection/gajs/\n */\n $analyticsProvider.registerPageTrack(function (path, properties) {\n \n pagePathCache = path;\n\n properties = properties || {};\n\n // Do nothing if page tracking is disabled\n if ($analyticsProvider.settings.ga.disablePageTracking) return;\n\n dispatchToGa('pageview', 'send', angular.extend(angular.copy(properties), {\n hitType: 'pageview',\n page: path\n }));\n\n });\n\n /**\n * Track Event in GA\n * @name eventTrack\n *\n * @param {string} action Required 'action' (string) associated with the event\n * @param {object} properties Comprised of the mandatory field 'category' (string) and optional fields 'label' (string), 'value' (integer) and 'nonInteraction' (boolean)\n *\n * @link https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide#SettingUpEventTracking\n *\n * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/events\n */\n $analyticsProvider.registerEventTrack(function(action, properties) {\n\n // Do nothing if event tracking is disabled\n if ($analyticsProvider.settings.ga.disableEventTracking) return;\n\n if (!action && action + '' !== '0') {\n return;\n }\n\n // Sets default properties\n properties = properties || {};\n properties.category = properties.category || 'Event';\n\n // GA requires that eventValue be an integer, see:\n // https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#eventValue\n // https://github.com/luisfarzati/angulartics/issues/81\n if (properties.value) {\n var parsed = parseInt(properties.value, 10);\n properties.value = isNaN(parsed) ? 0 : parsed;\n }\n\n // GA requires that hitCallback be an function, see:\n // https://developers.google.com/analytics/devguides/collection/analyticsjs/sending-hits#hitcallback\n if (!angular.isFunction(properties.hitCallback)) {\n properties.hitCallback = null;\n }\n\n // Making nonInteraction parameter more intuitive, includes backwards compatibilty\n // https://github.com/angulartics/angulartics-google-analytics/issues/49\n properties.nonInteraction = properties.nonInteraction || properties.noninteraction;\n\n dispatchToGa('event', 'send', angular.extend(angular.copy(properties), {\n hitType: 'event',\n eventCategory: properties.category,\n eventAction: action,\n eventLabel: properties.label,\n eventValue: properties.value,\n nonInteraction: properties.nonInteraction,\n page: getPage_(properties),\n hitCallback: properties.hitCallback,\n }));\n\n });\n\n /**\n * Exception Track Event in GA\n * @name exceptionTrack\n * Sugar on top of the eventTrack method for easily handling errors\n *\n * @param {object} error An Error object to track: error.toString() used for event 'action', error.stack used for event 'label'.\n * @param {object} cause The cause of the error given from $exceptionHandler, not used.\n *\n * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/events\n */\n $analyticsProvider.registerExceptionTrack(function (error, cause) {\n dispatchToGa('exception', 'send', {\n hitType: 'event',\n eventCategory: 'Exceptions',\n eventAction: error.toString(),\n eventLabel: error.stack,\n nonInteraction: true,\n page: getPage_({}),\n isException: true\n });\n });\n\n /**\n * Set Username\n * @name setUsername\n *\n * @param {string} userId Registers User ID of user for use with other hits\n *\n * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#user_id\n */\n $analyticsProvider.registerSetUsername(function (userId) {\n $analyticsProvider.settings.ga.userId = userId;\n });\n\n /**\n * Set User Properties\n * @name setUserProperties\n *\n * @param {object} properties Sets all properties with dimensionN or metricN to their respective values\n *\n * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#customs\n */\n $analyticsProvider.registerSetUserProperties(function (properties) {\n\n if (properties) {\n dispatchToGa('setUserProperties', 'set', dimensionsAndMetrics(properties));\n }\n\n });\n\n /**\n * User Timings Event in GA\n * @name userTimings\n *\n * @param {object} properties Comprised of the mandatory fields:\n * 'timingCategory' (string),\n * 'timingVar' (string),\n * 'timingValue' (number)\n * Properties can also have the optional fields:\n * 'timingLabel' (string)\n * 'optSampleRate' (number) Classic Analytics only - determines % of users to collect data from, handled serverside by UA\n * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/user-timings#sampling_considerations\n *\n * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/user-timings\n */\n $analyticsProvider.registerUserTimings(function (properties) {\n\n if (!angular.isObject(properties) || angular.isArray(properties)) {\n return console.log('Required argument properties is missing or not an object');\n }\n\n angular.forEach(['timingCategory', 'timingVar', 'timingValue'], function(prop) {\n if (angular.isUndefined(properties[prop])) {\n return console.log('Argument properties missing required property ' + prop);\n }\n });\n\n dispatchToGa('userTiming', 'send', {\n hitType: 'timing',\n timingCategory: properties.timingCategory,\n timingVar: properties.timingVar,\n timingValue: properties.timingValue,\n timingLabel: properties.timingLabel,\n optSampleRate: properties.optSampleRate, // Classic Analytics only\n page: getPage_(properties)\n });\n\n });\n\n /**\n * Ecommerce Tracking in GA\n * @name transactionTrack\n *\n * @param {object} transaction comprised of following fields:\n * 'id': 'T12345', // Transaction ID. Required for purchases and refunds.\n * 'affiliation': 'Online Store',\n * 'revenue': '35.43', // Total transaction value (incl. tax and shipping)\n * 'tax':'4.90',\n * 'shipping': '5.99',\n * 'coupon': 'SUMMER_SALE', // Enhanced Ecommerce Only\n * 'dimension1': 'Card ID #1234', // Hit, Session, or User-level Custom Dimension(s)\n * 'metric1': 1, // Custom Metric(s)\n * 'currencyCode': 'EUR', // Currency Code to track the transaction with. Recognized codes: https://support.google.com/analytics/answer/6205902?hl=en#supported-currencies\n * 'billingCity': 'San Francisco', // Classic Analytics only\n * 'billingRegion': 'California', // Classic Analytics only\n * 'billingCountry': 'USA', // Classic Analytics only\n * 'products': [{ // List of products\n * 'name': 'Triblend Android T-Shirt', // Name or ID is required.\n * 'id': '12345', // Product SKU\n * 'price': '15.25',\n * 'brand': 'Google', // Enhanced Ecommerce only\n * 'category': 'Apparel', \n * 'variant': 'Gray', // Enhanced Ecommerce only\n * 'quantity': 1,\n * 'coupon': '', // Enhanced Ecommerce only.\n * 'currencyCode': 'BRL', // Product-level currency code, Enhanced Ecommerce only\n * 'dimension2': 'Clearance', // Product-level Custom Dimension\n * 'metric2': 1 // Product-level Custom Metric\n * },\n * ...\n * ]\n *\n * @param {object] properties comprised of custom dimensions and metrics to\n * send with the transaction hit\n * Utilizes traditional ecommerce tracking by default. To used Enhanced Ecommerce,\n * set the $analytics.settings.ga.enhancedEcommerce flag to true\n *\n * Docs on traditional ecommerce (UA):\n * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce\n *\n * Docs on Enhanced Ecommerce\n * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce\n *\n * Docs on Classic Ecommerce (_gaq)\n * @link https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingEcommerce\n **/\n $analyticsProvider.registerTransactionTrack(function(transaction) {\n\n var product;\n var i;\n\n // Universal Analytics splits off the ecommerce code into a separate\n // library we must include by using the \"require\" command\n dispatchToGa('ecommerce', 'require', 'ecommerce');\n dispatchToGa('ecommerce', 'ecommerce:addTransaction', transaction);\n \n if (transaction.products) {\n for (i = 0; i < transaction.products.length; i++) {\n\n product = transaction.products[i];\n\n // GA uses a SKU property and stores the transaction ID in the ID Field\n product.sku = product.id;\n product.id = transaction.id;\n\n dispatchToGa('ecommerce', 'ecommerce:addItem', transaction.products[i]);\n\n }\n }\n\n if (transaction.currencyCode) {\n\n dispatchToGa('ecommerce', '_set', transaction.currencyCode); // Classic Anayltics only - UA uses fieldsObj.currencyCode instead\n\n } \n\n dispatchToGa('ecommerce', 'ecommerce:send', angular.copy(transaction));\n\n });\n\n /**\n * Detects if Universal Analytics is installed\n *\n * @name detectUniversalAnalytics\n */\n function detectUniversalAnalytics() {\n\n // Use the GoogleAnalyticsObject property set by the default GA snippet\n // to correctly determine the namespace of the GA global\n var gaNamespace = $window.GoogleAnalyticsObject;\n return gaNamespace && $window[gaNamespace];\n\n }\n\n /**\n * Detects if Classic Analytics is installed\n *\n * @name detectClassicAnalytics\n */\n function detectClassicAnalytics() {\n\n // If _gaq is undefined, we're trusting Classic Analytics to be there\n return !angular.isUndefined($window._gaq);\n\n }\n\n /**\n * Extract Custom Data for a hit\n * @name dimensionsAndMetrics\n * \n * @param {object} properties properties object from an API call that is filtered for Custom Dimensions & Metrics\n *\n * @returns {object} customData object with only Custom Dimensions/Metrics from properties argument\n */\n function dimensionsAndMetrics(properties) {\n // add custom dimensions and metrics\n var customData = {};\n var key;\n\n for (key in properties) {\n // Keys must be dimensionXX or metricXX, e.g. dimension1, metric155, so\n // if those strings aren't at zero (which evaluates to falsey), ignore\n // the key\n if (!key.indexOf('dimension') || !key.indexOf('metric')) {\n customData[key] = properties[key];\n }\n }\n return customData;\n }\n\n /**\n * Handler for hits to GA. Dynamically adjusts syntax for\n * targeted version based on global detection.\n *\n * @name dispatchToGa\n *\n * @param {string} method Name of angulartics method for checking if hits should be duplicated\n * @param {string} command Standard Universal Analytics command (create, send, set)\n * @param {object} fieldsObj object with hit-specific fields. Fields are whitelisted in handler - non-supported fields are ignored.\n *\n */\n var dispatchToGa = function(method, command, fieldsObj) {\n\n var handler;\n\n if (detectClassicAnalytics()) {\n handler = dispatchToClassic_;\n }\n\n if (detectUniversalAnalytics()) {\n handler = dispatchToUniversal_;\n }\n\n // If neither has been detected, GA is not above the angular code\n if (!handler) {\n return;\n }\n\n var shouldCopyHit = $analyticsProvider.settings.ga.additionalAccountHitTypes[method];\n handler(command, fieldsObj, shouldCopyHit);\n };\n\n /**\n * Dispatches a hit using Universal syntax\n *\n * @name dispatchToUniversal_\n * @private\n *\n * @param {string} command Standard Universal Analytics command (create, send, set)\n * @param {object} fieldsObj object with hit-specific fields. Fields are whitelisted in handler - non-supported fields are ignored.\n * @param {boolean} shouldCopyHit should hit be propogated to all trackers\n */\n function dispatchToUniversal_(command, fieldsObj, shouldCopyHit) {\n\n var userId = $analyticsProvider.settings.ga.userId;\n var uaCommand,\n pluginName;\n\n if (command === 'require' && fieldsObj === 'ecommerce') {\n\n pluginName = fieldsObj;\n\n if ($analyticsProvider.settings.ga.enhancedEcommerce) {\n\n pluginName = 'ec';\n\n }\n\n // Exit here - require calls don't have fieldsObjs\n return applyUniversalCall_([command, pluginName], shouldCopyHit);\n\n }\n\n // If our User ID is set, set it on the hit\n if (userId && angular.isObject(fieldsObj)) fieldsObj.userId = userId;\n // If a transport preference is specified, set it on the hit\n if ($analyticsProvider.settings.ga.transport) {\n\n fieldsObj.transport = $analyticsProvider.settings.ga.transport;\n\n }\n\n if (command.indexOf('ecommerce:') > -1 && $analyticsProvider.settings.ga.enhancedEcommerce) {\n\n switch (command) {\n case 'ecommerce:addTransaction':\n command = ['ec:setAction', 'purchase'];\n break;\n case 'ecommerce:addItem':\n command = 'ec:addProduct';\n // Enhanced Ecommerce reverts to using the ID property for the SKU,\n // so we swap them back here\n fieldsObj.id = fieldsObj.sku;\n break;\n case 'ecommerce:send':\n command = 'send';\n fieldsObj.hitType = 'event';\n fieldsObj.eventCategory = 'Angulartics Enhanced Ecommerce';\n fieldsObj.eventAction = 'Purchase';\n fieldsObj.nonInteraction = true;\n break;\n }\n\n }\n\n\n uaCommand = command instanceof Array ? command.concat(fieldsObj) : [command, fieldsObj];\n\n applyUniversalCall_(uaCommand, shouldCopyHit);\n\n }\n\n /**\n * Handles applying a constructed call to the global Universal GA object\n * This exists primarily so calls within dispatchToUa_ can short circuit\n * out of the function to handle specific edge cases, e.g. require commands\n * @name applyUniversalCall_\n * @private\n *\n * @param commandArray {array} command to be .apply()'d\n * @param shouldCopyHit {boolean} should the command be applied to all accts\n */\n function applyUniversalCall_(commandArray, shouldCopyHit) {\n\n var userId = $analyticsProvider.settings.ga.userId;\n var gaNamespace = $window.GoogleAnalyticsObject;\n var commandClone;\n\n // Perform our initial call\n $window[gaNamespace].apply(this, commandArray);\n\n if (shouldCopyHit) {\n\n commandClone = angular.copy(commandArray);\n\n // If the userId shouldn't be duplicated, remove from the fieldsObj\n if (userId && !$analyticsProvider.settings.ga.additionalAccountHitTypes.userId) {\n\n if (commandClone[2] && typeof commandClone[2] === 'object') {\n\n delete commandClone[2].userId;\n\n }\n\n }\n\n angular.forEach($analyticsProvider.settings.ga.additionalAccountNames, function (accountName){\n\n commandClone[0] = accountName + '.' + commandArray[0];\n\n $window[gaNamespace].apply(this, commandClone);\n\n });\n\n }\n\n }\n\n /**\n * Dispatches a hit using Classic syntax\n * Translates Universal Syntax to Classic syntax\n *\n * @name dispatchToClassic_\n * @private\n *\n * @param {string} command Standard Universal Analytics command (create, send, set)\n * @param {object} fieldsObj object with hit-specific fields. Fields are whitelisted in handler - non-supported fields are ignored.\n * @param {boolean} shouldCopyHit should hit be propogated to all trackers\n */\n function dispatchToClassic_(command, fieldsObj, shouldCopyHit) {\n\n if (command === 'set') {\n return console.log('Classic Analytics does not support the \"set\" command or Custom Dimensions. Command ignored.');\n }\n\n var classicCommand;\n\n // Transpose our syntax from Universal Analytics to Classic Analytics\n // Currently we only support 'send' style commands\n if (command === 'send') {\n\n switch(fieldsObj.hitType) {\n case 'pageview':\n classicCommand = ['_trackPageview', fieldsObj.page];\n break;\n case 'event':\n classicCommand = [\n '_trackEvent',\n fieldsObj.eventCategory,\n fieldsObj.eventAction,\n fieldsObj.eventLabel,\n fieldsObj.eventValue,\n fieldsObj.nonInteraction\n ];\n break;\n case 'timing':\n classicCommand = [\n '_trackTiming',\n fieldsObj.timingCategory,\n fieldsObj.timingVar,\n fieldsObj.timingValue,\n fieldsObj.timingLabel,\n fieldsObj.optSampleRate\n ];\n break;\n }\n\n }\n\n if (command === 'ecommerce:addTransaction') {\n\n classicCommand = [\n '_addTrans',\n fieldsObj.id,\n fieldsObj.affiliation,\n fieldsObj.revenue,\n fieldsObj.tax,\n fieldsObj.shipping,\n fieldsObj.billingCity,\n fieldsObj.billingRegion,\n fieldsObj.billingCountry\n ];\n\n }\n\n if (command === 'ecommerce:addItem') {\n\n classicCommand = [\n '_addItem',\n fieldsObj.id,\n fieldsObj.sku,\n fieldsObj.name,\n fieldsObj.category,\n fieldsObj.price,\n fieldsObj.quantity\n ];\n\n }\n\n if (command === '_set') {\n\n classicCommand = [\n '_set',\n 'currencyCode',\n fieldsObj\n ];\n\n }\n\n if (command === 'ecommerce:send') {\n\n classicCommand = [\n '_trackTrans'\n ];\n\n }\n\n if (!classicCommand) {\n return console.log('Unable to find command ' + command + ' or fieldsObj missing required properties. Command ignored.');\n }\n\n // Issue our command to GA\n $window._gaq.push(classicCommand);\n\n if (shouldCopyHit) {\n\n angular.forEach($analyticsProvider.settings.ga.additionalAccountNames, function (accountName){\n\n var classicCommandClone = [].slice.call(classicCommand);\n // Namespace the command as required\n classicCommandClone[0] = accountName + '.' + classicCommandClone[0];\n\n $window._gaq.push(classicCommandClone);\n\n });\n\n }\n\n }\n\n\n\n /**\n * Helper function for getting page value\n *\n * @param {Object} properties\n *\n * @returns {String}\n */\n function getPage_(properties) {\n\n return properties.page || pagePathCache || \n $window.location.hash.substring(1) || window.location.pathname;\n\n }\n\n}]);\n})(window, window.angular);\n", "require('./angulartics-ga')\nmodule.exports = 'angulartics.google.analytics'\n", "/**\n * @license Angulartics\n * (c) 2013 Luis Farzati http://angulartics.github.io/angulartics\n * License: MIT\n */\n\n(function (window, angular) {\n'use strict';\n\n/**\n * @ngdoc overview\n * @name angulartics.scroll\n * Provides an implementation of Waypoints (http://imakewebthings.com/waypoints)\n * for use as a valid DOM event in analytics-on.\n */\nangular.module('angulartics.scroll', ['angulartics'])\n.factory('$waypoint', function () {\n return function(options) {\n return new Waypoint(options);\n };\n})\n.directive('analyticsOn', ['$analytics', '$waypoint', function ($analytics, $waypoint) {\n function isProperty (name) {\n return name.substr(0, 8) === 'scrollby';\n }\n function cast (value) {\n if (value === '' || value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n } else {\n return value;\n }\n }\n\n return {\n restrict: 'A',\n priority: 5,\n scope: false,\n link: function ($scope, $element, $attrs) {\n if ($attrs.analyticsOn !== 'scrollby') return;\n\n var properties = {\n handler: function () {\n $element.triggerHandler('scrollby');\n if (this.options.triggeronce) {\n this.destroy();\n }\n },\n element: $element[0],\n continuous: false,\n triggeronce: true\n };\n angular.forEach($attrs.$attr, function (attr, name) {\n if (isProperty(attr)) {\n properties[name.slice(8,9).toLowerCase()+name.slice(9)] = cast($attrs[name]);\n }\n });\n\n $waypoint(properties);\n }\n };\n}]);\n})(window, window.angular);\n", "require('./angulartics-scroll');\nmodule.exports = 'angulartics.scroll';\n", "/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n", "\uFEFFimport \"ng-infinite-scroll\";\r\nimport \"angulartics\";\r\nimport \"angulartics-google-analytics\";\r\nimport \"angulartics-scroll\";\r\n\r\n// Run this as an import so it goes BEFORE the subsequent calls\r\nimport \"./fliptoWeb\"\r\n\r\nimport \"../../scripts/src/constants/_call-times.ts\";\r\nimport \"../../scripts/src/constants/_configuration.ts\";\r\nimport \"../../scripts/src/constants/_events.ts\";\r\nimport \"../../scripts/src/constants/_time-zones.ts\";\r\n\r\nimport \"../../scripts/src/_router.ts\";\r\n\r\nimport \"../../components/layout/head/head.controller.ts\";\r\nimport \"../../components/about/team-member.directive.ts\";\r\nimport \"../../components/blog/blog-article.controller.ts\";\r\nimport \"../../components/blog/blog.controller.ts\";\r\nimport \"../../components/contact-forms/contact/contact.controller.ts\";\r\nimport \"../../components/contact-forms/get-started/get-started.controller.ts\";\r\nimport \"../../components/contact-forms/get-started/get-started.directive.ts\";\r\nimport \"../../components/contact-forms/partner-signup/partner-signup.controller.ts\";\r\nimport \"../../components/contact-forms/partner-portal-signup/partner-portal-signup.controller.ts\";\r\nimport \"../../components/features/carousel/carousel-features.directive.ts\";\r\nimport \"../../components/features/going-live/going-live.controller.ts\";\r\nimport \"../../components/features/management/management.controller.ts\";\r\nimport \"../../components/features/photo-advocacy/photo-advocacy.controller.ts\";\r\nimport \"../../components/features/post-stay-advocacy/poststay.controller.ts\";\r\nimport \"../../components/features/pre-stay-advocacy/prestay.controller.ts\";\r\nimport \"../../components/features/superchargers/superchargers.controller.ts\";\r\nimport \"../../components/features/features.controller.ts\";\r\nimport \"../../components/intro/positional-class.ts\";\r\nimport \"../../components/layout/navigation/navigation.controller.ts\";\r\nimport \"../../components/error-pages/404/404.controller.ts\";\r\nimport \"../../components/intro/contacts.constant.ts\";\r\nimport \"../../components/intro/representatives.service.ts\";\r\nimport \"../../components/intro/intro.controller.ts\";\r\nimport \"../../components/intro/introPersonalized.controller.ts\";\r\nimport \"../../components/content/webisode/fuel-reimagined-marketing/webisodeFuel.controller.ts\";\r\n\r\nimport \"../../scripts/src/animations/_carousels.ts\";\r\nimport \"../../scripts/src/animations/_modal.ts\";\r\nimport \"../../scripts/src/animations/_navigation.ts\";\r\nimport \"../../scripts/src/animations/_view.ts\";\r\n\r\nimport \"../../scripts/src/directives/loadingAnimation.ts\";\r\nimport \"../../scripts/src/directives/spinner.ts\";\r\nimport \"../../scripts/src/directives/squashingMenu.ts\";\r\nimport \"../../scripts/src/directives/hoverClass.ts\";\r\nimport \"../../scripts/src/directives/hoverPanels.ts\";\r\nimport \"../../scripts/src/directives/canvasSlides.ts\";\r\nimport \"../../scripts/src/directives/sections.ts\";\r\nimport \"../../scripts/src/directives/carouselCards.ts\";\r\n\r\nimport \"../../scripts/src/services/_api-service.ts\";\r\nimport \"../../scripts/src/services/api-service-news.ts\";\r\nimport \"../../scripts/src/services/_server.ts\";\r\nimport \"../../scripts/src/services/copyToClipboard.ts\";\r\nimport \"../../scripts/src/services/userAgent.ts\";\r\nimport { fliptoWeb } from \"./fliptoWeb.js\";\r\n\r\nfliptoWeb\r\n .constant(\"angularMomentConfig\", {\r\n preprocess: \"utc\"\r\n })\r\n .filter(\"unsafe\", ($sce) => { return $sce.trustAsHtml; })\r\n .run([\"$rootScope\", \"$templateCache\", ($rootScope, $templateCache) => {\r\n $rootScope.$on(\"$routeChangeStart\", () => {\r\n $templateCache.removeAll();\r\n });\r\n }])\r\n .run([\r\n \"$window\", \"config\", \"$rootScope\", \"$timeout\", \"$interval\", ($window, config, $rootScope, $timeout, $interval) => {\r\n if (config.isDebugMode)\r\n console.log(\"Application Running\");\r\n\r\n /*\r\n * handle fouc\r\n */\r\n $rootScope.$on(\"$viewContentLoaded\", () => {\r\n var foucEls = angular.element(document.querySelectorAll(\".handle-fouc\"));\r\n for (var i = 0, l = foucEls.length; i < l; i++) {\r\n var el = foucEls[i],\r\n className = \"handle-fouc\";\r\n if (el.classList)\r\n el.classList\r\n .remove(className);\r\n else\r\n el.className = el.className.replace(new RegExp(`(^|\\b)${className.split(\" \").join(\"|\")}(\\b|$)`, \"gi\"), \" \");\r\n }\r\n });\r\n\r\n\r\n /*\r\n * Page Titles\r\n */\r\n $rootScope.page_title = \"Flip.to\";\r\n $rootScope.$on(\"$routeChangeSuccess\", (e, current, pre) => {\r\n $rootScope.page_title = current.$$route.title;\r\n });\r\n\r\n $rootScope.$on(\"$stateChangeSuccess\", (e, current, pre) => {\r\n $rootScope.isLoaded = true;\r\n });\r\n\r\n let beforeModalOffset;\r\n $rootScope.$on(\"modal.show.before\", (e) => {\r\n beforeModalOffset = window.pageYOffset;\r\n });\r\n\r\n $rootScope.$on(\"modal.hide\", (e) => {\r\n setTimeout(function () { window.scrollTo(0, beforeModalOffset); });\r\n });\r\n\r\n $rootScope.$on(\"$viewContentLoaded\", (e, view) => {\r\n $timeout(function () {\r\n window[\"dataLayer\"].push({ 'event': 'optimize.activate' });\r\n }, 0, false);\r\n });\r\n\r\n\r\n /*\r\n * Code for handling the animated hamburger menu\r\n */\r\n //var anchor = document.querySelectorAll('button.lines-button');\r\n\r\n //[].forEach.call(anchor, function (anchor) {\r\n // var open = false;\r\n // anchor.onclick = function (event) {\r\n // event.preventDefault();\r\n // if (!open) {\r\n // this.classList.add('close');\r\n // open = true;\r\n // }\r\n // else {\r\n // this.classList.remove('close');\r\n // open = false;\r\n // }\r\n // }\r\n //});\r\n\r\n }\r\n ])\r\n .config([\"$httpProvider\", ($httpProvider) => {\r\n var ANGULAR_REQUEST_HEADER = \"FROM-ANGULAR\";\r\n $httpProvider.defaults.headers.common[ANGULAR_REQUEST_HEADER] = \"true\";\r\n\r\n var requestInterceptor = [\r\n \"$q\",\r\n ($q) => {\r\n var interceptorInstance = {\r\n request: (config) => {\r\n config.headers[ANGULAR_REQUEST_HEADER] = true;\r\n return config || $q.when(config);\r\n }\r\n };\r\n return interceptorInstance;\r\n }\r\n ];\r\n\r\n $httpProvider.interceptors.push(requestInterceptor);\r\n }])\r\n .config([\"$modalProvider\", ($modalProvider) => {\r\n angular.extend($modalProvider.defaults, {\r\n backdrop: 'static',\r\n container: 'body'\r\n });\r\n }]);\r\n\r\nif (window[\"isPartner\"]) {\r\n fliptoWeb.service(\"PartnerService\",\r\n [\r\n function() {\r\n\r\n class PartnerService {\r\n\r\n private name: string;\r\n\r\n setName(name: string) {\r\n this.name = name;\r\n }\r\n\r\n getName() {\r\n return this.name;\r\n }\r\n\r\n }\r\n\r\n return new PartnerService();\r\n }\r\n ]);\r\n}\r\n", "import * as Hammer from 'hammerjs';\r\n(window as any).Hammer = Hammer.default;\r\n\r\nexport var fliptoWeb = angular.module(\"fliptoWeb\", [\r\n \"ui.router\",\r\n \"mgcrea.ngStrap\",\r\n \"ngSanitize\",\r\n \"ngAnimate\",\r\n \"ngSanitize\",\r\n \"angularMoment\",\r\n \"infinite-scroll\",\r\n \"angulartics\",\r\n \"angulartics.scroll\",\r\n \"angulartics.google.analytics\"\r\n]);\r\n", "\uFEFF\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .constant('callTimes', { \r\n list: [\r\n { id: 0, description: \"Any business hour\", name: \"Any business hour\" },\r\n { id: 1, description: \"Early morning (8-10am)\", name: \"Early morning\" },\r\n { id: 2, description: \"Late morning (10am-Noon)\", name: \"Late morning\" },\r\n { id: 3, description: \"Mid-day (Noon-1pm)\", name: \"Mid-day\" },\r\n { id: 4, description: \"Early afternon (1-3pm)\", name: \"Early afternoon\" },\r\n { id: 5, description: \"Late afternoon (3-5pm)\", name: \"Late afternoon\" },\r\n { id: 6, description: \"Evening (5-8pm)\", name: \"Evening\" }\r\n ]\r\n }) \r\n})()\r\n\r\n\r\n\r\n", "\uFEFF\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .constant('config',\r\n {\r\n //enables some functionality useful for debug\r\n //disables popup windows on social sharing and other mobile related options.\r\n //ENSURE THIS IS FALSE FOR PRODUCTION RELEASE\r\n isDebugMode: window[\"isDevMode\"],\r\n isIntro: window[\"isIntro\"],\r\n isPartner: window[\"isPartner\"]\r\n });\r\n})()", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .constant('events', {\r\n progressUpdated: 'progress_updated',\r\n currentStepUpdated: 'step_updated',\r\n ratingUpdated: 'rating_updated',\r\n quoteUpdated: 'quote_updated',\r\n photoUpdated: 'photo_updated',\r\n shareUpdated: 'share_updated'\r\n })\r\n})()\r\n ", "\uFEFF\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .constant('timezones', {\r\n list: [\r\n { code: \"MIT\", sortOrder: -11, offset: \"- 11:00\", codeDisplay: \"MIT\", fullName: \"Midway Islands Time\", examples: \"Midway Island, Samoa\" },\r\n { code: \"HST\", sortOrder: -10, offset: \"- 10:00\", codeDisplay: \"HST\", fullName: \"Hawaii Standard Time\", examples: \"Hawaii\" },\r\n { code: \"AST\", sortOrder: -9, offset: \"- 9:00\", codeDisplay: \"AST\", fullName: \"Alaska Standard Time\", examples: \"Alaska\" },\r\n { code: \"PST\", sortOrder: -8, offset: \"- 8:00\", codeDisplay: \"PST\", fullName: \"Pacific Standard Time\", examples: \"San Francisco\" },\r\n { code: \"PNT\", sortOrder: -7, offset: \"- 7:00\", codeDisplay: \"PNT\", fullName: \"Phoenix Standard Time\", examples: \"\" },\r\n { code: \"MST\", sortOrder: -7, offset: \"- 7:00\", codeDisplay: \"MST\", fullName: \"Mountain Standard Time\", examples: \"Denver, El Paso, Alburquerque\" },\r\n { code: \"CST\", sortOrder: -6, offset: \"- 6:00\", codeDisplay: \"CST\", fullName: \"Central Standard Time\", examples: \"Chicago, Dallas, Mexico City\" },\r\n { code: \"EST\", sortOrder: -5, offset: \"- 5:00\", codeDisplay: \"EST\", fullName: \"Eastern Standard Time\", examples: \"New York, Orlando, Bogota, Lima\" },\r\n { code: \"PRT\", sortOrder: -4, offset: \"- 4:00\", codeDisplay: \"PRT\", fullName: \"Puerto Rico & US Virgin Islands Time\", examples: \"\" },\r\n { code: \"CNT\", sortOrder: -3.5, offset: \"- 3:30\", codeDisplay: \"CNT\", fullName: \"Canada Newfoundland Time\", examples: \"\" },\r\n { code: \"AGT\", sortOrder: -3, offset: \"- 3:00\", codeDisplay: \"AGT\", fullName: \"Argentina Standard Time\", examples: \"\" },\r\n { code: \"BET\", sortOrder: -2, offset: \"- 3:00\", codeDisplay: \"BET\", fullName: \"Brazil Eastern Time\", examples: \"Rio de Janeiro\" },\r\n { code: \"CAT\", sortOrder: -1, offset: \"- 1:00\", codeDisplay: \"CAT\", fullName: \"Central African Time\", examples: \"\" },\r\n { code: \"GMT\", sortOrder: 0, offset: \"+ 0:00\", codeDisplay: \"GMT\", fullName: \"Greenwich Mean Time\", examples: \"London, Portugal, Reykjavik\" },\r\n { code: \"ECT\", sortOrder: 1, offset: \"+ 1:00\", codeDisplay: \"ECT\", fullName: \"European Central Time\", examples: \"Rome, Paris, Oslo\" },\r\n { code: \"EET\", sortOrder: 2, offset: \"+ 2:00\", codeDisplay: \"EET\", fullName: \"Eastern European Time\", examples: \"Athens, Kiev, Helsinki\" },\r\n { code: \"ART\", sortOrder: 2, offset: \"+ 2:00\", codeDisplay: \"ART\", fullName: \"(Arabic) Egypt Standard Time\", examples: \"\" },\r\n { code: \"EAT\", sortOrder: 3, offset: \"+ 3:00\", codeDisplay: \"EAT\", fullName: \"Eastern African Time\", examples: \"\" },\r\n { code: \"MET\", sortOrder: 3.5, offset: \"+ 3:30\", codeDisplay: \"MET\", fullName: \"Middle East Time\", examples: \"\" },\r\n { code: \"NET\", sortOrder: 4, offset: \"+ 4:00\", codeDisplay: \"NET\", fullName: \"Near East Time\", examples: \"\" },\r\n { code: \"PLT\", sortOrder: 5, offset: \"+ 5:00\", codeDisplay: \"PLT\", fullName: \"Pakistan Lahore Time\", examples: \"\" },\r\n { code: \"IST\", sortOrder: 5, offset: \"+ 5:30\", codeDisplay: \"IST\", fullName: \"India Standard Time\", examples: \"\" },\r\n { code: \"BST\", sortOrder: 6, offset: \"+ 6:00\", codeDisplay: \"BST\", fullName: \"Bangladesh Standard Time\", examples: \"\" },\r\n { code: \"VST\", sortOrder: 7, offset: \"+ 7:00\", codeDisplay: \"VST\", fullName: \"Vietnam Standard Time\", examples: \"\" },\r\n { code: \"CTT\", sortOrder: 8, offset: \"+ 8:00\", codeDisplay: \"CTT\", fullName: \"China Taiwan Time\", examples: \"\" },\r\n { code: \"JST\", sortOrder: 9, offset: \"+ 9:00\", codeDisplay: \"JST\", fullName: \"Japan Standard Time\", examples: \"\" },\r\n { code: \"ACT\", sortOrder: 9.5, offset: \"+ 9:30\", codeDisplay: \"ACT\", fullName: \"Australia Central Time\", examples: \"\" },\r\n { code: \"AET\", sortOrder: 10, offset: \"+ 10:00\", codeDisplay: \"AET\", fullName: \"Australia Eastern Time\", examples: \"Sydney, Melbourne, Paupa New Guinea\" },\r\n { code: \"SST\", sortOrder: 11, offset: \"+ 11:00\", codeDisplay: \"SBT\", fullName: \"Solomon Island Time\", examples: \"Soloman Islands, Honiara\" },\r\n { code: \"NST\", sortOrder: 12, offset: \"+ 12:00\", codeDisplay: \"NZT\", fullName: \"New Zealand Standard Time\", examples: \"Auckland, Fiji, Marshall Islands\" },\r\n ]\r\n })\r\n})()\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", "\uFEFF\r\n((window) => {\r\n angular.module(\"fliptoWeb\")\r\n .constant(\"routes\",\r\n {\r\n advocacy: \"/advocacy\",\r\n blog: \"/blog\",\r\n about: \"/about\",\r\n customers: \"/customers\",\r\n features: \"/features\",\r\n goingLive: \"/features/going-live\",\r\n home: \"/home\",\r\n management: \"/features/management\",\r\n news: \"/news\",\r\n tour: \"/tour\",\r\n partners: \"/partners\",\r\n photoAdvocacy: \"/features/photo-advocacy\",\r\n poststay: \"/features/poststay-advocacy\",\r\n prestay: \"/features/prestay-advocacy\",\r\n superchargers: \"/features/site-superchargers\",\r\n terms: \"/terms\",\r\n security: \"/security\",\r\n accessibility: \"/accessibility\",\r\n privacy: \"/privacy\",\r\n sla: \"/sla\",\r\n msa: \"/msa\",\r\n msaPartner: \"/msa-partner\",\r\n error404: \"/404\",\r\n generalError: \"/oops\",\r\n fuel: \"/fuel-reimagined-marketing\"\r\n })\r\n .config([\r\n \"$locationProvider\", \"$stateProvider\", \"$urlRouterProvider\", \"routes\", \"config\",\r\n ($locationProvider, $stateProvider, $urlRouterProvider, routes, config) => {\r\n\r\n $locationProvider.html5Mode(true).hashPrefix(\"!\");\r\n\r\n if (config.isIntro) {\r\n $urlRouterProvider.otherwise(\"/by\");\r\n\r\n $urlRouterProvider.when(/^\\/(intro-jackrabbit|jackrabbit)/i, '/dmo/by');\r\n\r\n $stateProvider\r\n .state(\"intro-dmo\",\r\n {\r\n url: \"/dmo/by{name:(?:/[^/]+)?}{slug:(?:/[^/]+)?/?}\",\r\n templateUrl: \"/intro-dmo\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.name)\r\n ? $stateParams.name.substring(1)\r\n : null;\r\n }\r\n ],\r\n slug: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.slug)\r\n ? $stateParams.slug.substring(1)\r\n : null;\r\n }\r\n ],\r\n introType: [() => \"dmo\"],\r\n representatives: [\"representatives\", representatives => representatives(\"dmo\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n .state(\"intro-vr\",\r\n {\r\n url: \"/vr/by{name:(?:/[^/]+)?}{slug:(?:/[^/]+)?/?}\",\r\n templateUrl: \"/intro-vr\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.name)\r\n ? $stateParams.name.substring(1)\r\n : null;\r\n }\r\n ],\r\n slug: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.slug)\r\n ? $stateParams.slug.substring(1)\r\n : null;\r\n }\r\n ],\r\n introType: [() => \"vr\"],\r\n representatives: [\"representatives\", representatives => representatives(\"vr\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n /* Reroute vr experience kissimmee intro page to hotel intro page */\r\n .state(\"intro-vr-experiencekissimmee\",\r\n {\r\n url: \"/by{name:(?:/[^/]+)?}{slug:(?:/[^/]+)?/?}\",\r\n templateUrl: \"/intro\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.name)\r\n ? $stateParams.name.substring(1)\r\n : null;\r\n }\r\n ],\r\n slug: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.slug)\r\n ? $stateParams.slug.substring(1)\r\n : null;\r\n }\r\n ],\r\n introType: [() => null],\r\n representatives: [\"representatives\", representatives => representatives(\"intro\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n .state(\"intro-benchmark\",\r\n {\r\n url: \"/benchmark/by{name:(?:/[^/]+)?}{slug:(?:/[^/]+)?/?}\",\r\n templateUrl: \"/intro-benchmark\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.name)\r\n ? $stateParams.name.substring(1)\r\n : null;\r\n }\r\n ],\r\n slug: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.slug)\r\n ? $stateParams.slug.substring(1)\r\n : null;\r\n }\r\n ],\r\n introType: [() => \"benchmark\"],\r\n representatives: [\"representatives\", representatives => representatives(\"benchmark\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n .state(\"intro-milemarker630\",\r\n {\r\n url: \"/milemarker630/by{name:(?:/[^/]+)?}{slug:(?:/[^/]+)?/?}\",\r\n templateUrl: \"/intro-milemarker630\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.name)\r\n ? $stateParams.name.substring(1)\r\n : null;\r\n }\r\n ],\r\n slug: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.slug)\r\n ? $stateParams.slug.substring(1)\r\n : null;\r\n }\r\n ],\r\n introType: [() => \"milemarker630\"],\r\n representatives: [\"representatives\", representatives => representatives(\"milemarker630\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n /* Reroute experience kissimmee intro page to hotel intro page */\r\n .state(\"intro-experiencekissimmee\",\r\n {\r\n url: \"/by{name:(?:/[^/]+)?}{slug:(?:/[^/]+)?/?}\",\r\n templateUrl: \"/intro\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.name)\r\n ? $stateParams.name.substring(1)\r\n : null;\r\n }\r\n ],\r\n slug: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.slug)\r\n ? $stateParams.slug.substring(1)\r\n : null;\r\n }\r\n ],\r\n introType: [() => null],\r\n representatives: [\"representatives\", representatives => representatives(\"intro\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n .state(\"intro-fuel\",\r\n {\r\n url: \"/fuel/by{name:(?:/[^/]+)?}{slug:(?:/[^/]+)?/?}\",\r\n templateUrl: \"/intro-fuel\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.name)\r\n ? $stateParams.name.substring(1)\r\n : null;\r\n }\r\n ],\r\n slug: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.slug)\r\n ? $stateParams.slug.substring(1)\r\n : null;\r\n }\r\n ],\r\n introType: [() => \"fuel\"],\r\n representatives: [\"representatives\", representatives => representatives(\"fuel\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n /* Reroute visit florida intro page to hotel intro page */\r\n .state(\"intro-visitflorida\",\r\n {\r\n url: \"/by{name:(?:/[^/]+)?}{slug:(?:/[^/]+)?/?}\",\r\n templateUrl: \"/intro\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.name)\r\n ? $stateParams.name.substring(1)\r\n : null;\r\n }\r\n ],\r\n slug: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.slug)\r\n ? $stateParams.slug.substring(1)\r\n : null;\r\n }\r\n ],\r\n introType: [() => null],\r\n representatives: [\"representatives\", representatives => representatives(\"intro\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n .state(\"intro-intercoastalnet\",\r\n {\r\n url: \"/intercoastalnet/by{name:(?:/[^/]+)?}{slug:(?:/[^/]+)?/?}\",\r\n templateUrl: \"/intro-intercoastalnet\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.name)\r\n ? $stateParams.name.substring(1)\r\n : null;\r\n }\r\n ],\r\n slug: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.slug)\r\n ? $stateParams.slug.substring(1)\r\n : null;\r\n }\r\n ],\r\n introType: [() => \"intercoastalnet\"],\r\n representatives: [\"representatives\", representatives => representatives(\"intercoastalnet\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n .state(\"intro-resortdataprocessing\",\r\n {\r\n url: \"/resortdataprocessing/by{name:(?:/[^/]+)?}{slug:(?:/[^/]+)?/?}\",\r\n templateUrl: \"/intro-resortdataprocessing\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.name)\r\n ? $stateParams.name.substring(1)\r\n : null;\r\n }\r\n ],\r\n slug: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.slug)\r\n ? $stateParams.slug.substring(1)\r\n : null;\r\n }\r\n ],\r\n introType: [() => \"resortdataprocessing\"],\r\n representatives: [\"representatives\", representatives => representatives(\"resortdataprocessing\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n .state(\"intro-hotel\",\r\n {\r\n url: \"/by{name:(?:/[^/]+)?}{slug:(?:/[^/]+)?/?}\",\r\n templateUrl: \"/intro\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.name)\r\n ? $stateParams.name.substring(1)\r\n : null;\r\n }\r\n ],\r\n slug: [\r\n \"$stateParams\", function ($stateParams) {\r\n return angular.isDefined($stateParams.slug)\r\n ? $stateParams.slug.substring(1)\r\n : null;\r\n }\r\n ],\r\n introType: [() => null],\r\n representatives: [\"representatives\", representatives => representatives(\"intro\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n .state(\"intro-random\",\r\n {\r\n url: \"/by/\",\r\n templateUrl: \"/intro\",\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n name: [() => null],\r\n slug: [() => null],\r\n introType: [() => null],\r\n representatives: [\"representatives\", representatives => representatives(\"intro\")]\r\n },\r\n title: \"Flip.to | Intro\"\r\n })\r\n .state(\"intro-personalized\",\r\n {\r\n url: \"/intro/{website}{person:(?:/[^/]+)?}\",\r\n templateUrl: function($stateParams) {\r\n return `/intro/${$stateParams.website}${!!$stateParams.person ? \"/\" + $stateParams.person : \"\"}`;\r\n },\r\n /*todo: switch to personalized controller when we know what to do*/\r\n controller: \"IntroCtrl\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n /*this will always fallback to debi because we dont have all sales integrated yet*/\r\n name: [\"contacts\", (contacts) => contacts.emailsToShortNames[window[\"PersonalizedIntroInfo\"].contactPerson] || 'debi'],\r\n slug: [() => window[\"PersonalizedIntroInfo\"].hotelName],\r\n introType: [() => null],\r\n representatives: [\"representatives\", \"contacts\", (representatives, contacts) =>\r\n new Representatives([contacts.emailsToShortNames[window[\"PersonalizedIntroInfo\"].contactPerson] || 'debi'],\r\n ['debi'])]\r\n },\r\n title: \"Flip.to | Intro\"\r\n });\r\n }\r\n else {\r\n\r\n //All other routes invalid\r\n $urlRouterProvider.otherwise(routes.error404);\r\n\r\n\r\n $stateProvider\r\n .state(\"/\",\r\n {\r\n url: \"/\",\r\n templateUrl: routes.home,\r\n controller: \"HomeCtrl as vm\",\r\n title: \"Flip.to | The most trusted way to earn new guests\"\r\n })\r\n .state(routes.advocacy,\r\n {\r\n url: routes.advocacy,\r\n templateUrl: routes.advocacy,\r\n controller: \"AdvocacyCtrl as vm\",\r\n title: \"The Flip.to Advocacy Dept.\"\r\n })\r\n .state(routes.news,\r\n {\r\n url: routes.news,\r\n templateUrl: routes.news + window.location.search,\r\n controller: \"NewsCtrl as vm\",\r\n title: \"Flip.to News\"\r\n })\r\n .state(routes.news + \"/article\",\r\n {\r\n url: routes.news + \"/:articleSlug\",\r\n templateUrl: (params) => {\r\n //Angular/DotNet is doing something weird with template caching and\r\n //pushing a cached full view (not partial) with html head & script references, etc\r\n //busting the cache every time route is requested fixes the problem\r\n //mostly seen going from the site to an external site and hitting the back button\r\n\r\n var qs = window.location.search || \"?\";\r\n qs += \"&v=\" + getRandomCacheNumber();\r\n\r\n return routes.news + \"/\" + params.articleSlug + qs;\r\n },\r\n controller: \"ArticleCtrl as vm\",\r\n title: \"Flip.to News\"\r\n })\r\n .state(routes.news + \"/category/:categorySlug\",\r\n {\r\n url: routes.news + \"/category/:categorySlug\",\r\n templateUrl: (params) => {\r\n return \"/news/category/\" + params.categorySlug + window.location.search;\r\n },\r\n controller: \"NewsCtrl as vm\",\r\n title: \"Flip.to News\"\r\n })\r\n .state(routes.blog,\r\n {\r\n url: routes.blog,\r\n templateUrl: routes.blog + window.location.search,\r\n controller: \"BlogCtrl as vm\",\r\n title: \"The Flip.to Blog\"\r\n })\r\n .state(routes.blog + \"/article\",\r\n {\r\n url: routes.blog + \"/:articleSlug\",\r\n templateUrl: (params) => {\r\n var qs = window.location.search || \"?\";\r\n qs += \"&v=\" + getRandomCacheNumber();\r\n\r\n return routes.blog + \"/\" + params.articleSlug + qs;\r\n },\r\n controller: \"BlogArticleCtrl as vm\",\r\n title: \"The Flip.to Blog\"\r\n })\r\n .state(routes.blog + \"/category/:categorySlug\",\r\n {\r\n url: routes.blog + \"/category/:categorySlug\",\r\n templateUrl: (params) => {\r\n return \"/blog/category/\" + params.categorySlug + window.location.search;\r\n },\r\n controller: \"BlogCtrl as vm\",\r\n title: \"The Flip.to Blog\"\r\n })\r\n .state(routes.about,\r\n {\r\n url: routes.about,\r\n templateUrl: routes.about,\r\n controller: \"AboutCtrl as vm\",\r\n title: \"About Flip.to\"\r\n })\r\n .state(\"customers\",\r\n {\r\n url: \"/customers\",\r\n templateUrl: \"/customers\",\r\n controller: \"CustomersCtrl as vm\",\r\n title: \"Flip.to Customers\",\r\n resolve: {\r\n tab: () => \"hotels\"\r\n }\r\n })\r\n .state(\"customersWithTab\",\r\n {\r\n url: \"/customers/{tab}\",\r\n templateUrl: \"/customers\",\r\n controller: \"CustomersCtrl as vm\",\r\n title: \"Flip.to Customers\",\r\n resolve: {\r\n tab: [\"$stateParams\", ($stateParams) => {\r\n if ([\"hotels\", \"resorts\", \"vr\", \"dmo\"].indexOf($stateParams.tab) === -1) return \"hotels\";\r\n return $stateParams.tab;\r\n }]\r\n }\r\n })\r\n .state(routes.features,\r\n {\r\n url: routes.features,\r\n templateUrl: routes.features,\r\n controller: \"FeaturesCtrl as vm\",\r\n title: \"Flip.to Features\"\r\n })\r\n .state(routes.goingLive,\r\n {\r\n url: routes.goingLive,\r\n templateUrl: routes.goingLive,\r\n controller: \"GoingLiveCtrl as vm\",\r\n title: \"Going Live with Flip.to\"\r\n })\r\n .state(routes.home,\r\n {\r\n url: routes.home,\r\n templateUrl: routes.home,\r\n controller: \"HomeCtrl as vm\",\r\n title: \"Flip.to | The most trusted way to earn new guests\"\r\n })\r\n .state(routes.management,\r\n {\r\n url: routes.management,\r\n templateUrl: routes.management,\r\n controller: \"ManagementCtrl as vm\",\r\n title: \"Managing Flip.to\"\r\n })\r\n .state(routes.partners,\r\n {\r\n url: routes.partners,\r\n templateUrl: routes.partners,\r\n controller: \"PartnersCtrl as vm\",\r\n title: \"Flip.to Partners\"\r\n })\r\n .state(routes.photoAdvocacy,\r\n {\r\n url: routes.photoAdvocacy,\r\n templateUrl: routes.photoAdvocacy,\r\n controller: \"PhotoAdvocacyCtrl as vm\",\r\n title: \"Flip.to Photo Advocacy\"\r\n })\r\n .state(routes.poststay,\r\n {\r\n url: routes.poststay,\r\n templateUrl: routes.poststay,\r\n controller: \"PoststayCtrl as vm\",\r\n title: \"Flip.to Post-stay Advocacy\"\r\n })\r\n .state(routes.prestay,\r\n {\r\n url: routes.prestay,\r\n templateUrl: routes.prestay,\r\n controller: \"PrestayCtrl as vm\",\r\n title: \"Flip.to Pre-stay Advocacy\"\r\n })\r\n .state(routes.superchargers,\r\n {\r\n url: routes.superchargers,\r\n templateUrl: routes.superchargers,\r\n controller: \"SuperchargersCtrl as vm\",\r\n title: \"Flip.to Site Superchargers\"\r\n })\r\n .state(routes.terms,\r\n {\r\n url: routes.terms,\r\n templateUrl: routes.terms,\r\n title: \"Flip.to | Terms & Conditions\"\r\n })\r\n .state(routes.security,\r\n {\r\n url: routes.security,\r\n templateUrl: routes.security,\r\n title: \"Flip.to | Security Statement\"\r\n })\r\n .state(routes.accessibility,\r\n {\r\n url: routes.accessibility,\r\n templateUrl: routes.accessibility,\r\n title: \"Flip.to | Accessibility Statement\"\r\n })\r\n .state(routes.privacy,\r\n {\r\n url: routes.privacy,\r\n templateUrl: routes.privacy,\r\n title: \"Flip.to | Privacy Policy\"\r\n })\r\n .state(routes.sla,\r\n {\r\n url: routes.sla,\r\n templateUrl: routes.sla,\r\n title: \"Flip.to | Service Level Agreement\"\r\n })\r\n .state(routes.msa,\r\n {\r\n url: routes.msa,\r\n templateUrl: routes.msa,\r\n title: \"Flip.to | Master Subscription Agreement\"\r\n })\r\n .state(routes.msa + \"/version\",\r\n {\r\n url: routes.msa + \"/:version\",\r\n templateUrl: (params) => {\r\n return \"/msa/\" + params.version + window.location.search;\r\n },\r\n title: \"Flip.to | Historical Master Subscription Agreement\"\r\n })\r\n .state(routes.msaPartner,\r\n {\r\n url: routes.msaPartner,\r\n templateUrl: routes.msaPartner,\r\n title: \"Flip.to Partner | Master Subscription Agreement\"\r\n })\r\n .state(routes.msaPartner + \"/version\",\r\n {\r\n url: routes.msaPartner + \"/:version\",\r\n templateUrl: (params) => {\r\n return \"/msa-partner/\" + params.version + window.location.search;\r\n },\r\n title: \"Flip.to | Historical Master Subscription Agreement\"\r\n })\r\n .state(routes.tour,\r\n {\r\n url: routes.tour,\r\n templateUrl: routes.tour,\r\n controller: \"TourCtrl as vm\",\r\n title: \"Flip.to | Tour\"\r\n })\r\n .state(routes.error404,\r\n {\r\n url: routes.error404,\r\n templateUrl: routes.error404,\r\n title: \"Flip.to | 404: File not found\"\r\n })\r\n .state(routes.generalError,\r\n {\r\n url: routes.generalError,\r\n templateUrl: routes.generalError,\r\n title: \"Flip.to | General Error\"\r\n })\r\n .state(routes.fuel,\r\n {\r\n url: routes.fuel,\r\n templateUrl: routes.fuel,\r\n controller: \"WebisodeFuelCtrl as vm\",\r\n title: \"Flip.to | Free weekly webisodes from Flip.to + Fuel Travel\"\r\n })\r\n }\r\n\r\n\r\n function getRandomCacheNumber() {\r\n var max = 9999999,\r\n min = 1000000;\r\n return Math.random() * (max - min) + min;\r\n }\r\n }\r\n ]);\r\n})(window)", "\uFEFF\r\n\r\n(() => {\r\n //todo move this service to another file\r\n angular.module('fliptoWeb')\r\n .factory('headService', ['$window', function ($window) {\r\n\r\n var service: any = {\r\n socialShareTitle: $window.socialShareTitle || \"\",\r\n socialShareContent: $window.socialShareContent || \"\",\r\n socialFeaturedImage: $window.socialFeaturedImage || \"\",\r\n currentUrl: () => { return $window.location.href }\r\n };\r\n\r\n return service;\r\n }]);\r\n\r\n angular.module('fliptoWeb')\r\n .controller('HeadCtrl', ['headService',\r\n function (headService) {\r\n var vm = this;\r\n\r\n vm.socialShareTitle = () => { return headService.socialShareTitle };\r\n vm.socialShareContent = () => { return headService.socialShareContent };\r\n vm.socialFeaturedImage = () => { return headService.socialFeaturedImage };\r\n vm.currentUrl = ()=> { return headService.currentUrl() };\r\n\r\n vm.debug = JSON.stringify(vm, null, 2);\r\n return vm;\r\n }]);\r\n})()\r\n", "\uFEFF\r\nangular.module('fliptoWeb').directive('ftTeamMember', function () {\r\n\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n templateUrl: 'team-member.html',\r\n scope: {\r\n slug: '@',\r\n chalk: '@',\r\n nameCard: '@',\r\n img: '@',\r\n name: '@',\r\n title: '@',\r\n story: '@',\r\n email: '@',\r\n twitter: '@',\r\n linkedin: '@'\r\n },\r\n link: function(scope, element, attrs) {\r\n var teamSection = angular.element(\".team-section\");\r\n var scroller = angular.element(\".team-list-track\");\r\n var list = scroller.find(\".team-list\");\r\n var img = element.find(\".team-member-img\");\r\n\r\n function toggleActive(value) {\r\n element.toggleClass(\"active\", !!value);\r\n teamSection.toggleClass(\"is-list-view\", !value);\r\n teamSection.toggleClass(\"is-member-view\", !!value);\r\n if (!!value) {\r\n var currentDistanceFromLeftOfScreenToLeftEdgeOfPhoto = img.offset().left;\r\n\r\n var halfScreenSize = teamSection.width() / 2;\r\n var halfElementSize = img.innerWidth() / 2;\r\n var desiredDistanceFromLeftOfScreenToLeftEdgeOfPhoto = halfScreenSize - halfElementSize;\r\n\r\n var amountToScrollLeft = currentDistanceFromLeftOfScreenToLeftEdgeOfPhoto - desiredDistanceFromLeftOfScreenToLeftEdgeOfPhoto;\r\n var currentScroll = list.offset().left;\r\n var newScroll = -1 * currentScroll + amountToScrollLeft;\r\n scroller.animate({ scrollLeft: newScroll }, 600);\r\n }\r\n }\r\n\r\n img.on(\"click\", function() {\r\n toggleActive(true);\r\n return false;\r\n });\r\n\r\n var close = element.find(\".btn-close\");\r\n close.on(\"click\", function() {\r\n toggleActive(false);\r\n return false;\r\n });\r\n\r\n\r\n teamSection.on(\"click\", function() {\r\n toggleActive(false);\r\n return false;\r\n });\r\n\r\n\r\n teamSection.on(\"click\", \"a\", function(e) {\r\n e.stopPropagation();\r\n });\r\n\r\n\r\n scope.$on('$destroy', function() {\r\n img.off(\"click\");\r\n close.off(\"click\");\r\n teamSection.off(\"click\");\r\n });\r\n }\r\n };\r\n});", "\uFEFF\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('BlogArticleCtrl', ['$http', '$stateParams', '$window', '$analytics', 'headService',\r\n function ($http, $stateParams, $window, $analytics, headService) {\r\n var vm = this;\r\n\r\n vm.currentUrl = headService.currentUrl();\r\n vm.socialShareTitle = \"\";\r\n vm.socialShareContent = \"\";\r\n vm.socialFeaturedImage = null;\r\n vm.isSubscribed = false;\r\n vm.isSubscribeError = false;\r\n\r\n vm.shareFacebook = () => { \r\n //array of key/value objects\r\n var options = new Array();\r\n options.push('app_id=' + encodeURIComponent($window.SOCIAL_CONFIGURATION.facebookApiKey));\r\n options.push('display=' + encodeURIComponent('popup'));\r\n options.push('href=' + encodeURIComponent($window.location.href.replace($window.location.host, \"www.flip.to\")));\r\n //We trigger a new window with the Twitter dialog, in the middle of the page\r\n window.open($window.SOCIAL_CONFIGURATION.URL_DIALOG_BASE + 'share?' + options.join('&'), 'facebookWindow', 'height=266, width=550, top=' + ($window.innerHeight / 2 - 225) + ', left=' + $window.innerWidth / 2 + ',' +\r\n ' toolbar=0, location=0, menubar=0, directories=0, scrollbars=0');\r\n }\r\n\r\n vm.shareTwitter = ()=> {\r\n //We get the URL of the link\r\n var loc = $window.location.href;\r\n //We get the title of the link\r\n var title = vm.socialShareTitle;\r\n\r\n //array of key/value objects\r\n var options = new Array();\r\n options.push('url=' + encodeURIComponent(loc));\r\n options.push('text=' + encodeURIComponent(title));\r\n options.push('via=' + encodeURIComponent('fliptocom'));\r\n\r\n //We trigger a new window with the Twitter dialog, in the middle of the page\r\n window.open('https://twitter.com/intent/tweet?' + options.join('&'),\r\n 'twitterWindow',\r\n 'height=266, width=550, top=' + ($window.innerHeight / 2 - 225) + ', left=' + $window.innerWidth / 2 + ',' +\r\n ' toolbar=0, location=0, menubar=0, directories=0, scrollbars=0');\r\n }\r\n\r\n vm.shareLinkedIn = () => {\r\n //We get the URL of the link\r\n var loc = $window.location.href;\r\n //We get the title of the link\r\n var title = vm.socialShareTitle;\r\n\r\n //array of key/value objects\r\n var options = new Array();\r\n options.push('min=' + true);\r\n options.push('url=' + encodeURIComponent(loc));\r\n options.push('title=' + encodeURIComponent(title));\r\n options.push('summary=' + encodeURIComponent(vm.socialShareContent));\r\n\r\n //We trigger a new window with the Twitter dialog, in the middle of the page\r\n window.open('https://www.linkedin.com/shareArticle?' + options.join('&'),\r\n 'linkedInWindow',\r\n 'height=530, width=550, top=' + ($window.innerHeight / 2 - 225) + ', left=' + $window.innerWidth / 2 + ',' +\r\n ' toolbar=0, location=0, menubar=0, directories=0, scrollbars=0');\r\n }\r\n\r\n vm.shareGPlus = ()=> {\r\n //We get the URL of the link\r\n var loc = $window.location.href;\r\n\r\n //array of key/value objects\r\n var options = new Array();\r\n options.push('url=' + encodeURIComponent(loc));\r\n\r\n //We trigger a new window with the Twitter dialog, in the middle of the page\r\n window.open('https://plus.google.com/share?' + options.join('&'),\r\n 'googlePlusWindow',\r\n 'height=450, width=550, top=' + ($window.innerHeight / 2 - 225) + ', left=' + $window.innerWidth / 2 + ',' +\r\n ' toolbar=0, location=0, menubar=0, directories=0, scrollbars=1');\r\n }\r\n\r\n $http\r\n .get('/api/blog/getArticle/' + $stateParams.articleSlug)\r\n .then((response)=> {\r\n response = response.data.Data;\r\n\r\n if (!response || response.errorCode) {\r\n //TODO: handle error\r\n return;\r\n }\r\n\r\n vm.socialShareTitle = response.Title;\r\n vm.socialShareContent = response.MetaDescription;\r\n vm.socialFeaturedImage = response.FeaturedImageUrl ? response.FeaturedImageUrl: null;\r\n\r\n });\r\n\r\n vm.subscribe = function (email) {\r\n $analytics.setUsername(email);\r\n $http.post(\"/api/subscriptions/add-blog-subscription\", { Email: email })\r\n .then(response => {\r\n vm.isSubscribed = true;\r\n vm.isSubscribeError = false;\r\n }, error => {\r\n vm.isSubscribed = false;\r\n vm.isSubscribeError = true;\r\n });\r\n };\r\n \r\n return vm;\r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n\r\n angular.module('fliptoWeb')\r\n .controller('BlogCtrl', ['$http', '$sce', '$window', '$location', '$analytics', '$stateParams',\r\n function ($http, $sce, $window, $location, $analytics, $stateParams) {\r\n var vm = this;\r\n var catSlug = $stateParams.categorySlug;\r\n var isResetCache = !!($location.search().reset);\r\n var qs = isResetCache ? '?reset=true' : '';\r\n\r\n vm.currentPageNumber = 1;\r\n vm.hasNextPage = true;\r\n vm.blogPosts = [];\r\n vm.trust = $sce.trustAsHtml;\r\n vm.isLoading = false;\r\n vm.isSubscribed = false;\r\n vm.isSubscribeError = false;\r\n\r\n vm.getStyle = article => {\r\n var style = {};\r\n if (article.FeaturedImageUrl)\r\n style[\"background-image\"] = \"url(\" + article.FeaturedImageUrl + \")\";\r\n return style;\r\n }\r\n\r\n vm.getNextPage = () => {\r\n //[HttpGet, Route(\"blog/api/getPage/{pageNumber}\"), Route(\"blog/api/getPage/{categorySlug}/{pageNumber}\")]\r\n vm.isLoading = true;\r\n\r\n if (vm.hasNextPage) {\r\n $http\r\n .get('/api/blog/getPage/' + (catSlug ? 'cat/' + catSlug + \"/\" : \"\") + (vm.currentPageNumber + 1) + window.location.search)\r\n .then((response) => {\r\n //console.log(response);\r\n response = response.data.Data;\r\n\r\n if (!response) {\r\n //handle error\r\n return;\r\n }\r\n\r\n //increment page number\r\n vm.currentPageNumber++;\r\n\r\n //determine if response had any posts;\r\n if (!response.Posts || response.Posts.length < 1) {\r\n //no data returned, probably end of records\r\n vm.hasNextPage = false;\r\n return;\r\n }\r\n //determine if has next page\r\n if (vm.currentPageNumber * $window.BLOG_POST_LIST_PAGE_SIZE >= response.TotalCount)\r\n vm.hasNextPage = false;\r\n\r\n angular.forEach(response.Posts,(post) => {\r\n vm.blogPosts.push(post);\r\n });\r\n })\r\n .finally(() => {\r\n vm.isLoading = false;\r\n });\r\n }\r\n }\r\n\r\n vm.subscribe = function (email) {\r\n $analytics.setUsername(email);\r\n $http.post(\"/api/subscriptions/add-blog-subscription\", { Email: email })\r\n .then(response => {\r\n vm.isSubscribed = true;\r\n vm.isSubscribeError = false;\r\n }, error => {\r\n vm.isSubscribed = false;\r\n vm.isSubscribeError = true;\r\n });\r\n };\r\n\r\n return vm;\r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('ContactCtrl', ['$scope', '$window', 'ApiService', '$analytics',\r\n function ($scope, $window, ApiService, $analytics) {\r\n \"use strict\";\r\n\r\n var vm = this;\r\n\r\n // TO DO: Need to have dev dynamically generate analytics-label based on where intial click came from. Either from \"about contact us\", \"footer contact us\", \"blog article contact us\", \"news article contact us\", or \"subscription error contact us\" //\r\n var trackingInfo = {\r\n submitForm: {\r\n eventName: \"submitted contact us form\",\r\n eventProperties: {\r\n category: \"contacts\",\r\n label: \"about contact us\"\r\n }\r\n },\r\n submitSuccess: {\r\n eventName: \"successful contact us form submit\",\r\n eventProperties: {\r\n category: \"contacts\",\r\n label: \"about contact us\"\r\n }\r\n },\r\n submitFail: {\r\n eventName: \"failed contact us form submit\",\r\n eventProperties: {\r\n category: \"contacts\",\r\n label: \"about contact us\"\r\n }\r\n },\r\n modalAbandon: {\r\n submitted: \"closed modal after contact us form submit\",\r\n abandon: \"hard abandoned contact us\"\r\n }\r\n }\r\n\r\n vm.firstName = \"\";\r\n vm.lastName = \"\";\r\n vm.email = \"\";\r\n vm.notes = \"\";\r\n\r\n vm.activeSection = 0;\r\n\r\n vm.activateSection = section => {\r\n this.activeSection = section;\r\n }\r\n\r\n vm.errorMessage = \"\";\r\n\r\n vm.processingRequest = false;\r\n\r\n vm.hasBeenSubmitted = false;\r\n\r\n vm.trackingInfo = () => {\r\n return vm.hasBeenSubmitted ? trackingInfo.modalAbandon.submitted : trackingInfo.modalAbandon.abandon;\r\n }\r\n\r\n vm.submit = () => {\r\n this.errorMessage = \"\";\r\n this.processingRequest = true;\r\n\r\n $analytics.eventTrack(trackingInfo.submitForm.eventName, trackingInfo.submitForm.eventProperties);\r\n\r\n var data = {\r\n First: this.firstName,\r\n Last: this.lastName,\r\n Email: this.email,\r\n Description: this.notes\r\n }\r\n\r\n //todo: turn this into a utility service and call it from all contact forms\r\n var analyticsData = ((obj) => {\r\n var dataObj = {};\r\n for (var i in obj) {\r\n if (obj.hasOwnProperty(i) && i !== \"ExtendedData\") {\r\n dataObj[i] = data[i];\r\n } else if (obj.hasOwnProperty(i) && i === \"ExtendedData\") {\r\n angular.forEach(obj[i], item => {\r\n dataObj[item.Key] = item.Value;\r\n });\r\n }\r\n }\r\n return dataObj;\r\n })(data);\r\n\r\n $analytics.setUsername(data.Email || data.First + ' ' + data.Last);\r\n $analytics.setUserProperties(analyticsData);\r\n\r\n ApiService.ContactUs_Post(data)\r\n .then(function (response) {\r\n if (response.data.Success) {\r\n vm.activateSection(1);\r\n vm.hasBeenSubmitted = true;\r\n $analytics.eventTrack(trackingInfo.submitSuccess.eventName, trackingInfo.submitSuccess.eventProperties);\r\n } else {\r\n vm.errorMessage = response.data.Message;\r\n $analytics.eventTrack(trackingInfo.submitFail.eventName, trackingInfo.submitFail.eventProperties);\r\n }\r\n\r\n vm.processingRequest = false;\r\n });\r\n }\r\n\r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('GetStartedCtrl', ['$window',\r\n function ($window) {\r\n \"use strict\";\r\n\r\n var vm = this;\r\n\r\n var trackingInfo = {\r\n modalAbandon: {\r\n submitted: \"closed modal after demo request form submit\",\r\n abandon: \"hard abandoned demo request\"\r\n }\r\n }\r\n\r\n vm.isIntro = () => {\r\n return $window.isIntro;\r\n }\r\n\r\n vm.isPartner = () => {\r\n return $window.isPartner;\r\n }\r\n\r\n //handles hide/show of sections\r\n //required for directive get-started\r\n vm.activeSection = $window.isIntro || $window.isPartner ? 4 : 0;\r\n\r\n vm.hasBeenSubmitted = false;\r\n\r\n //handles switching sections\r\n //required for directive get-started\r\n vm.activateSection = (section) => {\r\n //updateSection method is defined inside the directive.\r\n vm.dirGetStartedAccessor.updateSection(section);\r\n vm.activeSection = section;\r\n }\r\n\r\n vm.setSubmittedState = (val) => {\r\n vm.dirGetStartedAccessor.updateSection(val);\r\n vm.hasBeenSubmitted = val;\r\n }\r\n\r\n vm.trackingInfo = () => {\r\n return vm.hasBeenSubmitted ? trackingInfo.modalAbandon.submitted : trackingInfo.modalAbandon.abandon;\r\n }\r\n\r\n /**\r\n * Go back to router view\r\n * @returns {} \r\n */\r\n vm.goBack = () => {\r\n vm.activateSection(0);\r\n };\r\n\r\n //model property accessor for directive/controller communications\r\n //required for directive get-started\r\n vm.dirGetStartedAccessor = {\r\n activateSection: vm.activateSection,\r\n activeSection: vm.activeSection,\r\n hasBeenSubmitted: vm.hasBeenSubmitted,\r\n setSubmittedState: vm.setSubmittedState\r\n };\r\n }]);\r\n})()\r\n", "\uFEFF\r\nangular.module(\"fliptoWeb\")\r\n .directive(\"ftGetStarted\", [\"$compile\", \"$animate\", \"timezones\", \"callTimes\", \"ApiService\", \"$analytics\", \"$window\", \"$location\",\r\n ($compile, $animate, timezones, callTimes, ApiService, $analytics, $window, $location) => {\r\n\r\n var templateUrl = \"get-started.html\";\r\n\r\n // TO DO: Need to have dev dynamically generate analytics-label based on where intial click came from. //\r\n var trackingInfo = {\r\n // TO DO: Dev, please remove if this isn't used //\r\n submitFormDiscovery: {\r\n eventName: \"Get-Started: Discovery Form Submit\",\r\n eventProperties: {\r\n category: \"Get-Started: Discovery Form Submit\",\r\n label: \"Get-Started: Discovery Form Submit\"\r\n }\r\n },\r\n submitFormDemo: {\r\n eventName: \"submitted demo request form\",\r\n eventProperties: {\r\n category: \"demo requests\",\r\n label: \"top nav demo request\"\r\n }\r\n },\r\n // TO DO: Dev, please remove if this isn't used //\r\n submitFormSignup: {\r\n eventName: \"Get-Started: Signup Form Submit\",\r\n eventProperties: {\r\n category: \"Get-Started: Signup Form Submit\",\r\n label: \"Get-Started: Signup Form Submit\"\r\n }\r\n },\r\n submitSuccess: {\r\n eventName: \"successful demo request form submit\",\r\n eventProperties: {\r\n category: \"demo requests\",\r\n label: \"top nav demo request\"\r\n }\r\n },\r\n submitFail: {\r\n eventName: \"failed demo request form submit\",\r\n eventProperties: {\r\n category: \"demo requests\",\r\n label: \"top nav demo request\"\r\n }\r\n }\r\n }\r\n\r\n return {\r\n restrict: \"AE\",\r\n replace: true,\r\n templateUrl: \"get-started.html\",\r\n scope: {\r\n accessor: \"=\",\r\n sectionChangeAccessor: \"&\"\r\n },\r\n link(scope, elem, attrs) {\r\n\r\n //gets active section from controller\r\n //NEW DEFAULT IS ACTIVE SECTION 3 AND NO LONGER IS BASED ON CONTROLLER!!!!\r\n scope.activeSection = scope.accessor.activeSection || 0;\r\n //scope.activeSection = 3;\r\n\r\n //binds change handler from controller to directive\r\n scope.activateSection = scope.accessor.activateSection;\r\n\r\n //Creates a method on the accessor for communication from controller to directive\r\n scope.accessor.updateSection = section => {\r\n scope.errorMessage = \"\";\r\n //somehow somewhere this is getting called with a value of true.... I can't find where.\r\n if (typeof section === \"number\")\r\n scope.activeSection = section;\r\n }\r\n\r\n scope.hasBeenSubmitted = scope.accessor.hasBeenSubmitted;\r\n scope.setSubmittedState = scope.accessor.setSubmittedState;\r\n\r\n scope.firstName = \"\";\r\n scope.lastName = \"\";\r\n scope.email = \"\";\r\n scope.phone = \"\";\r\n scope.timezone = null;\r\n scope.callTime = null;\r\n scope.notes = \"\";\r\n\r\n /*\r\n * None = 0,\r\n * SingleProperty = 1,\r\n * ManagementGroup = 2,\r\n * Destination = 3,\r\n * MarketingAgency = 4,\r\n * SomethingAwesome = 99\r\n */\r\n scope.leadType = 0;\r\n scope.hotelInfo = \"\";\r\n scope.url = \"\";\r\n\r\n scope.bookingEngine = \"\";\r\n scope.isSignupOver100Month = false;\r\n scope.isADROver65 = false;\r\n scope.roomCount = \"\";\r\n\r\n scope.timezones = timezones.list;\r\n\r\n scope.callTimes = callTimes.list;\r\n\r\n scope.leadTypes = [\r\n {\r\n value: 1,\r\n description: \"A single property\",\r\n descriptionFull: \"I represent a single property\"\r\n },\r\n {\r\n value: 2,\r\n description: \"Several properties\",\r\n descriptionFull: \"I represent several properties\"\r\n },\r\n {\r\n value: 3,\r\n description: \"A destination\",\r\n descriptionFull: \"I represent a destination\"\r\n },\r\n {\r\n value: 4,\r\n description: \"A marketing agency\",\r\n descriptionFull: \"I represent a marketing agency\"\r\n },\r\n {\r\n value: 99,\r\n description: \"Something else\",\r\n descriptionFull: \"I represent something else\"\r\n }\r\n ];\r\n\r\n scope.showNotes = false;\r\n\r\n scope.activateNotes = () => {\r\n scope.showNotes = true;\r\n }\r\n\r\n scope.errorMessage = \"\";\r\n\r\n scope.processingRequest = false;\r\n\r\n scope.submit = () => {\r\n scope.errorMessage = \"\";\r\n scope.processingRequest = true;\r\n \r\n\r\n var data = {\r\n //Partner: null,\r\n ContactType: scope.activeSection,\r\n Company: scope.hotelInfo,\r\n Email: scope.email,\r\n First: scope.firstName,\r\n Last: scope.lastName,\r\n Phone: scope.phone,\r\n Type: scope.leadType.value,\r\n Url: scope.url,\r\n Description: scope.notes,\r\n ExtendedData: []\r\n }\r\n\r\n /*\r\n * Contact Type\r\n * public enum ContactType\r\n * ContactForm = 0,\r\n * PartnerSignup = 1,\r\n * DiscoveryRequest = 2,\r\n * SelfGuidedDemoRequest = 3,\r\n * FullDemoRequest = 4,\r\n */\r\n if (scope.activeSection === 3 || scope.activeSection === 4) {\r\n $analytics.eventTrack(trackingInfo.submitFormDemo.eventName, trackingInfo.submitFormDemo.eventProperties);\r\n }\r\n\r\n if (scope.bookingEngine)\r\n data.ExtendedData.push({ Key: \"Booking-Engine\", Value: scope.bookingEngine });\r\n if (scope.isSignupOver100Month)\r\n data.ExtendedData.push({ Key: \"Is-Signup-Over-100-Month\", Value: scope.isSignupOver100Month });\r\n if (scope.isADROver65)\r\n data.ExtendedData.push({ Key: \"Is-ADR-Over-65\", Value: scope.isADROver65 });\r\n if (scope.roomCount)\r\n data.ExtendedData.push({ Key: \"Room-Count\", Value: scope.roomCount });\r\n if (scope.callTime)\r\n data.ExtendedData.push({ Key: \"Best-Time-To-Call\", Value: scope.callTime.description });\r\n if (scope.timezone)\r\n data.ExtendedData.push({ Key: \"Best-Time-To-Call-Timezone\", Value: scope.timezone.code });\r\n\r\n data.ExtendedData.push({ Key: \"Source Url\", Value: $location.absUrl() });\r\n\r\n //todo: turn this into a utility service\r\n var analyticsData = ((obj) => {\r\n var dataObj = {};\r\n for (var i in obj) {\r\n if (obj.hasOwnProperty(i) && i !== \"ExtendedData\") {\r\n dataObj[i] = data[i];\r\n } else if (obj.hasOwnProperty(i) && i === \"ExtendedData\") {\r\n angular.forEach(obj[i], item => {\r\n dataObj[item.Key] = item.Value;\r\n });\r\n }\r\n }\r\n return dataObj;\r\n })(data);\r\n\r\n $analytics.setUsername(data.Email || data.First + ' ' + data.Last);\r\n $analytics.setUserProperties(analyticsData);\r\n\r\n ApiService.GetStarted_Post(data)\r\n .then(response => {\r\n\r\n if (response.data.Success) {\r\n scope.activateSection(10);\r\n scope.setSubmittedState(true);\r\n $analytics.eventTrack(trackingInfo.submitSuccess.eventName, trackingInfo.submitSuccess.eventProperties);\r\n } else {\r\n $analytics.eventTrack(trackingInfo.submitFail.eventName, trackingInfo.submitFail.eventProperties);\r\n scope.errorMessage = response.data.Message;\r\n }\r\n\r\n scope.processingRequest = false;\r\n },\r\n response => {\r\n scope.errorMessage = !!response.data && !!response.data.MessageMessage ? response.data.Message : \"Something terrible happened\";\r\n scope.processingRequest = false; \r\n });\r\n }\r\n\r\n // Turn on cloudflare turnstile\r\n elem[0].querySelectorAll(\".turnstile-widget.form-group\").forEach(widget => {\r\n globalThis.turnstile?.render(widget, {\r\n sitekey: widget.getAttribute(\"data-sitekey\"),\r\n callback: (token) => {\r\n setTimeout(() => {\r\n widget.classList.add(\"d-none\");\r\n }, 1000);\r\n },\r\n });\r\n });\r\n }\r\n };\r\n\r\n\r\n }]);", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('PartnerSignupCtrl', ['$scope', 'ApiService', '$analytics',\r\n function ($scope, ApiService, $analytics) {\r\n \"use strict\";\r\n\r\n var vm = this;\r\n\r\n var trackingInfo = {\r\n submitForm: {\r\n eventName: \"submitted partner sign up form\",\r\n eventProperties: {\r\n category: \"partner sign ups\",\r\n label: \"partners page sign up\"\r\n }\r\n },\r\n submitSuccess: {\r\n eventName: \"successful partner sign up form submit\",\r\n eventProperties: {\r\n category: \"partner sign ups\",\r\n label: \"partners page sign up\"\r\n }\r\n },\r\n submitFail: {\r\n eventName: \"failed partner sign up form submit\",\r\n eventProperties: {\r\n category: \"partner sign ups\",\r\n label: \"partners page sign up\"\r\n }\r\n },\r\n modalAbandon: {\r\n submitted: \"closed modal after partner sign up form submit\",\r\n abandon: \"hard abandoned partner sign up\"\r\n }\r\n }\r\n\r\n vm.firstName = \"\";\r\n vm.lastName = \"\";\r\n vm.email = \"\";\r\n vm.phone = \"\";\r\n vm.title = \"\";\r\n vm.hotelInfo = \"\";\r\n vm.url = \"\";\r\n vm.services = \"\";\r\n vm.notes = \"\";\r\n\r\n vm.isCustomer = null;\r\n\r\n vm.isChangingBookingEngine = false;\r\n vm.isGuestRetargeting = false;\r\n vm.isEnhancedGuestProfiles = false;\r\n vm.isIntegratedMarketing = false;\r\n\r\n //This is set to 2 because we don't want the choice active at the moment.\r\n vm.activeSection = 2;\r\n\r\n vm.activateSection = section => {\r\n this.activeSection = section;\r\n }\r\n\r\n vm.errorMessage = \"\";\r\n\r\n vm.processingRequest = false;\r\n\r\n vm.hasBeenSubmitted = false;\r\n\r\n vm.trackingInfo = () => {\r\n return vm.hasBeenSubmitted ? trackingInfo.modalAbandon.submitted : trackingInfo.modalAbandon.abandon;\r\n }\r\n\r\n vm.submit = () => {\r\n this.errorMessage = \"\";\r\n this.processingRequest = true;\r\n\r\n $analytics.eventTrack(trackingInfo.submitForm.eventName, trackingInfo.submitForm.eventProperties);\r\n\r\n var data = {\r\n First: this.firstName,\r\n Last: this.lastName,\r\n Email: this.email,\r\n Phone: this.phone,\r\n Title: this.title,\r\n Company: this.company,\r\n Url: this.url,\r\n Description: this.notes,\r\n ExtendedData: []\r\n }\r\n\r\n if (this.services)\r\n data.ExtendedData.push({ Key: \"Services-Offered\", Value: this.services });\r\n\r\n if (this.isCustomer != null)\r\n data.ExtendedData.push({ Key: \"Is-Customer\", Value: this.isCustomer });\r\n\r\n if (this.isChangingBookingEngine)\r\n data.ExtendedData.push({ Key: \"Interest-Changing-Booking-Engine\", Value: this.isChangingBookingEngine });\r\n\r\n if (this.isGuestRetargeting)\r\n data.ExtendedData.push({ Key: \"Interest-Guest-Retargeting\", Value: this.isGuestRetargeting });\r\n\r\n if (this.isEnhancedGuestProfiles)\r\n data.ExtendedData.push({ Key: \"Interest-Enhanced-Guest-Profiles\", Value: this.isEnhancedGuestProfiles });\r\n\r\n if (this.isIntegratedMarketing)\r\n data.ExtendedData.push({ Key: \"Interest-Integrated-Marketing\", Value: this.isIntegratedMarketing });\r\n\r\n //todo: turn this into a utility service and call it from all contact forms\r\n var analyticsData = ((obj) => {\r\n var dataObj = {};\r\n for (var i in obj) {\r\n if (obj.hasOwnProperty(i) && i !== \"ExtendedData\") {\r\n dataObj[i] = data[i];\r\n } else if (obj.hasOwnProperty(i) && i === \"ExtendedData\") {\r\n angular.forEach(obj[i], item => {\r\n dataObj[item.Key] = item.Value;\r\n });\r\n }\r\n }\r\n return dataObj;\r\n })(data);\r\n\r\n $analytics.setUsername(data.Email || data.First + ' ' + data.Last);\r\n $analytics.setUserProperties(analyticsData);\r\n\r\n ApiService.PartnerSignup_Post(data)\r\n .then(response => {\r\n if (response.data.Success) {\r\n $analytics.eventTrack(trackingInfo.submitSuccess.eventName, trackingInfo.submitSuccess.eventProperties);\r\n vm.hasBeenSubmitted = true;\r\n vm.activateSection(3);\r\n } else {\r\n $analytics.eventTrack(trackingInfo.submitFail.eventName, trackingInfo.submitFail.eventProperties);\r\n vm.errorMessage = response.data.Message;\r\n }\r\n vm.processingRequest = false;\r\n\r\n });\r\n }\r\n\r\n }]);\r\n})()", "\uFEFF\r\nangular.module(\"fliptoWeb\")\r\n .controller(\"PartnerPortalSignupCtrl\",\r\n [\r\n \"$scope\", \"ApiService\", \"$analytics\", \"PartnerService\", \"$location\",\r\n function ($scope, ApiService, $analytics, PartnerService, $location) {\r\n \"use strict\";\r\n\r\n enum Sections {\r\n YourSelf = 1,\r\n WhoYouIntroduce = 2,\r\n Complete = 3\r\n }\r\n\r\n var vm = this;\r\n\r\n vm.activeSection = Sections.YourSelf;\r\n vm.yourSelf = {};\r\n vm.introductionTarget = {};\r\n\r\n var trackingInfo = {\r\n submitForm: {\r\n eventName: \"submitted partner sign up form\",\r\n eventProperties: {\r\n category: \"partner sign ups\",\r\n label: \"partners page sign up\"\r\n }\r\n },\r\n submitSuccess: {\r\n eventName: \"successful partner sign up form submit\",\r\n eventProperties: {\r\n category: \"partner sign ups\",\r\n label: \"partners page sign up\"\r\n }\r\n },\r\n submitFail: {\r\n eventName: \"failed partner sign up form submit\",\r\n eventProperties: {\r\n category: \"partner sign ups\",\r\n label: \"partners page sign up\"\r\n }\r\n },\r\n modalAbandon: {\r\n submitted: \"closed modal after partner sign up form submit\",\r\n abandon: \"hard abandoned partner sign up\"\r\n }\r\n };\r\n vm.processingRequest = false;\r\n\r\n vm.hasBeenSubmitted = false;\r\n\r\n\r\n vm.submitYourSelfForm = () => {\r\n vm.activeSection = Sections.WhoYouIntroduce;\r\n };\r\n\r\n vm.makeAnotherIntro = () => {\r\n vm.introductionTarget = {};\r\n vm.activeSection = Sections.WhoYouIntroduce;\r\n };\r\n\r\n vm.submitWhoYouIntroduceForm = () => {\r\n this.errorMessage = \"\";\r\n this.processingRequest = true;\r\n\r\n $analytics.eventTrack(trackingInfo.submitForm.eventName, trackingInfo.submitForm.eventProperties);\r\n\r\n let leadData = {\r\n First: vm.introductionTarget.firstName,\r\n Last: vm.introductionTarget.lastName,\r\n Email: vm.introductionTarget.email,\r\n Company: vm.introductionTarget.hotelName,\r\n Description: vm.introductionTarget.notes,\r\n ExtendedData: [\r\n { Key: \"Partner.First\", Value: vm.yourSelf.firstName },\r\n { Key: \"Partner.Last\", Value: vm.yourSelf.lastName },\r\n { Key: \"Partner.Email\", Value: vm.yourSelf.email },\r\n { Key: \"Partner.Company\", Value: PartnerService.getName() },\r\n { Key: \"Source Url\", Value: $location.absUrl() }\r\n ]\r\n };\r\n\r\n var analyticsData = ((obj) => {\r\n var dataObj = {};\r\n for (let i in obj) {\r\n if (obj.hasOwnProperty(i) && i !== \"ExtendedData\") {\r\n dataObj[i] = obj[i];\r\n } else if (obj.hasOwnProperty(i) && i === \"ExtendedData\") {\r\n angular.forEach(obj[i],\r\n item => {\r\n dataObj[item.Key] = item.Value;\r\n });\r\n }\r\n }\r\n return dataObj;\r\n })(leadData);\r\n\r\n $analytics.setUsername(leadData.Email || leadData.First + \" \" + leadData.Last);\r\n $analytics.setUserProperties(analyticsData);\r\n\r\n ApiService.PartnersPortalSignup_Post(leadData)\r\n .then(response => {\r\n if (response.data.Success) {\r\n $analytics.eventTrack(trackingInfo.submitSuccess.eventName,\r\n trackingInfo.submitSuccess.eventProperties);\r\n vm.hasBeenSubmitted = true;\r\n vm.activeSection = Sections.Complete;\r\n } else {\r\n $analytics.eventTrack(trackingInfo.submitFail.eventName,\r\n trackingInfo.submitFail.eventProperties);\r\n vm.errorMessage = response.data.Message;\r\n }\r\n vm.processingRequest = false;\r\n\r\n });\r\n\r\n };\r\n\r\n }\r\n ]);", "\uFEFF\r\nangular.module('fliptoWeb').directive('ftCarouselFeatures', ['$location', function ($location) {\r\n \"use strict\";\r\n\r\n function link(scope, element, attrs) {\r\n\r\n var prestay = new Slide({\r\n name: 'prestay',\r\n title: 'Pre-stay Advocacy',\r\n titleClass: 'prestay',\r\n image: '/assets/images/areas/features/layer-panel-prestay.png',\r\n text: 'Turn the excitement of booking a trip into a message with worldwide reach',\r\n url: '/features/prestay-advocacy',\r\n active: false,\r\n order: 0\r\n });\r\n\r\n var poststay = new Slide({\r\n name: 'poststay',\r\n title: 'Post-stay Advocacy',\r\n titleClass: 'poststay',\r\n image: '/assets/images/areas/features/layer-panel-poststay.png',\r\n text: 'A reimagined post-stay interaction that builds the strongest brand connections possible.',\r\n url: '/features/poststay-advocacy',\r\n active: false,\r\n order: 1\r\n });\r\n\r\n var photoAdvocacy = new Slide({\r\n name: 'photoAdvocacy',\r\n title: 'Photo Advocacy',\r\n titleClass: 'photo',\r\n image: '/assets/images/areas/features/layer-panel-photo.png',\r\n text: 'Let your guests share their fondest memories, and tap into the creativity and unique perspectives that only your guests can provide.',\r\n url: '/features/photo-advocacy',\r\n active: false,\r\n order: 2\r\n });\r\n\r\n var superchargers = new Slide({\r\n name: 'siteSuperchargers',\r\n title: 'Site Superchargers',\r\n titleClass: 'superchargers',\r\n image: '/assets/images/areas/features/layer-panel-superchargers.png',\r\n text: 'Add personality and give site visitors a compelling incentive to book direct.',\r\n url: '/features/site-superchargers',\r\n active: false,\r\n order: 3\r\n });\r\n\r\n function Slide(obj) {\r\n this.name = obj.name;\r\n this.title = obj.title;\r\n this.titleClass = obj.titleClass,\r\n this.image = obj.image,\r\n this.text = obj.text,\r\n this.url = obj.url,\r\n this.active = obj.active,\r\n this.order = obj.order\r\n }\r\n\r\n Slide.prototype.navigate = function () {\r\n $location.url(this.url);\r\n }\r\n\r\n var nextActive = 0;\r\n\r\n var availSlides = [prestay, poststay, photoAdvocacy, superchargers];\r\n\r\n scope.owner = attrs.owner;\r\n\r\n scope.slides = [];\r\n\r\n scope.next = function () {\r\n var next = 0;\r\n angular.forEach(scope.slides, function (slide, index) {\r\n if (slide.active) {\r\n next = index === scope.slides.length -1? 0: index + 1;\r\n slide.active = false;\r\n return;\r\n }\r\n })\r\n\r\n scope.slides[next].active = true;\r\n }\r\n\r\n scope.prev = function () {\r\n var next = 0;\r\n\r\n angular.forEach(scope.slides, function (slide, index) {\r\n if (slide.active) {\r\n next = index === 0? scope.slides.length -1: index - 1;\r\n slide.active = false;\r\n return;\r\n }\r\n })\r\n\r\n scope.slides[next].active = true;\r\n }\r\n\r\n scope.getSlide = function (slideOrder) {\r\n angular.forEach(scope.slides, function (slide) {\r\n if (slide.active) {\r\n slide.active = false;\r\n return;\r\n }\r\n })\r\n\r\n scope.slides[slideOrder].active = true;\r\n }\r\n\r\n angular.forEach(availSlides, function (item) {\r\n if (item.name != scope.owner) {\r\n scope.slides.push(item);\r\n } else {\r\n if (item.order >= availSlides.length -1)\r\n nextActive = 0;\r\n else\r\n nextActive = item.order;\r\n }\r\n });\r\n\r\n scope.slides[nextActive].active = true;\r\n }\r\n\r\n return {\r\n restrict: 'AE',\r\n replace: true,\r\n templateUrl: 'ft-carousel-features.html',\r\n scope: {\r\n owner: '='\r\n },\r\n link: link\r\n };\r\n}]);", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('GoingLiveCtrl', ['$scope',\r\n function ($scope) {\r\n \r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('ManagementCtrl', ['$scope',\r\n function ($scope) {\r\n \r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('PhotoAdvocacyCtrl', ['$scope',\r\n function ($scope) {\r\n \r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('PoststayCtrl', ['$scope',\r\n function ($scope) {\r\n \r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('PrestayCtrl', [\r\n function () {\r\n\r\n\r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('SuperchargersCtrl', ['$scope',\r\n function ($scope) {\r\n \r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('FeaturesCtrl', ['$scope',\r\n function ($scope) {\r\n \r\n }]);\r\n})()\r\n", "\uFEFF/**\r\n * Kevin's scroll animation attempt\r\n */\r\nangular.module('fliptoWeb')\r\n .factory('$waypoint', ['$window', $window => options => new $window.Waypoint(options)])\r\n .directive('ftPositionalClass', [\r\n '$waypoint', $waypoint => {\r\n return {\r\n restrict: 'A',\r\n link($scope, $element, $attrs) {\r\n var classToChange = $attrs.ftPositionalClass || 'animate-now';\r\n var re = new RegExp(\"(?:^|\\\\s)\" + classToChange + \"(?!\\\\S)\");\r\n var offsets = [];\r\n if ($attrs.ftPositionalClassOffset) {\r\n offsets = $attrs.ftPositionalClassOffset.replace(/\\s+/g, '').split(',');\r\n } else {\r\n offsets = [0];\r\n }\r\n for (var i = 0; i < offsets.length; i++) {\r\n $waypoint({\r\n handler() {\r\n if ($attrs.ftPositionalClassFunction) {\r\n $scope.$eval($attrs.ftPositionalClassFunction);\r\n } else if ($attrs.ftPositionalClassRemove) {\r\n this.element.className = this.element.className.replace(re, '');\r\n } else {\r\n this.element.className += (\" \" + classToChange);\r\n }\r\n\r\n // Destroy it if this is only supposed to fire once\r\n if (!$attrs.ftPositionalClassMulti) {\r\n this.destroy();\r\n }\r\n },\r\n element: $element[0],\r\n continuous: true,\r\n offset: offsets[i]\r\n });\r\n }\r\n \r\n }\r\n };\r\n }\r\n ]);\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('NavigationCtrl', ['$scope', 'ApiService',\r\n function ($scope, ApiService) {\r\n var vm = this;\r\n\r\n vm.menuActive = true;\r\n\r\n //handles hide/show of sections\r\n //required for directive get-started\r\n vm.activeSection = 0;\r\n\r\n //handles switching sections\r\n //required for directive get-started\r\n vm.activateSection = function (section) {\r\n //updateSection method is defined inside the directive.\r\n vm.dirGetStartedAccessor.updateSection(section);\r\n vm.activeSection = section;\r\n }\r\n\r\n //model property accessor for directive/controller communications\r\n //required for directive get-started\r\n vm.dirGetStartedAccessor = {\r\n activateSection: vm.activateSection,\r\n activeSection: vm.activeSection\r\n };\r\n\r\n vm.name = \"\";\r\n vm.email = \"\";\r\n vm.phone = \"\";\r\n\r\n vm.getStarted = function () {\r\n vm.menuActive = false;\r\n }\r\n\r\n vm.submit = function (leadType) {\r\n\r\n var data = {\r\n Name: vm.name,\r\n Email: vm.email,\r\n Phone: vm.phone,\r\n //TimeZone:null,\r\n TimeRange: 0,\r\n LeadType: 0,\r\n Partner: \"\"\r\n }\r\n\r\n ApiService.GetStarted_Post(data)\r\n .then(function (response) {\r\n\r\n vm.activateSection(4);\r\n });\r\n }\r\n\r\n\r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n\tangular.module('fliptoWeb')\r\n .controller('Error404Ctrl', ['$scope',\r\n function ($scope) {\r\n \r\n }]);\r\n})()\r\n", "/**\r\n * Created by roman.kupin on 7/27/2017.\r\n */\r\n\r\n/*export*/ class Contacts {\r\n static names = {\r\n 'alfredo': 'Alfredo',\r\n 'brandon': 'Brandon',\r\n 'chris': 'Chris',\r\n 'danielle': 'Danielle',\r\n 'david': 'David',\r\n 'debi': 'Debi',\r\n 'diane': 'Diane',\r\n 'ed': 'Ed',\r\n 'geetha': 'Geetha',\r\n 'gisele': 'Gisele',\r\n 'guido': 'Guido',\r\n 'hal': 'Hal',\r\n 'jeanmichel': 'Jean-Michel',\r\n 'jeff': 'Jeff',\r\n 'jessica': 'Jessica',\r\n 'jon': 'Jon',\r\n 'joseph': 'Joseph',\r\n 'matt': 'Matt',\r\n 'mike': 'Michael',\r\n 'monica': 'Monica',\r\n 'raul': 'Raul',\r\n 'richard': 'Richard',\r\n 'loren': 'Loren',\r\n 'richardtoms': 'Richard',\r\n 'shelby': 'Shelby',\r\n 'worldhotels': 'Daniel',\r\n 'stashrewards': 'Richard',\r\n 'milemarker630': 'Allison'\r\n };\r\n static emails = {\r\n 'alfredo': 'join@flip.to',\r\n 'brandon': 'join@flip.to',\r\n 'chris': 'join@flip.to',\r\n 'danielle': 'join@flip.to',\r\n 'david': 'join@flip.to',\r\n 'debi': 'join@flip.to',\r\n 'diane': 'dvanleunen@flip.to',\r\n 'ed': 'estonge@flip.to',\r\n 'geetha': 'join@flip.to',\r\n 'gisele': 'gsuarez@flip.to',\r\n 'guido': 'gsalvatori@flip.to',\r\n 'hal': 'hfickett@flip.to',\r\n 'jeanmichel': 'jmrepellin@flip.to',\r\n 'jeff': 'join@flip.to',\r\n 'jessica': 'jaslanian@flip.to',\r\n 'jon': 'jruggles@flip.to',\r\n 'joseph': 'jmeuse@flip.to',\r\n 'matt': 'join@flip.to',\r\n 'mike': 'mmathews@flip.to',\r\n 'monica': 'mrodino@flip.to',\r\n 'raul': 'join@flip.to',\r\n 'richard': 'join@flip.to',\r\n 'loren': 'loreneegray@gmail.com',\r\n 'richardtoms': 'richard@thebrandmix.com',\r\n 'shelby': 'marketing@flip.to',\r\n 'worldhotels': 'dspellman@worldhotels.com',\r\n 'stashrewards': 'join@flip.to',\r\n 'milemarker630': 'allison@milemarker630.com'\r\n };\r\n static emailsToShortNames = {\r\n 'alfredo@flip.to': 'alfredo',\r\n 'barbelaez@flip.to': 'brandon',\r\n 'dfierman@flip.to': 'danielle',\r\n 'dbruce@flip.to': 'david',\r\n 'dmoses@flip.to': 'debi',\r\n 'dvanleunen@flip.to': 'diane',\r\n 'estonge@flip.to': 'ed',\r\n 'gbalakrishnan@flip.to': 'geetha',\r\n 'gsuarez@flip.to': 'gisele',\r\n 'gsalvatori@flip.to': 'guido',\r\n 'hfickett@flip.to': 'hal',\r\n 'jmrepellin@flip.to': 'jeanmichel',\r\n 'jweibel@flip.to': 'jeff',\r\n 'jaslanian@flip.to': 'jessica',\r\n 'jruggles@flip.to': 'jon',\r\n 'jmeuse@flip.to': 'joseph',\r\n 'mcaverly@flip.to': 'matt',\r\n 'mmathews@flip.to': 'mike',\r\n 'mrodino@flip.to': 'monica',\r\n 'rvega@flip.to': 'raul',\r\n 'rdunbar@flip.to': 'richard',\r\n 'loreneegray@gmail.com': 'loren',\r\n 'allison@milemarker630.com': 'milemarker630'\r\n };\r\n}\r\n\r\n\r\nangular.module(\"fliptoWeb\")\r\n .constant(\"contacts\", Contacts);\r\n\r\n", "/**\r\n * Created by roman.kupin on 7/27/2017.\r\n */\r\n\r\n\r\n/*export */\r\nclass Representatives {\r\n\r\n static intro = ['diane', 'ed', 'gisele', 'guido', 'hal', 'jeanmichel', 'jessica', 'jon', 'joseph', 'mike', 'richardtoms'];\r\n static dmo = ['diane', 'ed', 'guido'];\r\n static vr = ['diane', 'ed', 'gisele', 'guido', 'hal', 'jeanmichel', 'jessica', 'jon', 'joseph', 'mike'];\r\n static vrexperiencekissimmee = ['ed'];\r\n static siteminder = ['ed', 'guido', 'joseph', 'mike'];\r\n static innquest = ['ed'];\r\n static benchmark = ['ed'];\r\n static chta = ['ed'];\r\n static navis = ['ed'];\r\n static milemarker630 = ['allison'];\r\n static experiencekissimmee = ['ed'];\r\n static fuel = ['ed'];\r\n static jackrabbit = ['ed'];\r\n static visitflorida = ['ed'];\r\n static intercoastalnet = ['ed'];\r\n static resortdataprocessing = ['ed'];\r\n\r\n static introFallback = ['ed'];\r\n static dmoFallback = ['ed'];\r\n static vrFallback = ['ed'];\r\n static vrexperiencekissimmeeFallback = ['ed'];\r\n static siteminderFallback = ['ed'];\r\n static innquestFallback = ['ed'];\r\n static benchmarkFallback = ['ed'];\r\n static chtaFallback = ['ed'];\r\n static navisFallback = ['ed'];\r\n static milemarker630Fallback = ['allison'];\r\n static experiencekissimmeeFallback = ['ed'];\r\n static fuelFallback = ['ed'];\r\n static jackrabbitFallback = ['ed'];\r\n static visitfloridaFallback = ['ed'];\r\n static intercoastalnetFallback = ['ed'];\r\n static resortdataprocessingFallback = ['ed'];\r\n static redirects = [/^alfredo$/gi, /^brandon$/gi, /^chris$/gi, /^danielle$/gi, /^david$/gi, /^debi$/gi, /^geetha$/gi, /^jeff$/gi, /^monica$/gi, /^raul$/gi, /^richard$/gi];\r\n\r\n constructor(public pool: string[],\r\n public fallback: string[]) {\r\n }\r\n\r\n canRepresent(name: string): boolean {\r\n return this.pool.filter((poolName) => poolName === name).length > 0;\r\n }\r\n\r\n get(): string {\r\n return Representatives.getRandomFromArray(this.pool);\r\n }\r\n\r\n getFallback(name: string): string {\r\n let redirect = this.checkRedirect(name);\r\n if (!redirect)\r\n return Representatives.getRandomFromArray(this.fallback);\r\n else return redirect;\r\n }\r\n\r\n private checkRedirect(name: string) {\r\n if (Representatives.redirects.some(r => r.test(name)) && this.fallback.filter((fallbackName) => fallbackName === 'ed').length > 0)\r\n return 'ed';\r\n return null;\r\n }\r\n\r\n private static getRandomFromArray(array: any[]) {\r\n return array[Representatives.getRandomInt(0, array.length - 1)];\r\n }\r\n\r\n private static getRandomInt(min: number, max: number): number {\r\n min = Math.ceil(min);\r\n max = Math.floor(max);\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n}\r\n\r\n\r\nangular.module(\"fliptoWeb\")\r\n .factory(\"representatives\", [function () {\r\n\r\n return function (introType) {\r\n switch (introType) {\r\n case \"intro\":\r\n return new Representatives(Representatives.intro, Representatives.introFallback);\r\n case \"dmo\":\r\n return new Representatives(Representatives.dmo, Representatives.dmoFallback);\r\n case \"vr\":\r\n return new Representatives(Representatives.vr, Representatives.vrFallback);\r\n case \"vrexperiencekissimmee\":\r\n return new Representatives(Representatives.vrexperiencekissimmee, Representatives.vrexperiencekissimmeeFallback);\r\n case \"siteminder\":\r\n return new Representatives(Representatives.siteminder, Representatives.siteminderFallback);\r\n case \"innquest\":\r\n return new Representatives(Representatives.innquest, Representatives.innquestFallback);\r\n case \"benchmark\":\r\n return new Representatives(Representatives.benchmark, Representatives.benchmarkFallback);\r\n case \"chta\":\r\n return new Representatives(Representatives.chta, Representatives.chtaFallback);\r\n case \"navis\":\r\n return new Representatives(Representatives.navis, Representatives.navisFallback);\r\n case \"milemarker630\":\r\n return new Representatives(Representatives.milemarker630, Representatives.milemarker630Fallback);\r\n case \"experiencekissimmee\":\r\n return new Representatives(Representatives.experiencekissimmee, Representatives.experiencekissimmeeFallback);\r\n case \"fuel\":\r\n return new Representatives(Representatives.fuel, Representatives.fuelFallback);\r\n case \"jackrabbit\":\r\n return new Representatives(Representatives.jackrabbit, Representatives.jackrabbitFallback);\r\n case \"visitflorida\":\r\n return new Representatives(Representatives.visitflorida, Representatives.visitfloridaFallback);\r\n case \"intercoastalnet\":\r\n return new Representatives(Representatives.intercoastalnet, Representatives.intercoastalnetFallback);\r\n case \"resortdataprocessing\":\r\n return new Representatives(Representatives.resortdataprocessing, Representatives.resortdataprocessingFallback);\r\n default:\r\n throw \"intro type is not supported\";\r\n }\r\n }\r\n }]);\r\n\r\n", "\uFEFFangular.module('fliptoWeb')\r\n .controller('IntroCtrl',\r\n [\r\n 'name', 'slug', 'introType', 'representatives', 'copyToClipboard', '$location', '$timeout', '$window', 'contacts',\r\n function (name, slug, introType, representatives, copyToClipboard, $location, $timeout, $window, contacts) {\r\n\r\n let vm = this;\r\n vm.name = name;\r\n vm.slug = slug;\r\n vm.hotelName = slug.replace(/-/gi, \" \");\r\n\r\n vm.names = contacts.names;\r\n vm.emails = contacts.emails;\r\n\r\n vm.getCopyLink = () => {\r\n if (!introType) return `http://intro.flip.to/by/${this.name}`;\r\n return `http://intro.flip.to/${introType}/by/${this.name}`;\r\n };\r\n\r\n vm.shareMessageArtifacts = {\r\n subject: encodeURIComponent(\"A marketing platform to check out\"),\r\n salesBody: encodeURIComponent(`I've been exploring a platform called Flip.to that can help boost our marketing efforts. It uses advocacy to let guests introduce our brand to travelers around the world. And a host of built-in features help to communicate and engage new leads to convert. Very interesting stuff.\r\n\r\n${vm.getCopyLink()}\r\n\r\nLet's have a conversation about it when you have a chance to take a look.`),\r\n amsBody: encodeURIComponent(`We're using a new platform called Flip.to that can help boost our marketing efforts. It uses advocacy to let guests introduce our brand to travelers around the world. And a host of built-in features help to communicate and engage new leads to convert. Very interesting stuff.\r\n\r\n${vm.getCopyLink()}\r\n\r\nLet's have a conversation about it when you have a chance to take a look.`)\r\n };\r\n \r\n if (!representatives.canRepresent(vm.name)) {\r\n let fallbackGuy = representatives.getFallback(vm.name);\r\n let newPath = (!!introType ? '/' + introType : '') + '/by/' + fallbackGuy;\r\n if (!!vm.slug) {\r\n newPath += '/' + vm.slug;\r\n }\r\n $location.path(newPath);\r\n }\r\n\r\n }\r\n ]\r\n );\r\n", "\uFEFFangular.module('fliptoWeb')\r\n .controller('IntroPersonalizedCtrl',\r\n [\r\n 'website', 'person', 'contactPerson', 'copyToClipboard', '$location', '$timeout', '$window', 'contacts',\r\n function (website, person, contactPerson, copyToClipboard, $location, $timeout, $window, contacts) {\r\n\r\n let vm = this;\r\n vm.website = website;\r\n vm.person = person;\r\n vm.name = contacts.emailsToShortNames[contactPerson];\r\n\r\n\r\n vm.names = contacts.names;\r\n vm.emails = contacts.emails;\r\n/*\r\n vm.getCopyLink = () => {\r\n if (!introType) return `http://intro.flip.to/by/${this.name}`;\r\n return `http://intro.flip.to/${introType}/by/${this.name}`;\r\n };*/\r\n\r\n vm.shareMessageArtifacts = {\r\n subject: encodeURIComponent(\"A marketing platform to check out\"),\r\n salesBody: encodeURIComponent(`I've been exploring a platform called Flip.to that can help boost our marketing efforts. It uses advocacy to let guests introduce our brand to travelers around the world. And a host of built-in features help to communicate and engage new leads to convert. Very interesting stuff.\r\n\r\n${vm.getCopyLink()}\r\n\r\nLet's have a conversation about it when you have a chance to take a look.`),\r\n amsBody: encodeURIComponent(`We're using a new platform called Flip.to that can help boost our marketing efforts. It uses advocacy to let guests introduce our brand to travelers around the world. And a host of built-in features help to communicate and engage new leads to convert. Very interesting stuff.\r\n\r\n${vm.getCopyLink()}\r\n\r\nLet's have a conversation about it when you have a chance to take a look.`)\r\n };\r\n\r\n }\r\n ]\r\n );\r\n", "\uFEFF\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .controller('WebisodeFuelCtrl', ['$http', '$stateParams', '$window', 'ApiService',\r\n function ($http, $stateParams, $window, ApiService) {\r\n var vm = this;\r\n\r\n vm.socialShareTitle = \"\";\r\n vm.socialShareContent = \"\";\r\n vm.socialFeaturedImage = null;\r\n\r\n \r\n vm.shareFacebook = () => { \r\n //array of key/value objects\r\n var options = new Array();\r\n options.push('app_id=' + encodeURIComponent($window.SOCIAL_CONFIGURATION.facebookApiKey));\r\n options.push('display=' + encodeURIComponent('popup'));\r\n options.push('href=' + encodeURIComponent($window.location.href.replace($window.location.host, \"www.flip.to\")));\r\n //We trigger a new window with the Twitter dialog, in the middle of the page\r\n window.open($window.SOCIAL_CONFIGURATION.URL_DIALOG_BASE + 'share?' + options.join('&'), 'facebookWindow', 'height=266, width=550, top=' + ($window.innerHeight / 2 - 225) + ', left=' + $window.innerWidth / 2 + ',' +\r\n ' toolbar=0, location=0, menubar=0, directories=0, scrollbars=0');\r\n }\r\n\r\n vm.shareTwitter = ()=> {\r\n //We get the URL of the link\r\n var loc = $window.location.href;\r\n //We get the title of the link\r\n var title = vm.socialShareTitle;\r\n\r\n //array of key/value objects\r\n var options = new Array();\r\n options.push('url=' + encodeURIComponent(loc));\r\n options.push('text=' + encodeURIComponent(title));\r\n options.push('via=' + encodeURIComponent('fliptocom'));\r\n\r\n //We trigger a new window with the Twitter dialog, in the middle of the page\r\n window.open('https://twitter.com/intent/tweet?' + options.join('&'),\r\n 'twitterWindow',\r\n 'height=266, width=550, top=' + ($window.innerHeight / 2 - 225) + ', left=' + $window.innerWidth / 2 + ',' +\r\n ' toolbar=0, location=0, menubar=0, directories=0, scrollbars=0');\r\n }\r\n\r\n vm.shareLinkedIn = () => {\r\n //We get the URL of the link\r\n var loc = $window.location.href;\r\n //We get the title of the link\r\n var title = vm.socialShareTitle;\r\n\r\n //array of key/value objects\r\n var options = new Array();\r\n options.push('min=' + true);\r\n options.push('url=' + encodeURIComponent(loc));\r\n options.push('title=' + encodeURIComponent(title));\r\n options.push('summary=' + encodeURIComponent(vm.socialShareContent));\r\n\r\n //We trigger a new window with the Twitter dialog, in the middle of the page\r\n window.open('https://www.linkedin.com/shareArticle?' + options.join('&'),\r\n 'linkedInWindow',\r\n 'height=530, width=550, top=' + ($window.innerHeight / 2 - 225) + ', left=' + $window.innerWidth / 2 + ',' +\r\n ' toolbar=0, location=0, menubar=0, directories=0, scrollbars=0');\r\n }\r\n\r\n\r\n vm.submit = () => {\r\n this.errorMessage = \"\";\r\n this.processingRequest = true;\r\n \r\n ApiService.WebisodeFuelSubscribe(vm.email)\r\n .then(function (response) {\r\n if (response.data.Success) {\r\n alert(\"Your message is on its way!\");\r\n vm.hasBeenSubmitted = true;\r\n } else {\r\n vm.errorMessage = response.data.Message;\r\n }\r\n\r\n vm.processingRequest = false;\r\n });\r\n }\r\n \r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n\r\n\r\n .animation('.carousel-nav-animate', [function () {\r\n return {\r\n beforeAddClass: function (element, className, done) {\r\n var link = element.children('a')[0];\r\n\r\n var tl = new TimelineLite({ onComplete: done });\r\n tl.to(link, .2, { height: \"+=20px\", width: \"+=20px\", margin: '-=10px', ease: Power2.easeOut });\r\n\r\n return function (cancelled) {\r\n //this (optional) function will be called when the animation\r\n //completes or when the animation is cancelled (the cancelled\r\n //flag will be set to true if cancelled).\r\n }\r\n },\r\n\r\n beforeRemoveClass: function (element, className, done) {\r\n var link = element.children('a')[0];\r\n\r\n var tl = new TimelineLite({ onComplete: done });\r\n tl.to(link, .2, { height: \"-=20px\", width: \"-=20px\", margin: '+=10px', ease: Power2.easeOut });\r\n\r\n return function (cancelled) {\r\n //this (optional) function will be called when the animation\r\n //completes or when the animation is cancelled (the cancelled\r\n //flag will be set to true if cancelled).\r\n }\r\n }\r\n }\r\n }])\r\n\r\n\r\n\r\n .animation('.carousel-slide-animate', [function () {\r\n return {\r\n beforeAddClass: function (element, className, done) {\r\n var tl = new TimelineLite({ onComplete: done });\r\n tl.to(element, .3, { opacity: 0 });\r\n\r\n return function (cancelled) {\r\n //this (optional) function will be called when the animation\r\n //completes or when the animation is cancelled (the cancelled\r\n //flag will be set to true if cancelled).\r\n }\r\n },\r\n\r\n beforeRemoveClass: function (element, className, done) {\r\n var tl = new TimelineLite({ onComplete: done });\r\n tl.to(element, .3, { opacity: 1 });\r\n\r\n return function (cancelled) {\r\n //this (optional) function will be called when the animation\r\n //completes or when the animation is cancelled (the cancelled\r\n //flag will be set to true if cancelled).\r\n }\r\n }\r\n }\r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .animation('.modal-animate', [() => {\r\n return {\r\n enter(element, done) {\r\n var tl = new TimelineLite({ onComplete: done });\r\n tl.from(element, .5, { opacity: 0, ease: Power2.easeOut })\r\n .from(\".modal-dialog\", .5, { opacity: 0, y: \"+=50px\", ease: Power2.easeOut }, \"-=.5\");\r\n\r\n return cancelled => {\r\n //this (optional) function will be called when the animation\r\n //completes or when the animation is cancelled (the cancelled\r\n //flag will be set to true if cancelled).\r\n }\r\n },\r\n leave(element, done) {\r\n var tl = new TimelineLite({ onComplete: done });\r\n tl.to(element, 0, { opacity: 0, display: \"none\", ease: Power2.easeOut });\r\n\r\n return cancelled => {\r\n //this (optional) function will be called when the animation\r\n //completes or when the animation is cancelled (the cancelled\r\n //flag will be set to true if cancelled).\r\n }\r\n }\r\n }\r\n }]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module(\"fliptoWeb\")\r\n .animation(\".more-animate\", [\r\n () => {\r\n return {\r\n enter: (element, done) => {\r\n var tl = new TimelineLite({ onComplete: done });\r\n\r\n tl.from(element, .3, { opacity: 0, scale: .5, transformOrigin: \"46px -15px\", ease: Power4.easeInOut });\r\n\r\n return (cancelled) => {\r\n //this (optional) function will be called when the animation\r\n //completes or when the animation is cancelled (the cancelled\r\n //flag will be set to true if cancelled).\r\n }\r\n },\r\n\r\n leave: (element, done) => {\r\n var tl = new TimelineLite({ onComplete: done });\r\n tl.to(element, .3, { opacity: 0, scale: .5, transformOrigin: \"46px -15px\", display: \"none\", ease: Power4.easeInOut });\r\n\r\n return (cancelled) => {\r\n //this (optional) function will be called when the animation\r\n //completes or when the animation is cancelled (the cancelled\r\n //flag will be set to true if cancelled).\r\n }\r\n }\r\n }\r\n }\r\n ]);\r\n})()\r\n", "\uFEFF\r\n\r\n(() => {\r\n angular.module(\"fliptoWeb\")\r\n .animation(\".view-animate\", [\r\n () => {\r\n return {\r\n enter: (element, done) => {\r\n done();\r\n return (cancelled) => {\r\n //this (optional) function will be called when the animation\r\n //completes or when the animation is cancelled (the cancelled\r\n //flag will be set to true if cancelled).\r\n }\r\n },\r\n\r\n leave: (element, done) => {\r\n window.scrollTo(0, 0);\r\n done();\r\n return (cancelled) => {\r\n //this (optional) function will be called when the animation\r\n //completes or when the animation is cancelled (the cancelled\r\n //flag will be set to true if cancelled).\r\n }\r\n }\r\n }\r\n }\r\n ]);\r\n})()\r\n", "/**\r\n * Created by Roman on 2015-03-26.\r\n */\r\n\r\n\r\nangular.module('fliptoWeb')\r\n .directive('ftLoadingAnimation', ['$compile', '$animate', function ($compile, $animate) {\r\n\r\n var template = '{{message}} ';\r\n\r\n return {\r\n restrict: 'A',\r\n link: function (scope, elem, attrs) {\r\n\r\n var options = angular.extend({disableUi: true}, scope.$eval(attrs.ftLoadingAnimation)),\r\n loadingAnimation = $compile(template)(angular.extend(scope.$new(true), options)),\r\n lastChild = elem[0].childNodes && elem[0].childNodes[elem[0].childNodes.length - 1];\r\n\r\n scope.$watch(function () {\r\n return scope.$eval(attrs.ftLoadingAnimation).trigger;\r\n }, function (show) {\r\n\r\n if (show) {\r\n $animate.enter(loadingAnimation, elem, lastChild);\r\n } else {\r\n $animate.leave(loadingAnimation);\r\n }\r\n elem.css('pointer-events', options.disableUi && show ? 'none' : '');\r\n options.disableUi && show && elem.attr('disabled', 'disabled');\r\n options.disableUi && !show && elem.removeAttr('disabled');\r\n });\r\n\r\n }\r\n };\r\n }]);", "/**\r\n * Created by Roman on 2015-03-26.\r\n */\r\n\r\n\r\nangular.module('fliptoWeb')\r\n .directive('ftSpinner', [function () {\r\n\r\n return {\r\n restrict: 'E',\r\n template: ''\r\n };\r\n }]);", "\uFEFFangular.module('fliptoWeb')\r\n .directive(\"ftSquashingMenu\", [function() {\r\n\r\n class SquashingMenuController {\r\n\r\n public menus: Array = [];\r\n public activeMenu: string;\r\n\r\n addMenu(name: string) {\r\n this.menus.push(name);\r\n }\r\n\r\n setActive(name: string) {\r\n this.activeMenu = name;\r\n }\r\n\r\n swipeLeft() {\r\n let idx = this.menus.indexOf(this.activeMenu);\r\n if (idx == -1) return;\r\n let newIdx = idx == 0 ? this.menus.length - 1 : idx - 1;\r\n this.setActive(this.menus[newIdx]);\r\n }\r\n\r\n swipeRight() {\r\n let idx = this.menus.indexOf(this.activeMenu);\r\n if (idx == -1) return;\r\n let newIdx = idx == this.menus.length - 1 ? 0 : idx + 1;\r\n this.setActive(this.menus[newIdx]);\r\n }\r\n }\r\n\r\n return {\r\n scope: {},\r\n require: \"ftSquashingMenu\",\r\n controller: () => new SquashingMenuController(),\r\n controllerAs: \"vm\",\r\n bindToController: true\r\n\r\n };\r\n\r\n }])\r\n .directive(\"ftSquashingMenuItem\", [function() {\r\n\r\n return {\r\n require: \"^ftSquashingMenu\",\r\n link: function(scope, elem, attrs, ctrl) {\r\n let menuName = attrs.ftSquashingMenuItem;\r\n ctrl.addMenu(menuName);\r\n\r\n if (angular.isDefined(attrs.active)) ctrl.setActive(menuName);\r\n\r\n elem.on(\"click\", () => { scope.$apply(() => ctrl.setActive(menuName)); });\r\n scope.$watch(() => ctrl.activeMenu, activeMenu => {\r\n if (activeMenu === menuName) {\r\n elem.addClass(\"active\");\r\n } else {\r\n elem.removeClass(\"active\");\r\n }\r\n }, true);\r\n scope.$on(\"$destroy\", () => elem.off(\"click\"));\r\n }\r\n };\r\n }])\r\n .directive(\"ftSquashingMenuContent\", [function() {\r\n\r\n return {\r\n require: \"^ftSquashingMenu\",\r\n link: function(scope, elem, attrs, ctrl) {\r\n let menuName = attrs.ftSquashingMenuContent;\r\n\r\n scope.$watch(() => ctrl.activeMenu, () => {\r\n if (menuName === ctrl.activeMenu) elem.addClass(\"active\");\r\n else elem.removeClass(\"active\");\r\n }, true);\r\n\r\n if (angular.isDefined(attrs.supportSwipe)) {\r\n var hammertime = new window[\"Hammer\"](elem[0]);\r\n hammertime.on('swipeleft', function () {\r\n scope.$apply(() => { ctrl.swipeLeft(); });\r\n });\r\n hammertime.on('swiperight', function () {\r\n scope.$apply(() => { ctrl.swipeRight(); });\r\n });\r\n }\r\n\r\n }\r\n };\r\n }]);\r\n", "\uFEFF\r\nangular.module('fliptoWeb')\r\n .directive('ftHoverClass', [function () {\r\n\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n hoverClass: '@ftHoverClass'\r\n },\r\n link: function (scope, element, attrs) {\r\n\r\n element.on('mouseenter', () => toggleHoverClass(true));\r\n element.on('mouseleave', () => toggleHoverClass(false));\r\n\r\n scope.$on(\"$destroy\", () => {\r\n element.off(\"mouseenter\", toggleHoverClass);\r\n element.off(\"mouseleave\", toggleHoverClass);\r\n });\r\n\r\n function toggleHoverClass(isOn) {\r\n if (isOn) {\r\n element.addClass(scope.hoverClass);\r\n } else {\r\n element.removeClass(scope.hoverClass);\r\n }\r\n }\r\n\r\n }\r\n };\r\n }]);", "\uFEFF\r\nangular.module('fliptoWeb')\r\n .directive('ftHoverPanels', [function () {\r\n return {\r\n restrict: 'EA',\r\n scope: {\r\n hoverClass: '@?',\r\n keepLastOpen: '=?'\r\n },\r\n bindToController: true,\r\n controllerAs: 'vm',\r\n controller: function HoverPanelsComponent() {\r\n this.panels = [];\r\n\r\n this.addPanel = function (panel) {\r\n this.panels.push(panel);\r\n if (angular.isDefined(panel.attrs.active)) {\r\n this.setActivePanel(panel);\r\n }\r\n };\r\n\r\n this.setActivePanel = function (newActivePanel) {\r\n this.panels.forEach(panel => { panel.active = false; });\r\n newActivePanel.active = true;\r\n };\r\n\r\n this.removeActivePanel = function (panel) {\r\n panel.active = false;\r\n };\r\n }\r\n };\r\n }])\r\n .directive('ftHoverPanel', [function () {\r\n return {\r\n restrict: 'EA',\r\n require: '^ftHoverPanels',\r\n link: function (scope, elem, attrs, hoverPanelsCtrl) {\r\n\r\n let panel = {\r\n elem: elem,\r\n attrs: attrs,\r\n active: false\r\n };\r\n\r\n scope.$watch(() => panel.active, function (isActive) {\r\n toggleHoverClass(isActive);\r\n }, true);\r\n hoverPanelsCtrl.addPanel(panel);\r\n\r\n elem.on('mouseenter', setActivePanel);\r\n if (!hoverPanelsCtrl.keepLastOpen) {\r\n elem.on('mouseleave', removeActivePanel);\r\n }\r\n\r\n scope.$on(\"$destroy\", () => {\r\n elem.off(\"mouseenter\", setActivePanel);\r\n if (!hoverPanelsCtrl.keepLastOpen) {\r\n elem.off(\"mouseleave\", removeActivePanel);\r\n }\r\n });\r\n\r\n function setActivePanel() {\r\n scope.$apply(function () {\r\n hoverPanelsCtrl.setActivePanel(panel);\r\n });\r\n }\r\n\r\n function removeActivePanel() {\r\n scope.$apply(function () {\r\n hoverPanelsCtrl.removeActivePanel(panel);\r\n });\r\n }\r\n\r\n function toggleHoverClass(isOn) {\r\n if (isOn) {\r\n elem.addClass(hoverPanelsCtrl.hoverClass);\r\n } else {\r\n elem.removeClass(hoverPanelsCtrl.hoverClass);\r\n }\r\n }\r\n }\r\n };\r\n }]);", "\uFEFF\r\nangular.module('fliptoWeb')\r\n .directive('ftCanvasSlides', [function () {\r\n return {\r\n restrict: 'EA',\r\n require: \"ftCanvasSlides\",\r\n scope: {\r\n },\r\n bindToController: true,\r\n controllerAs: 'ftCanvasSlides',\r\n controller: [\"$scope\", \"$element\", function CanvasSlidesController($scope, $element) {\r\n \r\n const slideChangeInterval = 8000;\r\n this.slides = [];\r\n let activeSlideIndex = -1;\r\n this.add = function (slide) {\r\n this.slides.push(slide);\r\n if (angular.isDefined(slide.attrs.active)) {\r\n this.setActive(slide);\r\n }\r\n };\r\n this.setActive = function (newActiveSlide) {\r\n $element.removeClass(`frame-${activeSlideIndex + 1}`);\r\n this.slides.forEach(slide => { slide.active = false; });\r\n newActiveSlide.active = true;\r\n activeSlideIndex = this.slides.indexOf(newActiveSlide);\r\n $element.addClass(`frame-${activeSlideIndex + 1}`);\r\n };\r\n\r\n this.removeActive = function (slide) {\r\n slide.active = false;\r\n };\r\n \r\n this.moveUp = function () {\r\n if (this.slides.length > activeSlideIndex + 1) {\r\n this.setActive(this.slides[activeSlideIndex + 1]);\r\n this.refreshInterval();\r\n } else {\r\n this.setActive(this.slides[0]);\r\n this.refreshInterval();\r\n }\r\n }\r\n\r\n this.moveDown = function() {\r\n if (this.slides.length > 0 && activeSlideIndex - 1 >= 0) {\r\n this.setActive(this.slides[activeSlideIndex - 1]);\r\n this.refreshInterval();\r\n } else {\r\n this.setActive(this.slides[this.slides.length - 1]);\r\n this.refreshInterval();\r\n }\r\n }\r\n\r\n this.intervalId = null;\r\n\r\n this.refreshInterval = () => {\r\n this.clearInterval();\r\n this.intervalId = setInterval(() => {\r\n $scope.$apply(() => this.moveUp());\r\n }, slideChangeInterval);\r\n }\r\n\r\n this.clearInterval = function() {\r\n clearInterval(this.intervalId);\r\n };\r\n\r\n this.refreshInterval();\r\n \r\n $scope.$on(\"$destroy\", () => {\r\n clearInterval(this.intervalId);\r\n });\r\n\r\n }]\r\n };\r\n }])\r\n .directive('ftCanvasSlide', [function () {\r\n return {\r\n restrict: 'EA',\r\n require: '^ftCanvasSlides',\r\n link: function (scope, elem, attrs, ctrl) {\r\n\r\n let slide = {\r\n elem: elem,\r\n attrs: attrs,\r\n active: false\r\n };\r\n\r\n scope.$watch(() => slide.active, isActive => {\r\n toggleActiveClass(isActive);\r\n }, true);\r\n ctrl.add(slide);\r\n \r\n function toggleActiveClass(isOn) {\r\n if (isOn) {\r\n elem.addClass(\"active\");\r\n } else {\r\n elem.removeClass(\"active\");\r\n }\r\n }\r\n }\r\n };\r\n }])\r\n .directive('ftCanvasSlidesMoveUp', [function () {\r\n return {\r\n restrict: 'EA',\r\n require: '^ftCanvasSlides',\r\n link: function (scope, elem, attrs, ctrl) {\r\n\r\n elem.on(\"click\", moveUp);\r\n\r\n function moveUp() {\r\n scope.$apply(() => {\r\n ctrl.moveUp();\r\n ctrl.clearInterval();\r\n });\r\n }\r\n\r\n scope.$on(\"$destroy\",\r\n () => {\r\n elem.off(\"click\", moveUp);\r\n });\r\n \r\n }\r\n };\r\n }])\r\n .directive('ftCanvasSlidesMoveDown', [function () {\r\n return {\r\n restrict: 'EA',\r\n require: '^ftCanvasSlides',\r\n link: function (scope, elem, attrs, ctrl) {\r\n\r\n elem.on(\"click\", moveDown);\r\n\r\n function moveDown() {\r\n scope.$apply(() => {\r\n ctrl.moveDown();\r\n ctrl.clearInterval();\r\n });\r\n }\r\n\r\n scope.$on(\"$destroy\",\r\n () => {\r\n elem.off(\"click\", moveDown);\r\n });\r\n \r\n }\r\n };\r\n }]);", "/**\r\n * Created by Roman on 2015-03-26.\r\n */\r\n\r\ninterface ISectionSetup {\r\n isActive: boolean;\r\n name: string;\r\n title: string;\r\n}\r\n\r\nclass SectionsController {\r\n\r\n registry: ISectionSetup[] = [];\r\n onActiveSectionChange: Function;\r\n\r\n setup(sections: ISectionSetup[], onActiveSectionChange) {\r\n this.registry = sections;\r\n this.onActiveSectionChange = onActiveSectionChange;\r\n }\r\n\r\n activate(section: ISectionSetup | string) {\r\n if (typeof section === \"string\") {\r\n section = this.registry.filter(rs => rs.name === section)[0];\r\n }\r\n this.registry.forEach(rs => rs.isActive = false);\r\n section.isActive = true;\r\n\r\n if (this.onActiveSectionChange) this.onActiveSectionChange(section);\r\n }\r\n\r\n isActive(sectionName) : boolean {\r\n const sections = this.registry ? this.registry.filter(rs => rs.name === sectionName) : [];\r\n return sections.length > 0 ? sections[0].isActive : false;\r\n }\r\n}\r\n\r\nangular.module('fliptoWeb')\r\n .directive('ftSections', [function () {\r\n\r\n return {\r\n scope: false,\r\n controller: SectionsController,\r\n controllerAs: \"$ftSections\",\r\n bindToController: true,\r\n require: \"ftSections\",\r\n link: function SectionsLinkFn(scope, elem, attrs, ctrl) {\r\n scope.$watch(() => scope.$eval(attrs.hasOwnProperty(\"ftSections\") ? attrs.ftSections : attrs.registry), (val) => ctrl.setup(val, scope.$eval(attrs.onactivesectionchange)), true);\r\n }\r\n };\r\n }])\r\n .directive('ftSection', [function () {\r\n\r\n return {\r\n scope: true,\r\n transclude: true,\r\n template: `\r\n \r\n `,\r\n link: function SectionLinkFn(scope, elem, attrs, ctrl) {\r\n scope.$watch(() => scope.$ftSections && scope.$ftSections.registry && scope.$ftSections.registry.find(section => section.name === (attrs.ftSection || attrs.name)), (section) => {\r\n scope.$ftSection = section;\r\n }, true);\r\n }\r\n };\r\n }])\r\n .directive('ftSectionTrigger', [function () {\r\n\r\n return {\r\n scope: false,\r\n require: \"^ftSections\",\r\n link: function SectionTriggerLinkFn(scope, elem, attrs, ctrl) {\r\n\r\n function setActive() {\r\n scope.$apply(() => {\r\n ctrl.activate(attrs.ftSectionTrigger);\r\n });\r\n }\r\n\r\n elem.bind(\"click\", setActive);\r\n\r\n scope.$on(\"$destroy\", () => {\r\n elem.unbind(\"click\", setActive);\r\n });\r\n }\r\n };\r\n }]);", "\uFEFF\r\n\r\nclass CarouselCardsDirectiveController {\r\n\r\n cards: any[] = [];\r\n activeCardIndex: number;\r\n\r\n private _options: any;\r\n \r\n set options(value) {\r\n this._options = value;\r\n this.adjustPosition();\r\n }\r\n\r\n addCard(card: any) {\r\n this.cards.push(card);\r\n if (card.isActive) {\r\n this.activeCardIndex = this.cards.indexOf(card);\r\n }\r\n this.adjustSpots();\r\n this.adjustPosition();\r\n }\r\n\r\n activate(card: any) {\r\n if (typeof card === \"string\") {\r\n card = this.cards.filter(c => c.name === card)[0];\r\n }\r\n\r\n this.cards.forEach((value, index) => {\r\n value.elem.removeClass(`from-before`);\r\n value.elem.removeClass(`from-after`);\r\n value.isActive = value == card;\r\n if (value.isActive && index < this.activeCardIndex) {\r\n value.elem.addClass(`from-before`); \r\n }\r\n else if (value.isActive && index > this.activeCardIndex) {\r\n value.elem.addClass(`from-after`); \r\n }\r\n });\r\n this.activeCardIndex = this.cards.indexOf(card);\r\n this.adjustSpots();\r\n this.adjustPosition();\r\n }\r\n\r\n private adjustSpots() {\r\n let activeIndex;\r\n this.cards.forEach((value, index) => {\r\n if (value.isActive) {\r\n activeIndex = index;\r\n }\r\n value.elem.removeClass(\"active\");\r\n for (var i = 0; i < this.cards.length; ++i) {\r\n value.elem.removeClass(`active-before-${i}`);\r\n value.elem.removeClass(`active-after-${i}`);\r\n }\r\n });\r\n this.cards.forEach((value, index) => {\r\n if (value.isActive) {\r\n value.elem.addClass(\"active\");\r\n } else if (index < activeIndex) {\r\n value.elem.addClass(`active-before-${activeIndex - index}`);\r\n } else if (index > activeIndex) {\r\n value.elem.addClass(`active-after-${index - activeIndex}`);\r\n }\r\n });\r\n }\r\n\r\n leftPaddingElem: any;\r\n rightPaddingElem: any;\r\n\r\n private adjustPosition() {\r\n if (!this._options) return;\r\n if (!!this.leftPaddingElem) {\r\n this.leftPaddingElem.remove();\r\n this.leftPaddingElem = null;\r\n }\r\n if (!!this.rightPaddingElem) {\r\n this.rightPaddingElem.remove();\r\n this.rightPaddingElem = null;\r\n }\r\n\r\n this.leftPaddingElem = document.createElement(this._options.paddingElement);\r\n this.rightPaddingElem = document.createElement(this._options.paddingElement);\r\n if (!!this.cards.length) {\r\n let parent = angular.element(this.cards[0].elem).parent();\r\n parent.append(this.rightPaddingElem);\r\n parent.prepend(this.leftPaddingElem, this.cards[0].elem);\r\n }\r\n\r\n let activeIndex = this.activeCardIndex;\r\n let elemsToTheLeft = activeIndex, elemsToTheRight = this.cards.length - 1 - activeIndex,\r\n diff = Math.abs(elemsToTheLeft - elemsToTheRight);\r\n if (elemsToTheRight > elemsToTheLeft) {\r\n angular.element(this.leftPaddingElem).addClass(`active-before-${Math.abs(elemsToTheLeft + 1)} offset-${diff}`);\r\n angular.element(this.rightPaddingElem).addClass(`offset-0`);\r\n }\r\n if (elemsToTheRight < elemsToTheLeft) {\r\n angular.element(this.leftPaddingElem).addClass(`offset-0`);\r\n angular.element(this.rightPaddingElem).addClass(`active-after-${Math.abs(elemsToTheRight + 1)} offset-${diff}`);\r\n }\r\n\r\n }\r\n\r\n moveLeft() {\r\n if (this.activeCardIndex > 0) {\r\n this.activate(this.cards[this.activeCardIndex - 1]);\r\n }\r\n }\r\n\r\n moveRight() {\r\n if (this.activeCardIndex < this.cards.length - 1) {\r\n this.activate(this.cards[this.activeCardIndex + 1]);\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\nclass CarouselCardDirectiveController {\r\n index: number;\r\n}\r\n\r\nangular.module('fliptoWeb')\r\n .directive('ftCarouselCards', [function () {\r\n\r\n return {\r\n controller: CarouselCardsDirectiveController,\r\n require: \"ftCarouselCards\",\r\n controllerAs: \"$ftCarouselCards\",\r\n bindToController: true,\r\n link: function (scope, elem, attrs, ctrl) {\r\n ctrl.options = scope.$eval(attrs.options);\r\n }\r\n };\r\n }])\r\n .directive('ftCarouselCard', [function () {\r\n\r\n return {\r\n controller: CarouselCardDirectiveController,\r\n require: [\"^ftCarouselCards\", \"ftCarouselCard\"],\r\n link: function (scope, elem, attrs, ctrls) {\r\n const cardsCtrl = ctrls[0];\r\n const cardCtrl = ctrls[1];\r\n const card = { elem: elem, isActive: attrs.hasOwnProperty(\"active\"), name: attrs.ftCarouselCard };\r\n cardsCtrl.addCard(card);\r\n cardCtrl.index = cardsCtrl.cards.indexOf(card);\r\n }\r\n };\r\n }])\r\n .directive('ftCarouselCardTrigger', [function () {\r\n\r\n return {\r\n scope: false,\r\n require: \"^ftCarouselCards\",\r\n link: function CarouselCardTriggerLinkFn(scope, elem, attrs, ctrl) {\r\n\r\n function setActive() {\r\n scope.$apply(() => {\r\n ctrl.activate(attrs.ftCarouselCardTrigger);\r\n });\r\n }\r\n\r\n elem.bind(\"click\", setActive);\r\n\r\n scope.$on(\"$destroy\", () => {\r\n elem.unbind(\"click\", setActive);\r\n });\r\n }\r\n };\r\n }])\r\n .directive('ftCarouselCardMoveLeftOrRight', [function () {\r\n\r\n return {\r\n scope: false,\r\n require: [\"^ftCarouselCards\", \"ftCarouselCard\"],\r\n link: function (scope, elem, attrs, ctrls) {\r\n\r\n const cardsCtrl = ctrls[0];\r\n const cardCtrl = ctrls[1];\r\n\r\n function move() {\r\n scope.$apply(() => {\r\n if (cardCtrl.index > cardsCtrl.activeCardIndex) {\r\n cardsCtrl.moveRight();\r\n } else {\r\n cardsCtrl.moveLeft();\r\n }\r\n });\r\n }\r\n\r\n elem.bind(\"click\", move);\r\n\r\n scope.$on(\"$destroy\", () => {\r\n elem.unbind(\"click\", move);\r\n });\r\n }\r\n };\r\n }]);", "\uFEFF\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .factory('ApiService', ['server', function (server) {\r\n ///Analytics/page-tracking service for angular poststay application\r\n\r\n var GETSTARTEDPOSTURL = \"/api/get-started\";\r\n var PARTNERSIGNUPPOSTURL = \"/api/partner-signup\";\r\n var PARTNERS_PORTAL_SIGNUP_POST_URL = \"/api/partners-portal-signup\";\r\n var CONTACTUSPOSTURL = \"/api/contact-us\";\r\n\r\n function postGetStarted(data) {\r\n return server.call('POST', GETSTARTEDPOSTURL + \"/\" + data.ContactType, data, true);\r\n }\r\n function postPartnerSignup(data) {\r\n return server.call('POST', PARTNERSIGNUPPOSTURL, data, true);\r\n }\r\n function postPartnersPortalSignup(data) {\r\n return server.call('POST', PARTNERS_PORTAL_SIGNUP_POST_URL, data, true);\r\n }\r\n function postContactUs(data) {\r\n return server.call('POST', CONTACTUSPOSTURL, data, true);\r\n }\r\n\r\n return {\r\n GetStarted_Post: postGetStarted,\r\n PartnerSignup_Post: postPartnerSignup,\r\n PartnersPortalSignup_Post: postPartnersPortalSignup,\r\n ContactUs_Post: postContactUs,\r\n WebisodeFuelSubscribe: function (email) {\r\n return server.call('POST', \"/api/webisode-fuel-subscribe\", {email});\r\n }\r\n }\r\n }]);\r\n})()\r\n\r\n", "\uFEFF\r\n(() => {\r\n angular.module('fliptoWeb')\r\n .factory('newsApi', ['server', function (server) {\r\n\r\n //server api = /api/news/{int: pageIndex}\r\n var GETNEWSPAGEURL = \"/api/news/\";\r\n //server api = /api/article/{str: articleSlug}\r\n var GETARTICLEPOSTURL = \"/api/article/\";\r\n\r\n function postGetNewsPage(pageIndex: number) {\r\n return server.call('POST', GETNEWSPAGEURL + pageIndex, null, true);\r\n }\r\n function postGetArticle(slug: string) {\r\n return server.call('POST', GETARTICLEPOSTURL + slug, null, true);\r\n }\r\n\r\n return {\r\n GetNewsPage: postGetNewsPage,\r\n GetArticle: postGetArticle\r\n }\r\n }]);\r\n})()\r\n\r\n", "\uFEFF(() => {\r\n angular.module('fliptoWeb')\r\n .factory('server', ['$http', function ($http) {\r\n ///Server service for angular poststay application\r\n\r\n return {\r\n call: function (method, url, data, isAsync) {\r\n /// makes an ajax call to the server\r\n /// promise\r\n///// \r\n\r\n//module FliptoWeb.Services {\r\n\r\n// export interface IServerService {\r\n// call(method: string, url: string, data: Object, isAsync: boolean);\r\n// }\r\n\r\n// export class ServerService {\r\n\r\n// http: ng.IHttpService;\r\n\r\n// constructor($http: ng.IHttpService) {\r\n// this.http = $http;\r\n// }\r\n\r\n// call(method: string, url: string, data: Object, isAsync: boolean) {\r\n// return this.http({\r\n// url: url,\r\n// method: method,\r\n// headers: {\r\n// contentType: 'application/json;',\r\n// },\r\n// data: data,\r\n// });\r\n// }\r\n// }\r\n//}", "\uFEFF\r\nangular.module('fliptoWeb')\r\n\r\n .factory(\"copyToClipboard\", [function () {\r\n\r\n return function copyTextToClipboard(text) {\r\n var textArea = document.createElement(\"textarea\");\r\n\r\n textArea.style.position = 'fixed';\r\n textArea.style.top = \"0\";\r\n textArea.style.left = \"0\";\r\n\r\n textArea.style.width = '2em';\r\n textArea.style.height = '2em';\r\n\r\n textArea.style.padding = \"0\";\r\n\r\n textArea.style.border = 'none';\r\n textArea.style.outline = 'none';\r\n textArea.style.boxShadow = 'none';\r\n\r\n textArea.style.background = 'transparent';\r\n\r\n\r\n textArea.value = text;\r\n\r\n document.body.appendChild(textArea);\r\n\r\n textArea.select();\r\n\r\n try {\r\n document.execCommand('copy');\r\n } catch (ex) {\r\n }\r\n\r\n document.body.removeChild(textArea);\r\n }\r\n }])", "\uFEFF\r\nangular.module('fliptoWeb')\r\n .factory(\"userAgent\",\r\n [\r\n '$window', function($window) {\r\n\r\n function UserAgent() {\r\n\r\n }\r\n\r\n /**\r\n * Returns true if user agent is mobile device\r\n * @returns {boolean|*}\r\n */\r\n UserAgent.prototype.isMobile = function() {\r\n var navigatorInfo = $window.navigator.userAgent || $window.navigator.vendor || $window.opera;\r\n return /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(navigatorInfo) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigatorInfo.substr(0, 4));\r\n };\r\n\r\n /**\r\n * Returns true if user agent is mobile or tablet\r\n */\r\n UserAgent.prototype.isMobileOrTablet = function() {\r\n var navigatorInfo = $window.navigator.userAgent || $window.navigator.vendor || $window.opera;\r\n return /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(navigatorInfo) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigatorInfo.substr(0, 4));\r\n };\r\n\r\n UserAgent.prototype.isMobileSafari = function() {\r\n return $window.navigator.userAgent.match(/(iPod|iPhone|iPad)/);\r\n };\r\n\r\n return new UserAgent();\r\n }\r\n ])\r\n .directive('ftHideMobileSafari', ['userAgent', function (userAgent) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, elem) {\r\n if (userAgent.isMobileSafari()) {\r\n elem.remove();\r\n }\r\n }\r\n };\r\n }])\r\n .directive('ftShowMobileSafari', ['userAgent', function (userAgent) {\r\n return {\r\n restrict: 'A',\r\n compile: function (tElem) {\r\n tElem.addClass('ng-hide');\r\n\r\n return function (scope, elem) {\r\n if (userAgent.isMobileSafari()) {\r\n elem.removeClass('ng-hide');\r\n }\r\n }\r\n }\r\n };\r\n }]);"], "mappings": "giBAAA,IAAAA,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CACA,QAAQ,OAAO,kBAAmB,CAAC,CAAC,EAAE,MAAM,wBAAyB,IAAI,EAAE,UAAU,iBAAkB,CACrG,aAAc,UAAW,YAAa,wBAAyB,SAASC,EAAYC,EAASC,EAAWC,EAAuB,CAC7H,MAAO,CACL,MAAO,CACL,eAAgB,IAChB,wBAAyB,IACzB,uBAAwB,IACxB,uBAAwB,IACxB,gCAAiC,IACjC,6BAA8B,GAChC,EACA,KAAM,SAASC,EAAOC,EAAMC,EAAO,CACjC,IAAIC,EAAiBC,EAAeC,EAAkBC,EAAWC,EAA+BC,EAA8BC,EAA8BC,EAAuCC,EAASC,EAAQC,EAAgBC,EAAWC,EAAaC,EAAgBC,EAAeC,EAAUC,EAAyBC,EAAmBC,EACjV,OAAAA,EAAgB,QAAQ,QAAQxB,CAAO,EACvCmB,EAAiB,KACjBC,EAAgB,KAChBZ,EAAmB,KACnBC,EAAY,KACZO,EAAiB,GACjBO,EAAoB,GACpBD,EAA0B,KAC1Bf,EAAgB,GAChBQ,EAAS,SAASX,EAAM,CAEtB,OADAA,EAAOA,EAAK,CAAC,GAAKA,EACd,MAAMA,EAAK,YAAY,EAClBA,EAAK,SAAS,gBAAgB,aAE9BA,EAAK,YAEhB,EACAa,EAAY,SAASb,EAAM,CACzB,GAAI,GAACA,EAAK,CAAC,EAAE,uBAAyBA,EAAK,IAAI,MAAM,GAGrD,OAAOA,EAAK,CAAC,EAAE,sBAAsB,EAAE,IAAMc,EAAYd,CAAI,CAC/D,EACAc,EAAc,SAASd,EAAM,CAE3B,OADAA,EAAOA,EAAK,CAAC,GAAKA,EACd,MAAM,OAAO,WAAW,EACnBA,EAAK,SAAS,gBAAgB,UAE9BA,EAAK,cAAc,YAAY,WAE1C,EACAU,EAAU,UAAW,CACnB,IAAIW,EAAiBC,EAAoBC,EAAeC,EAAWC,EAiBnE,GAhBIpB,IAAce,GAChBC,EAAkBV,EAAON,CAAS,EAAIS,EAAYT,EAAU,CAAC,EAAE,SAAS,eAAe,EACvFkB,EAAgBV,EAAUb,CAAI,EAAIW,EAAOX,CAAI,IAE7CqB,EAAkBV,EAAON,CAAS,EAClCiB,EAAqB,EACjBT,EAAUR,CAAS,IAAM,SAC3BiB,EAAqBT,EAAUR,CAAS,GAE1CkB,EAAgBV,EAAUb,CAAI,EAAIsB,EAAqBX,EAAOX,CAAI,GAEhEmB,IACFI,EAAgBZ,GAAQX,EAAK,CAAC,EAAE,eAAiBA,EAAK,CAAC,EAAE,UAAU,eAAe,GAEpFwB,EAAYD,EAAgBF,EAC5BI,EAAeD,GAAab,EAAON,CAAS,EAAIU,EAAiB,EAC7DU,GAEF,GADArB,EAAmB,GACfY,EACF,OAAIjB,EAAM,SAAWJ,EAAW,QACvBI,EAAM,eAAe,EAErBA,EAAM,OAAOA,EAAM,cAAc,MAI5C,QAAII,GACFN,EAAU,OAAOM,CAAa,EAEzBC,EAAmB,EAE9B,EACAa,EAAW,SAASS,EAAMC,EAAM,CAC9B,IAAIC,EAAOC,EAAUC,EACrB,OAAAA,EAAU,KACVD,EAAW,EACXD,EAAQ,UAAW,CACjB,OAAAC,EAAW,IAAI,KAAK,EAAE,QAAQ,EAC9BhC,EAAU,OAAOiC,CAAO,EACxBA,EAAU,KACHJ,EAAK,KAAK,CACnB,EACO,UAAW,CAChB,IAAIK,EAAKP,EAGT,GAFAO,EAAM,IAAI,KAAK,EAAE,QAAQ,EACzBP,EAAYG,GAAQI,EAAMF,GACtBL,GAAa,EACf,OAAA3B,EAAU,OAAOiC,CAAO,EACxBA,EAAU,KACVD,EAAWE,EACJL,EAAK,KAAK,EAEjB,GAAI,CAACI,EACH,OAAOA,EAAUjC,EAAU+B,EAAOJ,EAAW,CAAC,CAGpD,CACF,EACI1B,GAAyB,OAC3BY,EAAUO,EAASP,EAASZ,CAAqB,GAEnDC,EAAM,IAAI,WAAY,UAAW,CAM/B,GALAM,EAAU,OAAO,SAAUK,CAAO,EAC9BQ,GAA2B,OAC7BA,EAAwB,EACxBA,EAA0B,MAExBf,EACF,OAAON,EAAU,OAAOM,CAAa,CAEzC,CAAC,EACDK,EAA+B,SAASwB,EAAG,CACzC,OAAOjB,EAAiB,WAAWiB,CAAC,GAAK,CAC3C,EACAjC,EAAM,OAAO,yBAA0BS,CAA4B,EACnEA,EAA6BT,EAAM,sBAAsB,EACzDQ,EAA+B,SAASyB,EAAG,CAEzC,GADAhB,EAAgB,CAACgB,EACbhB,GAAiBZ,EACnB,OAAAA,EAAmB,GACZM,EAAQ,CAEnB,EACAX,EAAM,OAAO,yBAA0BQ,CAA4B,EACnEA,EAA6BR,EAAM,sBAAsB,EACzDU,EAAwC,SAASuB,EAAG,CAClD,OAAOb,EAAoBa,CAC7B,EACAjC,EAAM,OAAO,kCAAmCU,CAAqC,EACrFA,EAAsCV,EAAM,+BAA+B,EAC3EG,EAAkB,SAAS+B,EAAc,CAKvC,GAJI5B,GAAa,MACfA,EAAU,OAAO,SAAUK,CAAO,EAEpCL,EAAY4B,EACRA,GAAgB,KAClB,OAAO5B,EAAU,KAAK,SAAUK,CAAO,CAE3C,EACAR,EAAgBkB,CAAa,EACzBrB,EAAM,+BACRmB,EAA0BvB,EAAW,IAAII,EAAM,6BAA8BW,CAAO,GAEtFJ,EAAgC,SAAS2B,EAAc,CACrD,GAAK,EAAAA,GAAgB,MAASA,EAAa,SAAW,GAUtD,IAPIA,EAAa,UAAYA,EAAa,WAAa,EACrDA,EAAe,QAAQ,QAAQA,CAAY,EAClC,OAAOA,EAAa,QAAW,WACxCA,EAAe,QAAQ,QAAQA,EAAaA,EAAa,OAAS,CAAC,CAAC,EAC3D,OAAOA,GAAiB,WACjCA,EAAe,QAAQ,QAAQ,SAAS,cAAcA,CAAY,CAAC,GAEjEA,GAAgB,KAClB,OAAO/B,EAAgB+B,CAAY,EAEnC,MAAM,IAAI,MAAM,8CAA8C,EAElE,EACAlC,EAAM,OAAO,0BAA2BO,CAA6B,EACrEA,EAA8BP,EAAM,yBAA2B,CAAC,CAAC,EAC7DE,EAAM,sBAAwB,MAChCC,EAAgB,QAAQ,QAAQF,EAAK,OAAO,CAAC,CAAC,EAE5CC,EAAM,8BAAgC,OACxCW,EAAiBb,EAAM,MAAME,EAAM,4BAA4B,GAE1DE,EAAgBN,EAAW,UAAW,CAC3C,OAAIe,GACFF,EAAQ,EAEHb,EAAU,OAAOM,CAAa,CACvC,CAAE,CACJ,CACF,CACF,CACF,CAAC,EAEG,OAAOT,IAAW,aAAe,OAAOD,IAAY,aAAeC,GAAO,UAAYD,KACxFC,GAAO,QAAU,qBC3LnB,IAAAwC,GAAAC,GAAA;AAAA;AAAA;AAAA;AAAA,IAKC,SAASC,EAASC,EAAW,CAC9B,aAEA,IAAIC,EAAc,OAAO,cAAgB,OAAO,YAAc,CAAC,GAC/DA,EAAY,mBAAqB,EACjCA,EAAY,iBAAmB,SAAUC,EAAYC,EAAOC,EAAeC,EAAYC,EAAW,CAC3FA,GAAaL,EAAY,qBACzBI,IAAcA,EAAaD,EAAeA,EAAgB,QAC3D,CAAC,OAAO,UAAU,eAAe,KAAK,OAAQF,CAAU,GAAME,IAAkB,QAAa,OAAOF,CAAU,EAAEE,CAAa,IAAM,OACrI,WAAW,UAAY,CAAEH,EAAY,iBAAiBC,EAAYC,EAAOC,EAAeC,EAAY,EAAI,CAAG,EAAGF,CAAK,GAGnHF,EAAY,qBACZI,EAAW,OAAOH,CAAU,CAAC,EAEjC,EAMAH,EAAQ,OAAO,cAAe,CAAC,CAAC,EAC/B,SAAS,aAAcQ,CAAU,EACjC,IAAI,CAAC,aAAc,UAAW,aAAc,YAAaC,CAAa,CAAC,EACvE,UAAU,cAAe,CAAC,aAAcC,CAAW,CAAC,EACpD,OAAO,CAAC,WAAYC,CAAc,CAAC,EAEpC,SAASH,GAAa,CACpB,IAAII,EAAK,KAELC,EAAW,CACb,aAAc,CACZ,mBAAoB,GACpB,sBAAuB,GACvB,kBAAmB,GACnB,YAAa,GACb,YAAa,GACb,aAAc,GACd,SAAU,GACV,eAAgB,CAAC,EACjB,qBAAsB,CAAC,EACvB,qBAAsB,CAAC,EACvB,kBAAmB,CAAC,CACtB,EACA,cAAe,CAAC,EAChB,iBAAkB,IAClB,gBAAiB,GACjB,OAAQ,GACR,cAAe,EACjB,EAGIC,EAAgB,CAClB,YACA,aACA,iBACA,mBACA,WACA,cACA,oBACA,wBACA,qBACA,yBACA,oBACA,cACA,cACF,EAEIC,EAAQ,CAAC,EACTC,EAAW,CAAC,EACZC,EAAiB,CAAC,EAGtB,SAASC,EAAgBC,EAAY,CACnC,OAAO,UAAU,CACZjB,EAAY,qBACTa,EAAMI,CAAW,IAAIJ,EAAMI,CAAW,EAAI,CAAC,GAC/CJ,EAAMI,CAAW,EAAE,KAAK,SAAS,EAErC,CACF,CAGA,SAASC,EAAeD,EAAaE,EAAIC,EAAQ,CAC/C,OAAIN,EAASG,CAAW,IACtBH,EAASG,CAAW,EAAI,CAAC,GAE3BH,EAASG,CAAW,EAAE,KAAKE,CAAE,EAC7BJ,EAAeI,CAAE,EAAIC,EACd,UAAU,CACf,GAAG,CAAC,KAAK,SAAS,OAAQ,CACxB,IAAIC,EAAc,MAAM,UAAU,MAAM,MAAM,SAAS,EACvD,OAAO,KAAK,QAAQ,CAAC,KAAMvB,EAAQ,KAAK,KAAM,SAASwB,EAAI,CACzD,OAAOA,EAAG,IAAIR,EAASG,CAAW,EAAE,IAAI,SAASM,EAAW,CAC1D,IAAIH,GAAUL,EAAeQ,CAAS,GAAK,CAAC,EAC5C,GAAIH,GAAQ,MAAO,CACjB,IAAII,EAAWF,EAAG,MAAM,EACpBG,EAAc3B,EAAQ,KAAKuB,CAAW,EAC1C,OAAAI,EAAY,QAAQD,EAAS,OAAO,EACpCD,EAAU,MAAM,KAAME,CAAW,EAC1BD,EAAS,OAClB,KACE,QAAOF,EAAG,KAAKC,EAAU,MAAM,KAAMF,CAAW,CAAC,CAErD,EAAG,IAAI,CAAC,CACV,CAAC,CAAC,CAAC,CACL,CACF,CACF,CAGA,IAAIK,EAAM,CACR,SAAUf,CACZ,EAGAe,EAAI,UAAY,SAASC,EAAQ,CAC/B,KAAK,SAAS,OAASA,EACvBC,EAAgB,CAClB,EAEAF,EAAI,UAAY,UAAW,CACzB,OAAO,KAAK,SAAS,MACvB,EAMA,SAASrB,EAAUc,EAAIjB,EAAM,CACxBA,EACD,WAAWiB,EAAIjB,CAAK,EAEpBiB,EAAG,CAEP,CAEA,IAAIU,EAAW,CACb,KAAM,CAAC,YAAa,SAASC,EAAW,CACtC,OAAOC,EAAgBD,CAAS,CAClC,CAAC,EACD,IAAKJ,EACL,SAAUf,EACV,iBAAkB,SAAUqB,EAAO,CAAE,KAAK,SAAS,aAAa,sBAAwBA,CAAO,EAC/F,YAAa,SAAUA,EAAO,CAAE,KAAK,SAAS,aAAa,YAAcA,CAAO,EAChF,YAAa,SAAUA,EAAO,CAAE,KAAK,SAAS,aAAa,YAAcA,CAAO,EAChF,cAAe,SAASC,EAAQ,CAAE,KAAK,SAAS,aAAa,eAAiBA,CAAQ,EACtF,mBAAoB,SAASC,EAAM,CAAE,KAAK,SAAS,aAAa,qBAAuBA,CAAM,EAC7F,mBAAoB,SAASA,EAAM,CAAE,KAAK,SAAS,aAAa,qBAAuBA,CAAM,EAC7F,kBAAmB,SAASC,EAAS,CAAE,KAAK,SAAS,aAAa,kBAAoBA,CAAS,EAC/F,cAAe,SAAUH,EAAO,CAAE,KAAK,SAAS,aAAa,mBAAqBA,CAAO,EACzF,SAAU,SAAUA,EAAO,CACzB,KAAK,SAAS,aAAa,SAAYA,EAASlC,EAAQ,QAAQ,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAI,EACxG,EACA,aAAc,SAAUkC,EAAO,CAAE,KAAK,SAAS,aAAa,aAAeA,CAAO,EAClF,gBAAiB,SAAUA,EAAO,CAAE,KAAK,SAAS,gBAAkBA,CAAO,EAC3E,cAAe,SAASA,EAAO,CAAE,KAAK,SAAS,cAAgBA,CAAO,CACxE,EAGA,SAASI,EAASnB,EAAaE,EAAIC,EAAQ,CAEzC,GAAI,CAAAT,EAAS,cAGb,CAAAe,EAAIT,CAAW,EAAIC,EAAeD,EAAaE,EAAIC,CAAO,EAC1D,IAAIiB,EAAkB1B,EAASM,CAAW,EACtCqB,EAAgBD,EAAmBA,EAAgB,iBAAmB,KACtEnC,EAASoC,IAAiB,KAAQA,EAAe3B,EAAS,iBAC9Db,EAAQ,QAAQe,EAAMI,CAAW,EAAG,SAAUsB,GAAMC,EAAO,CACzDnC,EAAU,UAAY,CAAEc,EAAG,MAAM,KAAMoB,EAAI,CAAG,EAAGC,EAAQtC,CAAK,CAChE,CAAC,EACH,CAEA,SAASuC,EAAWC,EAAO,CACvB,OAAOA,EAAM,QAAQ,KAAM,SAAUC,EAAO,CACxC,OAAOA,EAAM,YAAY,CAC7B,CAAC,CACL,CAGA,IAAIZ,EAAkB,SAASa,EAAU,CACvC,OAAO9C,EAAQ,OAAO4B,EAAK,CACzB,QAAWkB,EAAS,MACtB,CAAC,CACH,EAGA,SAASC,EAA+B5B,EAAY,CAClD,IAAI6B,EAAe,WAAWL,EAAWxB,CAAW,EACpDY,EAASiB,CAAY,EAAI,SAAS3B,EAAIC,EAAQ,CAC5CgB,EAASnB,EAAaE,EAAIC,CAAO,CACnC,EACAM,EAAIT,CAAW,EAAIC,EAAeD,EAAaD,EAAgBC,CAAW,CAAC,CAC7E,CAEA,SAAS8B,EAAiBC,EAAWC,EAAgBC,EAAiC,CACpFpD,EAAQ,QAAQmD,EAAgBC,CAA+B,EAE/D,QAASC,KAAOH,EACdtC,EAAGyC,CAAG,EAAIH,EAAUG,CAAG,CAE3B,CAGA,IAAIvB,EAAkB,UAAW,CAC/BmB,EAAiBlB,EAAUjB,EAAeiC,CAA8B,CAC1E,EAGAE,EAAiBlB,EAAUjB,EAAeiC,CAA8B,CAE1E,CAEA,SAAStC,EAAc6C,EAAYC,EAAS/C,EAAYwB,EAAW,CAEjE,SAASwB,EAAqBC,EAAK,CACjC,QAASC,EAAI,EAAGA,EAAIlD,EAAW,SAAS,aAAa,eAAe,OAAQkD,IAAK,CAC/E,IAAIC,EAAgBnD,EAAW,SAAS,aAAa,eAAekD,CAAC,EACrE,GAAKC,aAAyB,QAAUA,EAAc,KAAKF,CAAG,GAAMA,EAAI,QAAQE,CAAa,EAAI,GAC/F,MAAO,EAEX,CACA,MAAO,EACT,CAEA,SAASC,EAAgBC,EAAIC,EAAI,CAE/B,QADIC,EAAS,CAAC,EACLL,EAAI,EAAGA,EAAIG,EAAG,OAAQH,IACzBI,EAAG,QAAQD,EAAGH,CAAC,CAAC,IAAM,IACxBK,EAAO,KAAKF,EAAGH,CAAC,CAAC,EAGrB,OAAOK,CACT,CAEA,SAASC,EAAkBP,EAAKQ,EAAcC,EAAS,CACrD,GAAI,KAAK,KAAKT,CAAG,GAAKQ,EAAa,OAAS,EAAG,CAM7C,QALIE,EAASV,EAAI,MAAM,GAAG,EACtBW,EAAUD,EAAO,CAAC,EAClBE,EAAQF,EAAO,CAAC,EAAE,MAAM,GAAG,EAC3BG,EAAe,CAAC,EAEXZ,EAAI,EAAGA,EAAIO,EAAa,OAAQP,IAEvC,QADIa,GAAYN,EAAaP,CAAC,EACrB,EAAI,EAAG,EAAIW,EAAM,OAAQ,KAC3BE,cAAqB,QAAUA,GAAU,KAAKF,EAAM,CAAC,CAAC,GAAMA,EAAM,CAAC,EAAE,QAAQE,EAAS,EAAI,KAAID,EAAa,KAAKD,EAAM,CAAC,CAAC,EAIjI,IAAIG,EAAmBN,GAAY,QAAUI,EAAeV,EAAgBS,EAAMC,CAAY,EAC9F,OAAGE,EAAgB,OAAS,EACnBJ,EAAU,IAAMI,EAAgB,KAAK,GAAG,EAExCJ,CAEX,KACE,QAAOX,CAEX,CAEA,SAASgB,EAAqBhB,EAAI,CAChC,OAAOO,EAAkBP,EAAKjD,EAAW,SAAS,aAAa,qBAAsB,OAAO,CAC9F,CAEA,SAASkE,EAAqBjB,EAAI,CAChC,OAAOO,EAAkBP,EAAKjD,EAAW,SAAS,aAAa,qBAAsB,OAAO,CAC9F,CAEA,SAASmE,EAAkBlB,EAAI,CAC7B,IAAImB,EAAoBpE,EAAW,SAAS,aAAa,kBAEzD,GAAIoE,EAAkB,OAAS,EAAG,CAMhC,QALIT,EAASV,EAAI,MAAM,GAAG,EACtBW,EAAUD,EAAO,CAAC,EAElBU,EAAWT,EAAQ,MAAM,GAAG,EAEvBV,EAAI,EAAGA,EAAIkB,EAAkB,OAAQlB,IAG5C,QAFIoB,EAAgBF,EAAkBlB,CAAC,EAE9BqB,EAAI,EAAGA,EAAIF,EAAS,OAAQE,KAE9BD,aAAyB,QAAUA,EAAc,KAAKD,EAASE,CAAC,CAAC,GAAMF,EAASE,CAAC,EAAE,QAAQD,CAAa,EAAI,MAC/GD,EAASE,CAAC,EAAI,YAKpB,OAAOF,EAAS,KAAK,GAAG,CAC1B,KACE,QAAOpB,CAEX,CAEA,SAASuB,EAAUvB,EAAKwB,EAAW,CAC5BzB,EAAqBC,CAAG,IAC3BA,EAAMgB,EAAqBhB,CAAG,EAC9BA,EAAMiB,EAAqBjB,CAAG,EAC9BA,EAAMkB,EAAkBlB,CAAG,EAC3BjD,EAAW,UAAUiD,EAAKwB,CAAS,EAEvC,CAEA,GAAIzE,EAAW,SAAS,aAAa,mBAAoB,CAEvD,IAAI0E,EAAmB,GACvB,GAAIlD,EAAU,IAAI,QAAQ,EAAG,CAC1B,IAAImD,EAASnD,EAAU,IAAI,QAAQ,EACnC,GAAImD,EACH,QAASC,KAASD,EAAO,OAAQ,CAC/BD,EAAmB,GACnB,KACF,MACUC,IAAW,OACrBD,EAAmB,GAEvB,SAAWlD,EAAU,IAAI,QAAQ,EAAG,CAClC,IAAIqD,EAASrD,EAAU,IAAI,QAAQ,EAC/BqD,EAAO,IAAI,EAAE,OAAS,IAAGH,EAAmB,GAClD,CACIA,IACE1E,EAAW,SAAS,aAAa,eACnCA,EAAW,SAAS,aAAa,SAAW+C,EAAQ,SAAS,UAE/DvB,EAAU,OAAO,CAAC,YAAa,SAAUiD,EAAW,CAClD,GAAIzE,EAAW,SAAS,aAAa,kBAAmB,CACtD,IAAIiD,EAAMjD,EAAW,SAAS,aAAa,SAAWyE,EAAU,IAAI,EACpED,EAAUvB,EAAKwB,CAAS,CAC1B,MACED,EAAUC,EAAU,OAAO,EAAGA,CAAS,CAE3C,CAAC,CAAC,EAEN,CAEA,GAAIzE,EAAW,SAAS,aAAa,sBAAuB,CACtDA,EAAW,SAAS,aAAa,eAEnCA,EAAW,SAAS,aAAa,SAAW+C,EAAQ,SAAS,SAAW,KAE1E,IAAI2B,EAAmB,GAEvB,GAAI1E,EAAW,SAAS,aAAa,aAC/BwB,EAAU,IAAI,QAAQ,EAAG,CAC3B,IAAImD,EAASnD,EAAU,IAAI,QAAQ,EACnC,GAAImD,EACF,QAASC,KAASD,EAAO,OAAQ,CAC/BD,EAAmB,GACnB,KACF,MACSC,IAAW,OACpBD,EAAmB,IAErB5B,EAAW,IAAI,sBAAuB,SAAUgC,EAAOC,EAAS,CAC1DA,IAAYA,EAAQ,SAASA,GAAS,YAC1CvD,EAAU,OAAO,CAAC,YAAa,SAAUiD,EAAW,CAClD,IAAIxB,EAAMjD,EAAW,SAAS,aAAa,SAAWyE,EAAU,IAAI,EACpED,EAAUvB,EAAKwB,CAAS,CAC1B,CAAC,CAAC,CACJ,CAAC,CACH,CAGEzE,EAAW,SAAS,aAAa,cAC/BwB,EAAU,IAAI,QAAQ,GAAK,CAACA,EAAU,IAAI,cAAc,IAC1DkD,EAAmB,GACnB5B,EAAW,IAAI,sBAAuB,SAAUgC,EAAOC,EAAS,CAC9DvD,EAAU,OAAO,CAAC,YAAa,SAAUiD,EAAW,CAClD,IAAIxB,EAAMjD,EAAW,SAAS,aAAa,SAAWyE,EAAU,IAAI,EACpED,EAAUvB,EAAKwB,CAAS,CAC1B,CAAC,CAAC,CACJ,CAAC,GAECjD,EAAU,IAAI,QAAQ,GAAKA,EAAU,IAAI,cAAc,IACzDkD,EAAmB,GACnBlD,EAAU,OAAO,CAAC,eAAgB,SAASwD,EAAc,CACvDA,EAAa,UAAU,CAAC,EAAG,SAASC,EAAc,CAChD,IAAIC,EAAoBD,EAAa,QAAQ,EAGzCC,EAAkB,QACpB1D,EAAU,OAAO,CAAC,YAAa,SAAUiD,EAAW,CAClD,IAAIxB,EAAMjD,EAAW,SAAS,aAAa,SAAWyE,EAAU,IAAI,EACpED,EAAUvB,EAAKwB,CAAS,CAC1B,CAAC,CAAC,CAEN,CAAC,CACH,CAAC,CAAC,IAIFC,GACF5B,EAAW,IAAI,yBAA0B,SAAUgC,EAAOC,EAAS,CAC7DA,IAAYA,EAAQ,SAAWA,GAAS,YAC5CvD,EAAU,OAAO,CAAC,YAAa,SAAUiD,EAAW,CAClD,GAAIzE,EAAW,SAAS,aAAa,kBAAmB,CACtD,IAAIiD,EAAMjD,EAAW,SAAS,aAAa,SAAWyE,EAAU,IAAI,EACpED,EAAUvB,EAAKwB,CAAS,CAC1B,MACED,EAAUC,EAAU,OAAO,EAAGA,CAAS,CAE3C,CAAC,CAAC,CACJ,CAAC,CAEL,CACIzE,EAAW,SAAS,eACtBR,EAAQ,QAAQQ,EAAY,SAASmF,EAAMC,EAAM,CAC3C,OAAOD,GAAS,aAClBnF,EAAWoF,CAAI,EAAI,UAAU,CAAC,EAElC,CAAC,CAEL,CAEA,SAASlF,EAAYF,EAAY,CAC/B,MAAO,CACL,SAAU,IACV,KAAM,SAAUqF,EAAQC,EAAUC,EAAQ,CACxC,IAAIC,EAAYD,EAAO,aAAe,QAClCE,EAAe,CAAC,EAEpBjG,EAAQ,QAAQ+F,EAAO,MAAO,SAASJ,EAAMC,EAAM,CAC7CM,EAAWN,CAAI,IACjBK,EAAaE,EAAaP,CAAI,CAAC,EAAIG,EAAOH,CAAI,EAC9CG,EAAO,SAASH,EAAM,SAAS1D,EAAM,CACnC+D,EAAaE,EAAaP,CAAI,CAAC,EAAI1D,CACrC,CAAC,EAEL,CAAC,EAEDlC,EAAQ,QAAQ8F,EAAS,CAAC,CAAC,EAAE,GAAGE,EAAW,SAAUI,EAAQ,CAC3D,IAAIC,EAAYN,EAAO,gBAAkBO,EAAeR,EAAS,CAAC,CAAC,EACnEG,EAAa,UAAYG,EAAO,KAE7B,EAAAL,EAAO,aACL,CAAEF,EAAO,MAAME,EAAO,WAAW,KAMnCA,EAAO,qBACR/F,EAAQ,OAAOiG,EAAcJ,EAAO,MAAME,EAAO,mBAAmB,CAAC,EAEvEvF,EAAW,WAAW6F,EAAWJ,CAAY,EAC/C,CAAC,CACH,CACF,CACF,CAEA,SAAStF,EAAe4F,EAAU,CAChCA,EAAS,UAAU,oBAAqB,CAAC,YAAa,YAAa,SAAUC,EAAWxE,EAAW,CACjG,OAAO,SAAUyE,EAAOC,EAAO,CAC7B,IAAI3C,EAASyC,EAAUC,EAAOC,CAAK,EAC/BlG,EAAawB,EAAU,IAAI,YAAY,EAC3C,OAAIxB,EAAW,SAAS,iBACtBA,EAAW,eAAeiG,EAAOC,CAAK,EAEjC3C,CACT,CACF,CAAC,CAAC,CACJ,CAEA,SAAS4C,EAAUC,EAAS,CAC1B,MAAO,CAAC,KAAK,UAAU,gBAAgB,gBAAgB,eAAe,cAAc,EAAE,QACpFA,EAAQ,QAAQ,YAAY,EAAE,KAAKA,EAAQ,MAAM,GAAG,GAAK,CAC7D,CAEA,SAASC,EAAeD,EAAS,CAC/B,OAAID,EAAUC,CAAO,EAAU,OAEjC,CAEA,SAASN,EAAeM,EAAS,CAC/B,OAAID,EAAUC,CAAO,EAAUA,EAAQ,WAAaA,EAAQ,MACrDA,EAAQ,IAAMA,EAAQ,MAAQA,EAAQ,OAC/C,CAEA,SAASV,EAAWN,EAAM,CACxB,OAAOA,EAAK,OAAO,EAAG,CAAC,IAAM,aAAe,CAAC,KAAM,QAAS,KAAM,aAAc,WAAW,EAAE,QAAQA,EAAK,OAAO,CAAC,CAAC,IAAM,EAC3H,CAEA,SAASO,EAAaP,EAAM,CAC1B,IAAIkB,EAAIlB,EAAK,MAAM,CAAC,EACpB,OAAI,OAAOkB,GAAM,aAAeA,IAAI,MAAQA,EAAE,OAAS,EAC9CA,EAAE,UAAU,EAAG,CAAC,EAAE,YAAY,EAAIA,EAAE,UAAU,CAAC,EAG/CA,CAEX,CACA,GAAG,OAAO,ICjfV,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,MACAA,GAAO,QAAU,gBCDjB,IAAAC,GAAAC,GAAA,MAAC,SAASC,EAAQC,EAASC,EAAW,CAAC,aAOvCD,EAAQ,OAAO,+BAAgC,CAAC,aAAa,CAAC,EAC7D,OAAO,CAAC,qBAAsB,kBAAmB,SAAUE,EAAoBC,EAAiB,CAE/F,IAAIC,EAAUD,EAAgB,KAAK,EAInCD,EAAmB,SAAS,aAAa,kBAAoB,GAI7D,IAAIG,EAGJH,EAAmB,SAAS,GAAK,CAC/B,uBAAwBD,EAExB,0BAA2B,CACzB,SAAU,GACV,MAAO,GACP,UAAW,GACX,UAAW,GACX,WAAY,GACZ,kBAAmB,GACnB,OAAQ,EACV,EACA,qBAAsB,KACtB,oBAAqB,KACrB,kBAAmB,GAGnB,UAAW,KACX,OAAQ,IACV,EAYAC,EAAmB,kBAAkB,SAAUI,EAAMC,EAAY,CAE/DF,EAAgBC,EAEhBC,EAAaA,GAAc,CAAC,EAGxB,CAAAL,EAAmB,SAAS,GAAG,qBAEnCM,EAAa,WAAY,OAAQR,EAAQ,OAAOA,EAAQ,KAAKO,CAAU,EAAG,CACxE,QAAS,WACT,KAAMD,CACR,CAAC,CAAC,CAEJ,CAAC,EAaDJ,EAAmB,mBAAmB,SAASO,EAAQF,EAAY,CAGjE,GAAI,CAAAL,EAAmB,SAAS,GAAG,sBAE/B,GAACO,GAAUA,EAAS,IAAO,KAW/B,IANAF,EAAaA,GAAc,CAAC,EAC5BA,EAAW,SAAWA,EAAW,UAAY,QAKzCA,EAAW,MAAO,CACpB,IAAIG,EAAS,SAASH,EAAW,MAAO,EAAE,EAC1CA,EAAW,MAAQ,MAAMG,CAAM,EAAI,EAAIA,CACzC,CAIKV,EAAQ,WAAWO,EAAW,WAAW,IAC5CA,EAAW,YAAc,MAK3BA,EAAW,eAAiBA,EAAW,gBAAkBA,EAAW,eAEpEC,EAAa,QAAS,OAAQR,EAAQ,OAAOA,EAAQ,KAAKO,CAAU,EAAG,CACrE,QAAS,QACT,cAAeA,EAAW,SAC1B,YAAaE,EACb,WAAYF,EAAW,MACvB,WAAYA,EAAW,MACvB,eAAgBA,EAAW,eAC3B,KAAMI,EAASJ,CAAU,EACzB,YAAaA,EAAW,WAC1B,CAAC,CAAC,EAEJ,CAAC,EAYDL,EAAmB,uBAAuB,SAAUU,EAAOC,EAAO,CAChEL,EAAa,YAAa,OAAQ,CAChC,QAAS,QACT,cAAe,aACf,YAAaI,EAAM,SAAS,EAC5B,WAAYA,EAAM,MAClB,eAAgB,GAChB,KAAMD,EAAS,CAAC,CAAC,EACjB,YAAa,EACf,CAAC,CACH,CAAC,EAUDT,EAAmB,oBAAoB,SAAUY,EAAQ,CACvDZ,EAAmB,SAAS,GAAG,OAASY,CAC1C,CAAC,EAUDZ,EAAmB,0BAA0B,SAAUK,EAAY,CAE7DA,GACFC,EAAa,oBAAqB,MAAOO,EAAqBR,CAAU,CAAC,CAG7E,CAAC,EAiBDL,EAAmB,oBAAoB,SAAUK,EAAY,CAE3D,GAAI,CAACP,EAAQ,SAASO,CAAU,GAAKP,EAAQ,QAAQO,CAAU,EAC7D,OAAO,QAAQ,IAAI,0DAA0D,EAG/EP,EAAQ,QAAQ,CAAC,iBAAkB,YAAa,aAAa,EAAG,SAASgB,EAAM,CAC7E,GAAIhB,EAAQ,YAAYO,EAAWS,CAAI,CAAC,EACtC,OAAO,QAAQ,IAAI,iDAAmDA,CAAI,CAE9E,CAAC,EAEDR,EAAa,aAAc,OAAQ,CACjC,QAAS,SACT,eAAgBD,EAAW,eAC3B,UAAWA,EAAW,UACtB,YAAaA,EAAW,YACxB,YAAaA,EAAW,YACxB,cAAeA,EAAW,cAC1B,KAAMI,EAASJ,CAAU,CAC3B,CAAC,CAEH,CAAC,EAiDDL,EAAmB,yBAAyB,SAASe,EAAa,CAEhE,IAAIC,EACAC,EAOJ,GAHAX,EAAa,YAAa,UAAW,WAAW,EAChDA,EAAa,YAAa,2BAA4BS,CAAW,EAE7DA,EAAY,SACd,IAAKE,EAAI,EAAGA,EAAIF,EAAY,SAAS,OAAQE,IAE3CD,EAAUD,EAAY,SAASE,CAAC,EAGhCD,EAAQ,IAAMA,EAAQ,GACtBA,EAAQ,GAAKD,EAAY,GAEzBT,EAAa,YAAa,oBAAqBS,EAAY,SAASE,CAAC,CAAC,EAKtEF,EAAY,cAEdT,EAAa,YAAa,OAAQS,EAAY,YAAY,EAI5DT,EAAa,YAAa,iBAAkBR,EAAQ,KAAKiB,CAAW,CAAC,CAEvE,CAAC,EAOD,SAASG,GAA2B,CAIlC,IAAIC,EAAcjB,EAAQ,sBAC1B,OAAOiB,GAAejB,EAAQiB,CAAW,CAE3C,CAOA,SAASC,GAAyB,CAGhC,MAAO,CAACtB,EAAQ,YAAYI,EAAQ,IAAI,CAE1C,CAUA,SAASW,EAAqBR,EAAY,CAExC,IAAIgB,EAAa,CAAC,EACdC,EAEJ,IAAKA,KAAOjB,GAIN,CAACiB,EAAI,QAAQ,WAAW,GAAK,CAACA,EAAI,QAAQ,QAAQ,KACpDD,EAAWC,CAAG,EAAIjB,EAAWiB,CAAG,GAGpC,OAAOD,CACT,CAaA,IAAIf,EAAe,SAASiB,EAAQC,EAASC,EAAW,CAEtD,IAAIC,EAWJ,GATIN,EAAuB,IACzBM,EAAUC,GAGRT,EAAyB,IAC3BQ,EAAUE,GAIR,EAACF,EAIL,KAAIG,EAAgB7B,EAAmB,SAAS,GAAG,0BAA0BuB,CAAM,EACnFG,EAAQF,EAASC,EAAWI,CAAa,EAC3C,EAYA,SAASD,EAAqBJ,EAASC,EAAWI,EAAe,CAE/D,IAAIjB,EAASZ,EAAmB,SAAS,GAAG,OACxC8B,EACAC,EAEJ,GAAIP,IAAY,WAAaC,IAAc,YAEzC,OAAAM,EAAaN,EAETzB,EAAmB,SAAS,GAAG,oBAEjC+B,EAAa,MAKRC,EAAoB,CAACR,EAASO,CAAU,EAAGF,CAAa,EAajE,GARIjB,GAAUd,EAAQ,SAAS2B,CAAS,IAAGA,EAAU,OAASb,GAE1DZ,EAAmB,SAAS,GAAG,YAEjCyB,EAAU,UAAYzB,EAAmB,SAAS,GAAG,WAInDwB,EAAQ,QAAQ,YAAY,EAAI,IAAMxB,EAAmB,SAAS,GAAG,kBAEvE,OAAQwB,EAAS,CACf,IAAK,2BACHA,EAAU,CAAC,eAAgB,UAAU,EACrC,MACF,IAAK,oBACHA,EAAU,gBAGVC,EAAU,GAAKA,EAAU,IACzB,MACF,IAAK,iBACHD,EAAU,OACVC,EAAU,QAAU,QACpBA,EAAU,cAAgB,iCAC1BA,EAAU,YAAc,WACxBA,EAAU,eAAiB,GAC3B,KACJ,CAKFK,EAAYN,aAAmB,MAAQA,EAAQ,OAAOC,CAAS,EAAI,CAACD,EAASC,CAAS,EAEtFO,EAAoBF,EAAWD,CAAa,CAE9C,CAYA,SAASG,EAAoBC,EAAcJ,EAAe,CAExD,IAAIjB,EAASZ,EAAmB,SAAS,GAAG,OACxCmB,EAAcjB,EAAQ,sBACtBgC,EAGJhC,EAAQiB,CAAW,EAAE,MAAM,KAAMc,CAAY,EAEzCJ,IAEFK,EAAepC,EAAQ,KAAKmC,CAAY,EAGpCrB,GAAU,CAACZ,EAAmB,SAAS,GAAG,0BAA0B,QAElEkC,EAAa,CAAC,GAAK,OAAOA,EAAa,CAAC,GAAM,UAEhD,OAAOA,EAAa,CAAC,EAAE,OAM3BpC,EAAQ,QAAQE,EAAmB,SAAS,GAAG,uBAAwB,SAAUmC,EAAY,CAE3FD,EAAa,CAAC,EAAIC,EAAc,IAAMF,EAAa,CAAC,EAEpD/B,EAAQiB,CAAW,EAAE,MAAM,KAAMe,CAAY,CAE/C,CAAC,EAIL,CAaA,SAASP,EAAmBH,EAASC,EAAWI,EAAe,CAE7D,GAAIL,IAAY,MACd,OAAO,QAAQ,IAAI,6FAA6F,EAGlH,IAAIY,EAIJ,GAAIZ,IAAY,OAEd,OAAOC,EAAU,QAAS,CACxB,IAAK,WACHW,EAAiB,CAAC,iBAAkBX,EAAU,IAAI,EAClD,MACF,IAAK,QACHW,EAAiB,CACf,cACAX,EAAU,cACVA,EAAU,YACVA,EAAU,WACVA,EAAU,WACVA,EAAU,cACZ,EACA,MACF,IAAK,SACHW,EAAiB,CACf,eACAX,EAAU,eACVA,EAAU,UACVA,EAAU,YACVA,EAAU,YACVA,EAAU,aACZ,EACA,KACJ,CAoDF,GAhDID,IAAY,6BAEdY,EAAiB,CACf,YACAX,EAAU,GACVA,EAAU,YACVA,EAAU,QACVA,EAAU,IACVA,EAAU,SACVA,EAAU,YACVA,EAAU,cACVA,EAAU,cACZ,GAIED,IAAY,sBAEdY,EAAiB,CACf,WACAX,EAAU,GACVA,EAAU,IACVA,EAAU,KACVA,EAAU,SACVA,EAAU,MACVA,EAAU,QACZ,GAIED,IAAY,SAEdY,EAAiB,CACf,OACA,eACAX,CACF,GAIED,IAAY,mBAEdY,EAAiB,CACf,aACF,GAIE,CAACA,EACH,OAAO,QAAQ,IAAI,0BAA4BZ,EAAU,6DAA6D,EAIxHtB,EAAQ,KAAK,KAAKkC,CAAc,EAE5BP,GAEF/B,EAAQ,QAAQE,EAAmB,SAAS,GAAG,uBAAwB,SAAUmC,EAAY,CAE3F,IAAIE,EAAsB,CAAC,EAAE,MAAM,KAAKD,CAAc,EAEtDC,EAAoB,CAAC,EAAIF,EAAc,IAAME,EAAoB,CAAC,EAElEnC,EAAQ,KAAK,KAAKmC,CAAmB,CAEvC,CAAC,CAIL,CAWA,SAAS5B,EAASJ,EAAY,CAE5B,OAAOA,EAAW,MAAQF,GACxBD,EAAQ,SAAS,KAAK,UAAU,CAAC,GAAKL,EAAO,SAAS,QAE1D,CAEF,CAAC,CAAC,CACF,GAAG,OAAQ,OAAO,OAAO,ICtnBzB,IAAAyC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,MACAA,GAAO,QAAU,iCCDjB,IAAAC,GAAAC,GAAA;AAAA;AAAA;AAAA;AAAA,IAMC,SAAUC,EAAQC,EAAS,CAC5B,aAQAA,EAAQ,OAAO,qBAAsB,CAAC,aAAa,CAAC,EACnD,QAAQ,YAAa,UAAY,CAChC,OAAO,SAASC,EAAS,CACvB,OAAO,IAAI,SAASA,CAAO,CAC7B,CACF,CAAC,EACA,UAAU,cAAe,CAAC,aAAc,YAAa,SAAUC,EAAYC,EAAW,CACrF,SAASC,EAAYC,EAAM,CACzB,OAAOA,EAAK,OAAO,EAAG,CAAC,IAAM,UAC/B,CACA,SAASC,EAAMC,EAAO,CACpB,OAAIA,IAAU,IAAMA,IAAU,OACrB,GACEA,IAAU,QACZ,GAEAA,CAEX,CAEA,MAAO,CACL,SAAU,IACV,SAAU,EACV,MAAO,GACP,KAAM,SAAUC,EAAQC,EAAUC,EAAQ,CACxC,GAAIA,EAAO,cAAgB,WAE3B,KAAIC,EAAa,CACf,QAAS,UAAY,CACnBF,EAAS,eAAe,UAAU,EAC9B,KAAK,QAAQ,aACf,KAAK,QAAQ,CAEjB,EACA,QAASA,EAAS,CAAC,EACnB,WAAY,GACZ,YAAa,EACf,EACAT,EAAQ,QAAQU,EAAO,MAAO,SAAUE,EAAMP,EAAM,CAC9CD,EAAWQ,CAAI,IACjBD,EAAWN,EAAK,MAAM,EAAE,CAAC,EAAE,YAAY,EAAEA,EAAK,MAAM,CAAC,CAAC,EAAIC,EAAKI,EAAOL,CAAI,CAAC,EAE/E,CAAC,EAEDF,EAAUQ,CAAU,EACtB,CACF,CACF,CAAC,CAAC,CACF,GAAG,OAAQ,OAAO,OAAO,IC/DzB,IAAAE,GAAAC,GAAA,CAAAC,GAAAC,KAAA,MACAA,GAAO,QAAU,uBCDjB,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA;AAAA;AAAA;AAAA;AAAA,qCAKC,SAASC,EAAQC,EAAUC,EAAYC,EAAW,CACjD,aAEF,IAAIC,EAAkB,CAAC,GAAI,SAAU,MAAO,KAAM,KAAM,GAAG,EACvDC,EAAeJ,EAAS,cAAc,KAAK,EAE3CK,EAAgB,WAEhBC,EAAQ,KAAK,MACbC,EAAM,KAAK,IACXC,EAAM,KAAK,IASf,SAASC,EAAkBC,EAAIC,EAASC,EAAS,CAC7C,OAAO,WAAWC,EAAOH,EAAIE,CAAO,EAAGD,CAAO,CAClD,CAWA,SAASG,EAAeC,EAAKL,EAAIE,EAAS,CACtC,OAAI,MAAM,QAAQG,CAAG,GACjBC,EAAKD,EAAKH,EAAQF,CAAE,EAAGE,CAAO,EACvB,IAEJ,EACX,CAQA,SAASI,EAAKC,EAAKC,EAAUN,EAAS,CAClC,IAAIO,EAEJ,GAAKF,EAIL,GAAIA,EAAI,QACJA,EAAI,QAAQC,EAAUN,CAAO,UACtBK,EAAI,SAAWf,EAEtB,IADAiB,EAAI,EACGA,EAAIF,EAAI,QACXC,EAAS,KAAKN,EAASK,EAAIE,CAAC,EAAGA,EAAGF,CAAG,EACrCE,QAGJ,KAAKA,KAAKF,EACNA,EAAI,eAAeE,CAAC,GAAKD,EAAS,KAAKN,EAASK,EAAIE,CAAC,EAAGA,EAAGF,CAAG,CAG1E,CASA,SAASG,EAAUC,EAAQC,EAAMC,EAAS,CACtC,IAAIC,EAAqB,sBAAwBF,EAAO;AAAA,EAAOC,EAAU;AAAA,EACzE,OAAO,UAAW,CACd,IAAIE,EAAI,IAAI,MAAM,iBAAiB,EAC/BC,EAAQD,GAAKA,EAAE,MAAQA,EAAE,MAAM,QAAQ,kBAAmB,EAAE,EAC3D,QAAQ,cAAe,EAAE,EACzB,QAAQ,6BAA8B,gBAAgB,EAAI,sBAE3DE,EAAM5B,EAAO,UAAYA,EAAO,QAAQ,MAAQA,EAAO,QAAQ,KACnE,OAAI4B,GACAA,EAAI,KAAK5B,EAAO,QAASyB,EAAoBE,CAAK,EAE/CL,EAAO,MAAM,KAAM,SAAS,CACvC,CACJ,CASA,IAAIO,EACA,OAAO,OAAO,QAAW,WACzBA,EAAS,SAAgBC,EAAQ,CAC7B,GAAIA,IAAW3B,GAAa2B,IAAW,KACnC,MAAM,IAAI,UAAU,4CAA4C,EAIpE,QADIC,EAAS,OAAOD,CAAM,EACjBE,EAAQ,EAAGA,EAAQ,UAAU,OAAQA,IAAS,CACnD,IAAIC,EAAS,UAAUD,CAAK,EAC5B,GAAIC,IAAW9B,GAAa8B,IAAW,KACnC,QAASC,KAAWD,EACZA,EAAO,eAAeC,CAAO,IAC7BH,EAAOG,CAAO,EAAID,EAAOC,CAAO,EAIhD,CACA,OAAOH,CACX,EAEAF,EAAS,OAAO,OAWpB,IAAIM,EAASd,EAAU,SAAgBe,EAAMC,EAAKC,EAAO,CAGrD,QAFIC,EAAO,OAAO,KAAKF,CAAG,EACtBjB,EAAI,EACDA,EAAImB,EAAK,SACR,CAACD,GAAUA,GAASF,EAAKG,EAAKnB,CAAC,CAAC,IAAMjB,KACtCiC,EAAKG,EAAKnB,CAAC,CAAC,EAAIiB,EAAIE,EAAKnB,CAAC,CAAC,GAE/BA,IAEJ,OAAOgB,CACX,EAAG,SAAU,eAAe,EASxBE,EAAQjB,EAAU,SAAee,EAAMC,EAAK,CAC5C,OAAOF,EAAOC,EAAMC,EAAK,EAAI,CACjC,EAAG,QAAS,eAAe,EAQ3B,SAASG,EAAQC,EAAOC,EAAMC,EAAY,CACtC,IAAIC,EAAQF,EAAK,UACbG,EAEJA,EAASJ,EAAM,UAAY,OAAO,OAAOG,CAAK,EAC9CC,EAAO,YAAcJ,EACrBI,EAAO,OAASD,EAEZD,GACAd,EAAOgB,EAAQF,CAAU,CAEjC,CAQA,SAAS7B,EAAOH,EAAIE,EAAS,CACzB,OAAO,UAAmB,CACtB,OAAOF,EAAG,MAAME,EAAS,SAAS,CACtC,CACJ,CASA,SAASiC,EAASC,EAAKC,EAAM,CACzB,OAAI,OAAOD,GAAOzC,EACPyC,EAAI,MAAMC,GAAOA,EAAK,CAAC,GAAK7C,EAAuB6C,CAAI,EAE3DD,CACX,CAQA,SAASE,EAAYC,EAAMC,EAAM,CAC7B,OAAQD,IAAS/C,EAAagD,EAAOD,CACzC,CAQA,SAASE,EAAkBtB,EAAQuB,EAAOC,EAAS,CAC/CrC,EAAKsC,EAASF,CAAK,EAAG,SAASG,EAAM,CACjC1B,EAAO,iBAAiB0B,EAAMF,EAAS,EAAK,CAChD,CAAC,CACL,CAQA,SAASG,EAAqB3B,EAAQuB,EAAOC,EAAS,CAClDrC,EAAKsC,EAASF,CAAK,EAAG,SAASG,EAAM,CACjC1B,EAAO,oBAAoB0B,EAAMF,EAAS,EAAK,CACnD,CAAC,CACL,CASA,SAASI,EAAUC,EAAMC,EAAQ,CAC7B,KAAOD,GAAM,CACT,GAAIA,GAAQC,EACR,MAAO,GAEXD,EAAOA,EAAK,UAChB,CACA,MAAO,EACX,CAQA,SAASE,EAAMC,EAAKC,EAAM,CACtB,OAAOD,EAAI,QAAQC,CAAI,EAAI,EAC/B,CAOA,SAASR,EAASO,EAAK,CACnB,OAAOA,EAAI,KAAK,EAAE,MAAM,MAAM,CAClC,CASA,SAASE,EAAQ3B,EAAK0B,EAAME,EAAW,CACnC,GAAI5B,EAAI,SAAW,CAAC4B,EAChB,OAAO5B,EAAI,QAAQ0B,CAAI,EAGvB,QADI3C,EAAI,EACDA,EAAIiB,EAAI,QAAQ,CACnB,GAAK4B,GAAa5B,EAAIjB,CAAC,EAAE6C,CAAS,GAAKF,GAAU,CAACE,GAAa5B,EAAIjB,CAAC,IAAM2C,EACtE,OAAO3C,EAEXA,GACJ,CACA,MAAO,EAEf,CAOA,SAAS8C,EAAQhD,EAAK,CAClB,OAAO,MAAM,UAAU,MAAM,KAAKA,EAAK,CAAC,CAC5C,CASA,SAASiD,EAAY9B,EAAK+B,EAAKC,EAAM,CAKjC,QAJIC,EAAU,CAAC,EACXC,EAAS,CAAC,EACVnD,EAAI,EAEDA,EAAIiB,EAAI,QAAQ,CACnB,IAAIU,EAAMqB,EAAM/B,EAAIjB,CAAC,EAAEgD,CAAG,EAAI/B,EAAIjB,CAAC,EAC/B4C,EAAQO,EAAQxB,CAAG,EAAI,GACvBuB,EAAQ,KAAKjC,EAAIjB,CAAC,CAAC,EAEvBmD,EAAOnD,CAAC,EAAI2B,EACZ3B,GACJ,CAEA,OAAIiD,IACKD,EAGDE,EAAUA,EAAQ,KAAK,SAAyBE,EAAGC,EAAG,CAClD,OAAOD,EAAEJ,CAAG,EAAIK,EAAEL,CAAG,CACzB,CAAC,EAJDE,EAAUA,EAAQ,KAAK,GAQxBA,CACX,CAQA,SAASI,EAASxD,EAAKyD,EAAU,CAK7B,QAJIC,EAAQC,EACRC,EAAYH,EAAS,CAAC,EAAE,YAAY,EAAIA,EAAS,MAAM,CAAC,EAExDvD,EAAI,EACDA,EAAIhB,EAAgB,QAAQ,CAI/B,GAHAwE,EAASxE,EAAgBgB,CAAC,EAC1ByD,EAAQD,EAAUA,EAASE,EAAYH,EAEnCE,KAAQ3D,EACR,OAAO2D,EAEXzD,GACJ,CACA,OAAOjB,CACX,CAMA,IAAI4E,EAAY,EAChB,SAASC,GAAW,CAChB,OAAOD,GACX,CAOA,SAASE,EAAoBC,EAAS,CAClC,IAAIC,EAAMD,EAAQ,eAAiBA,EACnC,OAAQC,EAAI,aAAeA,EAAI,cAAgBnF,CACnD,CAEA,IAAIoF,EAAe,wCAEfC,EAAiB,iBAAkBrF,EACnCsF,GAAyBZ,EAAS1E,EAAQ,cAAc,IAAMG,EAC9DoF,EAAqBF,GAAiBD,EAAa,KAAK,UAAU,SAAS,EAE3EI,EAAmB,QACnBC,GAAiB,MACjBC,GAAmB,QACnBC,GAAoB,SAEpBC,GAAmB,GAEnBC,EAAc,EACdC,GAAa,EACbC,EAAY,EACZC,EAAe,EAEfC,GAAiB,EACjBC,GAAiB,EACjBC,GAAkB,EAClBC,GAAe,EACfC,GAAiB,GAEjBC,GAAuBJ,GAAiBC,GACxCI,GAAqBH,GAAeC,GACpCG,GAAgBF,GAAuBC,GAEvCE,GAAW,CAAC,IAAK,GAAG,EACpBC,GAAkB,CAAC,UAAW,SAAS,EAS3C,SAASC,EAAMC,EAASC,EAAU,CAC9B,IAAIC,EAAO,KACX,KAAK,QAAUF,EACf,KAAK,SAAWC,EAChB,KAAK,QAAUD,EAAQ,QACvB,KAAK,OAASA,EAAQ,QAAQ,YAI9B,KAAK,WAAa,SAASG,EAAI,CACvBjE,EAAS8D,EAAQ,QAAQ,OAAQ,CAACA,CAAO,CAAC,GAC1CE,EAAK,QAAQC,CAAE,CAEvB,EAEA,KAAK,KAAK,CAEd,CAEAJ,EAAM,UAAY,CAKd,QAAS,UAAW,CAAE,EAKtB,KAAM,UAAW,CACb,KAAK,MAAQvD,EAAkB,KAAK,QAAS,KAAK,KAAM,KAAK,UAAU,EACvE,KAAK,UAAYA,EAAkB,KAAK,OAAQ,KAAK,SAAU,KAAK,UAAU,EAC9E,KAAK,OAASA,EAAkB6B,EAAoB,KAAK,OAAO,EAAG,KAAK,MAAO,KAAK,UAAU,CAClG,EAKA,QAAS,UAAW,CAChB,KAAK,MAAQxB,EAAqB,KAAK,QAAS,KAAK,KAAM,KAAK,UAAU,EAC1E,KAAK,UAAYA,EAAqB,KAAK,OAAQ,KAAK,SAAU,KAAK,UAAU,EACjF,KAAK,OAASA,EAAqBwB,EAAoB,KAAK,OAAO,EAAG,KAAK,MAAO,KAAK,UAAU,CACrG,CACJ,EAQA,SAAS+B,GAAoBJ,EAAS,CAClC,IAAIK,EACAC,EAAaN,EAAQ,QAAQ,WAEjC,OAAIM,EACAD,EAAOC,EACA5B,GACP2B,EAAOE,GACA5B,EACP0B,EAAOG,GACC/B,EAGR4B,EAAOI,GAFPJ,EAAOK,GAIJ,IAAKL,EAAML,EAASW,EAAY,CAC3C,CAQA,SAASA,GAAaX,EAASY,EAAWC,EAAO,CAC7C,IAAIC,EAAcD,EAAM,SAAS,OAC7BE,EAAqBF,EAAM,gBAAgB,OAC3CG,EAAWJ,EAAY3B,GAAgB6B,EAAcC,IAAuB,EAC5EE,EAAWL,GAAazB,EAAYC,IAAkB0B,EAAcC,IAAuB,EAE/FF,EAAM,QAAU,CAAC,CAACG,EAClBH,EAAM,QAAU,CAAC,CAACI,EAEdD,IACAhB,EAAQ,QAAU,CAAC,GAKvBa,EAAM,UAAYD,EAGlBM,GAAiBlB,EAASa,CAAK,EAG/Bb,EAAQ,KAAK,eAAgBa,CAAK,EAElCb,EAAQ,UAAUa,CAAK,EACvBb,EAAQ,QAAQ,UAAYa,CAChC,CAOA,SAASK,GAAiBlB,EAASa,EAAO,CACtC,IAAIM,EAAUnB,EAAQ,QAClBoB,EAAWP,EAAM,SACjBQ,EAAiBD,EAAS,OAGzBD,EAAQ,aACTA,EAAQ,WAAaG,GAAqBT,CAAK,GAI/CQ,EAAiB,GAAK,CAACF,EAAQ,cAC/BA,EAAQ,cAAgBG,GAAqBT,CAAK,EAC3CQ,IAAmB,IAC1BF,EAAQ,cAAgB,IAG5B,IAAII,EAAaJ,EAAQ,WACrBK,EAAgBL,EAAQ,cACxBM,EAAeD,EAAgBA,EAAc,OAASD,EAAW,OAEjEG,EAASb,EAAM,OAASc,GAAUP,CAAQ,EAC9CP,EAAM,UAAYhH,EAAI,EACtBgH,EAAM,UAAYA,EAAM,UAAYU,EAAW,UAE/CV,EAAM,MAAQe,GAASH,EAAcC,CAAM,EAC3Cb,EAAM,SAAWgB,GAAYJ,EAAcC,CAAM,EAEjDI,GAAeX,EAASN,CAAK,EAC7BA,EAAM,gBAAkBkB,GAAalB,EAAM,OAAQA,EAAM,MAAM,EAE/D,IAAImB,EAAkBC,GAAYpB,EAAM,UAAWA,EAAM,OAAQA,EAAM,MAAM,EAC7EA,EAAM,iBAAmBmB,EAAgB,EACzCnB,EAAM,iBAAmBmB,EAAgB,EACzCnB,EAAM,gBAAmBjH,EAAIoI,EAAgB,CAAC,EAAIpI,EAAIoI,EAAgB,CAAC,EAAKA,EAAgB,EAAIA,EAAgB,EAEhHnB,EAAM,MAAQW,EAAgBU,GAASV,EAAc,SAAUJ,CAAQ,EAAI,EAC3EP,EAAM,SAAWW,EAAgBW,GAAYX,EAAc,SAAUJ,CAAQ,EAAI,EAEjFP,EAAM,YAAeM,EAAQ,UAAsCN,EAAM,SAAS,OAC9EM,EAAQ,UAAU,YAAeN,EAAM,SAAS,OAASM,EAAQ,UAAU,YADtCN,EAAM,SAAS,OAGxDuB,GAAyBjB,EAASN,CAAK,EAGvC,IAAI3F,GAAS8E,EAAQ,QACjBlD,EAAU+D,EAAM,SAAS,OAAQ3F,EAAM,IACvCA,GAAS2F,EAAM,SAAS,QAE5BA,EAAM,OAAS3F,EACnB,CAEA,SAAS4G,GAAeX,EAASN,EAAO,CACpC,IAAIa,EAASb,EAAM,OACfwB,EAASlB,EAAQ,aAAe,CAAC,EACjCmB,EAAYnB,EAAQ,WAAa,CAAC,EAClCoB,EAAYpB,EAAQ,WAAa,CAAC,GAElCN,EAAM,YAAc5B,GAAesD,EAAU,YAAcpD,KAC3DmD,EAAYnB,EAAQ,UAAY,CAC5B,EAAGoB,EAAU,QAAU,EACvB,EAAGA,EAAU,QAAU,CAC3B,EAEAF,EAASlB,EAAQ,YAAc,CAC3B,EAAGO,EAAO,EACV,EAAGA,EAAO,CACd,GAGJb,EAAM,OAASyB,EAAU,GAAKZ,EAAO,EAAIW,EAAO,GAChDxB,EAAM,OAASyB,EAAU,GAAKZ,EAAO,EAAIW,EAAO,EACpD,CAOA,SAASD,GAAyBjB,EAASN,EAAO,CAC9C,IAAI2B,EAAOrB,EAAQ,cAAgBN,EAC/B4B,EAAY5B,EAAM,UAAY2B,EAAK,UACnCE,EAAUC,EAAWC,EAAWC,EAEpC,GAAIhC,EAAM,WAAazB,IAAiBqD,EAAYzD,IAAoBwD,EAAK,WAAajJ,GAAY,CAClG,IAAIuJ,EAASjC,EAAM,OAAS2B,EAAK,OAC7BO,EAASlC,EAAM,OAAS2B,EAAK,OAE7BQ,GAAIf,GAAYQ,EAAWK,EAAQC,CAAM,EAC7CJ,EAAYK,GAAE,EACdJ,EAAYI,GAAE,EACdN,EAAY9I,EAAIoJ,GAAE,CAAC,EAAIpJ,EAAIoJ,GAAE,CAAC,EAAKA,GAAE,EAAIA,GAAE,EAC3CH,EAAYd,GAAae,EAAQC,CAAM,EAEvC5B,EAAQ,aAAeN,CAC3B,MAEI6B,EAAWF,EAAK,SAChBG,EAAYH,EAAK,UACjBI,EAAYJ,EAAK,UACjBK,EAAYL,EAAK,UAGrB3B,EAAM,SAAW6B,EACjB7B,EAAM,UAAY8B,EAClB9B,EAAM,UAAY+B,EAClB/B,EAAM,UAAYgC,CACtB,CAOA,SAASvB,GAAqBT,EAAO,CAKjC,QAFIO,EAAW,CAAC,EACZ5G,EAAI,EACDA,EAAIqG,EAAM,SAAS,QACtBO,EAAS5G,CAAC,EAAI,CACV,QAASb,EAAMkH,EAAM,SAASrG,CAAC,EAAE,OAAO,EACxC,QAASb,EAAMkH,EAAM,SAASrG,CAAC,EAAE,OAAO,CAC5C,EACAA,IAGJ,MAAO,CACH,UAAWX,EAAI,EACf,SAAUuH,EACV,OAAQO,GAAUP,CAAQ,EAC1B,OAAQP,EAAM,OACd,OAAQA,EAAM,MAClB,CACJ,CAOA,SAASc,GAAUP,EAAU,CACzB,IAAIC,EAAiBD,EAAS,OAG9B,GAAIC,IAAmB,EACnB,MAAO,CACH,EAAG1H,EAAMyH,EAAS,CAAC,EAAE,OAAO,EAC5B,EAAGzH,EAAMyH,EAAS,CAAC,EAAE,OAAO,CAChC,EAIJ,QADI6B,EAAI,EAAGC,EAAI,EAAG1I,EAAI,EACfA,EAAI6G,GACP4B,GAAK7B,EAAS5G,CAAC,EAAE,QACjB0I,GAAK9B,EAAS5G,CAAC,EAAE,QACjBA,IAGJ,MAAO,CACH,EAAGb,EAAMsJ,EAAI5B,CAAc,EAC3B,EAAG1H,EAAMuJ,EAAI7B,CAAc,CAC/B,CACJ,CASA,SAASY,GAAYQ,EAAWQ,EAAGC,EAAG,CAClC,MAAO,CACH,EAAGD,EAAIR,GAAa,EACpB,EAAGS,EAAIT,GAAa,CACxB,CACJ,CAQA,SAASV,GAAakB,EAAGC,EAAG,CACxB,OAAID,IAAMC,EACC7D,GAGPzF,EAAIqJ,CAAC,GAAKrJ,EAAIsJ,CAAC,EACRD,EAAI,EAAI3D,GAAiBC,GAE7B2D,EAAI,EAAI1D,GAAeC,EAClC,CASA,SAASoC,GAAYsB,EAAIC,EAAIC,EAAO,CAC3BA,IACDA,EAAQxD,IAEZ,IAAIoD,EAAIG,EAAGC,EAAM,CAAC,CAAC,EAAIF,EAAGE,EAAM,CAAC,CAAC,EAC9BH,EAAIE,EAAGC,EAAM,CAAC,CAAC,EAAIF,EAAGE,EAAM,CAAC,CAAC,EAElC,OAAO,KAAK,KAAMJ,EAAIA,EAAMC,EAAIA,CAAE,CACtC,CASA,SAAStB,GAASuB,EAAIC,EAAIC,EAAO,CACxBA,IACDA,EAAQxD,IAEZ,IAAIoD,EAAIG,EAAGC,EAAM,CAAC,CAAC,EAAIF,EAAGE,EAAM,CAAC,CAAC,EAC9BH,EAAIE,EAAGC,EAAM,CAAC,CAAC,EAAIF,EAAGE,EAAM,CAAC,CAAC,EAClC,OAAO,KAAK,MAAMH,EAAGD,CAAC,EAAI,IAAM,KAAK,EACzC,CAQA,SAASd,GAAYmB,EAAOC,EAAK,CAC7B,OAAO3B,GAAS2B,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGzD,EAAe,EAAI8B,GAAS0B,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGxD,EAAe,CACnG,CASA,SAASoC,GAASoB,EAAOC,EAAK,CAC1B,OAAO1B,GAAY0B,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGzD,EAAe,EAAI+B,GAAYyB,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGxD,EAAe,CACzG,CAEA,IAAI0D,GAAkB,CAClB,UAAWvE,EACX,UAAWC,GACX,QAASC,CACb,EAEIsE,GAAuB,YACvBC,GAAsB,oBAO1B,SAAShD,IAAa,CAClB,KAAK,KAAO+C,GACZ,KAAK,MAAQC,GAEb,KAAK,QAAU,GAEf3D,EAAM,MAAM,KAAM,SAAS,CAC/B,CAEAnE,EAAQ8E,GAAYX,EAAO,CAKvB,QAAS,SAAmBI,EAAI,CAC5B,IAAIS,EAAY4C,GAAgBrD,EAAG,IAAI,EAGnCS,EAAY3B,GAAekB,EAAG,SAAW,IACzC,KAAK,QAAU,IAGfS,EAAY1B,IAAciB,EAAG,QAAU,IACvCS,EAAYzB,GAIX,KAAK,UAINyB,EAAYzB,IACZ,KAAK,QAAU,IAGnB,KAAK,SAAS,KAAK,QAASyB,EAAW,CACnC,SAAU,CAACT,CAAE,EACb,gBAAiB,CAACA,CAAE,EACpB,YAAarB,GACb,SAAUqB,CACd,CAAC,EACL,CACJ,CAAC,EAED,IAAIwD,GAAoB,CACpB,YAAa1E,EACb,YAAaC,GACb,UAAWC,EACX,cAAeC,EACf,WAAYA,CAChB,EAGIwE,GAAyB,CACzB,EAAGhF,EACH,EAAGC,GACH,EAAGC,GACH,EAAGC,EACP,EAEI8E,GAAyB,cACzBC,GAAwB,sCAGxB1K,EAAO,gBAAkB,CAACA,EAAO,eACjCyK,GAAyB,gBACzBC,GAAwB,6CAQ5B,SAASvD,IAAoB,CACzB,KAAK,KAAOsD,GACZ,KAAK,MAAQC,GAEb/D,EAAM,MAAM,KAAM,SAAS,EAE3B,KAAK,MAAS,KAAK,QAAQ,QAAQ,cAAgB,CAAC,CACxD,CAEAnE,EAAQ2E,GAAmBR,EAAO,CAK9B,QAAS,SAAmBI,EAAI,CAC5B,IAAI4D,EAAQ,KAAK,MACbC,EAAgB,GAEhBC,EAAsB9D,EAAG,KAAK,YAAY,EAAE,QAAQ,KAAM,EAAE,EAC5DS,EAAY+C,GAAkBM,CAAmB,EACjDC,EAAcN,GAAuBzD,EAAG,WAAW,GAAKA,EAAG,YAE3DgE,EAAWD,GAAetF,EAG1BwF,EAAahH,EAAQ2G,EAAO5D,EAAG,UAAW,WAAW,EAGrDS,EAAY3B,IAAgBkB,EAAG,SAAW,GAAKgE,GAC3CC,EAAa,IACbL,EAAM,KAAK5D,CAAE,EACbiE,EAAaL,EAAM,OAAS,GAEzBnD,GAAazB,EAAYC,KAChC4E,EAAgB,IAIhB,EAAAI,EAAa,KAKjBL,EAAMK,CAAU,EAAIjE,EAEpB,KAAK,SAAS,KAAK,QAASS,EAAW,CACnC,SAAUmD,EACV,gBAAiB,CAAC5D,CAAE,EACpB,YAAa+D,EACb,SAAU/D,CACd,CAAC,EAEG6D,GAEAD,EAAM,OAAOK,EAAY,CAAC,EAElC,CACJ,CAAC,EAED,IAAIC,GAAyB,CACzB,WAAYpF,EACZ,UAAWC,GACX,SAAUC,EACV,YAAaC,CACjB,EAEIkF,GAA6B,aAC7BC,GAA6B,4CAOjC,SAASC,IAAmB,CACxB,KAAK,SAAWF,GAChB,KAAK,MAAQC,GACb,KAAK,QAAU,GAEfxE,EAAM,MAAM,KAAM,SAAS,CAC/B,CAEAnE,EAAQ4I,GAAkBzE,EAAO,CAC7B,QAAS,SAAmBI,EAAI,CAC5B,IAAIvD,EAAOyH,GAAuBlE,EAAG,IAAI,EAOzC,GAJIvD,IAASqC,IACT,KAAK,QAAU,IAGf,EAAC,KAAK,QAIV,KAAIwF,EAAUC,GAAuB,KAAK,KAAMvE,EAAIvD,CAAI,EAGpDA,GAAQuC,EAAYC,IAAiBqF,EAAQ,CAAC,EAAE,OAASA,EAAQ,CAAC,EAAE,SAAW,IAC/E,KAAK,QAAU,IAGnB,KAAK,SAAS,KAAK,QAAS7H,EAAM,CAC9B,SAAU6H,EAAQ,CAAC,EACnB,gBAAiBA,EAAQ,CAAC,EAC1B,YAAa7F,EACb,SAAUuB,CACd,CAAC,EACL,CACJ,CAAC,EAQD,SAASuE,GAAuBvE,EAAIvD,EAAM,CACtC,IAAI+H,EAAMrH,EAAQ6C,EAAG,OAAO,EACxByE,EAAUtH,EAAQ6C,EAAG,cAAc,EAEvC,OAAIvD,GAAQuC,EAAYC,KACpBuF,EAAMpH,EAAYoH,EAAI,OAAOC,CAAO,EAAG,aAAc,EAAI,GAGtD,CAACD,EAAKC,CAAO,CACxB,CAEA,IAAIC,GAAkB,CAClB,WAAY5F,EACZ,UAAWC,GACX,SAAUC,EACV,YAAaC,CACjB,EAEI0F,GAAsB,4CAO1B,SAAStE,IAAa,CAClB,KAAK,SAAWsE,GAChB,KAAK,UAAY,CAAC,EAElB/E,EAAM,MAAM,KAAM,SAAS,CAC/B,CAEAnE,EAAQ4E,GAAYT,EAAO,CACvB,QAAS,SAAoBI,EAAI,CAC7B,IAAIvD,EAAOiI,GAAgB1E,EAAG,IAAI,EAC9BsE,EAAUM,GAAW,KAAK,KAAM5E,EAAIvD,CAAI,EACvC6H,GAIL,KAAK,SAAS,KAAK,QAAS7H,EAAM,CAC9B,SAAU6H,EAAQ,CAAC,EACnB,gBAAiBA,EAAQ,CAAC,EAC1B,YAAa7F,EACb,SAAUuB,CACd,CAAC,CACL,CACJ,CAAC,EAQD,SAAS4E,GAAW5E,EAAIvD,EAAM,CAC1B,IAAIoI,EAAa1H,EAAQ6C,EAAG,OAAO,EAC/B8E,EAAY,KAAK,UAGrB,GAAIrI,GAAQqC,EAAcC,KAAe8F,EAAW,SAAW,EAC3D,OAAAC,EAAUD,EAAW,CAAC,EAAE,UAAU,EAAI,GAC/B,CAACA,EAAYA,CAAU,EAGlC,IAAIxK,EACA0K,EACAC,EAAiB7H,EAAQ6C,EAAG,cAAc,EAC1CiF,EAAuB,CAAC,EACxBlK,EAAS,KAAK,OAQlB,GALAgK,EAAgBF,EAAW,OAAO,SAASK,EAAO,CAC9C,OAAOvI,EAAUuI,EAAM,OAAQnK,CAAM,CACzC,CAAC,EAGG0B,IAASqC,EAET,IADAzE,EAAI,EACGA,EAAI0K,EAAc,QACrBD,EAAUC,EAAc1K,CAAC,EAAE,UAAU,EAAI,GACzCA,IAMR,IADAA,EAAI,EACGA,EAAI2K,EAAe,QAClBF,EAAUE,EAAe3K,CAAC,EAAE,UAAU,GACtC4K,EAAqB,KAAKD,EAAe3K,CAAC,CAAC,EAI3CoC,GAAQuC,EAAYC,IACpB,OAAO6F,EAAUE,EAAe3K,CAAC,EAAE,UAAU,EAEjDA,IAGJ,GAAK4K,EAAqB,OAI1B,MAAO,CAEH7H,EAAY2H,EAAc,OAAOE,CAAoB,EAAG,aAAc,EAAI,EAC1EA,CACJ,CACJ,CAYA,IAAIE,GAAgB,KAChBC,GAAiB,GAErB,SAAS9E,IAAkB,CACvBV,EAAM,MAAM,KAAM,SAAS,EAE3B,IAAIrD,EAAUxC,EAAO,KAAK,QAAS,IAAI,EACvC,KAAK,MAAQ,IAAIsG,GAAW,KAAK,QAAS9D,CAAO,EACjD,KAAK,MAAQ,IAAIgE,GAAW,KAAK,QAAShE,CAAO,EAEjD,KAAK,aAAe,KACpB,KAAK,YAAc,CAAC,CACxB,CAEAd,EAAQ6E,GAAiBV,EAAO,CAO5B,QAAS,SAAoBC,EAASwF,EAAYC,EAAW,CACzD,IAAItB,EAAWsB,EAAU,aAAe7G,EACpC8G,EAAWD,EAAU,aAAe3G,GAExC,GAAI,EAAA4G,GAAWD,EAAU,oBAAsBA,EAAU,mBAAmB,kBAK5E,IAAItB,EACAwB,GAAc,KAAK,KAAMH,EAAYC,CAAS,UACvCC,GAAWE,GAAiB,KAAK,KAAMH,CAAS,EACvD,OAGJ,KAAK,SAASzF,EAASwF,EAAYC,CAAS,EAChD,EAKA,QAAS,UAAmB,CACxB,KAAK,MAAM,QAAQ,EACnB,KAAK,MAAM,QAAQ,CACvB,CACJ,CAAC,EAED,SAASE,GAAc/E,EAAWiF,EAAW,CACrCjF,EAAY3B,GACZ,KAAK,aAAe4G,EAAU,gBAAgB,CAAC,EAAE,WACjDC,GAAa,KAAK,KAAMD,CAAS,GAC1BjF,GAAazB,EAAYC,IAChC0G,GAAa,KAAK,KAAMD,CAAS,CAEzC,CAEA,SAASC,GAAaD,EAAW,CAC7B,IAAIR,EAAQQ,EAAU,gBAAgB,CAAC,EAEvC,GAAIR,EAAM,aAAe,KAAK,aAAc,CACxC,IAAIU,EAAY,CAAC,EAAGV,EAAM,QAAS,EAAGA,EAAM,OAAO,EACnD,KAAK,YAAY,KAAKU,CAAS,EAC/B,IAAIC,EAAM,KAAK,YACXC,EAAkB,UAAW,CAC7B,IAAIzL,EAAIwL,EAAI,QAAQD,CAAS,EACzBvL,EAAI,IACJwL,EAAI,OAAOxL,EAAG,CAAC,CAEvB,EACA,WAAWyL,EAAiBX,EAAa,CAC7C,CACJ,CAEA,SAASM,GAAiBC,EAAW,CAEjC,QADI5C,EAAI4C,EAAU,SAAS,QAAS3C,EAAI2C,EAAU,SAAS,QAClDrL,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAAK,CAC9C,IAAI0L,EAAI,KAAK,YAAY1L,CAAC,EACtB2L,EAAK,KAAK,IAAIlD,EAAIiD,EAAE,CAAC,EAAGE,EAAK,KAAK,IAAIlD,EAAIgD,EAAE,CAAC,EACjD,GAAIC,GAAMZ,IAAkBa,GAAMb,GAC9B,MAAO,EAEf,CACA,MAAO,EACX,CAEA,IAAIc,GAAwBvI,EAASrE,EAAa,MAAO,aAAa,EAClE6M,GAAsBD,KAA0B9M,EAGhDgN,GAAuB,UACvBC,GAAoB,OACpBC,GAA4B,eAC5BC,GAAoB,OACpBC,GAAqB,QACrBC,GAAqB,QACrBC,GAAmBC,GAAoB,EAS3C,SAASC,GAAY/G,EAASgH,EAAO,CACjC,KAAK,QAAUhH,EACf,KAAK,IAAIgH,CAAK,CAClB,CAEAD,GAAY,UAAY,CAKpB,IAAK,SAASC,EAAO,CAEbA,GAAST,KACTS,EAAQ,KAAK,QAAQ,GAGrBV,IAAuB,KAAK,QAAQ,QAAQ,OAASO,GAAiBG,CAAK,IAC3E,KAAK,QAAQ,QAAQ,MAAMX,EAAqB,EAAIW,GAExD,KAAK,QAAUA,EAAM,YAAY,EAAE,KAAK,CAC5C,EAKA,OAAQ,UAAW,CACf,KAAK,IAAI,KAAK,QAAQ,QAAQ,WAAW,CAC7C,EAMA,QAAS,UAAW,CAChB,IAAIC,EAAU,CAAC,EACf,OAAA5M,EAAK,KAAK,QAAQ,YAAa,SAAS6M,EAAY,CAC5ChL,EAASgL,EAAW,QAAQ,OAAQ,CAACA,CAAU,CAAC,IAChDD,EAAUA,EAAQ,OAAOC,EAAW,eAAe,CAAC,EAE5D,CAAC,EACMC,GAAkBF,EAAQ,KAAK,GAAG,CAAC,CAC9C,EAMA,gBAAiB,SAASpG,EAAO,CAC7B,IAAIuG,EAAWvG,EAAM,SACjBgC,EAAYhC,EAAM,gBAGtB,GAAI,KAAK,QAAQ,QAAQ,UAAW,CAChCuG,EAAS,eAAe,EACxB,MACJ,CAEA,IAAIH,EAAU,KAAK,QACfI,EAAUpK,EAAMgK,EAASP,EAAiB,GAAK,CAACG,GAAiBH,EAAiB,EAClFY,EAAUrK,EAAMgK,EAASL,EAAkB,GAAK,CAACC,GAAiBD,EAAkB,EACpFW,EAAUtK,EAAMgK,EAASN,EAAkB,GAAK,CAACE,GAAiBF,EAAkB,EAExF,GAAIU,EAAS,CAGT,IAAIG,EAAe3G,EAAM,SAAS,SAAW,EACzC4G,EAAgB5G,EAAM,SAAW,EACjC6G,EAAiB7G,EAAM,UAAY,IAEvC,GAAI2G,GAAgBC,GAAiBC,EACjC,MAER,CAEA,GAAI,EAAAH,GAAWD,KAKXD,GACCC,GAAWzE,EAAYnD,IACvB6H,GAAW1E,EAAYlD,IACxB,OAAO,KAAK,WAAWyH,CAAQ,CAEvC,EAMA,WAAY,SAASA,EAAU,CAC3B,KAAK,QAAQ,QAAQ,UAAY,GACjCA,EAAS,eAAe,CAC5B,CACJ,EAOA,SAASD,GAAkBF,EAAS,CAEhC,GAAIhK,EAAMgK,EAASP,EAAiB,EAChC,OAAOA,GAGX,IAAIa,EAAUtK,EAAMgK,EAASN,EAAkB,EAC3CW,EAAUrK,EAAMgK,EAASL,EAAkB,EAM/C,OAAIW,GAAWD,EACJZ,GAIPa,GAAWD,EACJC,EAAUZ,GAAqBC,GAItC3J,EAAMgK,EAASR,EAAyB,EACjCA,GAGJD,EACX,CAEA,SAASM,IAAsB,CAC3B,GAAI,CAACR,GACD,MAAO,GAEX,IAAIqB,EAAW,CAAC,EACZC,EAAcxO,EAAO,KAAOA,EAAO,IAAI,SAC3C,OAAC,OAAQ,eAAgB,QAAS,QAAS,cAAe,MAAM,EAAE,QAAQ,SAAS+C,EAAK,CAIpFwL,EAASxL,CAAG,EAAIyL,EAAcxO,EAAO,IAAI,SAAS,eAAgB+C,CAAG,EAAI,EAC7E,CAAC,EACMwL,CACX,CA6BA,IAAIE,GAAiB,EACjBC,EAAc,EACdC,GAAgB,EAChBC,GAAc,EACdC,GAAmBD,GACnBE,GAAkB,GAClBC,GAAe,GAQnB,SAASC,GAAWC,EAAS,CACzB,KAAK,QAAUpN,EAAO,CAAC,EAAG,KAAK,SAAUoN,GAAW,CAAC,CAAC,EAEtD,KAAK,GAAKjK,EAAS,EAEnB,KAAK,QAAU,KAGf,KAAK,QAAQ,OAAS/B,EAAY,KAAK,QAAQ,OAAQ,EAAI,EAE3D,KAAK,MAAQwL,GAEb,KAAK,aAAe,CAAC,EACrB,KAAK,YAAc,CAAC,CACxB,CAEAO,GAAW,UAAY,CAKnB,SAAU,CAAC,EAOX,IAAK,SAASC,EAAS,CACnB,OAAApN,EAAO,KAAK,QAASoN,CAAO,EAG5B,KAAK,SAAW,KAAK,QAAQ,YAAY,OAAO,EACzC,IACX,EAOA,cAAe,SAASC,EAAiB,CACrC,GAAInO,EAAemO,EAAiB,gBAAiB,IAAI,EACrD,OAAO,KAGX,IAAIC,EAAe,KAAK,aACxB,OAAAD,EAAkBE,GAA6BF,EAAiB,IAAI,EAC/DC,EAAaD,EAAgB,EAAE,IAChCC,EAAaD,EAAgB,EAAE,EAAIA,EACnCA,EAAgB,cAAc,IAAI,GAE/B,IACX,EAOA,kBAAmB,SAASA,EAAiB,CACzC,OAAInO,EAAemO,EAAiB,oBAAqB,IAAI,EAClD,MAGXA,EAAkBE,GAA6BF,EAAiB,IAAI,EACpE,OAAO,KAAK,aAAaA,EAAgB,EAAE,EACpC,KACX,EAOA,eAAgB,SAASA,EAAiB,CACtC,GAAInO,EAAemO,EAAiB,iBAAkB,IAAI,EACtD,OAAO,KAGX,IAAIG,EAAc,KAAK,YACvB,OAAAH,EAAkBE,GAA6BF,EAAiB,IAAI,EAChElL,EAAQqL,EAAaH,CAAe,IAAM,KAC1CG,EAAY,KAAKH,CAAe,EAChCA,EAAgB,eAAe,IAAI,GAEhC,IACX,EAOA,mBAAoB,SAASA,EAAiB,CAC1C,GAAInO,EAAemO,EAAiB,qBAAsB,IAAI,EAC1D,OAAO,KAGXA,EAAkBE,GAA6BF,EAAiB,IAAI,EACpE,IAAIlN,EAAQgC,EAAQ,KAAK,YAAakL,CAAe,EACrD,OAAIlN,EAAQ,IACR,KAAK,YAAY,OAAOA,EAAO,CAAC,EAE7B,IACX,EAMA,mBAAoB,UAAW,CAC3B,OAAO,KAAK,YAAY,OAAS,CACrC,EAOA,iBAAkB,SAASkN,EAAiB,CACxC,MAAO,CAAC,CAAC,KAAK,aAAaA,EAAgB,EAAE,CACjD,EAOA,KAAM,SAASzH,EAAO,CAClB,IAAIX,EAAO,KACPwI,EAAQ,KAAK,MAEjB,SAASC,EAAKC,EAAO,CACjB1I,EAAK,QAAQ,KAAK0I,EAAO/H,CAAK,CAClC,CAGI6H,EAAQV,IACRW,EAAKzI,EAAK,QAAQ,MAAQ2I,GAASH,CAAK,CAAC,EAG7CC,EAAKzI,EAAK,QAAQ,KAAK,EAEnBW,EAAM,iBACN8H,EAAK9H,EAAM,eAAe,EAI1B6H,GAASV,IACTW,EAAKzI,EAAK,QAAQ,MAAQ2I,GAASH,CAAK,CAAC,CAEjD,EAQA,QAAS,SAAS7H,EAAO,CACrB,GAAI,KAAK,QAAQ,EACb,OAAO,KAAK,KAAKA,CAAK,EAG1B,KAAK,MAAQsH,EACjB,EAMA,QAAS,UAAW,CAEhB,QADI3N,EAAI,EACDA,EAAI,KAAK,YAAY,QAAQ,CAChC,GAAI,EAAE,KAAK,YAAYA,CAAC,EAAE,OAAS2N,GAAeN,KAC9C,MAAO,GAEXrN,GACJ,CACA,MAAO,EACX,EAMA,UAAW,SAASiL,EAAW,CAG3B,IAAIqD,EAAiB7N,EAAO,CAAC,EAAGwK,CAAS,EAGzC,GAAI,CAACvJ,EAAS,KAAK,QAAQ,OAAQ,CAAC,KAAM4M,CAAc,CAAC,EAAG,CACxD,KAAK,MAAM,EACX,KAAK,MAAQX,GACb,MACJ,CAGI,KAAK,OAASF,GAAmBC,GAAkBC,MACnD,KAAK,MAAQN,IAGjB,KAAK,MAAQ,KAAK,QAAQiB,CAAc,EAIpC,KAAK,OAAShB,EAAcC,GAAgBC,GAAcE,KAC1D,KAAK,QAAQY,CAAc,CAEnC,EASA,QAAS,SAASrD,EAAW,CAAE,EAO/B,eAAgB,UAAW,CAAE,EAO7B,MAAO,UAAW,CAAE,CACxB,EAOA,SAASoD,GAASH,EAAO,CACrB,OAAIA,EAAQR,GACD,SACAQ,EAAQV,GACR,MACAU,EAAQX,GACR,OACAW,EAAQZ,EACR,QAEJ,EACX,CAOA,SAASiB,GAAalG,EAAW,CAC7B,OAAIA,GAAapD,GACN,OACAoD,GAAarD,GACb,KACAqD,GAAavD,GACb,OACAuD,GAAatD,GACb,QAEJ,EACX,CAQA,SAASiJ,GAA6BF,EAAiBpB,EAAY,CAC/D,IAAIlH,EAAUkH,EAAW,QACzB,OAAIlH,EACOA,EAAQ,IAAIsI,CAAe,EAE/BA,CACX,CAOA,SAASU,IAAiB,CACtBZ,GAAW,MAAM,KAAM,SAAS,CACpC,CAEAxM,EAAQoN,GAAgBZ,GAAY,CAKhC,SAAU,CAKN,SAAU,CACd,EAQA,SAAU,SAASvH,EAAO,CACtB,IAAIoI,EAAiB,KAAK,QAAQ,SAClC,OAAOA,IAAmB,GAAKpI,EAAM,SAAS,SAAWoI,CAC7D,EAQA,QAAS,SAASpI,EAAO,CACrB,IAAI6H,EAAQ,KAAK,MACb9H,EAAYC,EAAM,UAElBqI,EAAeR,GAASZ,EAAcC,IACtCoB,EAAU,KAAK,SAAStI,CAAK,EAGjC,OAAIqI,IAAiBtI,EAAYxB,GAAgB,CAAC+J,GACvCT,EAAQR,GACRgB,GAAgBC,EACnBvI,EAAYzB,EACLuJ,EAAQV,GACNU,EAAQZ,EAGdY,EAAQX,GAFJD,EAIRK,EACX,CACJ,CAAC,EAQD,SAASiB,IAAgB,CACrBJ,GAAe,MAAM,KAAM,SAAS,EAEpC,KAAK,GAAK,KACV,KAAK,GAAK,IACd,CAEApN,EAAQwN,GAAeJ,GAAgB,CAKnC,SAAU,CACN,MAAO,MACP,UAAW,GACX,SAAU,EACV,UAAWpJ,EACf,EAEA,eAAgB,UAAW,CACvB,IAAIiD,EAAY,KAAK,QAAQ,UACzBoE,EAAU,CAAC,EACf,OAAIpE,EAAYnD,IACZuH,EAAQ,KAAKL,EAAkB,EAE/B/D,EAAYlD,IACZsH,EAAQ,KAAKN,EAAkB,EAE5BM,CACX,EAEA,cAAe,SAASpG,EAAO,CAC3B,IAAIwH,EAAU,KAAK,QACfgB,EAAW,GACXC,EAAWzI,EAAM,SACjBgC,EAAYhC,EAAM,UAClBoC,EAAIpC,EAAM,OACVqC,EAAIrC,EAAM,OAGd,OAAMgC,EAAYwF,EAAQ,YAClBA,EAAQ,UAAY3I,IACpBmD,EAAaI,IAAM,EAAK5D,GAAkB4D,EAAI,EAAK3D,GAAiBC,GACpE8J,EAAWpG,GAAK,KAAK,GACrBqG,EAAW,KAAK,IAAIzI,EAAM,MAAM,IAEhCgC,EAAaK,IAAM,EAAK7D,GAAkB6D,EAAI,EAAK1D,GAAeC,GAClE4J,EAAWnG,GAAK,KAAK,GACrBoG,EAAW,KAAK,IAAIzI,EAAM,MAAM,IAGxCA,EAAM,UAAYgC,EACXwG,GAAYC,EAAWjB,EAAQ,WAAaxF,EAAYwF,EAAQ,SAC3E,EAEA,SAAU,SAASxH,EAAO,CACtB,OAAOmI,GAAe,UAAU,SAAS,KAAK,KAAMnI,CAAK,IACpD,KAAK,MAAQiH,GAAgB,EAAE,KAAK,MAAQA,IAAgB,KAAK,cAAcjH,CAAK,EAC7F,EAEA,KAAM,SAASA,EAAO,CAElB,KAAK,GAAKA,EAAM,OAChB,KAAK,GAAKA,EAAM,OAEhB,IAAIgC,EAAYkG,GAAalI,EAAM,SAAS,EAExCgC,IACAhC,EAAM,gBAAkB,KAAK,QAAQ,MAAQgC,GAEjD,KAAK,OAAO,KAAK,KAAK,KAAMhC,CAAK,CACrC,CACJ,CAAC,EAQD,SAAS0I,IAAkB,CACvBP,GAAe,MAAM,KAAM,SAAS,CACxC,CAEApN,EAAQ2N,GAAiBP,GAAgB,CAKrC,SAAU,CACN,MAAO,QACP,UAAW,EACX,SAAU,CACd,EAEA,eAAgB,UAAW,CACvB,MAAO,CAACtC,EAAiB,CAC7B,EAEA,SAAU,SAAS7F,EAAO,CACtB,OAAO,KAAK,OAAO,SAAS,KAAK,KAAMA,CAAK,IACvC,KAAK,IAAIA,EAAM,MAAQ,CAAC,EAAI,KAAK,QAAQ,WAAa,KAAK,MAAQiH,EAC5E,EAEA,KAAM,SAASjH,EAAO,CAClB,GAAIA,EAAM,QAAU,EAAG,CACnB,IAAI2I,EAAQ3I,EAAM,MAAQ,EAAI,KAAO,MACrCA,EAAM,gBAAkB,KAAK,QAAQ,MAAQ2I,CACjD,CACA,KAAK,OAAO,KAAK,KAAK,KAAM3I,CAAK,CACrC,CACJ,CAAC,EAQD,SAAS4I,IAAkB,CACvBrB,GAAW,MAAM,KAAM,SAAS,EAEhC,KAAK,OAAS,KACd,KAAK,OAAS,IAClB,CAEAxM,EAAQ6N,GAAiBrB,GAAY,CAKjC,SAAU,CACN,MAAO,QACP,SAAU,EACV,KAAM,IACN,UAAW,CACf,EAEA,eAAgB,UAAW,CACvB,MAAO,CAAC5B,EAAiB,CAC7B,EAEA,QAAS,SAAS3F,EAAO,CACrB,IAAIwH,EAAU,KAAK,QACfqB,EAAgB7I,EAAM,SAAS,SAAWwH,EAAQ,SAClDsB,EAAgB9I,EAAM,SAAWwH,EAAQ,UACzCuB,EAAY/I,EAAM,UAAYwH,EAAQ,KAM1C,GAJA,KAAK,OAASxH,EAIV,CAAC8I,GAAiB,CAACD,GAAkB7I,EAAM,WAAa1B,EAAYC,IAAiB,CAACwK,EACtF,KAAK,MAAM,UACJ/I,EAAM,UAAY5B,EACzB,KAAK,MAAM,EACX,KAAK,OAASnF,EAAkB,UAAW,CACvC,KAAK,MAAQmO,GACb,KAAK,QAAQ,CACjB,EAAGI,EAAQ,KAAM,IAAI,UACdxH,EAAM,UAAY1B,EACzB,OAAO8I,GAEX,OAAOE,EACX,EAEA,MAAO,UAAW,CACd,aAAa,KAAK,MAAM,CAC5B,EAEA,KAAM,SAAStH,EAAO,CACd,KAAK,QAAUoH,KAIfpH,GAAUA,EAAM,UAAY1B,EAC5B,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAQ,KAAM0B,CAAK,GAElD,KAAK,OAAO,UAAYhH,EAAI,EAC5B,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAO,KAAK,MAAM,GAEzD,CACJ,CAAC,EAQD,SAASgQ,IAAmB,CACxBb,GAAe,MAAM,KAAM,SAAS,CACxC,CAEApN,EAAQiO,GAAkBb,GAAgB,CAKtC,SAAU,CACN,MAAO,SACP,UAAW,EACX,SAAU,CACd,EAEA,eAAgB,UAAW,CACvB,MAAO,CAACtC,EAAiB,CAC7B,EAEA,SAAU,SAAS7F,EAAO,CACtB,OAAO,KAAK,OAAO,SAAS,KAAK,KAAMA,CAAK,IACvC,KAAK,IAAIA,EAAM,QAAQ,EAAI,KAAK,QAAQ,WAAa,KAAK,MAAQiH,EAC3E,CACJ,CAAC,EAQD,SAASgC,IAAkB,CACvBd,GAAe,MAAM,KAAM,SAAS,CACxC,CAEApN,EAAQkO,GAAiBd,GAAgB,CAKrC,SAAU,CACN,MAAO,QACP,UAAW,GACX,SAAU,GACV,UAAWtJ,GAAuBC,GAClC,SAAU,CACd,EAEA,eAAgB,UAAW,CACvB,OAAOyJ,GAAc,UAAU,eAAe,KAAK,IAAI,CAC3D,EAEA,SAAU,SAASvI,EAAO,CACtB,IAAIgC,EAAY,KAAK,QAAQ,UACzBH,EAEJ,OAAIG,GAAanD,GAAuBC,IACpC+C,EAAW7B,EAAM,gBACVgC,EAAYnD,GACnBgD,EAAW7B,EAAM,iBACVgC,EAAYlD,KACnB+C,EAAW7B,EAAM,kBAGd,KAAK,OAAO,SAAS,KAAK,KAAMA,CAAK,GACxCgC,EAAYhC,EAAM,iBAClBA,EAAM,SAAW,KAAK,QAAQ,WAC9BA,EAAM,aAAe,KAAK,QAAQ,UAClCjH,EAAI8I,CAAQ,EAAI,KAAK,QAAQ,UAAY7B,EAAM,UAAY1B,CACnE,EAEA,KAAM,SAAS0B,EAAO,CAClB,IAAIgC,EAAYkG,GAAalI,EAAM,eAAe,EAC9CgC,GACA,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAQA,EAAWhC,CAAK,EAG3D,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAOA,CAAK,CAC/C,CACJ,CAAC,EAYD,SAASkJ,IAAgB,CACrB3B,GAAW,MAAM,KAAM,SAAS,EAIhC,KAAK,MAAQ,GACb,KAAK,QAAU,GAEf,KAAK,OAAS,KACd,KAAK,OAAS,KACd,KAAK,MAAQ,CACjB,CAEAxM,EAAQmO,GAAe3B,GAAY,CAK/B,SAAU,CACN,MAAO,MACP,SAAU,EACV,KAAM,EACN,SAAU,IACV,KAAM,IACN,UAAW,EACX,aAAc,EAClB,EAEA,eAAgB,UAAW,CACvB,MAAO,CAAC3B,EAAyB,CACrC,EAEA,QAAS,SAAS5F,EAAO,CACrB,IAAIwH,EAAU,KAAK,QAEfqB,EAAgB7I,EAAM,SAAS,SAAWwH,EAAQ,SAClDsB,EAAgB9I,EAAM,SAAWwH,EAAQ,UACzC2B,EAAiBnJ,EAAM,UAAYwH,EAAQ,KAI/C,GAFA,KAAK,MAAM,EAENxH,EAAM,UAAY5B,GAAiB,KAAK,QAAU,EACnD,OAAO,KAAK,YAAY,EAK5B,GAAI0K,GAAiBK,GAAkBN,EAAe,CAClD,GAAI7I,EAAM,WAAa1B,EACnB,OAAO,KAAK,YAAY,EAG5B,IAAI8K,EAAgB,KAAK,MAASpJ,EAAM,UAAY,KAAK,MAAQwH,EAAQ,SAAY,GACjF6B,EAAgB,CAAC,KAAK,SAAWrI,GAAY,KAAK,QAAShB,EAAM,MAAM,EAAIwH,EAAQ,aAEvF,KAAK,MAAQxH,EAAM,UACnB,KAAK,QAAUA,EAAM,OAEjB,CAACqJ,GAAiB,CAACD,EACnB,KAAK,MAAQ,EAEb,KAAK,OAAS,EAGlB,KAAK,OAASpJ,EAId,IAAIsJ,EAAW,KAAK,MAAQ9B,EAAQ,KACpC,GAAI8B,IAAa,EAGb,OAAK,KAAK,mBAAmB,GAGzB,KAAK,OAASrQ,EAAkB,UAAW,CACvC,KAAK,MAAQmO,GACb,KAAK,QAAQ,CACjB,EAAGI,EAAQ,SAAU,IAAI,EAClBP,GANAG,EASnB,CACA,OAAOE,EACX,EAEA,YAAa,UAAW,CACpB,YAAK,OAASrO,EAAkB,UAAW,CACvC,KAAK,MAAQqO,EACjB,EAAG,KAAK,QAAQ,SAAU,IAAI,EACvBA,EACX,EAEA,MAAO,UAAW,CACd,aAAa,KAAK,MAAM,CAC5B,EAEA,KAAM,UAAW,CACT,KAAK,OAASF,KACd,KAAK,OAAO,SAAW,KAAK,MAC5B,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAO,KAAK,MAAM,EAEzD,CACJ,CAAC,EAQD,SAASmC,GAAO9L,EAAS+J,EAAS,CAC9B,OAAAA,EAAUA,GAAW,CAAC,EACtBA,EAAQ,YAAchM,EAAYgM,EAAQ,YAAa+B,GAAO,SAAS,MAAM,EACtE,IAAIC,GAAQ/L,EAAS+J,CAAO,CACvC,CAKA+B,GAAO,QAAU,QAMjBA,GAAO,SAAW,CAOd,UAAW,GAQX,YAAa7D,GAMb,OAAQ,GASR,YAAa,KAOb,WAAY,KAOZ,OAAQ,CAEJ,CAACsD,GAAkB,CAAC,OAAQ,EAAK,CAAC,EAClC,CAACN,GAAiB,CAAC,OAAQ,EAAK,EAAG,CAAC,QAAQ,CAAC,EAC7C,CAACO,GAAiB,CAAC,UAAWpK,EAAoB,CAAC,EACnD,CAAC0J,GAAe,CAAC,UAAW1J,EAAoB,EAAG,CAAC,OAAO,CAAC,EAC5D,CAACqK,EAAa,EACd,CAACA,GAAe,CAAC,MAAO,YAAa,KAAM,CAAC,EAAG,CAAC,KAAK,CAAC,EACtD,CAACN,EAAe,CACpB,EAOA,SAAU,CAMN,WAAY,OAOZ,YAAa,OASb,aAAc,OAOd,eAAgB,OAOhB,SAAU,OAQV,kBAAmB,eACvB,CACJ,EAEA,IAAIa,GAAO,EACPC,GAAc,EAQlB,SAASF,GAAQ/L,EAAS+J,EAAS,CAC/B,KAAK,QAAUpN,EAAO,CAAC,EAAGmP,GAAO,SAAU/B,GAAW,CAAC,CAAC,EAExD,KAAK,QAAQ,YAAc,KAAK,QAAQ,aAAe/J,EAEvD,KAAK,SAAW,CAAC,EACjB,KAAK,QAAU,CAAC,EAChB,KAAK,YAAc,CAAC,EACpB,KAAK,YAAc,CAAC,EAEpB,KAAK,QAAUA,EACf,KAAK,MAAQ8B,GAAoB,IAAI,EACrC,KAAK,YAAc,IAAI2G,GAAY,KAAM,KAAK,QAAQ,WAAW,EAEjEyD,GAAe,KAAM,EAAI,EAEzBnQ,EAAK,KAAK,QAAQ,YAAa,SAASoQ,EAAM,CAC1C,IAAIvD,EAAa,KAAK,IAAI,IAAKuD,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,CAAC,EAChDA,EAAK,CAAC,GAAKvD,EAAW,cAAcuD,EAAK,CAAC,CAAC,EAC3CA,EAAK,CAAC,GAAKvD,EAAW,eAAeuD,EAAK,CAAC,CAAC,CAChD,EAAG,IAAI,CACX,CAEAJ,GAAQ,UAAY,CAMhB,IAAK,SAAShC,EAAS,CACnB,OAAApN,EAAO,KAAK,QAASoN,CAAO,EAGxBA,EAAQ,aACR,KAAK,YAAY,OAAO,EAExBA,EAAQ,cAER,KAAK,MAAM,QAAQ,EACnB,KAAK,MAAM,OAASA,EAAQ,YAC5B,KAAK,MAAM,KAAK,GAEb,IACX,EAQA,KAAM,SAASqC,EAAO,CAClB,KAAK,QAAQ,QAAUA,EAAQH,GAAcD,EACjD,EAQA,UAAW,SAAS7E,EAAW,CAC3B,IAAItE,EAAU,KAAK,QACnB,GAAI,CAAAA,EAAQ,QAKZ,MAAK,YAAY,gBAAgBsE,CAAS,EAE1C,IAAIyB,EACAyD,EAAc,KAAK,YAKnBC,EAAgBzJ,EAAQ,eAIxB,CAACyJ,GAAkBA,GAAiBA,EAAc,MAAQ3C,MAC1D2C,EAAgBzJ,EAAQ,cAAgB,MAI5C,QADI3G,EAAI,EACDA,EAAImQ,EAAY,QACnBzD,EAAayD,EAAYnQ,CAAC,EAQtB2G,EAAQ,UAAYoJ,KAChB,CAACK,GAAiB1D,GAAc0D,GAChC1D,EAAW,iBAAiB0D,CAAa,GAC7C1D,EAAW,UAAUzB,CAAS,EAE9ByB,EAAW,MAAM,EAKjB,CAAC0D,GAAiB1D,EAAW,OAASY,EAAcC,GAAgBC,MACpE4C,EAAgBzJ,EAAQ,cAAgB+F,GAE5C1M,IAER,EAOA,IAAK,SAAS0M,EAAY,CACtB,GAAIA,aAAsBkB,GACtB,OAAOlB,EAIX,QADIyD,EAAc,KAAK,YACdnQ,EAAI,EAAGA,EAAImQ,EAAY,OAAQnQ,IACpC,GAAImQ,EAAYnQ,CAAC,EAAE,QAAQ,OAAS0M,EAChC,OAAOyD,EAAYnQ,CAAC,EAG5B,OAAO,IACX,EAQA,IAAK,SAAS0M,EAAY,CACtB,GAAI/M,EAAe+M,EAAY,MAAO,IAAI,EACtC,OAAO,KAIX,IAAI2D,EAAW,KAAK,IAAI3D,EAAW,QAAQ,KAAK,EAChD,OAAI2D,GACA,KAAK,OAAOA,CAAQ,EAGxB,KAAK,YAAY,KAAK3D,CAAU,EAChCA,EAAW,QAAU,KAErB,KAAK,YAAY,OAAO,EACjBA,CACX,EAOA,OAAQ,SAASA,EAAY,CACzB,GAAI/M,EAAe+M,EAAY,SAAU,IAAI,EACzC,OAAO,KAMX,GAHAA,EAAa,KAAK,IAAIA,CAAU,EAG5BA,EAAY,CACZ,IAAIyD,EAAc,KAAK,YACnBvP,EAAQgC,EAAQuN,EAAazD,CAAU,EAEvC9L,IAAU,KACVuP,EAAY,OAAOvP,EAAO,CAAC,EAC3B,KAAK,YAAY,OAAO,EAEhC,CAEA,OAAO,IACX,EAQA,GAAI,SAAS0P,EAAQpO,EAAS,CAC1B,GAAIoO,IAAWvR,GAGXmD,IAAYnD,EAIhB,KAAIwR,EAAW,KAAK,SACpB,OAAA1Q,EAAKsC,EAASmO,CAAM,EAAG,SAASlC,EAAO,CACnCmC,EAASnC,CAAK,EAAImC,EAASnC,CAAK,GAAK,CAAC,EACtCmC,EAASnC,CAAK,EAAE,KAAKlM,CAAO,CAChC,CAAC,EACM,KACX,EAQA,IAAK,SAASoO,EAAQpO,EAAS,CAC3B,GAAIoO,IAAWvR,EAIf,KAAIwR,EAAW,KAAK,SACpB,OAAA1Q,EAAKsC,EAASmO,CAAM,EAAG,SAASlC,EAAO,CAC9BlM,EAGDqO,EAASnC,CAAK,GAAKmC,EAASnC,CAAK,EAAE,OAAOxL,EAAQ2N,EAASnC,CAAK,EAAGlM,CAAO,EAAG,CAAC,EAF9E,OAAOqO,EAASnC,CAAK,CAI7B,CAAC,EACM,KACX,EAOA,KAAM,SAASA,EAAOoC,EAAM,CAEpB,KAAK,QAAQ,WACbC,GAAgBrC,EAAOoC,CAAI,EAI/B,IAAID,EAAW,KAAK,SAASnC,CAAK,GAAK,KAAK,SAASA,CAAK,EAAE,MAAM,EAClE,GAAI,GAACmC,GAAY,CAACA,EAAS,QAI3B,CAAAC,EAAK,KAAOpC,EACZoC,EAAK,eAAiB,UAAW,CAC7BA,EAAK,SAAS,eAAe,CACjC,EAGA,QADIxQ,EAAI,EACDA,EAAIuQ,EAAS,QAChBA,EAASvQ,CAAC,EAAEwQ,CAAI,EAChBxQ,IAER,EAMA,QAAS,UAAW,CAChB,KAAK,SAAWgQ,GAAe,KAAM,EAAK,EAE1C,KAAK,SAAW,CAAC,EACjB,KAAK,QAAU,CAAC,EAChB,KAAK,MAAM,QAAQ,EACnB,KAAK,QAAU,IACnB,CACJ,EAOA,SAASA,GAAexK,EAASkL,EAAK,CAClC,IAAI5M,EAAU0B,EAAQ,QACtB,GAAK1B,EAAQ,MAGb,KAAIL,EACJ5D,EAAK2F,EAAQ,QAAQ,SAAU,SAASgH,EAAOrM,EAAM,CACjDsD,EAAOH,EAASQ,EAAQ,MAAO3D,CAAI,EAC/BuQ,GACAlL,EAAQ,YAAY/B,CAAI,EAAIK,EAAQ,MAAML,CAAI,EAC9CK,EAAQ,MAAML,CAAI,EAAI+I,GAEtB1I,EAAQ,MAAML,CAAI,EAAI+B,EAAQ,YAAY/B,CAAI,GAAK,EAE3D,CAAC,EACIiN,IACDlL,EAAQ,YAAc,CAAC,GAE/B,CAOA,SAASiL,GAAgBrC,EAAOoC,EAAM,CAClC,IAAIG,EAAe9R,EAAS,YAAY,OAAO,EAC/C8R,EAAa,UAAUvC,EAAO,GAAM,EAAI,EACxCuC,EAAa,QAAUH,EACvBA,EAAK,OAAO,cAAcG,CAAY,CAC1C,CAEAlQ,EAAOmP,GAAQ,CACX,YAAanL,EACb,WAAYC,GACZ,UAAWC,EACX,aAAcC,EAEd,eAAgByI,GAChB,YAAaC,EACb,cAAeC,GACf,YAAaC,GACb,iBAAkBC,GAClB,gBAAiBC,GACjB,aAAcC,GAEd,eAAgB9I,GAChB,eAAgBC,GAChB,gBAAiBC,GACjB,aAAcC,GACd,eAAgBC,GAChB,qBAAsBC,GACtB,mBAAoBC,GACpB,cAAeC,GAEf,QAASyK,GACT,MAAOtK,EACP,YAAagH,GAEb,WAAYvG,GACZ,WAAYE,GACZ,kBAAmBH,GACnB,gBAAiBE,GACjB,iBAAkB+D,GAElB,WAAY4D,GACZ,eAAgBY,GAChB,IAAKe,GACL,IAAKX,GACL,MAAOU,GACP,MAAOP,GACP,OAAQM,GACR,MAAOJ,GAEP,GAAIjN,EACJ,IAAKK,EACL,KAAMxC,EACN,MAAOqB,EACP,OAAQH,EACR,OAAQN,EACR,QAASW,EACT,OAAQ1B,EACR,SAAU4D,CACd,CAAC,EAID,IAAIsN,GAAc,OAAOhS,GAAW,YAAcA,EAAU,OAAO,MAAS,YAAc,KAAO,CAAC,EAClGgS,GAAW,OAAShB,GAEhB,OAAO,QAAW,YAAc,OAAO,IACvC,OAAO,UAAW,CACd,OAAOA,EACX,CAAC,EACM,OAAOjR,IAAU,aAAeA,GAAO,QAC9CA,GAAO,QAAUiR,GAEjBhR,EAAOE,CAAU,EAAI8Q,EAGzB,GAAG,OAAQ,SAAU,QAAQ,ICllF5B,IAAAiB,GAAO,SACRC,GAAO,SACPC,GAAO,SACPC,GAAO,SCHP,IAAAC,GAAwB,SACvB,OAAe,OAAgB,WAEzB,IAAIC,GAAY,QAAQ,OAAO,YAAa,CAC/C,YACA,iBACA,aACA,YACA,aACA,gBACA,kBACA,cACA,qBACA,8BACJ,CAAC,ECZG,QAAQ,OAAO,WAAW,EACrB,SAAS,YAAa,CACvB,KAAM,CACF,CAAE,GAAI,EAAG,YAAa,oBAAqB,KAAM,mBAAoB,EACrE,CAAE,GAAI,EAAG,YAAa,yBAA0B,KAAM,eAAgB,EACtE,CAAE,GAAI,EAAG,YAAa,2BAA4B,KAAM,cAAe,EACvE,CAAE,GAAI,EAAG,YAAa,qBAAsB,KAAM,SAAU,EAC5D,CAAE,GAAI,EAAG,YAAa,yBAA0B,KAAM,iBAAkB,EACxE,CAAE,GAAI,EAAG,YAAa,yBAA0B,KAAM,gBAAiB,EACvE,CAAE,GAAI,EAAG,YAAa,kBAAmB,KAAM,SAAU,CAC7D,CACJ,CAAC,ECXD,QAAQ,OAAO,WAAW,EACrB,SAAS,SACV,CAII,YAAa,OAAO,UACpB,QAAS,OAAO,QAChB,UAAW,OAAO,SACtB,CAAC,ECRL,QAAQ,OAAO,WAAW,EACrB,SAAS,SAAU,CACpB,gBAAiB,mBACjB,mBAAoB,eACpB,cAAe,iBACf,aAAc,gBACd,aAAc,gBACd,aAAc,eAClB,CAAC,ECTD,QAAQ,OAAO,WAAW,EACrB,SAAS,YAAa,CACvB,KAAM,CACF,CAAE,KAAM,MAAO,UAAW,IAAK,OAAQ,UAAW,YAAa,MAAO,SAAU,sBAAuB,SAAU,sBAAuB,EACxI,CAAE,KAAM,MAAO,UAAW,IAAK,OAAQ,UAAW,YAAa,MAAO,SAAU,uBAAwB,SAAU,QAAS,EAC3H,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,SAAU,YAAa,MAAO,SAAU,uBAAwB,SAAU,QAAS,EACzH,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,SAAU,YAAa,MAAO,SAAU,wBAAyB,SAAU,eAAgB,EACjI,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,SAAU,YAAa,MAAO,SAAU,wBAAyB,SAAU,EAAG,EACpH,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,SAAU,YAAa,MAAO,SAAU,yBAA0B,SAAU,+BAAgC,EAClJ,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,SAAU,YAAa,MAAO,SAAU,wBAAyB,SAAU,8BAA+B,EAChJ,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,SAAU,YAAa,MAAO,SAAU,wBAAyB,SAAU,iCAAkC,EACnJ,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,SAAU,YAAa,MAAO,SAAU,uCAAwC,SAAU,EAAG,EACnI,CAAE,KAAM,MAAO,UAAW,KAAM,OAAQ,SAAU,YAAa,MAAO,SAAU,2BAA4B,SAAU,EAAG,EACzH,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,SAAU,YAAa,MAAO,SAAU,0BAA2B,SAAU,EAAG,EACtH,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,SAAU,YAAa,MAAO,SAAU,sBAAuB,SAAU,gBAAiB,EAChI,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,SAAU,YAAa,MAAO,SAAU,uBAAwB,SAAU,EAAG,EACnH,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,sBAAuB,SAAU,6BAA8B,EAC5I,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,wBAAyB,SAAU,mBAAoB,EACpI,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,wBAAyB,SAAU,wBAAyB,EACzI,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,+BAAgC,SAAU,EAAG,EAC1H,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,uBAAwB,SAAU,EAAG,EAClH,CAAE,KAAM,MAAO,UAAW,IAAK,OAAQ,SAAU,YAAa,MAAO,SAAU,mBAAoB,SAAU,EAAG,EAChH,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,iBAAkB,SAAU,EAAG,EAC5G,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,uBAAwB,SAAU,EAAG,EAClH,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,sBAAuB,SAAU,EAAG,EACjH,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,2BAA4B,SAAU,EAAG,EACtH,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,wBAAyB,SAAU,EAAG,EACnH,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,oBAAqB,SAAU,EAAG,EAC/G,CAAE,KAAM,MAAO,UAAW,EAAG,OAAQ,SAAU,YAAa,MAAO,SAAU,sBAAuB,SAAU,EAAG,EACjH,CAAE,KAAM,MAAO,UAAW,IAAK,OAAQ,SAAU,YAAa,MAAO,SAAU,yBAA0B,SAAU,EAAG,EACtH,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,UAAW,YAAa,MAAO,SAAU,yBAA0B,SAAU,qCAAsC,EACzJ,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,UAAW,YAAa,MAAO,SAAU,sBAAuB,SAAU,0BAA2B,EAC3I,CAAE,KAAM,MAAO,UAAW,GAAI,OAAQ,UAAW,YAAa,MAAO,SAAU,4BAA6B,SAAU,kCAAmC,CACzJ,CACJ,CAAC,GCnCPC,GAAW,CACT,QAAQ,OAAO,WAAW,EACrB,SAAS,SACV,CACI,SAAU,YACV,KAAM,QACN,MAAO,SACP,UAAW,aACX,SAAU,YACV,UAAW,uBACX,KAAM,QACN,WAAY,uBACZ,KAAM,QACN,KAAM,QACN,SAAU,YACV,cAAe,2BACf,SAAU,8BACV,QAAS,6BACT,cAAe,+BACf,MAAO,SACP,SAAU,YACV,cAAe,iBACf,QAAS,WACT,IAAK,OACL,IAAK,OACL,WAAY,eACZ,SAAU,OACV,aAAc,QACd,KAAM,4BACN,CAAC,EACJ,OAAO,CACJ,oBAAqB,iBAAkB,qBAAsB,SAAU,SACvE,CAACC,EAAmBC,EAAgBC,EAAoBC,EAAQC,IAAW,CAEvEJ,EAAkB,UAAU,EAAI,EAAE,WAAW,GAAG,EAE5CI,EAAO,SACPF,EAAmB,UAAU,KAAK,EAElCA,EAAmB,KAAK,oCAAqC,SAAS,EAEtED,EACK,MAAM,YACP,CACI,IAAK,gDACL,YAAa,aACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CACF,eAAgB,SAAUI,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,KAAM,CACF,eAAgB,SAAUA,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,UAAW,CAAC,IAAM,KAAK,EACvB,gBAAiB,CAAC,kBAAmBC,GAAmBA,EAAgB,KAAK,CAAC,CAClF,EACA,MAAO,iBACX,CAAC,EACA,MAAM,WACP,CACI,IAAK,+CACL,YAAa,YACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CACF,eAAgB,SAAUD,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,KAAM,CACF,eAAgB,SAAUA,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,UAAW,CAAC,IAAM,IAAI,EACtB,gBAAiB,CAAC,kBAAmBC,GAAmBA,EAAgB,IAAI,CAAC,CACjF,EACA,MAAO,iBACX,CAAC,EAEA,MAAM,+BACP,CACI,IAAK,4CACL,YAAa,SACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CACF,eAAgB,SAAUD,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,KAAM,CACF,eAAgB,SAAUA,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,UAAW,CAAC,IAAM,IAAI,EACtB,gBAAiB,CAAC,kBAAmBC,GAAmBA,EAAgB,OAAO,CAAC,CACpF,EACA,MAAO,iBACX,CAAC,EACA,MAAM,kBACP,CACI,IAAK,sDACL,YAAa,mBACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CACF,eAAgB,SAAUD,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,KAAM,CACF,eAAgB,SAAUA,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,UAAW,CAAC,IAAM,WAAW,EAC7B,gBAAiB,CAAC,kBAAmBC,GAAmBA,EAAgB,WAAW,CAAC,CACxF,EACA,MAAO,iBACX,CAAC,EACA,MAAM,sBACP,CACI,IAAK,0DACL,YAAa,uBACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CACF,eAAgB,SAAUD,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,KAAM,CACF,eAAgB,SAAUA,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,UAAW,CAAC,IAAM,eAAe,EACjC,gBAAiB,CAAC,kBAAmBC,GAAmBA,EAAgB,eAAe,CAAC,CAC5F,EACA,MAAO,iBACX,CAAC,EAEA,MAAM,4BACP,CACI,IAAK,4CACL,YAAa,SACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CACF,eAAgB,SAAUD,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,KAAM,CACF,eAAgB,SAAUA,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,UAAW,CAAC,IAAM,IAAI,EACtB,gBAAiB,CAAC,kBAAmBC,GAAmBA,EAAgB,OAAO,CAAC,CACpF,EACA,MAAO,iBACX,CAAC,EACA,MAAM,aACP,CACI,IAAK,iDACL,YAAa,cACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CACF,eAAgB,SAAUD,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,KAAM,CACF,eAAgB,SAAUA,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,UAAW,CAAC,IAAM,MAAM,EACxB,gBAAiB,CAAC,kBAAmBC,GAAmBA,EAAgB,MAAM,CAAC,CACnF,EACA,MAAO,iBACX,CAAC,EAEA,MAAM,qBACP,CACI,IAAK,4CACL,YAAa,SACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CACF,eAAgB,SAAUD,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,KAAM,CACF,eAAgB,SAAUA,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,UAAW,CAAC,IAAM,IAAI,EACtB,gBAAiB,CAAC,kBAAmBC,GAAmBA,EAAgB,OAAO,CAAC,CACpF,EACA,MAAO,iBACX,CAAC,EACA,MAAM,wBACP,CACI,IAAK,4DACL,YAAa,yBACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CACF,eAAgB,SAAUD,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,KAAM,CACF,eAAgB,SAAUA,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,UAAW,CAAC,IAAM,iBAAiB,EACnC,gBAAiB,CAAC,kBAAmBC,GAAmBA,EAAgB,iBAAiB,CAAC,CAC9F,EACA,MAAO,iBACX,CAAC,EACA,MAAM,6BACP,CACI,IAAK,iEACL,YAAa,8BACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CACF,eAAgB,SAAUD,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,KAAM,CACF,eAAgB,SAAUA,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,UAAW,CAAC,IAAM,sBAAsB,EACxC,gBAAiB,CAAC,kBAAmBC,GAAmBA,EAAgB,sBAAsB,CAAC,CACnG,EACA,MAAO,iBACX,CAAC,EACA,MAAM,cACP,CACI,IAAK,4CACL,YAAa,SACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CACF,eAAgB,SAAUD,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,KAAM,CACF,eAAgB,SAAUA,EAAc,CACpC,OAAO,QAAQ,UAAUA,EAAa,IAAI,EACpCA,EAAa,KAAK,UAAU,CAAC,EAC7B,IACV,CACJ,EACA,UAAW,CAAC,IAAM,IAAI,EACtB,gBAAiB,CAAC,kBAAmBC,GAAmBA,EAAgB,OAAO,CAAC,CACpF,EACA,MAAO,iBACX,CAAC,EACA,MAAM,eACP,CACI,IAAK,OACL,YAAa,SACb,WAAY,YACZ,aAAc,KACd,QAAS,CACL,KAAM,CAAC,IAAM,IAAI,EACjB,KAAM,CAAC,IAAM,IAAI,EACjB,UAAW,CAAC,IAAM,IAAI,EACtB,gBAAiB,CAAC,kBAAmBA,GAAmBA,EAAgB,OAAO,CAAC,CACpF,EACA,MAAO,iBACX,CAAC,EACA,MAAM,qBACP,CACI,IAAK,uCACL,YAAa,SAASD,EAAc,CAChC,MAAO,UAAUA,EAAa,OAAO,GAAKA,EAAa,OAAS,IAAMA,EAAa,OAAS,EAAE,EAClG,EAEA,WAAY,YACZ,aAAc,KACd,QAAS,CAEL,KAAM,CAAC,WAAaE,GAAaA,EAAS,mBAAmBR,EAAO,sBAAyB,aAAa,GAAK,MAAM,EACrH,KAAM,CAAC,IAAMA,EAAO,sBAAyB,SAAS,EACtD,UAAW,CAAC,IAAM,IAAI,EACtB,gBAAiB,CAAC,kBAAmB,WAAY,CAACO,EAAiBC,IAC/D,IAAI,gBAAgB,CAACA,EAAS,mBAAmBR,EAAO,sBAAyB,aAAa,GAAK,MAAM,EACrG,CAAC,MAAM,CAAC,CAAC,CACrB,EACA,MAAO,iBACX,CAAC,IAKLG,EAAmB,UAAUC,EAAO,QAAQ,EAG5CF,EACK,MAAM,IACP,CACI,IAAK,IACL,YAAaE,EAAO,KACpB,WAAY,iBACZ,MAAO,mDACX,CAAC,EACA,MAAMA,EAAO,SACd,CACI,IAAKA,EAAO,SACZ,YAAaA,EAAO,SACpB,WAAY,qBACZ,MAAO,4BACX,CAAC,EACA,MAAMA,EAAO,KACd,CACI,IAAKA,EAAO,KACZ,YAAaA,EAAO,KAAOJ,EAAO,SAAS,OAC3C,WAAY,iBACZ,MAAO,cACX,CAAC,EACA,MAAMI,EAAO,KAAO,WACrB,CACI,IAAKA,EAAO,KAAO,gBACnB,YAAcK,GAAW,CAMrB,IAAIC,EAAKV,EAAO,SAAS,QAAU,IACnC,OAAAU,GAAM,MAAQC,EAAqB,EAE5BP,EAAO,KAAO,IAAMK,EAAO,YAAcC,CACpD,EACA,WAAY,oBACZ,MAAO,cACX,CAAC,EACA,MAAMN,EAAO,KAAO,0BACrB,CACI,IAAKA,EAAO,KAAO,0BACnB,YAAcK,GACH,kBAAoBA,EAAO,aAAeT,EAAO,SAAS,OAErE,WAAY,iBACZ,MAAO,cACX,CAAC,EACA,MAAMI,EAAO,KACd,CACI,IAAKA,EAAO,KACZ,YAAaA,EAAO,KAAOJ,EAAO,SAAS,OAC3C,WAAY,iBACZ,MAAO,kBACX,CAAC,EACA,MAAMI,EAAO,KAAO,WACrB,CACI,IAAKA,EAAO,KAAO,gBACnB,YAAcK,GAAW,CACrB,IAAIC,EAAKV,EAAO,SAAS,QAAU,IACnC,OAAAU,GAAM,MAAQC,EAAqB,EAE5BP,EAAO,KAAO,IAAMK,EAAO,YAAcC,CACpD,EACA,WAAY,wBACZ,MAAO,kBACX,CAAC,EACA,MAAMN,EAAO,KAAO,0BACrB,CACI,IAAKA,EAAO,KAAO,0BACnB,YAAcK,GACH,kBAAoBA,EAAO,aAAeT,EAAO,SAAS,OAErE,WAAY,iBACZ,MAAO,kBACX,CAAC,EACA,MAAMI,EAAO,MACd,CACI,IAAKA,EAAO,MACZ,YAAaA,EAAO,MACpB,WAAY,kBACZ,MAAO,eACX,CAAC,EACA,MAAM,YACP,CACI,IAAK,aACL,YAAa,aACb,WAAY,sBACZ,MAAO,oBACP,QAAS,CACL,IAAK,IAAM,QACf,CACJ,CAAC,EACA,MAAM,mBACP,CACI,IAAK,mBACL,YAAa,aACb,WAAY,sBACZ,MAAO,oBACP,QAAS,CACL,IAAK,CAAC,eAAiBE,GACf,CAAC,SAAU,UAAW,KAAM,KAAK,EAAE,QAAQA,EAAa,GAAG,IAAM,GAAW,SACzEA,EAAa,GACvB,CACL,CACJ,CAAC,EACA,MAAMF,EAAO,SACd,CACI,IAAKA,EAAO,SACZ,YAAaA,EAAO,SACpB,WAAY,qBACZ,MAAO,kBACX,CAAC,EACA,MAAMA,EAAO,UACd,CACI,IAAKA,EAAO,UACZ,YAAaA,EAAO,UACpB,WAAY,sBACZ,MAAO,yBACX,CAAC,EACA,MAAMA,EAAO,KACd,CACI,IAAKA,EAAO,KACZ,YAAaA,EAAO,KACpB,WAAY,iBACZ,MAAO,mDACX,CAAC,EACA,MAAMA,EAAO,WACd,CACI,IAAKA,EAAO,WACZ,YAAaA,EAAO,WACpB,WAAY,uBACZ,MAAO,kBACX,CAAC,EACA,MAAMA,EAAO,SACd,CACI,IAAKA,EAAO,SACZ,YAAaA,EAAO,SACpB,WAAY,qBACZ,MAAO,kBACX,CAAC,EACA,MAAMA,EAAO,cACd,CACI,IAAKA,EAAO,cACZ,YAAaA,EAAO,cACpB,WAAY,0BACZ,MAAO,wBACX,CAAC,EACA,MAAMA,EAAO,SACd,CACI,IAAKA,EAAO,SACZ,YAAaA,EAAO,SACpB,WAAY,qBACZ,MAAO,4BACX,CAAC,EACA,MAAMA,EAAO,QACd,CACI,IAAKA,EAAO,QACZ,YAAaA,EAAO,QACpB,WAAY,oBACZ,MAAO,2BACX,CAAC,EACA,MAAMA,EAAO,cACd,CACI,IAAKA,EAAO,cACZ,YAAaA,EAAO,cACpB,WAAY,0BACZ,MAAO,4BACX,CAAC,EACA,MAAMA,EAAO,MACd,CACI,IAAKA,EAAO,MACZ,YAAaA,EAAO,MACpB,MAAO,8BACX,CAAC,EACA,MAAMA,EAAO,SACd,CACI,IAAKA,EAAO,SACZ,YAAaA,EAAO,SACpB,MAAO,8BACX,CAAC,EACA,MAAMA,EAAO,cACd,CACI,IAAKA,EAAO,cACZ,YAAaA,EAAO,cACpB,MAAO,mCACX,CAAC,EACA,MAAMA,EAAO,QACd,CACI,IAAKA,EAAO,QACZ,YAAaA,EAAO,QACpB,MAAO,0BACX,CAAC,EACA,MAAMA,EAAO,IACV,CACI,IAAKA,EAAO,IACZ,YAAaA,EAAO,IACpB,MAAO,mCACX,CAAC,EACJ,MAAMA,EAAO,IACd,CACI,IAAKA,EAAO,IACZ,YAAaA,EAAO,IACpB,MAAO,yCACX,CAAC,EACA,MAAMA,EAAO,IAAM,WACpB,CACI,IAAKA,EAAO,IAAM,YAClB,YAAcK,GACH,QAAUA,EAAO,QAAUT,EAAO,SAAS,OAEtD,MAAO,oDACX,CAAC,EACA,MAAMI,EAAO,WACd,CACI,IAAKA,EAAO,WACZ,YAAaA,EAAO,WACpB,MAAO,iDACX,CAAC,EACA,MAAMA,EAAO,WAAa,WAC3B,CACI,IAAKA,EAAO,WAAa,YACzB,YAAcK,GACH,gBAAkBA,EAAO,QAAUT,EAAO,SAAS,OAE9D,MAAO,oDACX,CAAC,EACA,MAAMI,EAAO,KACd,CACI,IAAKA,EAAO,KACZ,YAAaA,EAAO,KACpB,WAAY,iBACZ,MAAO,gBACX,CAAC,EACA,MAAMA,EAAO,SACd,CACI,IAAKA,EAAO,SACZ,YAAaA,EAAO,SACpB,MAAO,+BACX,CAAC,EACA,MAAMA,EAAO,aACd,CACI,IAAKA,EAAO,aACZ,YAAaA,EAAO,aACpB,MAAO,yBACX,CAAC,EACA,MAAMA,EAAO,KACd,CACI,IAAKA,EAAO,KACZ,YAAaA,EAAO,KACpB,WAAY,yBACZ,MAAO,4DACX,CAAC,GAIT,SAASO,GAAuB,CAC5B,IAAIC,EAAM,QACNC,EAAM,IACV,OAAO,KAAK,OAAO,GAAKD,EAAMC,GAAOA,CACzC,CACJ,CACJ,CAAC,CACT,GAAG,MAAM,ECxnBL,QAAQ,OAAO,WAAW,EACrB,QAAQ,cAAe,CAAC,UAAW,SAAUC,EAAS,CAEvD,IAAIC,EAAe,CACf,iBAAkBD,EAAQ,kBAAoB,GAC9C,mBAAoBA,EAAQ,oBAAsB,GAClD,oBAAqBA,EAAQ,qBAAuB,GACpD,WAAY,IAAeA,EAAQ,SAAS,IAChD,EAEA,OAAOC,CACX,CAAC,CAAC,EAEF,QAAQ,OAAO,WAAW,EACrB,WAAW,WAAY,CAAC,cACzB,SAAUC,EAAa,CACnB,IAAIC,EAAK,KAET,OAAAA,EAAG,iBAAmB,IAAeD,EAAY,iBACjDC,EAAG,mBAAqB,IAAeD,EAAY,mBACnDC,EAAG,oBAAsB,IAAeD,EAAY,oBACpDC,EAAG,WAAa,IAAcD,EAAY,WAAW,EAErDC,EAAG,MAAQ,KAAK,UAAUA,EAAI,KAAM,CAAC,EAC9BA,CACX,CAAC,CAAC,EC5BV,QAAQ,OAAO,WAAW,EAAE,UAAU,eAAgB,UAAY,CAE9D,MAAO,CACH,SAAU,IACV,QAAS,GACT,YAAa,mBACb,MAAO,CACH,KAAM,IACN,MAAO,IACP,SAAU,IACV,IAAK,IACL,KAAM,IACN,MAAO,IACP,MAAO,IACP,MAAO,IACP,QAAS,IACT,SAAU,GACd,EACA,KAAM,SAASC,EAAOC,EAASC,EAAO,CAClC,IAAIC,EAAc,QAAQ,QAAQ,eAAe,EAC7CC,EAAW,QAAQ,QAAQ,kBAAkB,EAC7CC,EAAOD,EAAS,KAAK,YAAY,EACjCE,EAAML,EAAQ,KAAK,kBAAkB,EAEzC,SAASM,EAAaC,EAAO,CAIzB,GAHAP,EAAQ,YAAY,SAAU,CAAC,CAACO,CAAK,EACrCL,EAAY,YAAY,eAAgB,CAACK,CAAK,EAC9CL,EAAY,YAAY,iBAAkB,CAAC,CAACK,CAAK,EAC3CA,EAAO,CACT,IAAIC,EAAmDH,EAAI,OAAO,EAAE,KAEhEI,EAAiBP,EAAY,MAAM,EAAI,EACvCQ,EAAkBL,EAAI,WAAW,EAAI,EACrCM,EAAmDF,EAAiBC,EAEpEE,EAAqBJ,EAAmDG,EACxEE,EAAgBT,EAAK,OAAO,EAAE,KAC9BU,EAAY,GAAKD,EAAgBD,EACrCT,EAAS,QAAQ,CAAE,WAAYW,CAAU,EAAG,GAAG,CACnD,CACJ,CAEAT,EAAI,GAAG,QAAS,UAAW,CACvB,OAAAC,EAAa,EAAI,EACV,EACX,CAAC,EAED,IAAIS,EAAQf,EAAQ,KAAK,YAAY,EACrCe,EAAM,GAAG,QAAS,UAAW,CACzB,OAAAT,EAAa,EAAK,EACX,EACX,CAAC,EAGDJ,EAAY,GAAG,QAAS,UAAW,CAC/B,OAAAI,EAAa,EAAK,EACX,EACX,CAAC,EAGDJ,EAAY,GAAG,QAAS,IAAK,SAASc,EAAG,CACrCA,EAAE,gBAAgB,CACtB,CAAC,EAGDjB,EAAM,IAAI,WAAY,UAAW,CAC7BM,EAAI,IAAI,OAAO,EACfU,EAAM,IAAI,OAAO,EACjBb,EAAY,IAAI,OAAO,CAC3B,CAAC,CACL,CACJ,CACJ,CAAC,ECvEG,QAAQ,OAAO,WAAW,EACrB,WAAW,kBAAmB,CAAC,QAAS,eAAgB,UAAW,aAAc,cAClF,SAAUe,EAAOC,EAAcC,EAASC,EAAYC,EAAa,CAC7D,IAAIC,EAAK,KAET,OAAAA,EAAG,WAAaD,EAAY,WAAW,EACvCC,EAAG,iBAAmB,GACtBA,EAAG,mBAAqB,GACxBA,EAAG,oBAAsB,KACzBA,EAAG,aAAe,GAClBA,EAAG,iBAAmB,GAEtBA,EAAG,cAAgB,IAAM,CAErB,IAAIC,EAAU,IAAI,MAClBA,EAAQ,KAAK,UAAY,mBAAmBJ,EAAQ,qBAAqB,cAAc,CAAC,EACxFI,EAAQ,KAAK,WAAa,mBAAmB,OAAO,CAAC,EACrDA,EAAQ,KAAK,QAAU,mBAAmBJ,EAAQ,SAAS,KAAK,QAAQA,EAAQ,SAAS,KAAM,aAAa,CAAC,CAAC,EAE9G,OAAO,KAAKA,EAAQ,qBAAqB,gBAAkB,SAAWI,EAAQ,KAAK,GAAG,EAAG,iBAAkB,+BAAiCJ,EAAQ,YAAc,EAAI,KAAO,UAAYA,EAAQ,WAAa,EAAI,iEAC9I,CACxE,EAEAG,EAAG,aAAe,IAAK,CAEnB,IAAIE,EAAML,EAAQ,SAAS,KAEvBM,EAAQH,EAAG,iBAGXC,EAAU,IAAI,MAClBA,EAAQ,KAAK,OAAS,mBAAmBC,CAAG,CAAC,EAC7CD,EAAQ,KAAK,QAAU,mBAAmBE,CAAK,CAAC,EAChDF,EAAQ,KAAK,OAAS,mBAAmB,WAAW,CAAC,EAGrD,OAAO,KAAK,oCAAsCA,EAAQ,KAAK,GAAG,EAC9D,gBACA,+BAAiCJ,EAAQ,YAAc,EAAI,KAAO,UAAYA,EAAQ,WAAa,EAAI,iEACvC,CACxE,EAEAG,EAAG,cAAgB,IAAM,CAErB,IAAIE,EAAML,EAAQ,SAAS,KAEvBM,EAAQH,EAAG,iBAGXC,EAAU,IAAI,MAClBA,EAAQ,KAAK,UAAa,EAC1BA,EAAQ,KAAK,OAAS,mBAAmBC,CAAG,CAAC,EAC7CD,EAAQ,KAAK,SAAW,mBAAmBE,CAAK,CAAC,EACjDF,EAAQ,KAAK,WAAa,mBAAmBD,EAAG,kBAAkB,CAAC,EAGnE,OAAO,KAAK,yCAA2CC,EAAQ,KAAK,GAAG,EACnE,iBACA,+BAAiCJ,EAAQ,YAAc,EAAI,KAAO,UAAYA,EAAQ,WAAa,EAAI,iEACvC,CACxE,EAEAG,EAAG,WAAa,IAAK,CAEjB,IAAIE,EAAML,EAAQ,SAAS,KAGvBI,EAAU,IAAI,MAClBA,EAAQ,KAAK,OAAS,mBAAmBC,CAAG,CAAC,EAG7C,OAAO,KAAK,iCAAmCD,EAAQ,KAAK,GAAG,EAC3D,mBACA,+BAAiCJ,EAAQ,YAAc,EAAI,KAAO,UAAYA,EAAQ,WAAa,EAAI,iEACvC,CACxE,EAEAF,EACK,IAAI,wBAA0BC,EAAa,WAAW,EACtD,KAAMQ,GAAY,CACnBA,EAAWA,EAAS,KAAK,KAErB,GAACA,GAAYA,EAAS,aAK1BJ,EAAG,iBAAmBI,EAAS,MAC/BJ,EAAG,mBAAqBI,EAAS,gBACjCJ,EAAG,oBAAsBI,EAAS,iBAAmBA,EAAS,iBAAkB,KAEpF,CAAC,EAEDJ,EAAG,UAAY,SAAUK,EAAO,CAC5BP,EAAW,YAAYO,CAAK,EAC5BV,EAAM,KAAK,2CAA4C,CAAE,MAAOU,CAAM,CAAC,EAClE,KAAKD,GAAY,CACdJ,EAAG,aAAe,GAClBA,EAAG,iBAAmB,EAC1B,EAAGM,GAAS,CACRN,EAAG,aAAe,GAClBA,EAAG,iBAAmB,EAC1B,CAAC,CACT,EAEOA,CACX,CAAC,CAAC,ECxGN,QAAQ,OAAO,WAAW,EACrB,WAAW,WAAY,CAAC,QAAS,OAAQ,UAAW,YAAa,aAAc,eAC5E,SAAUO,EAAOC,EAAMC,EAASC,EAAWC,EAAYC,EAAc,CACrE,IAAIC,EAAK,KACLC,EAAUF,EAAa,aACvBG,EAAe,CAAC,CAAEL,EAAU,OAAO,EAAE,MACrCM,EAAKD,EAAe,cAAgB,GAExC,OAAAF,EAAG,kBAAoB,EACvBA,EAAG,YAAc,GACjBA,EAAG,UAAY,CAAC,EAChBA,EAAG,MAAQL,EAAK,YAChBK,EAAG,UAAY,GACfA,EAAG,aAAe,GAClBA,EAAG,iBAAmB,GAEtBA,EAAG,SAAWI,GAAW,CACrB,IAAIC,EAAQ,CAAC,EACb,OAAID,EAAQ,mBACRC,EAAM,kBAAkB,EAAI,OAASD,EAAQ,iBAAmB,KAC7DC,CACX,EAEAL,EAAG,YAAc,IAAM,CAEnBA,EAAG,UAAY,GAEXA,EAAG,aACHN,EACK,IAAI,sBAAwBO,EAAU,OAASA,EAAU,IAAM,KAAOD,EAAG,kBAAoB,GAAK,OAAO,SAAS,MAAM,EACxH,KAAMM,GAAa,CAIpB,GAFAA,EAAWA,EAAS,KAAK,KAErB,EAACA,EASL,IAHAN,EAAG,oBAGC,CAACM,EAAS,OAASA,EAAS,MAAM,OAAS,EAAG,CAE9CN,EAAG,YAAc,GACjB,MACJ,CAEIA,EAAG,kBAAoBJ,EAAQ,0BAA4BU,EAAS,aACpEN,EAAG,YAAc,IAErB,QAAQ,QAAQM,EAAS,MAAOC,GAAS,CACrCP,EAAG,UAAU,KAAKO,CAAI,CAC1B,CAAC,EACL,CAAC,EACI,QAAQ,IAAM,CACfP,EAAG,UAAY,EACnB,CAAC,CAET,EAEAA,EAAG,UAAY,SAAUQ,EAAO,CAC5BV,EAAW,YAAYU,CAAK,EAC5Bd,EAAM,KAAK,2CAA4C,CAAE,MAAOc,CAAM,CAAC,EAClE,KAAKF,GAAY,CACdN,EAAG,aAAe,GAClBA,EAAG,iBAAmB,EAC1B,EAAGS,GAAS,CACRT,EAAG,aAAe,GAClBA,EAAG,iBAAmB,EAC1B,CAAC,CACT,EAEOA,CACX,CAAC,CAAC,EC5EN,QAAQ,OAAO,WAAW,EACrB,WAAW,cAAe,CAAC,SAAU,UAAW,aAAc,aAC/D,SAAUU,EAAQC,EAASC,EAAYC,EAAY,CAC/C,aAEA,IAAIC,EAAK,KAGLC,EAAe,CACf,WAAY,CACR,UAAW,4BACX,gBAAiB,CACb,SAAU,WACV,MAAO,kBACX,CACJ,EACA,cAAe,CACX,UAAW,oCACX,gBAAiB,CACb,SAAU,WACV,MAAO,kBACX,CACJ,EACA,WAAY,CACR,UAAW,gCACX,gBAAiB,CACb,SAAU,WACV,MAAO,kBACX,CACJ,EACA,aAAc,CACV,UAAW,4CACX,QAAS,2BACb,CACJ,EAEAD,EAAG,UAAY,GACfA,EAAG,SAAW,GACdA,EAAG,MAAQ,GACXA,EAAG,MAAQ,GAEXA,EAAG,cAAgB,EAEnBA,EAAG,gBAAkBE,GAAW,CAC5B,KAAK,cAAgBA,CACzB,EAEAF,EAAG,aAAe,GAElBA,EAAG,kBAAoB,GAEvBA,EAAG,iBAAmB,GAEtBA,EAAG,aAAe,IACPA,EAAG,iBAAmBC,EAAa,aAAa,UAAYA,EAAa,aAAa,QAGjGD,EAAG,OAAS,IAAM,CACd,KAAK,aAAe,GACpB,KAAK,kBAAoB,GAEzBD,EAAW,WAAWE,EAAa,WAAW,UAAWA,EAAa,WAAW,eAAe,EAEhG,IAAIE,EAAO,CACP,MAAO,KAAK,UACZ,KAAM,KAAK,SACX,MAAO,KAAK,MACZ,YAAa,KAAK,KACtB,EAGIC,GAAkBC,GAAQ,CAC1B,IAAIC,EAAU,CAAC,EACf,QAASC,KAAKF,EACNA,EAAI,eAAeE,CAAC,GAAKA,IAAM,eAC/BD,EAAQC,CAAC,EAAIJ,EAAKI,CAAC,EACZF,EAAI,eAAeE,CAAC,GAAKA,IAAM,gBACtC,QAAQ,QAAQF,EAAIE,CAAC,EAAGC,GAAQ,CAC5BF,EAAQE,EAAK,GAAG,EAAIA,EAAK,KAC7B,CAAC,EAGT,OAAOF,CACX,GAAGH,CAAI,EAEPJ,EAAW,YAAYI,EAAK,OAASA,EAAK,MAAQ,IAAMA,EAAK,IAAI,EACjEJ,EAAW,kBAAkBK,CAAa,EAE1CN,EAAW,eAAeK,CAAI,EACzB,KAAK,SAAUM,EAAU,CAClBA,EAAS,KAAK,SACdT,EAAG,gBAAgB,CAAC,EACpBA,EAAG,iBAAmB,GACtBD,EAAW,WAAWE,EAAa,cAAc,UAAWA,EAAa,cAAc,eAAe,IAEtGD,EAAG,aAAeS,EAAS,KAAK,QAChCV,EAAW,WAAWE,EAAa,WAAW,UAAWA,EAAa,WAAW,eAAe,GAGpGD,EAAG,kBAAoB,EAC3B,CAAC,CACT,CAER,CAAC,CAAC,ECvGF,QAAQ,OAAO,WAAW,EACrB,WAAW,iBAAkB,CAAC,UAC/B,SAAUU,EAAS,CACf,aAEA,IAAIC,EAAK,KAELC,EAAe,CACf,aAAc,CACV,UAAW,8CACX,QAAS,6BACb,CACJ,EAEAD,EAAG,QAAU,IACFD,EAAQ,QAGnBC,EAAG,UAAY,IACJD,EAAQ,UAKnBC,EAAG,cAAgBD,EAAQ,SAAWA,EAAQ,UAAY,EAAI,EAE9DC,EAAG,iBAAmB,GAItBA,EAAG,gBAAmBE,GAAY,CAE9BF,EAAG,sBAAsB,cAAcE,CAAO,EAC9CF,EAAG,cAAgBE,CACvB,EAEAF,EAAG,kBAAqBG,GAAQ,CAC5BH,EAAG,sBAAsB,cAAcG,CAAG,EAC1CH,EAAG,iBAAmBG,CAC1B,EAEAH,EAAG,aAAe,IACPA,EAAG,iBAAmBC,EAAa,aAAa,UAAYA,EAAa,aAAa,QAOjGD,EAAG,OAAS,IAAM,CACdA,EAAG,gBAAgB,CAAC,CACxB,EAIAA,EAAG,sBAAwB,CACvB,gBAAiBA,EAAG,gBACpB,cAAeA,EAAG,cAClB,iBAAkBA,EAAG,iBACrB,kBAAmBA,EAAG,iBAC1B,CACJ,CAAC,CAAC,EC/DV,QAAQ,OAAO,WAAW,EACrB,UAAU,eAAgB,CAAC,WAAY,WAAY,YAAa,YAAa,aAAc,aAAc,UAAW,YACjH,CAACI,EAAUC,EAAUC,EAAWC,EAAWC,EAAYC,EAAYC,EAASC,IAAc,CAE1F,IAAIC,EAAc,mBAGdC,EAAe,CAEf,oBAAqB,CACjB,UAAW,qCACX,gBAAiB,CACb,SAAU,qCACV,MAAO,oCACX,CACJ,EACA,eAAgB,CACZ,UAAW,8BACX,gBAAiB,CACb,SAAU,gBACV,MAAO,sBACX,CACJ,EAEA,iBAAkB,CACd,UAAW,kCACX,gBAAiB,CACb,SAAU,kCACV,MAAO,iCACX,CACJ,EACA,cAAe,CACX,UAAW,sCACX,gBAAiB,CACb,SAAU,gBACV,MAAO,sBACX,CACJ,EACA,WAAY,CACR,UAAW,kCACX,gBAAiB,CACb,SAAU,gBACV,MAAO,sBACX,CACJ,CACJ,EAEA,MAAO,CACH,SAAU,KACV,QAAS,GACT,YAAa,mBACb,MAAO,CACH,SAAU,IACV,sBAAuB,GAC3B,EACA,KAAKC,EAAOC,EAAMC,EAAO,CAIrBF,EAAM,cAAgBA,EAAM,SAAS,eAAiB,EAItDA,EAAM,gBAAkBA,EAAM,SAAS,gBAGvCA,EAAM,SAAS,cAAgBG,GAAW,CACtCH,EAAM,aAAe,GAEjB,OAAOG,GAAY,WACnBH,EAAM,cAAgBG,EAC9B,EAEAH,EAAM,iBAAmBA,EAAM,SAAS,iBACxCA,EAAM,kBAAoBA,EAAM,SAAS,kBAEzCA,EAAM,UAAY,GAClBA,EAAM,SAAW,GACjBA,EAAM,MAAQ,GACdA,EAAM,MAAQ,GACdA,EAAM,SAAW,KACjBA,EAAM,SAAW,KACjBA,EAAM,MAAQ,GAUdA,EAAM,SAAW,EACjBA,EAAM,UAAY,GAClBA,EAAM,IAAM,GAEZA,EAAM,cAAgB,GACtBA,EAAM,qBAAuB,GAC7BA,EAAM,YAAc,GACpBA,EAAM,UAAY,GAElBA,EAAM,UAAYR,EAAU,KAE5BQ,EAAM,UAAYP,EAAU,KAE5BO,EAAM,UAAY,CACd,CACI,MAAO,EACP,YAAa,oBACb,gBAAiB,+BACrB,EACA,CACI,MAAO,EACP,YAAa,qBACb,gBAAiB,gCACrB,EACA,CACI,MAAO,EACP,YAAa,gBACb,gBAAiB,2BACrB,EACA,CACI,MAAO,EACP,YAAa,qBACb,gBAAiB,gCACrB,EACA,CACI,MAAO,GACP,YAAa,iBACb,gBAAiB,4BACrB,CACJ,EAEAA,EAAM,UAAY,GAElBA,EAAM,cAAgB,IAAM,CACxBA,EAAM,UAAY,EACtB,EAEAA,EAAM,aAAe,GAErBA,EAAM,kBAAoB,GAE1BA,EAAM,OAAS,IAAM,CACjBA,EAAM,aAAe,GACrBA,EAAM,kBAAoB,GAG1B,IAAII,EAAO,CAEP,YAAaJ,EAAM,cACnB,QAASA,EAAM,UACf,MAAOA,EAAM,MACb,MAAOA,EAAM,UACb,KAAMA,EAAM,SACZ,MAAOA,EAAM,MACb,KAAMA,EAAM,SAAS,MACrB,IAAKA,EAAM,IACX,YAAaA,EAAM,MACnB,aAAc,CAAC,CACnB,GAWIA,EAAM,gBAAkB,GAAKA,EAAM,gBAAkB,IACrDL,EAAW,WAAWI,EAAa,eAAe,UAAWA,EAAa,eAAe,eAAe,EAGxGC,EAAM,eACNI,EAAK,aAAa,KAAK,CAAE,IAAK,iBAAkB,MAAOJ,EAAM,aAAc,CAAC,EAC5EA,EAAM,sBACNI,EAAK,aAAa,KAAK,CAAE,IAAK,2BAA4B,MAAOJ,EAAM,oBAAqB,CAAC,EAC7FA,EAAM,aACNI,EAAK,aAAa,KAAK,CAAE,IAAK,iBAAkB,MAAOJ,EAAM,WAAY,CAAC,EAC1EA,EAAM,WACNI,EAAK,aAAa,KAAK,CAAE,IAAK,aAAc,MAAOJ,EAAM,SAAU,CAAC,EACpEA,EAAM,UACNI,EAAK,aAAa,KAAK,CAAE,IAAK,oBAAqB,MAAOJ,EAAM,SAAS,WAAY,CAAC,EACtFA,EAAM,UACNI,EAAK,aAAa,KAAK,CAAE,IAAK,6BAA8B,MAAOJ,EAAM,SAAS,IAAK,CAAC,EAE5FI,EAAK,aAAa,KAAK,CAAE,IAAK,aAAc,MAAOP,EAAU,OAAO,CAAE,CAAC,EAGvE,IAAIQ,GAAkBC,GAAQ,CAC1B,IAAIC,EAAU,CAAC,EACf,QAASC,KAAKF,EACNA,EAAI,eAAeE,CAAC,GAAKA,IAAM,eAC/BD,EAAQC,CAAC,EAAIJ,EAAKI,CAAC,EACZF,EAAI,eAAeE,CAAC,GAAKA,IAAM,gBACtC,QAAQ,QAAQF,EAAIE,CAAC,EAAGC,GAAQ,CAC5BF,EAAQE,EAAK,GAAG,EAAIA,EAAK,KAC7B,CAAC,EAGT,OAAOF,CACX,GAAGH,CAAI,EAEPT,EAAW,YAAYS,EAAK,OAASA,EAAK,MAAQ,IAAMA,EAAK,IAAI,EACjET,EAAW,kBAAkBU,CAAa,EAE1CX,EAAW,gBAAgBU,CAAI,EAC1B,KAAKM,GAAY,CAEVA,EAAS,KAAK,SACdV,EAAM,gBAAgB,EAAE,EACxBA,EAAM,kBAAkB,EAAI,EAC5BL,EAAW,WAAWI,EAAa,cAAc,UAAWA,EAAa,cAAc,eAAe,IAEtGJ,EAAW,WAAWI,EAAa,WAAW,UAAWA,EAAa,WAAW,eAAe,EAChGC,EAAM,aAAeU,EAAS,KAAK,SAGvCV,EAAM,kBAAoB,EAC9B,EACAU,GAAY,CACRV,EAAM,aAAiBU,EAAS,MAAUA,EAAS,KAAK,eAAiBA,EAAS,KAAK,QAAU,8BACjGV,EAAM,kBAAoB,EAC9B,CAAC,CACT,EAGAC,EAAK,CAAC,EAAE,iBAAiB,8BAA8B,EAAE,QAAQU,GAAU,CAtO3F,IAAAC,GAuOoBA,EAAA,WAAW,YAAX,MAAAA,EAAsB,OAAOD,EAAQ,CACjC,QAASA,EAAO,aAAa,cAAc,EAC3C,SAAWE,GAAU,CACjB,WAAW,IAAM,CACbF,EAAO,UAAU,IAAI,QAAQ,CACjC,EAAG,GAAI,CACX,CACJ,EACJ,CAAC,CACL,CACJ,CAGJ,CAAC,CAAC,ECjPF,QAAQ,OAAO,WAAW,EACrB,WAAW,oBAAqB,CAAC,SAAU,aAAc,aACtD,SAAUG,EAAQC,EAAYC,EAAY,CACtC,aAEA,IAAIC,EAAK,KAELC,EAAe,CACf,WAAY,CACR,UAAW,iCACX,gBAAiB,CACb,SAAU,mBACV,MAAO,uBACX,CACJ,EACA,cAAe,CACX,UAAW,yCACX,gBAAiB,CACb,SAAU,mBACV,MAAO,uBACX,CACJ,EACA,WAAY,CACR,UAAW,qCACX,gBAAiB,CACb,SAAU,mBACV,MAAO,uBACX,CACJ,EACA,aAAc,CACV,UAAW,iDACX,QAAS,gCACb,CACJ,EAEAD,EAAG,UAAY,GACfA,EAAG,SAAW,GACdA,EAAG,MAAQ,GACXA,EAAG,MAAQ,GACXA,EAAG,MAAQ,GACXA,EAAG,UAAY,GACfA,EAAG,IAAM,GACTA,EAAG,SAAW,GACdA,EAAG,MAAQ,GAEXA,EAAG,WAAa,KAEhBA,EAAG,wBAA0B,GAC7BA,EAAG,mBAAqB,GACxBA,EAAG,wBAA0B,GAC7BA,EAAG,sBAAwB,GAG3BA,EAAG,cAAgB,EAEnBA,EAAG,gBAAkBE,GAAW,CAC5B,KAAK,cAAgBA,CACzB,EAEAF,EAAG,aAAe,GAElBA,EAAG,kBAAoB,GAEvBA,EAAG,iBAAmB,GAEtBA,EAAG,aAAe,IACPA,EAAG,iBAAmBC,EAAa,aAAa,UAAYA,EAAa,aAAa,QAGjGD,EAAG,OAAS,IAAM,CACd,KAAK,aAAe,GACpB,KAAK,kBAAoB,GAEzBD,EAAW,WAAWE,EAAa,WAAW,UAAWA,EAAa,WAAW,eAAe,EAEhG,IAAIE,EAAO,CACP,MAAO,KAAK,UACZ,KAAM,KAAK,SACX,MAAO,KAAK,MACZ,MAAO,KAAK,MACZ,MAAO,KAAK,MACZ,QAAS,KAAK,QACd,IAAK,KAAK,IACV,YAAa,KAAK,MAClB,aAAc,CAAC,CACnB,EAEI,KAAK,UACLA,EAAK,aAAa,KAAK,CAAE,IAAK,mBAAoB,MAAO,KAAK,QAAS,CAAC,EAExE,KAAK,YAAc,MACnBA,EAAK,aAAa,KAAK,CAAE,IAAK,cAAe,MAAO,KAAK,UAAW,CAAC,EAErE,KAAK,yBACLA,EAAK,aAAa,KAAK,CAAE,IAAK,mCAAoC,MAAO,KAAK,uBAAwB,CAAC,EAEvG,KAAK,oBACLA,EAAK,aAAa,KAAK,CAAE,IAAK,6BAA8B,MAAO,KAAK,kBAAmB,CAAC,EAE5F,KAAK,yBACLA,EAAK,aAAa,KAAK,CAAE,IAAK,mCAAoC,MAAO,KAAK,uBAAwB,CAAC,EAEvG,KAAK,uBACLA,EAAK,aAAa,KAAK,CAAE,IAAK,gCAAiC,MAAO,KAAK,qBAAsB,CAAC,EAGtG,IAAIC,GAAkBC,GAAQ,CAC1B,IAAIC,EAAU,CAAC,EACf,QAASC,KAAKF,EACNA,EAAI,eAAeE,CAAC,GAAKA,IAAM,eAC/BD,EAAQC,CAAC,EAAIJ,EAAKI,CAAC,EACZF,EAAI,eAAeE,CAAC,GAAKA,IAAM,gBACtC,QAAQ,QAAQF,EAAIE,CAAC,EAAGC,GAAQ,CAC5BF,EAAQE,EAAK,GAAG,EAAIA,EAAK,KAC7B,CAAC,EAGT,OAAOF,CACX,GAAGH,CAAI,EAEPJ,EAAW,YAAYI,EAAK,OAASA,EAAK,MAAQ,IAAMA,EAAK,IAAI,EACjEJ,EAAW,kBAAkBK,CAAa,EAE1CN,EAAW,mBAAmBK,CAAI,EAC7B,KAAKM,GAAY,CACVA,EAAS,KAAK,SACdV,EAAW,WAAWE,EAAa,cAAc,UAAWA,EAAa,cAAc,eAAe,EACtGD,EAAG,iBAAmB,GACtBA,EAAG,gBAAgB,CAAC,IAEpBD,EAAW,WAAWE,EAAa,WAAW,UAAWA,EAAa,WAAW,eAAe,EAChGD,EAAG,aAAeS,EAAS,KAAK,SAEpCT,EAAG,kBAAoB,EAE3B,CAAC,CACT,CAEJ,CAAC,CAAC,EC5Id,QAAQ,OAAO,WAAW,EACrB,WAAW,0BACR,CACI,SAAU,aAAc,aAAc,iBAAkB,YACxD,SAAUU,EAAQC,EAAYC,EAAYC,EAAgBC,EAAW,CACjE,aAEA,IAAKC,OACDA,IAAA,SAAW,GAAX,WACAA,IAAA,gBAAkB,GAAlB,kBACAA,IAAA,SAAW,GAAX,aAHCA,MAAA,KAML,IAAIC,EAAK,KAETA,EAAG,cAAgB,EACnBA,EAAG,SAAW,CAAC,EACfA,EAAG,mBAAqB,CAAC,EAEzB,IAAIC,EAAe,CACf,WAAY,CACR,UAAW,iCACX,gBAAiB,CACb,SAAU,mBACV,MAAO,uBACX,CACJ,EACA,cAAe,CACX,UAAW,yCACX,gBAAiB,CACb,SAAU,mBACV,MAAO,uBACX,CACJ,EACA,WAAY,CACR,UAAW,qCACX,gBAAiB,CACb,SAAU,mBACV,MAAO,uBACX,CACJ,EACA,aAAc,CACV,UAAW,iDACX,QAAS,gCACb,CACJ,EACAD,EAAG,kBAAoB,GAEvBA,EAAG,iBAAmB,GAGtBA,EAAG,mBAAqB,IAAM,CAC1BA,EAAG,cAAgB,CACvB,EAEAA,EAAG,iBAAmB,IAAM,CACxBA,EAAG,mBAAqB,CAAC,EACzBA,EAAG,cAAgB,CACvB,EAEAA,EAAG,0BAA4B,IAAM,CACjC,KAAK,aAAe,GACpB,KAAK,kBAAoB,GAEzBJ,EAAW,WAAWK,EAAa,WAAW,UAAWA,EAAa,WAAW,eAAe,EAEhG,IAAIC,EAAW,CACX,MAAOF,EAAG,mBAAmB,UAC7B,KAAMA,EAAG,mBAAmB,SAC5B,MAAOA,EAAG,mBAAmB,MAC7B,QAASA,EAAG,mBAAmB,UAC/B,YAAaA,EAAG,mBAAmB,MACnC,aAAc,CACV,CAAE,IAAK,gBAAiB,MAAOA,EAAG,SAAS,SAAU,EACrD,CAAE,IAAK,eAAgB,MAAOA,EAAG,SAAS,QAAS,EACnD,CAAE,IAAK,gBAAiB,MAAOA,EAAG,SAAS,KAAM,EACjD,CAAE,IAAK,kBAAmB,MAAOH,EAAe,QAAQ,CAAE,EAC1D,CAAE,IAAK,aAAc,MAAOC,EAAU,OAAO,CAAE,CACnD,CACJ,EAEA,IAAIK,GAAkBC,GAAQ,CAC1B,IAAIC,EAAU,CAAC,EACf,QAASC,KAAKF,EACNA,EAAI,eAAeE,CAAC,GAAKA,IAAM,eAC/BD,EAAQC,CAAC,EAAIF,EAAIE,CAAC,EACXF,EAAI,eAAeE,CAAC,GAAKA,IAAM,gBACtC,QAAQ,QAAQF,EAAIE,CAAC,EACjBC,GAAQ,CACJF,EAAQE,EAAK,GAAG,EAAIA,EAAK,KAC7B,CAAC,EAGb,OAAOF,CACX,GAAGH,CAAQ,EAEXN,EAAW,YAAYM,EAAS,OAASA,EAAS,MAAQ,IAAMA,EAAS,IAAI,EAC7EN,EAAW,kBAAkBO,CAAa,EAE1CR,EAAW,0BAA0BO,CAAQ,EACxC,KAAKM,GAAY,CACVA,EAAS,KAAK,SACdZ,EAAW,WAAWK,EAAa,cAAc,UAC7CA,EAAa,cAAc,eAAe,EAC9CD,EAAG,iBAAmB,GACtBA,EAAG,cAAgB,IAEnBJ,EAAW,WAAWK,EAAa,WAAW,UAC1CA,EAAa,WAAW,eAAe,EAC3CD,EAAG,aAAeQ,EAAS,KAAK,SAEpCR,EAAG,kBAAoB,EAE3B,CAAC,CAET,CAEJ,CACJ,CAAC,ECtHT,QAAQ,OAAO,WAAW,EAAE,UAAU,qBAAsB,CAAC,YAAa,SAAUS,EAAW,CAC3F,aAEA,SAASC,EAAKC,EAAOC,EAASC,EAAO,CAEjC,IAAIC,EAAU,IAAIC,EAAM,CACpB,KAAM,UACN,MAAO,oBACP,WAAY,UACZ,MAAO,wDACP,KAAM,4EACN,IAAK,6BACL,OAAQ,GACR,MAAO,CACX,CAAC,EAEGC,EAAW,IAAID,EAAM,CACrB,KAAM,WACN,MAAO,qBACP,WAAY,WACZ,MAAO,yDACP,KAAM,2FACN,IAAK,8BACL,OAAQ,GACR,MAAO,CACX,CAAC,EAEGE,EAAgB,IAAIF,EAAM,CAC1B,KAAM,gBACN,MAAO,iBACP,WAAY,QACZ,MAAO,sDACP,KAAM,uIACN,IAAK,2BACL,OAAQ,GACR,MAAO,CACX,CAAC,EAEGG,EAAgB,IAAIH,EAAM,CAC1B,KAAM,oBACN,MAAO,qBACP,WAAY,gBACZ,MAAO,8DACP,KAAM,gFACN,IAAK,+BACL,OAAQ,GACR,MAAO,CACX,CAAC,EAED,SAASA,EAAMI,EAAK,CAChB,KAAK,KAAOA,EAAI,KAChB,KAAK,MAAQA,EAAI,MACjB,KAAK,WAAaA,EAAI,WACtB,KAAK,MAAQA,EAAI,MACjB,KAAK,KAAOA,EAAI,KAChB,KAAK,IAAMA,EAAI,IACf,KAAK,OAASA,EAAI,OAClB,KAAK,MAAQA,EAAI,KACrB,CAEAJ,EAAM,UAAU,SAAW,UAAY,CACnCN,EAAU,IAAI,KAAK,GAAG,CAC1B,EAEA,IAAIW,EAAa,EAEbC,EAAc,CAACP,EAASE,EAAUC,EAAeC,CAAa,EAElEP,EAAM,MAAQE,EAAM,MAEpBF,EAAM,OAAS,CAAC,EAEhBA,EAAM,KAAO,UAAY,CACrB,IAAIW,EAAO,EACX,QAAQ,QAAQX,EAAM,OAAQ,SAAUY,EAAOC,EAAO,CAClD,GAAID,EAAM,OAAQ,CACdD,EAAOE,IAAUb,EAAM,OAAO,OAAQ,EAAG,EAAGa,EAAQ,EACpDD,EAAM,OAAS,GACf,MACJ,CACJ,CAAC,EAEDZ,EAAM,OAAOW,CAAI,EAAE,OAAS,EAChC,EAEAX,EAAM,KAAO,UAAY,CACrB,IAAIW,EAAO,EAEX,QAAQ,QAAQX,EAAM,OAAQ,SAAUY,EAAOC,EAAO,CAClD,GAAID,EAAM,OAAQ,CACdD,EAAOE,IAAU,EAAGb,EAAM,OAAO,OAAQ,EAAGa,EAAQ,EACpDD,EAAM,OAAS,GACf,MACJ,CACJ,CAAC,EAEDZ,EAAM,OAAOW,CAAI,EAAE,OAAS,EACjC,EAECX,EAAM,SAAW,SAAUc,EAAY,CACnC,QAAQ,QAAQd,EAAM,OAAQ,SAAUY,EAAO,CAC3C,GAAIA,EAAM,OAAQ,CACdA,EAAM,OAAS,GACf,MACJ,CACJ,CAAC,EAEDZ,EAAM,OAAOc,CAAU,EAAE,OAAS,EACtC,EAEA,QAAQ,QAAQJ,EAAa,SAAUK,EAAM,CACrCA,EAAK,MAAQf,EAAM,MACnBA,EAAM,OAAO,KAAKe,CAAI,EAElBA,EAAK,OAASL,EAAY,OAAQ,EAClCD,EAAa,EAEbA,EAAaM,EAAK,KAE9B,CAAC,EAEDf,EAAM,OAAOS,CAAU,EAAE,OAAS,EACtC,CAEA,MAAO,CACH,SAAU,KACV,QAAS,GACT,YAAa,4BACb,MAAO,CACH,MAAO,GACX,EACA,KAAMV,CACV,CACJ,CAAC,CAAC,ECnIE,QAAQ,OAAO,WAAW,EACrB,WAAW,gBAAiB,CAAC,SAC9B,SAAUiB,EAAQ,CAElB,CAAC,CAAC,ECJN,QAAQ,OAAO,WAAW,EACrB,WAAW,iBAAkB,CAAC,SAC/B,SAAUC,EAAQ,CAElB,CAAC,CAAC,ECJN,QAAQ,OAAO,WAAW,EACrB,WAAW,oBAAqB,CAAC,SAClC,SAAUC,EAAQ,CAElB,CAAC,CAAC,ECJN,QAAQ,OAAO,WAAW,EACrB,WAAW,eAAgB,CAAC,SAC7B,SAAUC,EAAQ,CAElB,CAAC,CAAC,ECJN,QAAQ,OAAO,WAAW,EACrB,WAAW,cAAe,CAC3B,UAAY,CAGZ,CAAC,CAAC,ECLN,QAAQ,OAAO,WAAW,EACrB,WAAW,oBAAqB,CAAC,SAClC,SAAUC,EAAQ,CAElB,CAAC,CAAC,ECJN,QAAQ,OAAO,WAAW,EACrB,WAAW,eAAgB,CAAC,SAC7B,SAAUC,EAAQ,CAElB,CAAC,CAAC,ECJV,QAAQ,OAAO,WAAW,EACrB,QAAQ,YAAa,CAAC,UAAWC,GAAWC,GAAW,IAAID,EAAQ,SAASC,CAAO,CAAC,CAAC,EACrF,UAAU,oBAAqB,CAC5B,YAAaC,IACF,CACH,SAAU,IACV,KAAKC,EAAQC,EAAUC,EAAQ,CAC3B,IAAIC,EAAgBD,EAAO,mBAAqB,cAC5CE,EAAK,IAAI,OAAO,YAAcD,EAAgB,SAAS,EACvDE,EAAU,CAAC,EACXH,EAAO,wBACPG,EAAUH,EAAO,wBAAwB,QAAQ,OAAQ,EAAE,EAAE,MAAM,GAAG,EAEtEG,EAAU,CAAC,CAAC,EAEhB,QAASC,EAAI,EAAGA,EAAID,EAAQ,OAAQC,IAChCP,EAAU,CACN,SAAU,CACFG,EAAO,0BACPF,EAAO,MAAME,EAAO,yBAAyB,EACtCA,EAAO,wBACd,KAAK,QAAQ,UAAY,KAAK,QAAQ,UAAU,QAAQE,EAAI,EAAE,EAE9D,KAAK,QAAQ,WAAc,IAAMD,EAIhCD,EAAO,wBACR,KAAK,QAAQ,CAErB,EACA,QAASD,EAAS,CAAC,EACnB,WAAY,GACZ,OAAQI,EAAQC,CAAC,CACrB,CAAC,CAGT,CACJ,EAER,CAAC,ECxCD,QAAQ,OAAO,WAAW,EACrB,WAAW,iBAAkB,CAAC,SAAU,aACzC,SAAUC,EAAQC,EAAY,CAC1B,IAAIC,EAAK,KAETA,EAAG,WAAa,GAIhBA,EAAG,cAAgB,EAInBA,EAAG,gBAAkB,SAAUC,EAAS,CAEpCD,EAAG,sBAAsB,cAAcC,CAAO,EAC9CD,EAAG,cAAgBC,CACvB,EAIAD,EAAG,sBAAwB,CACvB,gBAAiBA,EAAG,gBACpB,cAAeA,EAAG,aACtB,EAEAA,EAAG,KAAO,GACVA,EAAG,MAAQ,GACXA,EAAG,MAAQ,GAEXA,EAAG,WAAa,UAAY,CACxBA,EAAG,WAAa,EACpB,EAEAA,EAAG,OAAS,SAAUE,EAAU,CAE5B,IAAIC,EAAO,CACP,KAAMH,EAAG,KACT,MAAOA,EAAG,MACV,MAAOA,EAAG,MAEV,UAAW,EACX,SAAU,EACV,QAAS,EACb,EAEAD,EAAW,gBAAgBI,CAAI,EAC1B,KAAK,SAAUC,EAAU,CAE1BJ,EAAG,gBAAgB,CAAC,CACxB,CAAC,CACL,CAGJ,CAAC,CAAC,ECtDT,QAAQ,OAAO,WAAW,EAClB,WAAW,eAAgB,CAAC,SAC7B,SAAUK,EAAQ,CAElB,CAAC,CAAC,ECHC,IAAMC,GAAN,KAAe,CAsF1B,EAtFiBA,GACN,MAAQ,CACX,QAAW,UACX,QAAW,UACX,MAAS,QACT,SAAY,WACZ,MAAS,QACT,KAAQ,OACR,MAAS,QACT,GAAM,KACN,OAAU,SACV,OAAU,SACV,MAAS,QACT,IAAO,MACP,WAAc,cACd,KAAQ,OACR,QAAW,UACX,IAAO,MACP,OAAU,SACV,KAAQ,OACR,KAAQ,UACR,OAAU,SACV,KAAQ,OACR,QAAW,UACX,MAAS,QACT,YAAe,UACf,OAAU,SACV,YAAe,SACf,aAAgB,UAChB,cAAiB,SACrB,EA9BaA,GA+BN,OAAS,CACZ,QAAW,eACX,QAAW,eACX,MAAS,eACT,SAAY,eACZ,MAAS,eACT,KAAQ,eACR,MAAS,qBACT,GAAM,kBACN,OAAU,eACV,OAAU,kBACV,MAAS,qBACT,IAAO,mBACP,WAAc,qBACd,KAAQ,eACR,QAAW,oBACX,IAAO,mBACP,OAAU,iBACV,KAAQ,eACR,KAAQ,mBACR,OAAU,kBACV,KAAQ,eACR,QAAW,eACX,MAAS,wBACT,YAAe,0BACf,OAAU,oBACV,YAAe,4BACf,aAAgB,eAChB,cAAiB,2BACrB,EA5DaA,GA6DN,mBAAqB,CACxB,kBAAmB,UACnB,oBAAqB,UACrB,mBAAoB,WACpB,iBAAkB,QAClB,iBAAkB,OAClB,qBAAsB,QACtB,kBAAmB,KACnB,wBAAyB,SACzB,kBAAmB,SACnB,qBAAsB,QACtB,mBAAoB,MACpB,qBAAsB,aACtB,kBAAmB,OACnB,oBAAqB,UACrB,mBAAoB,MACpB,iBAAkB,SAClB,mBAAoB,OACpB,mBAAoB,OACpB,kBAAmB,SACnB,gBAAiB,OACjB,kBAAmB,UACnB,wBAAyB,QACzB,4BAA6B,eACjC,EAIJ,QAAQ,OAAO,WAAW,EACrB,SAAS,WAAYA,EAAQ,ECxFlC,IAAMC,EAAN,MAAMA,CAAgB,CAqClB,YAAmBC,EACAC,EAAoB,CADpB,UAAAD,EACA,cAAAC,CACnB,CAEA,aAAaC,EAAuB,CAChC,OAAO,KAAK,KAAK,OAAQC,GAAaA,IAAaD,CAAI,EAAE,OAAS,CACtE,CAEA,KAAc,CACV,OAAOH,EAAgB,mBAAmB,KAAK,IAAI,CACvD,CAEA,YAAYG,EAAsB,CAC9B,IAAIE,EAAW,KAAK,cAAcF,CAAI,EACtC,OAAKE,GACML,EAAgB,mBAAmB,KAAK,QAAQ,CAE/D,CAEQ,cAAcG,EAAc,CAChC,OAAIH,EAAgB,UAAU,KAAKM,GAAKA,EAAE,KAAKH,CAAI,CAAC,GAAK,KAAK,SAAS,OAAQI,GAAiBA,IAAiB,IAAI,EAAE,OAAS,EACrH,KACJ,IACX,CAEA,OAAe,mBAAmBC,EAAc,CAC5C,OAAOA,EAAMR,EAAgB,aAAa,EAAGQ,EAAM,OAAS,CAAC,CAAC,CAClE,CAEA,OAAe,aAAaC,EAAaC,EAAqB,CAC1D,OAAAD,EAAM,KAAK,KAAKA,CAAG,EACnBC,EAAM,KAAK,MAAMA,CAAG,EACb,KAAK,MAAM,KAAK,OAAO,GAAKA,EAAMD,EAAM,EAAE,EAAIA,CACzD,CACJ,EAvEMT,EAEK,MAAQ,CAAC,QAAS,KAAM,SAAU,QAAS,MAAO,aAAc,UAAW,MAAO,SAAU,OAAQ,aAAa,EAFtHA,EAGK,IAAM,CAAC,QAAS,KAAM,OAAO,EAHlCA,EAIK,GAAK,CAAC,QAAS,KAAM,SAAU,QAAS,MAAO,aAAc,UAAW,MAAO,SAAU,MAAM,EAJpGA,EAKK,sBAAwB,CAAC,IAAI,EALlCA,EAMK,WAAa,CAAC,KAAM,QAAS,SAAU,MAAM,EANlDA,EAOK,SAAW,CAAC,IAAI,EAPrBA,EAQK,UAAY,CAAC,IAAI,EARtBA,EASK,KAAO,CAAC,IAAI,EATjBA,EAUK,MAAQ,CAAC,IAAI,EAVlBA,EAWK,cAAgB,CAAC,SAAS,EAX/BA,EAYK,oBAAsB,CAAC,IAAI,EAZhCA,EAaK,KAAO,CAAC,IAAI,EAbjBA,EAcK,WAAa,CAAC,IAAI,EAdvBA,EAeK,aAAe,CAAC,IAAI,EAfzBA,EAgBK,gBAAkB,CAAC,IAAI,EAhB5BA,EAiBK,qBAAuB,CAAC,IAAI,EAjBjCA,EAmBK,cAAgB,CAAC,IAAI,EAnB1BA,EAoBK,YAAc,CAAC,IAAI,EApBxBA,EAqBK,WAAa,CAAC,IAAI,EArBvBA,EAsBK,8BAAgC,CAAC,IAAI,EAtB1CA,EAuBK,mBAAqB,CAAC,IAAI,EAvB/BA,EAwBK,iBAAmB,CAAC,IAAI,EAxB7BA,EAyBK,kBAAoB,CAAC,IAAI,EAzB9BA,EA0BK,aAAe,CAAC,IAAI,EA1BzBA,EA2BK,cAAgB,CAAC,IAAI,EA3B1BA,EA4BK,sBAAwB,CAAC,SAAS,EA5BvCA,EA6BK,4BAA8B,CAAC,IAAI,EA7BxCA,EA8BK,aAAe,CAAC,IAAI,EA9BzBA,EA+BK,mBAAqB,CAAC,IAAI,EA/B/BA,EAgCK,qBAAuB,CAAC,IAAI,EAhCjCA,EAiCK,wBAA0B,CAAC,IAAI,EAjCpCA,EAkCK,6BAA+B,CAAC,IAAI,EAlCzCA,EAmCK,UAAY,CAAC,cAAe,cAAe,YAAa,eAAgB,YAAa,WAAY,aAAc,WAAY,aAAc,WAAY,aAAa,EAnC7K,IAAMW,EAANX,EA0EA,QAAQ,OAAO,WAAW,EACrB,QAAQ,kBAAmB,CAAC,UAAY,CAErC,OAAO,SAAUY,EAAW,CACxB,OAAQA,EAAW,CACf,IAAK,QACD,OAAO,IAAID,EAAgBA,EAAgB,MAAOA,EAAgB,aAAa,EACnF,IAAK,MACD,OAAO,IAAIA,EAAgBA,EAAgB,IAAKA,EAAgB,WAAW,EAC/E,IAAK,KACD,OAAO,IAAIA,EAAgBA,EAAgB,GAAIA,EAAgB,UAAU,EAC7E,IAAK,wBACD,OAAO,IAAIA,EAAgBA,EAAgB,sBAAuBA,EAAgB,6BAA6B,EACnH,IAAK,aACD,OAAO,IAAIA,EAAgBA,EAAgB,WAAYA,EAAgB,kBAAkB,EAC7F,IAAK,WACD,OAAO,IAAIA,EAAgBA,EAAgB,SAAUA,EAAgB,gBAAgB,EACzF,IAAK,YACD,OAAO,IAAIA,EAAgBA,EAAgB,UAAWA,EAAgB,iBAAiB,EAC3F,IAAK,OACD,OAAO,IAAIA,EAAgBA,EAAgB,KAAMA,EAAgB,YAAY,EACjF,IAAK,QACD,OAAO,IAAIA,EAAgBA,EAAgB,MAAOA,EAAgB,aAAa,EACnF,IAAK,gBACD,OAAO,IAAIA,EAAgBA,EAAgB,cAAeA,EAAgB,qBAAqB,EACnG,IAAK,sBACD,OAAO,IAAIA,EAAgBA,EAAgB,oBAAqBA,EAAgB,2BAA2B,EAC/G,IAAK,OACD,OAAO,IAAIA,EAAgBA,EAAgB,KAAMA,EAAgB,YAAY,EACjF,IAAK,aACD,OAAO,IAAIA,EAAgBA,EAAgB,WAAYA,EAAgB,kBAAkB,EAC7F,IAAK,eACD,OAAO,IAAIA,EAAgBA,EAAgB,aAAcA,EAAgB,oBAAoB,EACjG,IAAK,kBACD,OAAO,IAAIA,EAAgBA,EAAgB,gBAAiBA,EAAgB,uBAAuB,EACvG,IAAK,uBACD,OAAO,IAAIA,EAAgBA,EAAgB,qBAAsBA,EAAgB,4BAA4B,EACjH,QACI,KAAM,6BACd,CACJ,CACJ,CAAC,CAAC,ECzHL,QAAQ,OAAO,WAAW,EACtB,WAAW,YACR,CACI,OAAQ,OAAQ,YAAa,kBAAmB,kBAAmB,YAAa,WAAY,UAAW,WACvG,SAAUE,EAAMC,EAAMC,EAAWC,EAAiBC,EAAiBC,EAAWC,EAAUC,EAASC,EAAU,CAEvG,IAAIC,EAAK,KA2BT,GA1BAA,EAAG,KAAOT,EACVS,EAAG,KAAOR,EACVQ,EAAG,UAAYR,EAAK,QAAQ,MAAO,GAAG,EAEtCQ,EAAG,MAAQD,EAAS,MACpBC,EAAG,OAASD,EAAS,OAErBC,EAAG,YAAc,IACRP,EACE,wBAAwBA,CAAS,OAAO,KAAK,IAAI,GADjC,2BAA2B,KAAK,IAAI,GAI/DO,EAAG,sBAAwB,CACvB,QAAS,mBAAmB,mCAAmC,EAC/D,UAAW,mBAAmB;AAAA;AAAA,EAEhDA,EAAG,YAAY,CAAC;AAAA;AAAA,0EAEwD,EACtD,QAAS,mBAAmB;AAAA;AAAA,EAE9CA,EAAG,YAAY,CAAC;AAAA;AAAA,0EAEwD,CAC1D,EAEI,CAACN,EAAgB,aAAaM,EAAG,IAAI,EAAG,CACxC,IAAIC,EAAcP,EAAgB,YAAYM,EAAG,IAAI,EACjDE,GAAaT,EAAY,IAAMA,EAAY,IAAM,OAASQ,EACxDD,EAAG,OACLE,GAAW,IAAMF,EAAG,MAExBJ,EAAU,KAAKM,CAAO,CAC1B,CAEJ,CACJ,CACJ,EC5CH,QAAQ,OAAO,WAAW,EACtB,WAAW,wBACR,CACI,UAAW,SAAU,gBAAiB,kBAAmB,YAAa,WAAY,UAAW,WAC7F,SAAUC,EAASC,EAAQC,EAAeC,EAAiBC,EAAWC,EAAUC,EAASC,EAAU,CAE/F,IAAIC,EAAK,KACTA,EAAG,QAAUR,EACbQ,EAAG,OAASP,EACZO,EAAG,KAAOD,EAAS,mBAAmBL,CAAa,EAGnDM,EAAG,MAAQD,EAAS,MACpBC,EAAG,OAASD,EAAS,OAOrBC,EAAG,sBAAwB,CACvB,QAAS,mBAAmB,mCAAmC,EAC/D,UAAW,mBAAmB;AAAA;AAAA,EAEhDA,EAAG,YAAY,CAAC;AAAA;AAAA,0EAEwD,EACtD,QAAS,mBAAmB;AAAA;AAAA,EAE9CA,EAAG,YAAY,CAAC;AAAA;AAAA,0EAEwD,CAC1D,CAEJ,CACJ,CACJ,EClCA,QAAQ,OAAO,WAAW,EACrB,WAAW,mBAAoB,CAAC,QAAS,eAAgB,UAAW,aACjE,SAAUC,EAAOC,EAAcC,EAASC,EAAY,CACpD,IAAIC,EAAK,KAETA,EAAG,iBAAmB,GACtBA,EAAG,mBAAqB,GACxBA,EAAG,oBAAsB,KAGzBA,EAAG,cAAgB,IAAM,CAErB,IAAIC,EAAU,IAAI,MAClBA,EAAQ,KAAK,UAAY,mBAAmBH,EAAQ,qBAAqB,cAAc,CAAC,EACxFG,EAAQ,KAAK,WAAa,mBAAmB,OAAO,CAAC,EACrDA,EAAQ,KAAK,QAAU,mBAAmBH,EAAQ,SAAS,KAAK,QAAQA,EAAQ,SAAS,KAAM,aAAa,CAAC,CAAC,EAE9G,OAAO,KAAKA,EAAQ,qBAAqB,gBAAkB,SAAWG,EAAQ,KAAK,GAAG,EAAG,iBAAkB,+BAAiCH,EAAQ,YAAc,EAAI,KAAO,UAAYA,EAAQ,WAAa,EAAI,iEAC9I,CACxE,EAEAE,EAAG,aAAe,IAAK,CAEnB,IAAIE,EAAMJ,EAAQ,SAAS,KAEvBK,EAAQH,EAAG,iBAGXC,EAAU,IAAI,MAClBA,EAAQ,KAAK,OAAS,mBAAmBC,CAAG,CAAC,EAC7CD,EAAQ,KAAK,QAAU,mBAAmBE,CAAK,CAAC,EAChDF,EAAQ,KAAK,OAAS,mBAAmB,WAAW,CAAC,EAGrD,OAAO,KAAK,oCAAsCA,EAAQ,KAAK,GAAG,EAC9D,gBACA,+BAAiCH,EAAQ,YAAc,EAAI,KAAO,UAAYA,EAAQ,WAAa,EAAI,iEACvC,CACxE,EAEAE,EAAG,cAAgB,IAAM,CAErB,IAAIE,EAAMJ,EAAQ,SAAS,KAEvBK,EAAQH,EAAG,iBAGXC,EAAU,IAAI,MAClBA,EAAQ,KAAK,UAAa,EAC1BA,EAAQ,KAAK,OAAS,mBAAmBC,CAAG,CAAC,EAC7CD,EAAQ,KAAK,SAAW,mBAAmBE,CAAK,CAAC,EACjDF,EAAQ,KAAK,WAAa,mBAAmBD,EAAG,kBAAkB,CAAC,EAGnE,OAAO,KAAK,yCAA2CC,EAAQ,KAAK,GAAG,EACnE,iBACA,+BAAiCH,EAAQ,YAAc,EAAI,KAAO,UAAYA,EAAQ,WAAa,EAAI,iEACvC,CACxE,EAGAE,EAAG,OAAS,IAAM,CACd,KAAK,aAAe,GACpB,KAAK,kBAAoB,GAEzBD,EAAW,sBAAsBC,EAAG,KAAK,EACpC,KAAK,SAAUI,EAAU,CAClBA,EAAS,KAAK,SACd,MAAM,6BAA6B,EACnCJ,EAAG,iBAAmB,IAEtBA,EAAG,aAAeI,EAAS,KAAK,QAGpCJ,EAAG,kBAAoB,EAC3B,CAAC,CACT,CAEJ,CAAC,CAAC,EC7EN,QAAQ,OAAO,WAAW,EAGrB,UAAU,wBAAyB,CAAC,UAAY,CACjD,MAAO,CACH,eAAgB,SAAUK,EAASC,EAAWC,EAAM,CAChD,IAAIC,EAAOH,EAAQ,SAAS,GAAG,EAAE,CAAC,EAE9BI,EAAK,IAAI,aAAa,CAAE,WAAYF,CAAK,CAAC,EAC9C,OAAAE,EAAG,GAAGD,EAAM,GAAI,CAAE,OAAQ,SAAU,MAAO,SAAU,OAAQ,SAAU,KAAM,OAAO,OAAQ,CAAC,EAEtF,SAAUE,EAAW,CAI5B,CACJ,EAEA,kBAAmB,SAAUL,EAASC,EAAWC,EAAM,CACnD,IAAIC,EAAOH,EAAQ,SAAS,GAAG,EAAE,CAAC,EAE9BI,EAAK,IAAI,aAAa,CAAE,WAAYF,CAAK,CAAC,EAC9C,OAAAE,EAAG,GAAGD,EAAM,GAAI,CAAE,OAAQ,SAAU,MAAO,SAAU,OAAQ,SAAU,KAAM,OAAO,OAAQ,CAAC,EAEtF,SAAUE,EAAW,CAI5B,CACJ,CACJ,CACJ,CAAC,CAAC,EAID,UAAU,0BAA2B,CAAC,UAAY,CAC/C,MAAO,CACH,eAAgB,SAAUL,EAASC,EAAWC,EAAM,CAChD,IAAIE,EAAK,IAAI,aAAa,CAAE,WAAYF,CAAK,CAAC,EAC9C,OAAAE,EAAG,GAAGJ,EAAS,GAAI,CAAE,QAAS,CAAE,CAAC,EAE1B,SAAUK,EAAW,CAI5B,CACJ,EAEA,kBAAmB,SAAUL,EAASC,EAAWC,EAAM,CACnD,IAAIE,EAAK,IAAI,aAAa,CAAE,WAAYF,CAAK,CAAC,EAC9C,OAAAE,EAAG,GAAGJ,EAAS,GAAI,CAAE,QAAS,CAAE,CAAC,EAE1B,SAAUK,EAAW,CAI5B,CACJ,CACJ,CACJ,CAAC,CAAC,EC3DF,QAAQ,OAAO,WAAW,EACrB,UAAU,iBAAkB,CAAC,KACvB,CACH,MAAMC,EAASC,EAAM,CACjB,IAAIC,EAAK,IAAI,aAAa,CAAE,WAAYD,CAAK,CAAC,EAC9C,OAAAC,EAAG,KAAKF,EAAS,GAAI,CAAE,QAAS,EAAG,KAAM,OAAO,OAAQ,CAAC,EACpD,KAAK,gBAAiB,GAAI,CAAE,QAAS,EAAG,EAAG,SAAU,KAAM,OAAO,OAAQ,EAAG,MAAM,EAEjFG,GAAa,CAIpB,CACJ,EACA,MAAMH,EAASC,EAAM,CACjB,IAAIC,EAAK,IAAI,aAAa,CAAE,WAAYD,CAAK,CAAC,EAC9C,OAAAC,EAAG,GAAGF,EAAS,EAAG,CAAE,QAAS,EAAG,QAAS,OAAQ,KAAM,OAAO,OAAQ,CAAC,EAEhEG,GAAa,CAIpB,CACJ,CACJ,EACH,CAAC,ECzBF,QAAQ,OAAO,WAAW,EACrB,UAAU,gBAAiB,CACxB,KACW,CACH,MAAO,CAACC,EAASC,IAAS,CACtB,IAAIC,EAAK,IAAI,aAAa,CAAE,WAAYD,CAAK,CAAC,EAE9C,OAAAC,EAAG,KAAKF,EAAS,GAAI,CAAE,QAAS,EAAG,MAAO,GAAI,gBAAiB,aAAc,KAAM,OAAO,SAAU,CAAC,EAE7FG,GAAc,CAItB,CACJ,EAEA,MAAO,CAACH,EAASC,IAAS,CACtB,IAAIC,EAAK,IAAI,aAAa,CAAE,WAAYD,CAAK,CAAC,EAC9C,OAAAC,EAAG,GAAGF,EAAS,GAAI,CAAE,QAAS,EAAG,MAAO,GAAI,gBAAiB,aAAc,QAAS,OAAQ,KAAM,OAAO,SAAU,CAAC,EAE5GG,GAAc,CAItB,CACJ,CACJ,EAER,CAAC,EC5BL,QAAQ,OAAO,WAAW,EACrB,UAAU,gBAAiB,CACxB,KACW,CACH,MAAO,CAACC,EAASC,KACbA,EAAK,EACGC,GAAc,CAItB,GAGJ,MAAO,CAACF,EAASC,KACb,OAAO,SAAS,EAAG,CAAC,EACpBA,EAAK,EACGC,GAAc,CAItB,EAER,EAER,CAAC,ECtBT,QAAQ,OAAO,WAAW,EACrB,UAAU,qBAAsB,CAAC,WAAY,WAAY,SAAUC,EAAUC,EAAU,CAEpF,IAAIC,EAAW,+EAEf,MAAO,CACH,SAAU,IACV,KAAM,SAAUC,EAAOC,EAAMC,EAAO,CAEhC,IAAIC,EAAU,QAAQ,OAAO,CAAC,UAAW,EAAI,EAAGH,EAAM,MAAME,EAAM,kBAAkB,CAAC,EACjFE,EAAmBP,EAASE,CAAQ,EAAE,QAAQ,OAAOC,EAAM,KAAK,EAAI,EAAGG,CAAO,CAAC,EAC/EE,EAAYJ,EAAK,CAAC,EAAE,YAAcA,EAAK,CAAC,EAAE,WAAWA,EAAK,CAAC,EAAE,WAAW,OAAS,CAAC,EAEtFD,EAAM,OAAO,UAAY,CACrB,OAAQA,EAAM,MAAME,EAAM,kBAAkB,EAAE,OAClD,EAAG,SAAUI,EAAM,CAEXA,EACAR,EAAS,MAAMM,EAAkBH,EAAMI,CAAS,EAEhDP,EAAS,MAAMM,CAAgB,EAEnCH,EAAK,IAAI,iBAAkBE,EAAQ,WAAaG,EAAO,OAAS,EAAE,EAClEH,EAAQ,WAAaG,GAAQL,EAAK,KAAK,WAAY,UAAU,EAC7DE,EAAQ,WAAa,CAACG,GAAQL,EAAK,WAAW,UAAU,CAC5D,CAAC,CAEL,CACJ,CACJ,CAAC,CAAC,EC7BN,QAAQ,OAAO,WAAW,EACrB,UAAU,YAAa,CAAC,UAAY,CAEjC,MAAO,CACH,SAAU,IACV,SAAU,0EACd,CACJ,CAAC,CAAC,ECZL,QAAQ,OAAO,WAAW,EACtB,UAAU,kBAAmB,CAAC,UAAW,CAEtC,MAAMM,CAAwB,CAA9B,cAEI,KAAO,MAAuB,CAAC,EAG/B,QAAQC,EAAc,CAClB,KAAK,MAAM,KAAKA,CAAI,CACxB,CAEA,UAAUA,EAAc,CACpB,KAAK,WAAaA,CACtB,CAEA,WAAY,CACR,IAAIC,EAAM,KAAK,MAAM,QAAQ,KAAK,UAAU,EAC5C,GAAIA,GAAO,GAAI,OACf,IAAIC,EAASD,GAAO,EAAI,KAAK,MAAM,OAAS,EAAIA,EAAM,EACtD,KAAK,UAAU,KAAK,MAAMC,CAAM,CAAC,CACrC,CAEA,YAAa,CACT,IAAID,EAAM,KAAK,MAAM,QAAQ,KAAK,UAAU,EAC5C,GAAIA,GAAO,GAAI,OACf,IAAIC,EAASD,GAAO,KAAK,MAAM,OAAS,EAAI,EAAIA,EAAM,EACtD,KAAK,UAAU,KAAK,MAAMC,CAAM,CAAC,CACrC,CACJ,CAEA,MAAO,CACH,MAAO,CAAC,EACR,QAAS,kBACT,WAAY,IAAM,IAAIH,EACtB,aAAc,KACd,iBAAkB,EAEtB,CAEJ,CAAC,CAAC,EACD,UAAU,sBAAuB,CAAC,UAAW,CAE1C,MAAO,CACH,QAAS,mBACT,KAAM,SAASI,EAAOC,EAAMC,EAAOC,EAAM,CACrC,IAAIC,EAAWF,EAAM,oBACrBC,EAAK,QAAQC,CAAQ,EAEjB,QAAQ,UAAUF,EAAM,MAAM,GAAGC,EAAK,UAAUC,CAAQ,EAE5DH,EAAK,GAAG,QAAS,IAAM,CAAED,EAAM,OAAO,IAAMG,EAAK,UAAUC,CAAQ,CAAC,CAAG,CAAC,EACxEJ,EAAM,OAAO,IAAMG,EAAK,WAAYE,GAAc,CAC1CA,IAAeD,EACfH,EAAK,SAAS,QAAQ,EAEtBA,EAAK,YAAY,QAAQ,CAEjC,EAAG,EAAI,EACPD,EAAM,IAAI,WAAY,IAAMC,EAAK,IAAI,OAAO,CAAC,CACjD,CACJ,CACJ,CAAC,CAAC,EACD,UAAU,yBAA0B,CAAC,UAAW,CAE7C,MAAO,CACH,QAAS,mBACT,KAAM,SAASD,EAAOC,EAAMC,EAAOC,EAAM,CACrC,IAAIC,EAAWF,EAAM,uBAOrB,GALAF,EAAM,OAAO,IAAMG,EAAK,WAAY,IAAM,CAClCC,IAAaD,EAAK,WAAYF,EAAK,SAAS,QAAQ,EACnDA,EAAK,YAAY,QAAQ,CAClC,EAAG,EAAI,EAEH,QAAQ,UAAUC,EAAM,YAAY,EAAG,CACvC,IAAII,EAAa,IAAI,OAAO,OAAUL,EAAK,CAAC,CAAC,EAC7CK,EAAW,GAAG,YAAa,UAAY,CACnCN,EAAM,OAAO,IAAM,CAAEG,EAAK,UAAU,CAAG,CAAC,CAC5C,CAAC,EACDG,EAAW,GAAG,aAAc,UAAY,CACpCN,EAAM,OAAO,IAAM,CAAEG,EAAK,WAAW,CAAG,CAAC,CAC7C,CAAC,CACL,CAEJ,CACJ,CACJ,CAAC,CAAC,ECtFN,QAAQ,OAAO,WAAW,EACrB,UAAU,eAAgB,CAAC,UAAY,CAEpC,MAAO,CACH,SAAU,IACV,MAAO,CACH,WAAY,eAChB,EACA,KAAM,SAAUI,EAAOC,EAASC,EAAO,CAEnCD,EAAQ,GAAG,aAAc,IAAME,EAAiB,EAAI,CAAC,EACrDF,EAAQ,GAAG,aAAc,IAAME,EAAiB,EAAK,CAAC,EAEtDH,EAAM,IAAI,WAAY,IAAM,CACxBC,EAAQ,IAAI,aAAcE,CAAgB,EAC1CF,EAAQ,IAAI,aAAcE,CAAgB,CAC9C,CAAC,EAED,SAASA,EAAiBC,EAAM,CACxBA,EACAH,EAAQ,SAASD,EAAM,UAAU,EAEjCC,EAAQ,YAAYD,EAAM,UAAU,CAE5C,CAEJ,CACJ,CACJ,CAAC,CAAC,EC5BN,QAAQ,OAAO,WAAW,EACrB,UAAU,gBAAiB,CAAC,UAAY,CACrC,MAAO,CACH,SAAU,KACV,MAAO,CACH,WAAY,KACZ,aAAc,IAClB,EACA,iBAAkB,GAClB,aAAc,KACd,WAAY,UAAgC,CACxC,KAAK,OAAS,CAAC,EAEf,KAAK,SAAW,SAAUK,EAAO,CAC7B,KAAK,OAAO,KAAKA,CAAK,EAClB,QAAQ,UAAUA,EAAM,MAAM,MAAM,GACpC,KAAK,eAAeA,CAAK,CAEjC,EAEA,KAAK,eAAiB,SAAUC,EAAgB,CAC5C,KAAK,OAAO,QAAQD,GAAS,CAAEA,EAAM,OAAS,EAAO,CAAC,EACtDC,EAAe,OAAS,EAC5B,EAEA,KAAK,kBAAoB,SAAUD,EAAO,CACtCA,EAAM,OAAS,EACnB,CACJ,CACJ,CACJ,CAAC,CAAC,EACD,UAAU,eAAgB,CAAC,UAAY,CACpC,MAAO,CACH,SAAU,KACV,QAAS,iBACT,KAAM,SAAUE,EAAOC,EAAMC,EAAOC,EAAiB,CAEjD,IAAIL,EAAQ,CACR,KAAMG,EACN,MAAOC,EACP,OAAQ,EACZ,EAEAF,EAAM,OAAO,IAAMF,EAAM,OAAQ,SAAUM,EAAU,CACjDC,EAAiBD,CAAQ,CAC7B,EAAG,EAAI,EACPD,EAAgB,SAASL,CAAK,EAE9BG,EAAK,GAAG,aAAcK,CAAc,EAC/BH,EAAgB,cACjBF,EAAK,GAAG,aAAcM,CAAiB,EAG3CP,EAAM,IAAI,WAAY,IAAM,CACxBC,EAAK,IAAI,aAAcK,CAAc,EAChCH,EAAgB,cACjBF,EAAK,IAAI,aAAcM,CAAiB,CAEhD,CAAC,EAED,SAASD,GAAiB,CACtBN,EAAM,OAAO,UAAY,CACrBG,EAAgB,eAAeL,CAAK,CACxC,CAAC,CACL,CAEA,SAASS,GAAoB,CACzBP,EAAM,OAAO,UAAY,CACrBG,EAAgB,kBAAkBL,CAAK,CAC3C,CAAC,CACL,CAEA,SAASO,EAAiBG,EAAM,CACxBA,EACAP,EAAK,SAASE,EAAgB,UAAU,EAExCF,EAAK,YAAYE,EAAgB,UAAU,CAEnD,CACJ,CACJ,CACJ,CAAC,CAAC,ECjFN,QAAQ,OAAO,WAAW,EACrB,UAAU,iBAAkB,CAAC,UAAY,CACtC,MAAO,CACH,SAAU,KACV,QAAS,iBACT,MAAO,CACP,EACA,iBAAkB,GAClB,aAAc,iBACd,WAAY,CAAC,SAAU,WAAY,SAAgCM,EAAQC,EAAU,CAGjF,KAAK,OAAS,CAAC,EACf,IAAIC,EAAmB,GACvB,KAAK,IAAM,SAAUC,EAAO,CACxB,KAAK,OAAO,KAAKA,CAAK,EAClB,QAAQ,UAAUA,EAAM,MAAM,MAAM,GACpC,KAAK,UAAUA,CAAK,CAE5B,EACA,KAAK,UAAY,SAAUC,EAAgB,CACvCH,EAAS,YAAY,SAASC,EAAmB,CAAC,EAAE,EACpD,KAAK,OAAO,QAAQC,GAAS,CAAEA,EAAM,OAAS,EAAO,CAAC,EACtDC,EAAe,OAAS,GACxBF,EAAmB,KAAK,OAAO,QAAQE,CAAc,EACrDH,EAAS,SAAS,SAASC,EAAmB,CAAC,EAAE,CACrD,EAEA,KAAK,aAAe,SAAUC,EAAO,CACjCA,EAAM,OAAS,EACnB,EAEA,KAAK,OAAS,UAAY,CAClB,KAAK,OAAO,OAASD,EAAmB,GACxC,KAAK,UAAU,KAAK,OAAOA,EAAmB,CAAC,CAAC,EAChD,KAAK,gBAAgB,IAErB,KAAK,UAAU,KAAK,OAAO,CAAC,CAAC,EAC7B,KAAK,gBAAgB,EAE7B,EAEA,KAAK,SAAW,UAAW,CACnB,KAAK,OAAO,OAAS,GAAKA,EAAmB,GAAK,GAClD,KAAK,UAAU,KAAK,OAAOA,EAAmB,CAAC,CAAC,EAChD,KAAK,gBAAgB,IAErB,KAAK,UAAU,KAAK,OAAO,KAAK,OAAO,OAAS,CAAC,CAAC,EAClD,KAAK,gBAAgB,EAE7B,EAEA,KAAK,WAAa,KAElB,KAAK,gBAAkB,IAAM,CACzB,KAAK,cAAc,EACnB,KAAK,WAAa,YAAY,IAAM,CAChCF,EAAO,OAAO,IAAM,KAAK,OAAO,CAAC,CACrC,EAAG,GAAmB,CAC1B,EAEA,KAAK,cAAgB,UAAW,CAC5B,cAAc,KAAK,UAAU,CACjC,EAEA,KAAK,gBAAgB,EAErBA,EAAO,IAAI,WAAY,IAAM,CACzB,cAAc,KAAK,UAAU,CACjC,CAAC,CAEL,CAAC,CACL,CACJ,CAAC,CAAC,EACD,UAAU,gBAAiB,CAAC,UAAY,CACrC,MAAO,CACH,SAAU,KACV,QAAS,kBACT,KAAM,SAAUK,EAAOC,EAAMC,EAAOC,EAAM,CAEtC,IAAIL,EAAQ,CACR,KAAMG,EACN,MAAOC,EACP,OAAQ,EACZ,EAEAF,EAAM,OAAO,IAAMF,EAAM,OAAQM,GAAY,CACzCC,EAAkBD,CAAQ,CAC9B,EAAG,EAAI,EACPD,EAAK,IAAIL,CAAK,EAEd,SAASO,EAAkBC,EAAM,CACzBA,EACAL,EAAK,SAAS,QAAQ,EAEtBA,EAAK,YAAY,QAAQ,CAEjC,CACJ,CACJ,CACJ,CAAC,CAAC,EACD,UAAU,uBAAwB,CAAC,UAAY,CAC5C,MAAO,CACH,SAAU,KACV,QAAS,kBACT,KAAM,SAAUD,EAAOC,EAAMC,EAAOC,EAAM,CAEtCF,EAAK,GAAG,QAASM,CAAM,EAEvB,SAASA,GAAS,CACdP,EAAM,OAAO,IAAM,CACfG,EAAK,OAAO,EACZA,EAAK,cAAc,CACvB,CAAC,CACL,CAEAH,EAAM,IAAI,WACN,IAAM,CACFC,EAAK,IAAI,QAASM,CAAM,CAC5B,CAAC,CAET,CACJ,CACJ,CAAC,CAAC,EACD,UAAU,yBAA0B,CAAC,UAAY,CAC9C,MAAO,CACH,SAAU,KACV,QAAS,kBACT,KAAM,SAAUP,EAAOC,EAAMC,EAAOC,EAAM,CAEtCF,EAAK,GAAG,QAASO,CAAQ,EAEzB,SAASA,GAAW,CAChBR,EAAM,OAAO,IAAM,CACfG,EAAK,SAAS,EACdA,EAAK,cAAc,CACvB,CAAC,CACL,CAEAH,EAAM,IAAI,WACN,IAAM,CACFC,EAAK,IAAI,QAASO,CAAQ,CAC9B,CAAC,CAET,CACJ,CACJ,CAAC,CAAC,ECzIN,IAAMC,GAAN,KAAyB,CAAzB,cAEI,cAA4B,CAAC,EAG7B,MAAMC,EAA2BC,EAAuB,CACpD,KAAK,SAAWD,EAChB,KAAK,sBAAwBC,CACjC,CAEA,SAASC,EAAiC,CAClC,OAAOA,GAAY,WACnBA,EAAU,KAAK,SAAS,OAAOC,GAAMA,EAAG,OAASD,CAAO,EAAE,CAAC,GAE/D,KAAK,SAAS,QAAQC,GAAMA,EAAG,SAAW,EAAK,EAC/CD,EAAQ,SAAW,GAEf,KAAK,uBAAuB,KAAK,sBAAsBA,CAAO,CACtE,CAEA,SAASE,EAAuB,CAC5B,IAAMJ,EAAW,KAAK,SAAW,KAAK,SAAS,OAAOG,GAAMA,EAAG,OAASC,CAAW,EAAI,CAAC,EACxF,OAAOJ,EAAS,OAAS,EAAIA,EAAS,CAAC,EAAE,SAAW,EACxD,CACJ,EAEA,QAAQ,OAAO,WAAW,EACrB,UAAU,aAAc,CAAC,UAAY,CAElC,MAAO,CACH,MAAO,GACP,WAAYD,GACZ,aAAc,cACd,iBAAkB,GAClB,QAAS,aACT,KAAM,SAAwBM,EAAOC,EAAMC,EAAOC,EAAM,CACpDH,EAAM,OAAO,IAAMA,EAAM,MAAME,EAAM,eAAe,YAAY,EAAIA,EAAM,WAAaA,EAAM,QAAQ,EAAIE,GAAQD,EAAK,MAAMC,EAAKJ,EAAM,MAAME,EAAM,qBAAqB,CAAC,EAAG,EAAI,CACpL,CACJ,CACJ,CAAC,CAAC,EACD,UAAU,YAAa,CAAC,UAAY,CAEjC,MAAO,CACH,MAAO,GACP,WAAY,GACZ,SAAU;AAAA;AAAA,cAGV,KAAM,SAAuBF,EAAOC,EAAMC,EAAOC,EAAM,CACnDH,EAAM,OAAO,IAAMA,EAAM,aAAeA,EAAM,YAAY,UAAYA,EAAM,YAAY,SAAS,KAAKH,GAAWA,EAAQ,QAAUK,EAAM,WAAaA,EAAM,KAAK,EAAIL,GAAY,CAC7KG,EAAM,WAAaH,CACvB,EAAG,EAAI,CACX,CACJ,CACJ,CAAC,CAAC,EACD,UAAU,mBAAoB,CAAC,UAAY,CAExC,MAAO,CACH,MAAO,GACP,QAAS,cACT,KAAM,SAA8BG,EAAOC,EAAMC,EAAOC,EAAM,CAE1D,SAASE,GAAY,CACjBL,EAAM,OAAO,IAAM,CACfG,EAAK,SAASD,EAAM,gBAAgB,CACxC,CAAC,CACL,CAEAD,EAAK,KAAK,QAASI,CAAS,EAE5BL,EAAM,IAAI,WAAY,IAAM,CACxBC,EAAK,OAAO,QAASI,CAAS,CAClC,CAAC,CACL,CACJ,CACJ,CAAC,CAAC,ECnFN,IAAMC,GAAN,KAAuC,CAAvC,cAEI,WAAe,CAAC,EAKhB,IAAI,QAAQC,EAAO,CACf,KAAK,SAAWA,EAChB,KAAK,eAAe,CACxB,CAEA,QAAQC,EAAW,CACf,KAAK,MAAM,KAAKA,CAAI,EAChBA,EAAK,WACL,KAAK,gBAAkB,KAAK,MAAM,QAAQA,CAAI,GAElD,KAAK,YAAY,EACjB,KAAK,eAAe,CACxB,CAEA,SAASA,EAAW,CACZ,OAAOA,GAAS,WAChBA,EAAO,KAAK,MAAM,OAAOC,GAAKA,EAAE,OAASD,CAAI,EAAE,CAAC,GAGpD,KAAK,MAAM,QAAQ,CAACD,EAAOG,IAAU,CACjCH,EAAM,KAAK,YAAY,aAAa,EACpCA,EAAM,KAAK,YAAY,YAAY,EACnCA,EAAM,SAAWA,GAASC,EACtBD,EAAM,UAAYG,EAAQ,KAAK,gBAC/BH,EAAM,KAAK,SAAS,aAAa,EAE5BA,EAAM,UAAYG,EAAQ,KAAK,iBACpCH,EAAM,KAAK,SAAS,YAAY,CAExC,CAAC,EACD,KAAK,gBAAkB,KAAK,MAAM,QAAQC,CAAI,EAC9C,KAAK,YAAY,EACjB,KAAK,eAAe,CACxB,CAEQ,aAAc,CAClB,IAAIG,EACJ,KAAK,MAAM,QAAQ,CAACJ,EAAOG,IAAU,CAC7BH,EAAM,WACNI,EAAcD,GAElBH,EAAM,KAAK,YAAY,QAAQ,EAC/B,QAASK,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQ,EAAEA,EACrCL,EAAM,KAAK,YAAY,iBAAiBK,CAAC,EAAE,EAC3CL,EAAM,KAAK,YAAY,gBAAgBK,CAAC,EAAE,CAElD,CAAC,EACD,KAAK,MAAM,QAAQ,CAACL,EAAOG,IAAU,CAC7BH,EAAM,SACNA,EAAM,KAAK,SAAS,QAAQ,EACrBG,EAAQC,EACfJ,EAAM,KAAK,SAAS,iBAAiBI,EAAcD,CAAK,EAAE,EACnDA,EAAQC,GACfJ,EAAM,KAAK,SAAS,gBAAgBG,EAAQC,CAAW,EAAE,CAEjE,CAAC,CACL,CAKQ,gBAAiB,CACrB,GAAI,CAAC,KAAK,SAAU,OAYpB,GAXM,KAAK,kBACP,KAAK,gBAAgB,OAAO,EAC5B,KAAK,gBAAkB,MAErB,KAAK,mBACP,KAAK,iBAAiB,OAAO,EAC7B,KAAK,iBAAmB,MAG5B,KAAK,gBAAkB,SAAS,cAAc,KAAK,SAAS,cAAc,EAC1E,KAAK,iBAAmB,SAAS,cAAc,KAAK,SAAS,cAAc,EACrE,KAAK,MAAM,OAAQ,CACrB,IAAIE,EAAS,QAAQ,QAAQ,KAAK,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EACxDA,EAAO,OAAO,KAAK,gBAAgB,EACnCA,EAAO,QAAQ,KAAK,gBAAiB,KAAK,MAAM,CAAC,EAAE,IAAI,CAC3D,CAEA,IAAIF,EAAc,KAAK,gBACnBG,EAAiBH,EAAaI,EAAkB,KAAK,MAAM,OAAS,EAAIJ,EACxEK,EAAO,KAAK,IAAIF,EAAiBC,CAAe,EAChDA,EAAkBD,IAClB,QAAQ,QAAQ,KAAK,eAAe,EAAE,SAAS,iBAAiB,KAAK,IAAIA,EAAiB,CAAC,CAAC,WAAWE,CAAI,EAAE,EAC7G,QAAQ,QAAQ,KAAK,gBAAgB,EAAE,SAAS,UAAU,GAE1DD,EAAkBD,IAClB,QAAQ,QAAQ,KAAK,eAAe,EAAE,SAAS,UAAU,EACzD,QAAQ,QAAQ,KAAK,gBAAgB,EAAE,SAAS,gBAAgB,KAAK,IAAIC,EAAkB,CAAC,CAAC,WAAWC,CAAI,EAAE,EAGtH,CAEA,UAAW,CACH,KAAK,gBAAkB,GACvB,KAAK,SAAS,KAAK,MAAM,KAAK,gBAAkB,CAAC,CAAC,CAE1D,CAEA,WAAY,CACJ,KAAK,gBAAkB,KAAK,MAAM,OAAS,GAC3C,KAAK,SAAS,KAAK,MAAM,KAAK,gBAAkB,CAAC,CAAC,CAE1D,CAEJ,EAGMC,GAAN,KAAsC,CAEtC,EAEA,QAAQ,OAAO,WAAW,EACrB,UAAU,kBAAmB,CAAC,UAAY,CAEvC,MAAO,CACH,WAAYX,GACZ,QAAS,kBACT,aAAc,mBACd,iBAAkB,GAClB,KAAM,SAAUY,EAAOC,EAAMC,EAAOC,EAAM,CACtCA,EAAK,QAAUH,EAAM,MAAME,EAAM,OAAO,CAC5C,CACJ,CACJ,CAAC,CAAC,EACD,UAAU,iBAAkB,CAAC,UAAY,CAEtC,MAAO,CACH,WAAYH,GACZ,QAAS,CAAC,mBAAoB,gBAAgB,EAC9C,KAAM,SAAUC,EAAOC,EAAMC,EAAOE,EAAO,CACvC,IAAMC,EAAYD,EAAM,CAAC,EACnBE,EAAWF,EAAM,CAAC,EAClBd,EAAO,CAAE,KAAMW,EAAM,SAAUC,EAAM,eAAe,QAAQ,EAAG,KAAMA,EAAM,cAAe,EAChGG,EAAU,QAAQf,CAAI,EACtBgB,EAAS,MAAQD,EAAU,MAAM,QAAQf,CAAI,CACjD,CACJ,CACJ,CAAC,CAAC,EACD,UAAU,wBAAyB,CAAC,UAAY,CAE7C,MAAO,CACH,MAAO,GACP,QAAS,mBACT,KAAM,SAAmCU,EAAOC,EAAMC,EAAOC,EAAM,CAE/D,SAASI,GAAY,CACjBP,EAAM,OAAO,IAAM,CACfG,EAAK,SAASD,EAAM,qBAAqB,CAC7C,CAAC,CACL,CAEAD,EAAK,KAAK,QAASM,CAAS,EAE5BP,EAAM,IAAI,WAAY,IAAM,CACxBC,EAAK,OAAO,QAASM,CAAS,CAClC,CAAC,CACL,CACJ,CACJ,CAAC,CAAC,EACD,UAAU,gCAAiC,CAAC,UAAY,CAErD,MAAO,CACH,MAAO,GACP,QAAS,CAAC,mBAAoB,gBAAgB,EAC9C,KAAM,SAAUP,EAAOC,EAAMC,EAAOE,EAAO,CAEvC,IAAMC,EAAYD,EAAM,CAAC,EACnBE,EAAWF,EAAM,CAAC,EAExB,SAASI,GAAO,CACZR,EAAM,OAAO,IAAM,CACXM,EAAS,MAAQD,EAAU,gBAC3BA,EAAU,UAAU,EAEpBA,EAAU,SAAS,CAE3B,CAAC,CACL,CAEAJ,EAAK,KAAK,QAASO,CAAI,EAEvBR,EAAM,IAAI,WAAY,IAAM,CACxBC,EAAK,OAAO,QAASO,CAAI,CAC7B,CAAC,CACL,CACJ,CACJ,CAAC,CAAC,ECnMF,QAAQ,OAAO,WAAW,EACrB,QAAQ,aAAc,CAAC,SAAU,SAAUC,EAAQ,CAGpD,IAAIC,EAAoB,mBACpBC,EAAuB,sBACvBC,EAAkC,8BAClCC,EAAmB,kBAEvB,SAASC,EAAeC,EAAM,CAC1B,OAAON,EAAO,KAAK,OAAQC,EAAoB,IAAMK,EAAK,YAAaA,EAAM,EAAI,CACrF,CACA,SAASC,EAAkBD,EAAM,CAC7B,OAAON,EAAO,KAAK,OAAQE,EAAsBI,EAAM,EAAI,CAC/D,CACA,SAASE,EAAyBF,EAAM,CACpC,OAAON,EAAO,KAAK,OAAQG,EAAiCG,EAAM,EAAI,CAC1E,CACA,SAASG,EAAcH,EAAM,CACzB,OAAON,EAAO,KAAK,OAAQI,EAAkBE,EAAM,EAAI,CAC3D,CAEA,MAAO,CACH,gBAAiBD,EACjB,mBAAoBE,EACpB,0BAA2BC,EAC3B,eAAgBC,EAChB,sBAAuB,SAAUC,EAAO,CACpC,OAAOV,EAAO,KAAK,OAAQ,+BAAgC,CAAC,MAAAU,CAAK,CAAC,CACtE,CACJ,CACJ,CAAC,CAAC,EC/BF,QAAQ,OAAO,WAAW,EACrB,QAAQ,UAAW,CAAC,SAAU,SAAUC,EAAQ,CAGjD,IAAIC,EAAiB,aAEjBC,EAAoB,gBAExB,SAASC,EAAgBC,EAAmB,CACxC,OAAOJ,EAAO,KAAK,OAAQC,EAAiBG,EAAW,KAAM,EAAI,CACrE,CACA,SAASC,EAAeC,EAAc,CAClC,OAAON,EAAO,KAAK,OAAQE,EAAoBI,EAAM,KAAM,EAAI,CACnE,CAEA,MAAO,CACH,YAAaH,EACb,WAAYE,CAChB,CACJ,CAAC,CAAC,ECpBF,QAAQ,OAAO,WAAW,EACrB,QAAQ,SAAU,CAAC,QAAS,SAAUE,EAAO,CAG9C,MAAO,CACH,KAAM,SAAUC,EAAQC,EAAKC,EAAMC,EAAS,CAIxC,OAAOJ,EAAM,CACT,IAAKE,EACL,OAAQD,EACR,QAAS,CACL,YAAa,mBACjB,EACA,KAAME,CACV,CAAC,CACL,CACJ,CACJ,CAAC,CAAC,ECnBN,QAAQ,OAAO,WAAW,EAErB,QAAQ,kBAAmB,CAAC,UAAY,CAErC,OAAO,SAA6BE,EAAM,CACtC,IAAIC,EAAW,SAAS,cAAc,UAAU,EAEhDA,EAAS,MAAM,SAAW,QAC1BA,EAAS,MAAM,IAAM,IACrBA,EAAS,MAAM,KAAO,IAEtBA,EAAS,MAAM,MAAQ,MACvBA,EAAS,MAAM,OAAS,MAExBA,EAAS,MAAM,QAAU,IAEzBA,EAAS,MAAM,OAAS,OACxBA,EAAS,MAAM,QAAU,OACzBA,EAAS,MAAM,UAAY,OAE3BA,EAAS,MAAM,WAAa,cAG5BA,EAAS,MAAQD,EAEjB,SAAS,KAAK,YAAYC,CAAQ,EAElCA,EAAS,OAAO,EAEhB,GAAI,CACA,SAAS,YAAY,MAAM,CAC/B,OAASC,EAAI,CACb,CAEA,SAAS,KAAK,YAAYD,CAAQ,CACtC,CACJ,CAAC,CAAC,ECpCN,QAAQ,OAAO,WAAW,EACrB,QAAQ,YACT,CACI,UAAW,SAASE,EAAS,CAEzB,SAASC,GAAY,CAErB,CAMA,OAAAA,EAAU,UAAU,SAAW,UAAW,CACtC,IAAIC,EAAgBF,EAAQ,UAAU,WAAaA,EAAQ,UAAU,QAAUA,EAAQ,MACvF,MAAO,2TAA2T,KAAKE,CAAa,GAAK,0kDAA0kD,KAAKA,EAAc,OAAO,EAAG,CAAC,CAAC,CACt8D,EAKAD,EAAU,UAAU,iBAAmB,UAAW,CAC9C,IAAIC,EAAgBF,EAAQ,UAAU,WAAaA,EAAQ,UAAU,QAAUA,EAAQ,MACvF,MAAO,sVAAsV,KAAKE,CAAa,GAAK,0kDAA0kD,KAAKA,EAAc,OAAO,EAAG,CAAC,CAAC,CACj+D,EAEAD,EAAU,UAAU,eAAiB,UAAW,CAC5C,OAAOD,EAAQ,UAAU,UAAU,MAAM,oBAAoB,CACjE,EAEO,IAAIC,CACf,CACJ,CAAC,EACA,UAAU,qBAAsB,CAAC,YAAa,SAAUE,EAAW,CAChE,MAAO,CACH,SAAU,IACV,KAAM,SAAUC,EAAOC,EAAM,CACrBF,EAAU,eAAe,GACzBE,EAAK,OAAO,CAEpB,CACJ,CACJ,CAAC,CAAC,EACD,UAAU,qBAAsB,CAAC,YAAa,SAAUF,EAAW,CAChE,MAAO,CACH,SAAU,IACV,QAAS,SAAUG,EAAO,CACtB,OAAAA,EAAM,SAAS,SAAS,EAEjB,SAAUF,EAAOC,EAAM,CACtBF,EAAU,eAAe,GACzBE,EAAK,YAAY,SAAS,CAElC,CACJ,CACJ,CACJ,CAAC,CAAC,EhDKNE,GACK,SAAS,sBAAuB,CAC7B,WAAY,KAChB,CAAC,EACA,OAAO,SAAWC,GAAkBA,EAAK,WAAc,EACvD,IAAI,CAAC,aAAc,iBAAkB,CAACC,EAAYC,IAAmB,CAClED,EAAW,IAAI,oBAAqB,IAAM,CACtCC,EAAe,UAAU,CAC7B,CAAC,CACL,CAAC,CAAC,EACD,IAAI,CACD,UAAW,SAAU,aAAc,WAAY,YAAa,CAACC,EAASC,EAAQH,EAAYI,EAAUC,IAAc,CAC1GF,EAAO,aACP,QAAQ,IAAI,qBAAqB,EAKrCH,EAAW,IAAI,qBAAsB,IAAM,CAEvC,QADIM,EAAU,QAAQ,QAAQ,SAAS,iBAAiB,cAAc,CAAC,EAC9DC,EAAI,EAAGC,EAAIF,EAAQ,OAAQC,EAAIC,EAAGD,IAAK,CAC5C,IAAIE,EAAKH,EAAQC,CAAC,EACdG,EAAY,cACZD,EAAG,UACHA,EAAG,UACE,OAAOC,CAAS,EAErBD,EAAG,UAAYA,EAAG,UAAU,QAAQ,IAAI,OAAO,SAASC,EAAU,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC,SAAU,IAAI,EAAG,GAAG,CAClH,CACJ,CAAC,EAMDV,EAAW,WAAa,UACxBA,EAAW,IAAI,sBAAuB,CAACW,EAAGC,EAASC,IAAQ,CACvDb,EAAW,WAAaY,EAAQ,QAAQ,KAC5C,CAAC,EAEDZ,EAAW,IAAI,sBAAuB,CAACW,EAAGC,EAASC,IAAQ,CACvDb,EAAW,SAAW,EAC1B,CAAC,EAED,IAAIc,EACJd,EAAW,IAAI,oBAAsBW,GAAM,CACvCG,EAAoB,OAAO,WAC/B,CAAC,EAEDd,EAAW,IAAI,aAAeW,GAAM,CAChC,WAAW,UAAY,CAAE,OAAO,SAAS,EAAGG,CAAiB,CAAG,CAAC,CACrE,CAAC,EAEDd,EAAW,IAAI,qBAAsB,CAACW,EAAGI,IAAS,CAC9CX,EAAS,UAAY,CACjB,OAAO,UAAa,KAAK,CAAE,MAAS,mBAAoB,CAAC,CAC7D,EAAG,EAAG,EAAK,CACf,CAAC,CAuBL,CACJ,CAAC,EACA,OAAO,CAAC,gBAAkBY,GAAkB,CACzC,IAAIC,EAAyB,eAC7BD,EAAc,SAAS,QAAQ,OAAOC,CAAsB,EAAI,OAEhE,IAAIC,EAAqB,CACrB,KACCC,GAAO,CACJ,IAAIC,EAAsB,CACtB,QAAUjB,IACNA,EAAO,QAAQc,CAAsB,EAAI,GAClCd,GAAUgB,EAAG,KAAKhB,CAAM,EAEvC,EACA,OAAOiB,CACX,CACJ,EAEAJ,EAAc,aAAa,KAAKE,CAAkB,CACtD,CAAC,CAAC,EACD,OAAO,CAAC,iBAAmBG,GAAmB,CAC3C,QAAQ,OAAOA,EAAe,SAAU,CACpC,SAAU,SACV,UAAW,MACf,CAAC,CACL,CAAC,CAAC,EAEF,OAAO,WACPvB,GAAU,QAAQ,iBACd,CACI,UAAW,CAEP,MAAMwB,CAAe,CAIjB,QAAQC,EAAc,CAClB,KAAK,KAAOA,CAChB,CAEA,SAAU,CACN,OAAO,KAAK,IAChB,CAEJ,CAEA,OAAO,IAAID,CACf,CACJ,CAAC", "names": ["require_ng_infinite_scroll", "__commonJSMin", "exports", "module", "$rootScope", "$window", "$interval", "THROTTLE_MILLISECONDS", "scope", "elem", "attrs", "changeContainer", "checkInterval", "checkWhenEnabled", "container", "handleInfiniteScrollContainer", "handleInfiniteScrollDisabled", "handleInfiniteScrollDistance", "handleInfiniteScrollUseDocumentBottom", "handler", "height", "immediateCheck", "offsetTop", "pageYOffset", "scrollDistance", "scrollEnabled", "throttle", "unregisterEventListener", "useDocumentBottom", "windowElement", "containerBottom", "containerTopOffset", "elementBottom", "remaining", "shouldScroll", "func", "wait", "later", "previous", "timeout", "now", "v", "newContainer", "require_angulartics", "__commonJSMin", "angular", "analytics", "angulartics", "objectName", "delay", "containsField", "registerFn", "onTimeout", "$analytics", "$analyticsRun", "analyticsOn", "exceptionTrack", "vm", "settings", "knownHandlers", "cache", "handlers", "handlerOptions", "bufferedHandler", "handlerName", "updateHandlers", "fn", "options", "handlerArgs", "$q", "handlerFn", "deferred", "currentArgs", "api", "optOut", "triggerRegister", "provider", "$injector", "apiWithInjector", "value", "routes", "keys", "filters", "register", "handlerSettings", "handlerDelay", "args", "index", "capitalize", "input", "match", "injector", "installHandlerRegisterFunction", "registerName", "startRegistering", "_provider", "_knownHandlers", "_installHandlerRegisterFunction", "key", "$rootScope", "$window", "matchesExcludedRoute", "url", "i", "excludedRoute", "arrayDifference", "a1", "a2", "result", "filterQueryString", "keysMatchArr", "thisType", "urlArr", "urlBase", "pairs", "matchedPairs", "listedKey", "matchedPairsArr", "whitelistQueryString", "blacklistQueryString", "filterUrlSegments", "segmentFiltersArr", "segments", "segmentFilter", "j", "pageTrack", "$location", "noRoutesOrStates", "$route", "route", "$state", "event", "current", "$transitions", "$transition$", "transitionOptions", "attr", "name", "$scope", "$element", "$attrs", "eventType", "trackingData", "isProperty", "propertyName", "$event", "eventName", "inferEventName", "$provide", "$delegate", "error", "cause", "isCommand", "element", "inferEventType", "s", "require_src", "__commonJSMin", "exports", "module", "require_angulartics_ga", "__commonJSMin", "window", "angular", "undefined", "$analyticsProvider", "$windowProvider", "$window", "pagePathCache", "path", "properties", "dispatchToGa", "action", "parsed", "getPage_", "error", "cause", "userId", "dimensionsAndMetrics", "prop", "transaction", "product", "i", "detectUniversalAnalytics", "gaNamespace", "detectClassicAnalytics", "customData", "key", "method", "command", "fieldsObj", "handler", "dispatchToClassic_", "dispatchToUniversal_", "shouldCopyHit", "uaCommand", "pluginName", "applyUniversalCall_", "commandArray", "commandClone", "accountName", "classicCommand", "classicCommandClone", "require_lib", "__commonJSMin", "exports", "module", "require_angulartics_scroll", "__commonJSMin", "window", "angular", "options", "$analytics", "$waypoint", "isProperty", "name", "cast", "value", "$scope", "$element", "$attrs", "properties", "attr", "require_lib", "__commonJSMin", "exports", "module", "require_hammer", "__commonJSMin", "exports", "module", "window", "document", "exportName", "undefined", "VENDOR_PREFIXES", "TEST_ELEMENT", "TYPE_FUNCTION", "round", "abs", "now", "setTimeoutContext", "fn", "timeout", "context", "bindFn", "invokeArrayArg", "arg", "each", "obj", "iterator", "i", "deprecate", "method", "name", "message", "deprecationMessage", "e", "stack", "log", "assign", "target", "output", "index", "source", "nextKey", "extend", "dest", "src", "merge", "keys", "inherit", "child", "base", "properties", "baseP", "childP", "boolOrFn", "val", "args", "ifUndefined", "val1", "val2", "addEventListeners", "types", "handler", "splitStr", "type", "removeEventListeners", "hasParent", "node", "parent", "inStr", "str", "find", "inArray", "findByKey", "toArray", "uniqueArray", "key", "sort", "results", "values", "a", "b", "prefixed", "property", "prefix", "prop", "camelProp", "_uniqueId", "uniqueId", "getWindowForElement", "element", "doc", "MOBILE_REGEX", "SUPPORT_TOUCH", "SUPPORT_POINTER_EVENTS", "SUPPORT_ONLY_TOUCH", "INPUT_TYPE_TOUCH", "INPUT_TYPE_PEN", "INPUT_TYPE_MOUSE", "INPUT_TYPE_KINECT", "COMPUTE_INTERVAL", "INPUT_START", "INPUT_MOVE", "INPUT_END", "INPUT_CANCEL", "DIRECTION_NONE", "DIRECTION_LEFT", "DIRECTION_RIGHT", "DIRECTION_UP", "DIRECTION_DOWN", "DIRECTION_HORIZONTAL", "DIRECTION_VERTICAL", "DIRECTION_ALL", "PROPS_XY", "PROPS_CLIENT_XY", "Input", "manager", "callback", "self", "ev", "createInputInstance", "Type", "inputClass", "PointerEventInput", "TouchInput", "TouchMouseInput", "MouseInput", "inputHandler", "eventType", "input", "pointersLen", "changedPointersLen", "isFirst", "isFinal", "computeInputData", "session", "pointers", "pointersLength", "simpleCloneInputData", "firstInput", "firstMultiple", "offsetCenter", "center", "getCenter", "getAngle", "getDistance", "computeDeltaXY", "getDirection", "overallVelocity", "getVelocity", "getScale", "getRotation", "computeIntervalInputData", "offset", "prevDelta", "prevInput", "last", "deltaTime", "velocity", "velocityX", "velocityY", "direction", "deltaX", "deltaY", "v", "x", "y", "p1", "p2", "props", "start", "end", "MOUSE_INPUT_MAP", "MOUSE_ELEMENT_EVENTS", "MOUSE_WINDOW_EVENTS", "POINTER_INPUT_MAP", "IE10_POINTER_TYPE_ENUM", "POINTER_ELEMENT_EVENTS", "POINTER_WINDOW_EVENTS", "store", "removePointer", "eventTypeNormalized", "pointerType", "isTouch", "storeIndex", "SINGLE_TOUCH_INPUT_MAP", "SINGLE_TOUCH_TARGET_EVENTS", "SINGLE_TOUCH_WINDOW_EVENTS", "SingleTouchInput", "touches", "normalizeSingleTouches", "all", "changed", "TOUCH_INPUT_MAP", "TOUCH_TARGET_EVENTS", "getTouches", "allTouches", "targetIds", "targetTouches", "changedTouches", "changedTargetTouches", "touch", "DEDUP_TIMEOUT", "DEDUP_DISTANCE", "inputEvent", "inputData", "isMouse", "recordTouches", "isSyntheticEvent", "eventData", "setLastTouch", "lastTouch", "lts", "removeLastTouch", "t", "dx", "dy", "PREFIXED_TOUCH_ACTION", "NATIVE_TOUCH_ACTION", "TOUCH_ACTION_COMPUTE", "TOUCH_ACTION_AUTO", "TOUCH_ACTION_MANIPULATION", "TOUCH_ACTION_NONE", "TOUCH_ACTION_PAN_X", "TOUCH_ACTION_PAN_Y", "TOUCH_ACTION_MAP", "getTouchActionProps", "TouchAction", "value", "actions", "recognizer", "cleanTouchActions", "srcEvent", "hasNone", "hasPanY", "hasPanX", "isTapPointer", "isTapMovement", "isTapTouchTime", "touchMap", "cssSupports", "STATE_POSSIBLE", "STATE_BEGAN", "STATE_CHANGED", "STATE_ENDED", "STATE_RECOGNIZED", "STATE_CANCELLED", "STATE_FAILED", "Recognizer", "options", "otherRecognizer", "simultaneous", "getRecognizerByNameIfManager", "requireFail", "state", "emit", "event", "stateStr", "inputDataClone", "directionStr", "AttrRecognizer", "optionPointers", "isRecognized", "isValid", "PanRecognizer", "hasMoved", "distance", "PinchRecognizer", "inOut", "PressRecognizer", "validPointers", "validMovement", "validTime", "RotateRecognizer", "SwipeRecognizer", "TapRecognizer", "validTouchTime", "validInterval", "validMultiTap", "tapCount", "Hammer", "Manager", "STOP", "FORCED_STOP", "toggleCssProps", "item", "force", "recognizers", "curRecognizer", "existing", "events", "handlers", "data", "triggerDomEvent", "add", "gestureEvent", "freeGlobal", "import_ng_infinite_scroll", "import_angulartics", "import_angulartics_google_analytics", "import_angulartics_scroll", "Hammer", "fliptoWeb", "window", "$locationProvider", "$stateProvider", "$urlRouterProvider", "routes", "config", "$stateParams", "representatives", "contacts", "params", "qs", "getRandomCacheNumber", "max", "min", "$window", "service", "headService", "vm", "scope", "element", "attrs", "teamSection", "scroller", "list", "img", "toggleActive", "value", "currentDistanceFromLeftOfScreenToLeftEdgeOfPhoto", "halfScreenSize", "halfElementSize", "desiredDistanceFromLeftOfScreenToLeftEdgeOfPhoto", "amountToScrollLeft", "currentScroll", "newScroll", "close", "e", "$http", "$stateParams", "$window", "$analytics", "headService", "vm", "options", "loc", "title", "response", "email", "error", "$http", "$sce", "$window", "$location", "$analytics", "$stateParams", "vm", "catSlug", "isResetCache", "qs", "article", "style", "response", "post", "email", "error", "$scope", "$window", "ApiService", "$analytics", "vm", "trackingInfo", "section", "data", "analyticsData", "obj", "dataObj", "i", "item", "response", "$window", "vm", "trackingInfo", "section", "val", "$compile", "$animate", "timezones", "callTimes", "ApiService", "$analytics", "$window", "$location", "templateUrl", "trackingInfo", "scope", "elem", "attrs", "section", "data", "analyticsData", "obj", "dataObj", "i", "item", "response", "widget", "_a", "token", "$scope", "ApiService", "$analytics", "vm", "trackingInfo", "section", "data", "analyticsData", "obj", "dataObj", "i", "item", "response", "$scope", "ApiService", "$analytics", "PartnerService", "$location", "Sections", "vm", "trackingInfo", "leadData", "analyticsData", "obj", "dataObj", "i", "item", "response", "$location", "link", "scope", "element", "attrs", "prestay", "Slide", "poststay", "photoAdvocacy", "superchargers", "obj", "nextActive", "availSlides", "next", "slide", "index", "slideOrder", "item", "$scope", "$scope", "$scope", "$scope", "$scope", "$scope", "$window", "options", "$waypoint", "$scope", "$element", "$attrs", "classToChange", "re", "offsets", "i", "$scope", "ApiService", "vm", "section", "leadType", "data", "response", "$scope", "Contacts", "_Representatives", "pool", "fallback", "name", "poolName", "redirect", "r", "fallbackName", "array", "min", "max", "Representatives", "introType", "name", "slug", "introType", "representatives", "copyToClipboard", "$location", "$timeout", "$window", "contacts", "vm", "fallbackGuy", "newPath", "website", "person", "contactPerson", "copyToClipboard", "$location", "$timeout", "$window", "contacts", "vm", "$http", "$stateParams", "$window", "ApiService", "vm", "options", "loc", "title", "response", "element", "className", "done", "link", "tl", "cancelled", "element", "done", "tl", "cancelled", "element", "done", "tl", "cancelled", "element", "done", "cancelled", "$compile", "$animate", "template", "scope", "elem", "attrs", "options", "loadingAnimation", "lastChild", "show", "SquashingMenuController", "name", "idx", "newIdx", "scope", "elem", "attrs", "ctrl", "menuName", "activeMenu", "hammertime", "scope", "element", "attrs", "toggleHoverClass", "isOn", "panel", "newActivePanel", "scope", "elem", "attrs", "hoverPanelsCtrl", "isActive", "toggleHoverClass", "setActivePanel", "removeActivePanel", "isOn", "$scope", "$element", "activeSlideIndex", "slide", "newActiveSlide", "scope", "elem", "attrs", "ctrl", "isActive", "toggleActiveClass", "isOn", "moveUp", "moveDown", "SectionsController", "sections", "onActiveSectionChange", "section", "rs", "sectionName", "scope", "elem", "attrs", "ctrl", "val", "setActive", "CarouselCardsDirectiveController", "value", "card", "c", "index", "activeIndex", "i", "parent", "elemsToTheLeft", "elemsToTheRight", "diff", "CarouselCardDirectiveController", "scope", "elem", "attrs", "ctrl", "ctrls", "cardsCtrl", "cardCtrl", "setActive", "move", "server", "GETSTARTEDPOSTURL", "PARTNERSIGNUPPOSTURL", "PARTNERS_PORTAL_SIGNUP_POST_URL", "CONTACTUSPOSTURL", "postGetStarted", "data", "postPartnerSignup", "postPartnersPortalSignup", "postContactUs", "email", "server", "GETNEWSPAGEURL", "GETARTICLEPOSTURL", "postGetNewsPage", "pageIndex", "postGetArticle", "slug", "$http", "method", "url", "data", "isAsync", "text", "textArea", "ex", "$window", "UserAgent", "navigatorInfo", "userAgent", "scope", "elem", "tElem", "fliptoWeb", "$sce", "$rootScope", "$templateCache", "$window", "config", "$timeout", "$interval", "foucEls", "i", "l", "el", "className", "e", "current", "pre", "beforeModalOffset", "view", "$httpProvider", "ANGULAR_REQUEST_HEADER", "requestInterceptor", "$q", "interceptorInstance", "$modalProvider", "PartnerService", "name"] }