UNPKG

component-counter

Version:
257 lines (197 loc) 15.7 kB
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ module.exports = "<div class=\"counter-digit\">0</div>"; },{}],2:[function(require,module,exports){ /** * Expose `parse`. */ module.exports = parse; /** * Tests for browser support. */ var div = document.createElement('div'); // Setup div.innerHTML = ' <link/><table></table><a href="/a">a</a><input type="checkbox"/>'; // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE var innerHTMLBug = !div.getElementsByTagName('link').length; div = undefined; /** * Wrap map from jquery. */ var map = { legend: [1, '<fieldset>', '</fieldset>'], tr: [2, '<table><tbody>', '</tbody></table>'], col: [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'], // for script/link/style tags to work in IE6-8, you have to wrap // in a div with a non-whitespace character in front, ha! _default: innerHTMLBug ? [1, 'X<div>', '</div>'] : [0, '', ''] }; map.td = map.th = [3, '<table><tbody><tr>', '</tr></tbody></table>']; map.option = map.optgroup = [1, '<select multiple="multiple">', '</select>']; map.thead = map.tbody = map.colgroup = map.caption = map.tfoot = [1, '<table>', '</table>']; map.polyline = map.ellipse = map.polygon = map.circle = map.text = map.line = map.path = map.rect = map.g = [1, '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">','</svg>']; /** * Parse `html` and return a DOM Node instance, which could be a TextNode, * HTML DOM Node of some kind (<div> for example), or a DocumentFragment * instance, depending on the contents of the `html` string. * * @param {String} html - HTML string to "domify" * @param {Document} doc - The `document` instance to create the Node for * @return {DOMNode} the TextNode, DOM Node, or DocumentFragment instance * @api private */ function parse(html, doc) { if ('string' != typeof html) throw new TypeError('String expected'); // default to the global `document` object if (!doc) doc = document; // tag name var m = /<([\w:]+)/.exec(html); if (!m) return doc.createTextNode(html); html = html.replace(/^\s+|\s+$/g, ''); // Remove leading/trailing whitespace var tag = m[1]; // body support if (tag == 'body') { var el = doc.createElement('html'); el.innerHTML = html; return el.removeChild(el.lastChild); } // wrap map var wrap = map[tag] || map._default; var depth = wrap[0]; var prefix = wrap[1]; var suffix = wrap[2]; var el = doc.createElement('div'); el.innerHTML = prefix + html + suffix; while (depth--) el = el.lastChild; // one element if (el.firstChild == el.lastChild) { return el.removeChild(el.firstChild); } // several elements var fragment = doc.createDocumentFragment(); while (el.firstChild) { fragment.appendChild(el.removeChild(el.firstChild)); } return fragment; } },{}],3:[function(require,module,exports){ module.exports = leftpad; function leftpad (str, len, ch) { str = String(str); var i = -1; ch || (ch = ' '); len = len - str.length; while (++i < len) { str = ch + str; } return str; } },{}],"counter":[function(require,module,exports){ /** * Module dependencies. */ var domify = require('domify'), digit = require('./digit.html'), pad = require('left-pad'); /** * Expose `Counter`. */ module.exports = Counter; /** * Initialize a new `Counter`. * * @api public */ function Counter(el, options) { if (!(this instanceof Counter)) return new Counter(el, options); options = options || {}; //container this.el = el || domify('<div class="counter"></div>'); //save options this.digitClass = options.digitClass; //list of digit elements this._digits = []; //display value this.n = 0; //ensure two digits by default this.digits(options.digits || 2); } /** * Set the total number of digits to `n`. * * @param {Number} n * @return {Counter} * @api public */ Counter.prototype.digits = function(n){ this.total = n; this.ensureDigits(n); return this; }; /** * Add a digit element. * * @api private */ Counter.prototype.addDigit = function(){ var el = domify(digit); if (this.digitClass) el.classList.add(this.digitClass); this._digits.push(el); this.el.appendChild(el); }; /** * Ensure at least `n` digits are available. * * @param {Number} n * @api private */ Counter.prototype.ensureDigits = function(n){ while (this._digits.length < n) { this.addDigit(); } }; /** * Update digit `i` with `val`. * * @param {Number} i * @param {String} val * @api private */ Counter.prototype.updateDigit = function(i, val){ var el = this._digits[i]; var n = parseInt(val, 10) + 1; if (n > 9) n = 0; el.textContent = val; }; /** * Update count to `n`. * * @param {Number} n * @return {Counter} * @api public */ Counter.prototype.update = function(n){ this.n = n; var str = pad(n.toString(), this.total, '0'); this.ensureDigits(this.total); for (var i = 0; i < this.total; ++i) { this.updateDigit(this.total - i - 1, str[this.total - i - 1]); } return this; }; },{"./digit.html":1,"domify":2,"left-pad":3}]},{},[]) //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0FwcERhdGEvUm9hbWluZy9ucG0vbm9kZV9tb2R1bGVzL3dhdGNoaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJkaWdpdC5odG1sIiwibm9kZV9tb2R1bGVzL2RvbWlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sZWZ0LXBhZC9pbmRleC5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwiY291bnRlci1kaWdpdFxcXCI+MDwvZGl2PlwiO1xuIiwiXG4vKipcbiAqIEV4cG9zZSBgcGFyc2VgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2U7XG5cbi8qKlxuICogVGVzdHMgZm9yIGJyb3dzZXIgc3VwcG9ydC5cbiAqL1xuXG52YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4vLyBTZXR1cFxuZGl2LmlubmVySFRNTCA9ICcgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPVwiL2FcIj5hPC9hPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIi8+Jztcbi8vIE1ha2Ugc3VyZSB0aGF0IGxpbmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6ZWQgY29ycmVjdGx5IGJ5IGlubmVySFRNTFxuLy8gVGhpcyByZXF1aXJlcyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRVxudmFyIGlubmVySFRNTEJ1ZyA9ICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKS5sZW5ndGg7XG5kaXYgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogV3JhcCBtYXAgZnJvbSBqcXVlcnkuXG4gKi9cblxudmFyIG1hcCA9IHtcbiAgbGVnZW5kOiBbMSwgJzxmaWVsZHNldD4nLCAnPC9maWVsZHNldD4nXSxcbiAgdHI6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxuICBjb2w6IFsyLCAnPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4nLCAnPC9jb2xncm91cD48L3RhYmxlPiddLFxuICAvLyBmb3Igc2NyaXB0L2xpbmsvc3R5bGUgdGFncyB0byB3b3JrIGluIElFNi04LCB5b3UgaGF2ZSB0byB3cmFwXG4gIC8vIGluIGEgZGl2IHdpdGggYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gZnJvbnQsIGhhIVxuICBfZGVmYXVsdDogaW5uZXJIVE1MQnVnID8gWzEsICdYPGRpdj4nLCAnPC9kaXY+J10gOiBbMCwgJycsICcnXVxufTtcblxubWFwLnRkID1cbm1hcC50aCA9IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddO1xuXG5tYXAub3B0aW9uID1cbm1hcC5vcHRncm91cCA9IFsxLCAnPHNlbGVjdCBtdWx0aXBsZT1cIm11bHRpcGxlXCI+JywgJzwvc2VsZWN0PiddO1xuXG5tYXAudGhlYWQgPVxubWFwLnRib2R5ID1cbm1hcC5jb2xncm91cCA9XG5tYXAuY2FwdGlvbiA9XG5tYXAudGZvb3QgPSBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXTtcblxubWFwLnBvbHlsaW5lID1cbm1hcC5lbGxpcHNlID1cbm1hcC5wb2x5Z29uID1cbm1hcC5jaXJjbGUgPVxubWFwLnRleHQgPVxubWFwLmxpbmUgPVxubWFwLnBhdGggPVxubWFwLnJlY3QgPVxubWFwLmcgPSBbMSwgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZlcnNpb249XCIxLjFcIj4nLCc8L3N2Zz4nXTtcblxuLyoqXG4gKiBQYXJzZSBgaHRtbGAgYW5kIHJldHVybiBhIERPTSBOb2RlIGluc3RhbmNlLCB3aGljaCBjb3VsZCBiZSBhIFRleHROb2RlLFxuICogSFRNTCBET00gTm9kZSBvZiBzb21lIGtpbmQgKDxkaXY+IGZvciBleGFtcGxlKSwgb3IgYSBEb2N1bWVudEZyYWdtZW50XG4gKiBpbnN0YW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgYGh0bWxgIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaHRtbCAtIEhUTUwgc3RyaW5nIHRvIFwiZG9taWZ5XCJcbiAqIEBwYXJhbSB7RG9jdW1lbnR9IGRvYyAtIFRoZSBgZG9jdW1lbnRgIGluc3RhbmNlIHRvIGNyZWF0ZSB0aGUgTm9kZSBmb3JcbiAqIEByZXR1cm4ge0RPTU5vZGV9IHRoZSBUZXh0Tm9kZSwgRE9NIE5vZGUsIG9yIERvY3VtZW50RnJhZ21lbnQgaW5zdGFuY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKGh0bWwsIGRvYykge1xuICBpZiAoJ3N0cmluZycgIT0gdHlwZW9mIGh0bWwpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCcpO1xuXG4gIC8vIGRlZmF1bHQgdG8gdGhlIGdsb2JhbCBgZG9jdW1lbnRgIG9iamVjdFxuICBpZiAoIWRvYykgZG9jID0gZG9jdW1lbnQ7XG5cbiAgLy8gdGFnIG5hbWVcbiAgdmFyIG0gPSAvPChbXFx3Ol0rKS8uZXhlYyhodG1sKTtcbiAgaWYgKCFtKSByZXR1cm4gZG9jLmNyZWF0ZVRleHROb2RlKGh0bWwpO1xuXG4gIGh0bWwgPSBodG1sLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTsgLy8gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuXG4gIHZhciB0YWcgPSBtWzFdO1xuXG4gIC8vIGJvZHkgc3VwcG9ydFxuICBpZiAodGFnID09ICdib2R5Jykge1xuICAgIHZhciBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdodG1sJyk7XG4gICAgZWwuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gZWwucmVtb3ZlQ2hpbGQoZWwubGFzdENoaWxkKTtcbiAgfVxuXG4gIC8vIHdyYXAgbWFwXG4gIHZhciB3cmFwID0gbWFwW3RhZ10gfHwgbWFwLl9kZWZhdWx0O1xuICB2YXIgZGVwdGggPSB3cmFwWzBdO1xuICB2YXIgcHJlZml4ID0gd3JhcFsxXTtcbiAgdmFyIHN1ZmZpeCA9IHdyYXBbMl07XG4gIHZhciBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZWwuaW5uZXJIVE1MID0gcHJlZml4ICsgaHRtbCArIHN1ZmZpeDtcbiAgd2hpbGUgKGRlcHRoLS0pIGVsID0gZWwubGFzdENoaWxkO1xuXG4gIC8vIG9uZSBlbGVtZW50XG4gIGlmIChlbC5maXJzdENoaWxkID09IGVsLmxhc3RDaGlsZCkge1xuICAgIHJldHVybiBlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKTtcbiAgfVxuXG4gIC8vIHNldmVyYWwgZWxlbWVudHNcbiAgdmFyIGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgd2hpbGUgKGVsLmZpcnN0Q2hpbGQpIHtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKSk7XG4gIH1cblxuICByZXR1cm4gZnJhZ21lbnQ7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGxlZnRwYWQ7XG5cbmZ1bmN0aW9uIGxlZnRwYWQgKHN0ciwgbGVuLCBjaCkge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcblxuICB2YXIgaSA9IC0xO1xuXG4gIGNoIHx8IChjaCA9ICcgJyk7XG4gIGxlbiA9IGxlbiAtIHN0ci5sZW5ndGg7XG5cblxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgc3RyID0gY2ggKyBzdHI7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuIiwiLyoqXHJcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXHJcbiAqL1xyXG5cclxudmFyIGRvbWlmeSA9IHJlcXVpcmUoJ2RvbWlmeScpLFxyXG4gIGRpZ2l0ID0gcmVxdWlyZSgnLi9kaWdpdC5odG1sJyksXHJcbiAgcGFkID0gcmVxdWlyZSgnbGVmdC1wYWQnKTtcclxuXHJcbi8qKlxyXG4gKiBFeHBvc2UgYENvdW50ZXJgLlxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ291bnRlcjtcclxuXHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZSBhIG5ldyBgQ291bnRlcmAuXHJcbiAqXHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gQ291bnRlcihlbCwgb3B0aW9ucykge1xyXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDb3VudGVyKSkgcmV0dXJuIG5ldyBDb3VudGVyKGVsLCBvcHRpb25zKTtcclxuXHJcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIC8vY29udGFpbmVyXHJcbiAgdGhpcy5lbCA9IGVsIHx8IGRvbWlmeSgnPGRpdiBjbGFzcz1cImNvdW50ZXJcIj48L2Rpdj4nKTtcclxuXHJcbiAgLy9zYXZlIG9wdGlvbnNcclxuICB0aGlzLmRpZ2l0Q2xhc3MgPSBvcHRpb25zLmRpZ2l0Q2xhc3M7XHJcblxyXG4gIC8vbGlzdCBvZiBkaWdpdCBlbGVtZW50c1xyXG4gIHRoaXMuX2RpZ2l0cyA9IFtdO1xyXG5cclxuICAvL2Rpc3BsYXkgdmFsdWVcclxuICB0aGlzLm4gPSAwO1xyXG5cclxuICAvL2Vuc3VyZSB0d28gZGlnaXRzIGJ5IGRlZmF1bHRcclxuICB0aGlzLmRpZ2l0cyhvcHRpb25zLmRpZ2l0cyB8fCAyKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIHRvdGFsIG51bWJlciBvZiBkaWdpdHMgdG8gYG5gLlxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gblxyXG4gKiBAcmV0dXJuIHtDb3VudGVyfVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkNvdW50ZXIucHJvdG90eXBlLmRpZ2l0cyA9IGZ1bmN0aW9uKG4pe1xyXG4gIHRoaXMudG90YWwgPSBuO1xyXG4gIHRoaXMuZW5zdXJlRGlnaXRzKG4pO1xyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZCBhIGRpZ2l0IGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBhcGkgcHJpdmF0ZVxyXG4gKi9cclxuXHJcbkNvdW50ZXIucHJvdG90eXBlLmFkZERpZ2l0ID0gZnVuY3Rpb24oKXtcclxuICB2YXIgZWwgPSBkb21pZnkoZGlnaXQpO1xyXG5cclxuICBpZiAodGhpcy5kaWdpdENsYXNzKSBlbC5jbGFzc0xpc3QuYWRkKHRoaXMuZGlnaXRDbGFzcyk7XHJcblxyXG4gIHRoaXMuX2RpZ2l0cy5wdXNoKGVsKTtcclxuICB0aGlzLmVsLmFwcGVuZENoaWxkKGVsKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbnN1cmUgYXQgbGVhc3QgYG5gIGRpZ2l0cyBhcmUgYXZhaWxhYmxlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gblxyXG4gKiBAYXBpIHByaXZhdGVcclxuICovXHJcblxyXG5Db3VudGVyLnByb3RvdHlwZS5lbnN1cmVEaWdpdHMgPSBmdW5jdGlvbihuKXtcclxuICB3aGlsZSAodGhpcy5fZGlnaXRzLmxlbmd0aCA8IG4pIHtcclxuICAgIHRoaXMuYWRkRGlnaXQoKTtcclxuICB9XHJcbn07XHJcblxyXG4vKipcclxuICogVXBkYXRlIGRpZ2l0IGBpYCB3aXRoIGB2YWxgLlxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gaVxyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsXHJcbiAqIEBhcGkgcHJpdmF0ZVxyXG4gKi9cclxuXHJcbkNvdW50ZXIucHJvdG90eXBlLnVwZGF0ZURpZ2l0ID0gZnVuY3Rpb24oaSwgdmFsKXtcclxuICB2YXIgZWwgPSB0aGlzLl9kaWdpdHNbaV07XHJcbiAgdmFyIG4gPSBwYXJzZUludCh2YWwsIDEwKSArIDE7XHJcbiAgaWYgKG4gPiA5KSBuID0gMDtcclxuXHJcbiAgZWwudGV4dENvbnRlbnQgPSB2YWw7XHJcbn07XHJcblxyXG4vKipcclxuICogVXBkYXRlIGNvdW50IHRvIGBuYC5cclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IG5cclxuICogQHJldHVybiB7Q291bnRlcn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5Db3VudGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihuKXtcclxuICB0aGlzLm4gPSBuO1xyXG4gIHZhciBzdHIgPSBwYWQobi50b1N0cmluZygpLCB0aGlzLnRvdGFsLCAnMCcpO1xyXG5cclxuICB0aGlzLmVuc3VyZURpZ2l0cyh0aGlzLnRvdGFsKTtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudG90YWw7ICsraSkge1xyXG4gICAgdGhpcy51cGRhdGVEaWdpdCh0aGlzLnRvdGFsIC0gaSAtIDEsIHN0clt0aGlzLnRvdGFsIC0gaSAtIDFdKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG4iXX0=