{"version":3,"sources":["webpack:///./node_modules/intersection-observer/intersection-observer.js","webpack:///./node_modules/odometer/odometer.js"],"names":["window","IntersectionObserverEntry","prototype","Object","defineProperty","get","this","intersectionRatio","document","startDoc","doc","frame","getFrameElement","ownerDocument","registry","crossOriginUpdater","crossOriginRect","IntersectionObserver","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","_setupCrossOriginUpdater","boundingClientRect","intersectionRect","convertFromParentRect","top","bottom","left","right","width","height","forEach","observer","_checkForIntersections","_resetCrossOriginUpdater","observe","target","_observationTargets","some","item","element","nodeType","Error","_registerInstance","push","entry","_monitorIntersections","unobserve","filter","_unmonitorIntersections","length","_unregisterInstance","disconnect","_unmonitorAllIntersections","takeRecords","records","_queuedEntries","slice","_initThresholds","opt_threshold","threshold","Array","isArray","sort","t","i","a","isNaN","_parseRootMargin","opt_rootMargin","margins","split","map","margin","parts","exec","value","parseFloat","unit","win","defaultView","_monitoringDocuments","indexOf","callback","monitoringInterval","domObserver","setInterval","addEvent","MutationObserver","attributes","childList","characterData","subtree","_monitoringUnsubscribes","clearInterval","removeEvent","rootDoc","root","index","itemDoc","unsubscribe","splice","unsubscribes","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","targetRect","getBoundingClientRect","rootContainsTarget","_rootContainsTarget","oldEntry","_computeTargetAndRootIntersection","rootBounds","newEntry","time","performance","now","_hasCrossedThreshold","isIntersecting","_callback","getComputedStyle","display","rect1","rect2","parent","getParentNode","atRoot","parentRect","parentComputedStyle","frameRect","frameIntersect","body","documentElement","overflow","Math","max","min","isDoc","html","clientWidth","clientHeight","_expandRectByRootMargin","rect","_rootMarginValues","newRect","oldRatio","newRatio","thresholds","containsDeep","frameElement","e","ensureDOMRect","targetArea","intersectionArea","Number","toFixed","opt_options","fn","timeout","timer","options","bind","setTimeout","rootMargin","join","node","event","opt_useCapture","addEventListener","attachEvent","removeEventListener","detachEvent","el","err","y","x","parentBoundingRect","parentIntersectionRect","child","parentNode","assignedSlot","host","FORMAT_PARSER","Odometer","TRANSITION_SUPPORT","addClass","createFromHTML","fractionalPart","removeClass","requestAnimationFrame","round","transitionCheckStyles","trigger","truncate","wrapJQuery","_jQueryWrapped","_old","_ref","_ref1","__slice","createElement","style","transition","webkitTransition","mozTransition","oTransition","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","WebKitMutationObserver","MozMutationObserver","innerHTML","children","name","className","replace","RegExp","evt","createEvent","initEvent","dispatchEvent","Date","val","precision","pow","floor","ceil","property","_i","_len","_results","jQuery","old","odometer","apply","arguments","update","k","v","_base","_ref2","_this","duration","MAX_VALUES","resetFormat","cleanValue","renderInside","render","_ref3","inside","outerHTML","innerText","textContent","set","_error","watchForMutations","appendChild","mutations","newVal","watchMutations","startWatchingMutations","stopWatchingMutations","format","radix","bindTransitionEnd","renderEnqueued","transitionEndBound","fractional","parsed","repeating","classes","cls","match","newClasses","theme","test","ribbons","formatDigits","digit","valueDigit","wholePart","_j","_len1","digits","formatFunction","reverse","renderDigit","querySelector","insertDigit","addSpacer","toString","addDigit","newValue","diff","animate","offsetHeight","before","insertBefore","chr","extraClasses","spacer","resetted","substring","animation","animateSlide","animateCount","cur","last","start","tick","delta","fraction","getDigitCount","values","call","abs","log","getFractionalDigitCount","parser","resetDigits","boosted","digitCount","dist","end","fractionalCount","frames","incr","j","mark","numEl","oldValue","_k","_l","_len2","_m","removeChild","odometerOptions","init","elements","querySelectorAll","selector","doScroll","createEventObject","onreadystatechange","readyState","auto"],"mappings":"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","file":"vendor.f8a66b7757e5747f7cf7.bundle.js","sourcesContent":["/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n(function() {\n'use strict';\n\n// Exit early if we're not running in a browser.\nif (typeof window !== 'object') {\n return;\n}\n\n// Exit early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype,\n 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n}\n\n/**\n * Returns the embedding frame element, if any.\n * @param {!Document} doc\n * @return {!Element}\n */\nfunction getFrameElement(doc) {\n try {\n return doc.defaultView && doc.defaultView.frameElement || null;\n } catch (e) {\n // Ignore the error.\n return null;\n }\n}\n\n/**\n * A local reference to the root document.\n */\nvar document = (function(startDoc) {\n var doc = startDoc;\n var frame = getFrameElement(doc);\n while (frame) {\n doc = frame.ownerDocument;\n frame = getFrameElement(doc);\n }\n return doc;\n})(window.document);\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n/**\n * The signal updater for cross-origin intersection. When not null, it means\n * that the polyfill is configured to work in a cross-origin mode.\n * @type {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nvar crossOriginUpdater = null;\n\n/**\n * The current cross-origin intersection. Only used in the cross-origin mode.\n * @type {DOMRect|ClientRect}\n */\nvar crossOriginRect = null;\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = ensureDOMRect(entry.rootBounds);\n this.boundingClientRect = ensureDOMRect(entry.boundingClientRect);\n this.intersectionRect = ensureDOMRect(entry.intersectionRect || getEmptyRect());\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n // Round the intersection ratio to avoid floating point math issues:\n // https://github.com/w3c/IntersectionObserver/issues/324\n this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (\n options.root &&\n options.root.nodeType != 1 &&\n options.root.nodeType != 9\n ) {\n throw new Error('root must be a Document or Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(\n this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function(margin) {\n return margin.value + margin.unit;\n }).join(' ');\n\n /** @private @const {!Array} */\n this._monitoringDocuments = [];\n /** @private @const {!Array} */\n this._monitoringUnsubscribes = [];\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Sets up the polyfill in the cross-origin mode. The result is the\n * updater function that accepts two arguments: `boundingClientRect` and\n * `intersectionRect` - just as these fields would be available to the\n * parent via `IntersectionObserverEntry`. This function should be called\n * each time the iframe receives intersection information from the parent\n * window, e.g. via messaging.\n * @return {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nIntersectionObserver._setupCrossOriginUpdater = function() {\n if (!crossOriginUpdater) {\n /**\n * @param {DOMRect|ClientRect} boundingClientRect\n * @param {DOMRect|ClientRect} intersectionRect\n */\n crossOriginUpdater = function(boundingClientRect, intersectionRect) {\n if (!boundingClientRect || !intersectionRect) {\n crossOriginRect = getEmptyRect();\n } else {\n crossOriginRect = convertFromParentRect(boundingClientRect, intersectionRect);\n }\n registry.forEach(function(observer) {\n observer._checkForIntersections();\n });\n };\n }\n return crossOriginUpdater;\n};\n\n\n/**\n * Resets the cross-origin mode.\n */\nIntersectionObserver._resetCrossOriginUpdater = function() {\n crossOriginUpdater = null;\n crossOriginRect = null;\n};\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({element: target, entry: null});\n this._monitorIntersections(target.ownerDocument);\n this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n this._observationTargets =\n this._observationTargets.filter(function(item) {\n return item.element != target;\n });\n this._unmonitorIntersections(target.ownerDocument);\n if (this._observationTargets.length == 0) {\n this._unregisterInstance();\n }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n this._observationTargets = [];\n this._unmonitorAllIntersections();\n this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function(t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array} An array of margin objects with the keys\n * value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function(margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return {value: parseFloat(parts[1]), unit: parts[2]};\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function(doc) {\n var win = doc.defaultView;\n if (!win) {\n // Already destroyed.\n return;\n }\n if (this._monitoringDocuments.indexOf(doc) != -1) {\n // Already monitoring.\n return;\n }\n\n // Private state for monitoring.\n var callback = this._checkForIntersections;\n var monitoringInterval = null;\n var domObserver = null;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n monitoringInterval = win.setInterval(callback, this.POLL_INTERVAL);\n } else {\n addEvent(win, 'resize', callback, true);\n addEvent(doc, 'scroll', callback, true);\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in win) {\n domObserver = new win.MutationObserver(callback);\n domObserver.observe(doc, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n\n this._monitoringDocuments.push(doc);\n this._monitoringUnsubscribes.push(function() {\n // Get the window object again. When a friendly iframe is destroyed, it\n // will be null.\n var win = doc.defaultView;\n\n if (win) {\n if (monitoringInterval) {\n win.clearInterval(monitoringInterval);\n }\n removeEvent(win, 'resize', callback, true);\n }\n\n removeEvent(doc, 'scroll', callback, true);\n if (domObserver) {\n domObserver.disconnect();\n }\n });\n\n // Also monitor the parent.\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n if (doc != rootDoc) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._monitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function(doc) {\n var index = this._monitoringDocuments.indexOf(doc);\n if (index == -1) {\n return;\n }\n\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n\n // Check if any dependent targets are still remaining.\n var hasDependentTargets =\n this._observationTargets.some(function(item) {\n var itemDoc = item.element.ownerDocument;\n // Target is in this context.\n if (itemDoc == doc) {\n return true;\n }\n // Target is nested in this context.\n while (itemDoc && itemDoc != rootDoc) {\n var frame = getFrameElement(itemDoc);\n itemDoc = frame && frame.ownerDocument;\n if (itemDoc == doc) {\n return true;\n }\n }\n return false;\n });\n if (hasDependentTargets) {\n return;\n }\n\n // Unsubscribe.\n var unsubscribe = this._monitoringUnsubscribes[index];\n this._monitoringDocuments.splice(index, 1);\n this._monitoringUnsubscribes.splice(index, 1);\n unsubscribe();\n\n // Also unmonitor the parent.\n if (doc != rootDoc) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._unmonitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorAllIntersections = function() {\n var unsubscribes = this._monitoringUnsubscribes.slice(0);\n this._monitoringDocuments.length = 0;\n this._monitoringUnsubscribes.length = 0;\n for (var i = 0; i < unsubscribes.length; i++) {\n unsubscribes[i]();\n }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n if (!this.root && crossOriginUpdater && !crossOriginRect) {\n // Cross origin monitoring, but no initial data available yet.\n return;\n }\n\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function(item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget &&\n this._computeTargetAndRootIntersection(target, targetRect, rootRect);\n\n var rootBounds = null;\n if (!this._rootContainsTarget(target)) {\n rootBounds = getEmptyRect();\n } else if (!crossOriginUpdater || this.root) {\n rootBounds = rootRect;\n }\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: rootBounds,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} targetRect The bounding rect of the target.\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n function(target, targetRect, rootRect) {\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot && parent) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ?\n window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return null;\n\n if (parent == this.root || parent.nodeType == /* DOCUMENT */ 9) {\n atRoot = true;\n if (parent == this.root || parent == document) {\n if (crossOriginUpdater && !this.root) {\n if (!crossOriginRect ||\n crossOriginRect.width == 0 && crossOriginRect.height == 0) {\n // A 0-size cross-origin intersection means no-intersection.\n parent = null;\n parentRect = null;\n intersectionRect = null;\n } else {\n parentRect = crossOriginRect;\n }\n } else {\n parentRect = rootRect;\n }\n } else {\n // Check if there's a frame that can be navigated to.\n var frame = getParentNode(parent);\n var frameRect = frame && getBoundingClientRect(frame);\n var frameIntersect =\n frame &&\n this._computeTargetAndRootIntersection(frame, frameRect, rootRect);\n if (frameRect && frameIntersect) {\n parent = frame;\n parentRect = convertFromParentRect(frameRect, frameIntersect);\n } else {\n parent = null;\n intersectionRect = null;\n }\n }\n } else {\n // If the element has a non-visible overflow, and it's not the \n // or element, update the intersection rect.\n // Note: and cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n var doc = parent.ownerDocument;\n if (parent != doc.body &&\n parent != doc.documentElement &&\n parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n }\n if (!intersectionRect) break;\n parent = parent && getParentNode(parent);\n }\n return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {ClientRect} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n var rootRect;\n if (this.root && !isDoc(this.root)) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use / instead of window since scroll bars affect size.\n var doc = isDoc(this.root) ? this.root : document;\n var html = doc.documentElement;\n var body = doc.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {DOMRect|ClientRect} rect The rect object to expand.\n * @return {ClientRect} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n var margins = this._rootMarginValues.map(function(margin, i) {\n return margin.unit == 'px' ? margin.value :\n margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n function(oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ?\n oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ?\n newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio ||\n threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n return (\n containsDeep(rootDoc, target) &&\n (!this.root || rootDoc == target.ownerDocument)\n );\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function() {\n fn();\n timer = null;\n }, timeout);\n }\n };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.detachEvent == 'function') {\n node.detachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object|?ClientRect} The intersection rect or undefined if no\n * intersection is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return (width >= 0 && height >= 0) && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n } || null;\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {DOMRect|ClientRect} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {ClientRect} The empty rect.\n */\nfunction getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n}\n\n\n/**\n * Ensure that the result has all of the necessary fields of the DOMRect.\n * Specifically this ensures that `x` and `y` fields are set.\n *\n * @param {?DOMRect|?ClientRect} rect\n * @return {?DOMRect}\n */\nfunction ensureDOMRect(rect) {\n // A `DOMRect` object has `x` and `y` fields.\n if (!rect || 'x' in rect) {\n return rect;\n }\n // A IE's `ClientRect` type does not have `x` and `y`. The same is the case\n // for internally calculated Rect objects. For the purposes of\n // `IntersectionObserver`, it's sufficient to simply mirror `left` and `top`\n // for these fields.\n return {\n top: rect.top,\n y: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n };\n}\n\n\n/**\n * Inverts the intersection and bounding rect from the parent (frame) BCR to\n * the local BCR space.\n * @param {DOMRect|ClientRect} parentBoundingRect The parent's bound client rect.\n * @param {DOMRect|ClientRect} parentIntersectionRect The parent's own intersection rect.\n * @return {ClientRect} The local root bounding rect for the parent's children.\n */\nfunction convertFromParentRect(parentBoundingRect, parentIntersectionRect) {\n var top = parentIntersectionRect.top - parentBoundingRect.top;\n var left = parentIntersectionRect.left - parentBoundingRect.left;\n return {\n top: top,\n left: left,\n height: parentIntersectionRect.height,\n width: parentIntersectionRect.width,\n bottom: top + parentIntersectionRect.height,\n right: left + parentIntersectionRect.width\n };\n}\n\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n var parent = node.parentNode;\n\n if (node.nodeType == /* DOCUMENT */ 9 && node != document) {\n // If this node is a document node, look for the embedding frame.\n return getFrameElement(node);\n }\n\n // If the parent has element that is assigned through shadow root slot\n if (parent && parent.assignedSlot) {\n parent = parent.assignedSlot.parentNode\n }\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n\n return parent;\n}\n\n/**\n * Returns true if `node` is a Document.\n * @param {!Node} node\n * @returns {boolean}\n */\nfunction isDoc(node) {\n return node && node.nodeType === 9;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}());\n","(function() {\n var COUNT_FRAMERATE, COUNT_MS_PER_FRAME, DIGIT_FORMAT, DIGIT_HTML, DIGIT_SPEEDBOOST, DURATION, FORMAT_MARK_HTML, FORMAT_PARSER, FRAMERATE, FRAMES_PER_VALUE, MS_PER_FRAME, MutationObserver, Odometer, RIBBON_HTML, TRANSITION_END_EVENTS, TRANSITION_SUPPORT, VALUE_HTML, addClass, createFromHTML, fractionalPart, now, removeClass, requestAnimationFrame, round, transitionCheckStyles, trigger, truncate, wrapJQuery, _jQueryWrapped, _old, _ref, _ref1,\n __slice = [].slice;\n\n VALUE_HTML = '';\n\n RIBBON_HTML = '' + VALUE_HTML + '';\n\n DIGIT_HTML = '8' + RIBBON_HTML + '';\n\n FORMAT_MARK_HTML = '';\n\n DIGIT_FORMAT = '(,ddd).dd';\n\n FORMAT_PARSER = /^\\(?([^)]*)\\)?(?:(.)(d+))?$/;\n\n FRAMERATE = 30;\n\n DURATION = 2000;\n\n COUNT_FRAMERATE = 20;\n\n FRAMES_PER_VALUE = 2;\n\n DIGIT_SPEEDBOOST = .5;\n\n MS_PER_FRAME = 1000 / FRAMERATE;\n\n COUNT_MS_PER_FRAME = 1000 / COUNT_FRAMERATE;\n\n TRANSITION_END_EVENTS = 'transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd';\n\n transitionCheckStyles = document.createElement('div').style;\n\n TRANSITION_SUPPORT = (transitionCheckStyles.transition != null) || (transitionCheckStyles.webkitTransition != null) || (transitionCheckStyles.mozTransition != null) || (transitionCheckStyles.oTransition != null);\n\n requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;\n\n MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\n\n createFromHTML = function(html) {\n var el;\n el = document.createElement('div');\n el.innerHTML = html;\n return el.children[0];\n };\n\n removeClass = function(el, name) {\n return el.className = el.className.replace(new RegExp(\"(^| )\" + (name.split(' ').join('|')) + \"( |$)\", 'gi'), ' ');\n };\n\n addClass = function(el, name) {\n removeClass(el, name);\n return el.className += \" \" + name;\n };\n\n trigger = function(el, name) {\n var evt;\n if (document.createEvent != null) {\n evt = document.createEvent('HTMLEvents');\n evt.initEvent(name, true, true);\n return el.dispatchEvent(evt);\n }\n };\n\n now = function() {\n var _ref, _ref1;\n return (_ref = (_ref1 = window.performance) != null ? typeof _ref1.now === \"function\" ? _ref1.now() : void 0 : void 0) != null ? _ref : +(new Date);\n };\n\n round = function(val, precision) {\n if (precision == null) {\n precision = 0;\n }\n if (!precision) {\n return Math.round(val);\n }\n val *= Math.pow(10, precision);\n val += 0.5;\n val = Math.floor(val);\n return val /= Math.pow(10, precision);\n };\n\n truncate = function(val) {\n if (val < 0) {\n return Math.ceil(val);\n } else {\n return Math.floor(val);\n }\n };\n\n fractionalPart = function(val) {\n return val - round(val);\n };\n\n _jQueryWrapped = false;\n\n (wrapJQuery = function() {\n var property, _i, _len, _ref, _results;\n if (_jQueryWrapped) {\n return;\n }\n if (window.jQuery != null) {\n _jQueryWrapped = true;\n _ref = ['html', 'text'];\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n property = _ref[_i];\n _results.push((function(property) {\n var old;\n old = window.jQuery.fn[property];\n return window.jQuery.fn[property] = function(val) {\n var _ref1;\n if ((val == null) || (((_ref1 = this[0]) != null ? _ref1.odometer : void 0) == null)) {\n return old.apply(this, arguments);\n }\n return this[0].odometer.update(val);\n };\n })(property));\n }\n return _results;\n }\n })();\n\n setTimeout(wrapJQuery, 0);\n\n Odometer = (function() {\n function Odometer(options) {\n var e, k, property, v, _base, _i, _len, _ref, _ref1, _ref2,\n _this = this;\n this.options = options;\n this.el = this.options.el;\n if (this.el.odometer != null) {\n return this.el.odometer;\n }\n this.el.odometer = this;\n _ref = Odometer.options;\n for (k in _ref) {\n v = _ref[k];\n if (this.options[k] == null) {\n this.options[k] = v;\n }\n }\n if ((_base = this.options).duration == null) {\n _base.duration = DURATION;\n }\n this.MAX_VALUES = ((this.options.duration / MS_PER_FRAME) / FRAMES_PER_VALUE) | 0;\n this.resetFormat();\n this.value = this.cleanValue((_ref1 = this.options.value) != null ? _ref1 : '');\n this.renderInside();\n this.render();\n try {\n _ref2 = ['innerHTML', 'innerText', 'textContent'];\n for (_i = 0, _len = _ref2.length; _i < _len; _i++) {\n property = _ref2[_i];\n if (this.el[property] != null) {\n (function(property) {\n return Object.defineProperty(_this.el, property, {\n get: function() {\n var _ref3;\n if (property === 'innerHTML') {\n return _this.inside.outerHTML;\n } else {\n return (_ref3 = _this.inside.innerText) != null ? _ref3 : _this.inside.textContent;\n }\n },\n set: function(val) {\n return _this.update(val);\n }\n });\n })(property);\n }\n }\n } catch (_error) {\n e = _error;\n this.watchForMutations();\n }\n this;\n }\n\n Odometer.prototype.renderInside = function() {\n this.inside = document.createElement('div');\n this.inside.className = 'odometer-inside';\n this.el.innerHTML = '';\n return this.el.appendChild(this.inside);\n };\n\n Odometer.prototype.watchForMutations = function() {\n var e,\n _this = this;\n if (MutationObserver == null) {\n return;\n }\n try {\n if (this.observer == null) {\n this.observer = new MutationObserver(function(mutations) {\n var newVal;\n newVal = _this.el.innerText;\n _this.renderInside();\n _this.render(_this.value);\n return _this.update(newVal);\n });\n }\n this.watchMutations = true;\n return this.startWatchingMutations();\n } catch (_error) {\n e = _error;\n }\n };\n\n Odometer.prototype.startWatchingMutations = function() {\n if (this.watchMutations) {\n return this.observer.observe(this.el, {\n childList: true\n });\n }\n };\n\n Odometer.prototype.stopWatchingMutations = function() {\n var _ref;\n return (_ref = this.observer) != null ? _ref.disconnect() : void 0;\n };\n\n Odometer.prototype.cleanValue = function(val) {\n var _ref;\n if (typeof val === 'string') {\n val = val.replace((_ref = this.format.radix) != null ? _ref : '.', '');\n val = val.replace(/[.,]/g, '');\n val = val.replace('', '.');\n val = parseFloat(val, 10) || 0;\n }\n return round(val, this.format.precision);\n };\n\n Odometer.prototype.bindTransitionEnd = function() {\n var event, renderEnqueued, _i, _len, _ref, _results,\n _this = this;\n if (this.transitionEndBound) {\n return;\n }\n this.transitionEndBound = true;\n renderEnqueued = false;\n _ref = TRANSITION_END_EVENTS.split(' ');\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n event = _ref[_i];\n _results.push(this.el.addEventListener(event, function() {\n if (renderEnqueued) {\n return true;\n }\n renderEnqueued = true;\n setTimeout(function() {\n _this.render();\n renderEnqueued = false;\n return trigger(_this.el, 'odometerdone');\n }, 0);\n return true;\n }, false));\n }\n return _results;\n };\n\n Odometer.prototype.resetFormat = function() {\n var format, fractional, parsed, precision, radix, repeating, _ref, _ref1;\n format = (_ref = this.options.format) != null ? _ref : DIGIT_FORMAT;\n format || (format = 'd');\n parsed = FORMAT_PARSER.exec(format);\n if (!parsed) {\n throw new Error(\"Odometer: Unparsable digit format\");\n }\n _ref1 = parsed.slice(1, 4), repeating = _ref1[0], radix = _ref1[1], fractional = _ref1[2];\n precision = (fractional != null ? fractional.length : void 0) || 0;\n return this.format = {\n repeating: repeating,\n radix: radix,\n precision: precision\n };\n };\n\n Odometer.prototype.render = function(value) {\n var classes, cls, match, newClasses, theme, _i, _len;\n if (value == null) {\n value = this.value;\n }\n this.stopWatchingMutations();\n this.resetFormat();\n this.inside.innerHTML = '';\n theme = this.options.theme;\n classes = this.el.className.split(' ');\n newClasses = [];\n for (_i = 0, _len = classes.length; _i < _len; _i++) {\n cls = classes[_i];\n if (!cls.length) {\n continue;\n }\n if (match = /^odometer-theme-(.+)$/.exec(cls)) {\n theme = match[1];\n continue;\n }\n if (/^odometer(-|$)/.test(cls)) {\n continue;\n }\n newClasses.push(cls);\n }\n newClasses.push('odometer');\n if (!TRANSITION_SUPPORT) {\n newClasses.push('odometer-no-transitions');\n }\n if (theme) {\n newClasses.push(\"odometer-theme-\" + theme);\n } else {\n newClasses.push(\"odometer-auto-theme\");\n }\n this.el.className = newClasses.join(' ');\n this.ribbons = {};\n this.formatDigits(value);\n return this.startWatchingMutations();\n };\n\n Odometer.prototype.formatDigits = function(value) {\n var digit, valueDigit, valueString, wholePart, _i, _j, _len, _len1, _ref, _ref1;\n this.digits = [];\n if (this.options.formatFunction) {\n valueString = this.options.formatFunction(value);\n _ref = valueString.split('').reverse();\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n valueDigit = _ref[_i];\n if (valueDigit.match(/0-9/)) {\n digit = this.renderDigit();\n digit.querySelector('.odometer-value').innerHTML = valueDigit;\n this.digits.push(digit);\n this.insertDigit(digit);\n } else {\n this.addSpacer(valueDigit);\n }\n }\n } else {\n wholePart = !this.format.precision || !fractionalPart(value) || false;\n _ref1 = value.toString().split('').reverse();\n for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n digit = _ref1[_j];\n if (digit === '.') {\n wholePart = true;\n }\n this.addDigit(digit, wholePart);\n }\n }\n };\n\n Odometer.prototype.update = function(newValue) {\n var diff,\n _this = this;\n newValue = this.cleanValue(newValue);\n if (!(diff = newValue - this.value)) {\n return;\n }\n removeClass(this.el, 'odometer-animating-up odometer-animating-down odometer-animating');\n if (diff > 0) {\n addClass(this.el, 'odometer-animating-up');\n } else {\n addClass(this.el, 'odometer-animating-down');\n }\n this.stopWatchingMutations();\n this.animate(newValue);\n this.startWatchingMutations();\n setTimeout(function() {\n _this.el.offsetHeight;\n return addClass(_this.el, 'odometer-animating');\n }, 0);\n return this.value = newValue;\n };\n\n Odometer.prototype.renderDigit = function() {\n return createFromHTML(DIGIT_HTML);\n };\n\n Odometer.prototype.insertDigit = function(digit, before) {\n if (before != null) {\n return this.inside.insertBefore(digit, before);\n } else if (!this.inside.children.length) {\n return this.inside.appendChild(digit);\n } else {\n return this.inside.insertBefore(digit, this.inside.children[0]);\n }\n };\n\n Odometer.prototype.addSpacer = function(chr, before, extraClasses) {\n var spacer;\n spacer = createFromHTML(FORMAT_MARK_HTML);\n spacer.innerHTML = chr;\n if (extraClasses) {\n addClass(spacer, extraClasses);\n }\n return this.insertDigit(spacer, before);\n };\n\n Odometer.prototype.addDigit = function(value, repeating) {\n var chr, digit, resetted, _ref;\n if (repeating == null) {\n repeating = true;\n }\n if (value === '-') {\n return this.addSpacer(value, null, 'odometer-negation-mark');\n }\n if (value === '.') {\n return this.addSpacer((_ref = this.format.radix) != null ? _ref : '.', null, 'odometer-radix-mark');\n }\n if (repeating) {\n resetted = false;\n while (true) {\n if (!this.format.repeating.length) {\n if (resetted) {\n throw new Error(\"Bad odometer format without digits\");\n }\n this.resetFormat();\n resetted = true;\n }\n chr = this.format.repeating[this.format.repeating.length - 1];\n this.format.repeating = this.format.repeating.substring(0, this.format.repeating.length - 1);\n if (chr === 'd') {\n break;\n }\n this.addSpacer(chr);\n }\n }\n digit = this.renderDigit();\n digit.querySelector('.odometer-value').innerHTML = value;\n this.digits.push(digit);\n return this.insertDigit(digit);\n };\n\n Odometer.prototype.animate = function(newValue) {\n if (!TRANSITION_SUPPORT || this.options.animation === 'count') {\n return this.animateCount(newValue);\n } else {\n return this.animateSlide(newValue);\n }\n };\n\n Odometer.prototype.animateCount = function(newValue) {\n var cur, diff, last, start, tick,\n _this = this;\n if (!(diff = +newValue - this.value)) {\n return;\n }\n start = last = now();\n cur = this.value;\n return (tick = function() {\n var delta, dist, fraction;\n if ((now() - start) > _this.options.duration) {\n _this.value = newValue;\n _this.render();\n trigger(_this.el, 'odometerdone');\n return;\n }\n delta = now() - last;\n if (delta > COUNT_MS_PER_FRAME) {\n last = now();\n fraction = delta / _this.options.duration;\n dist = diff * fraction;\n cur += dist;\n _this.render(Math.round(cur));\n }\n if (requestAnimationFrame != null) {\n return requestAnimationFrame(tick);\n } else {\n return setTimeout(tick, COUNT_MS_PER_FRAME);\n }\n })();\n };\n\n Odometer.prototype.getDigitCount = function() {\n var i, max, value, values, _i, _len;\n values = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n for (i = _i = 0, _len = values.length; _i < _len; i = ++_i) {\n value = values[i];\n values[i] = Math.abs(value);\n }\n max = Math.max.apply(Math, values);\n return Math.ceil(Math.log(max + 1) / Math.log(10));\n };\n\n Odometer.prototype.getFractionalDigitCount = function() {\n var i, parser, parts, value, values, _i, _len;\n values = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n parser = /^\\-?\\d*\\.(\\d*?)0*$/;\n for (i = _i = 0, _len = values.length; _i < _len; i = ++_i) {\n value = values[i];\n values[i] = value.toString();\n parts = parser.exec(values[i]);\n if (parts == null) {\n values[i] = 0;\n } else {\n values[i] = parts[1].length;\n }\n }\n return Math.max.apply(Math, values);\n };\n\n Odometer.prototype.resetDigits = function() {\n this.digits = [];\n this.ribbons = [];\n this.inside.innerHTML = '';\n return this.resetFormat();\n };\n\n Odometer.prototype.animateSlide = function(newValue) {\n var boosted, cur, diff, digitCount, digits, dist, end, fractionalCount, frame, frames, i, incr, j, mark, numEl, oldValue, start, _base, _i, _j, _k, _l, _len, _len1, _len2, _m, _ref, _results;\n oldValue = this.value;\n fractionalCount = this.getFractionalDigitCount(oldValue, newValue);\n if (fractionalCount) {\n newValue = newValue * Math.pow(10, fractionalCount);\n oldValue = oldValue * Math.pow(10, fractionalCount);\n }\n if (!(diff = newValue - oldValue)) {\n return;\n }\n this.bindTransitionEnd();\n digitCount = this.getDigitCount(oldValue, newValue);\n digits = [];\n boosted = 0;\n for (i = _i = 0; 0 <= digitCount ? _i < digitCount : _i > digitCount; i = 0 <= digitCount ? ++_i : --_i) {\n start = truncate(oldValue / Math.pow(10, digitCount - i - 1));\n end = truncate(newValue / Math.pow(10, digitCount - i - 1));\n dist = end - start;\n if (Math.abs(dist) > this.MAX_VALUES) {\n frames = [];\n incr = dist / (this.MAX_VALUES + this.MAX_VALUES * boosted * DIGIT_SPEEDBOOST);\n cur = start;\n while ((dist > 0 && cur < end) || (dist < 0 && cur > end)) {\n frames.push(Math.round(cur));\n cur += incr;\n }\n if (frames[frames.length - 1] !== end) {\n frames.push(end);\n }\n boosted++;\n } else {\n frames = (function() {\n _results = [];\n for (var _j = start; start <= end ? _j <= end : _j >= end; start <= end ? _j++ : _j--){ _results.push(_j); }\n return _results;\n }).apply(this);\n }\n for (i = _k = 0, _len = frames.length; _k < _len; i = ++_k) {\n frame = frames[i];\n frames[i] = Math.abs(frame % 10);\n }\n digits.push(frames);\n }\n this.resetDigits();\n _ref = digits.reverse();\n for (i = _l = 0, _len1 = _ref.length; _l < _len1; i = ++_l) {\n frames = _ref[i];\n if (!this.digits[i]) {\n this.addDigit(' ', i >= fractionalCount);\n }\n if ((_base = this.ribbons)[i] == null) {\n _base[i] = this.digits[i].querySelector('.odometer-ribbon-inner');\n }\n this.ribbons[i].innerHTML = '';\n if (diff < 0) {\n frames = frames.reverse();\n }\n for (j = _m = 0, _len2 = frames.length; _m < _len2; j = ++_m) {\n frame = frames[j];\n numEl = document.createElement('div');\n numEl.className = 'odometer-value';\n numEl.innerHTML = frame;\n this.ribbons[i].appendChild(numEl);\n if (j === frames.length - 1) {\n addClass(numEl, 'odometer-last-value');\n }\n if (j === 0) {\n addClass(numEl, 'odometer-first-value');\n }\n }\n }\n if (start < 0) {\n this.addDigit('-');\n }\n mark = this.inside.querySelector('.odometer-radix-mark');\n if (mark != null) {\n mark.parent.removeChild(mark);\n }\n if (fractionalCount) {\n return this.addSpacer(this.format.radix, this.digits[fractionalCount - 1], 'odometer-radix-mark');\n }\n };\n\n return Odometer;\n\n })();\n\n Odometer.options = (_ref = window.odometerOptions) != null ? _ref : {};\n\n setTimeout(function() {\n var k, v, _base, _ref1, _results;\n if (window.odometerOptions) {\n _ref1 = window.odometerOptions;\n _results = [];\n for (k in _ref1) {\n v = _ref1[k];\n _results.push((_base = Odometer.options)[k] != null ? (_base = Odometer.options)[k] : _base[k] = v);\n }\n return _results;\n }\n }, 0);\n\n Odometer.init = function() {\n var el, elements, _i, _len, _ref1, _results;\n if (document.querySelectorAll == null) {\n return;\n }\n elements = document.querySelectorAll(Odometer.options.selector || '.odometer');\n _results = [];\n for (_i = 0, _len = elements.length; _i < _len; _i++) {\n el = elements[_i];\n _results.push(el.odometer = new Odometer({\n el: el,\n value: (_ref1 = el.innerText) != null ? _ref1 : el.textContent\n }));\n }\n return _results;\n };\n\n if ((((_ref1 = document.documentElement) != null ? _ref1.doScroll : void 0) != null) && (document.createEventObject != null)) {\n _old = document.onreadystatechange;\n document.onreadystatechange = function() {\n if (document.readyState === 'complete' && Odometer.options.auto !== false) {\n Odometer.init();\n }\n return _old != null ? _old.apply(this, arguments) : void 0;\n };\n } else {\n document.addEventListener('DOMContentLoaded', function() {\n if (Odometer.options.auto !== false) {\n return Odometer.init();\n }\n }, false);\n }\n\n if (typeof define === 'function' && define.amd) {\n define([], function() {\n return Odometer;\n });\n } else if (typeof exports !== \"undefined\" && exports !== null) {\n module.exports = Odometer;\n } else {\n window.Odometer = Odometer;\n }\n\n}).call(this);\n"],"sourceRoot":""}