TEXT 364
Socket.io.js Guest on 17th April 2021 09:59:47 AM
  1. (function webpackUniversalModuleDefinition(root, factory) {
  2.       if(typeof exports === 'object' && typeof module === 'object')
  3.             module.exports = factory();
  4.       else if(typeof define === 'function' && define.amd)
  5.             define([], factory);
  6.       else if(typeof exports === 'object')
  7.             exports["io"] = factory();
  8.       else
  9.             root["io"] = factory();
  10. })(this, function() {
  11. return /******/ (function(modules) { // webpackBootstrap
  12. /******/    // The module cache
  13. /******/    var installedModules = {};
  14.  
  15. /******/    // The require function
  16. /******/    function __webpack_require__(moduleId) {
  17.  
  18. /******/          // Check if module is in cache
  19. /******/          if(installedModules[moduleId])
  20. /******/                return installedModules[moduleId].exports;
  21.  
  22. /******/          // Create a new module (and put it into the cache)
  23. /******/          var module = installedModules[moduleId] = {
  24. /******/                exports: {},
  25. /******/                id: moduleId,
  26. /******/                loaded: false
  27. /******/          };
  28.  
  29. /******/          // Execute the module function
  30. /******/          modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  31.  
  32. /******/          // Flag the module as loaded
  33. /******/          module.loaded = true;
  34.  
  35. /******/          // Return the exports of the module
  36. /******/          return module.exports;
  37. /******/    }
  38.  
  39.  
  40. /******/    // expose the modules object (__webpack_modules__)
  41. /******/    __webpack_require__.m = modules;
  42.  
  43. /******/    // expose the module cache
  44. /******/    __webpack_require__.c = installedModules;
  45.  
  46. /******/    // __webpack_public_path__
  47. /******/    __webpack_require__.p = "";
  48.  
  49. /******/    // Load entry module and return exports
  50. /******/    return __webpack_require__(0);
  51. /******/ })
  52. /************************************************************************/
  53. /******/ ([
  54. /* 0 */
  55. /***/ function(module, exports, __webpack_require__) {
  56.  
  57.       'use strict';
  58.  
  59.       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  60.  
  61.       /**
  62.        * Module dependencies.
  63.        */
  64.  
  65.       var url = __webpack_require__(1);
  66.       var parser = __webpack_require__(7);
  67.       var Manager = __webpack_require__(17);
  68.       var debug = __webpack_require__(3)('socket.io-client');
  69.  
  70.       /**
  71.        * Module exports.
  72.        */
  73.  
  74.       module.exports = exports = lookup;
  75.  
  76.       /**
  77.        * Managers cache.
  78.        */
  79.  
  80.       var cache = exports.managers = {};
  81.  
  82.       /**
  83.        * Looks up an existing `Manager` for multiplexing.
  84.        * If the user summons:
  85.        *
  86.        *   `io('http://localhost/a');`
  87.        *   `io('http://localhost/b');`
  88.        *
  89.        * We reuse the existing instance based on same scheme/port/host,
  90.        * and we initialize sockets for each namespace.
  91.        *
  92.        * @api public
  93.        */
  94.  
  95.       function lookup(uri, opts) {
  96.         if ((typeof uri === 'undefined' ? 'undefined' : _typeof(uri)) === 'object') {
  97.           opts = uri;
  98.           uri = undefined;
  99.         }
  100.  
  101.         opts = opts || {};
  102.  
  103.         var parsed = url(uri);
  104.         var source = parsed.source;
  105.         var id = parsed.id;
  106.         var path = parsed.path;
  107.         var sameNamespace = cache[id] && path in cache[id].nsps;
  108.         var newConnection = opts.forceNew || opts['force new connection'] || false === opts.multiplex || sameNamespace;
  109.  
  110.         var io;
  111.  
  112.         if (newConnection) {
  113.           debug('ignoring socket cache for %s', source);
  114.           io = Manager(source, opts);
  115.         } else {
  116.           if (!cache[id]) {
  117.             debug('new io instance for %s', source);
  118.             cache[id] = Manager(source, opts);
  119.           }
  120.           io = cache[id];
  121.         }
  122.         if (parsed.query && !opts.query) {
  123.           opts.query = parsed.query;
  124.         } else if (opts && 'object' === _typeof(opts.query)) {
  125.           opts.query = encodeQueryString(opts.query);
  126.         }
  127.         return io.socket(parsed.path, opts);
  128.       }
  129.       /**
  130.        *  Helper method to parse query objects to string.
  131.        * @param {object} query
  132.        * @returns {string}
  133.        */
  134.       function encodeQueryString(obj) {
  135.         var str = [];
  136.         for (var p in obj) {
  137.           if (obj.hasOwnProperty(p)) {
  138.             str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));
  139.           }
  140.         }
  141.         return str.join('&');
  142.       }
  143.       /**
  144.        * Protocol version.
  145.        *
  146.        * @api public
  147.        */
  148.  
  149.       exports.protocol = parser.protocol;
  150.  
  151.       /**
  152.        * `connect`.
  153.        *
  154.        * @param {String} uri
  155.        * @api public
  156.        */
  157.  
  158.       exports.connect = lookup;
  159.  
  160.       /**
  161.        * Expose constructors for standalone build.
  162.        *
  163.        * @api public
  164.        */
  165.  
  166.       exports.Manager = __webpack_require__(17);
  167.       exports.Socket = __webpack_require__(45);
  168.  
  169. /***/ },
  170. /* 1 */
  171. /***/ function(module, exports, __webpack_require__) {
  172.  
  173.       /* WEBPACK VAR INJECTION */(function(global) {'use strict';
  174.  
  175.       /**
  176.        * Module dependencies.
  177.        */
  178.  
  179.       var parseuri = __webpack_require__(2);
  180.       var debug = __webpack_require__(3)('socket.io-client:url');
  181.  
  182.       /**
  183.        * Module exports.
  184.        */
  185.  
  186.       module.exports = url;
  187.  
  188.       /**
  189.        * URL parser.
  190.        *
  191.        * @param {String} url
  192.        * @param {Object} An object meant to mimic window.location.
  193.        *                 Defaults to window.location.
  194.        * @api public
  195.        */
  196.  
  197.       function url(uri, loc) {
  198.         var obj = uri;
  199.  
  200.         // default to window.location
  201.         loc = loc || global.location;
  202.         if (null == uri) uri = loc.protocol + '//' + loc.host;
  203.  
  204.         // relative path support
  205.         if ('string' === typeof uri) {
  206.           if ('/' === uri.charAt(0)) {
  207.             if ('/' === uri.charAt(1)) {
  208.               uri = loc.protocol + uri;
  209.             } else {
  210.               uri = loc.host + uri;
  211.             }
  212.           }
  213.  
  214.           if (!/^(https?|wss?):\/\//.test(uri)) {
  215.             debug('protocol-less url %s', uri);
  216.             if ('undefined' !== typeof loc) {
  217.               uri = loc.protocol + '//' + uri;
  218.             } else {
  219.               uri = 'https://' + uri;
  220.             }
  221.           }
  222.  
  223.           // parse
  224.           debug('parse %s', uri);
  225.           obj = parseuri(uri);
  226.         }
  227.  
  228.         // make sure we treat `localhost:80` and `localhost` equally
  229.         if (!obj.port) {
  230.           if (/^(http|ws)$/.test(obj.protocol)) {
  231.             obj.port = '80';
  232.           } else if (/^(http|ws)s$/.test(obj.protocol)) {
  233.             obj.port = '443';
  234.           }
  235.         }
  236.  
  237.         obj.path = obj.path || '/';
  238.  
  239.         var ipv6 = obj.host.indexOf(':') !== -1;
  240.         var host = ipv6 ? '[' + obj.host + ']' : obj.host;
  241.  
  242.         // define unique id
  243.         obj.id = obj.protocol + '://' + host + ':' + obj.port;
  244.         // define href
  245.         obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : ':' + obj.port);
  246.  
  247.         return obj;
  248.       }
  249.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  250.  
  251. /***/ },
  252. /* 2 */
  253. /***/ function(module, exports) {
  254.  
  255.       /**
  256.        * Parses an URI
  257.        *
  258.        * @author Steven Levithan <stevenlevithan.com> (MIT license)
  259.        * @api private
  260.        */
  261.  
  262.       var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
  263.  
  264.       var parts = [
  265.           'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'
  266.       ];
  267.  
  268.       module.exports = function parseuri(str) {
  269.           var src = str,
  270.               b = str.indexOf('['),
  271.               e = str.indexOf(']');
  272.  
  273.           if (b != -1 && e != -1) {
  274.               str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);
  275.           }
  276.  
  277.           var m = re.exec(str || ''),
  278.               uri = {},
  279.               i = 14;
  280.  
  281.           while (i--) {
  282.               uri[parts[i]] = m[i] || '';
  283.           }
  284.  
  285.           if (b != -1 && e != -1) {
  286.               uri.source = src;
  287.               uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');
  288.               uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');
  289.               uri.ipv6uri = true;
  290.           }
  291.  
  292.           return uri;
  293.       };
  294.  
  295.  
  296. /***/ },
  297. /* 3 */
  298. /***/ function(module, exports, __webpack_require__) {
  299.  
  300.       /* WEBPACK VAR INJECTION */(function(process) {
  301.       /**
  302.        * This is the web browser implementation of `debug()`.
  303.        *
  304.        * Expose `debug()` as the module.
  305.        */
  306.  
  307.       exports = module.exports = __webpack_require__(5);
  308.       exports.log = log;
  309.       exports.formatArgs = formatArgs;
  310.       exports.save = save;
  311.       exports.load = load;
  312.       exports.useColors = useColors;
  313.       exports.storage = 'undefined' != typeof chrome
  314.                      && 'undefined' != typeof chrome.storage
  315.                         ? chrome.storage.local
  316.                         : localstorage();
  317.  
  318.       /**
  319.        * Colors.
  320.        */
  321.  
  322.       exports.colors = [
  323.         'lightseagreen',
  324.         'forestgreen',
  325.         'goldenrod',
  326.         'dodgerblue',
  327.         'darkorchid',
  328.         'crimson'
  329.       ];
  330.  
  331.       /**
  332.        * Currently only WebKit-based Web Inspectors, Firefox >= v31,
  333.        * and the Firebug extension (any Firefox version) are known
  334.        * to support "%c" CSS customizations.
  335.        *
  336.        * TODO: add a `localStorage` variable to explicitly enable/disable colors
  337.        */
  338.  
  339.       function useColors() {
  340.         // is webkit? http://stackoverflow.com/a/16459606/376773
  341.         // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
  342.         return (typeof document !== 'undefined' && 'WebkitAppearance' in document.documentElement.style) ||
  343.           // is firebug? http://stackoverflow.com/a/398120/376773
  344.           (window.console && (console.firebug || (console.exception && console.table))) ||
  345.           // is firefox >= v31?
  346.           // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
  347.           (navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31);
  348.       }
  349.  
  350.       /**
  351.        * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
  352.        */
  353.  
  354.       exports.formatters.j = function(v) {
  355.         try {
  356.           return JSON.stringify(v);
  357.         } catch (err) {
  358.           return '[UnexpectedJSONParseError]: ' + err.message;
  359.         }
  360.       };
  361.  
  362.  
  363.       /**
  364.        * Colorize log arguments if enabled.
  365.        *
  366.        * @api public
  367.        */
  368.  
  369.       function formatArgs() {
  370.         var args = arguments;
  371.         var useColors = this.useColors;
  372.  
  373.         args[0] = (useColors ? '%c' : '')
  374.           + this.namespace
  375.           + (useColors ? ' %c' : ' ')
  376.           + args[0]
  377.           + (useColors ? '%c ' : ' ')
  378.           + '+' + exports.humanize(this.diff);
  379.  
  380.         if (!useColors) return args;
  381.  
  382.         var c = 'color: ' + this.color;
  383.         args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));
  384.  
  385.         // the final "%c" is somewhat tricky, because there could be other
  386.         // arguments passed either before or after the %c, so we need to
  387.         // figure out the correct index to insert the CSS into
  388.         var index = 0;
  389.         var lastC = 0;
  390.         args[0].replace(/%[a-z%]/g, function(match) {
  391.           if ('%%' === match) return;
  392.           index++;
  393.           if ('%c' === match) {
  394.             // we only are interested in the *last* %c
  395.             // (the user may have provided their own)
  396.             lastC = index;
  397.           }
  398.         });
  399.  
  400.         args.splice(lastC, 0, c);
  401.         return args;
  402.       }
  403.  
  404.       /**
  405.        * Invokes `console.log()` when available.
  406.        * No-op when `console.log` is not a "function".
  407.        *
  408.        * @api public
  409.        */
  410.  
  411.       function log() {
  412.         // this hackery is required for IE8/9, where
  413.         // the `console.log` function doesn't have 'apply'
  414.         return 'object' === typeof console
  415.           && console.log
  416.           && Function.prototype.apply.call(console.log, console, arguments);
  417.       }
  418.  
  419.       /**
  420.        * Save `namespaces`.
  421.        *
  422.        * @param {String} namespaces
  423.        * @api private
  424.        */
  425.  
  426.       function save(namespaces) {
  427.         try {
  428.           if (null == namespaces) {
  429.             exports.storage.removeItem('debug');
  430.           } else {
  431.             exports.storage.debug = namespaces;
  432.           }
  433.         } catch(e) {}
  434.       }
  435.  
  436.       /**
  437.        * Load `namespaces`.
  438.        *
  439.        * @return {String} returns the previously persisted debug modes
  440.        * @api private
  441.        */
  442.  
  443.       function load() {
  444.         var r;
  445.         try {
  446.           return exports.storage.debug;
  447.         } catch(e) {}
  448.  
  449.         // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
  450.         if (typeof process !== 'undefined' && 'env' in process) {
  451.           return process.env.DEBUG;
  452.         }
  453.       }
  454.  
  455.       /**
  456.        * Enable namespaces listed in `localStorage.debug` initially.
  457.        */
  458.  
  459.       exports.enable(load());
  460.  
  461.       /**
  462.        * Localstorage attempts to return the localstorage.
  463.        *
  464.        * This is necessary because safari throws
  465.        * when a user disables cookies/localstorage
  466.        * and you attempt to access it.
  467.        *
  468.        * @return {LocalStorage}
  469.        * @api private
  470.        */
  471.  
  472.       function localstorage(){
  473.         try {
  474.           return window.localStorage;
  475.         } catch (e) {}
  476.       }
  477.  
  478.       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
  479.  
  480. /***/ },
  481. /* 4 */
  482. /***/ function(module, exports) {
  483.  
  484.       // shim for using process in browser
  485.       var process = module.exports = {};
  486.  
  487.       // cached from whatever global is present so that test runners that stub it
  488.       // don't break things.  But we need to wrap it in a try catch in case it is
  489.       // wrapped in strict mode code which doesn't define any globals.  It's inside a
  490.       // function because try/catches deoptimize in certain engines.
  491.  
  492.       var cachedSetTimeout;
  493.       var cachedClearTimeout;
  494.  
  495.       function defaultSetTimout() {
  496.           throw new Error('setTimeout has not been defined');
  497.       }
  498.       function defaultClearTimeout () {
  499.           throw new Error('clearTimeout has not been defined');
  500.       }
  501.       (function () {
  502.           try {
  503.               if (typeof setTimeout === 'function') {
  504.                   cachedSetTimeout = setTimeout;
  505.               } else {
  506.                   cachedSetTimeout = defaultSetTimout;
  507.               }
  508.           } catch (e) {
  509.               cachedSetTimeout = defaultSetTimout;
  510.           }
  511.           try {
  512.               if (typeof clearTimeout === 'function') {
  513.                   cachedClearTimeout = clearTimeout;
  514.               } else {
  515.                   cachedClearTimeout = defaultClearTimeout;
  516.               }
  517.           } catch (e) {
  518.               cachedClearTimeout = defaultClearTimeout;
  519.           }
  520.       } ())
  521.       function runTimeout(fun) {
  522.           if (cachedSetTimeout === setTimeout) {
  523.               //normal enviroments in sane situations
  524.               return setTimeout(fun, 0);
  525.           }
  526.           // if setTimeout wasn't available but was latter defined
  527.           if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
  528.               cachedSetTimeout = setTimeout;
  529.               return setTimeout(fun, 0);
  530.           }
  531.           try {
  532.               // when when somebody has screwed with setTimeout but no I.E. maddness
  533.               return cachedSetTimeout(fun, 0);
  534.           } catch(e){
  535.               try {
  536.                   // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  537.                   return cachedSetTimeout.call(null, fun, 0);
  538.               } catch(e){
  539.                   // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
  540.                   return cachedSetTimeout.call(this, fun, 0);
  541.               }
  542.           }
  543.  
  544.  
  545.       }
  546.       function runClearTimeout(marker) {
  547.           if (cachedClearTimeout === clearTimeout) {
  548.               //normal enviroments in sane situations
  549.               return clearTimeout(marker);
  550.           }
  551.           // if clearTimeout wasn't available but was latter defined
  552.           if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
  553.               cachedClearTimeout = clearTimeout;
  554.               return clearTimeout(marker);
  555.           }
  556.           try {
  557.               // when when somebody has screwed with setTimeout but no I.E. maddness
  558.               return cachedClearTimeout(marker);
  559.           } catch (e){
  560.               try {
  561.                   // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
  562.                   return cachedClearTimeout.call(null, marker);
  563.               } catch (e){
  564.                   // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
  565.                   // Some versions of I.E. have different rules for clearTimeout vs setTimeout
  566.                   return cachedClearTimeout.call(this, marker);
  567.               }
  568.           }
  569.  
  570.  
  571.  
  572.       }
  573.       var queue = [];
  574.       var draining = false;
  575.       var currentQueue;
  576.       var queueIndex = -1;
  577.  
  578.       function cleanUpNextTick() {
  579.           if (!draining || !currentQueue) {
  580.               return;
  581.           }
  582.           draining = false;
  583.           if (currentQueue.length) {
  584.               queue = currentQueue.concat(queue);
  585.           } else {
  586.               queueIndex = -1;
  587.           }
  588.           if (queue.length) {
  589.               drainQueue();
  590.           }
  591.       }
  592.  
  593.       function drainQueue() {
  594.           if (draining) {
  595.               return;
  596.           }
  597.           var timeout = runTimeout(cleanUpNextTick);
  598.           draining = true;
  599.  
  600.           var len = queue.length;
  601.           while(len) {
  602.               currentQueue = queue;
  603.               queue = [];
  604.               while (++queueIndex < len) {
  605.                   if (currentQueue) {
  606.                       currentQueue[queueIndex].run();
  607.                   }
  608.               }
  609.               queueIndex = -1;
  610.               len = queue.length;
  611.           }
  612.           currentQueue = null;
  613.           draining = false;
  614.           runClearTimeout(timeout);
  615.       }
  616.  
  617.       process.nextTick = function (fun) {
  618.           var args = new Array(arguments.length - 1);
  619.           if (arguments.length > 1) {
  620.               for (var i = 1; i < arguments.length; i++) {
  621.                   args[i - 1] = arguments[i];
  622.               }
  623.           }
  624.           queue.push(new Item(fun, args));
  625.           if (queue.length === 1 && !draining) {
  626.               runTimeout(drainQueue);
  627.           }
  628.       };
  629.  
  630.       // v8 likes predictible objects
  631.       function Item(fun, array) {
  632.           this.fun = fun;
  633.           this.array = array;
  634.       }
  635.       Item.prototype.run = function () {
  636.           this.fun.apply(null, this.array);
  637.       };
  638.       process.title = 'browser';
  639.       process.browser = true;
  640.       process.env = {};
  641.       process.argv = [];
  642.       process.version = ''; // empty string to avoid regexp issues
  643.       process.versions = {};
  644.  
  645.       function noop() {}
  646.  
  647.       process.on = noop;
  648.       process.addListener = noop;
  649.       process.once = noop;
  650.       process.off = noop;
  651.       process.removeListener = noop;
  652.       process.removeAllListeners = noop;
  653.       process.emit = noop;
  654.  
  655.       process.binding = function (name) {
  656.           throw new Error('process.binding is not supported');
  657.       };
  658.  
  659.       process.cwd = function () { return '/' };
  660.       process.chdir = function (dir) {
  661.           throw new Error('process.chdir is not supported');
  662.       };
  663.       process.umask = function() { return 0; };
  664.  
  665.  
  666. /***/ },
  667. /* 5 */
  668. /***/ function(module, exports, __webpack_require__) {
  669.  
  670.      
  671.       /**
  672.        * This is the common logic for both the Node.js and web browser
  673.        * implementations of `debug()`.
  674.        *
  675.        * Expose `debug()` as the module.
  676.        */
  677.  
  678.       exports = module.exports = debug.debug = debug;
  679.       exports.coerce = coerce;
  680.       exports.disable = disable;
  681.       exports.enable = enable;
  682.       exports.enabled = enabled;
  683.       exports.humanize = __webpack_require__(6);
  684.  
  685.       /**
  686.        * The currently active debug mode names, and names to skip.
  687.        */
  688.  
  689.       exports.names = [];
  690.       exports.skips = [];
  691.  
  692.       /**
  693.        * Map of special "%n" handling functions, for the debug "format" argument.
  694.        *
  695.        * Valid key names are a single, lowercased letter, i.e. "n".
  696.        */
  697.  
  698.       exports.formatters = {};
  699.  
  700.       /**
  701.        * Previously assigned color.
  702.        */
  703.  
  704.       var prevColor = 0;
  705.  
  706.       /**
  707.        * Previous log timestamp.
  708.        */
  709.  
  710.       var prevTime;
  711.  
  712.       /**
  713.        * Select a color.
  714.        *
  715.        * @return {Number}
  716.        * @api private
  717.        */
  718.  
  719.       function selectColor() {
  720.         return exports.colors[prevColor++ % exports.colors.length];
  721.       }
  722.  
  723.       /**
  724.        * Create a debugger with the given `namespace`.
  725.        *
  726.        * @param {String} namespace
  727.        * @return {Function}
  728.        * @api public
  729.        */
  730.  
  731.       function debug(namespace) {
  732.  
  733.         // define the `disabled` version
  734.         function disabled() {
  735.         }
  736.         disabled.enabled = false;
  737.  
  738.         // define the `enabled` version
  739.         function enabled() {
  740.  
  741.           var self = enabled;
  742.  
  743.           // set `diff` timestamp
  744.           var curr = +new Date();
  745.           var ms = curr - (prevTime || curr);
  746.           self.diff = ms;
  747.           self.prev = prevTime;
  748.           self.curr = curr;
  749.           prevTime = curr;
  750.  
  751.           // add the `color` if not set
  752.           if (null == self.useColors) self.useColors = exports.useColors();
  753.           if (null == self.color && self.useColors) self.color = selectColor();
  754.  
  755.           var args = new Array(arguments.length);
  756.           for (var i = 0; i < args.length; i++) {
  757.             args[i] = arguments[i];
  758.           }
  759.  
  760.           args[0] = exports.coerce(args[0]);
  761.  
  762.           if ('string' !== typeof args[0]) {
  763.             // anything else let's inspect with %o
  764.             args = ['%o'].concat(args);
  765.           }
  766.  
  767.           // apply any `formatters` transformations
  768.           var index = 0;
  769.           args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {
  770.             // if we encounter an escaped % then don't increase the array index
  771.             if (match === '%%') return match;
  772.             index++;
  773.             var formatter = exports.formatters[format];
  774.             if ('function' === typeof formatter) {
  775.               var val = args[index];
  776.               match = formatter.call(self, val);
  777.  
  778.               // now we need to remove `args[index]` since it's inlined in the `format`
  779.               args.splice(index, 1);
  780.               index--;
  781.             }
  782.             return match;
  783.           });
  784.  
  785.           // apply env-specific formatting
  786.           args = exports.formatArgs.apply(self, args);
  787.  
  788.           var logFn = enabled.log || exports.log || console.log.bind(console);
  789.           logFn.apply(self, args);
  790.         }
  791.         enabled.enabled = true;
  792.  
  793.         var fn = exports.enabled(namespace) ? enabled : disabled;
  794.  
  795.         fn.namespace = namespace;
  796.  
  797.         return fn;
  798.       }
  799.  
  800.       /**
  801.        * Enables a debug mode by namespaces. This can include modes
  802.        * separated by a colon and wildcards.
  803.        *
  804.        * @param {String} namespaces
  805.        * @api public
  806.        */
  807.  
  808.       function enable(namespaces) {
  809.         exports.save(namespaces);
  810.  
  811.         var split = (namespaces || '').split(/[\s,]+/);
  812.         var len = split.length;
  813.  
  814.         for (var i = 0; i < len; i++) {
  815.           if (!split[i]) continue; // ignore empty strings
  816.           namespaces = split[i].replace(/[\\^$+?.()|[\]{}]/g, '\\$&').replace(/\*/g, '.*?');
  817.           if (namespaces[0] === '-') {
  818.             exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
  819.           } else {
  820.             exports.names.push(new RegExp('^' + namespaces + '$'));
  821.           }
  822.         }
  823.       }
  824.  
  825.       /**
  826.        * Disable debug output.
  827.        *
  828.        * @api public
  829.        */
  830.  
  831.       function disable() {
  832.         exports.enable('');
  833.       }
  834.  
  835.       /**
  836.        * Returns true if the given mode name is enabled, false otherwise.
  837.        *
  838.        * @param {String} name
  839.        * @return {Boolean}
  840.        * @api public
  841.        */
  842.  
  843.       function enabled(name) {
  844.         var i, len;
  845.         for (i = 0, len = exports.skips.length; i < len; i++) {
  846.           if (exports.skips[i].test(name)) {
  847.             return false;
  848.           }
  849.         }
  850.         for (i = 0, len = exports.names.length; i < len; i++) {
  851.           if (exports.names[i].test(name)) {
  852.             return true;
  853.           }
  854.         }
  855.         return false;
  856.       }
  857.  
  858.       /**
  859.        * Coerce `val`.
  860.        *
  861.        * @param {Mixed} val
  862.        * @return {Mixed}
  863.        * @api private
  864.        */
  865.  
  866.       function coerce(val) {
  867.         if (val instanceof Error) return val.stack || val.message;
  868.         return val;
  869.       }
  870.  
  871.  
  872. /***/ },
  873. /* 6 */
  874. /***/ function(module, exports) {
  875.  
  876.       /**
  877.        * Helpers.
  878.        */
  879.  
  880.       var s = 1000
  881.       var m = s * 60
  882.       var h = m * 60
  883.       var d = h * 24
  884.       var y = d * 365.25
  885.  
  886.       /**
  887.        * Parse or format the given `val`.
  888.        *
  889.        * Options:
  890.        *
  891.        *  - `long` verbose formatting [false]
  892.        *
  893.        * @param {String|Number} val
  894.        * @param {Object} options
  895.        * @throws {Error} throw an error if val is not a non-empty string or a number
  896.        * @return {String|Number}
  897.        * @api public
  898.        */
  899.  
  900.       module.exports = function (val, options) {
  901.         options = options || {}
  902.         var type = typeof val
  903.         if (type === 'string' && val.length > 0) {
  904.           return parse(val)
  905.         } else if (type === 'number' && isNaN(val) === false) {
  906.           return options.long ?
  907.                         fmtLong(val) :
  908.                         fmtShort(val)
  909.         }
  910.         throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val))
  911.       }
  912.  
  913.       /**
  914.        * Parse the given `str` and return milliseconds.
  915.        *
  916.        * @param {String} str
  917.        * @return {Number}
  918.        * @api private
  919.        */
  920.  
  921.       function parse(str) {
  922.         str = String(str)
  923.         if (str.length > 10000) {
  924.           return
  925.         }
  926.         var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str)
  927.         if (!match) {
  928.           return
  929.         }
  930.         var n = parseFloat(match[1])
  931.         var type = (match[2] || 'ms').toLowerCase()
  932.         switch (type) {
  933.           case 'years':
  934.           case 'year':
  935.           case 'yrs':
  936.           case 'yr':
  937.           case 'y':
  938.             return n * y
  939.           case 'days':
  940.           case 'day':
  941.           case 'd':
  942.             return n * d
  943.           case 'hours':
  944.           case 'hour':
  945.           case 'hrs':
  946.           case 'hr':
  947.           case 'h':
  948.             return n * h
  949.           case 'minutes':
  950.           case 'minute':
  951.           case 'mins':
  952.           case 'min':
  953.           case 'm':
  954.             return n * m
  955.           case 'seconds':
  956.           case 'second':
  957.           case 'secs':
  958.           case 'sec':
  959.           case 's':
  960.             return n * s
  961.           case 'milliseconds':
  962.           case 'millisecond':
  963.           case 'msecs':
  964.           case 'msec':
  965.           case 'ms':
  966.             return n
  967.           default:
  968.             return undefined
  969.         }
  970.       }
  971.  
  972.       /**
  973.        * Short format for `ms`.
  974.        *
  975.        * @param {Number} ms
  976.        * @return {String}
  977.        * @api private
  978.        */
  979.  
  980.       function fmtShort(ms) {
  981.         if (ms >= d) {
  982.           return Math.round(ms / d) + 'd'
  983.         }
  984.         if (ms >= h) {
  985.           return Math.round(ms / h) + 'h'
  986.         }
  987.         if (ms >= m) {
  988.           return Math.round(ms / m) + 'm'
  989.         }
  990.         if (ms >= s) {
  991.           return Math.round(ms / s) + 's'
  992.         }
  993.         return ms + 'ms'
  994.       }
  995.  
  996.       /**
  997.        * Long format for `ms`.
  998.        *
  999.        * @param {Number} ms
  1000.        * @return {String}
  1001.        * @api private
  1002.        */
  1003.  
  1004.       function fmtLong(ms) {
  1005.         return plural(ms, d, 'day') ||
  1006.           plural(ms, h, 'hour') ||
  1007.           plural(ms, m, 'minute') ||
  1008.           plural(ms, s, 'second') ||
  1009.           ms + ' ms'
  1010.       }
  1011.  
  1012.       /**
  1013.        * Pluralization helper.
  1014.        */
  1015.  
  1016.       function plural(ms, n, name) {
  1017.         if (ms < n) {
  1018.           return
  1019.         }
  1020.         if (ms < n * 1.5) {
  1021.           return Math.floor(ms / n) + ' ' + name
  1022.         }
  1023.         return Math.ceil(ms / n) + ' ' + name + 's'
  1024.       }
  1025.  
  1026.  
  1027. /***/ },
  1028. /* 7 */
  1029. /***/ function(module, exports, __webpack_require__) {
  1030.  
  1031.      
  1032.       /**
  1033.        * Module dependencies.
  1034.        */
  1035.  
  1036.       var debug = __webpack_require__(8)('socket.io-parser');
  1037.       var json = __webpack_require__(11);
  1038.       var Emitter = __webpack_require__(13);
  1039.       var binary = __webpack_require__(14);
  1040.       var isBuf = __webpack_require__(16);
  1041.  
  1042.       /**
  1043.        * Protocol version.
  1044.        *
  1045.        * @api public
  1046.        */
  1047.  
  1048.       exports.protocol = 4;
  1049.  
  1050.       /**
  1051.        * Packet types.
  1052.        *
  1053.        * @api public
  1054.        */
  1055.  
  1056.       exports.types = [
  1057.         'CONNECT',
  1058.         'DISCONNECT',
  1059.         'EVENT',
  1060.         'ACK',
  1061.         'ERROR',
  1062.         'BINARY_EVENT',
  1063.         'BINARY_ACK'
  1064.       ];
  1065.  
  1066.       /**
  1067.        * Packet type `connect`.
  1068.        *
  1069.        * @api public
  1070.        */
  1071.  
  1072.       exports.CONNECT = 0;
  1073.  
  1074.       /**
  1075.        * Packet type `disconnect`.
  1076.        *
  1077.        * @api public
  1078.        */
  1079.  
  1080.       exports.DISCONNECT = 1;
  1081.  
  1082.       /**
  1083.        * Packet type `event`.
  1084.        *
  1085.        * @api public
  1086.        */
  1087.  
  1088.       exports.EVENT = 2;
  1089.  
  1090.       /**
  1091.        * Packet type `ack`.
  1092.        *
  1093.        * @api public
  1094.        */
  1095.  
  1096.       exports.ACK = 3;
  1097.  
  1098.       /**
  1099.        * Packet type `error`.
  1100.        *
  1101.        * @api public
  1102.        */
  1103.  
  1104.       exports.ERROR = 4;
  1105.  
  1106.       /**
  1107.        * Packet type 'binary event'
  1108.        *
  1109.        * @api public
  1110.        */
  1111.  
  1112.       exports.BINARY_EVENT = 5;
  1113.  
  1114.       /**
  1115.        * Packet type `binary ack`. For acks with binary arguments.
  1116.        *
  1117.        * @api public
  1118.        */
  1119.  
  1120.       exports.BINARY_ACK = 6;
  1121.  
  1122.       /**
  1123.        * Encoder constructor.
  1124.        *
  1125.        * @api public
  1126.        */
  1127.  
  1128.       exports.Encoder = Encoder;
  1129.  
  1130.       /**
  1131.        * Decoder constructor.
  1132.        *
  1133.        * @api public
  1134.        */
  1135.  
  1136.       exports.Decoder = Decoder;
  1137.  
  1138.       /**
  1139.        * A socket.io Encoder instance
  1140.        *
  1141.        * @api public
  1142.        */
  1143.  
  1144.       function Encoder() {}
  1145.  
  1146.       /**
  1147.        * Encode a packet as a single string if non-binary, or as a
  1148.        * buffer sequence, depending on packet type.
  1149.        *
  1150.        * @param {Object} obj - packet object
  1151.        * @param {Function} callback - function to handle encodings (likely engine.write)
  1152.        * @return Calls callback with Array of encodings
  1153.        * @api public
  1154.        */
  1155.  
  1156.       Encoder.prototype.encode = function(obj, callback){
  1157.         debug('encoding packet %j', obj);
  1158.  
  1159.         if (exports.BINARY_EVENT == obj.type || exports.BINARY_ACK == obj.type) {
  1160.           encodeAsBinary(obj, callback);
  1161.         }
  1162.         else {
  1163.           var encoding = encodeAsString(obj);
  1164.           callback([encoding]);
  1165.         }
  1166.       };
  1167.  
  1168.       /**
  1169.        * Encode packet as string.
  1170.        *
  1171.        * @param {Object} packet
  1172.        * @return {String} encoded
  1173.        * @api private
  1174.        */
  1175.  
  1176.       function encodeAsString(obj) {
  1177.         var str = '';
  1178.         var nsp = false;
  1179.  
  1180.         // first is type
  1181.         str += obj.type;
  1182.  
  1183.         // attachments if we have them
  1184.         if (exports.BINARY_EVENT == obj.type || exports.BINARY_ACK == obj.type) {
  1185.           str += obj.attachments;
  1186.           str += '-';
  1187.         }
  1188.  
  1189.         // if we have a namespace other than `/`
  1190.         // we append it followed by a comma `,`
  1191.         if (obj.nsp && '/' != obj.nsp) {
  1192.           nsp = true;
  1193.           str += obj.nsp;
  1194.         }
  1195.  
  1196.         // immediately followed by the id
  1197.         if (null != obj.id) {
  1198.           if (nsp) {
  1199.             str += ',';
  1200.             nsp = false;
  1201.           }
  1202.           str += obj.id;
  1203.         }
  1204.  
  1205.         // json data
  1206.         if (null != obj.data) {
  1207.           if (nsp) str += ',';
  1208.           str += json.stringify(obj.data);
  1209.         }
  1210.  
  1211.         debug('encoded %j as %s', obj, str);
  1212.         return str;
  1213.       }
  1214.  
  1215.       /**
  1216.        * Encode packet as 'buffer sequence' by removing blobs, and
  1217.        * deconstructing packet into object with placeholders and
  1218.        * a list of buffers.
  1219.        *
  1220.        * @param {Object} packet
  1221.        * @return {Buffer} encoded
  1222.        * @api private
  1223.        */
  1224.  
  1225.       function encodeAsBinary(obj, callback) {
  1226.  
  1227.         function writeEncoding(bloblessData) {
  1228.           var deconstruction = binary.deconstructPacket(bloblessData);
  1229.           var pack = encodeAsString(deconstruction.packet);
  1230.           var buffers = deconstruction.buffers;
  1231.  
  1232.           buffers.unshift(pack); // add packet info to beginning of data list
  1233.           callback(buffers); // write all the buffers
  1234.         }
  1235.  
  1236.         binary.removeBlobs(obj, writeEncoding);
  1237.       }
  1238.  
  1239.       /**
  1240.        * A socket.io Decoder instance
  1241.        *
  1242.        * @return {Object} decoder
  1243.        * @api public
  1244.        */
  1245.  
  1246.       function Decoder() {
  1247.         this.reconstructor = null;
  1248.       }
  1249.  
  1250.       /**
  1251.        * Mix in `Emitter` with Decoder.
  1252.        */
  1253.  
  1254.       Emitter(Decoder.prototype);
  1255.  
  1256.       /**
  1257.        * Decodes an ecoded packet string into packet JSON.
  1258.        *
  1259.        * @param {String} obj - encoded packet
  1260.        * @return {Object} packet
  1261.        * @api public
  1262.        */
  1263.  
  1264.       Decoder.prototype.add = function(obj) {
  1265.         var packet;
  1266.         if ('string' == typeof obj) {
  1267.           packet = decodeString(obj);
  1268.           if (exports.BINARY_EVENT == packet.type || exports.BINARY_ACK == packet.type) { // binary packet's json
  1269.             this.reconstructor = new BinaryReconstructor(packet);
  1270.  
  1271.             // no attachments, labeled binary but no binary data to follow
  1272.             if (this.reconstructor.reconPack.attachments === 0) {
  1273.               this.emit('decoded', packet);
  1274.             }
  1275.           } else { // non-binary full packet
  1276.             this.emit('decoded', packet);
  1277.           }
  1278.         }
  1279.         else if (isBuf(obj) || obj.base64) { // raw binary data
  1280.           if (!this.reconstructor) {
  1281.             throw new Error('got binary data when not reconstructing a packet');
  1282.           } else {
  1283.             packet = this.reconstructor.takeBinaryData(obj);
  1284.             if (packet) { // received final buffer
  1285.               this.reconstructor = null;
  1286.               this.emit('decoded', packet);
  1287.             }
  1288.           }
  1289.         }
  1290.         else {
  1291.           throw new Error('Unknown type: ' + obj);
  1292.         }
  1293.       };
  1294.  
  1295.       /**
  1296.        * Decode a packet String (JSON data)
  1297.        *
  1298.        * @param {String} str
  1299.        * @return {Object} packet
  1300.        * @api private
  1301.        */
  1302.  
  1303.       function decodeString(str) {
  1304.         var p = {};
  1305.         var i = 0;
  1306.  
  1307.         // look up type
  1308.         p.type = Number(str.charAt(0));
  1309.         if (null == exports.types[p.type]) return error();
  1310.  
  1311.         // look up attachments if type binary
  1312.         if (exports.BINARY_EVENT == p.type || exports.BINARY_ACK == p.type) {
  1313.           var buf = '';
  1314.           while (str.charAt(++i) != '-') {
  1315.             buf += str.charAt(i);
  1316.             if (i == str.length) break;
  1317.           }
  1318.           if (buf != Number(buf) || str.charAt(i) != '-') {
  1319.             throw new Error('Illegal attachments');
  1320.           }
  1321.           p.attachments = Number(buf);
  1322.         }
  1323.  
  1324.         // look up namespace (if any)
  1325.         if ('/' == str.charAt(i + 1)) {
  1326.           p.nsp = '';
  1327.           while (++i) {
  1328.             var c = str.charAt(i);
  1329.             if (',' == c) break;
  1330.             p.nsp += c;
  1331.             if (i == str.length) break;
  1332.           }
  1333.         } else {
  1334.           p.nsp = '/';
  1335.         }
  1336.  
  1337.         // look up id
  1338.         var next = str.charAt(i + 1);
  1339.         if ('' !== next && Number(next) == next) {
  1340.           p.id = '';
  1341.           while (++i) {
  1342.             var c = str.charAt(i);
  1343.             if (null == c || Number(c) != c) {
  1344.               --i;
  1345.               break;
  1346.             }
  1347.             p.id += str.charAt(i);
  1348.             if (i == str.length) break;
  1349.           }
  1350.           p.id = Number(p.id);
  1351.         }
  1352.  
  1353.         // look up json data
  1354.         if (str.charAt(++i)) {
  1355.           p = tryParse(p, str.substr(i));
  1356.         }
  1357.  
  1358.         debug('decoded %s as %j', str, p);
  1359.         return p;
  1360.       }
  1361.  
  1362.       function tryParse(p, str) {
  1363.         try {
  1364.           p.data = json.parse(str);
  1365.         } catch(e){
  1366.           return error();
  1367.         }
  1368.         return p;
  1369.       };
  1370.  
  1371.       /**
  1372.        * Deallocates a parser's resources
  1373.        *
  1374.        * @api public
  1375.        */
  1376.  
  1377.       Decoder.prototype.destroy = function() {
  1378.         if (this.reconstructor) {
  1379.           this.reconstructor.finishedReconstruction();
  1380.         }
  1381.       };
  1382.  
  1383.       /**
  1384.        * A manager of a binary event's 'buffer sequence'. Should
  1385.        * be constructed whenever a packet of type BINARY_EVENT is
  1386.        * decoded.
  1387.        *
  1388.        * @param {Object} packet
  1389.        * @return {BinaryReconstructor} initialized reconstructor
  1390.        * @api private
  1391.        */
  1392.  
  1393.       function BinaryReconstructor(packet) {
  1394.         this.reconPack = packet;
  1395.         this.buffers = [];
  1396.       }
  1397.  
  1398.       /**
  1399.        * Method to be called when binary data received from connection
  1400.        * after a BINARY_EVENT packet.
  1401.        *
  1402.        * @param {Buffer | ArrayBuffer} binData - the raw binary data received
  1403.        * @return {null | Object} returns null if more binary data is expected or
  1404.        *   a reconstructed packet object if all buffers have been received.
  1405.        * @api private
  1406.        */
  1407.  
  1408.       BinaryReconstructor.prototype.takeBinaryData = function(binData) {
  1409.         this.buffers.push(binData);
  1410.         if (this.buffers.length == this.reconPack.attachments) { // done with buffer list
  1411.           var packet = binary.reconstructPacket(this.reconPack, this.buffers);
  1412.           this.finishedReconstruction();
  1413.           return packet;
  1414.         }
  1415.         return null;
  1416.       };
  1417.  
  1418.       /**
  1419.        * Cleans up binary packet reconstruction variables.
  1420.        *
  1421.        * @api private
  1422.        */
  1423.  
  1424.       BinaryReconstructor.prototype.finishedReconstruction = function() {
  1425.         this.reconPack = null;
  1426.         this.buffers = [];
  1427.       };
  1428.  
  1429.       function error(data){
  1430.         return {
  1431.           type: exports.ERROR,
  1432.           data: 'parser error'
  1433.         };
  1434.       }
  1435.  
  1436.  
  1437. /***/ },
  1438. /* 8 */
  1439. /***/ function(module, exports, __webpack_require__) {
  1440.  
  1441.      
  1442.       /**
  1443.        * This is the web browser implementation of `debug()`.
  1444.        *
  1445.        * Expose `debug()` as the module.
  1446.        */
  1447.  
  1448.       exports = module.exports = __webpack_require__(9);
  1449.       exports.log = log;
  1450.       exports.formatArgs = formatArgs;
  1451.       exports.save = save;
  1452.       exports.load = load;
  1453.       exports.useColors = useColors;
  1454.       exports.storage = 'undefined' != typeof chrome
  1455.                      && 'undefined' != typeof chrome.storage
  1456.                         ? chrome.storage.local
  1457.                         : localstorage();
  1458.  
  1459.       /**
  1460.        * Colors.
  1461.        */
  1462.  
  1463.       exports.colors = [
  1464.         'lightseagreen',
  1465.         'forestgreen',
  1466.         'goldenrod',
  1467.         'dodgerblue',
  1468.         'darkorchid',
  1469.         'crimson'
  1470.       ];
  1471.  
  1472.       /**
  1473.        * Currently only WebKit-based Web Inspectors, Firefox >= v31,
  1474.        * and the Firebug extension (any Firefox version) are known
  1475.        * to support "%c" CSS customizations.
  1476.        *
  1477.        * TODO: add a `localStorage` variable to explicitly enable/disable colors
  1478.        */
  1479.  
  1480.       function useColors() {
  1481.         // is webkit? http://stackoverflow.com/a/16459606/376773
  1482.         return ('WebkitAppearance' in document.documentElement.style) ||
  1483.           // is firebug? http://stackoverflow.com/a/398120/376773
  1484.           (window.console && (console.firebug || (console.exception && console.table))) ||
  1485.           // is firefox >= v31?
  1486.           // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
  1487.           (navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31);
  1488.       }
  1489.  
  1490.       /**
  1491.        * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
  1492.        */
  1493.  
  1494.       exports.formatters.j = function(v) {
  1495.         return JSON.stringify(v);
  1496.       };
  1497.  
  1498.  
  1499.       /**
  1500.        * Colorize log arguments if enabled.
  1501.        *
  1502.        * @api public
  1503.        */
  1504.  
  1505.       function formatArgs() {
  1506.         var args = arguments;
  1507.         var useColors = this.useColors;
  1508.  
  1509.         args[0] = (useColors ? '%c' : '')
  1510.           + this.namespace
  1511.           + (useColors ? ' %c' : ' ')
  1512.           + args[0]
  1513.           + (useColors ? '%c ' : ' ')
  1514.           + '+' + exports.humanize(this.diff);
  1515.  
  1516.         if (!useColors) return args;
  1517.  
  1518.         var c = 'color: ' + this.color;
  1519.         args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));
  1520.  
  1521.         // the final "%c" is somewhat tricky, because there could be other
  1522.         // arguments passed either before or after the %c, so we need to
  1523.         // figure out the correct index to insert the CSS into
  1524.         var index = 0;
  1525.         var lastC = 0;
  1526.         args[0].replace(/%[a-z%]/g, function(match) {
  1527.           if ('%%' === match) return;
  1528.           index++;
  1529.           if ('%c' === match) {
  1530.             // we only are interested in the *last* %c
  1531.             // (the user may have provided their own)
  1532.             lastC = index;
  1533.           }
  1534.         });
  1535.  
  1536.         args.splice(lastC, 0, c);
  1537.         return args;
  1538.       }
  1539.  
  1540.       /**
  1541.        * Invokes `console.log()` when available.
  1542.        * No-op when `console.log` is not a "function".
  1543.        *
  1544.        * @api public
  1545.        */
  1546.  
  1547.       function log() {
  1548.         // this hackery is required for IE8/9, where
  1549.         // the `console.log` function doesn't have 'apply'
  1550.         return 'object' === typeof console
  1551.           && console.log
  1552.           && Function.prototype.apply.call(console.log, console, arguments);
  1553.       }
  1554.  
  1555.       /**
  1556.        * Save `namespaces`.
  1557.        *
  1558.        * @param {String} namespaces
  1559.        * @api private
  1560.        */
  1561.  
  1562.       function save(namespaces) {
  1563.         try {
  1564.           if (null == namespaces) {
  1565.             exports.storage.removeItem('debug');
  1566.           } else {
  1567.             exports.storage.debug = namespaces;
  1568.           }
  1569.         } catch(e) {}
  1570.       }
  1571.  
  1572.       /**
  1573.        * Load `namespaces`.
  1574.        *
  1575.        * @return {String} returns the previously persisted debug modes
  1576.        * @api private
  1577.        */
  1578.  
  1579.       function load() {
  1580.         var r;
  1581.         try {
  1582.           r = exports.storage.debug;
  1583.         } catch(e) {}
  1584.         return r;
  1585.       }
  1586.  
  1587.       /**
  1588.        * Enable namespaces listed in `localStorage.debug` initially.
  1589.        */
  1590.  
  1591.       exports.enable(load());
  1592.  
  1593.       /**
  1594.        * Localstorage attempts to return the localstorage.
  1595.        *
  1596.        * This is necessary because safari throws
  1597.        * when a user disables cookies/localstorage
  1598.        * and you attempt to access it.
  1599.        *
  1600.        * @return {LocalStorage}
  1601.        * @api private
  1602.        */
  1603.  
  1604.       function localstorage(){
  1605.         try {
  1606.           return window.localStorage;
  1607.         } catch (e) {}
  1608.       }
  1609.  
  1610.  
  1611. /***/ },
  1612. /* 9 */
  1613. /***/ function(module, exports, __webpack_require__) {
  1614.  
  1615.      
  1616.       /**
  1617.        * This is the common logic for both the Node.js and web browser
  1618.        * implementations of `debug()`.
  1619.        *
  1620.        * Expose `debug()` as the module.
  1621.        */
  1622.  
  1623.       exports = module.exports = debug;
  1624.       exports.coerce = coerce;
  1625.       exports.disable = disable;
  1626.       exports.enable = enable;
  1627.       exports.enabled = enabled;
  1628.       exports.humanize = __webpack_require__(10);
  1629.  
  1630.       /**
  1631.        * The currently active debug mode names, and names to skip.
  1632.        */
  1633.  
  1634.       exports.names = [];
  1635.       exports.skips = [];
  1636.  
  1637.       /**
  1638.        * Map of special "%n" handling functions, for the debug "format" argument.
  1639.        *
  1640.        * Valid key names are a single, lowercased letter, i.e. "n".
  1641.        */
  1642.  
  1643.       exports.formatters = {};
  1644.  
  1645.       /**
  1646.        * Previously assigned color.
  1647.        */
  1648.  
  1649.       var prevColor = 0;
  1650.  
  1651.       /**
  1652.        * Previous log timestamp.
  1653.        */
  1654.  
  1655.       var prevTime;
  1656.  
  1657.       /**
  1658.        * Select a color.
  1659.        *
  1660.        * @return {Number}
  1661.        * @api private
  1662.        */
  1663.  
  1664.       function selectColor() {
  1665.         return exports.colors[prevColor++ % exports.colors.length];
  1666.       }
  1667.  
  1668.       /**
  1669.        * Create a debugger with the given `namespace`.
  1670.        *
  1671.        * @param {String} namespace
  1672.        * @return {Function}
  1673.        * @api public
  1674.        */
  1675.  
  1676.       function debug(namespace) {
  1677.  
  1678.         // define the `disabled` version
  1679.         function disabled() {
  1680.         }
  1681.         disabled.enabled = false;
  1682.  
  1683.         // define the `enabled` version
  1684.         function enabled() {
  1685.  
  1686.           var self = enabled;
  1687.  
  1688.           // set `diff` timestamp
  1689.           var curr = +new Date();
  1690.           var ms = curr - (prevTime || curr);
  1691.           self.diff = ms;
  1692.           self.prev = prevTime;
  1693.           self.curr = curr;
  1694.           prevTime = curr;
  1695.  
  1696.           // add the `color` if not set
  1697.           if (null == self.useColors) self.useColors = exports.useColors();
  1698.           if (null == self.color && self.useColors) self.color = selectColor();
  1699.  
  1700.           var args = Array.prototype.slice.call(arguments);
  1701.  
  1702.           args[0] = exports.coerce(args[0]);
  1703.  
  1704.           if ('string' !== typeof args[0]) {
  1705.             // anything else let's inspect with %o
  1706.             args = ['%o'].concat(args);
  1707.           }
  1708.  
  1709.           // apply any `formatters` transformations
  1710.           var index = 0;
  1711.           args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {
  1712.             // if we encounter an escaped % then don't increase the array index
  1713.             if (match === '%%') return match;
  1714.             index++;
  1715.             var formatter = exports.formatters[format];
  1716.             if ('function' === typeof formatter) {
  1717.               var val = args[index];
  1718.               match = formatter.call(self, val);
  1719.  
  1720.               // now we need to remove `args[index]` since it's inlined in the `format`
  1721.               args.splice(index, 1);
  1722.               index--;
  1723.             }
  1724.             return match;
  1725.           });
  1726.  
  1727.           if ('function' === typeof exports.formatArgs) {
  1728.             args = exports.formatArgs.apply(self, args);
  1729.           }
  1730.           var logFn = enabled.log || exports.log || console.log.bind(console);
  1731.           logFn.apply(self, args);
  1732.         }
  1733.         enabled.enabled = true;
  1734.  
  1735.         var fn = exports.enabled(namespace) ? enabled : disabled;
  1736.  
  1737.         fn.namespace = namespace;
  1738.  
  1739.         return fn;
  1740.       }
  1741.  
  1742.       /**
  1743.        * Enables a debug mode by namespaces. This can include modes
  1744.        * separated by a colon and wildcards.
  1745.        *
  1746.        * @param {String} namespaces
  1747.        * @api public
  1748.        */
  1749.  
  1750.       function enable(namespaces) {
  1751.         exports.save(namespaces);
  1752.  
  1753.         var split = (namespaces || '').split(/[\s,]+/);
  1754.         var len = split.length;
  1755.  
  1756.         for (var i = 0; i < len; i++) {
  1757.           if (!split[i]) continue; // ignore empty strings
  1758.           namespaces = split[i].replace(/\*/g, '.*?');
  1759.           if (namespaces[0] === '-') {
  1760.             exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
  1761.           } else {
  1762.             exports.names.push(new RegExp('^' + namespaces + '$'));
  1763.           }
  1764.         }
  1765.       }
  1766.  
  1767.       /**
  1768.        * Disable debug output.
  1769.        *
  1770.        * @api public
  1771.        */
  1772.  
  1773.       function disable() {
  1774.         exports.enable('');
  1775.       }
  1776.  
  1777.       /**
  1778.        * Returns true if the given mode name is enabled, false otherwise.
  1779.        *
  1780.        * @param {String} name
  1781.        * @return {Boolean}
  1782.        * @api public
  1783.        */
  1784.  
  1785.       function enabled(name) {
  1786.         var i, len;
  1787.         for (i = 0, len = exports.skips.length; i < len; i++) {
  1788.           if (exports.skips[i].test(name)) {
  1789.             return false;
  1790.           }
  1791.         }
  1792.         for (i = 0, len = exports.names.length; i < len; i++) {
  1793.           if (exports.names[i].test(name)) {
  1794.             return true;
  1795.           }
  1796.         }
  1797.         return false;
  1798.       }
  1799.  
  1800.       /**
  1801.        * Coerce `val`.
  1802.        *
  1803.        * @param {Mixed} val
  1804.        * @return {Mixed}
  1805.        * @api private
  1806.        */
  1807.  
  1808.       function coerce(val) {
  1809.         if (val instanceof Error) return val.stack || val.message;
  1810.         return val;
  1811.       }
  1812.  
  1813.  
  1814. /***/ },
  1815. /* 10 */
  1816. /***/ function(module, exports) {
  1817.  
  1818.       /**
  1819.        * Helpers.
  1820.        */
  1821.  
  1822.       var s = 1000;
  1823.       var m = s * 60;
  1824.       var h = m * 60;
  1825.       var d = h * 24;
  1826.       var y = d * 365.25;
  1827.  
  1828.       /**
  1829.        * Parse or format the given `val`.
  1830.        *
  1831.        * Options:
  1832.        *
  1833.        *  - `long` verbose formatting [false]
  1834.        *
  1835.        * @param {String|Number} val
  1836.        * @param {Object} options
  1837.        * @return {String|Number}
  1838.        * @api public
  1839.        */
  1840.  
  1841.       module.exports = function(val, options){
  1842.         options = options || {};
  1843.         if ('string' == typeof val) return parse(val);
  1844.         return options.long
  1845.           ? long(val)
  1846.           : short(val);
  1847.       };
  1848.  
  1849.       /**
  1850.        * Parse the given `str` and return milliseconds.
  1851.        *
  1852.        * @param {String} str
  1853.        * @return {Number}
  1854.        * @api private
  1855.        */
  1856.  
  1857.       function parse(str) {
  1858.         str = '' + str;
  1859.         if (str.length > 10000) return;
  1860.         var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);
  1861.         if (!match) return;
  1862.         var n = parseFloat(match[1]);
  1863.         var type = (match[2] || 'ms').toLowerCase();
  1864.         switch (type) {
  1865.           case 'years':
  1866.           case 'year':
  1867.           case 'yrs':
  1868.           case 'yr':
  1869.           case 'y':
  1870.             return n * y;
  1871.           case 'days':
  1872.           case 'day':
  1873.           case 'd':
  1874.             return n * d;
  1875.           case 'hours':
  1876.           case 'hour':
  1877.           case 'hrs':
  1878.           case 'hr':
  1879.           case 'h':
  1880.             return n * h;
  1881.           case 'minutes':
  1882.           case 'minute':
  1883.           case 'mins':
  1884.           case 'min':
  1885.           case 'm':
  1886.             return n * m;
  1887.           case 'seconds':
  1888.           case 'second':
  1889.           case 'secs':
  1890.           case 'sec':
  1891.           case 's':
  1892.             return n * s;
  1893.           case 'milliseconds':
  1894.           case 'millisecond':
  1895.           case 'msecs':
  1896.           case 'msec':
  1897.           case 'ms':
  1898.             return n;
  1899.         }
  1900.       }
  1901.  
  1902.       /**
  1903.        * Short format for `ms`.
  1904.        *
  1905.        * @param {Number} ms
  1906.        * @return {String}
  1907.        * @api private
  1908.        */
  1909.  
  1910.       function short(ms) {
  1911.         if (ms >= d) return Math.round(ms / d) + 'd';
  1912.         if (ms >= h) return Math.round(ms / h) + 'h';
  1913.         if (ms >= m) return Math.round(ms / m) + 'm';
  1914.         if (ms >= s) return Math.round(ms / s) + 's';
  1915.         return ms + 'ms';
  1916.       }
  1917.  
  1918.       /**
  1919.        * Long format for `ms`.
  1920.        *
  1921.        * @param {Number} ms
  1922.        * @return {String}
  1923.        * @api private
  1924.        */
  1925.  
  1926.       function long(ms) {
  1927.         return plural(ms, d, 'day')
  1928.           || plural(ms, h, 'hour')
  1929.           || plural(ms, m, 'minute')
  1930.           || plural(ms, s, 'second')
  1931.           || ms + ' ms';
  1932.       }
  1933.  
  1934.       /**
  1935.        * Pluralization helper.
  1936.        */
  1937.  
  1938.       function plural(ms, n, name) {
  1939.         if (ms < n) return;
  1940.         if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;
  1941.         return Math.ceil(ms / n) + ' ' + name + 's';
  1942.       }
  1943.  
  1944.  
  1945. /***/ },
  1946. /* 11 */
  1947. /***/ function(module, exports, __webpack_require__) {
  1948.  
  1949.       /* WEBPACK VAR INJECTION */(function(module, global) {/*** IMPORTS FROM imports-loader ***/
  1950.       var define = false;
  1951.  
  1952.       /*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */
  1953.       ;(function () {
  1954.         // Detect the `define` function exposed by asynchronous module loaders. The
  1955.         // strict `define` check is necessary for compatibility with `r.js`.
  1956.         var isLoader = typeof define === "function" && define.amd;
  1957.  
  1958.         // A set of types used to distinguish objects from primitives.
  1959.         var objectTypes = {
  1960.           "function": true,
  1961.           "object": true
  1962.         };
  1963.  
  1964.         // Detect the `exports` object exposed by CommonJS implementations.
  1965.         var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
  1966.  
  1967.         // Use the `global` object exposed by Node (including Browserify via
  1968.         // `insert-module-globals`), Narwhal, and Ringo as the default context,
  1969.         // and the `window` object in browsers. Rhino exports a `global` function
  1970.         // instead.
  1971.         var root = objectTypes[typeof window] && window || this,
  1972.             freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global;
  1973.  
  1974.         if (freeGlobal && (freeGlobal["global"] === freeGlobal || freeGlobal["window"] === freeGlobal || freeGlobal["self"] === freeGlobal)) {
  1975.           root = freeGlobal;
  1976.         }
  1977.  
  1978.         // Public: Initializes JSON 3 using the given `context` object, attaching the
  1979.         // `stringify` and `parse` functions to the specified `exports` object.
  1980.         function runInContext(context, exports) {
  1981.           context || (context = root["Object"]());
  1982.           exports || (exports = root["Object"]());
  1983.  
  1984.           // Native constructor aliases.
  1985.           var Number = context["Number"] || root["Number"],
  1986.               String = context["String"] || root["String"],
  1987.               Object = context["Object"] || root["Object"],
  1988.               Date = context["Date"] || root["Date"],
  1989.               SyntaxError = context["SyntaxError"] || root["SyntaxError"],
  1990.               TypeError = context["TypeError"] || root["TypeError"],
  1991.               Math = context["Math"] || root["Math"],
  1992.               nativeJSON = context["JSON"] || root["JSON"];
  1993.  
  1994.           // Delegate to the native `stringify` and `parse` implementations.
  1995.           if (typeof nativeJSON == "object" && nativeJSON) {
  1996.             exports.stringify = nativeJSON.stringify;
  1997.             exports.parse = nativeJSON.parse;
  1998.           }
  1999.  
  2000.           // Convenience aliases.
  2001.           var objectProto = Object.prototype,
  2002.               getClass = objectProto.toString,
  2003.               isProperty, forEach, undef;
  2004.  
  2005.           // Test the `Date#getUTC*` methods. Based on work by @Yaffle.
  2006.           var isExtended = new Date(-3509827334573292);
  2007.           try {
  2008.             // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical
  2009.             // results for certain dates in Opera >= 10.53.
  2010.             isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&
  2011.               // Safari < 2.0.2 stores the internal millisecond time value correctly,
  2012.               // but clips the values returned by the date methods to the range of
  2013.               // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).
  2014.               isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;
  2015.           } catch (exception) {}
  2016.  
  2017.           // Internal: Determines whether the native `JSON.stringify` and `parse`
  2018.           // implementations are spec-compliant. Based on work by Ken Snyder.
  2019.           function has(name) {
  2020.             if (has[name] !== undef) {
  2021.               // Return cached feature test result.
  2022.               return has[name];
  2023.             }
  2024.             var isSupported;
  2025.             if (name == "bug-string-char-index") {
  2026.               // IE <= 7 doesn't support accessing string characters using square
  2027.               // bracket notation. IE 8 only supports this for primitives.
  2028.               isSupported = "a"[0] != "a";
  2029.             } else if (name == "json") {
  2030.               // Indicates whether both `JSON.stringify` and `JSON.parse` are
  2031.               // supported.
  2032.               isSupported = has("json-stringify") && has("json-parse");
  2033.             } else {
  2034.               var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';
  2035.               // Test `JSON.stringify`.
  2036.               if (name == "json-stringify") {
  2037.                 var stringify = exports.stringify, stringifySupported = typeof stringify == "function" && isExtended;
  2038.                 if (stringifySupported) {
  2039.                   // A test function object with a custom `toJSON` method.
  2040.                   (value = function () {
  2041.                     return 1;
  2042.                   }).toJSON = value;
  2043.                   try {
  2044.                     stringifySupported =
  2045.                       // Firefox 3.1b1 and b2 serialize string, number, and boolean
  2046.                       // primitives as object literals.
  2047.                       stringify(0) === "0" &&
  2048.                       // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object
  2049.                       // literals.
  2050.                       stringify(new Number()) === "0" &&
  2051.                       stringify(new String()) == '""' &&
  2052.                       // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or
  2053.                       // does not define a canonical JSON representation (this applies to
  2054.                       // objects with `toJSON` properties as well, *unless* they are nested
  2055.                       // within an object or array).
  2056.                       stringify(getClass) === undef &&
  2057.                       // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and
  2058.                       // FF 3.1b3 pass this test.
  2059.                       stringify(undef) === undef &&
  2060.                       // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,
  2061.                       // respectively, if the value is omitted entirely.
  2062.                       stringify() === undef &&
  2063.                       // FF 3.1b1, 2 throw an error if the given value is not a number,
  2064.                       // string, array, object, Boolean, or `null` literal. This applies to
  2065.                       // objects with custom `toJSON` methods as well, unless they are nested
  2066.                       // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`
  2067.                       // methods entirely.
  2068.                       stringify(value) === "1" &&
  2069.                       stringify([value]) == "[1]" &&
  2070.                       // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of
  2071.                       // `"[null]"`.
  2072.                       stringify([undef]) == "[null]" &&
  2073.                       // YUI 3.0.0b1 fails to serialize `null` literals.
  2074.                       stringify(null) == "null" &&
  2075.                       // FF 3.1b1, 2 halts serialization if an array contains a function:
  2076.                       // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3
  2077.                       // elides non-JSON values from objects and arrays, unless they
  2078.                       // define custom `toJSON` methods.
  2079.                       stringify([undef, getClass, null]) == "[null,null,null]" &&
  2080.                       // Simple serialization test. FF 3.1b1 uses Unicode escape sequences
  2081.                       // where character escape codes are expected (e.g., `\b` => `\u0008`).
  2082.                       stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized &&
  2083.                       // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.
  2084.                       stringify(null, value) === "1" &&
  2085.                       stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" &&
  2086.                       // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly
  2087.                       // serialize extended years.
  2088.                       stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' &&
  2089.                       // The milliseconds are optional in ES 5, but required in 5.1.
  2090.                       stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' &&
  2091.                       // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative
  2092.                       // four-digit years instead of six-digit years. Credits: @Yaffle.
  2093.                       stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' &&
  2094.                       // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond
  2095.                       // values less than 1000. Credits: @Yaffle.
  2096.                       stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"';
  2097.                   } catch (exception) {
  2098.                     stringifySupported = false;
  2099.                   }
  2100.                 }
  2101.                 isSupported = stringifySupported;
  2102.               }
  2103.               // Test `JSON.parse`.
  2104.               if (name == "json-parse") {
  2105.                 var parse = exports.parse;
  2106.                 if (typeof parse == "function") {
  2107.                   try {
  2108.                     // FF 3.1b1, b2 will throw an exception if a bare literal is provided.
  2109.                     // Conforming implementations should also coerce the initial argument to
  2110.                     // a string prior to parsing.
  2111.                     if (parse("0") === 0 && !parse(false)) {
  2112.                       // Simple parsing test.
  2113.                       value = parse(serialized);
  2114.                       var parseSupported = value["a"].length == 5 && value["a"][0] === 1;
  2115.                       if (parseSupported) {
  2116.                         try {
  2117.                           // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.
  2118.                           parseSupported = !parse('"\t"');
  2119.                         } catch (exception) {}
  2120.                         if (parseSupported) {
  2121.                           try {
  2122.                             // FF 4.0 and 4.0.1 allow leading `+` signs and leading
  2123.                             // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow
  2124.                             // certain octal literals.
  2125.                             parseSupported = parse("01") !== 1;
  2126.                           } catch (exception) {}
  2127.                         }
  2128.                         if (parseSupported) {
  2129.                           try {
  2130.                             // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal
  2131.                             // points. These environments, along with FF 3.1b1 and 2,
  2132.                             // also allow trailing commas in JSON objects and arrays.
  2133.                             parseSupported = parse("1.") !== 1;
  2134.                           } catch (exception) {}
  2135.                         }
  2136.                       }
  2137.                     }
  2138.                   } catch (exception) {
  2139.                     parseSupported = false;
  2140.                   }
  2141.                 }
  2142.                 isSupported = parseSupported;
  2143.               }
  2144.             }
  2145.             return has[name] = !!isSupported;
  2146.           }
  2147.  
  2148.           if (!has("json")) {
  2149.             // Common `[[Class]]` name aliases.
  2150.             var functionClass = "[object Function]",
  2151.                 dateClass = "[object Date]",
  2152.                 numberClass = "[object Number]",
  2153.                 stringClass = "[object String]",
  2154.                 arrayClass = "[object Array]",
  2155.                 booleanClass = "[object Boolean]";
  2156.  
  2157.             // Detect incomplete support for accessing string characters by index.
  2158.             var charIndexBuggy = has("bug-string-char-index");
  2159.  
  2160.             // Define additional utility methods if the `Date` methods are buggy.
  2161.             if (!isExtended) {
  2162.               var floor = Math.floor;
  2163.               // A mapping between the months of the year and the number of days between
  2164.               // January 1st and the first of the respective month.
  2165.               var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
  2166.               // Internal: Calculates the number of days between the Unix epoch and the
  2167.               // first day of the given month.
  2168.               var getDay = function (year, month) {
  2169.                 return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);
  2170.               };
  2171.             }
  2172.  
  2173.             // Internal: Determines if a property is a direct property of the given
  2174.             // object. Delegates to the native `Object#hasOwnProperty` method.
  2175.             if (!(isProperty = objectProto.hasOwnProperty)) {
  2176.               isProperty = function (property) {
  2177.                 var members = {}, constructor;
  2178.                 if ((members.__proto__ = null, members.__proto__ = {
  2179.                   // The *proto* property cannot be set multiple times in recent
  2180.                   // versions of Firefox and SeaMonkey.
  2181.                   "toString": 1
  2182.                 }, members).toString != getClass) {
  2183.                   // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but
  2184.                   // supports the mutable *proto* property.
  2185.                   isProperty = function (property) {
  2186.                     // Capture and break the object's prototype chain (see section 8.6.2
  2187.                     // of the ES 5.1 spec). The parenthesized expression prevents an
  2188.                     // unsafe transformation by the Closure Compiler.
  2189.                     var original = this.__proto__, result = property in (this.__proto__ = null, this);
  2190.                     // Restore the original prototype chain.
  2191.                     this.__proto__ = original;
  2192.                     return result;
  2193.                   };
  2194.                 } else {
  2195.                   // Capture a reference to the top-level `Object` constructor.
  2196.                   constructor = members.constructor;
  2197.                   // Use the `constructor` property to simulate `Object#hasOwnProperty` in
  2198.                   // other environments.
  2199.                   isProperty = function (property) {
  2200.                     var parent = (this.constructor || constructor).prototype;
  2201.                     return property in this && !(property in parent && this[property] === parent[property]);
  2202.                   };
  2203.                 }
  2204.                 members = null;
  2205.                 return isProperty.call(this, property);
  2206.               };
  2207.             }
  2208.  
  2209.             // Internal: Normalizes the `for...in` iteration algorithm across
  2210.             // environments. Each enumerated key is yielded to a `callback` function.
  2211.             forEach = function (object, callback) {
  2212.               var size = 0, Properties, members, property;
  2213.  
  2214.               // Tests for bugs in the current environment's `for...in` algorithm. The
  2215.               // `valueOf` property inherits the non-enumerable flag from
  2216.               // `Object.prototype` in older versions of IE, Netscape, and Mozilla.
  2217.               (Properties = function () {
  2218.                 this.valueOf = 0;
  2219.               }).prototype.valueOf = 0;
  2220.  
  2221.               // Iterate over a new instance of the `Properties` class.
  2222.               members = new Properties();
  2223.               for (property in members) {
  2224.                 // Ignore all properties inherited from `Object.prototype`.
  2225.                 if (isProperty.call(members, property)) {
  2226.                   size++;
  2227.                 }
  2228.               }
  2229.               Properties = members = null;
  2230.  
  2231.               // Normalize the iteration algorithm.
  2232.               if (!size) {
  2233.                 // A list of non-enumerable properties inherited from `Object.prototype`.
  2234.                 members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"];
  2235.                 // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable
  2236.                 // properties.
  2237.                 forEach = function (object, callback) {
  2238.                   var isFunction = getClass.call(object) == functionClass, property, length;
  2239.                   var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;
  2240.                   for (property in object) {
  2241.                     // Gecko <= 1.0 enumerates the `prototype` property of functions under
  2242.                     // certain conditions; IE does not.
  2243.                     if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) {
  2244.                       callback(property);
  2245.                     }
  2246.                   }
  2247.                   // Manually invoke the callback for each non-enumerable property.
  2248.                   for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));
  2249.                 };
  2250.               } else if (size == 2) {
  2251.                 // Safari <= 2.0.4 enumerates shadowed properties twice.
  2252.                 forEach = function (object, callback) {
  2253.                   // Create a set of iterated properties.
  2254.                   var members = {}, isFunction = getClass.call(object) == functionClass, property;
  2255.                   for (property in object) {
  2256.                     // Store each property name to prevent double enumeration. The
  2257.                     // `prototype` property of functions is not enumerated due to cross-
  2258.                     // environment inconsistencies.
  2259.                     if (!(isFunction && property == "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {
  2260.                       callback(property);
  2261.                     }
  2262.                   }
  2263.                 };
  2264.               } else {
  2265.                 // No bugs detected; use the standard `for...in` algorithm.
  2266.                 forEach = function (object, callback) {
  2267.                   var isFunction = getClass.call(object) == functionClass, property, isConstructor;
  2268.                   for (property in object) {
  2269.                     if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) {
  2270.                       callback(property);
  2271.                     }
  2272.                   }
  2273.                   // Manually invoke the callback for the `constructor` property due to
  2274.                   // cross-environment inconsistencies.
  2275.                   if (isConstructor || isProperty.call(object, (property = "constructor"))) {
  2276.                     callback(property);
  2277.                   }
  2278.                 };
  2279.               }
  2280.               return forEach(object, callback);
  2281.             };
  2282.  
  2283.             // Public: Serializes a JavaScript `value` as a JSON string. The optional
  2284.             // `filter` argument may specify either a function that alters how object and
  2285.             // array members are serialized, or an array of strings and numbers that
  2286.             // indicates which properties should be serialized. The optional `width`
  2287.             // argument may be either a string or number that specifies the indentation
  2288.             // level of the output.
  2289.             if (!has("json-stringify")) {
  2290.               // Internal: A map of control characters and their escaped equivalents.
  2291.               var Escapes = {
  2292.                 92: "\\\\",
  2293.                 34: '\\"',
  2294.                 8: "\\b",
  2295.                 12: "\\f",
  2296.                 10: "\\n",
  2297.                 13: "\\r",
  2298.                 9: "\\t"
  2299.               };
  2300.  
  2301.               // Internal: Converts `value` into a zero-padded string such that its
  2302.               // length is at least equal to `width`. The `width` must be <= 6.
  2303.               var leadingZeroes = "000000";
  2304.               var toPaddedString = function (width, value) {
  2305.                 // The `|| 0` expression is necessary to work around a bug in
  2306.                 // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`.
  2307.                 return (leadingZeroes + (value || 0)).slice(-width);
  2308.               };
  2309.  
  2310.               // Internal: Double-quotes a string `value`, replacing all ASCII control
  2311.               // characters (characters with code unit values between 0 and 31) with
  2312.               // their escaped equivalents. This is an implementation of the
  2313.               // `Quote(value)` operation defined in ES 5.1 section 15.12.3.
  2314.               var unicodePrefix = "\\u00";
  2315.               var quote = function (value) {
  2316.                 var result = '"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;
  2317.                 var symbols = useCharIndex && (charIndexBuggy ? value.split("") : value);
  2318.                 for (; index < length; index++) {
  2319.                   var charCode = value.charCodeAt(index);
  2320.                   // If the character is a control character, append its Unicode or
  2321.                   // shorthand escape sequence; otherwise, append the character as-is.
  2322.                   switch (charCode) {
  2323.                     case 8: case 9: case 10: case 12: case 13: case 34: case 92:
  2324.                       result += Escapes[charCode];
  2325.                       break;
  2326.                     default:
  2327.                       if (charCode < 32) {
  2328.                         result += unicodePrefix + toPaddedString(2, charCode.toString(16));
  2329.                         break;
  2330.                       }
  2331.                       result += useCharIndex ? symbols[index] : value.charAt(index);
  2332.                   }
  2333.                 }
  2334.                 return result + '"';
  2335.               };
  2336.  
  2337.               // Internal: Recursively serializes an object. Implements the
  2338.               // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.
  2339.               var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {
  2340.                 var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;
  2341.                 try {
  2342.                   // Necessary for host object support.
  2343.                   value = object[property];
  2344.                 } catch (exception) {}
  2345.                 if (typeof value == "object" && value) {
  2346.                   className = getClass.call(value);
  2347.                   if (className == dateClass && !isProperty.call(value, "toJSON")) {
  2348.                     if (value > -1 / 0 && value < 1 / 0) {
  2349.                       // Dates are serialized according to the `Date#toJSON` method
  2350.                       // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15
  2351.                       // for the ISO 8601 date time string format.
  2352.                       if (getDay) {
  2353.                         // Manually compute the year, month, date, hours, minutes,
  2354.                         // seconds, and milliseconds if the `getUTC*` methods are
  2355.                         // buggy. Adapted from @Yaffle's `date-shim` project.
  2356.                         date = floor(value / 864e5);
  2357.                         for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);
  2358.                         for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);
  2359.                         date = 1 + date - getDay(year, month);
  2360.                         // The `time` value specifies the time within the day (see ES
  2361.                         // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used
  2362.                         // to compute `A modulo B`, as the `%` operator does not
  2363.                         // correspond to the `modulo` operation for negative numbers.
  2364.                         time = (value % 864e5 + 864e5) % 864e5;
  2365.                         // The hours, minutes, seconds, and milliseconds are obtained by
  2366.                         // decomposing the time within the day. See section 15.9.1.10.
  2367.                         hours = floor(time / 36e5) % 24;
  2368.                         minutes = floor(time / 6e4) % 60;
  2369.                         seconds = floor(time / 1e3) % 60;
  2370.                         milliseconds = time % 1e3;
  2371.                       } else {
  2372.                         year = value.getUTCFullYear();
  2373.                         month = value.getUTCMonth();
  2374.                         date = value.getUTCDate();
  2375.                         hours = value.getUTCHours();
  2376.                         minutes = value.getUTCMinutes();
  2377.                         seconds = value.getUTCSeconds();
  2378.                         milliseconds = value.getUTCMilliseconds();
  2379.                       }
  2380.                       // Serialize extended years correctly.
  2381.                       value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +
  2382.                         "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) +
  2383.                         // Months, dates, hours, minutes, and seconds should have two
  2384.                         // digits; milliseconds should have three.
  2385.                         "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) +
  2386.                         // Milliseconds are optional in ES 5.0, but required in 5.1.
  2387.                         "." + toPaddedString(3, milliseconds) + "Z";
  2388.                     } else {
  2389.                       value = null;
  2390.                     }
  2391.                   } else if (typeof value.toJSON == "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) {
  2392.                     // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the
  2393.                     // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3
  2394.                     // ignores all `toJSON` methods on these objects unless they are
  2395.                     // defined directly on an instance.
  2396.                     value = value.toJSON(property);
  2397.                   }
  2398.                 }
  2399.                 if (callback) {
  2400.                   // If a replacement function was provided, call it to obtain the value
  2401.                   // for serialization.
  2402.                   value = callback.call(object, property, value);
  2403.                 }
  2404.                 if (value === null) {
  2405.                   return "null";
  2406.                 }
  2407.                 className = getClass.call(value);
  2408.                 if (className == booleanClass) {
  2409.                   // Booleans are represented literally.
  2410.                   return "" + value;
  2411.                 } else if (className == numberClass) {
  2412.                   // JSON numbers must be finite. `Infinity` and `NaN` are serialized as
  2413.                   // `"null"`.
  2414.                   return value > -1 / 0 && value < 1 / 0 ? "" + value : "null";
  2415.                 } else if (className == stringClass) {
  2416.                   // Strings are double-quoted and escaped.
  2417.                   return quote("" + value);
  2418.                 }
  2419.                 // Recursively serialize objects and arrays.
  2420.                 if (typeof value == "object") {
  2421.                   // Check for cyclic structures. This is a linear search; performance
  2422.                   // is inversely proportional to the number of unique nested objects.
  2423.                   for (length = stack.length; length--;) {
  2424.                     if (stack[length] === value) {
  2425.                       // Cyclic structures cannot be serialized by `JSON.stringify`.
  2426.                       throw TypeError();
  2427.                     }
  2428.                   }
  2429.                   // Add the object to the stack of traversed objects.
  2430.                   stack.push(value);
  2431.                   results = [];
  2432.                   // Save the current indentation level and indent one additional level.
  2433.                   prefix = indentation;
  2434.                   indentation += whitespace;
  2435.                   if (className == arrayClass) {
  2436.                     // Recursively serialize array elements.
  2437.                     for (index = 0, length = value.length; index < length; index++) {
  2438.                       element = serialize(index, value, callback, properties, whitespace, indentation, stack);
  2439.                       results.push(element === undef ? "null" : element);
  2440.                     }
  2441.                     result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]";
  2442.                   } else {
  2443.                     // Recursively serialize object members. Members are selected from
  2444.                     // either a user-specified list of property names, or the object
  2445.                     // itself.
  2446.                     forEach(properties || value, function (property) {
  2447.                       var element = serialize(property, value, callback, properties, whitespace, indentation, stack);
  2448.                       if (element !== undef) {
  2449.                         // According to ES 5.1 section 15.12.3: "If `gap` {whitespace}
  2450.                         // is not the empty string, let `member` {quote(property) + ":"}
  2451.                         // be the concatenation of `member` and the `space` character."
  2452.                         // The "`space` character" refers to the literal space
  2453.                         // character, not the `space` {width} argument provided to
  2454.                         // `JSON.stringify`.
  2455.                         results.push(quote(property) + ":" + (whitespace ? " " : "") + element);
  2456.                       }
  2457.                     });
  2458.                     result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}";
  2459.                   }
  2460.                   // Remove the object from the traversed object stack.
  2461.                   stack.pop();
  2462.                   return result;
  2463.                 }
  2464.               };
  2465.  
  2466.               // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.
  2467.               exports.stringify = function (source, filter, width) {
  2468.                 var whitespace, callback, properties, className;
  2469.                 if (objectTypes[typeof filter] && filter) {
  2470.                   if ((className = getClass.call(filter)) == functionClass) {
  2471.                     callback = filter;
  2472.                   } else if (className == arrayClass) {
  2473.                     // Convert the property names array into a makeshift set.
  2474.                     properties = {};
  2475.                     for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));
  2476.                   }
  2477.                 }
  2478.                 if (width) {
  2479.                   if ((className = getClass.call(width)) == numberClass) {
  2480.                     // Convert the `width` to an integer and create a string containing
  2481.                     // `width` number of space characters.
  2482.                     if ((width -= width % 1) > 0) {
  2483.                       for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " ");
  2484.                     }
  2485.                   } else if (className == stringClass) {
  2486.                     whitespace = width.length <= 10 ? width : width.slice(0, 10);
  2487.                   }
  2488.                 }
  2489.                 // Opera <= 7.54u2 discards the values associated with empty string keys
  2490.                 // (`""`) only if they are used directly within an object member list
  2491.                 // (e.g., `!("" in { "": 1})`).
  2492.                 return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []);
  2493.               };
  2494.             }
  2495.  
  2496.             // Public: Parses a JSON source string.
  2497.             if (!has("json-parse")) {
  2498.               var fromCharCode = String.fromCharCode;
  2499.  
  2500.               // Internal: A map of escaped control characters and their unescaped
  2501.               // equivalents.
  2502.               var Unescapes = {
  2503.                 92: "\\",
  2504.                 34: '"',
  2505.                 47: "/",
  2506.                 98: "\b",
  2507.                 116: "\t",
  2508.                 110: "\n",
  2509.                 102: "\f",
  2510.                 114: "\r"
  2511.               };
  2512.  
  2513.               // Internal: Stores the parser state.
  2514.               var Index, Source;
  2515.  
  2516.               // Internal: Resets the parser state and throws a `SyntaxError`.
  2517.               var abort = function () {
  2518.                 Index = Source = null;
  2519.                 throw SyntaxError();
  2520.               };
  2521.  
  2522.               // Internal: Returns the next token, or `"$"` if the parser has reached
  2523.               // the end of the source string. A token may be a string, number, `null`
  2524.               // literal, or Boolean literal.
  2525.               var lex = function () {
  2526.                 var source = Source, length = source.length, value, begin, position, isSigned, charCode;
  2527.                 while (Index < length) {
  2528.                   charCode = source.charCodeAt(Index);
  2529.                   switch (charCode) {
  2530.                     case 9: case 10: case 13: case 32:
  2531.                       // Skip whitespace tokens, including tabs, carriage returns, line
  2532.                       // feeds, and space characters.
  2533.                       Index++;
  2534.                       break;
  2535.                     case 123: case 125: case 91: case 93: case 58: case 44:
  2536.                       // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at
  2537.                       // the current position.
  2538.                       value = charIndexBuggy ? source.charAt(Index) : source[Index];
  2539.                       Index++;
  2540.                       return value;
  2541.                     case 34:
  2542.                       // `"` delimits a JSON string; advance to the next character and
  2543.                       // begin parsing the string. String tokens are prefixed with the
  2544.                       // sentinel `@` character to distinguish them from punctuators and
  2545.                       // end-of-string tokens.
  2546.                       for (value = "@", Index++; Index < length;) {
  2547.                         charCode = source.charCodeAt(Index);
  2548.                         if (charCode < 32) {
  2549.                           // Unescaped ASCII control characters (those with a code unit
  2550.                           // less than the space character) are not permitted.
  2551.                           abort();
  2552.                         } else if (charCode == 92) {
  2553.                           // A reverse solidus (`\`) marks the beginning of an escaped
  2554.                           // control character (including `"`, `\`, and `/`) or Unicode
  2555.                           // escape sequence.
  2556.                           charCode = source.charCodeAt(++Index);
  2557.                           switch (charCode) {
  2558.                             case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:
  2559.                               // Revive escaped control characters.
  2560.                               value += Unescapes[charCode];
  2561.                               Index++;
  2562.                               break;
  2563.                             case 117:
  2564.                               // `\u` marks the beginning of a Unicode escape sequence.
  2565.                               // Advance to the first character and validate the
  2566.                               // four-digit code point.
  2567.                               begin = ++Index;
  2568.                               for (position = Index + 4; Index < position; Index++) {
  2569.                                 charCode = source.charCodeAt(Index);
  2570.                                 // A valid sequence comprises four hexdigits (case-
  2571.                                 // insensitive) that form a single hexadecimal value.
  2572.                                 if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {
  2573.                                   // Invalid Unicode escape sequence.
  2574.                                   abort();
  2575.                                 }
  2576.                               }
  2577.                               // Revive the escaped character.
  2578.                               value += fromCharCode("0x" + source.slice(begin, Index));
  2579.                               break;
  2580.                             default:
  2581.                               // Invalid escape sequence.
  2582.                               abort();
  2583.                           }
  2584.                         } else {
  2585.                           if (charCode == 34) {
  2586.                             // An unescaped double-quote character marks the end of the
  2587.                             // string.
  2588.                             break;
  2589.                           }
  2590.                           charCode = source.charCodeAt(Index);
  2591.                           begin = Index;
  2592.                           // Optimize for the common case where a string is valid.
  2593.                           while (charCode >= 32 && charCode != 92 && charCode != 34) {
  2594.                             charCode = source.charCodeAt(++Index);
  2595.                           }
  2596.                           // Append the string as-is.
  2597.                           value += source.slice(begin, Index);
  2598.                         }
  2599.                       }
  2600.                       if (source.charCodeAt(Index) == 34) {
  2601.                         // Advance to the next character and return the revived string.
  2602.                         Index++;
  2603.                         return value;
  2604.                       }
  2605.                       // Unterminated string.
  2606.                       abort();
  2607.                     default:
  2608.                       // Parse numbers and literals.
  2609.                       begin = Index;
  2610.                       // Advance past the negative sign, if one is specified.
  2611.                       if (charCode == 45) {
  2612.                         isSigned = true;
  2613.                         charCode = source.charCodeAt(++Index);
  2614.                       }
  2615.                       // Parse an integer or floating-point value.
  2616.                       if (charCode >= 48 && charCode <= 57) {
  2617.                         // Leading zeroes are interpreted as octal literals.
  2618.                         if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {
  2619.                           // Illegal octal literal.
  2620.                           abort();
  2621.                         }
  2622.                         isSigned = false;
  2623.                         // Parse the integer component.
  2624.                         for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);
  2625.                         // Floats cannot contain a leading decimal point; however, this
  2626.                         // case is already accounted for by the parser.
  2627.                         if (source.charCodeAt(Index) == 46) {
  2628.                           position = ++Index;
  2629.                           // Parse the decimal component.
  2630.                           for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);
  2631.                           if (position == Index) {
  2632.                             // Illegal trailing decimal.
  2633.                             abort();
  2634.                           }
  2635.                           Index = position;
  2636.                         }
  2637.                         // Parse exponents. The `e` denoting the exponent is
  2638.                         // case-insensitive.
  2639.                         charCode = source.charCodeAt(Index);
  2640.                         if (charCode == 101 || charCode == 69) {
  2641.                           charCode = source.charCodeAt(++Index);
  2642.                           // Skip past the sign following the exponent, if one is
  2643.                           // specified.
  2644.                           if (charCode == 43 || charCode == 45) {
  2645.                             Index++;
  2646.                           }
  2647.                           // Parse the exponential component.
  2648.                           for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);
  2649.                           if (position == Index) {
  2650.                             // Illegal empty exponent.
  2651.                             abort();
  2652.                           }
  2653.                           Index = position;
  2654.                         }
  2655.                         // Coerce the parsed value to a JavaScript number.
  2656.                         return +source.slice(begin, Index);
  2657.                       }
  2658.                       // A negative sign may only precede numbers.
  2659.                       if (isSigned) {
  2660.                         abort();
  2661.                       }
  2662.                       // `true`, `false`, and `null` literals.
  2663.                       if (source.slice(Index, Index + 4) == "true") {
  2664.                         Index += 4;
  2665.                         return true;
  2666.                       } else if (source.slice(Index, Index + 5) == "false") {
  2667.                         Index += 5;
  2668.                         return false;
  2669.                       } else if (source.slice(Index, Index + 4) == "null") {
  2670.                         Index += 4;
  2671.                         return null;
  2672.                       }
  2673.                       // Unrecognized token.
  2674.                       abort();
  2675.                   }
  2676.                 }
  2677.                 // Return the sentinel `$` character if the parser has reached the end
  2678.                 // of the source string.
  2679.                 return "$";
  2680.               };
  2681.  
  2682.               // Internal: Parses a JSON `value` token.
  2683.               var get = function (value) {
  2684.                 var results, hasMembers;
  2685.                 if (value == "$") {
  2686.                   // Unexpected end of input.
  2687.                   abort();
  2688.                 }
  2689.                 if (typeof value == "string") {
  2690.                   if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") {
  2691.                     // Remove the sentinel `@` character.
  2692.                     return value.slice(1);
  2693.                   }
  2694.                   // Parse object and array literals.
  2695.                   if (value == "[") {
  2696.                     // Parses a JSON array, returning a new JavaScript array.
  2697.                     results = [];
  2698.                     for (;; hasMembers || (hasMembers = true)) {
  2699.                       value = lex();
  2700.                       // A closing square bracket marks the end of the array literal.
  2701.                       if (value == "]") {
  2702.                         break;
  2703.                       }
  2704.                       // If the array literal contains elements, the current token
  2705.                       // should be a comma separating the previous element from the
  2706.                       // next.
  2707.                       if (hasMembers) {
  2708.                         if (value == ",") {
  2709.                           value = lex();
  2710.                           if (value == "]") {
  2711.                             // Unexpected trailing `,` in array literal.
  2712.                             abort();
  2713.                           }
  2714.                         } else {
  2715.                           // A `,` must separate each array element.
  2716.                           abort();
  2717.                         }
  2718.                       }
  2719.                       // Elisions and leading commas are not permitted.
  2720.                       if (value == ",") {
  2721.                         abort();
  2722.                       }
  2723.                       results.push(get(value));
  2724.                     }
  2725.                     return results;
  2726.                   } else if (value == "{") {
  2727.                     // Parses a JSON object, returning a new JavaScript object.
  2728.                     results = {};
  2729.                     for (;; hasMembers || (hasMembers = true)) {
  2730.                       value = lex();
  2731.                       // A closing curly brace marks the end of the object literal.
  2732.                       if (value == "}") {
  2733.                         break;
  2734.                       }
  2735.                       // If the object literal contains members, the current token
  2736.                       // should be a comma separator.
  2737.                       if (hasMembers) {
  2738.                         if (value == ",") {
  2739.                           value = lex();
  2740.                           if (value == "}") {
  2741.                             // Unexpected trailing `,` in object literal.
  2742.                             abort();
  2743.                           }
  2744.                         } else {
  2745.                           // A `,` must separate each object member.
  2746.                           abort();
  2747.                         }
  2748.                       }
  2749.                       // Leading commas are not permitted, object property names must be
  2750.                       // double-quoted strings, and a `:` must separate each property
  2751.                       // name and value.
  2752.                       if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") {
  2753.                         abort();
  2754.                       }
  2755.                       results[value.slice(1)] = get(lex());
  2756.                     }
  2757.                     return results;
  2758.                   }
  2759.                   // Unexpected token encountered.
  2760.                   abort();
  2761.                 }
  2762.                 return value;
  2763.               };
  2764.  
  2765.               // Internal: Updates a traversed object member.
  2766.               var update = function (source, property, callback) {
  2767.                 var element = walk(source, property, callback);
  2768.                 if (element === undef) {
  2769.                   delete source[property];
  2770.                 } else {
  2771.                   source[property] = element;
  2772.                 }
  2773.               };
  2774.  
  2775.               // Internal: Recursively traverses a parsed JSON object, invoking the
  2776.               // `callback` function for each value. This is an implementation of the
  2777.               // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.
  2778.               var walk = function (source, property, callback) {
  2779.                 var value = source[property], length;
  2780.                 if (typeof value == "object" && value) {
  2781.                   // `forEach` can't be used to traverse an array in Opera <= 8.54
  2782.                   // because its `Object#hasOwnProperty` implementation returns `false`
  2783.                   // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`).
  2784.                   if (getClass.call(value) == arrayClass) {
  2785.                     for (length = value.length; length--;) {
  2786.                       update(value, length, callback);
  2787.                     }
  2788.                   } else {
  2789.                     forEach(value, function (property) {
  2790.                       update(value, property, callback);
  2791.                     });
  2792.                   }
  2793.                 }
  2794.                 return callback.call(source, property, value);
  2795.               };
  2796.  
  2797.               // Public: `JSON.parse`. See ES 5.1 section 15.12.2.
  2798.               exports.parse = function (source, callback) {
  2799.                 var result, value;
  2800.                 Index = 0;
  2801.                 Source = "" + source;
  2802.                 result = get(lex());
  2803.                 // If a JSON string contains multiple tokens, it is invalid.
  2804.                 if (lex() != "$") {
  2805.                   abort();
  2806.                 }
  2807.                 // Reset the parser state.
  2808.                 Index = Source = null;
  2809.                 return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result;
  2810.               };
  2811.             }
  2812.           }
  2813.  
  2814.           exports["runInContext"] = runInContext;
  2815.           return exports;
  2816.         }
  2817.  
  2818.         if (freeExports && !isLoader) {
  2819.           // Export for CommonJS environments.
  2820.           runInContext(root, freeExports);
  2821.         } else {
  2822.           // Export for web browsers and JavaScript engines.
  2823.           var nativeJSON = root.JSON,
  2824.               previousJSON = root["JSON3"],
  2825.               isRestored = false;
  2826.  
  2827.           var JSON3 = runInContext(root, (root["JSON3"] = {
  2828.             // Public: Restores the original value of the global `JSON` object and
  2829.             // returns a reference to the `JSON3` object.
  2830.             "noConflict": function () {
  2831.               if (!isRestored) {
  2832.                 isRestored = true;
  2833.                 root.JSON = nativeJSON;
  2834.                 root["JSON3"] = previousJSON;
  2835.                 nativeJSON = previousJSON = null;
  2836.               }
  2837.               return JSON3;
  2838.             }
  2839.           }));
  2840.  
  2841.           root.JSON = {
  2842.             "parse": JSON3.parse,
  2843.             "stringify": JSON3.stringify
  2844.           };
  2845.         }
  2846.  
  2847.         // Export for asynchronous module loaders.
  2848.         if (isLoader) {
  2849.           define(function () {
  2850.             return JSON3;
  2851.           });
  2852.         }
  2853.       }).call(this);
  2854.  
  2855.  
  2856.       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(12)(module), (function() { return this; }())))
  2857.  
  2858. /***/ },
  2859. /* 12 */
  2860. /***/ function(module, exports) {
  2861.  
  2862.       module.exports = function(module) {
  2863.             if(!module.webpackPolyfill) {
  2864.                   module.deprecate = function() {};
  2865.                   module.paths = [];
  2866.                   // module.parent = undefined by default
  2867.                   module.children = [];
  2868.                   module.webpackPolyfill = 1;
  2869.             }
  2870.             return module;
  2871.       }
  2872.  
  2873.  
  2874. /***/ },
  2875. /* 13 */
  2876. /***/ function(module, exports) {
  2877.  
  2878.      
  2879.       /**
  2880.        * Expose `Emitter`.
  2881.        */
  2882.  
  2883.       module.exports = Emitter;
  2884.  
  2885.       /**
  2886.        * Initialize a new `Emitter`.
  2887.        *
  2888.        * @api public
  2889.        */
  2890.  
  2891.       function Emitter(obj) {
  2892.         if (obj) return mixin(obj);
  2893.       };
  2894.  
  2895.       /**
  2896.        * Mixin the emitter properties.
  2897.        *
  2898.        * @param {Object} obj
  2899.        * @return {Object}
  2900.        * @api private
  2901.        */
  2902.  
  2903.       function mixin(obj) {
  2904.         for (var key in Emitter.prototype) {
  2905.           obj[key] = Emitter.prototype[key];
  2906.         }
  2907.         return obj;
  2908.       }
  2909.  
  2910.       /**
  2911.        * Listen on the given `event` with `fn`.
  2912.        *
  2913.        * @param {String} event
  2914.        * @param {Function} fn
  2915.        * @return {Emitter}
  2916.        * @api public
  2917.        */
  2918.  
  2919.       Emitter.prototype.on =
  2920.       Emitter.prototype.addEventListener = function(event, fn){
  2921.         this._callbacks = this._callbacks || {};
  2922.         (this._callbacks[event] = this._callbacks[event] || [])
  2923.           .push(fn);
  2924.         return this;
  2925.       };
  2926.  
  2927.       /**
  2928.        * Adds an `event` listener that will be invoked a single
  2929.        * time then automatically removed.
  2930.        *
  2931.        * @param {String} event
  2932.        * @param {Function} fn
  2933.        * @return {Emitter}
  2934.        * @api public
  2935.        */
  2936.  
  2937.       Emitter.prototype.once = function(event, fn){
  2938.         var self = this;
  2939.         this._callbacks = this._callbacks || {};
  2940.  
  2941.         function on() {
  2942.           self.off(event, on);
  2943.           fn.apply(this, arguments);
  2944.         }
  2945.  
  2946.         on.fn = fn;
  2947.         this.on(event, on);
  2948.         return this;
  2949.       };
  2950.  
  2951.       /**
  2952.        * Remove the given callback for `event` or all
  2953.        * registered callbacks.
  2954.        *
  2955.        * @param {String} event
  2956.        * @param {Function} fn
  2957.        * @return {Emitter}
  2958.        * @api public
  2959.        */
  2960.  
  2961.       Emitter.prototype.off =
  2962.       Emitter.prototype.removeListener =
  2963.       Emitter.prototype.removeAllListeners =
  2964.       Emitter.prototype.removeEventListener = function(event, fn){
  2965.         this._callbacks = this._callbacks || {};
  2966.  
  2967.         // all
  2968.         if (0 == arguments.length) {
  2969.           this._callbacks = {};
  2970.           return this;
  2971.         }
  2972.  
  2973.         // specific event
  2974.         var callbacks = this._callbacks[event];
  2975.         if (!callbacks) return this;
  2976.  
  2977.         // remove all handlers
  2978.         if (1 == arguments.length) {
  2979.           delete this._callbacks[event];
  2980.           return this;
  2981.         }
  2982.  
  2983.         // remove specific handler
  2984.         var cb;
  2985.         for (var i = 0; i < callbacks.length; i++) {
  2986.           cb = callbacks[i];
  2987.           if (cb === fn || cb.fn === fn) {
  2988.             callbacks.splice(i, 1);
  2989.             break;
  2990.           }
  2991.         }
  2992.         return this;
  2993.       };
  2994.  
  2995.       /**
  2996.        * Emit `event` with the given args.
  2997.        *
  2998.        * @param {String} event
  2999.        * @param {Mixed} ...
  3000.        * @return {Emitter}
  3001.        */
  3002.  
  3003.       Emitter.prototype.emit = function(event){
  3004.         this._callbacks = this._callbacks || {};
  3005.         var args = [].slice.call(arguments, 1)
  3006.           , callbacks = this._callbacks[event];
  3007.  
  3008.         if (callbacks) {
  3009.           callbacks = callbacks.slice(0);
  3010.           for (var i = 0, len = callbacks.length; i < len; ++i) {
  3011.             callbacks[i].apply(this, args);
  3012.           }
  3013.         }
  3014.  
  3015.         return this;
  3016.       };
  3017.  
  3018.       /**
  3019.        * Return array of callbacks for `event`.
  3020.        *
  3021.        * @param {String} event
  3022.        * @return {Array}
  3023.        * @api public
  3024.        */
  3025.  
  3026.       Emitter.prototype.listeners = function(event){
  3027.         this._callbacks = this._callbacks || {};
  3028.         return this._callbacks[event] || [];
  3029.       };
  3030.  
  3031.       /**
  3032.        * Check if this emitter has `event` handlers.
  3033.        *
  3034.        * @param {String} event
  3035.        * @return {Boolean}
  3036.        * @api public
  3037.        */
  3038.  
  3039.       Emitter.prototype.hasListeners = function(event){
  3040.         return !! this.listeners(event).length;
  3041.       };
  3042.  
  3043.  
  3044. /***/ },
  3045. /* 14 */
  3046. /***/ function(module, exports, __webpack_require__) {
  3047.  
  3048.       /* WEBPACK VAR INJECTION */(function(global) {/*global Blob,File*/
  3049.  
  3050.       /**
  3051.        * Module requirements
  3052.        */
  3053.  
  3054.       var isArray = __webpack_require__(15);
  3055.       var isBuf = __webpack_require__(16);
  3056.  
  3057.       /**
  3058.        * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.
  3059.        * Anything with blobs or files should be fed through removeBlobs before coming
  3060.        * here.
  3061.        *
  3062.        * @param {Object} packet - socket.io event packet
  3063.        * @return {Object} with deconstructed packet and list of buffers
  3064.        * @api public
  3065.        */
  3066.  
  3067.       exports.deconstructPacket = function(packet){
  3068.         var buffers = [];
  3069.         var packetData = packet.data;
  3070.  
  3071.         function _deconstructPacket(data) {
  3072.           if (!data) return data;
  3073.  
  3074.           if (isBuf(data)) {
  3075.             var placeholder = { _placeholder: true, num: buffers.length };
  3076.             buffers.push(data);
  3077.             return placeholder;
  3078.           } else if (isArray(data)) {
  3079.             var newData = new Array(data.length);
  3080.             for (var i = 0; i < data.length; i++) {
  3081.               newData[i] = _deconstructPacket(data[i]);
  3082.             }
  3083.             return newData;
  3084.           } else if ('object' == typeof data && !(data instanceof Date)) {
  3085.             var newData = {};
  3086.             for (var key in data) {
  3087.               newData[key] = _deconstructPacket(data[key]);
  3088.             }
  3089.             return newData;
  3090.           }
  3091.           return data;
  3092.         }
  3093.  
  3094.         var pack = packet;
  3095.         pack.data = _deconstructPacket(packetData);
  3096.         pack.attachments = buffers.length; // number of binary 'attachments'
  3097.         return {packet: pack, buffers: buffers};
  3098.       };
  3099.  
  3100.       /**
  3101.        * Reconstructs a binary packet from its placeholder packet and buffers
  3102.        *
  3103.        * @param {Object} packet - event packet with placeholders
  3104.        * @param {Array} buffers - binary buffers to put in placeholder positions
  3105.        * @return {Object} reconstructed packet
  3106.        * @api public
  3107.        */
  3108.  
  3109.       exports.reconstructPacket = function(packet, buffers) {
  3110.         var curPlaceHolder = 0;
  3111.  
  3112.         function _reconstructPacket(data) {
  3113.           if (data && data._placeholder) {
  3114.             var buf = buffers[data.num]; // appropriate buffer (should be natural order anyway)
  3115.             return buf;
  3116.           } else if (isArray(data)) {
  3117.             for (var i = 0; i < data.length; i++) {
  3118.               data[i] = _reconstructPacket(data[i]);
  3119.             }
  3120.             return data;
  3121.           } else if (data && 'object' == typeof data) {
  3122.             for (var key in data) {
  3123.               data[key] = _reconstructPacket(data[key]);
  3124.             }
  3125.             return data;
  3126.           }
  3127.           return data;
  3128.         }
  3129.  
  3130.         packet.data = _reconstructPacket(packet.data);
  3131.         packet.attachments = undefined; // no longer useful
  3132.         return packet;
  3133.       };
  3134.  
  3135.       /**
  3136.        * Asynchronously removes Blobs or Files from data via
  3137.        * FileReader's readAsArrayBuffer method. Used before encoding
  3138.        * data as msgpack. Calls callback with the blobless data.
  3139.        *
  3140.        * @param {Object} data
  3141.        * @param {Function} callback
  3142.        * @api private
  3143.        */
  3144.  
  3145.       exports.removeBlobs = function(data, callback) {
  3146.         function _removeBlobs(obj, curKey, containingObject) {
  3147.           if (!obj) return obj;
  3148.  
  3149.           // convert any blob
  3150.           if ((global.Blob && obj instanceof Blob) ||
  3151.               (global.File && obj instanceof File)) {
  3152.             pendingBlobs++;
  3153.  
  3154.             // async filereader
  3155.             var fileReader = new FileReader();
  3156.             fileReader.onload = function() { // this.result == arraybuffer
  3157.               if (containingObject) {
  3158.                 containingObject[curKey] = this.result;
  3159.               }
  3160.               else {
  3161.                 bloblessData = this.result;
  3162.               }
  3163.  
  3164.               // if nothing pending its callback time
  3165.               if(! --pendingBlobs) {
  3166.                 callback(bloblessData);
  3167.               }
  3168.             };
  3169.  
  3170.             fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer
  3171.           } else if (isArray(obj)) { // handle array
  3172.             for (var i = 0; i < obj.length; i++) {
  3173.               _removeBlobs(obj[i], i, obj);
  3174.             }
  3175.           } else if (obj && 'object' == typeof obj && !isBuf(obj)) { // and object
  3176.             for (var key in obj) {
  3177.               _removeBlobs(obj[key], key, obj);
  3178.             }
  3179.           }
  3180.         }
  3181.  
  3182.         var pendingBlobs = 0;
  3183.         var bloblessData = data;
  3184.         _removeBlobs(bloblessData);
  3185.         if (!pendingBlobs) {
  3186.           callback(bloblessData);
  3187.         }
  3188.       };
  3189.  
  3190.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  3191.  
  3192. /***/ },
  3193. /* 15 */
  3194. /***/ function(module, exports) {
  3195.  
  3196.       module.exports = Array.isArray || function (arr) {
  3197.         return Object.prototype.toString.call(arr) == '[object Array]';
  3198.       };
  3199.  
  3200.  
  3201. /***/ },
  3202. /* 16 */
  3203. /***/ function(module, exports) {
  3204.  
  3205.       /* WEBPACK VAR INJECTION */(function(global) {
  3206.       module.exports = isBuf;
  3207.  
  3208.       /**
  3209.        * Returns true if obj is a buffer or an arraybuffer.
  3210.        *
  3211.        * @api private
  3212.        */
  3213.  
  3214.       function isBuf(obj) {
  3215.         return (global.Buffer && global.Buffer.isBuffer(obj)) ||
  3216.                (global.ArrayBuffer && obj instanceof ArrayBuffer);
  3217.       }
  3218.  
  3219.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  3220.  
  3221. /***/ },
  3222. /* 17 */
  3223. /***/ function(module, exports, __webpack_require__) {
  3224.  
  3225.       'use strict';
  3226.  
  3227.       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  3228.  
  3229.       /**
  3230.        * Module dependencies.
  3231.        */
  3232.  
  3233.       var eio = __webpack_require__(18);
  3234.       var Socket = __webpack_require__(45);
  3235.       var Emitter = __webpack_require__(36);
  3236.       var parser = __webpack_require__(7);
  3237.       var on = __webpack_require__(47);
  3238.       var bind = __webpack_require__(48);
  3239.       var debug = __webpack_require__(3)('socket.io-client:manager');
  3240.       var indexOf = __webpack_require__(43);
  3241.       var Backoff = __webpack_require__(51);
  3242.  
  3243.       /**
  3244.        * IE6+ hasOwnProperty
  3245.        */
  3246.  
  3247.       var has = Object.prototype.hasOwnProperty;
  3248.  
  3249.       /**
  3250.        * Module exports
  3251.        */
  3252.  
  3253.       module.exports = Manager;
  3254.  
  3255.       /**
  3256.        * `Manager` constructor.
  3257.        *
  3258.        * @param {String} engine instance or engine uri/opts
  3259.        * @param {Object} options
  3260.        * @api public
  3261.        */
  3262.  
  3263.       function Manager(uri, opts) {
  3264.         if (!(this instanceof Manager)) return new Manager(uri, opts);
  3265.         if (uri && 'object' === (typeof uri === 'undefined' ? 'undefined' : _typeof(uri))) {
  3266.           opts = uri;
  3267.           uri = undefined;
  3268.         }
  3269.         opts = opts || {};
  3270.  
  3271.         opts.path = opts.path || '/socket.io';
  3272.         this.nsps = {};
  3273.         this.subs = [];
  3274.         this.opts = opts;
  3275.         this.reconnection(opts.reconnection !== false);
  3276.         this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);
  3277.         this.reconnectionDelay(opts.reconnectionDelay || 1000);
  3278.         this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);
  3279.         this.randomizationFactor(opts.randomizationFactor || 0.5);
  3280.         this.backoff = new Backoff({
  3281.           min: this.reconnectionDelay(),
  3282.           max: this.reconnectionDelayMax(),
  3283.           jitter: this.randomizationFactor()
  3284.         });
  3285.         this.timeout(null == opts.timeout ? 20000 : opts.timeout);
  3286.         this.readyState = 'closed';
  3287.         this.uri = uri;
  3288.         this.connecting = [];
  3289.         this.lastPing = null;
  3290.         this.encoding = false;
  3291.         this.packetBuffer = [];
  3292.         this.encoder = new parser.Encoder();
  3293.         this.decoder = new parser.Decoder();
  3294.         this.autoConnect = opts.autoConnect !== false;
  3295.         if (this.autoConnect) this.open();
  3296.       }
  3297.  
  3298.       /**
  3299.        * Propagate given event to sockets and emit on `this`
  3300.        *
  3301.        * @api private
  3302.        */
  3303.  
  3304.       Manager.prototype.emitAll = function () {
  3305.         this.emit.apply(this, arguments);
  3306.         for (var nsp in this.nsps) {
  3307.           if (has.call(this.nsps, nsp)) {
  3308.             this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);
  3309.           }
  3310.         }
  3311.       };
  3312.  
  3313.       /**
  3314.        * Update `socket.id` of all sockets
  3315.        *
  3316.        * @api private
  3317.        */
  3318.  
  3319.       Manager.prototype.updateSocketIds = function () {
  3320.         for (var nsp in this.nsps) {
  3321.           if (has.call(this.nsps, nsp)) {
  3322.             this.nsps[nsp].id = this.engine.id;
  3323.           }
  3324.         }
  3325.       };
  3326.  
  3327.       /**
  3328.        * Mix in `Emitter`.
  3329.        */
  3330.  
  3331.       Emitter(Manager.prototype);
  3332.  
  3333.       /**
  3334.        * Sets the `reconnection` config.
  3335.        *
  3336.        * @param {Boolean} true/false if it should automatically reconnect
  3337.        * @return {Manager} self or value
  3338.        * @api public
  3339.        */
  3340.  
  3341.       Manager.prototype.reconnection = function (v) {
  3342.         if (!arguments.length) return this._reconnection;
  3343.         this._reconnection = !!v;
  3344.         return this;
  3345.       };
  3346.  
  3347.       /**
  3348.        * Sets the reconnection attempts config.
  3349.        *
  3350.        * @param {Number} max reconnection attempts before giving up
  3351.        * @return {Manager} self or value
  3352.        * @api public
  3353.        */
  3354.  
  3355.       Manager.prototype.reconnectionAttempts = function (v) {
  3356.         if (!arguments.length) return this._reconnectionAttempts;
  3357.         this._reconnectionAttempts = v;
  3358.         return this;
  3359.       };
  3360.  
  3361.       /**
  3362.        * Sets the delay between reconnections.
  3363.        *
  3364.        * @param {Number} delay
  3365.        * @return {Manager} self or value
  3366.        * @api public
  3367.        */
  3368.  
  3369.       Manager.prototype.reconnectionDelay = function (v) {
  3370.         if (!arguments.length) return this._reconnectionDelay;
  3371.         this._reconnectionDelay = v;
  3372.         this.backoff && this.backoff.setMin(v);
  3373.         return this;
  3374.       };
  3375.  
  3376.       Manager.prototype.randomizationFactor = function (v) {
  3377.         if (!arguments.length) return this._randomizationFactor;
  3378.         this._randomizationFactor = v;
  3379.         this.backoff && this.backoff.setJitter(v);
  3380.         return this;
  3381.       };
  3382.  
  3383.       /**
  3384.        * Sets the maximum delay between reconnections.
  3385.        *
  3386.        * @param {Number} delay
  3387.        * @return {Manager} self or value
  3388.        * @api public
  3389.        */
  3390.  
  3391.       Manager.prototype.reconnectionDelayMax = function (v) {
  3392.         if (!arguments.length) return this._reconnectionDelayMax;
  3393.         this._reconnectionDelayMax = v;
  3394.         this.backoff && this.backoff.setMax(v);
  3395.         return this;
  3396.       };
  3397.  
  3398.       /**
  3399.        * Sets the connection timeout. `false` to disable
  3400.        *
  3401.        * @return {Manager} self or value
  3402.        * @api public
  3403.        */
  3404.  
  3405.       Manager.prototype.timeout = function (v) {
  3406.         if (!arguments.length) return this._timeout;
  3407.         this._timeout = v;
  3408.         return this;
  3409.       };
  3410.  
  3411.       /**
  3412.        * Starts trying to reconnect if reconnection is enabled and we have not
  3413.        * started reconnecting yet
  3414.        *
  3415.        * @api private
  3416.        */
  3417.  
  3418.       Manager.prototype.maybeReconnectOnOpen = function () {
  3419.         // Only try to reconnect if it's the first time we're connecting
  3420.         if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {
  3421.           // keeps reconnection from firing twice for the same reconnection loop
  3422.           this.reconnect();
  3423.         }
  3424.       };
  3425.  
  3426.       /**
  3427.        * Sets the current transport `socket`.
  3428.        *
  3429.        * @param {Function} optional, callback
  3430.        * @return {Manager} self
  3431.        * @api public
  3432.        */
  3433.  
  3434.       Manager.prototype.open = Manager.prototype.connect = function (fn, opts) {
  3435.         debug('readyState %s', this.readyState);
  3436.         if (~this.readyState.indexOf('open')) return this;
  3437.  
  3438.         debug('opening %s', this.uri);
  3439.         this.engine = eio(this.uri, this.opts);
  3440.         var socket = this.engine;
  3441.         var self = this;
  3442.         this.readyState = 'opening';
  3443.         this.skipReconnect = false;
  3444.  
  3445.         // emit `open`
  3446.         var openSub = on(socket, 'open', function () {
  3447.           self.onopen();
  3448.           fn && fn();
  3449.         });
  3450.  
  3451.         // emit `connect_error`
  3452.         var errorSub = on(socket, 'error', function (data) {
  3453.           debug('connect_error');
  3454.           self.cleanup();
  3455.           self.readyState = 'closed';
  3456.           self.emitAll('connect_error', data);
  3457.           if (fn) {
  3458.             var err = new Error('Connection error');
  3459.             err.data = data;
  3460.             fn(err);
  3461.           } else {
  3462.             // Only do this if there is no fn to handle the error
  3463.             self.maybeReconnectOnOpen();
  3464.           }
  3465.         });
  3466.  
  3467.         // emit `connect_timeout`
  3468.         if (false !== this._timeout) {
  3469.           var timeout = this._timeout;
  3470.           debug('connect attempt will timeout after %d', timeout);
  3471.  
  3472.           // set timer
  3473.           var timer = setTimeout(function () {
  3474.             debug('connect attempt timed out after %d', timeout);
  3475.             openSub.destroy();
  3476.             socket.close();
  3477.             socket.emit('error', 'timeout');
  3478.             self.emitAll('connect_timeout', timeout);
  3479.           }, timeout);
  3480.  
  3481.           this.subs.push({
  3482.             destroy: function destroy() {
  3483.               clearTimeout(timer);
  3484.             }
  3485.           });
  3486.         }
  3487.  
  3488.         this.subs.push(openSub);
  3489.         this.subs.push(errorSub);
  3490.  
  3491.         return this;
  3492.       };
  3493.  
  3494.       /**
  3495.        * Called upon transport open.
  3496.        *
  3497.        * @api private
  3498.        */
  3499.  
  3500.       Manager.prototype.onopen = function () {
  3501.         debug('open');
  3502.  
  3503.         // clear old subs
  3504.         this.cleanup();
  3505.  
  3506.         // mark as open
  3507.         this.readyState = 'open';
  3508.         this.emit('open');
  3509.  
  3510.         // add new subs
  3511.         var socket = this.engine;
  3512.         this.subs.push(on(socket, 'data', bind(this, 'ondata')));
  3513.         this.subs.push(on(socket, 'ping', bind(this, 'onping')));
  3514.         this.subs.push(on(socket, 'pong', bind(this, 'onpong')));
  3515.         this.subs.push(on(socket, 'error', bind(this, 'onerror')));
  3516.         this.subs.push(on(socket, 'close', bind(this, 'onclose')));
  3517.         this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));
  3518.       };
  3519.  
  3520.       /**
  3521.        * Called upon a ping.
  3522.        *
  3523.        * @api private
  3524.        */
  3525.  
  3526.       Manager.prototype.onping = function () {
  3527.         this.lastPing = new Date();
  3528.         this.emitAll('ping');
  3529.       };
  3530.  
  3531.       /**
  3532.        * Called upon a packet.
  3533.        *
  3534.        * @api private
  3535.        */
  3536.  
  3537.       Manager.prototype.onpong = function () {
  3538.         this.emitAll('pong', new Date() - this.lastPing);
  3539.       };
  3540.  
  3541.       /**
  3542.        * Called with data.
  3543.        *
  3544.        * @api private
  3545.        */
  3546.  
  3547.       Manager.prototype.ondata = function (data) {
  3548.         this.decoder.add(data);
  3549.       };
  3550.  
  3551.       /**
  3552.        * Called when parser fully decodes a packet.
  3553.        *
  3554.        * @api private
  3555.        */
  3556.  
  3557.       Manager.prototype.ondecoded = function (packet) {
  3558.         this.emit('packet', packet);
  3559.       };
  3560.  
  3561.       /**
  3562.        * Called upon socket error.
  3563.        *
  3564.        * @api private
  3565.        */
  3566.  
  3567.       Manager.prototype.onerror = function (err) {
  3568.         debug('error', err);
  3569.         this.emitAll('error', err);
  3570.       };
  3571.  
  3572.       /**
  3573.        * Creates a new socket for the given `nsp`.
  3574.        *
  3575.        * @return {Socket}
  3576.        * @api public
  3577.        */
  3578.  
  3579.       Manager.prototype.socket = function (nsp, opts) {
  3580.         var socket = this.nsps[nsp];
  3581.         if (!socket) {
  3582.           socket = new Socket(this, nsp, opts);
  3583.           this.nsps[nsp] = socket;
  3584.           var self = this;
  3585.           socket.on('connecting', onConnecting);
  3586.           socket.on('connect', function () {
  3587.             socket.id = self.engine.id;
  3588.           });
  3589.  
  3590.           if (this.autoConnect) {
  3591.             // manually call here since connecting evnet is fired before listening
  3592.             onConnecting();
  3593.           }
  3594.         }
  3595.  
  3596.         function onConnecting() {
  3597.           if (!~indexOf(self.connecting, socket)) {
  3598.             self.connecting.push(socket);
  3599.           }
  3600.         }
  3601.  
  3602.         return socket;
  3603.       };
  3604.  
  3605.       /**
  3606.        * Called upon a socket close.
  3607.        *
  3608.        * @param {Socket} socket
  3609.        */
  3610.  
  3611.       Manager.prototype.destroy = function (socket) {
  3612.         var index = indexOf(this.connecting, socket);
  3613.         if (~index) this.connecting.splice(index, 1);
  3614.         if (this.connecting.length) return;
  3615.  
  3616.         this.close();
  3617.       };
  3618.  
  3619.       /**
  3620.        * Writes a packet.
  3621.        *
  3622.        * @param {Object} packet
  3623.        * @api private
  3624.        */
  3625.  
  3626.       Manager.prototype.packet = function (packet) {
  3627.         debug('writing packet %j', packet);
  3628.         var self = this;
  3629.         if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;
  3630.  
  3631.         if (!self.encoding) {
  3632.           // encode, then write to engine with result
  3633.           self.encoding = true;
  3634.           this.encoder.encode(packet, function (encodedPackets) {
  3635.             for (var i = 0; i < encodedPackets.length; i++) {
  3636.               self.engine.write(encodedPackets[i], packet.options);
  3637.             }
  3638.             self.encoding = false;
  3639.             self.processPacketQueue();
  3640.           });
  3641.         } else {
  3642.           // add packet to the queue
  3643.           self.packetBuffer.push(packet);
  3644.         }
  3645.       };
  3646.  
  3647.       /**
  3648.        * If packet buffer is non-empty, begins encoding the
  3649.        * next packet in line.
  3650.        *
  3651.        * @api private
  3652.        */
  3653.  
  3654.       Manager.prototype.processPacketQueue = function () {
  3655.         if (this.packetBuffer.length > 0 && !this.encoding) {
  3656.           var pack = this.packetBuffer.shift();
  3657.           this.packet(pack);
  3658.         }
  3659.       };
  3660.  
  3661.       /**
  3662.        * Clean up transport subscriptions and packet buffer.
  3663.        *
  3664.        * @api private
  3665.        */
  3666.  
  3667.       Manager.prototype.cleanup = function () {
  3668.         debug('cleanup');
  3669.  
  3670.         var subsLength = this.subs.length;
  3671.         for (var i = 0; i < subsLength; i++) {
  3672.           var sub = this.subs.shift();
  3673.           sub.destroy();
  3674.         }
  3675.  
  3676.         this.packetBuffer = [];
  3677.         this.encoding = false;
  3678.         this.lastPing = null;
  3679.  
  3680.         this.decoder.destroy();
  3681.       };
  3682.  
  3683.       /**
  3684.        * Close the current socket.
  3685.        *
  3686.        * @api private
  3687.        */
  3688.  
  3689.       Manager.prototype.close = Manager.prototype.disconnect = function () {
  3690.         debug('disconnect');
  3691.         this.skipReconnect = true;
  3692.         this.reconnecting = false;
  3693.         if ('opening' === this.readyState) {
  3694.           // `onclose` will not fire because
  3695.           // an open event never happened
  3696.           this.cleanup();
  3697.         }
  3698.         this.backoff.reset();
  3699.         this.readyState = 'closed';
  3700.         if (this.engine) this.engine.close();
  3701.       };
  3702.  
  3703.       /**
  3704.        * Called upon engine close.
  3705.        *
  3706.        * @api private
  3707.        */
  3708.  
  3709.       Manager.prototype.onclose = function (reason) {
  3710.         debug('onclose');
  3711.  
  3712.         this.cleanup();
  3713.         this.backoff.reset();
  3714.         this.readyState = 'closed';
  3715.         this.emit('close', reason);
  3716.  
  3717.         if (this._reconnection && !this.skipReconnect) {
  3718.           this.reconnect();
  3719.         }
  3720.       };
  3721.  
  3722.       /**
  3723.        * Attempt a reconnection.
  3724.        *
  3725.        * @api private
  3726.        */
  3727.  
  3728.       Manager.prototype.reconnect = function () {
  3729.         if (this.reconnecting || this.skipReconnect) return this;
  3730.  
  3731.         var self = this;
  3732.  
  3733.         if (this.backoff.attempts >= this._reconnectionAttempts) {
  3734.           debug('reconnect failed');
  3735.           this.backoff.reset();
  3736.           this.emitAll('reconnect_failed');
  3737.           this.reconnecting = false;
  3738.         } else {
  3739.           var delay = this.backoff.duration();
  3740.           debug('will wait %dms before reconnect attempt', delay);
  3741.  
  3742.           this.reconnecting = true;
  3743.           var timer = setTimeout(function () {
  3744.             if (self.skipReconnect) return;
  3745.  
  3746.             debug('attempting reconnect');
  3747.             self.emitAll('reconnect_attempt', self.backoff.attempts);
  3748.             self.emitAll('reconnecting', self.backoff.attempts);
  3749.  
  3750.             // check again for the case socket closed in above events
  3751.             if (self.skipReconnect) return;
  3752.  
  3753.             self.open(function (err) {
  3754.               if (err) {
  3755.                 debug('reconnect attempt error');
  3756.                 self.reconnecting = false;
  3757.                 self.reconnect();
  3758.                 self.emitAll('reconnect_error', err.data);
  3759.               } else {
  3760.                 debug('reconnect success');
  3761.                 self.onreconnect();
  3762.               }
  3763.             });
  3764.           }, delay);
  3765.  
  3766.           this.subs.push({
  3767.             destroy: function destroy() {
  3768.               clearTimeout(timer);
  3769.             }
  3770.           });
  3771.         }
  3772.       };
  3773.  
  3774.       /**
  3775.        * Called upon successful reconnect.
  3776.        *
  3777.        * @api private
  3778.        */
  3779.  
  3780.       Manager.prototype.onreconnect = function () {
  3781.         var attempt = this.backoff.attempts;
  3782.         this.reconnecting = false;
  3783.         this.backoff.reset();
  3784.         this.updateSocketIds();
  3785.         this.emitAll('reconnect', attempt);
  3786.       };
  3787.  
  3788. /***/ },
  3789. /* 18 */
  3790. /***/ function(module, exports, __webpack_require__) {
  3791.  
  3792.      
  3793.       module.exports = __webpack_require__(19);
  3794.  
  3795.  
  3796. /***/ },
  3797. /* 19 */
  3798. /***/ function(module, exports, __webpack_require__) {
  3799.  
  3800.      
  3801.       module.exports = __webpack_require__(20);
  3802.  
  3803.       /**
  3804.        * Exports parser
  3805.        *
  3806.        * @api public
  3807.        *
  3808.        */
  3809.       module.exports.parser = __webpack_require__(27);
  3810.  
  3811.  
  3812. /***/ },
  3813. /* 20 */
  3814. /***/ function(module, exports, __webpack_require__) {
  3815.  
  3816.       /* WEBPACK VAR INJECTION */(function(global) {/**
  3817.        * Module dependencies.
  3818.        */
  3819.  
  3820.       var transports = __webpack_require__(21);
  3821.       var Emitter = __webpack_require__(36);
  3822.       var debug = __webpack_require__(3)('engine.io-client:socket');
  3823.       var index = __webpack_require__(43);
  3824.       var parser = __webpack_require__(27);
  3825.       var parseuri = __webpack_require__(2);
  3826.       var parsejson = __webpack_require__(44);
  3827.       var parseqs = __webpack_require__(37);
  3828.  
  3829.       /**
  3830.        * Module exports.
  3831.        */
  3832.  
  3833.       module.exports = Socket;
  3834.  
  3835.       /**
  3836.        * Socket constructor.
  3837.        *
  3838.        * @param {String|Object} uri or options
  3839.        * @param {Object} options
  3840.        * @api public
  3841.        */
  3842.  
  3843.       function Socket (uri, opts) {
  3844.         if (!(this instanceof Socket)) return new Socket(uri, opts);
  3845.  
  3846.         opts = opts || {};
  3847.  
  3848.         if (uri && 'object' === typeof uri) {
  3849.           opts = uri;
  3850.           uri = null;
  3851.         }
  3852.  
  3853.         if (uri) {
  3854.           uri = parseuri(uri);
  3855.           opts.hostname = uri.host;
  3856.           opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';
  3857.           opts.port = uri.port;
  3858.           if (uri.query) opts.query = uri.query;
  3859.         } else if (opts.host) {
  3860.           opts.hostname = parseuri(opts.host).host;
  3861.         }
  3862.  
  3863.         this.secure = null != opts.secure ? opts.secure
  3864.           : (global.location && 'https:' === location.protocol);
  3865.  
  3866.         if (opts.hostname && !opts.port) {
  3867.           // if no port is specified manually, use the protocol default
  3868.           opts.port = this.secure ? '443' : '80';
  3869.         }
  3870.  
  3871.         this.agent = opts.agent || false;
  3872.         this.hostname = opts.hostname ||
  3873.           (global.location ? location.hostname : 'localhost');
  3874.         this.port = opts.port || (global.location && location.port
  3875.             ? location.port
  3876.             : (this.secure ? 443 : 80));
  3877.         this.query = opts.query || {};
  3878.         if ('string' === typeof this.query) this.query = parseqs.decode(this.query);
  3879.         this.upgrade = false !== opts.upgrade;
  3880.         this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/';
  3881.         this.forceJSONP = !!opts.forceJSONP;
  3882.         this.jsonp = false !== opts.jsonp;
  3883.         this.forceBase64 = !!opts.forceBase64;
  3884.         this.enablesXDR = !!opts.enablesXDR;
  3885.         this.timestampParam = opts.timestampParam || 't';
  3886.         this.timestampRequests = opts.timestampRequests;
  3887.         this.transports = opts.transports || ['polling', 'websocket'];
  3888.         this.readyState = '';
  3889.         this.writeBuffer = [];
  3890.         this.prevBufferLen = 0;
  3891.         this.policyPort = opts.policyPort || 843;
  3892.         this.rememberUpgrade = opts.rememberUpgrade || false;
  3893.         this.binaryType = null;
  3894.         this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;
  3895.         this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;
  3896.  
  3897.         if (true === this.perMessageDeflate) this.perMessageDeflate = {};
  3898.         if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {
  3899.           this.perMessageDeflate.threshold = 1024;
  3900.         }
  3901.  
  3902.         // SSL options for Node.js client
  3903.         this.pfx = opts.pfx || null;
  3904.         this.key = opts.key || null;
  3905.         this.passphrase = opts.passphrase || null;
  3906.         this.cert = opts.cert || null;
  3907.         this.ca = opts.ca || null;
  3908.         this.ciphers = opts.ciphers || null;
  3909.         this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? null : opts.rejectUnauthorized;
  3910.         this.forceNode = !!opts.forceNode;
  3911.  
  3912.         // other options for Node.js client
  3913.         var freeGlobal = typeof global === 'object' && global;
  3914.         if (freeGlobal.global === freeGlobal) {
  3915.           if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {
  3916.             this.extraHeaders = opts.extraHeaders;
  3917.           }
  3918.  
  3919.           if (opts.localAddress) {
  3920.             this.localAddress = opts.localAddress;
  3921.           }
  3922.         }
  3923.  
  3924.         // set on handshake
  3925.         this.id = null;
  3926.         this.upgrades = null;
  3927.         this.pingInterval = null;
  3928.         this.pingTimeout = null;
  3929.  
  3930.         // set on heartbeat
  3931.         this.pingIntervalTimer = null;
  3932.         this.pingTimeoutTimer = null;
  3933.  
  3934.         this.open();
  3935.       }
  3936.  
  3937.       Socket.priorWebsocketSuccess = false;
  3938.  
  3939.       /**
  3940.        * Mix in `Emitter`.
  3941.        */
  3942.  
  3943.       Emitter(Socket.prototype);
  3944.  
  3945.       /**
  3946.        * Protocol version.
  3947.        *
  3948.        * @api public
  3949.        */
  3950.  
  3951.       Socket.protocol = parser.protocol; // this is an int
  3952.  
  3953.       /**
  3954.        * Expose deps for legacy compatibility
  3955.        * and standalone browser access.
  3956.        */
  3957.  
  3958.       Socket.Socket = Socket;
  3959.       Socket.Transport = __webpack_require__(26);
  3960.       Socket.transports = __webpack_require__(21);
  3961.       Socket.parser = __webpack_require__(27);
  3962.  
  3963.       /**
  3964.        * Creates transport of the given type.
  3965.        *
  3966.        * @param {String} transport name
  3967.        * @return {Transport}
  3968.        * @api private
  3969.        */
  3970.  
  3971.       Socket.prototype.createTransport = function (name) {
  3972.         debug('creating transport "%s"', name);
  3973.         var query = clone(this.query);
  3974.  
  3975.         // append engine.io protocol identifier
  3976.         query.EIO = parser.protocol;
  3977.  
  3978.         // transport name
  3979.         query.transport = name;
  3980.  
  3981.         // session id if we already have one
  3982.         if (this.id) query.sid = this.id;
  3983.  
  3984.         var transport = new transports[name]({
  3985.           agent: this.agent,
  3986.           hostname: this.hostname,
  3987.           port: this.port,
  3988.           secure: this.secure,
  3989.           path: this.path,
  3990.           query: query,
  3991.           forceJSONP: this.forceJSONP,
  3992.           jsonp: this.jsonp,
  3993.           forceBase64: this.forceBase64,
  3994.           enablesXDR: this.enablesXDR,
  3995.           timestampRequests: this.timestampRequests,
  3996.           timestampParam: this.timestampParam,
  3997.           policyPort: this.policyPort,
  3998.           socket: this,
  3999.           pfx: this.pfx,
  4000.           key: this.key,
  4001.           passphrase: this.passphrase,
  4002.           cert: this.cert,
  4003.           ca: this.ca,
  4004.           ciphers: this.ciphers,
  4005.           rejectUnauthorized: this.rejectUnauthorized,
  4006.           perMessageDeflate: this.perMessageDeflate,
  4007.           extraHeaders: this.extraHeaders,
  4008.           forceNode: this.forceNode,
  4009.           localAddress: this.localAddress
  4010.         });
  4011.  
  4012.         return transport;
  4013.       };
  4014.  
  4015.       function clone (obj) {
  4016.         var o = {};
  4017.         for (var i in obj) {
  4018.           if (obj.hasOwnProperty(i)) {
  4019.             o[i] = obj[i];
  4020.           }
  4021.         }
  4022.         return o;
  4023.       }
  4024.  
  4025.       /**
  4026.        * Initializes transport to use and starts probe.
  4027.        *
  4028.        * @api private
  4029.        */
  4030.       Socket.prototype.open = function () {
  4031.         var transport;
  4032.         if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {
  4033.           transport = 'websocket';
  4034.         } else if (0 === this.transports.length) {
  4035.           // Emit error on next tick so it can be listened to
  4036.           var self = this;
  4037.           setTimeout(function () {
  4038.             self.emit('error', 'No transports available');
  4039.           }, 0);
  4040.           return;
  4041.         } else {
  4042.           transport = this.transports[0];
  4043.         }
  4044.         this.readyState = 'opening';
  4045.  
  4046.         // Retry with the next transport if the transport is disabled (jsonp: false)
  4047.         try {
  4048.           transport = this.createTransport(transport);
  4049.         } catch (e) {
  4050.           this.transports.shift();
  4051.           this.open();
  4052.           return;
  4053.         }
  4054.  
  4055.         transport.open();
  4056.         this.setTransport(transport);
  4057.       };
  4058.  
  4059.       /**
  4060.        * Sets the current transport. Disables the existing one (if any).
  4061.        *
  4062.        * @api private
  4063.        */
  4064.  
  4065.       Socket.prototype.setTransport = function (transport) {
  4066.         debug('setting transport %s', transport.name);
  4067.         var self = this;
  4068.  
  4069.         if (this.transport) {
  4070.           debug('clearing existing transport %s', this.transport.name);
  4071.           this.transport.removeAllListeners();
  4072.         }
  4073.  
  4074.         // set up transport
  4075.         this.transport = transport;
  4076.  
  4077.         // set up transport listeners
  4078.         transport
  4079.         .on('drain', function () {
  4080.           self.onDrain();
  4081.         })
  4082.         .on('packet', function (packet) {
  4083.           self.onPacket(packet);
  4084.         })
  4085.         .on('error', function (e) {
  4086.           self.onError(e);
  4087.         })
  4088.         .on('close', function () {
  4089.           self.onClose('transport close');
  4090.         });
  4091.       };
  4092.  
  4093.       /**
  4094.        * Probes a transport.
  4095.        *
  4096.        * @param {String} transport name
  4097.        * @api private
  4098.        */
  4099.  
  4100.       Socket.prototype.probe = function (name) {
  4101.         debug('probing transport "%s"', name);
  4102.         var transport = this.createTransport(name, { probe: 1 });
  4103.         var failed = false;
  4104.         var self = this;
  4105.  
  4106.         Socket.priorWebsocketSuccess = false;
  4107.  
  4108.         function onTransportOpen () {
  4109.           if (self.onlyBinaryUpgrades) {
  4110.             var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;
  4111.             failed = failed || upgradeLosesBinary;
  4112.           }
  4113.           if (failed) return;
  4114.  
  4115.           debug('probe transport "%s" opened', name);
  4116.           transport.send([{ type: 'ping', data: 'probe' }]);
  4117.           transport.once('packet', function (msg) {
  4118.             if (failed) return;
  4119.             if ('pong' === msg.type && 'probe' === msg.data) {
  4120.               debug('probe transport "%s" pong', name);
  4121.               self.upgrading = true;
  4122.               self.emit('upgrading', transport);
  4123.               if (!transport) return;
  4124.               Socket.priorWebsocketSuccess = 'websocket' === transport.name;
  4125.  
  4126.               debug('pausing current transport "%s"', self.transport.name);
  4127.               self.transport.pause(function () {
  4128.                 if (failed) return;
  4129.                 if ('closed' === self.readyState) return;
  4130.                 debug('changing transport and sending upgrade packet');
  4131.  
  4132.                 cleanup();
  4133.  
  4134.                 self.setTransport(transport);
  4135.                 transport.send([{ type: 'upgrade' }]);
  4136.                 self.emit('upgrade', transport);
  4137.                 transport = null;
  4138.                 self.upgrading = false;
  4139.                 self.flush();
  4140.               });
  4141.             } else {
  4142.               debug('probe transport "%s" failed', name);
  4143.               var err = new Error('probe error');
  4144.               err.transport = transport.name;
  4145.               self.emit('upgradeError', err);
  4146.             }
  4147.           });
  4148.         }
  4149.  
  4150.         function freezeTransport () {
  4151.           if (failed) return;
  4152.  
  4153.           // Any callback called by transport should be ignored since now
  4154.           failed = true;
  4155.  
  4156.           cleanup();
  4157.  
  4158.           transport.close();
  4159.           transport = null;
  4160.         }
  4161.  
  4162.         // Handle any error that happens while probing
  4163.         function onerror (err) {
  4164.           var error = new Error('probe error: ' + err);
  4165.           error.transport = transport.name;
  4166.  
  4167.           freezeTransport();
  4168.  
  4169.           debug('probe transport "%s" failed because of error: %s', name, err);
  4170.  
  4171.           self.emit('upgradeError', error);
  4172.         }
  4173.  
  4174.         function onTransportClose () {
  4175.           onerror('transport closed');
  4176.         }
  4177.  
  4178.         // When the socket is closed while we're probing
  4179.         function onclose () {
  4180.           onerror('socket closed');
  4181.         }
  4182.  
  4183.         // When the socket is upgraded while we're probing
  4184.         function onupgrade (to) {
  4185.           if (transport && to.name !== transport.name) {
  4186.             debug('"%s" works - aborting "%s"', to.name, transport.name);
  4187.             freezeTransport();
  4188.           }
  4189.         }
  4190.  
  4191.         // Remove all listeners on the transport and on self
  4192.         function cleanup () {
  4193.           transport.removeListener('open', onTransportOpen);
  4194.           transport.removeListener('error', onerror);
  4195.           transport.removeListener('close', onTransportClose);
  4196.           self.removeListener('close', onclose);
  4197.           self.removeListener('upgrading', onupgrade);
  4198.         }
  4199.  
  4200.         transport.once('open', onTransportOpen);
  4201.         transport.once('error', onerror);
  4202.         transport.once('close', onTransportClose);
  4203.  
  4204.         this.once('close', onclose);
  4205.         this.once('upgrading', onupgrade);
  4206.  
  4207.         transport.open();
  4208.       };
  4209.  
  4210.       /**
  4211.        * Called when connection is deemed open.
  4212.        *
  4213.        * @api public
  4214.        */
  4215.  
  4216.       Socket.prototype.onOpen = function () {
  4217.         debug('socket open');
  4218.         this.readyState = 'open';
  4219.         Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;
  4220.         this.emit('open');
  4221.         this.flush();
  4222.  
  4223.         // we check for `readyState` in case an `open`
  4224.         // listener already closed the socket
  4225.         if ('open' === this.readyState && this.upgrade && this.transport.pause) {
  4226.           debug('starting upgrade probes');
  4227.           for (var i = 0, l = this.upgrades.length; i < l; i++) {
  4228.             this.probe(this.upgrades[i]);
  4229.           }
  4230.         }
  4231.       };
  4232.  
  4233.       /**
  4234.        * Handles a packet.
  4235.        *
  4236.        * @api private
  4237.        */
  4238.  
  4239.       Socket.prototype.onPacket = function (packet) {
  4240.         if ('opening' === this.readyState || 'open' === this.readyState ||
  4241.             'closing' === this.readyState) {
  4242.           debug('socket receive: type "%s", data "%s"', packet.type, packet.data);
  4243.  
  4244.           this.emit('packet', packet);
  4245.  
  4246.           // Socket is live - any packet counts
  4247.           this.emit('heartbeat');
  4248.  
  4249.           switch (packet.type) {
  4250.             case 'open':
  4251.               this.onHandshake(parsejson(packet.data));
  4252.               break;
  4253.  
  4254.             case 'pong':
  4255.               this.setPing();
  4256.               this.emit('pong');
  4257.               break;
  4258.  
  4259.             case 'error':
  4260.               var err = new Error('server error');
  4261.               err.code = packet.data;
  4262.               this.onError(err);
  4263.               break;
  4264.  
  4265.             case 'message':
  4266.               this.emit('data', packet.data);
  4267.               this.emit('message', packet.data);
  4268.               break;
  4269.           }
  4270.         } else {
  4271.           debug('packet received with socket readyState "%s"', this.readyState);
  4272.         }
  4273.       };
  4274.  
  4275.       /**
  4276.        * Called upon handshake completion.
  4277.        *
  4278.        * @param {Object} handshake obj
  4279.        * @api private
  4280.        */
  4281.  
  4282.       Socket.prototype.onHandshake = function (data) {
  4283.         this.emit('handshake', data);
  4284.         this.id = data.sid;
  4285.         this.transport.query.sid = data.sid;
  4286.         this.upgrades = this.filterUpgrades(data.upgrades);
  4287.         this.pingInterval = data.pingInterval;
  4288.         this.pingTimeout = data.pingTimeout;
  4289.         this.onOpen();
  4290.         // In case open handler closes socket
  4291.         if ('closed' === this.readyState) return;
  4292.         this.setPing();
  4293.  
  4294.         // Prolong liveness of socket on heartbeat
  4295.         this.removeListener('heartbeat', this.onHeartbeat);
  4296.         this.on('heartbeat', this.onHeartbeat);
  4297.       };
  4298.  
  4299.       /**
  4300.        * Resets ping timeout.
  4301.        *
  4302.        * @api private
  4303.        */
  4304.  
  4305.       Socket.prototype.onHeartbeat = function (timeout) {
  4306.         clearTimeout(this.pingTimeoutTimer);
  4307.         var self = this;
  4308.         self.pingTimeoutTimer = setTimeout(function () {
  4309.           if ('closed' === self.readyState) return;
  4310.           self.onClose('ping timeout');
  4311.         }, timeout || (self.pingInterval + self.pingTimeout));
  4312.       };
  4313.  
  4314.       /**
  4315.        * Pings server every `this.pingInterval` and expects response
  4316.        * within `this.pingTimeout` or closes connection.
  4317.        *
  4318.        * @api private
  4319.        */
  4320.  
  4321.       Socket.prototype.setPing = function () {
  4322.         var self = this;
  4323.         clearTimeout(self.pingIntervalTimer);
  4324.         self.pingIntervalTimer = setTimeout(function () {
  4325.           debug('writing ping packet - expecting pong within %sms', self.pingTimeout);
  4326.           self.ping();
  4327.           self.onHeartbeat(self.pingTimeout);
  4328.         }, self.pingInterval);
  4329.       };
  4330.  
  4331.       /**
  4332.       * Sends a ping packet.
  4333.       *
  4334.       * @api private
  4335.       */
  4336.  
  4337.       Socket.prototype.ping = function () {
  4338.         var self = this;
  4339.         this.sendPacket('ping', function () {
  4340.           self.emit('ping');
  4341.         });
  4342.       };
  4343.  
  4344.       /**
  4345.        * Called on `drain` event
  4346.        *
  4347.        * @api private
  4348.        */
  4349.  
  4350.       Socket.prototype.onDrain = function () {
  4351.         this.writeBuffer.splice(0, this.prevBufferLen);
  4352.  
  4353.         // setting prevBufferLen = 0 is very important
  4354.         // for example, when upgrading, upgrade packet is sent over,
  4355.         // and a nonzero prevBufferLen could cause problems on `drain`
  4356.         this.prevBufferLen = 0;
  4357.  
  4358.         if (0 === this.writeBuffer.length) {
  4359.           this.emit('drain');
  4360.         } else {
  4361.           this.flush();
  4362.         }
  4363.       };
  4364.  
  4365.       /**
  4366.        * Flush write buffers.
  4367.        *
  4368.        * @api private
  4369.        */
  4370.  
  4371.       Socket.prototype.flush = function () {
  4372.         if ('closed' !== this.readyState && this.transport.writable &&
  4373.           !this.upgrading && this.writeBuffer.length) {
  4374.           debug('flushing %d packets in socket', this.writeBuffer.length);
  4375.           this.transport.send(this.writeBuffer);
  4376.           // keep track of current length of writeBuffer
  4377.           // splice writeBuffer and callbackBuffer on `drain`
  4378.           this.prevBufferLen = this.writeBuffer.length;
  4379.           this.emit('flush');
  4380.         }
  4381.       };
  4382.  
  4383.       /**
  4384.        * Sends a message.
  4385.        *
  4386.        * @param {String} message.
  4387.        * @param {Function} callback function.
  4388.        * @param {Object} options.
  4389.        * @return {Socket} for chaining.
  4390.        * @api public
  4391.        */
  4392.  
  4393.       Socket.prototype.write =
  4394.       Socket.prototype.send = function (msg, options, fn) {
  4395.         this.sendPacket('message', msg, options, fn);
  4396.         return this;
  4397.       };
  4398.  
  4399.       /**
  4400.        * Sends a packet.
  4401.        *
  4402.        * @param {String} packet type.
  4403.        * @param {String} data.
  4404.        * @param {Object} options.
  4405.        * @param {Function} callback function.
  4406.        * @api private
  4407.        */
  4408.  
  4409.       Socket.prototype.sendPacket = function (type, data, options, fn) {
  4410.         if ('function' === typeof data) {
  4411.           fn = data;
  4412.           data = undefined;
  4413.         }
  4414.  
  4415.         if ('function' === typeof options) {
  4416.           fn = options;
  4417.           options = null;
  4418.         }
  4419.  
  4420.         if ('closing' === this.readyState || 'closed' === this.readyState) {
  4421.           return;
  4422.         }
  4423.  
  4424.         options = options || {};
  4425.         options.compress = false !== options.compress;
  4426.  
  4427.         var packet = {
  4428.           type: type,
  4429.           data: data,
  4430.           options: options
  4431.         };
  4432.         this.emit('packetCreate', packet);
  4433.         this.writeBuffer.push(packet);
  4434.         if (fn) this.once('flush', fn);
  4435.         this.flush();
  4436.       };
  4437.  
  4438.       /**
  4439.        * Closes the connection.
  4440.        *
  4441.        * @api private
  4442.        */
  4443.  
  4444.       Socket.prototype.close = function () {
  4445.         if ('opening' === this.readyState || 'open' === this.readyState) {
  4446.           this.readyState = 'closing';
  4447.  
  4448.           var self = this;
  4449.  
  4450.           if (this.writeBuffer.length) {
  4451.             this.once('drain', function () {
  4452.               if (this.upgrading) {
  4453.                 waitForUpgrade();
  4454.               } else {
  4455.                 close();
  4456.               }
  4457.             });
  4458.           } else if (this.upgrading) {
  4459.             waitForUpgrade();
  4460.           } else {
  4461.             close();
  4462.           }
  4463.         }
  4464.  
  4465.         function close () {
  4466.           self.onClose('forced close');
  4467.           debug('socket closing - telling transport to close');
  4468.           self.transport.close();
  4469.         }
  4470.  
  4471.         function cleanupAndClose () {
  4472.           self.removeListener('upgrade', cleanupAndClose);
  4473.           self.removeListener('upgradeError', cleanupAndClose);
  4474.           close();
  4475.         }
  4476.  
  4477.         function waitForUpgrade () {
  4478.           // wait for upgrade to finish since we can't send packets while pausing a transport
  4479.           self.once('upgrade', cleanupAndClose);
  4480.           self.once('upgradeError', cleanupAndClose);
  4481.         }
  4482.  
  4483.         return this;
  4484.       };
  4485.  
  4486.       /**
  4487.        * Called upon transport error
  4488.        *
  4489.        * @api private
  4490.        */
  4491.  
  4492.       Socket.prototype.onError = function (err) {
  4493.         debug('socket error %j', err);
  4494.         Socket.priorWebsocketSuccess = false;
  4495.         this.emit('error', err);
  4496.         this.onClose('transport error', err);
  4497.       };
  4498.  
  4499.       /**
  4500.        * Called upon transport close.
  4501.        *
  4502.        * @api private
  4503.        */
  4504.  
  4505.       Socket.prototype.onClose = function (reason, desc) {
  4506.         if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {
  4507.           debug('socket close with reason: "%s"', reason);
  4508.           var self = this;
  4509.  
  4510.           // clear timers
  4511.           clearTimeout(this.pingIntervalTimer);
  4512.           clearTimeout(this.pingTimeoutTimer);
  4513.  
  4514.           // stop event from firing again for transport
  4515.           this.transport.removeAllListeners('close');
  4516.  
  4517.           // ensure transport won't stay open
  4518.           this.transport.close();
  4519.  
  4520.           // ignore further transport communication
  4521.           this.transport.removeAllListeners();
  4522.  
  4523.           // set ready state
  4524.           this.readyState = 'closed';
  4525.  
  4526.           // clear session id
  4527.           this.id = null;
  4528.  
  4529.           // emit close event
  4530.           this.emit('close', reason, desc);
  4531.  
  4532.           // clean buffers after, so users can still
  4533.           // grab the buffers on `close` event
  4534.           self.writeBuffer = [];
  4535.           self.prevBufferLen = 0;
  4536.         }
  4537.       };
  4538.  
  4539.       /**
  4540.        * Filters upgrades, returning only those matching client transports.
  4541.        *
  4542.        * @param {Array} server upgrades
  4543.        * @api private
  4544.        *
  4545.        */
  4546.  
  4547.       Socket.prototype.filterUpgrades = function (upgrades) {
  4548.         var filteredUpgrades = [];
  4549.         for (var i = 0, j = upgrades.length; i < j; i++) {
  4550.           if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);
  4551.         }
  4552.         return filteredUpgrades;
  4553.       };
  4554.  
  4555.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  4556.  
  4557. /***/ },
  4558. /* 21 */
  4559. /***/ function(module, exports, __webpack_require__) {
  4560.  
  4561.       /* WEBPACK VAR INJECTION */(function(global) {/**
  4562.        * Module dependencies
  4563.        */
  4564.  
  4565.       var XMLHttpRequest = __webpack_require__(22);
  4566.       var XHR = __webpack_require__(24);
  4567.       var JSONP = __webpack_require__(40);
  4568.       var websocket = __webpack_require__(41);
  4569.  
  4570.       /**
  4571.        * Export transports.
  4572.        */
  4573.  
  4574.       exports.polling = polling;
  4575.       exports.websocket = websocket;
  4576.  
  4577.       /**
  4578.        * Polling transport polymorphic constructor.
  4579.        * Decides on xhr vs jsonp based on feature detection.
  4580.        *
  4581.        * @api private
  4582.        */
  4583.  
  4584.       function polling (opts) {
  4585.         var xhr;
  4586.         var xd = false;
  4587.         var xs = false;
  4588.         var jsonp = false !== opts.jsonp;
  4589.  
  4590.         if (global.location) {
  4591.           var isSSL = 'https:' === location.protocol;
  4592.           var port = location.port;
  4593.  
  4594.           // some user agents have empty `location.port`
  4595.           if (!port) {
  4596.             port = isSSL ? 443 : 80;
  4597.           }
  4598.  
  4599.           xd = opts.hostname !== location.hostname || port !== opts.port;
  4600.           xs = opts.secure !== isSSL;
  4601.         }
  4602.  
  4603.         opts.xdomain = xd;
  4604.         opts.xscheme = xs;
  4605.         xhr = new XMLHttpRequest(opts);
  4606.  
  4607.         if ('open' in xhr && !opts.forceJSONP) {
  4608.           return new XHR(opts);
  4609.         } else {
  4610.           if (!jsonp) throw new Error('JSONP disabled');
  4611.           return new JSONP(opts);
  4612.         }
  4613.       }
  4614.  
  4615.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  4616.  
  4617. /***/ },
  4618. /* 22 */
  4619. /***/ function(module, exports, __webpack_require__) {
  4620.  
  4621.       /* WEBPACK VAR INJECTION */(function(global) {// browser shim for xmlhttprequest module
  4622.  
  4623.       var hasCORS = __webpack_require__(23);
  4624.  
  4625.       module.exports = function (opts) {
  4626.         var xdomain = opts.xdomain;
  4627.  
  4628.         // scheme must be same when usign XDomainRequest
  4629.         // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
  4630.         var xscheme = opts.xscheme;
  4631.  
  4632.         // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.
  4633.         // https://github.com/Automattic/engine.io-client/pull/217
  4634.         var enablesXDR = opts.enablesXDR;
  4635.  
  4636.         // XMLHttpRequest can be disabled on IE
  4637.         try {
  4638.           if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {
  4639.             return new XMLHttpRequest();
  4640.           }
  4641.         } catch (e) { }
  4642.  
  4643.         // Use XDomainRequest for IE8 if enablesXDR is true
  4644.         // because loading bar keeps flashing when using jsonp-polling
  4645.         // https://github.com/yujiosaka/socke.io-ie8-loading-example
  4646.         try {
  4647.           if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {
  4648.             return new XDomainRequest();
  4649.           }
  4650.         } catch (e) { }
  4651.  
  4652.         if (!xdomain) {
  4653.           try {
  4654.             return new global[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');
  4655.           } catch (e) { }
  4656.         }
  4657.       };
  4658.  
  4659.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  4660.  
  4661. /***/ },
  4662. /* 23 */
  4663. /***/ function(module, exports) {
  4664.  
  4665.      
  4666.       /**
  4667.        * Module exports.
  4668.        *
  4669.        * Logic borrowed from Modernizr:
  4670.        *
  4671.        *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js
  4672.        */
  4673.  
  4674.       try {
  4675.         module.exports = typeof XMLHttpRequest !== 'undefined' &&
  4676.           'withCredentials' in new XMLHttpRequest();
  4677.       } catch (err) {
  4678.         // if XMLHttp support is disabled in IE then it will throw
  4679.         // when trying to create
  4680.         module.exports = false;
  4681.       }
  4682.  
  4683.  
  4684. /***/ },
  4685. /* 24 */
  4686. /***/ function(module, exports, __webpack_require__) {
  4687.  
  4688.       /* WEBPACK VAR INJECTION */(function(global) {/**
  4689.        * Module requirements.
  4690.        */
  4691.  
  4692.       var XMLHttpRequest = __webpack_require__(22);
  4693.       var Polling = __webpack_require__(25);
  4694.       var Emitter = __webpack_require__(36);
  4695.       var inherit = __webpack_require__(38);
  4696.       var debug = __webpack_require__(3)('engine.io-client:polling-xhr');
  4697.  
  4698.       /**
  4699.        * Module exports.
  4700.        */
  4701.  
  4702.       module.exports = XHR;
  4703.       module.exports.Request = Request;
  4704.  
  4705.       /**
  4706.        * Empty function
  4707.        */
  4708.  
  4709.       function empty () {}
  4710.  
  4711.       /**
  4712.        * XHR Polling constructor.
  4713.        *
  4714.        * @param {Object} opts
  4715.        * @api public
  4716.        */
  4717.  
  4718.       function XHR (opts) {
  4719.         Polling.call(this, opts);
  4720.         this.requestTimeout = opts.requestTimeout;
  4721.  
  4722.         if (global.location) {
  4723.           var isSSL = 'https:' === location.protocol;
  4724.           var port = location.port;
  4725.  
  4726.           // some user agents have empty `location.port`
  4727.           if (!port) {
  4728.             port = isSSL ? 443 : 80;
  4729.           }
  4730.  
  4731.           this.xd = opts.hostname !== global.location.hostname ||
  4732.             port !== opts.port;
  4733.           this.xs = opts.secure !== isSSL;
  4734.         } else {
  4735.           this.extraHeaders = opts.extraHeaders;
  4736.         }
  4737.       }
  4738.  
  4739.       /**
  4740.        * Inherits from Polling.
  4741.        */
  4742.  
  4743.       inherit(XHR, Polling);
  4744.  
  4745.       /**
  4746.        * XHR supports binary
  4747.        */
  4748.  
  4749.       XHR.prototype.supportsBinary = true;
  4750.  
  4751.       /**
  4752.        * Creates a request.
  4753.        *
  4754.        * @param {String} method
  4755.        * @api private
  4756.        */
  4757.  
  4758.       XHR.prototype.request = function (opts) {
  4759.         opts = opts || {};
  4760.         opts.uri = this.uri();
  4761.         opts.xd = this.xd;
  4762.         opts.xs = this.xs;
  4763.         opts.agent = this.agent || false;
  4764.         opts.supportsBinary = this.supportsBinary;
  4765.         opts.enablesXDR = this.enablesXDR;
  4766.  
  4767.         // SSL options for Node.js client
  4768.         opts.pfx = this.pfx;
  4769.         opts.key = this.key;
  4770.         opts.passphrase = this.passphrase;
  4771.         opts.cert = this.cert;
  4772.         opts.ca = this.ca;
  4773.         opts.ciphers = this.ciphers;
  4774.         opts.rejectUnauthorized = this.rejectUnauthorized;
  4775.         opts.requestTimeout = this.requestTimeout;
  4776.  
  4777.         // other options for Node.js client
  4778.         opts.extraHeaders = this.extraHeaders;
  4779.  
  4780.         return new Request(opts);
  4781.       };
  4782.  
  4783.       /**
  4784.        * Sends data.
  4785.        *
  4786.        * @param {String} data to send.
  4787.        * @param {Function} called upon flush.
  4788.        * @api private
  4789.        */
  4790.  
  4791.       XHR.prototype.doWrite = function (data, fn) {
  4792.         var isBinary = typeof data !== 'string' && data !== undefined;
  4793.         var req = this.request({ method: 'POST', data: data, isBinary: isBinary });
  4794.         var self = this;
  4795.         req.on('success', fn);
  4796.         req.on('error', function (err) {
  4797.           self.onError('xhr post error', err);
  4798.         });
  4799.         this.sendXhr = req;
  4800.       };
  4801.  
  4802.       /**
  4803.        * Starts a poll cycle.
  4804.        *
  4805.        * @api private
  4806.        */
  4807.  
  4808.       XHR.prototype.doPoll = function () {
  4809.         debug('xhr poll');
  4810.         var req = this.request();
  4811.         var self = this;
  4812.         req.on('data', function (data) {
  4813.           self.onData(data);
  4814.         });
  4815.         req.on('error', function (err) {
  4816.           self.onError('xhr poll error', err);
  4817.         });
  4818.         this.pollXhr = req;
  4819.       };
  4820.  
  4821.       /**
  4822.        * Request constructor
  4823.        *
  4824.        * @param {Object} options
  4825.        * @api public
  4826.        */
  4827.  
  4828.       function Request (opts) {
  4829.         this.method = opts.method || 'GET';
  4830.         this.uri = opts.uri;
  4831.         this.xd = !!opts.xd;
  4832.         this.xs = !!opts.xs;
  4833.         this.async = false !== opts.async;
  4834.         this.data = undefined !== opts.data ? opts.data : null;
  4835.         this.agent = opts.agent;
  4836.         this.isBinary = opts.isBinary;
  4837.         this.supportsBinary = opts.supportsBinary;
  4838.         this.enablesXDR = opts.enablesXDR;
  4839.         this.requestTimeout = opts.requestTimeout;
  4840.  
  4841.         // SSL options for Node.js client
  4842.         this.pfx = opts.pfx;
  4843.         this.key = opts.key;
  4844.         this.passphrase = opts.passphrase;
  4845.         this.cert = opts.cert;
  4846.         this.ca = opts.ca;
  4847.         this.ciphers = opts.ciphers;
  4848.         this.rejectUnauthorized = opts.rejectUnauthorized;
  4849.  
  4850.         // other options for Node.js client
  4851.         this.extraHeaders = opts.extraHeaders;
  4852.  
  4853.         this.create();
  4854.       }
  4855.  
  4856.       /**
  4857.        * Mix in `Emitter`.
  4858.        */
  4859.  
  4860.       Emitter(Request.prototype);
  4861.  
  4862.       /**
  4863.        * Creates the XHR object and sends the request.
  4864.        *
  4865.        * @api private
  4866.        */
  4867.  
  4868.       Request.prototype.create = function () {
  4869.         var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };
  4870.  
  4871.         // SSL options for Node.js client
  4872.         opts.pfx = this.pfx;
  4873.         opts.key = this.key;
  4874.         opts.passphrase = this.passphrase;
  4875.         opts.cert = this.cert;
  4876.         opts.ca = this.ca;
  4877.         opts.ciphers = this.ciphers;
  4878.         opts.rejectUnauthorized = this.rejectUnauthorized;
  4879.  
  4880.         var xhr = this.xhr = new XMLHttpRequest(opts);
  4881.         var self = this;
  4882.  
  4883.         try {
  4884.           debug('xhr open %s: %s', this.method, this.uri);
  4885.           xhr.open(this.method, this.uri, this.async);
  4886.           try {
  4887.             if (this.extraHeaders) {
  4888.               xhr.setDisableHeaderCheck(true);
  4889.               for (var i in this.extraHeaders) {
  4890.                 if (this.extraHeaders.hasOwnProperty(i)) {
  4891.                   xhr.setRequestHeader(i, this.extraHeaders[i]);
  4892.                 }
  4893.               }
  4894.             }
  4895.           } catch (e) {}
  4896.           if (this.supportsBinary) {
  4897.             // This has to be done after open because Firefox is stupid
  4898.             // http://stackoverflow.com/questions/13216903/get-binary-data-with-xmlhttprequest-in-a-firefox-extension
  4899.             xhr.responseType = 'arraybuffer';
  4900.           }
  4901.  
  4902.           if ('POST' === this.method) {
  4903.             try {
  4904.               if (this.isBinary) {
  4905.                 xhr.setRequestHeader('Content-type', 'application/octet-stream');
  4906.               } else {
  4907.                 xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
  4908.               }
  4909.             } catch (e) {}
  4910.           }
  4911.  
  4912.           try {
  4913.             xhr.setRequestHeader('Accept', '*/*');
  4914.           } catch (e) {}
  4915.  
  4916.           // ie6 check
  4917.           if ('withCredentials' in xhr) {
  4918.             xhr.withCredentials = true;
  4919.           }
  4920.  
  4921.           if (this.requestTimeout) {
  4922.             xhr.timeout = this.requestTimeout;
  4923.           }
  4924.  
  4925.           if (this.hasXDR()) {
  4926.             xhr.onload = function () {
  4927.               self.onLoad();
  4928.             };
  4929.             xhr.onerror = function () {
  4930.               self.onError(xhr.responseText);
  4931.             };
  4932.           } else {
  4933.             xhr.onreadystatechange = function () {
  4934.               if (4 !== xhr.readyState) return;
  4935.               if (200 === xhr.status || 1223 === xhr.status) {
  4936.                 self.onLoad();
  4937.               } else {
  4938.                 // make sure the `error` event handler that's user-set
  4939.                 // does not throw in the same tick and gets caught here
  4940.                 setTimeout(function () {
  4941.                   self.onError(xhr.status);
  4942.                 }, 0);
  4943.               }
  4944.             };
  4945.           }
  4946.  
  4947.           debug('xhr data %s', this.data);
  4948.           xhr.send(this.data);
  4949.         } catch (e) {
  4950.           // Need to defer since .create() is called directly fhrom the constructor
  4951.           // and thus the 'error' event can only be only bound *after* this exception
  4952.           // occurs.  Therefore, also, we cannot throw here at all.
  4953.           setTimeout(function () {
  4954.             self.onError(e);
  4955.           }, 0);
  4956.           return;
  4957.         }
  4958.  
  4959.         if (global.document) {
  4960.           this.index = Request.requestsCount++;
  4961.           Request.requests[this.index] = this;
  4962.         }
  4963.       };
  4964.  
  4965.       /**
  4966.        * Called upon successful response.
  4967.        *
  4968.        * @api private
  4969.        */
  4970.  
  4971.       Request.prototype.onSuccess = function () {
  4972.         this.emit('success');
  4973.         this.cleanup();
  4974.       };
  4975.  
  4976.       /**
  4977.        * Called if we have data.
  4978.        *
  4979.        * @api private
  4980.        */
  4981.  
  4982.       Request.prototype.onData = function (data) {
  4983.         this.emit('data', data);
  4984.         this.onSuccess();
  4985.       };
  4986.  
  4987.       /**
  4988.        * Called upon error.
  4989.        *
  4990.        * @api private
  4991.        */
  4992.  
  4993.       Request.prototype.onError = function (err) {
  4994.         this.emit('error', err);
  4995.         this.cleanup(true);
  4996.       };
  4997.  
  4998.       /**
  4999.        * Cleans up house.
  5000.        *
  5001.        * @api private
  5002.        */
  5003.  
  5004.       Request.prototype.cleanup = function (fromError) {
  5005.         if ('undefined' === typeof this.xhr || null === this.xhr) {
  5006.           return;
  5007.         }
  5008.         // xmlhttprequest
  5009.         if (this.hasXDR()) {
  5010.           this.xhr.onload = this.xhr.onerror = empty;
  5011.         } else {
  5012.           this.xhr.onreadystatechange = empty;
  5013.         }
  5014.  
  5015.         if (fromError) {
  5016.           try {
  5017.             this.xhr.abort();
  5018.           } catch (e) {}
  5019.         }
  5020.  
  5021.         if (global.document) {
  5022.           delete Request.requests[this.index];
  5023.         }
  5024.  
  5025.         this.xhr = null;
  5026.       };
  5027.  
  5028.       /**
  5029.        * Called upon load.
  5030.        *
  5031.        * @api private
  5032.        */
  5033.  
  5034.       Request.prototype.onLoad = function () {
  5035.         var data;
  5036.         try {
  5037.           var contentType;
  5038.           try {
  5039.             contentType = this.xhr.getResponseHeader('Content-Type').split(';')[0];
  5040.           } catch (e) {}
  5041.           if (contentType === 'application/octet-stream') {
  5042.             data = this.xhr.response || this.xhr.responseText;
  5043.           } else {
  5044.             if (!this.supportsBinary) {
  5045.               data = this.xhr.responseText;
  5046.             } else {
  5047.               try {
  5048.                 data = String.fromCharCode.apply(null, new Uint8Array(this.xhr.response));
  5049.               } catch (e) {
  5050.                 var ui8Arr = new Uint8Array(this.xhr.response);
  5051.                 var dataArray = [];
  5052.                 for (var idx = 0, length = ui8Arr.length; idx < length; idx++) {
  5053.                   dataArray.push(ui8Arr[idx]);
  5054.                 }
  5055.  
  5056.                 data = String.fromCharCode.apply(null, dataArray);
  5057.               }
  5058.             }
  5059.           }
  5060.         } catch (e) {
  5061.           this.onError(e);
  5062.         }
  5063.         if (null != data) {
  5064.           this.onData(data);
  5065.         }
  5066.       };
  5067.  
  5068.       /**
  5069.        * Check if it has XDomainRequest.
  5070.        *
  5071.        * @api private
  5072.        */
  5073.  
  5074.       Request.prototype.hasXDR = function () {
  5075.         return 'undefined' !== typeof global.XDomainRequest && !this.xs && this.enablesXDR;
  5076.       };
  5077.  
  5078.       /**
  5079.        * Aborts the request.
  5080.        *
  5081.        * @api public
  5082.        */
  5083.  
  5084.       Request.prototype.abort = function () {
  5085.         this.cleanup();
  5086.       };
  5087.  
  5088.       /**
  5089.        * Aborts pending requests when unloading the window. This is needed to prevent
  5090.        * memory leaks (e.g. when using IE) and to ensure that no spurious error is
  5091.        * emitted.
  5092.        */
  5093.  
  5094.       Request.requestsCount = 0;
  5095.       Request.requests = {};
  5096.  
  5097.       if (global.document) {
  5098.         if (global.attachEvent) {
  5099.           global.attachEvent('onunload', unloadHandler);
  5100.         } else if (global.addEventListener) {
  5101.           global.addEventListener('beforeunload', unloadHandler, false);
  5102.         }
  5103.       }
  5104.  
  5105.       function unloadHandler () {
  5106.         for (var i in Request.requests) {
  5107.           if (Request.requests.hasOwnProperty(i)) {
  5108.             Request.requests[i].abort();
  5109.           }
  5110.         }
  5111.       }
  5112.  
  5113.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  5114.  
  5115. /***/ },
  5116. /* 25 */
  5117. /***/ function(module, exports, __webpack_require__) {
  5118.  
  5119.       /**
  5120.        * Module dependencies.
  5121.        */
  5122.  
  5123.       var Transport = __webpack_require__(26);
  5124.       var parseqs = __webpack_require__(37);
  5125.       var parser = __webpack_require__(27);
  5126.       var inherit = __webpack_require__(38);
  5127.       var yeast = __webpack_require__(39);
  5128.       var debug = __webpack_require__(3)('engine.io-client:polling');
  5129.  
  5130.       /**
  5131.        * Module exports.
  5132.        */
  5133.  
  5134.       module.exports = Polling;
  5135.  
  5136.       /**
  5137.        * Is XHR2 supported?
  5138.        */
  5139.  
  5140.       var hasXHR2 = (function () {
  5141.         var XMLHttpRequest = __webpack_require__(22);
  5142.         var xhr = new XMLHttpRequest({ xdomain: false });
  5143.         return null != xhr.responseType;
  5144.       })();
  5145.  
  5146.       /**
  5147.        * Polling interface.
  5148.        *
  5149.        * @param {Object} opts
  5150.        * @api private
  5151.        */
  5152.  
  5153.       function Polling (opts) {
  5154.         var forceBase64 = (opts && opts.forceBase64);
  5155.         if (!hasXHR2 || forceBase64) {
  5156.           this.supportsBinary = false;
  5157.         }
  5158.         Transport.call(this, opts);
  5159.       }
  5160.  
  5161.       /**
  5162.        * Inherits from Transport.
  5163.        */
  5164.  
  5165.       inherit(Polling, Transport);
  5166.  
  5167.       /**
  5168.        * Transport name.
  5169.        */
  5170.  
  5171.       Polling.prototype.name = 'polling';
  5172.  
  5173.       /**
  5174.        * Opens the socket (triggers polling). We write a PING message to determine
  5175.        * when the transport is open.
  5176.        *
  5177.        * @api private
  5178.        */
  5179.  
  5180.       Polling.prototype.doOpen = function () {
  5181.         this.poll();
  5182.       };
  5183.  
  5184.       /**
  5185.        * Pauses polling.
  5186.        *
  5187.        * @param {Function} callback upon buffers are flushed and transport is paused
  5188.        * @api private
  5189.        */
  5190.  
  5191.       Polling.prototype.pause = function (onPause) {
  5192.         var self = this;
  5193.  
  5194.         this.readyState = 'pausing';
  5195.  
  5196.         function pause () {
  5197.           debug('paused');
  5198.           self.readyState = 'paused';
  5199.           onPause();
  5200.         }
  5201.  
  5202.         if (this.polling || !this.writable) {
  5203.           var total = 0;
  5204.  
  5205.           if (this.polling) {
  5206.             debug('we are currently polling - waiting to pause');
  5207.             total++;
  5208.             this.once('pollComplete', function () {
  5209.               debug('pre-pause polling complete');
  5210.               --total || pause();
  5211.             });
  5212.           }
  5213.  
  5214.           if (!this.writable) {
  5215.             debug('we are currently writing - waiting to pause');
  5216.             total++;
  5217.             this.once('drain', function () {
  5218.               debug('pre-pause writing complete');
  5219.               --total || pause();
  5220.             });
  5221.           }
  5222.         } else {
  5223.           pause();
  5224.         }
  5225.       };
  5226.  
  5227.       /**
  5228.        * Starts polling cycle.
  5229.        *
  5230.        * @api public
  5231.        */
  5232.  
  5233.       Polling.prototype.poll = function () {
  5234.         debug('polling');
  5235.         this.polling = true;
  5236.         this.doPoll();
  5237.         this.emit('poll');
  5238.       };
  5239.  
  5240.       /**
  5241.        * Overloads onData to detect payloads.
  5242.        *
  5243.        * @api private
  5244.        */
  5245.  
  5246.       Polling.prototype.onData = function (data) {
  5247.         var self = this;
  5248.         debug('polling got data %s', data);
  5249.         var callback = function (packet, index, total) {
  5250.           // if its the first message we consider the transport open
  5251.           if ('opening' === self.readyState) {
  5252.             self.onOpen();
  5253.           }
  5254.  
  5255.           // if its a close packet, we close the ongoing requests
  5256.           if ('close' === packet.type) {
  5257.             self.onClose();
  5258.             return false;
  5259.           }
  5260.  
  5261.           // otherwise bypass onData and handle the message
  5262.           self.onPacket(packet);
  5263.         };
  5264.  
  5265.         // decode payload
  5266.         parser.decodePayload(data, this.socket.binaryType, callback);
  5267.  
  5268.         // if an event did not trigger closing
  5269.         if ('closed' !== this.readyState) {
  5270.           // if we got data we're not polling
  5271.           this.polling = false;
  5272.           this.emit('pollComplete');
  5273.  
  5274.           if ('open' === this.readyState) {
  5275.             this.poll();
  5276.           } else {
  5277.             debug('ignoring poll - transport state "%s"', this.readyState);
  5278.           }
  5279.         }
  5280.       };
  5281.  
  5282.       /**
  5283.        * For polling, send a close packet.
  5284.        *
  5285.        * @api private
  5286.        */
  5287.  
  5288.       Polling.prototype.doClose = function () {
  5289.         var self = this;
  5290.  
  5291.         function close () {
  5292.           debug('writing close packet');
  5293.           self.write([{ type: 'close' }]);
  5294.         }
  5295.  
  5296.         if ('open' === this.readyState) {
  5297.           debug('transport open - closing');
  5298.           close();
  5299.         } else {
  5300.           // in case we're trying to close while
  5301.           // handshaking is in progress (GH-164)
  5302.           debug('transport not open - deferring close');
  5303.           this.once('open', close);
  5304.         }
  5305.       };
  5306.  
  5307.       /**
  5308.        * Writes a packets payload.
  5309.        *
  5310.        * @param {Array} data packets
  5311.        * @param {Function} drain callback
  5312.        * @api private
  5313.        */
  5314.  
  5315.       Polling.prototype.write = function (packets) {
  5316.         var self = this;
  5317.         this.writable = false;
  5318.         var callbackfn = function () {
  5319.           self.writable = true;
  5320.           self.emit('drain');
  5321.         };
  5322.  
  5323.         parser.encodePayload(packets, this.supportsBinary, function (data) {
  5324.           self.doWrite(data, callbackfn);
  5325.         });
  5326.       };
  5327.  
  5328.       /**
  5329.        * Generates uri for connection.
  5330.        *
  5331.        * @api private
  5332.        */
  5333.  
  5334.       Polling.prototype.uri = function () {
  5335.         var query = this.query || {};
  5336.         var schema = this.secure ? 'https' : 'http';
  5337.         var port = '';
  5338.  
  5339.         // cache busting is forced
  5340.         if (false !== this.timestampRequests) {
  5341.           query[this.timestampParam] = yeast();
  5342.         }
  5343.  
  5344.         if (!this.supportsBinary && !query.sid) {
  5345.           query.b64 = 1;
  5346.         }
  5347.  
  5348.         query = parseqs.encode(query);
  5349.  
  5350.         // avoid port if default for schema
  5351.         if (this.port && (('https' === schema && Number(this.port) !== 443) ||
  5352.            ('http' === schema && Number(this.port) !== 80))) {
  5353.           port = ':' + this.port;
  5354.         }
  5355.  
  5356.         // prepend ? to query
  5357.         if (query.length) {
  5358.           query = '?' + query;
  5359.         }
  5360.  
  5361.         var ipv6 = this.hostname.indexOf(':') !== -1;
  5362.         return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
  5363.       };
  5364.  
  5365.  
  5366. /***/ },
  5367. /* 26 */
  5368. /***/ function(module, exports, __webpack_require__) {
  5369.  
  5370.       /**
  5371.        * Module dependencies.
  5372.        */
  5373.  
  5374.       var parser = __webpack_require__(27);
  5375.       var Emitter = __webpack_require__(36);
  5376.  
  5377.       /**
  5378.        * Module exports.
  5379.        */
  5380.  
  5381.       module.exports = Transport;
  5382.  
  5383.       /**
  5384.        * Transport abstract constructor.
  5385.        *
  5386.        * @param {Object} options.
  5387.        * @api private
  5388.        */
  5389.  
  5390.       function Transport (opts) {
  5391.         this.path = opts.path;
  5392.         this.hostname = opts.hostname;
  5393.         this.port = opts.port;
  5394.         this.secure = opts.secure;
  5395.         this.query = opts.query;
  5396.         this.timestampParam = opts.timestampParam;
  5397.         this.timestampRequests = opts.timestampRequests;
  5398.         this.readyState = '';
  5399.         this.agent = opts.agent || false;
  5400.         this.socket = opts.socket;
  5401.         this.enablesXDR = opts.enablesXDR;
  5402.  
  5403.         // SSL options for Node.js client
  5404.         this.pfx = opts.pfx;
  5405.         this.key = opts.key;
  5406.         this.passphrase = opts.passphrase;
  5407.         this.cert = opts.cert;
  5408.         this.ca = opts.ca;
  5409.         this.ciphers = opts.ciphers;
  5410.         this.rejectUnauthorized = opts.rejectUnauthorized;
  5411.         this.forceNode = opts.forceNode;
  5412.  
  5413.         // other options for Node.js client
  5414.         this.extraHeaders = opts.extraHeaders;
  5415.         this.localAddress = opts.localAddress;
  5416.       }
  5417.  
  5418.       /**
  5419.        * Mix in `Emitter`.
  5420.        */
  5421.  
  5422.       Emitter(Transport.prototype);
  5423.  
  5424.       /**
  5425.        * Emits an error.
  5426.        *
  5427.        * @param {String} str
  5428.        * @return {Transport} for chaining
  5429.        * @api public
  5430.        */
  5431.  
  5432.       Transport.prototype.onError = function (msg, desc) {
  5433.         var err = new Error(msg);
  5434.         err.type = 'TransportError';
  5435.         err.description = desc;
  5436.         this.emit('error', err);
  5437.         return this;
  5438.       };
  5439.  
  5440.       /**
  5441.        * Opens the transport.
  5442.        *
  5443.        * @api public
  5444.        */
  5445.  
  5446.       Transport.prototype.open = function () {
  5447.         if ('closed' === this.readyState || '' === this.readyState) {
  5448.           this.readyState = 'opening';
  5449.           this.doOpen();
  5450.         }
  5451.  
  5452.         return this;
  5453.       };
  5454.  
  5455.       /**
  5456.        * Closes the transport.
  5457.        *
  5458.        * @api private
  5459.        */
  5460.  
  5461.       Transport.prototype.close = function () {
  5462.         if ('opening' === this.readyState || 'open' === this.readyState) {
  5463.           this.doClose();
  5464.           this.onClose();
  5465.         }
  5466.  
  5467.         return this;
  5468.       };
  5469.  
  5470.       /**
  5471.        * Sends multiple packets.
  5472.        *
  5473.        * @param {Array} packets
  5474.        * @api private
  5475.        */
  5476.  
  5477.       Transport.prototype.send = function (packets) {
  5478.         if ('open' === this.readyState) {
  5479.           this.write(packets);
  5480.         } else {
  5481.           throw new Error('Transport not open');
  5482.         }
  5483.       };
  5484.  
  5485.       /**
  5486.        * Called upon open
  5487.        *
  5488.        * @api private
  5489.        */
  5490.  
  5491.       Transport.prototype.onOpen = function () {
  5492.         this.readyState = 'open';
  5493.         this.writable = true;
  5494.         this.emit('open');
  5495.       };
  5496.  
  5497.       /**
  5498.        * Called with data.
  5499.        *
  5500.        * @param {String} data
  5501.        * @api private
  5502.        */
  5503.  
  5504.       Transport.prototype.onData = function (data) {
  5505.         var packet = parser.decodePacket(data, this.socket.binaryType);
  5506.         this.onPacket(packet);
  5507.       };
  5508.  
  5509.       /**
  5510.        * Called with a decoded packet.
  5511.        */
  5512.  
  5513.       Transport.prototype.onPacket = function (packet) {
  5514.         this.emit('packet', packet);
  5515.       };
  5516.  
  5517.       /**
  5518.        * Called upon close.
  5519.        *
  5520.        * @api private
  5521.        */
  5522.  
  5523.       Transport.prototype.onClose = function () {
  5524.         this.readyState = 'closed';
  5525.         this.emit('close');
  5526.       };
  5527.  
  5528.  
  5529. /***/ },
  5530. /* 27 */
  5531. /***/ function(module, exports, __webpack_require__) {
  5532.  
  5533.       /* WEBPACK VAR INJECTION */(function(global) {/**
  5534.        * Module dependencies.
  5535.        */
  5536.  
  5537.       var keys = __webpack_require__(28);
  5538.       var hasBinary = __webpack_require__(29);
  5539.       var sliceBuffer = __webpack_require__(31);
  5540.       var after = __webpack_require__(32);
  5541.       var utf8 = __webpack_require__(33);
  5542.  
  5543.       var base64encoder;
  5544.       if (global && global.ArrayBuffer) {
  5545.         base64encoder = __webpack_require__(34);
  5546.       }
  5547.  
  5548.       /**
  5549.        * Check if we are running an android browser. That requires us to use
  5550.        * ArrayBuffer with polling transports...
  5551.        *
  5552.        * http://ghinda.net/jpeg-blob-ajax-android/
  5553.        */
  5554.  
  5555.       var isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);
  5556.  
  5557.       /**
  5558.        * Check if we are running in PhantomJS.
  5559.        * Uploading a Blob with PhantomJS does not work correctly, as reported here:
  5560.        * https://github.com/ariya/phantomjs/issues/11395
  5561.        * @type boolean
  5562.        */
  5563.       var isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);
  5564.  
  5565.       /**
  5566.        * When true, avoids using Blobs to encode payloads.
  5567.        * @type boolean
  5568.        */
  5569.       var dontSendBlobs = isAndroid || isPhantomJS;
  5570.  
  5571.       /**
  5572.        * Current protocol version.
  5573.        */
  5574.  
  5575.       exports.protocol = 3;
  5576.  
  5577.       /**
  5578.        * Packet types.
  5579.        */
  5580.  
  5581.       var packets = exports.packets = {
  5582.           open:     0    // non-ws
  5583.         , close:    1    // non-ws
  5584.         , ping:     2
  5585.         , pong:     3
  5586.         , message:  4
  5587.         , upgrade:  5
  5588.         , noop:     6
  5589.       };
  5590.  
  5591.       var packetslist = keys(packets);
  5592.  
  5593.       /**
  5594.        * Premade error packet.
  5595.        */
  5596.  
  5597.       var err = { type: 'error', data: 'parser error' };
  5598.  
  5599.       /**
  5600.        * Create a blob api even for blob builder when vendor prefixes exist
  5601.        */
  5602.  
  5603.       var Blob = __webpack_require__(35);
  5604.  
  5605.       /**
  5606.        * Encodes a packet.
  5607.        *
  5608.        *     <packet type id> [ <data> ]
  5609.        *
  5610.        * Example:
  5611.        *
  5612.        *     5hello world
  5613.        *     3
  5614.        *     4
  5615.        *
  5616.        * Binary is encoded in an identical principle
  5617.        *
  5618.        * @api private
  5619.        */
  5620.  
  5621.       exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
  5622.         if ('function' == typeof supportsBinary) {
  5623.           callback = supportsBinary;
  5624.           supportsBinary = false;
  5625.         }
  5626.  
  5627.         if ('function' == typeof utf8encode) {
  5628.           callback = utf8encode;
  5629.           utf8encode = null;
  5630.         }
  5631.  
  5632.         var data = (packet.data === undefined)
  5633.           ? undefined
  5634.           : packet.data.buffer || packet.data;
  5635.  
  5636.         if (global.ArrayBuffer && data instanceof ArrayBuffer) {
  5637.           return encodeArrayBuffer(packet, supportsBinary, callback);
  5638.         } else if (Blob && data instanceof global.Blob) {
  5639.           return encodeBlob(packet, supportsBinary, callback);
  5640.         }
  5641.  
  5642.         // might be an object with { base64: true, data: dataAsBase64String }
  5643.         if (data && data.base64) {
  5644.           return encodeBase64Object(packet, callback);
  5645.         }
  5646.  
  5647.         // Sending data as a utf-8 string
  5648.         var encoded = packets[packet.type];
  5649.  
  5650.         // data fragment is optional
  5651.         if (undefined !== packet.data) {
  5652.           encoded += utf8encode ? utf8.encode(String(packet.data)) : String(packet.data);
  5653.         }
  5654.  
  5655.         return callback('' + encoded);
  5656.  
  5657.       };
  5658.  
  5659.       function encodeBase64Object(packet, callback) {
  5660.         // packet data is an object { base64: true, data: dataAsBase64String }
  5661.         var message = 'b' + exports.packets[packet.type] + packet.data.data;
  5662.         return callback(message);
  5663.       }
  5664.  
  5665.       /**
  5666.        * Encode packet helpers for binary types
  5667.        */
  5668.  
  5669.       function encodeArrayBuffer(packet, supportsBinary, callback) {
  5670.         if (!supportsBinary) {
  5671.           return exports.encodeBase64Packet(packet, callback);
  5672.         }
  5673.  
  5674.         var data = packet.data;
  5675.         var contentArray = new Uint8Array(data);
  5676.         var resultBuffer = new Uint8Array(1 + data.byteLength);
  5677.  
  5678.         resultBuffer[0] = packets[packet.type];
  5679.         for (var i = 0; i < contentArray.length; i++) {
  5680.           resultBuffer[i+1] = contentArray[i];
  5681.         }
  5682.  
  5683.         return callback(resultBuffer.buffer);
  5684.       }
  5685.  
  5686.       function encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {
  5687.         if (!supportsBinary) {
  5688.           return exports.encodeBase64Packet(packet, callback);
  5689.         }
  5690.  
  5691.         var fr = new FileReader();
  5692.         fr.onload = function() {
  5693.           packet.data = fr.result;
  5694.           exports.encodePacket(packet, supportsBinary, true, callback);
  5695.         };
  5696.         return fr.readAsArrayBuffer(packet.data);
  5697.       }
  5698.  
  5699.       function encodeBlob(packet, supportsBinary, callback) {
  5700.         if (!supportsBinary) {
  5701.           return exports.encodeBase64Packet(packet, callback);
  5702.         }
  5703.  
  5704.         if (dontSendBlobs) {
  5705.           return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);
  5706.         }
  5707.  
  5708.         var length = new Uint8Array(1);
  5709.         length[0] = packets[packet.type];
  5710.         var blob = new Blob([length.buffer, packet.data]);
  5711.  
  5712.         return callback(blob);
  5713.       }
  5714.  
  5715.       /**
  5716.        * Encodes a packet with binary data in a base64 string
  5717.        *
  5718.        * @param {Object} packet, has `type` and `data`
  5719.        * @return {String} base64 encoded message
  5720.        */
  5721.  
  5722.       exports.encodeBase64Packet = function(packet, callback) {
  5723.         var message = 'b' + exports.packets[packet.type];
  5724.         if (Blob && packet.data instanceof global.Blob) {
  5725.           var fr = new FileReader();
  5726.           fr.onload = function() {
  5727.             var b64 = fr.result.split(',')[1];
  5728.             callback(message + b64);
  5729.           };
  5730.           return fr.readAsDataURL(packet.data);
  5731.         }
  5732.  
  5733.         var b64data;
  5734.         try {
  5735.           b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));
  5736.         } catch (e) {
  5737.           // iPhone Safari doesn't let you apply with typed arrays
  5738.           var typed = new Uint8Array(packet.data);
  5739.           var basic = new Array(typed.length);
  5740.           for (var i = 0; i < typed.length; i++) {
  5741.             basic[i] = typed[i];
  5742.           }
  5743.           b64data = String.fromCharCode.apply(null, basic);
  5744.         }
  5745.         message += global.btoa(b64data);
  5746.         return callback(message);
  5747.       };
  5748.  
  5749.       /**
  5750.        * Decodes a packet. Changes format to Blob if requested.
  5751.        *
  5752.        * @return {Object} with `type` and `data` (if any)
  5753.        * @api private
  5754.        */
  5755.  
  5756.       exports.decodePacket = function (data, binaryType, utf8decode) {
  5757.         if (data === undefined) {
  5758.           return err;
  5759.         }
  5760.         // String data
  5761.         if (typeof data == 'string') {
  5762.           if (data.charAt(0) == 'b') {
  5763.             return exports.decodeBase64Packet(data.substr(1), binaryType);
  5764.           }
  5765.  
  5766.           if (utf8decode) {
  5767.             data = tryDecode(data);
  5768.             if (data === false) {
  5769.               return err;
  5770.             }
  5771.           }
  5772.           var type = data.charAt(0);
  5773.  
  5774.           if (Number(type) != type || !packetslist[type]) {
  5775.             return err;
  5776.           }
  5777.  
  5778.           if (data.length > 1) {
  5779.             return { type: packetslist[type], data: data.substring(1) };
  5780.           } else {
  5781.             return { type: packetslist[type] };
  5782.           }
  5783.         }
  5784.  
  5785.         var asArray = new Uint8Array(data);
  5786.         var type = asArray[0];
  5787.         var rest = sliceBuffer(data, 1);
  5788.         if (Blob && binaryType === 'blob') {
  5789.           rest = new Blob([rest]);
  5790.         }
  5791.         return { type: packetslist[type], data: rest };
  5792.       };
  5793.  
  5794.       function tryDecode(data) {
  5795.         try {
  5796.           data = utf8.decode(data);
  5797.         } catch (e) {
  5798.           return false;
  5799.         }
  5800.         return data;
  5801.       }
  5802.  
  5803.       /**
  5804.        * Decodes a packet encoded in a base64 string
  5805.        *
  5806.        * @param {String} base64 encoded message
  5807.        * @return {Object} with `type` and `data` (if any)
  5808.        */
  5809.  
  5810.       exports.decodeBase64Packet = function(msg, binaryType) {
  5811.         var type = packetslist[msg.charAt(0)];
  5812.         if (!base64encoder) {
  5813.           return { type: type, data: { base64: true, data: msg.substr(1) } };
  5814.         }
  5815.  
  5816.         var data = base64encoder.decode(msg.substr(1));
  5817.  
  5818.         if (binaryType === 'blob' && Blob) {
  5819.           data = new Blob([data]);
  5820.         }
  5821.  
  5822.         return { type: type, data: data };
  5823.       };
  5824.  
  5825.       /**
  5826.        * Encodes multiple messages (payload).
  5827.        *
  5828.        *     <length>:data
  5829.        *
  5830.        * Example:
  5831.        *
  5832.        *     11:hello world2:hi
  5833.        *
  5834.        * If any contents are binary, they will be encoded as base64 strings. Base64
  5835.        * encoded strings are marked with a b before the length specifier
  5836.        *
  5837.        * @param {Array} packets
  5838.        * @api private
  5839.        */
  5840.  
  5841.       exports.encodePayload = function (packets, supportsBinary, callback) {
  5842.         if (typeof supportsBinary == 'function') {
  5843.           callback = supportsBinary;
  5844.           supportsBinary = null;
  5845.         }
  5846.  
  5847.         var isBinary = hasBinary(packets);
  5848.  
  5849.         if (supportsBinary && isBinary) {
  5850.           if (Blob && !dontSendBlobs) {
  5851.             return exports.encodePayloadAsBlob(packets, callback);
  5852.           }
  5853.  
  5854.           return exports.encodePayloadAsArrayBuffer(packets, callback);
  5855.         }
  5856.  
  5857.         if (!packets.length) {
  5858.           return callback('0:');
  5859.         }
  5860.  
  5861.         function setLengthHeader(message) {
  5862.           return message.length + ':' + message;
  5863.         }
  5864.  
  5865.         function encodeOne(packet, doneCallback) {
  5866.           exports.encodePacket(packet, !isBinary ? false : supportsBinary, true, function(message) {
  5867.             doneCallback(null, setLengthHeader(message));
  5868.           });
  5869.         }
  5870.  
  5871.         map(packets, encodeOne, function(err, results) {
  5872.           return callback(results.join(''));
  5873.         });
  5874.       };
  5875.  
  5876.       /**
  5877.        * Async array map using after
  5878.        */
  5879.  
  5880.       function map(ary, each, done) {
  5881.         var result = new Array(ary.length);
  5882.         var next = after(ary.length, done);
  5883.  
  5884.         var eachWithIndex = function(i, el, cb) {
  5885.           each(el, function(error, msg) {
  5886.             result[i] = msg;
  5887.             cb(error, result);
  5888.           });
  5889.         };
  5890.  
  5891.         for (var i = 0; i < ary.length; i++) {
  5892.           eachWithIndex(i, ary[i], next);
  5893.         }
  5894.       }
  5895.  
  5896.       /*
  5897.        * Decodes data when a payload is maybe expected. Possible binary contents are
  5898.        * decoded from their base64 representation
  5899.        *
  5900.        * @param {String} data, callback method
  5901.        * @api public
  5902.        */
  5903.  
  5904.       exports.decodePayload = function (data, binaryType, callback) {
  5905.         if (typeof data != 'string') {
  5906.           return exports.decodePayloadAsBinary(data, binaryType, callback);
  5907.         }
  5908.  
  5909.         if (typeof binaryType === 'function') {
  5910.           callback = binaryType;
  5911.           binaryType = null;
  5912.         }
  5913.  
  5914.         var packet;
  5915.         if (data == '') {
  5916.           // parser error - ignoring payload
  5917.           return callback(err, 0, 1);
  5918.         }
  5919.  
  5920.         var length = ''
  5921.           , n, msg;
  5922.  
  5923.         for (var i = 0, l = data.length; i < l; i++) {
  5924.           var chr = data.charAt(i);
  5925.  
  5926.           if (':' != chr) {
  5927.             length += chr;
  5928.           } else {
  5929.             if ('' == length || (length != (n = Number(length)))) {
  5930.               // parser error - ignoring payload
  5931.               return callback(err, 0, 1);
  5932.             }
  5933.  
  5934.             msg = data.substr(i + 1, n);
  5935.  
  5936.             if (length != msg.length) {
  5937.               // parser error - ignoring payload
  5938.               return callback(err, 0, 1);
  5939.             }
  5940.  
  5941.             if (msg.length) {
  5942.               packet = exports.decodePacket(msg, binaryType, true);
  5943.  
  5944.               if (err.type == packet.type && err.data == packet.data) {
  5945.                 // parser error in individual packet - ignoring payload
  5946.                 return callback(err, 0, 1);
  5947.               }
  5948.  
  5949.               var ret = callback(packet, i + n, l);
  5950.               if (false === ret) return;
  5951.             }
  5952.  
  5953.             // advance cursor
  5954.             i += n;
  5955.             length = '';
  5956.           }
  5957.         }
  5958.  
  5959.         if (length != '') {
  5960.           // parser error - ignoring payload
  5961.           return callback(err, 0, 1);
  5962.         }
  5963.  
  5964.       };
  5965.  
  5966.       /**
  5967.        * Encodes multiple messages (payload) as binary.
  5968.        *
  5969.        * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number
  5970.        * 255><data>
  5971.        *
  5972.        * Example:
  5973.        * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers
  5974.        *
  5975.        * @param {Array} packets
  5976.        * @return {ArrayBuffer} encoded payload
  5977.        * @api private
  5978.        */
  5979.  
  5980.       exports.encodePayloadAsArrayBuffer = function(packets, callback) {
  5981.         if (!packets.length) {
  5982.           return callback(new ArrayBuffer(0));
  5983.         }
  5984.  
  5985.         function encodeOne(packet, doneCallback) {
  5986.           exports.encodePacket(packet, true, true, function(data) {
  5987.             return doneCallback(null, data);
  5988.           });
  5989.         }
  5990.  
  5991.         map(packets, encodeOne, function(err, encodedPackets) {
  5992.           var totalLength = encodedPackets.reduce(function(acc, p) {
  5993.             var len;
  5994.             if (typeof p === 'string'){
  5995.               len = p.length;
  5996.             } else {
  5997.               len = p.byteLength;
  5998.             }
  5999.             return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2
  6000.           }, 0);
  6001.  
  6002.           var resultArray = new Uint8Array(totalLength);
  6003.  
  6004.           var bufferIndex = 0;
  6005.           encodedPackets.forEach(function(p) {
  6006.             var isString = typeof p === 'string';
  6007.             var ab = p;
  6008.             if (isString) {
  6009.               var view = new Uint8Array(p.length);
  6010.               for (var i = 0; i < p.length; i++) {
  6011.                 view[i] = p.charCodeAt(i);
  6012.               }
  6013.               ab = view.buffer;
  6014.             }
  6015.  
  6016.             if (isString) { // not true binary
  6017.               resultArray[bufferIndex++] = 0;
  6018.             } else { // true binary
  6019.               resultArray[bufferIndex++] = 1;
  6020.             }
  6021.  
  6022.             var lenStr = ab.byteLength.toString();
  6023.             for (var i = 0; i < lenStr.length; i++) {
  6024.               resultArray[bufferIndex++] = parseInt(lenStr[i]);
  6025.             }
  6026.             resultArray[bufferIndex++] = 255;
  6027.  
  6028.             var view = new Uint8Array(ab);
  6029.             for (var i = 0; i < view.length; i++) {
  6030.               resultArray[bufferIndex++] = view[i];
  6031.             }
  6032.           });
  6033.  
  6034.           return callback(resultArray.buffer);
  6035.         });
  6036.       };
  6037.  
  6038.       /**
  6039.        * Encode as Blob
  6040.        */
  6041.  
  6042.       exports.encodePayloadAsBlob = function(packets, callback) {
  6043.         function encodeOne(packet, doneCallback) {
  6044.           exports.encodePacket(packet, true, true, function(encoded) {
  6045.             var binaryIdentifier = new Uint8Array(1);
  6046.             binaryIdentifier[0] = 1;
  6047.             if (typeof encoded === 'string') {
  6048.               var view = new Uint8Array(encoded.length);
  6049.               for (var i = 0; i < encoded.length; i++) {
  6050.                 view[i] = encoded.charCodeAt(i);
  6051.               }
  6052.               encoded = view.buffer;
  6053.               binaryIdentifier[0] = 0;
  6054.             }
  6055.  
  6056.             var len = (encoded instanceof ArrayBuffer)
  6057.               ? encoded.byteLength
  6058.               : encoded.size;
  6059.  
  6060.             var lenStr = len.toString();
  6061.             var lengthAry = new Uint8Array(lenStr.length + 1);
  6062.             for (var i = 0; i < lenStr.length; i++) {
  6063.               lengthAry[i] = parseInt(lenStr[i]);
  6064.             }
  6065.             lengthAry[lenStr.length] = 255;
  6066.  
  6067.             if (Blob) {
  6068.               var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);
  6069.               doneCallback(null, blob);
  6070.             }
  6071.           });
  6072.         }
  6073.  
  6074.         map(packets, encodeOne, function(err, results) {
  6075.           return callback(new Blob(results));
  6076.         });
  6077.       };
  6078.  
  6079.       /*
  6080.        * Decodes data when a payload is maybe expected. Strings are decoded by
  6081.        * interpreting each byte as a key code for entries marked to start with 0. See
  6082.        * description of encodePayloadAsBinary
  6083.        *
  6084.        * @param {ArrayBuffer} data, callback method
  6085.        * @api public
  6086.        */
  6087.  
  6088.       exports.decodePayloadAsBinary = function (data, binaryType, callback) {
  6089.         if (typeof binaryType === 'function') {
  6090.           callback = binaryType;
  6091.           binaryType = null;
  6092.         }
  6093.  
  6094.         var bufferTail = data;
  6095.         var buffers = [];
  6096.  
  6097.         var numberTooLong = false;
  6098.         while (bufferTail.byteLength > 0) {
  6099.           var tailArray = new Uint8Array(bufferTail);
  6100.           var isString = tailArray[0] === 0;
  6101.           var msgLength = '';
  6102.  
  6103.           for (var i = 1; ; i++) {
  6104.             if (tailArray[i] == 255) break;
  6105.  
  6106.             if (msgLength.length > 310) {
  6107.               numberTooLong = true;
  6108.               break;
  6109.             }
  6110.  
  6111.             msgLength += tailArray[i];
  6112.           }
  6113.  
  6114.           if(numberTooLong) return callback(err, 0, 1);
  6115.  
  6116.           bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);
  6117.           msgLength = parseInt(msgLength);
  6118.  
  6119.           var msg = sliceBuffer(bufferTail, 0, msgLength);
  6120.           if (isString) {
  6121.             try {
  6122.               msg = String.fromCharCode.apply(null, new Uint8Array(msg));
  6123.             } catch (e) {
  6124.               // iPhone Safari doesn't let you apply to typed arrays
  6125.               var typed = new Uint8Array(msg);
  6126.               msg = '';
  6127.               for (var i = 0; i < typed.length; i++) {
  6128.                 msg += String.fromCharCode(typed[i]);
  6129.               }
  6130.             }
  6131.           }
  6132.  
  6133.           buffers.push(msg);
  6134.           bufferTail = sliceBuffer(bufferTail, msgLength);
  6135.         }
  6136.  
  6137.         var total = buffers.length;
  6138.         buffers.forEach(function(buffer, i) {
  6139.           callback(exports.decodePacket(buffer, binaryType, true), i, total);
  6140.         });
  6141.       };
  6142.  
  6143.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  6144.  
  6145. /***/ },
  6146. /* 28 */
  6147. /***/ function(module, exports) {
  6148.  
  6149.      
  6150.       /**
  6151.        * Gets the keys for an object.
  6152.        *
  6153.        * @return {Array} keys
  6154.        * @api private
  6155.        */
  6156.  
  6157.       module.exports = Object.keys || function keys (obj){
  6158.         var arr = [];
  6159.         var has = Object.prototype.hasOwnProperty;
  6160.  
  6161.         for (var i in obj) {
  6162.           if (has.call(obj, i)) {
  6163.             arr.push(i);
  6164.           }
  6165.         }
  6166.         return arr;
  6167.       };
  6168.  
  6169.  
  6170. /***/ },
  6171. /* 29 */
  6172. /***/ function(module, exports, __webpack_require__) {
  6173.  
  6174.       /* WEBPACK VAR INJECTION */(function(global) {
  6175.       /*
  6176.        * Module requirements.
  6177.        */
  6178.  
  6179.       var isArray = __webpack_require__(30);
  6180.  
  6181.       /**
  6182.        * Module exports.
  6183.        */
  6184.  
  6185.       module.exports = hasBinary;
  6186.  
  6187.       /**
  6188.        * Checks for binary data.
  6189.        *
  6190.        * Right now only Buffer and ArrayBuffer are supported..
  6191.        *
  6192.        * @param {Object} anything
  6193.        * @api public
  6194.        */
  6195.  
  6196.       function hasBinary(data) {
  6197.  
  6198.         function _hasBinary(obj) {
  6199.           if (!obj) return false;
  6200.  
  6201.           if ( (global.Buffer && global.Buffer.isBuffer(obj)) ||
  6202.                (global.ArrayBuffer && obj instanceof ArrayBuffer) ||
  6203.                (global.Blob && obj instanceof Blob) ||
  6204.                (global.File && obj instanceof File)
  6205.               ) {
  6206.             return true;
  6207.           }
  6208.  
  6209.           if (isArray(obj)) {
  6210.             for (var i = 0; i < obj.length; i++) {
  6211.                 if (_hasBinary(obj[i])) {
  6212.                     return true;
  6213.                 }
  6214.             }
  6215.           } else if (obj && 'object' == typeof obj) {
  6216.             if (obj.toJSON) {
  6217.               obj = obj.toJSON();
  6218.             }
  6219.  
  6220.             for (var key in obj) {
  6221.               if (Object.prototype.hasOwnProperty.call(obj, key) && _hasBinary(obj[key])) {
  6222.                 return true;
  6223.               }
  6224.             }
  6225.           }
  6226.  
  6227.           return false;
  6228.         }
  6229.  
  6230.         return _hasBinary(data);
  6231.       }
  6232.  
  6233.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  6234.  
  6235. /***/ },
  6236. /* 30 */
  6237. /***/ function(module, exports) {
  6238.  
  6239.       module.exports = Array.isArray || function (arr) {
  6240.         return Object.prototype.toString.call(arr) == '[object Array]';
  6241.       };
  6242.  
  6243.  
  6244. /***/ },
  6245. /* 31 */
  6246. /***/ function(module, exports) {
  6247.  
  6248.       /**
  6249.        * An abstraction for slicing an arraybuffer even when
  6250.        * ArrayBuffer.prototype.slice is not supported
  6251.        *
  6252.        * @api public
  6253.        */
  6254.  
  6255.       module.exports = function(arraybuffer, start, end) {
  6256.         var bytes = arraybuffer.byteLength;
  6257.         start = start || 0;
  6258.         end = end || bytes;
  6259.  
  6260.         if (arraybuffer.slice) { return arraybuffer.slice(start, end); }
  6261.  
  6262.         if (start < 0) { start += bytes; }
  6263.         if (end < 0) { end += bytes; }
  6264.         if (end > bytes) { end = bytes; }
  6265.  
  6266.         if (start >= bytes || start >= end || bytes === 0) {
  6267.           return new ArrayBuffer(0);
  6268.         }
  6269.  
  6270.         var abv = new Uint8Array(arraybuffer);
  6271.         var result = new Uint8Array(end - start);
  6272.         for (var i = start, ii = 0; i < end; i++, ii++) {
  6273.           result[ii] = abv[i];
  6274.         }
  6275.         return result.buffer;
  6276.       };
  6277.  
  6278.  
  6279. /***/ },
  6280. /* 32 */
  6281. /***/ function(module, exports) {
  6282.  
  6283.       module.exports = after
  6284.  
  6285.       function after(count, callback, err_cb) {
  6286.           var bail = false
  6287.           err_cb = err_cb || noop
  6288.           proxy.count = count
  6289.  
  6290.           return (count === 0) ? callback() : proxy
  6291.  
  6292.           function proxy(err, result) {
  6293.               if (proxy.count <= 0) {
  6294.                   throw new Error('after called too many times')
  6295.               }
  6296.               --proxy.count
  6297.  
  6298.               // after first error, rest are passed to err_cb
  6299.               if (err) {
  6300.                   bail = true
  6301.                   callback(err)
  6302.                   // future error callbacks will go to error handler
  6303.                   callback = err_cb
  6304.               } else if (proxy.count === 0 && !bail) {
  6305.                   callback(null, result)
  6306.               }
  6307.           }
  6308.       }
  6309.  
  6310.       function noop() {}
  6311.  
  6312.  
  6313. /***/ },
  6314. /* 33 */
  6315. /***/ function(module, exports, __webpack_require__) {
  6316.  
  6317.       var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/wtf8 v1.0.0 by @mathias */
  6318.       ;(function(root) {
  6319.  
  6320.             // Detect free variables `exports`
  6321.             var freeExports = typeof exports == 'object' && exports;
  6322.  
  6323.             // Detect free variable `module`
  6324.             var freeModule = typeof module == 'object' && module &&
  6325.                   module.exports == freeExports && module;
  6326.  
  6327.             // Detect free variable `global`, from Node.js or Browserified code,
  6328.             // and use it as `root`
  6329.             var freeGlobal = typeof global == 'object' && global;
  6330.             if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
  6331.                   root = freeGlobal;
  6332.             }
  6333.  
  6334.             /*--------------------------------------------------------------------------*/
  6335.  
  6336.             var stringFromCharCode = String.fromCharCode;
  6337.  
  6338.             // Taken from https://mths.be/punycode
  6339.             function ucs2decode(string) {
  6340.                   var output = [];
  6341.                   var counter = 0;
  6342.                   var length = string.length;
  6343.                   var value;
  6344.                   var extra;
  6345.                   while (counter < length) {
  6346.                         value = string.charCodeAt(counter++);
  6347.                         if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
  6348.                               // high surrogate, and there is a next character
  6349.                               extra = string.charCodeAt(counter++);
  6350.                               if ((extra & 0xFC00) == 0xDC00) { // low surrogate
  6351.                                     output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
  6352.                               } else {
  6353.                                     // unmatched surrogate; only append this code unit, in case the next
  6354.                                     // code unit is the high surrogate of a surrogate pair
  6355.                                     output.push(value);
  6356.                                     counter--;
  6357.                               }
  6358.                         } else {
  6359.                               output.push(value);
  6360.                         }
  6361.                   }
  6362.                   return output;
  6363.             }
  6364.  
  6365.             // Taken from https://mths.be/punycode
  6366.             function ucs2encode(array) {
  6367.                   var length = array.length;
  6368.                   var index = -1;
  6369.                   var value;
  6370.                   var output = '';
  6371.                   while (++index < length) {
  6372.                         value = array[index];
  6373.                         if (value > 0xFFFF) {
  6374.                               value -= 0x10000;
  6375.                               output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
  6376.                               value = 0xDC00 | value & 0x3FF;
  6377.                         }
  6378.                         output += stringFromCharCode(value);
  6379.                   }
  6380.                   return output;
  6381.             }
  6382.  
  6383.             /*--------------------------------------------------------------------------*/
  6384.  
  6385.             function createByte(codePoint, shift) {
  6386.                   return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);
  6387.             }
  6388.  
  6389.             function encodeCodePoint(codePoint) {
  6390.                   if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence
  6391.                         return stringFromCharCode(codePoint);
  6392.                   }
  6393.                   var symbol = '';
  6394.                   if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence
  6395.                         symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);
  6396.                   }
  6397.                   else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence
  6398.                         symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);
  6399.                         symbol += createByte(codePoint, 6);
  6400.                   }
  6401.                   else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence
  6402.                         symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);
  6403.                         symbol += createByte(codePoint, 12);
  6404.                         symbol += createByte(codePoint, 6);
  6405.                   }
  6406.                   symbol += stringFromCharCode((codePoint & 0x3F) | 0x80);
  6407.                   return symbol;
  6408.             }
  6409.  
  6410.             function wtf8encode(string) {
  6411.                   var codePoints = ucs2decode(string);
  6412.                   var length = codePoints.length;
  6413.                   var index = -1;
  6414.                   var codePoint;
  6415.                   var byteString = '';
  6416.                   while (++index < length) {
  6417.                         codePoint = codePoints[index];
  6418.                         byteString += encodeCodePoint(codePoint);
  6419.                   }
  6420.                   return byteString;
  6421.             }
  6422.  
  6423.             /*--------------------------------------------------------------------------*/
  6424.  
  6425.             function readContinuationByte() {
  6426.                   if (byteIndex >= byteCount) {
  6427.                         throw Error('Invalid byte index');
  6428.                   }
  6429.  
  6430.                   var continuationByte = byteArray[byteIndex] & 0xFF;
  6431.                   byteIndex++;
  6432.  
  6433.                   if ((continuationByte & 0xC0) == 0x80) {
  6434.                         return continuationByte & 0x3F;
  6435.                   }
  6436.  
  6437.                   // If we end up here, it’s not a continuation byte.
  6438.                   throw Error('Invalid continuation byte');
  6439.             }
  6440.  
  6441.             function decodeSymbol() {
  6442.                   var byte1;
  6443.                   var byte2;
  6444.                   var byte3;
  6445.                   var byte4;
  6446.                   var codePoint;
  6447.  
  6448.                   if (byteIndex > byteCount) {
  6449.                         throw Error('Invalid byte index');
  6450.                   }
  6451.  
  6452.                   if (byteIndex == byteCount) {
  6453.                         return false;
  6454.                   }
  6455.  
  6456.                   // Read the first byte.
  6457.                   byte1 = byteArray[byteIndex] & 0xFF;
  6458.                   byteIndex++;
  6459.  
  6460.                   // 1-byte sequence (no continuation bytes)
  6461.                   if ((byte1 & 0x80) == 0) {
  6462.                         return byte1;
  6463.                   }
  6464.  
  6465.                   // 2-byte sequence
  6466.                   if ((byte1 & 0xE0) == 0xC0) {
  6467.                         var byte2 = readContinuationByte();
  6468.                         codePoint = ((byte1 & 0x1F) << 6) | byte2;
  6469.                         if (codePoint >= 0x80) {
  6470.                               return codePoint;
  6471.                         } else {
  6472.                               throw Error('Invalid continuation byte');
  6473.                         }
  6474.                   }
  6475.  
  6476.                   // 3-byte sequence (may include unpaired surrogates)
  6477.                   if ((byte1 & 0xF0) == 0xE0) {
  6478.                         byte2 = readContinuationByte();
  6479.                         byte3 = readContinuationByte();
  6480.                         codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;
  6481.                         if (codePoint >= 0x0800) {
  6482.                               return codePoint;
  6483.                         } else {
  6484.                               throw Error('Invalid continuation byte');
  6485.                         }
  6486.                   }
  6487.  
  6488.                   // 4-byte sequence
  6489.                   if ((byte1 & 0xF8) == 0xF0) {
  6490.                         byte2 = readContinuationByte();
  6491.                         byte3 = readContinuationByte();
  6492.                         byte4 = readContinuationByte();
  6493.                         codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |
  6494.                               (byte3 << 0x06) | byte4;
  6495.                         if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {
  6496.                               return codePoint;
  6497.                         }
  6498.                   }
  6499.  
  6500.                   throw Error('Invalid WTF-8 detected');
  6501.             }
  6502.  
  6503.             var byteArray;
  6504.             var byteCount;
  6505.             var byteIndex;
  6506.             function wtf8decode(byteString) {
  6507.                   byteArray = ucs2decode(byteString);
  6508.                   byteCount = byteArray.length;
  6509.                   byteIndex = 0;
  6510.                   var codePoints = [];
  6511.                   var tmp;
  6512.                   while ((tmp = decodeSymbol()) !== false) {
  6513.                         codePoints.push(tmp);
  6514.                   }
  6515.                   return ucs2encode(codePoints);
  6516.             }
  6517.  
  6518.             /*--------------------------------------------------------------------------*/
  6519.  
  6520.             var wtf8 = {
  6521.                   'version': '1.0.0',
  6522.                   'encode': wtf8encode,
  6523.                   'decode': wtf8decode
  6524.             };
  6525.  
  6526.             // Some AMD build optimizers, like r.js, check for specific condition patterns
  6527.             // like the following:
  6528.             if (
  6529.                   true
  6530.             ) {
  6531.                   !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
  6532.                         return wtf8;
  6533.                   }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  6534.             }     else if (freeExports && !freeExports.nodeType) {
  6535.                   if (freeModule) { // in Node.js or RingoJS v0.8.0+
  6536.                         freeModule.exports = wtf8;
  6537.                   } else { // in Narwhal or RingoJS v0.7.0-
  6538.                         var object = {};
  6539.                         var hasOwnProperty = object.hasOwnProperty;
  6540.                         for (var key in wtf8) {
  6541.                               hasOwnProperty.call(wtf8, key) && (freeExports[key] = wtf8[key]);
  6542.                         }
  6543.                   }
  6544.             } else { // in Rhino or a web browser
  6545.                   root.wtf8 = wtf8;
  6546.             }
  6547.  
  6548.       }(this));
  6549.  
  6550.       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(12)(module), (function() { return this; }())))
  6551.  
  6552. /***/ },
  6553. /* 34 */
  6554. /***/ function(module, exports) {
  6555.  
  6556.       /*
  6557.        * base64-arraybuffer
  6558.        * https://github.com/niklasvh/base64-arraybuffer
  6559.        *
  6560.        * Copyright (c) 2012 Niklas von Hertzen
  6561.        * Licensed under the MIT license.
  6562.        */
  6563.       (function(){
  6564.         "use strict";
  6565.  
  6566.         var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  6567.  
  6568.         // Use a lookup table to find the index.
  6569.         var lookup = new Uint8Array(256);
  6570.         for (var i = 0; i < chars.length; i++) {
  6571.           lookup[chars.charCodeAt(i)] = i;
  6572.         }
  6573.  
  6574.         exports.encode = function(arraybuffer) {
  6575.           var bytes = new Uint8Array(arraybuffer),
  6576.           i, len = bytes.length, base64 = "";
  6577.  
  6578.           for (i = 0; i < len; i+=3) {
  6579.             base64 += chars[bytes[i] >> 2];
  6580.             base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
  6581.             base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
  6582.             base64 += chars[bytes[i + 2] & 63];
  6583.           }
  6584.  
  6585.           if ((len % 3) === 2) {
  6586.             base64 = base64.substring(0, base64.length - 1) + "=";
  6587.           } else if (len % 3 === 1) {
  6588.             base64 = base64.substring(0, base64.length - 2) + "==";
  6589.           }
  6590.  
  6591.           return base64;
  6592.         };
  6593.  
  6594.         exports.decode =  function(base64) {
  6595.           var bufferLength = base64.length * 0.75,
  6596.           len = base64.length, i, p = 0,
  6597.           encoded1, encoded2, encoded3, encoded4;
  6598.  
  6599.           if (base64[base64.length - 1] === "=") {
  6600.             bufferLength--;
  6601.             if (base64[base64.length - 2] === "=") {
  6602.               bufferLength--;
  6603.             }
  6604.           }
  6605.  
  6606.           var arraybuffer = new ArrayBuffer(bufferLength),
  6607.           bytes = new Uint8Array(arraybuffer);
  6608.  
  6609.           for (i = 0; i < len; i+=4) {
  6610.             encoded1 = lookup[base64.charCodeAt(i)];
  6611.             encoded2 = lookup[base64.charCodeAt(i+1)];
  6612.             encoded3 = lookup[base64.charCodeAt(i+2)];
  6613.             encoded4 = lookup[base64.charCodeAt(i+3)];
  6614.  
  6615.             bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
  6616.             bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
  6617.             bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
  6618.           }
  6619.  
  6620.           return arraybuffer;
  6621.         };
  6622.       })();
  6623.  
  6624.  
  6625. /***/ },
  6626. /* 35 */
  6627. /***/ function(module, exports) {
  6628.  
  6629.       /* WEBPACK VAR INJECTION */(function(global) {/**
  6630.        * Create a blob builder even when vendor prefixes exist
  6631.        */
  6632.  
  6633.       var BlobBuilder = global.BlobBuilder
  6634.         || global.WebKitBlobBuilder
  6635.         || global.MSBlobBuilder
  6636.         || global.MozBlobBuilder;
  6637.  
  6638.       /**
  6639.        * Check if Blob constructor is supported
  6640.        */
  6641.  
  6642.       var blobSupported = (function() {
  6643.         try {
  6644.           var a = new Blob(['hi']);
  6645.           return a.size === 2;
  6646.         } catch(e) {
  6647.           return false;
  6648.         }
  6649.       })();
  6650.  
  6651.       /**
  6652.        * Check if Blob constructor supports ArrayBufferViews
  6653.        * Fails in Safari 6, so we need to map to ArrayBuffers there.
  6654.        */
  6655.  
  6656.       var blobSupportsArrayBufferView = blobSupported && (function() {
  6657.         try {
  6658.           var b = new Blob([new Uint8Array([1,2])]);
  6659.           return b.size === 2;
  6660.         } catch(e) {
  6661.           return false;
  6662.         }
  6663.       })();
  6664.  
  6665.       /**
  6666.        * Check if BlobBuilder is supported
  6667.        */
  6668.  
  6669.       var blobBuilderSupported = BlobBuilder
  6670.         && BlobBuilder.prototype.append
  6671.         && BlobBuilder.prototype.getBlob;
  6672.  
  6673.       /**
  6674.        * Helper function that maps ArrayBufferViews to ArrayBuffers
  6675.        * Used by BlobBuilder constructor and old browsers that didn't
  6676.        * support it in the Blob constructor.
  6677.        */
  6678.  
  6679.       function mapArrayBufferViews(ary) {
  6680.         for (var i = 0; i < ary.length; i++) {
  6681.           var chunk = ary[i];
  6682.           if (chunk.buffer instanceof ArrayBuffer) {
  6683.             var buf = chunk.buffer;
  6684.  
  6685.             // if this is a subarray, make a copy so we only
  6686.             // include the subarray region from the underlying buffer
  6687.             if (chunk.byteLength !== buf.byteLength) {
  6688.               var copy = new Uint8Array(chunk.byteLength);
  6689.               copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));
  6690.               buf = copy.buffer;
  6691.             }
  6692.  
  6693.             ary[i] = buf;
  6694.           }
  6695.         }
  6696.       }
  6697.  
  6698.       function BlobBuilderConstructor(ary, options) {
  6699.         options = options || {};
  6700.  
  6701.         var bb = new BlobBuilder();
  6702.         mapArrayBufferViews(ary);
  6703.  
  6704.         for (var i = 0; i < ary.length; i++) {
  6705.           bb.append(ary[i]);
  6706.         }
  6707.  
  6708.         return (options.type) ? bb.getBlob(options.type) : bb.getBlob();
  6709.       };
  6710.  
  6711.       function BlobConstructor(ary, options) {
  6712.         mapArrayBufferViews(ary);
  6713.         return new Blob(ary, options || {});
  6714.       };
  6715.  
  6716.       module.exports = (function() {
  6717.         if (blobSupported) {
  6718.           return blobSupportsArrayBufferView ? global.Blob : BlobConstructor;
  6719.         } else if (blobBuilderSupported) {
  6720.           return BlobBuilderConstructor;
  6721.         } else {
  6722.           return undefined;
  6723.         }
  6724.       })();
  6725.  
  6726.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  6727.  
  6728. /***/ },
  6729. /* 36 */
  6730. /***/ function(module, exports, __webpack_require__) {
  6731.  
  6732.      
  6733.       /**
  6734.        * Expose `Emitter`.
  6735.        */
  6736.  
  6737.       if (true) {
  6738.         module.exports = Emitter;
  6739.       }
  6740.  
  6741.       /**
  6742.        * Initialize a new `Emitter`.
  6743.        *
  6744.        * @api public
  6745.        */
  6746.  
  6747.       function Emitter(obj) {
  6748.         if (obj) return mixin(obj);
  6749.       };
  6750.  
  6751.       /**
  6752.        * Mixin the emitter properties.
  6753.        *
  6754.        * @param {Object} obj
  6755.        * @return {Object}
  6756.        * @api private
  6757.        */
  6758.  
  6759.       function mixin(obj) {
  6760.         for (var key in Emitter.prototype) {
  6761.           obj[key] = Emitter.prototype[key];
  6762.         }
  6763.         return obj;
  6764.       }
  6765.  
  6766.       /**
  6767.        * Listen on the given `event` with `fn`.
  6768.        *
  6769.        * @param {String} event
  6770.        * @param {Function} fn
  6771.        * @return {Emitter}
  6772.        * @api public
  6773.        */
  6774.  
  6775.       Emitter.prototype.on =
  6776.       Emitter.prototype.addEventListener = function(event, fn){
  6777.         this._callbacks = this._callbacks || {};
  6778.         (this._callbacks['$' + event] = this._callbacks['$' + event] || [])
  6779.           .push(fn);
  6780.         return this;
  6781.       };
  6782.  
  6783.       /**
  6784.        * Adds an `event` listener that will be invoked a single
  6785.        * time then automatically removed.
  6786.        *
  6787.        * @param {String} event
  6788.        * @param {Function} fn
  6789.        * @return {Emitter}
  6790.        * @api public
  6791.        */
  6792.  
  6793.       Emitter.prototype.once = function(event, fn){
  6794.         function on() {
  6795.           this.off(event, on);
  6796.           fn.apply(this, arguments);
  6797.         }
  6798.  
  6799.         on.fn = fn;
  6800.         this.on(event, on);
  6801.         return this;
  6802.       };
  6803.  
  6804.       /**
  6805.        * Remove the given callback for `event` or all
  6806.        * registered callbacks.
  6807.        *
  6808.        * @param {String} event
  6809.        * @param {Function} fn
  6810.        * @return {Emitter}
  6811.        * @api public
  6812.        */
  6813.  
  6814.       Emitter.prototype.off =
  6815.       Emitter.prototype.removeListener =
  6816.       Emitter.prototype.removeAllListeners =
  6817.       Emitter.prototype.removeEventListener = function(event, fn){
  6818.         this._callbacks = this._callbacks || {};
  6819.  
  6820.         // all
  6821.         if (0 == arguments.length) {
  6822.           this._callbacks = {};
  6823.           return this;
  6824.         }
  6825.  
  6826.         // specific event
  6827.         var callbacks = this._callbacks['$' + event];
  6828.         if (!callbacks) return this;
  6829.  
  6830.         // remove all handlers
  6831.         if (1 == arguments.length) {
  6832.           delete this._callbacks['$' + event];
  6833.           return this;
  6834.         }
  6835.  
  6836.         // remove specific handler
  6837.         var cb;
  6838.         for (var i = 0; i < callbacks.length; i++) {
  6839.           cb = callbacks[i];
  6840.           if (cb === fn || cb.fn === fn) {
  6841.             callbacks.splice(i, 1);
  6842.             break;
  6843.           }
  6844.         }
  6845.         return this;
  6846.       };
  6847.  
  6848.       /**
  6849.        * Emit `event` with the given args.
  6850.        *
  6851.        * @param {String} event
  6852.        * @param {Mixed} ...
  6853.        * @return {Emitter}
  6854.        */
  6855.  
  6856.       Emitter.prototype.emit = function(event){
  6857.         this._callbacks = this._callbacks || {};
  6858.         var args = [].slice.call(arguments, 1)
  6859.           , callbacks = this._callbacks['$' + event];
  6860.  
  6861.         if (callbacks) {
  6862.           callbacks = callbacks.slice(0);
  6863.           for (var i = 0, len = callbacks.length; i < len; ++i) {
  6864.             callbacks[i].apply(this, args);
  6865.           }
  6866.         }
  6867.  
  6868.         return this;
  6869.       };
  6870.  
  6871.       /**
  6872.        * Return array of callbacks for `event`.
  6873.        *
  6874.        * @param {String} event
  6875.        * @return {Array}
  6876.        * @api public
  6877.        */
  6878.  
  6879.       Emitter.prototype.listeners = function(event){
  6880.         this._callbacks = this._callbacks || {};
  6881.         return this._callbacks['$' + event] || [];
  6882.       };
  6883.  
  6884.       /**
  6885.        * Check if this emitter has `event` handlers.
  6886.        *
  6887.        * @param {String} event
  6888.        * @return {Boolean}
  6889.        * @api public
  6890.        */
  6891.  
  6892.       Emitter.prototype.hasListeners = function(event){
  6893.         return !! this.listeners(event).length;
  6894.       };
  6895.  
  6896.  
  6897. /***/ },
  6898. /* 37 */
  6899. /***/ function(module, exports) {
  6900.  
  6901.       /**
  6902.        * Compiles a querystring
  6903.        * Returns string representation of the object
  6904.        *
  6905.        * @param {Object}
  6906.        * @api private
  6907.        */
  6908.  
  6909.       exports.encode = function (obj) {
  6910.         var str = '';
  6911.  
  6912.         for (var i in obj) {
  6913.           if (obj.hasOwnProperty(i)) {
  6914.             if (str.length) str += '&';
  6915.             str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);
  6916.           }
  6917.         }
  6918.  
  6919.         return str;
  6920.       };
  6921.  
  6922.       /**
  6923.        * Parses a simple querystring into an object
  6924.        *
  6925.        * @param {String} qs
  6926.        * @api private
  6927.        */
  6928.  
  6929.       exports.decode = function(qs){
  6930.         var qry = {};
  6931.         var pairs = qs.split('&');
  6932.         for (var i = 0, l = pairs.length; i < l; i++) {
  6933.           var pair = pairs[i].split('=');
  6934.           qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
  6935.         }
  6936.         return qry;
  6937.       };
  6938.  
  6939.  
  6940. /***/ },
  6941. /* 38 */
  6942. /***/ function(module, exports) {
  6943.  
  6944.      
  6945.       module.exports = function(a, b){
  6946.         var fn = function(){};
  6947.         fn.prototype = b.prototype;
  6948.         a.prototype = new fn;
  6949.         a.prototype.constructor = a;
  6950.       };
  6951.  
  6952. /***/ },
  6953. /* 39 */
  6954. /***/ function(module, exports) {
  6955.  
  6956.       'use strict';
  6957.  
  6958.       var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')
  6959.         , length = 64
  6960.         , map = {}
  6961.         , seed = 0
  6962.         , i = 0
  6963.         , prev;
  6964.  
  6965.       /**
  6966.        * Return a string representing the specified number.
  6967.        *
  6968.        * @param {Number} num The number to convert.
  6969.        * @returns {String} The string representation of the number.
  6970.        * @api public
  6971.        */
  6972.       function encode(num) {
  6973.         var encoded = '';
  6974.  
  6975.         do {
  6976.           encoded = alphabet[num % length] + encoded;
  6977.           num = Math.floor(num / length);
  6978.         } while (num > 0);
  6979.  
  6980.         return encoded;
  6981.       }
  6982.  
  6983.       /**
  6984.        * Return the integer value specified by the given string.
  6985.        *
  6986.        * @param {String} str The string to convert.
  6987.        * @returns {Number} The integer value represented by the string.
  6988.        * @api public
  6989.        */
  6990.       function decode(str) {
  6991.         var decoded = 0;
  6992.  
  6993.         for (i = 0; i < str.length; i++) {
  6994.           decoded = decoded * length + map[str.charAt(i)];
  6995.         }
  6996.  
  6997.         return decoded;
  6998.       }
  6999.  
  7000.       /**
  7001.        * Yeast: A tiny growing id generator.
  7002.        *
  7003.        * @returns {String} A unique id.
  7004.        * @api public
  7005.        */
  7006.       function yeast() {
  7007.         var now = encode(+new Date());
  7008.  
  7009.         if (now !== prev) return seed = 0, prev = now;
  7010.         return now +'.'+ encode(seed++);
  7011.       }
  7012.  
  7013.       //
  7014.       // Map each character to its index.
  7015.       //
  7016.       for (; i < length; i++) map[alphabet[i]] = i;
  7017.  
  7018.       //
  7019.       // Expose the `yeast`, `encode` and `decode` functions.
  7020.       //
  7021.       yeast.encode = encode;
  7022.       yeast.decode = decode;
  7023.       module.exports = yeast;
  7024.  
  7025.  
  7026. /***/ },
  7027. /* 40 */
  7028. /***/ function(module, exports, __webpack_require__) {
  7029.  
  7030.       /* WEBPACK VAR INJECTION */(function(global) {
  7031.       /**
  7032.        * Module requirements.
  7033.        */
  7034.  
  7035.       var Polling = __webpack_require__(25);
  7036.       var inherit = __webpack_require__(38);
  7037.  
  7038.       /**
  7039.        * Module exports.
  7040.        */
  7041.  
  7042.       module.exports = JSONPPolling;
  7043.  
  7044.       /**
  7045.        * Cached regular expressions.
  7046.        */
  7047.  
  7048.       var rNewline = /\n/g;
  7049.       var rEscapedNewline = /\\n/g;
  7050.  
  7051.       /**
  7052.        * Global JSONP callbacks.
  7053.        */
  7054.  
  7055.       var callbacks;
  7056.  
  7057.       /**
  7058.        * Noop.
  7059.        */
  7060.  
  7061.       function empty () { }
  7062.  
  7063.       /**
  7064.        * JSONP Polling constructor.
  7065.        *
  7066.        * @param {Object} opts.
  7067.        * @api public
  7068.        */
  7069.  
  7070.       function JSONPPolling (opts) {
  7071.         Polling.call(this, opts);
  7072.  
  7073.         this.query = this.query || {};
  7074.  
  7075.         // define global callbacks array if not present
  7076.         // we do this here (lazily) to avoid unneeded global pollution
  7077.         if (!callbacks) {
  7078.           // we need to consider multiple engines in the same page
  7079.           if (!global.___eio) global.___eio = [];
  7080.           callbacks = global.___eio;
  7081.         }
  7082.  
  7083.         // callback identifier
  7084.         this.index = callbacks.length;
  7085.  
  7086.         // add callback to jsonp global
  7087.         var self = this;
  7088.         callbacks.push(function (msg) {
  7089.           self.onData(msg);
  7090.         });
  7091.  
  7092.         // append to query string
  7093.         this.query.j = this.index;
  7094.  
  7095.         // prevent spurious errors from being emitted when the window is unloaded
  7096.         if (global.document && global.addEventListener) {
  7097.           global.addEventListener('beforeunload', function () {
  7098.             if (self.script) self.script.onerror = empty;
  7099.           }, false);
  7100.         }
  7101.       }
  7102.  
  7103.       /**
  7104.        * Inherits from Polling.
  7105.        */
  7106.  
  7107.       inherit(JSONPPolling, Polling);
  7108.  
  7109.       /*
  7110.        * JSONP only supports binary as base64 encoded strings
  7111.        */
  7112.  
  7113.       JSONPPolling.prototype.supportsBinary = false;
  7114.  
  7115.       /**
  7116.        * Closes the socket.
  7117.        *
  7118.        * @api private
  7119.        */
  7120.  
  7121.       JSONPPolling.prototype.doClose = function () {
  7122.         if (this.script) {
  7123.           this.script.parentNode.removeChild(this.script);
  7124.           this.script = null;
  7125.         }
  7126.  
  7127.         if (this.form) {
  7128.           this.form.parentNode.removeChild(this.form);
  7129.           this.form = null;
  7130.           this.iframe = null;
  7131.         }
  7132.  
  7133.         Polling.prototype.doClose.call(this);
  7134.       };
  7135.  
  7136.       /**
  7137.        * Starts a poll cycle.
  7138.        *
  7139.        * @api private
  7140.        */
  7141.  
  7142.       JSONPPolling.prototype.doPoll = function () {
  7143.         var self = this;
  7144.         var script = document.createElement('script');
  7145.  
  7146.         if (this.script) {
  7147.           this.script.parentNode.removeChild(this.script);
  7148.           this.script = null;
  7149.         }
  7150.  
  7151.         script.async = true;
  7152.         script.src = this.uri();
  7153.         script.onerror = function (e) {
  7154.           self.onError('jsonp poll error', e);
  7155.         };
  7156.  
  7157.         var insertAt = document.getElementsByTagName('script')[0];
  7158.         if (insertAt) {
  7159.           insertAt.parentNode.insertBefore(script, insertAt);
  7160.         } else {
  7161.           (document.head || document.body).appendChild(script);
  7162.         }
  7163.         this.script = script;
  7164.  
  7165.         var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);
  7166.  
  7167.         if (isUAgecko) {
  7168.           setTimeout(function () {
  7169.             var iframe = document.createElement('iframe');
  7170.             document.body.appendChild(iframe);
  7171.             document.body.removeChild(iframe);
  7172.           }, 100);
  7173.         }
  7174.       };
  7175.  
  7176.       /**
  7177.        * Writes with a hidden iframe.
  7178.        *
  7179.        * @param {String} data to send
  7180.        * @param {Function} called upon flush.
  7181.        * @api private
  7182.        */
  7183.  
  7184.       JSONPPolling.prototype.doWrite = function (data, fn) {
  7185.         var self = this;
  7186.  
  7187.         if (!this.form) {
  7188.           var form = document.createElement('form');
  7189.           var area = document.createElement('textarea');
  7190.           var id = this.iframeId = 'eio_iframe_' + this.index;
  7191.           var iframe;
  7192.  
  7193.           form.className = 'socketio';
  7194.           form.style.position = 'absolute';
  7195.           form.style.top = '-1000px';
  7196.           form.style.left = '-1000px';
  7197.           form.target = id;
  7198.           form.method = 'POST';
  7199.           form.setAttribute('accept-charset', 'utf-8');
  7200.           area.name = 'd';
  7201.           form.appendChild(area);
  7202.           document.body.appendChild(form);
  7203.  
  7204.           this.form = form;
  7205.           this.area = area;
  7206.         }
  7207.  
  7208.         this.form.action = this.uri();
  7209.  
  7210.         function complete () {
  7211.           initIframe();
  7212.           fn();
  7213.         }
  7214.  
  7215.         function initIframe () {
  7216.           if (self.iframe) {
  7217.             try {
  7218.               self.form.removeChild(self.iframe);
  7219.             } catch (e) {
  7220.               self.onError('jsonp polling iframe removal error', e);
  7221.             }
  7222.           }
  7223.  
  7224.           try {
  7225.             // ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
  7226.             var html = '<iframe src="javascript:0" name="' + self.iframeId + '">';
  7227.             iframe = document.createElement(html);
  7228.           } catch (e) {
  7229.             iframe = document.createElement('iframe');
  7230.             iframe.name = self.iframeId;
  7231.             iframe.src = 'javascript:0';
  7232.           }
  7233.  
  7234.           iframe.id = self.iframeId;
  7235.  
  7236.           self.form.appendChild(iframe);
  7237.           self.iframe = iframe;
  7238.         }
  7239.  
  7240.         initIframe();
  7241.  
  7242.         // escape \n to prevent it from being converted into \r\n by some UAs
  7243.         // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side
  7244.         data = data.replace(rEscapedNewline, '\\\n');
  7245.         this.area.value = data.replace(rNewline, '\\n');
  7246.  
  7247.         try {
  7248.           this.form.submit();
  7249.         } catch (e) {}
  7250.  
  7251.         if (this.iframe.attachEvent) {
  7252.           this.iframe.onreadystatechange = function () {
  7253.             if (self.iframe.readyState === 'complete') {
  7254.               complete();
  7255.             }
  7256.           };
  7257.         } else {
  7258.           this.iframe.onload = complete;
  7259.         }
  7260.       };
  7261.  
  7262.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  7263.  
  7264. /***/ },
  7265. /* 41 */
  7266. /***/ function(module, exports, __webpack_require__) {
  7267.  
  7268.       /* WEBPACK VAR INJECTION */(function(global) {/**
  7269.        * Module dependencies.
  7270.        */
  7271.  
  7272.       var Transport = __webpack_require__(26);
  7273.       var parser = __webpack_require__(27);
  7274.       var parseqs = __webpack_require__(37);
  7275.       var inherit = __webpack_require__(38);
  7276.       var yeast = __webpack_require__(39);
  7277.       var debug = __webpack_require__(3)('engine.io-client:websocket');
  7278.       var BrowserWebSocket = global.WebSocket || global.MozWebSocket;
  7279.       var NodeWebSocket;
  7280.       if (typeof window === 'undefined') {
  7281.         try {
  7282.           NodeWebSocket = __webpack_require__(42);
  7283.         } catch (e) { }
  7284.       }
  7285.  
  7286.       /**
  7287.        * Get either the `WebSocket` or `MozWebSocket` globals
  7288.        * in the browser or try to resolve WebSocket-compatible
  7289.        * interface exposed by `ws` for Node-like environment.
  7290.        */
  7291.  
  7292.       var WebSocket = BrowserWebSocket;
  7293.       if (!WebSocket && typeof window === 'undefined') {
  7294.         WebSocket = NodeWebSocket;
  7295.       }
  7296.  
  7297.       /**
  7298.        * Module exports.
  7299.        */
  7300.  
  7301.       module.exports = WS;
  7302.  
  7303.       /**
  7304.        * WebSocket transport constructor.
  7305.        *
  7306.        * @api {Object} connection options
  7307.        * @api public
  7308.        */
  7309.  
  7310.       function WS (opts) {
  7311.         var forceBase64 = (opts && opts.forceBase64);
  7312.         if (forceBase64) {
  7313.           this.supportsBinary = false;
  7314.         }
  7315.         this.perMessageDeflate = opts.perMessageDeflate;
  7316.         this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;
  7317.         if (!this.usingBrowserWebSocket) {
  7318.           WebSocket = NodeWebSocket;
  7319.         }
  7320.         Transport.call(this, opts);
  7321.       }
  7322.  
  7323.       /**
  7324.        * Inherits from Transport.
  7325.        */
  7326.  
  7327.       inherit(WS, Transport);
  7328.  
  7329.       /**
  7330.        * Transport name.
  7331.        *
  7332.        * @api public
  7333.        */
  7334.  
  7335.       WS.prototype.name = 'websocket';
  7336.  
  7337.       /*
  7338.        * WebSockets support binary
  7339.        */
  7340.  
  7341.       WS.prototype.supportsBinary = true;
  7342.  
  7343.       /**
  7344.        * Opens socket.
  7345.        *
  7346.        * @api private
  7347.        */
  7348.  
  7349.       WS.prototype.doOpen = function () {
  7350.         if (!this.check()) {
  7351.           // let probe timeout
  7352.           return;
  7353.         }
  7354.  
  7355.         var uri = this.uri();
  7356.         var protocols = void (0);
  7357.         var opts = {
  7358.           agent: this.agent,
  7359.           perMessageDeflate: this.perMessageDeflate
  7360.         };
  7361.  
  7362.         // SSL options for Node.js client
  7363.         opts.pfx = this.pfx;
  7364.         opts.key = this.key;
  7365.         opts.passphrase = this.passphrase;
  7366.         opts.cert = this.cert;
  7367.         opts.ca = this.ca;
  7368.         opts.ciphers = this.ciphers;
  7369.         opts.rejectUnauthorized = this.rejectUnauthorized;
  7370.         if (this.extraHeaders) {
  7371.           opts.headers = this.extraHeaders;
  7372.         }
  7373.         if (this.localAddress) {
  7374.           opts.localAddress = this.localAddress;
  7375.         }
  7376.  
  7377.         try {
  7378.           this.ws = this.usingBrowserWebSocket ? new WebSocket(uri) : new WebSocket(uri, protocols, opts);
  7379.         } catch (err) {
  7380.           return this.emit('error', err);
  7381.         }
  7382.  
  7383.         if (this.ws.binaryType === undefined) {
  7384.           this.supportsBinary = false;
  7385.         }
  7386.  
  7387.         if (this.ws.supports && this.ws.supports.binary) {
  7388.           this.supportsBinary = true;
  7389.           this.ws.binaryType = 'nodebuffer';
  7390.         } else {
  7391.           this.ws.binaryType = 'arraybuffer';
  7392.         }
  7393.  
  7394.         this.addEventListeners();
  7395.       };
  7396.  
  7397.       /**
  7398.        * Adds event listeners to the socket
  7399.        *
  7400.        * @api private
  7401.        */
  7402.  
  7403.       WS.prototype.addEventListeners = function () {
  7404.         var self = this;
  7405.  
  7406.         this.ws.onopen = function () {
  7407.           self.onOpen();
  7408.         };
  7409.         this.ws.onclose = function () {
  7410.           self.onClose();
  7411.         };
  7412.         this.ws.onmessage = function (ev) {
  7413.           self.onData(ev.data);
  7414.         };
  7415.         this.ws.onerror = function (e) {
  7416.           self.onError('websocket error', e);
  7417.         };
  7418.       };
  7419.  
  7420.       /**
  7421.        * Writes data to socket.
  7422.        *
  7423.        * @param {Array} array of packets.
  7424.        * @api private
  7425.        */
  7426.  
  7427.       WS.prototype.write = function (packets) {
  7428.         var self = this;
  7429.         this.writable = false;
  7430.  
  7431.         // encodePacket efficient as it uses WS framing
  7432.         // no need for encodePayload
  7433.         var total = packets.length;
  7434.         for (var i = 0, l = total; i < l; i++) {
  7435.           (function (packet) {
  7436.             parser.encodePacket(packet, self.supportsBinary, function (data) {
  7437.               if (!self.usingBrowserWebSocket) {
  7438.                 // always create a new object (GH-437)
  7439.                 var opts = {};
  7440.                 if (packet.options) {
  7441.                   opts.compress = packet.options.compress;
  7442.                 }
  7443.  
  7444.                 if (self.perMessageDeflate) {
  7445.                   var len = 'string' === typeof data ? global.Buffer.byteLength(data) : data.length;
  7446.                   if (len < self.perMessageDeflate.threshold) {
  7447.                     opts.compress = false;
  7448.                   }
  7449.                 }
  7450.               }
  7451.  
  7452.               // Sometimes the websocket has already been closed but the browser didn't
  7453.               // have a chance of informing us about it yet, in that case send will
  7454.               // throw an error
  7455.               try {
  7456.                 if (self.usingBrowserWebSocket) {
  7457.                   // TypeError is thrown when passing the second argument on Safari
  7458.                   self.ws.send(data);
  7459.                 } else {
  7460.                   self.ws.send(data, opts);
  7461.                 }
  7462.               } catch (e) {
  7463.                 debug('websocket closed before onclose event');
  7464.               }
  7465.  
  7466.               --total || done();
  7467.             });
  7468.           })(packets[i]);
  7469.         }
  7470.  
  7471.         function done () {
  7472.           self.emit('flush');
  7473.  
  7474.           // fake drain
  7475.           // defer to next tick to allow Socket to clear writeBuffer
  7476.           setTimeout(function () {
  7477.             self.writable = true;
  7478.             self.emit('drain');
  7479.           }, 0);
  7480.         }
  7481.       };
  7482.  
  7483.       /**
  7484.        * Called upon close
  7485.        *
  7486.        * @api private
  7487.        */
  7488.  
  7489.       WS.prototype.onClose = function () {
  7490.         Transport.prototype.onClose.call(this);
  7491.       };
  7492.  
  7493.       /**
  7494.        * Closes socket.
  7495.        *
  7496.        * @api private
  7497.        */
  7498.  
  7499.       WS.prototype.doClose = function () {
  7500.         if (typeof this.ws !== 'undefined') {
  7501.           this.ws.close();
  7502.         }
  7503.       };
  7504.  
  7505.       /**
  7506.        * Generates uri for connection.
  7507.        *
  7508.        * @api private
  7509.        */
  7510.  
  7511.       WS.prototype.uri = function () {
  7512.         var query = this.query || {};
  7513.         var schema = this.secure ? 'wss' : 'ws';
  7514.         var port = '';
  7515.  
  7516.         // avoid port if default for schema
  7517.         if (this.port && (('wss' === schema && Number(this.port) !== 443) ||
  7518.           ('ws' === schema && Number(this.port) !== 80))) {
  7519.           port = ':' + this.port;
  7520.         }
  7521.  
  7522.         // append timestamp to URI
  7523.         if (this.timestampRequests) {
  7524.           query[this.timestampParam] = yeast();
  7525.         }
  7526.  
  7527.         // communicate binary support capabilities
  7528.         if (!this.supportsBinary) {
  7529.           query.b64 = 1;
  7530.         }
  7531.  
  7532.         query = parseqs.encode(query);
  7533.  
  7534.         // prepend ? to query
  7535.         if (query.length) {
  7536.           query = '?' + query;
  7537.         }
  7538.  
  7539.         var ipv6 = this.hostname.indexOf(':') !== -1;
  7540.         return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
  7541.       };
  7542.  
  7543.       /**
  7544.        * Feature detection for WebSocket.
  7545.        *
  7546.        * @return {Boolean} whether this transport is available.
  7547.        * @api public
  7548.        */
  7549.  
  7550.       WS.prototype.check = function () {
  7551.         return !!WebSocket && !('__initialize' in WebSocket && this.name === WS.prototype.name);
  7552.       };
  7553.  
  7554.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  7555.  
  7556. /***/ },
  7557. /* 42 */
  7558. /***/ function(module, exports) {
  7559.  
  7560.       /* (ignored) */
  7561.  
  7562. /***/ },
  7563. /* 43 */
  7564. /***/ function(module, exports) {
  7565.  
  7566.      
  7567.       var indexOf = [].indexOf;
  7568.  
  7569.       module.exports = function(arr, obj){
  7570.         if (indexOf) return arr.indexOf(obj);
  7571.         for (var i = 0; i < arr.length; ++i) {
  7572.           if (arr[i] === obj) return i;
  7573.         }
  7574.         return -1;
  7575.       };
  7576.  
  7577. /***/ },
  7578. /* 44 */
  7579. /***/ function(module, exports) {
  7580.  
  7581.       /* WEBPACK VAR INJECTION */(function(global) {/**
  7582.        * JSON parse.
  7583.        *
  7584.        * @see Based on jQuery#parseJSON (MIT) and JSON2
  7585.        * @api private
  7586.        */
  7587.  
  7588.       var rvalidchars = /^[\],:{}\s]*$/;
  7589.       var rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
  7590.       var rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
  7591.       var rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g;
  7592.       var rtrimLeft = /^\s+/;
  7593.       var rtrimRight = /\s+$/;
  7594.  
  7595.       module.exports = function parsejson(data) {
  7596.         if ('string' != typeof data || !data) {
  7597.           return null;
  7598.         }
  7599.  
  7600.         data = data.replace(rtrimLeft, '').replace(rtrimRight, '');
  7601.  
  7602.         // Attempt to parse using the native JSON parser first
  7603.         if (global.JSON && JSON.parse) {
  7604.           return JSON.parse(data);
  7605.         }
  7606.  
  7607.         if (rvalidchars.test(data.replace(rvalidescape, '@')
  7608.             .replace(rvalidtokens, ']')
  7609.             .replace(rvalidbraces, ''))) {
  7610.           return (new Function('return ' + data))();
  7611.         }
  7612.       };
  7613.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  7614.  
  7615. /***/ },
  7616. /* 45 */
  7617. /***/ function(module, exports, __webpack_require__) {
  7618.  
  7619.       'use strict';
  7620.  
  7621.       /**
  7622.        * Module dependencies.
  7623.        */
  7624.  
  7625.       var parser = __webpack_require__(7);
  7626.       var Emitter = __webpack_require__(36);
  7627.       var toArray = __webpack_require__(46);
  7628.       var on = __webpack_require__(47);
  7629.       var bind = __webpack_require__(48);
  7630.       var debug = __webpack_require__(3)('socket.io-client:socket');
  7631.       var hasBin = __webpack_require__(49);
  7632.  
  7633.       /**
  7634.        * Module exports.
  7635.        */
  7636.  
  7637.       module.exports = exports = Socket;
  7638.  
  7639.       /**
  7640.        * Internal events (blacklisted).
  7641.        * These events can't be emitted by the user.
  7642.        *
  7643.        * @api private
  7644.        */
  7645.  
  7646.       var events = {
  7647.         connect: 1,
  7648.         connect_error: 1,
  7649.         connect_timeout: 1,
  7650.         connecting: 1,
  7651.         disconnect: 1,
  7652.         error: 1,
  7653.         reconnect: 1,
  7654.         reconnect_attempt: 1,
  7655.         reconnect_failed: 1,
  7656.         reconnect_error: 1,
  7657.         reconnecting: 1,
  7658.         ping: 1,
  7659.         pong: 1
  7660.       };
  7661.  
  7662.       /**
  7663.        * Shortcut to `Emitter#emit`.
  7664.        */
  7665.  
  7666.       var emit = Emitter.prototype.emit;
  7667.  
  7668.       /**
  7669.        * `Socket` constructor.
  7670.        *
  7671.        * @api public
  7672.        */
  7673.  
  7674.       function Socket(io, nsp, opts) {
  7675.         this.io = io;
  7676.         this.nsp = nsp;
  7677.         this.json = this; // compat
  7678.         this.ids = 0;
  7679.         this.acks = {};
  7680.         this.receiveBuffer = [];
  7681.         this.sendBuffer = [];
  7682.         this.connected = false;
  7683.         this.disconnected = true;
  7684.         if (opts && opts.query) {
  7685.           this.query = opts.query;
  7686.         }
  7687.         if (this.io.autoConnect) this.open();
  7688.       }
  7689.  
  7690.       /**
  7691.        * Mix in `Emitter`.
  7692.        */
  7693.  
  7694.       Emitter(Socket.prototype);
  7695.  
  7696.       /**
  7697.        * Subscribe to open, close and packet events
  7698.        *
  7699.        * @api private
  7700.        */
  7701.  
  7702.       Socket.prototype.subEvents = function () {
  7703.         if (this.subs) return;
  7704.  
  7705.         var io = this.io;
  7706.         this.subs = [on(io, 'open', bind(this, 'onopen')), on(io, 'packet', bind(this, 'onpacket')), on(io, 'close', bind(this, 'onclose'))];
  7707.       };
  7708.  
  7709.       /**
  7710.        * "Opens" the socket.
  7711.        *
  7712.        * @api public
  7713.        */
  7714.  
  7715.       Socket.prototype.open = Socket.prototype.connect = function () {
  7716.         if (this.connected) return this;
  7717.  
  7718.         this.subEvents();
  7719.         this.io.open(); // ensure open
  7720.         if ('open' === this.io.readyState) this.onopen();
  7721.         this.emit('connecting');
  7722.         return this;
  7723.       };
  7724.  
  7725.       /**
  7726.        * Sends a `message` event.
  7727.        *
  7728.        * @return {Socket} self
  7729.        * @api public
  7730.        */
  7731.  
  7732.       Socket.prototype.send = function () {
  7733.         var args = toArray(arguments);
  7734.         args.unshift('message');
  7735.         this.emit.apply(this, args);
  7736.         return this;
  7737.       };
  7738.  
  7739.       /**
  7740.        * Override `emit`.
  7741.        * If the event is in `events`, it's emitted normally.
  7742.        *
  7743.        * @param {String} event name
  7744.        * @return {Socket} self
  7745.        * @api public
  7746.        */
  7747.  
  7748.       Socket.prototype.emit = function (ev) {
  7749.         if (events.hasOwnProperty(ev)) {
  7750.           emit.apply(this, arguments);
  7751.           return this;
  7752.         }
  7753.  
  7754.         var args = toArray(arguments);
  7755.         var parserType = parser.EVENT; // default
  7756.         if (hasBin(args)) {
  7757.           parserType = parser.BINARY_EVENT;
  7758.         } // binary
  7759.         var packet = { type: parserType, data: args };
  7760.  
  7761.         packet.options = {};
  7762.         packet.options.compress = !this.flags || false !== this.flags.compress;
  7763.  
  7764.         // event ack callback
  7765.         if ('function' === typeof args[args.length - 1]) {
  7766.           debug('emitting packet with ack id %d', this.ids);
  7767.           this.acks[this.ids] = args.pop();
  7768.           packet.id = this.ids++;
  7769.         }
  7770.  
  7771.         if (this.connected) {
  7772.           this.packet(packet);
  7773.         } else {
  7774.           this.sendBuffer.push(packet);
  7775.         }
  7776.  
  7777.         delete this.flags;
  7778.  
  7779.         return this;
  7780.       };
  7781.  
  7782.       /**
  7783.        * Sends a packet.
  7784.        *
  7785.        * @param {Object} packet
  7786.        * @api private
  7787.        */
  7788.  
  7789.       Socket.prototype.packet = function (packet) {
  7790.         packet.nsp = this.nsp;
  7791.         this.io.packet(packet);
  7792.       };
  7793.  
  7794.       /**
  7795.        * Called upon engine `open`.
  7796.        *
  7797.        * @api private
  7798.        */
  7799.  
  7800.       Socket.prototype.onopen = function () {
  7801.         debug('transport is open - connecting');
  7802.  
  7803.         // write connect packet if necessary
  7804.         if ('/' !== this.nsp) {
  7805.           if (this.query) {
  7806.             this.packet({ type: parser.CONNECT, query: this.query });
  7807.           } else {
  7808.             this.packet({ type: parser.CONNECT });
  7809.           }
  7810.         }
  7811.       };
  7812.  
  7813.       /**
  7814.        * Called upon engine `close`.
  7815.        *
  7816.        * @param {String} reason
  7817.        * @api private
  7818.        */
  7819.  
  7820.       Socket.prototype.onclose = function (reason) {
  7821.         debug('close (%s)', reason);
  7822.         this.connected = false;
  7823.         this.disconnected = true;
  7824.         delete this.id;
  7825.         this.emit('disconnect', reason);
  7826.       };
  7827.  
  7828.       /**
  7829.        * Called with socket packet.
  7830.        *
  7831.        * @param {Object} packet
  7832.        * @api private
  7833.        */
  7834.  
  7835.       Socket.prototype.onpacket = function (packet) {
  7836.         if (packet.nsp !== this.nsp) return;
  7837.  
  7838.         switch (packet.type) {
  7839.           case parser.CONNECT:
  7840.             this.onconnect();
  7841.             break;
  7842.  
  7843.           case parser.EVENT:
  7844.             this.onevent(packet);
  7845.             break;
  7846.  
  7847.           case parser.BINARY_EVENT:
  7848.             this.onevent(packet);
  7849.             break;
  7850.  
  7851.           case parser.ACK:
  7852.             this.onack(packet);
  7853.             break;
  7854.  
  7855.           case parser.BINARY_ACK:
  7856.             this.onack(packet);
  7857.             break;
  7858.  
  7859.           case parser.DISCONNECT:
  7860.             this.ondisconnect();
  7861.             break;
  7862.  
  7863.           case parser.ERROR:
  7864.             this.emit('error', packet.data);
  7865.             break;
  7866.         }
  7867.       };
  7868.  
  7869.       /**
  7870.        * Called upon a server event.
  7871.        *
  7872.        * @param {Object} packet
  7873.        * @api private
  7874.        */
  7875.  
  7876.       Socket.prototype.onevent = function (packet) {
  7877.         var args = packet.data || [];
  7878.         debug('emitting event %j', args);
  7879.  
  7880.         if (null != packet.id) {
  7881.           debug('attaching ack callback to event');
  7882.           args.push(this.ack(packet.id));
  7883.         }
  7884.  
  7885.         if (this.connected) {
  7886.           emit.apply(this, args);
  7887.         } else {
  7888.           this.receiveBuffer.push(args);
  7889.         }
  7890.       };
  7891.  
  7892.       /**
  7893.        * Produces an ack callback to emit with an event.
  7894.        *
  7895.        * @api private
  7896.        */
  7897.  
  7898.       Socket.prototype.ack = function (id) {
  7899.         var self = this;
  7900.         var sent = false;
  7901.         return function () {
  7902.           // prevent double callbacks
  7903.           if (sent) return;
  7904.           sent = true;
  7905.           var args = toArray(arguments);
  7906.           debug('sending ack %j', args);
  7907.  
  7908.           var type = hasBin(args) ? parser.BINARY_ACK : parser.ACK;
  7909.           self.packet({
  7910.             type: type,
  7911.             id: id,
  7912.             data: args
  7913.           });
  7914.         };
  7915.       };
  7916.  
  7917.       /**
  7918.        * Called upon a server acknowlegement.
  7919.        *
  7920.        * @param {Object} packet
  7921.        * @api private
  7922.        */
  7923.  
  7924.       Socket.prototype.onack = function (packet) {
  7925.         var ack = this.acks[packet.id];
  7926.         if ('function' === typeof ack) {
  7927.           debug('calling ack %s with %j', packet.id, packet.data);
  7928.           ack.apply(this, packet.data);
  7929.           delete this.acks[packet.id];
  7930.         } else {
  7931.           debug('bad ack %s', packet.id);
  7932.         }
  7933.       };
  7934.  
  7935.       /**
  7936.        * Called upon server connect.
  7937.        *
  7938.        * @api private
  7939.        */
  7940.  
  7941.       Socket.prototype.onconnect = function () {
  7942.         this.connected = true;
  7943.         this.disconnected = false;
  7944.         this.emit('connect');
  7945.         this.emitBuffered();
  7946.       };
  7947.  
  7948.       /**
  7949.        * Emit buffered events (received and emitted).
  7950.        *
  7951.        * @api private
  7952.        */
  7953.  
  7954.       Socket.prototype.emitBuffered = function () {
  7955.         var i;
  7956.         for (i = 0; i < this.receiveBuffer.length; i++) {
  7957.           emit.apply(this, this.receiveBuffer[i]);
  7958.         }
  7959.         this.receiveBuffer = [];
  7960.  
  7961.         for (i = 0; i < this.sendBuffer.length; i++) {
  7962.           this.packet(this.sendBuffer[i]);
  7963.         }
  7964.         this.sendBuffer = [];
  7965.       };
  7966.  
  7967.       /**
  7968.        * Called upon server disconnect.
  7969.        *
  7970.        * @api private
  7971.        */
  7972.  
  7973.       Socket.prototype.ondisconnect = function () {
  7974.         debug('server disconnect (%s)', this.nsp);
  7975.         this.destroy();
  7976.         this.onclose('io server disconnect');
  7977.       };
  7978.  
  7979.       /**
  7980.        * Called upon forced client/server side disconnections,
  7981.        * this method ensures the manager stops tracking us and
  7982.        * that reconnections don't get triggered for this.
  7983.        *
  7984.        * @api private.
  7985.        */
  7986.  
  7987.       Socket.prototype.destroy = function () {
  7988.         if (this.subs) {
  7989.           // clean subscriptions to avoid reconnections
  7990.           for (var i = 0; i < this.subs.length; i++) {
  7991.             this.subs[i].destroy();
  7992.           }
  7993.           this.subs = null;
  7994.         }
  7995.  
  7996.         this.io.destroy(this);
  7997.       };
  7998.  
  7999.       /**
  8000.        * Disconnects the socket manually.
  8001.        *
  8002.        * @return {Socket} self
  8003.        * @api public
  8004.        */
  8005.  
  8006.       Socket.prototype.close = Socket.prototype.disconnect = function () {
  8007.         if (this.connected) {
  8008.           debug('performing disconnect (%s)', this.nsp);
  8009.           this.packet({ type: parser.DISCONNECT });
  8010.         }
  8011.  
  8012.         // remove socket from pool
  8013.         this.destroy();
  8014.  
  8015.         if (this.connected) {
  8016.           // fire events
  8017.           this.onclose('io client disconnect');
  8018.         }
  8019.         return this;
  8020.       };
  8021.  
  8022.       /**
  8023.        * Sets the compress flag.
  8024.        *
  8025.        * @param {Boolean} if `true`, compresses the sending data
  8026.        * @return {Socket} self
  8027.        * @api public
  8028.        */
  8029.  
  8030.       Socket.prototype.compress = function (compress) {
  8031.         this.flags = this.flags || {};
  8032.         this.flags.compress = compress;
  8033.         return this;
  8034.       };
  8035.  
  8036. /***/ },
  8037. /* 46 */
  8038. /***/ function(module, exports) {
  8039.  
  8040.       module.exports = toArray
  8041.  
  8042.       function toArray(list, index) {
  8043.           var array = []
  8044.  
  8045.           index = index || 0
  8046.  
  8047.           for (var i = index || 0; i < list.length; i++) {
  8048.               array[i - index] = list[i]
  8049.           }
  8050.  
  8051.           return array
  8052.       }
  8053.  
  8054.  
  8055. /***/ },
  8056. /* 47 */
  8057. /***/ function(module, exports) {
  8058.  
  8059.       "use strict";
  8060.  
  8061.       /**
  8062.        * Module exports.
  8063.        */
  8064.  
  8065.       module.exports = on;
  8066.  
  8067.       /**
  8068.        * Helper for subscriptions.
  8069.        *
  8070.        * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`
  8071.        * @param {String} event name
  8072.        * @param {Function} callback
  8073.        * @api public
  8074.        */
  8075.  
  8076.       function on(obj, ev, fn) {
  8077.         obj.on(ev, fn);
  8078.         return {
  8079.           destroy: function destroy() {
  8080.             obj.removeListener(ev, fn);
  8081.           }
  8082.         };
  8083.             }
  8084.  
  8085. /***/ },
  8086. /* 48 */
  8087. /***/ function(module, exports) {
  8088.  
  8089.       /**
  8090.        * Slice reference.
  8091.        */
  8092.  
  8093.       var slice = [].slice;
  8094.  
  8095.       /**
  8096.        * Bind `obj` to `fn`.
  8097.        *
  8098.        * @param {Object} obj
  8099.        * @param {Function|String} fn or string
  8100.        * @return {Function}
  8101.        * @api public
  8102.        */
  8103.  
  8104.       module.exports = function(obj, fn){
  8105.         if ('string' == typeof fn) fn = obj[fn];
  8106.         if ('function' != typeof fn) throw new Error('bind() requires a function');
  8107.         var args = slice.call(arguments, 2);
  8108.         return function(){
  8109.           return fn.apply(obj, args.concat(slice.call(arguments)));
  8110.         }
  8111.       };
  8112.  
  8113.  
  8114. /***/ },
  8115. /* 49 */
  8116. /***/ function(module, exports, __webpack_require__) {
  8117.  
  8118.       /* WEBPACK VAR INJECTION */(function(global) {
  8119.       /*
  8120.        * Module requirements.
  8121.        */
  8122.  
  8123.       var isArray = __webpack_require__(50);
  8124.  
  8125.       /**
  8126.        * Module exports.
  8127.        */
  8128.  
  8129.       module.exports = hasBinary;
  8130.  
  8131.       /**
  8132.        * Checks for binary data.
  8133.        *
  8134.        * Right now only Buffer and ArrayBuffer are supported..
  8135.        *
  8136.        * @param {Object} anything
  8137.        * @api public
  8138.        */
  8139.  
  8140.       function hasBinary(data) {
  8141.  
  8142.         function _hasBinary(obj) {
  8143.           if (!obj) return false;
  8144.  
  8145.           if ( (global.Buffer && global.Buffer.isBuffer && global.Buffer.isBuffer(obj)) ||
  8146.                (global.ArrayBuffer && obj instanceof ArrayBuffer) ||
  8147.                (global.Blob && obj instanceof Blob) ||
  8148.                (global.File && obj instanceof File)
  8149.               ) {
  8150.             return true;
  8151.           }
  8152.  
  8153.           if (isArray(obj)) {
  8154.             for (var i = 0; i < obj.length; i++) {
  8155.                 if (_hasBinary(obj[i])) {
  8156.                     return true;
  8157.                 }
  8158.             }
  8159.           } else if (obj && 'object' == typeof obj) {
  8160.             // see: https://github.com/Automattic/has-binary/pull/4
  8161.             if (obj.toJSON && 'function' == typeof obj.toJSON) {
  8162.               obj = obj.toJSON();
  8163.             }
  8164.  
  8165.             for (var key in obj) {
  8166.               if (Object.prototype.hasOwnProperty.call(obj, key) && _hasBinary(obj[key])) {
  8167.                 return true;
  8168.               }
  8169.             }
  8170.           }
  8171.  
  8172.           return false;
  8173.         }
  8174.  
  8175.         return _hasBinary(data);
  8176.       }
  8177.  
  8178.       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  8179.  
  8180. /***/ },
  8181. /* 50 */
  8182. /***/ function(module, exports) {
  8183.  
  8184.       module.exports = Array.isArray || function (arr) {
  8185.         return Object.prototype.toString.call(arr) == '[object Array]';
  8186.       };
  8187.  
  8188.  
  8189. /***/ },
  8190. /* 51 */
  8191. /***/ function(module, exports) {
  8192.  
  8193.      
  8194.       /**
  8195.        * Expose `Backoff`.
  8196.        */
  8197.  
  8198.       module.exports = Backoff;
  8199.  
  8200.       /**
  8201.        * Initialize backoff timer with `opts`.
  8202.        *
  8203.        * - `min` initial timeout in milliseconds [100]
  8204.        * - `max` max timeout [10000]
  8205.        * - `jitter` [0]
  8206.        * - `factor` [2]
  8207.        *
  8208.        * @param {Object} opts
  8209.        * @api public
  8210.        */
  8211.  
  8212.       function Backoff(opts) {
  8213.         opts = opts || {};
  8214.         this.ms = opts.min || 100;
  8215.         this.max = opts.max || 10000;
  8216.         this.factor = opts.factor || 2;
  8217.         this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;
  8218.         this.attempts = 0;
  8219.       }
  8220.  
  8221.       /**
  8222.        * Return the backoff duration.
  8223.        *
  8224.        * @return {Number}
  8225.        * @api public
  8226.        */
  8227.  
  8228.       Backoff.prototype.duration = function(){
  8229.         var ms = this.ms * Math.pow(this.factor, this.attempts++);
  8230.         if (this.jitter) {
  8231.           var rand =  Math.random();
  8232.           var deviation = Math.floor(rand * this.jitter * ms);
  8233.           ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;
  8234.         }
  8235.         return Math.min(ms, this.max) | 0;
  8236.       };
  8237.  
  8238.       /**
  8239.        * Reset the number of attempts.
  8240.        *
  8241.        * @api public
  8242.        */
  8243.  
  8244.       Backoff.prototype.reset = function(){
  8245.         this.attempts = 0;
  8246.       };
  8247.  
  8248.       /**
  8249.        * Set the minimum duration
  8250.        *
  8251.        * @api public
  8252.        */
  8253.  
  8254.       Backoff.prototype.setMin = function(min){
  8255.         this.ms = min;
  8256.       };
  8257.  
  8258.       /**
  8259.        * Set the maximum duration
  8260.        *
  8261.        * @api public
  8262.        */
  8263.  
  8264.       Backoff.prototype.setMax = function(max){
  8265.         this.max = max;
  8266.       };
  8267.  
  8268.       /**
  8269.        * Set the jitter
  8270.        *
  8271.        * @api public
  8272.        */
  8273.  
  8274.       Backoff.prototype.setJitter = function(jitter){
  8275.         this.jitter = jitter;
  8276.       };
  8277.  
  8278.  
  8279.  
  8280. /***/ }
  8281. /******/ ])
  8282. });
  8283. ;
  8284. //# sourceMappingURL=socket.io.j

Paste-bin is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.