sockjs.min.js.map 227 KB
{"version":3,"sources":["node_modules/browser-pack/_prelude.js","lib/entry.js","lib/event/close.js","lib/event/emitter.js","lib/event/event.js","lib/event/eventtarget.js","lib/event/trans-message.js","lib/facade.js","lib/iframe-bootstrap.js","lib/info-ajax.js","lib/info-iframe-receiver.js","lib/info-iframe.js","lib/info-receiver.js","lib/location.js","lib/main.js","lib/shims.js","lib/transport-list.js","lib/transport/browser/abstract-xhr.js","lib/transport/browser/eventsource.js","lib/transport/browser/websocket.js","lib/transport/eventsource.js","lib/transport/htmlfile.js","lib/transport/iframe.js","lib/transport/jsonp-polling.js","lib/transport/lib/ajax-based.js","lib/transport/lib/buffered-sender.js","lib/transport/lib/iframe-wrap.js","lib/transport/lib/polling.js","lib/transport/lib/sender-receiver.js","lib/transport/receiver/eventsource.js","lib/transport/receiver/htmlfile.js","lib/transport/receiver/jsonp.js","lib/transport/receiver/xhr.js","lib/transport/sender/jsonp.js","lib/transport/sender/xdr.js","lib/transport/sender/xhr-cors.js","lib/transport/sender/xhr-fake.js","lib/transport/sender/xhr-local.js","lib/transport/websocket.js","lib/transport/xdr-polling.js","lib/transport/xdr-streaming.js","lib/transport/xhr-polling.js","lib/transport/xhr-streaming.js","lib/utils/browser-crypto.js","lib/utils/browser.js","lib/utils/escape.js","lib/utils/event.js","lib/utils/iframe.js","lib/utils/log.js","lib/utils/object.js","lib/utils/random.js","lib/utils/transport.js","lib/utils/url.js","lib/version.js","node_modules/inherits/inherits_browser.js","node_modules/json3/lib/json3.js","node_modules/querystringify/index.js","node_modules/requires-port/index.js","node_modules/url-parse/index.js","node_modules/url-parse/lolcation.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","SockJS","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","transportList","setTimeout","_sockjs_onload","CloseEvent","Event","initEvent","wasClean","reason","inherits","EventEmitter","EventTarget","prototype","removeAllListeners","type","_listeners","once","listener","removeListener","fired","apply","arguments","on","emit","listeners","args","Array","ai","addListener","addEventListener","removeEventListener","eventType","canBubble","cancelable","bubbles","timeStamp","Date","stopPropagation","preventDefault","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","arr","indexOf","concat","idx","slice","dispatchEvent","event","TransportMessageEvent","data","FacadeJS","transport","_transport","_transportMessage","bind","_transportClose","JSON3","iframeUtils","postMessage","stringify","frame","_send","send","_close","close","urlUtils","eventUtils","InfoIframeReceiver","loc","availableTransports","transportMap","forEach","at","facadeTransport","transportName","parentOrigin","bootstrap_iframe","facade","currentWindowId","hash","onMessage","source","parent","origin","iframeMessage","parse","ignored","windowId","p","version","transUrl","baseUrl","isOriginEqual","href","attachEvent","InfoAjax","url","AjaxObject","t0","xo","status","text","info","rtt","objectUtils","isObject","InfoReceiverIframe","ir","XHRLocalObject","InfoIframe","go","ifr","IframeTransport","msg","d","document","body","utils","enabled","InfoReceiver","urlInfo","doXhr","XDR","XHRCors","XHRLocal","XHRFake","_getReceiver","sameOrigin","sameScheme","addPath","timeoutRef","_cleanup","timeout","clearTimeout","location","protocol","host","port","protocols","options","TypeError","readyState","CONNECTING","extensions","protocols_whitelist","log","warn","_transportsWhitelist","transports","_transportOptions","transportOptions","sessionId","_generateSessionId","random","string","_server","server","numberString","parsedUrl","URL","SyntaxError","secure","isArray","sortedProtocols","sort","proto","getOrigin","_origin","toLowerCase","set","pathname","replace","_urlInfo","nullOrigin","browser","hasDomain","isSchemeEqual","_ir","_receiveInfo","userSetCode","escape","CLOSING","CLOSED","OPEN","quote","_rto","countRTO","_transUrl","base_url","extend","enabledTransports","filterToEnabled","_transports","main","_connect","Transport","shift","needBody","unshift","timeoutMs","roundTrips","_transportTimeoutId","_transportTimeout","transportUrl","transportObj","payload","content","_open","forceFail","onmessage","onclose","onerror","toInteger","num","Math","floor","abs","ToUint32","x","Empty","defineProperty","ArrayPrototype","ObjectPrototype","Object","FunctionPrototype","Function","StringPrototype","String","array_slice","_toString","toString","isFunction","val","obj","isString","supportsDescriptors","object","name","method","forceAssign","configurable","enumerable","writable","value","defineProperties","map","hasOwnProperty","toObject","that","target","binder","bound","result","boundLength","max","boundArgs","push","join","boxedString","splitString","fun","split","thisp","properlyBoxesNonStrict","properlyBoxesStrict","_","__","context","hasFirefox2IndexOfBug","sought","string_split","compliantExecNpcg","exec","separator","limit","separator2","match","lastIndex","lastLength","output","flags","ignoreCase","multiline","extended","sticky","lastLastIndex","RegExp","index","test","string_substr","substr","hasNegativeSubstrBug","start","AbstractXHRObject","opts","_start","XHR","XMLHttpRequest","xhr","addQuery","unloadRef","unloadAdd","open","ontimeout","noCredentials","supportsCORS","withCredentials","headers","key","setRequestHeader","onreadystatechange","responseText","abort","unloadDel","axo","cors","EventSource","Driver","WebSocket","MozWebSocket","undefined","EventSourceTransport","AjaxBasedTransport","EventSourceReceiver","XHRCorsObject","EventSourceDriver","HtmlFileTransport","HtmlfileReceiver","iframeUrl","iframeObj","createIframe","onmessageCallback","_message","detachEvent","cleanup","loaded","cdata","post","message","iframeEnabled","JsonPTransport","SenderReceiver","jsonpSender","JsonpReceiver","createAjaxSender","callback","opt","Content-type","ajaxUrl","err","urlSuffix","Receiver","BufferedSender","sender","sendBuffer","sendStop","sendSchedule","sendScheduleWait","tref","IframeWrapTransport","iframeInfo","Polling","receiveUrl","_scheduleReceiver","poll","pollIsClosing","senderFunc","pollUrl","es","decodeURI","polluteGlobalNamespace","id","decodeURIComponent","WPrefix","htmlfileEnabled","constructFunc","createHtmlfile","stop","urlWithId","encodeURIComponent","_callback","_createScript","timeoutId","_abort","scriptErrorTimeout","aborting","script2","parentNode","removeChild","script","onload","onclick","_scriptError","errorTimer","loadedOkay","createElement","src","charset","htmlFor","async","isOpera","head","getElementsByTagName","insertBefore","firstChild","XhrReceiver","bufferPosition","_chunkHandler","buf","iframe","createForm","form","style","display","position","enctype","acceptCharset","area","appendChild","action","submit","completed","XDRObject","xdr","XDomainRequest","_error","onprogress","XhrDriver","to","WebSocketTransport","ignore","ws","WebsocketDriver","XdrPollingTransport","XdrStreamingTransport","cookie_needed","XhrPollingTransport","XhrStreamingTransport","crypto","getRandomValues","randomBytes","bytes","Uint8Array","navigator","userAgent","isKonqueror","domain","extraLookup","extraEscapable","unrollLookup","escapable","unrolled","c","fromCharCode","charCodeAt","quoted","onUnload","afterUnload","isChromePackagedApp","chrome","app","runtime","ref","triggerUnloadCallbacks","unloadTriggered","errorCallback","unattach","contentWindow","doc","CollectGarbage","write","parentWindow","logObject","level","levelExists","console","prop","_randomStringChars","ret","number","transportsWhitelist","trans","websocket","hostname","b","res","path","qs","q","create","ctor","superCtor","super_","constructor","TempCtor","runInContext","has","undef","isSupported","serialized","stringifySupported","isExtended","toJSON","Number","getClass","exception","parseSupported","root","nativeJSON","isProperty","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","charIndexBuggy","Months","getDay","year","month","property","members","__proto__","original","Properties","size","valueOf","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","toPaddedString","width","useCharIndex","symbols","charCode","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","pop","filter","Index","Source","Unescapes","47","98","116","110","102","114","lex","begin","isSigned","get","hasMembers","update","walk","isLoader","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","noConflict","querystring","query","part","parser","querystringify","pairs","extractProtocol","address","protocolre","slashes","rest","resolve","relative","base","last","up","splice","extracted","instruction","instructions","rules","lolcation","required","username","password","auth","fn","ins","NaN","finaldestination","unescape"],"mappings":"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","file":"sockjs.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","'use strict';\n\nvar transportList = require('./transport-list');\n\nmodule.exports = require('./main')(transportList);\n\n// TODO can't get rid of this until all servers do\nif ('_sockjs_onload' in global) {\n  setTimeout(global._sockjs_onload, 1);\n}\n","'use strict';\n\nvar inherits = require('inherits')\n  , Event = require('./event')\n  ;\n\nfunction CloseEvent() {\n  Event.call(this);\n  this.initEvent('close', false, false);\n  this.wasClean = false;\n  this.code = 0;\n  this.reason = '';\n}\n\ninherits(CloseEvent, Event);\n\nmodule.exports = CloseEvent;\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventTarget = require('./eventtarget')\n  ;\n\nfunction EventEmitter() {\n  EventTarget.call(this);\n}\n\ninherits(EventEmitter, EventTarget);\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  if (type) {\n    delete this._listeners[type];\n  } else {\n    this._listeners = {};\n  }\n};\n\nEventEmitter.prototype.once = function(type, listener) {\n  var self = this\n    , fired = false;\n\n  function g() {\n    self.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  this.on(type, g);\n};\n\nEventEmitter.prototype.emit = function() {\n  var type = arguments[0];\n  var listeners = this._listeners[type];\n  if (!listeners) {\n    return;\n  }\n  // equivalent of Array.prototype.slice.call(arguments, 1);\n  var l = arguments.length;\n  var args = new Array(l - 1);\n  for (var ai = 1; ai < l; ai++) {\n    args[ai - 1] = arguments[ai];\n  }\n  for (var i = 0; i < listeners.length; i++) {\n    listeners[i].apply(this, args);\n  }\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener = EventTarget.prototype.addEventListener;\nEventEmitter.prototype.removeListener = EventTarget.prototype.removeEventListener;\n\nmodule.exports.EventEmitter = EventEmitter;\n","'use strict';\n\nfunction Event(eventType) {\n  this.type = eventType;\n}\n\nEvent.prototype.initEvent = function(eventType, canBubble, cancelable) {\n  this.type = eventType;\n  this.bubbles = canBubble;\n  this.cancelable = cancelable;\n  this.timeStamp = +new Date();\n  return this;\n};\n\nEvent.prototype.stopPropagation = function() {};\nEvent.prototype.preventDefault = function() {};\n\nEvent.CAPTURING_PHASE = 1;\nEvent.AT_TARGET = 2;\nEvent.BUBBLING_PHASE = 3;\n\nmodule.exports = Event;\n","'use strict';\n\n/* Simplified implementation of DOM2 EventTarget.\n *   http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget\n */\n\nfunction EventTarget() {\n  this._listeners = {};\n}\n\nEventTarget.prototype.addEventListener = function(eventType, listener) {\n  if (!(eventType in this._listeners)) {\n    this._listeners[eventType] = [];\n  }\n  var arr = this._listeners[eventType];\n  // #4\n  if (arr.indexOf(listener) === -1) {\n    // Make a copy so as not to interfere with a current dispatchEvent.\n    arr = arr.concat([listener]);\n  }\n  this._listeners[eventType] = arr;\n};\n\nEventTarget.prototype.removeEventListener = function(eventType, listener) {\n  var arr = this._listeners[eventType];\n  if (!arr) {\n    return;\n  }\n  var idx = arr.indexOf(listener);\n  if (idx !== -1) {\n    if (arr.length > 1) {\n      // Make a copy so as not to interfere with a current dispatchEvent.\n      this._listeners[eventType] = arr.slice(0, idx).concat(arr.slice(idx + 1));\n    } else {\n      delete this._listeners[eventType];\n    }\n    return;\n  }\n};\n\nEventTarget.prototype.dispatchEvent = function() {\n  var event = arguments[0];\n  var t = event.type;\n  // equivalent of Array.prototype.slice.call(arguments, 0);\n  var args = arguments.length === 1 ? [event] : Array.apply(null, arguments);\n  // TODO: This doesn't match the real behavior; per spec, onfoo get\n  // their place in line from the /first/ time they're set from\n  // non-null. Although WebKit bumps it to the end every time it's\n  // set.\n  if (this['on' + t]) {\n    this['on' + t].apply(this, args);\n  }\n  if (t in this._listeners) {\n    // Grab a reference to the listeners list. removeEventListener may alter the list.\n    var listeners = this._listeners[t];\n    for (var i = 0; i < listeners.length; i++) {\n      listeners[i].apply(this, args);\n    }\n  }\n};\n\nmodule.exports = EventTarget;\n","'use strict';\n\nvar inherits = require('inherits')\n  , Event = require('./event')\n  ;\n\nfunction TransportMessageEvent(data) {\n  Event.call(this);\n  this.initEvent('message', false, false);\n  this.data = data;\n}\n\ninherits(TransportMessageEvent, Event);\n\nmodule.exports = TransportMessageEvent;\n","'use strict';\n\nvar JSON3 = require('json3')\n  , iframeUtils = require('./utils/iframe')\n  ;\n\nfunction FacadeJS(transport) {\n  this._transport = transport;\n  transport.on('message', this._transportMessage.bind(this));\n  transport.on('close', this._transportClose.bind(this));\n}\n\nFacadeJS.prototype._transportClose = function(code, reason) {\n  iframeUtils.postMessage('c', JSON3.stringify([code, reason]));\n};\nFacadeJS.prototype._transportMessage = function(frame) {\n  iframeUtils.postMessage('t', frame);\n};\nFacadeJS.prototype._send = function(data) {\n  this._transport.send(data);\n};\nFacadeJS.prototype._close = function() {\n  this._transport.close();\n  this._transport.removeAllListeners();\n};\n\nmodule.exports = FacadeJS;\n","'use strict';\n\nvar urlUtils = require('./utils/url')\n  , eventUtils = require('./utils/event')\n  , JSON3 = require('json3')\n  , FacadeJS = require('./facade')\n  , InfoIframeReceiver = require('./info-iframe-receiver')\n  , iframeUtils = require('./utils/iframe')\n  , loc = require('./location')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:iframe-bootstrap');\n}\n\nmodule.exports = function(SockJS, availableTransports) {\n  var transportMap = {};\n  availableTransports.forEach(function(at) {\n    if (at.facadeTransport) {\n      transportMap[at.facadeTransport.transportName] = at.facadeTransport;\n    }\n  });\n\n  // hard-coded for the info iframe\n  // TODO see if we can make this more dynamic\n  transportMap[InfoIframeReceiver.transportName] = InfoIframeReceiver;\n  var parentOrigin;\n\n  /* eslint-disable camelcase */\n  SockJS.bootstrap_iframe = function() {\n    /* eslint-enable camelcase */\n    var facade;\n    iframeUtils.currentWindowId = loc.hash.slice(1);\n    var onMessage = function(e) {\n      if (e.source !== parent) {\n        return;\n      }\n      if (typeof parentOrigin === 'undefined') {\n        parentOrigin = e.origin;\n      }\n      if (e.origin !== parentOrigin) {\n        return;\n      }\n\n      var iframeMessage;\n      try {\n        iframeMessage = JSON3.parse(e.data);\n      } catch (ignored) {\n        debug('bad json', e.data);\n        return;\n      }\n\n      if (iframeMessage.windowId !== iframeUtils.currentWindowId) {\n        return;\n      }\n      switch (iframeMessage.type) {\n      case 's':\n        var p;\n        try {\n          p = JSON3.parse(iframeMessage.data);\n        } catch (ignored) {\n          debug('bad json', iframeMessage.data);\n          break;\n        }\n        var version = p[0];\n        var transport = p[1];\n        var transUrl = p[2];\n        var baseUrl = p[3];\n        debug(version, transport, transUrl, baseUrl);\n        // change this to semver logic\n        if (version !== SockJS.version) {\n          throw new Error('Incompatible SockJS! Main site uses:' +\n                    ' \"' + version + '\", the iframe:' +\n                    ' \"' + SockJS.version + '\".');\n        }\n\n        if (!urlUtils.isOriginEqual(transUrl, loc.href) ||\n            !urlUtils.isOriginEqual(baseUrl, loc.href)) {\n          throw new Error('Can\\'t connect to different domain from within an ' +\n                    'iframe. (' + loc.href + ', ' + transUrl + ', ' + baseUrl + ')');\n        }\n        facade = new FacadeJS(new transportMap[transport](transUrl, baseUrl));\n        break;\n      case 'm':\n        facade._send(iframeMessage.data);\n        break;\n      case 'c':\n        if (facade) {\n          facade._close();\n        }\n        facade = null;\n        break;\n      }\n    };\n\n    eventUtils.attachEvent('message', onMessage);\n\n    // Start\n    iframeUtils.postMessage('s');\n  };\n};\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , JSON3 = require('json3')\n  , objectUtils = require('./utils/object')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:info-ajax');\n}\n\nfunction InfoAjax(url, AjaxObject) {\n  EventEmitter.call(this);\n\n  var self = this;\n  var t0 = +new Date();\n  this.xo = new AjaxObject('GET', url);\n\n  this.xo.once('finish', function(status, text) {\n    var info, rtt;\n    if (status === 200) {\n      rtt = (+new Date()) - t0;\n      if (text) {\n        try {\n          info = JSON3.parse(text);\n        } catch (e) {\n          debug('bad json', text);\n        }\n      }\n\n      if (!objectUtils.isObject(info)) {\n        info = {};\n      }\n    }\n    self.emit('finish', info, rtt);\n    self.removeAllListeners();\n  });\n}\n\ninherits(InfoAjax, EventEmitter);\n\nInfoAjax.prototype.close = function() {\n  this.removeAllListeners();\n  this.xo.close();\n};\n\nmodule.exports = InfoAjax;\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  , JSON3 = require('json3')\n  , XHRLocalObject = require('./transport/sender/xhr-local')\n  , InfoAjax = require('./info-ajax')\n  ;\n\nfunction InfoReceiverIframe(transUrl) {\n  var self = this;\n  EventEmitter.call(this);\n\n  this.ir = new InfoAjax(transUrl, XHRLocalObject);\n  this.ir.once('finish', function(info, rtt) {\n    self.ir = null;\n    self.emit('message', JSON3.stringify([info, rtt]));\n  });\n}\n\ninherits(InfoReceiverIframe, EventEmitter);\n\nInfoReceiverIframe.transportName = 'iframe-info-receiver';\n\nInfoReceiverIframe.prototype.close = function() {\n  if (this.ir) {\n    this.ir.close();\n    this.ir = null;\n  }\n  this.removeAllListeners();\n};\n\nmodule.exports = InfoReceiverIframe;\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , JSON3 = require('json3')\n  , utils = require('./utils/event')\n  , IframeTransport = require('./transport/iframe')\n  , InfoReceiverIframe = require('./info-iframe-receiver')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:info-iframe');\n}\n\nfunction InfoIframe(baseUrl, url) {\n  var self = this;\n  EventEmitter.call(this);\n\n  var go = function() {\n    var ifr = self.ifr = new IframeTransport(InfoReceiverIframe.transportName, url, baseUrl);\n\n    ifr.once('message', function(msg) {\n      if (msg) {\n        var d;\n        try {\n          d = JSON3.parse(msg);\n        } catch (e) {\n          debug('bad json', msg);\n          self.emit('finish');\n          self.close();\n          return;\n        }\n\n        var info = d[0], rtt = d[1];\n        self.emit('finish', info, rtt);\n      }\n      self.close();\n    });\n\n    ifr.once('close', function() {\n      self.emit('finish');\n      self.close();\n    });\n  };\n\n  // TODO this seems the same as the 'needBody' from transports\n  if (!global.document.body) {\n    utils.attachEvent('load', go);\n  } else {\n    go();\n  }\n}\n\ninherits(InfoIframe, EventEmitter);\n\nInfoIframe.enabled = function() {\n  return IframeTransport.enabled();\n};\n\nInfoIframe.prototype.close = function() {\n  if (this.ifr) {\n    this.ifr.close();\n  }\n  this.removeAllListeners();\n  this.ifr = null;\n};\n\nmodule.exports = InfoIframe;\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , urlUtils = require('./utils/url')\n  , XDR = require('./transport/sender/xdr')\n  , XHRCors = require('./transport/sender/xhr-cors')\n  , XHRLocal = require('./transport/sender/xhr-local')\n  , XHRFake = require('./transport/sender/xhr-fake')\n  , InfoIframe = require('./info-iframe')\n  , InfoAjax = require('./info-ajax')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:info-receiver');\n}\n\nfunction InfoReceiver(baseUrl, urlInfo) {\n  debug(baseUrl);\n  var self = this;\n  EventEmitter.call(this);\n\n  setTimeout(function() {\n    self.doXhr(baseUrl, urlInfo);\n  }, 0);\n}\n\ninherits(InfoReceiver, EventEmitter);\n\n// TODO this is currently ignoring the list of available transports and the whitelist\n\nInfoReceiver._getReceiver = function(baseUrl, url, urlInfo) {\n  // determine method of CORS support (if needed)\n  if (urlInfo.sameOrigin) {\n    return new InfoAjax(url, XHRLocal);\n  }\n  if (XHRCors.enabled) {\n    return new InfoAjax(url, XHRCors);\n  }\n  if (XDR.enabled && urlInfo.sameScheme) {\n    return new InfoAjax(url, XDR);\n  }\n  if (InfoIframe.enabled()) {\n    return new InfoIframe(baseUrl, url);\n  }\n  return new InfoAjax(url, XHRFake);\n};\n\nInfoReceiver.prototype.doXhr = function(baseUrl, urlInfo) {\n  var self = this\n    , url = urlUtils.addPath(baseUrl, '/info')\n    ;\n  debug('doXhr', url);\n\n  this.xo = InfoReceiver._getReceiver(baseUrl, url, urlInfo);\n\n  this.timeoutRef = setTimeout(function() {\n    debug('timeout');\n    self._cleanup(false);\n    self.emit('finish');\n  }, InfoReceiver.timeout);\n\n  this.xo.once('finish', function(info, rtt) {\n    debug('finish', info, rtt);\n    self._cleanup(true);\n    self.emit('finish', info, rtt);\n  });\n};\n\nInfoReceiver.prototype._cleanup = function(wasClean) {\n  debug('_cleanup');\n  clearTimeout(this.timeoutRef);\n  this.timeoutRef = null;\n  if (!wasClean && this.xo) {\n    this.xo.close();\n  }\n  this.xo = null;\n};\n\nInfoReceiver.prototype.close = function() {\n  debug('close');\n  this.removeAllListeners();\n  this._cleanup(false);\n};\n\nInfoReceiver.timeout = 8000;\n\nmodule.exports = InfoReceiver;\n","'use strict';\n\nmodule.exports = global.location || {\n  origin: 'http://localhost:80'\n, protocol: 'http'\n, host: 'localhost'\n, port: 80\n, href: 'http://localhost/'\n, hash: ''\n};\n","'use strict';\n\nrequire('./shims');\n\nvar URL = require('url-parse')\n  , inherits = require('inherits')\n  , JSON3 = require('json3')\n  , random = require('./utils/random')\n  , escape = require('./utils/escape')\n  , urlUtils = require('./utils/url')\n  , eventUtils = require('./utils/event')\n  , transport = require('./utils/transport')\n  , objectUtils = require('./utils/object')\n  , browser = require('./utils/browser')\n  , log = require('./utils/log')\n  , Event = require('./event/event')\n  , EventTarget = require('./event/eventtarget')\n  , loc = require('./location')\n  , CloseEvent = require('./event/close')\n  , TransportMessageEvent = require('./event/trans-message')\n  , InfoReceiver = require('./info-receiver')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:main');\n}\n\nvar transports;\n\n// follow constructor steps defined at http://dev.w3.org/html5/websockets/#the-websocket-interface\nfunction SockJS(url, protocols, options) {\n  if (!(this instanceof SockJS)) {\n    return new SockJS(url, protocols, options);\n  }\n  if (arguments.length < 1) {\n    throw new TypeError(\"Failed to construct 'SockJS: 1 argument required, but only 0 present\");\n  }\n  EventTarget.call(this);\n\n  this.readyState = SockJS.CONNECTING;\n  this.extensions = '';\n  this.protocol = '';\n\n  // non-standard extension\n  options = options || {};\n  if (options.protocols_whitelist) {\n    log.warn(\"'protocols_whitelist' is DEPRECATED. Use 'transports' instead.\");\n  }\n  this._transportsWhitelist = options.transports;\n  this._transportOptions = options.transportOptions || {};\n\n  var sessionId = options.sessionId || 8;\n  if (typeof sessionId === 'function') {\n    this._generateSessionId = sessionId;\n  } else if (typeof sessionId === 'number') {\n    this._generateSessionId = function() {\n      return random.string(sessionId);\n    };\n  } else {\n    throw new TypeError('If sessionId is used in the options, it needs to be a number or a function.');\n  }\n\n  this._server = options.server || random.numberString(1000);\n\n  // Step 1 of WS spec - parse and validate the url. Issue #8\n  var parsedUrl = new URL(url);\n  if (!parsedUrl.host || !parsedUrl.protocol) {\n    throw new SyntaxError(\"The URL '\" + url + \"' is invalid\");\n  } else if (parsedUrl.hash) {\n    throw new SyntaxError('The URL must not contain a fragment');\n  } else if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {\n    throw new SyntaxError(\"The URL's scheme must be either 'http:' or 'https:'. '\" + parsedUrl.protocol + \"' is not allowed.\");\n  }\n\n  var secure = parsedUrl.protocol === 'https:';\n  // Step 2 - don't allow secure origin with an insecure protocol\n  if (loc.protocol === 'https' && !secure) {\n    throw new Error('SecurityError: An insecure SockJS connection may not be initiated from a page loaded over HTTPS');\n  }\n\n  // Step 3 - check port access - no need here\n  // Step 4 - parse protocols argument\n  if (!protocols) {\n    protocols = [];\n  } else if (!Array.isArray(protocols)) {\n    protocols = [protocols];\n  }\n\n  // Step 5 - check protocols argument\n  var sortedProtocols = protocols.sort();\n  sortedProtocols.forEach(function(proto, i) {\n    if (!proto) {\n      throw new SyntaxError(\"The protocols entry '\" + proto + \"' is invalid.\");\n    }\n    if (i < (sortedProtocols.length - 1) && proto === sortedProtocols[i + 1]) {\n      throw new SyntaxError(\"The protocols entry '\" + proto + \"' is duplicated.\");\n    }\n  });\n\n  // Step 6 - convert origin\n  var o = urlUtils.getOrigin(loc.href);\n  this._origin = o ? o.toLowerCase() : null;\n\n  // remove the trailing slash\n  parsedUrl.set('pathname', parsedUrl.pathname.replace(/\\/+$/, ''));\n\n  // store the sanitized url\n  this.url = parsedUrl.href;\n  debug('using url', this.url);\n\n  // Step 7 - start connection in background\n  // obtain server info\n  // http://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html#section-26\n  this._urlInfo = {\n    nullOrigin: !browser.hasDomain()\n  , sameOrigin: urlUtils.isOriginEqual(this.url, loc.href)\n  , sameScheme: urlUtils.isSchemeEqual(this.url, loc.href)\n  };\n\n  this._ir = new InfoReceiver(this.url, this._urlInfo);\n  this._ir.once('finish', this._receiveInfo.bind(this));\n}\n\ninherits(SockJS, EventTarget);\n\nfunction userSetCode(code) {\n  return code === 1000 || (code >= 3000 && code <= 4999);\n}\n\nSockJS.prototype.close = function(code, reason) {\n  // Step 1\n  if (code && !userSetCode(code)) {\n    throw new Error('InvalidAccessError: Invalid code');\n  }\n  // Step 2.4 states the max is 123 bytes, but we are just checking length\n  if (reason && reason.length > 123) {\n    throw new SyntaxError('reason argument has an invalid length');\n  }\n\n  // Step 3.1\n  if (this.readyState === SockJS.CLOSING || this.readyState === SockJS.CLOSED) {\n    return;\n  }\n\n  // TODO look at docs to determine how to set this\n  var wasClean = true;\n  this._close(code || 1000, reason || 'Normal closure', wasClean);\n};\n\nSockJS.prototype.send = function(data) {\n  // #13 - convert anything non-string to string\n  // TODO this currently turns objects into [object Object]\n  if (typeof data !== 'string') {\n    data = '' + data;\n  }\n  if (this.readyState === SockJS.CONNECTING) {\n    throw new Error('InvalidStateError: The connection has not been established yet');\n  }\n  if (this.readyState !== SockJS.OPEN) {\n    return;\n  }\n  this._transport.send(escape.quote(data));\n};\n\nSockJS.version = require('./version');\n\nSockJS.CONNECTING = 0;\nSockJS.OPEN = 1;\nSockJS.CLOSING = 2;\nSockJS.CLOSED = 3;\n\nSockJS.prototype._receiveInfo = function(info, rtt) {\n  debug('_receiveInfo', rtt);\n  this._ir = null;\n  if (!info) {\n    this._close(1002, 'Cannot connect to server');\n    return;\n  }\n\n  // establish a round-trip timeout (RTO) based on the\n  // round-trip time (RTT)\n  this._rto = this.countRTO(rtt);\n  // allow server to override url used for the actual transport\n  this._transUrl = info.base_url ? info.base_url : this.url;\n  info = objectUtils.extend(info, this._urlInfo);\n  debug('info', info);\n  // determine list of desired and supported transports\n  var enabledTransports = transports.filterToEnabled(this._transportsWhitelist, info);\n  this._transports = enabledTransports.main;\n  debug(this._transports.length + ' enabled transports');\n\n  this._connect();\n};\n\nSockJS.prototype._connect = function() {\n  for (var Transport = this._transports.shift(); Transport; Transport = this._transports.shift()) {\n    debug('attempt', Transport.transportName);\n    if (Transport.needBody) {\n      if (!global.document.body ||\n          (typeof global.document.readyState !== 'undefined' &&\n            global.document.readyState !== 'complete' &&\n            global.document.readyState !== 'interactive')) {\n        debug('waiting for body');\n        this._transports.unshift(Transport);\n        eventUtils.attachEvent('load', this._connect.bind(this));\n        return;\n      }\n    }\n\n    // calculate timeout based on RTO and round trips. Default to 5s\n    var timeoutMs = (this._rto * Transport.roundTrips) || 5000;\n    this._transportTimeoutId = setTimeout(this._transportTimeout.bind(this), timeoutMs);\n    debug('using timeout', timeoutMs);\n\n    var transportUrl = urlUtils.addPath(this._transUrl, '/' + this._server + '/' + this._generateSessionId());\n    var options = this._transportOptions[Transport.transportName];\n    debug('transport url', transportUrl);\n    var transportObj = new Transport(transportUrl, this._transUrl, options);\n    transportObj.on('message', this._transportMessage.bind(this));\n    transportObj.once('close', this._transportClose.bind(this));\n    transportObj.transportName = Transport.transportName;\n    this._transport = transportObj;\n\n    return;\n  }\n  this._close(2000, 'All transports failed', false);\n};\n\nSockJS.prototype._transportTimeout = function() {\n  debug('_transportTimeout');\n  if (this.readyState === SockJS.CONNECTING) {\n    this._transportClose(2007, 'Transport timed out');\n  }\n};\n\nSockJS.prototype._transportMessage = function(msg) {\n  debug('_transportMessage', msg);\n  var self = this\n    , type = msg.slice(0, 1)\n    , content = msg.slice(1)\n    , payload\n    ;\n\n  // first check for messages that don't need a payload\n  switch (type) {\n    case 'o':\n      this._open();\n      return;\n    case 'h':\n      this.dispatchEvent(new Event('heartbeat'));\n      debug('heartbeat', this.transport);\n      return;\n  }\n\n  if (content) {\n    try {\n      payload = JSON3.parse(content);\n    } catch (e) {\n      debug('bad json', content);\n    }\n  }\n\n  if (typeof payload === 'undefined') {\n    debug('empty payload', content);\n    return;\n  }\n\n  switch (type) {\n    case 'a':\n      if (Array.isArray(payload)) {\n        payload.forEach(function(p) {\n          debug('message', self.transport, p);\n          self.dispatchEvent(new TransportMessageEvent(p));\n        });\n      }\n      break;\n    case 'm':\n      debug('message', this.transport, payload);\n      this.dispatchEvent(new TransportMessageEvent(payload));\n      break;\n    case 'c':\n      if (Array.isArray(payload) && payload.length === 2) {\n        this._close(payload[0], payload[1], true);\n      }\n      break;\n  }\n};\n\nSockJS.prototype._transportClose = function(code, reason) {\n  debug('_transportClose', this.transport, code, reason);\n  if (this._transport) {\n    this._transport.removeAllListeners();\n    this._transport = null;\n    this.transport = null;\n  }\n\n  if (!userSetCode(code) && code !== 2000 && this.readyState === SockJS.CONNECTING) {\n    this._connect();\n    return;\n  }\n\n  this._close(code, reason);\n};\n\nSockJS.prototype._open = function() {\n  debug('_open', this._transport.transportName, this.readyState);\n  if (this.readyState === SockJS.CONNECTING) {\n    if (this._transportTimeoutId) {\n      clearTimeout(this._transportTimeoutId);\n      this._transportTimeoutId = null;\n    }\n    this.readyState = SockJS.OPEN;\n    this.transport = this._transport.transportName;\n    this.dispatchEvent(new Event('open'));\n    debug('connected', this.transport);\n  } else {\n    // The server might have been restarted, and lost track of our\n    // connection.\n    this._close(1006, 'Server lost session');\n  }\n};\n\nSockJS.prototype._close = function(code, reason, wasClean) {\n  debug('_close', this.transport, code, reason, wasClean, this.readyState);\n  var forceFail = false;\n\n  if (this._ir) {\n    forceFail = true;\n    this._ir.close();\n    this._ir = null;\n  }\n  if (this._transport) {\n    this._transport.close();\n    this._transport = null;\n    this.transport = null;\n  }\n\n  if (this.readyState === SockJS.CLOSED) {\n    throw new Error('InvalidStateError: SockJS has already been closed');\n  }\n\n  this.readyState = SockJS.CLOSING;\n  setTimeout(function() {\n    this.readyState = SockJS.CLOSED;\n\n    if (forceFail) {\n      this.dispatchEvent(new Event('error'));\n    }\n\n    var e = new CloseEvent('close');\n    e.wasClean = wasClean || false;\n    e.code = code || 1000;\n    e.reason = reason;\n\n    this.dispatchEvent(e);\n    this.onmessage = this.onclose = this.onerror = null;\n    debug('disconnected');\n  }.bind(this), 0);\n};\n\n// See: http://www.erg.abdn.ac.uk/~gerrit/dccp/notes/ccid2/rto_estimator/\n// and RFC 2988.\nSockJS.prototype.countRTO = function(rtt) {\n  // In a local environment, when using IE8/9 and the `jsonp-polling`\n  // transport the time needed to establish a connection (the time that pass\n  // from the opening of the transport to the call of `_dispatchOpen`) is\n  // around 200msec (the lower bound used in the article above) and this\n  // causes spurious timeouts. For this reason we calculate a value slightly\n  // larger than that used in the article.\n  if (rtt > 100) {\n    return 4 * rtt; // rto > 400msec\n  }\n  return 300 + rtt; // 300msec < rto <= 400msec\n};\n\nmodule.exports = function(availableTransports) {\n  transports = transport(availableTransports);\n  require('./iframe-bootstrap')(SockJS, availableTransports);\n  return SockJS;\n};\n","/* eslint-disable */\n/* jscs: disable */\n'use strict';\n\n// pulled specific shims from https://github.com/es-shims/es5-shim\n\nvar ArrayPrototype = Array.prototype;\nvar ObjectPrototype = Object.prototype;\nvar FunctionPrototype = Function.prototype;\nvar StringPrototype = String.prototype;\nvar array_slice = ArrayPrototype.slice;\n\nvar _toString = ObjectPrototype.toString;\nvar isFunction = function (val) {\n    return ObjectPrototype.toString.call(val) === '[object Function]';\n};\nvar isArray = function isArray(obj) {\n    return _toString.call(obj) === '[object Array]';\n};\nvar isString = function isString(obj) {\n    return _toString.call(obj) === '[object String]';\n};\n\nvar supportsDescriptors = Object.defineProperty && (function () {\n    try {\n        Object.defineProperty({}, 'x', {});\n        return true;\n    } catch (e) { /* this is ES3 */\n        return false;\n    }\n}());\n\n// Define configurable, writable and non-enumerable props\n// if they don't exist.\nvar defineProperty;\nif (supportsDescriptors) {\n    defineProperty = function (object, name, method, forceAssign) {\n        if (!forceAssign && (name in object)) { return; }\n        Object.defineProperty(object, name, {\n            configurable: true,\n            enumerable: false,\n            writable: true,\n            value: method\n        });\n    };\n} else {\n    defineProperty = function (object, name, method, forceAssign) {\n        if (!forceAssign && (name in object)) { return; }\n        object[name] = method;\n    };\n}\nvar defineProperties = function (object, map, forceAssign) {\n    for (var name in map) {\n        if (ObjectPrototype.hasOwnProperty.call(map, name)) {\n          defineProperty(object, name, map[name], forceAssign);\n        }\n    }\n};\n\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \" + o + ' to object');\n    }\n    return Object(o);\n};\n\n//\n// Util\n// ======\n//\n\n// ES5 9.4\n// http://es5.github.com/#x9.4\n// http://jsperf.com/to-integer\n\nfunction toInteger(num) {\n    var n = +num;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction ToUint32(x) {\n    return x >>> 0;\n}\n\n//\n// Function\n// ========\n//\n\n// ES-5 15.3.4.5\n// http://es5.github.com/#x15.3.4.5\n\nfunction Empty() {}\n\ndefineProperties(FunctionPrototype, {\n    bind: function bind(that) { // .length is 1\n        // 1. Let Target be the this value.\n        var target = this;\n        // 2. If IsCallable(Target) is false, throw a TypeError exception.\n        if (!isFunction(target)) {\n            throw new TypeError('Function.prototype.bind called on incompatible ' + target);\n        }\n        // 3. Let A be a new (possibly empty) internal list of all of the\n        //   argument values provided after thisArg (arg1, arg2 etc), in order.\n        // XXX slicedArgs will stand in for \"A\" if used\n        var args = array_slice.call(arguments, 1); // for normal call\n        // 4. Let F be a new native ECMAScript object.\n        // 11. Set the [[Prototype]] internal property of F to the standard\n        //   built-in Function prototype object as specified in 15.3.3.1.\n        // 12. Set the [[Call]] internal property of F as described in\n        //   15.3.4.5.1.\n        // 13. Set the [[Construct]] internal property of F as described in\n        //   15.3.4.5.2.\n        // 14. Set the [[HasInstance]] internal property of F as described in\n        //   15.3.4.5.3.\n        var binder = function () {\n\n            if (this instanceof bound) {\n                // 15.3.4.5.2 [[Construct]]\n                // When the [[Construct]] internal method of a function object,\n                // F that was created using the bind function is called with a\n                // list of arguments ExtraArgs, the following steps are taken:\n                // 1. Let target be the value of F's [[TargetFunction]]\n                //   internal property.\n                // 2. If target has no [[Construct]] internal method, a\n                //   TypeError exception is thrown.\n                // 3. Let boundArgs be the value of F's [[BoundArgs]] internal\n                //   property.\n                // 4. Let args be a new list containing the same values as the\n                //   list boundArgs in the same order followed by the same\n                //   values as the list ExtraArgs in the same order.\n                // 5. Return the result of calling the [[Construct]] internal\n                //   method of target providing args as the arguments.\n\n                var result = target.apply(\n                    this,\n                    args.concat(array_slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                // 15.3.4.5.1 [[Call]]\n                // When the [[Call]] internal method of a function object, F,\n                // which was created using the bind function is called with a\n                // this value and a list of arguments ExtraArgs, the following\n                // steps are taken:\n                // 1. Let boundArgs be the value of F's [[BoundArgs]] internal\n                //   property.\n                // 2. Let boundThis be the value of F's [[BoundThis]] internal\n                //   property.\n                // 3. Let target be the value of F's [[TargetFunction]] internal\n                //   property.\n                // 4. Let args be a new list containing the same values as the\n                //   list boundArgs in the same order followed by the same\n                //   values as the list ExtraArgs in the same order.\n                // 5. Return the result of calling the [[Call]] internal method\n                //   of target providing boundThis as the this value and\n                //   providing args as the arguments.\n\n                // equiv: target.call(this, ...boundArgs, ...args)\n                return target.apply(\n                    that,\n                    args.concat(array_slice.call(arguments))\n                );\n\n            }\n\n        };\n\n        // 15. If the [[Class]] internal property of Target is \"Function\", then\n        //     a. Let L be the length property of Target minus the length of A.\n        //     b. Set the length own property of F to either 0 or L, whichever is\n        //       larger.\n        // 16. Else set the length own property of F to 0.\n\n        var boundLength = Math.max(0, target.length - args.length);\n\n        // 17. Set the attributes of the length own property of F to the values\n        //   specified in 15.3.5.1.\n        var boundArgs = [];\n        for (var i = 0; i < boundLength; i++) {\n            boundArgs.push('$' + i);\n        }\n\n        // XXX Build a dynamic function with desired amount of arguments is the only\n        // way to set the length property of a function.\n        // In environments where Content Security Policies enabled (Chrome extensions,\n        // for ex.) all use of eval or Function costructor throws an exception.\n        // However in all of these environments Function.prototype.bind exists\n        // and so this code will never be executed.\n        var bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);\n\n        if (target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            // Clean up dangling references.\n            Empty.prototype = null;\n        }\n\n        // TODO\n        // 18. Set the [[Extensible]] internal property of F to true.\n\n        // TODO\n        // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).\n        // 20. Call the [[DefineOwnProperty]] internal method of F with\n        //   arguments \"caller\", PropertyDescriptor {[[Get]]: thrower, [[Set]]:\n        //   thrower, [[Enumerable]]: false, [[Configurable]]: false}, and\n        //   false.\n        // 21. Call the [[DefineOwnProperty]] internal method of F with\n        //   arguments \"arguments\", PropertyDescriptor {[[Get]]: thrower,\n        //   [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},\n        //   and false.\n\n        // TODO\n        // NOTE Function objects created using Function.prototype.bind do not\n        // have a prototype property or the [[Code]], [[FormalParameters]], and\n        // [[Scope]] internal properties.\n        // XXX can't delete prototype in pure-js.\n\n        // 22. Return F.\n        return bound;\n    }\n});\n\n//\n// Array\n// =====\n//\n\n// ES5 15.4.3.2\n// http://es5.github.com/#x15.4.3.2\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\ndefineProperties(Array, { isArray: isArray });\n\n\nvar boxedString = Object('a');\nvar splitString = boxedString[0] !== 'a' || !(0 in boxedString);\n\nvar properlyBoxesContext = function properlyBoxed(method) {\n    // Check node 0.6.21 bug where third parameter is not boxed\n    var properlyBoxesNonStrict = true;\n    var properlyBoxesStrict = true;\n    if (method) {\n        method.call('foo', function (_, __, context) {\n            if (typeof context !== 'object') { properlyBoxesNonStrict = false; }\n        });\n\n        method.call([1], function () {\n            'use strict';\n            properlyBoxesStrict = typeof this === 'string';\n        }, 'x');\n    }\n    return !!method && properlyBoxesNonStrict && properlyBoxesStrict;\n};\n\ndefineProperties(ArrayPrototype, {\n    forEach: function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && isString(this) ? this.split('') : object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n\n        // If no callback function or if callback is not a callable function\n        if (!isFunction(fun)) {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                // Invoke the callback function with call, passing arguments:\n                // context, property value, property key, thisArg object\n                // context\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    }\n}, !properlyBoxesContext(ArrayPrototype.forEach));\n\n// ES5 15.4.4.14\n// http://es5.github.com/#x15.4.4.14\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\nvar hasFirefox2IndexOfBug = Array.prototype.indexOf && [0, 1].indexOf(1, 2) !== -1;\ndefineProperties(ArrayPrototype, {\n    indexOf: function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && isString(this) ? this.split('') : toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n\n        // handle negative indices\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    }\n}, hasFirefox2IndexOfBug);\n\n//\n// String\n// ======\n//\n\n// ES5 15.5.4.14\n// http://es5.github.com/#x15.5.4.14\n\n// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]\n// Many browsers do not split properly with regular expressions or they\n// do not perform the split correctly under obscure conditions.\n// See http://blog.stevenlevithan.com/archives/cross-browser-split\n// I've tested in many browsers and this seems to cover the deviant ones:\n//    'ab'.split(/(?:ab)*/) should be [\"\", \"\"], not [\"\"]\n//    '.'.split(/(.?)(.?)/) should be [\"\", \".\", \"\", \"\"], not [\"\", \"\"]\n//    'tesst'.split(/(s)*/) should be [\"t\", undefined, \"e\", \"s\", \"t\"], not\n//       [undefined, \"t\", undefined, \"e\", ...]\n//    ''.split(/.?/) should be [], not [\"\"]\n//    '.'.split(/()()/) should be [\".\"], not [\"\", \"\", \".\"]\n\nvar string_split = StringPrototype.split;\nif (\n    'ab'.split(/(?:ab)*/).length !== 2 ||\n    '.'.split(/(.?)(.?)/).length !== 4 ||\n    'tesst'.split(/(s)*/)[1] === 't' ||\n    'test'.split(/(?:)/, -1).length !== 4 ||\n    ''.split(/.?/).length ||\n    '.'.split(/()()/).length > 1\n) {\n    (function () {\n        var compliantExecNpcg = /()??/.exec('')[1] === void 0; // NPCG: nonparticipating capturing group\n\n        StringPrototype.split = function (separator, limit) {\n            var string = this;\n            if (separator === void 0 && limit === 0) {\n                return [];\n            }\n\n            // If `separator` is not a regex, use native split\n            if (_toString.call(separator) !== '[object RegExp]') {\n                return string_split.call(this, separator, limit);\n            }\n\n            var output = [],\n                flags = (separator.ignoreCase ? 'i' : '') +\n                        (separator.multiline  ? 'm' : '') +\n                        (separator.extended   ? 'x' : '') + // Proposed for ES6\n                        (separator.sticky     ? 'y' : ''), // Firefox 3+\n                lastLastIndex = 0,\n                // Make `global` and avoid `lastIndex` issues by working with a copy\n                separator2, match, lastIndex, lastLength;\n            separator = new RegExp(separator.source, flags + 'g');\n            string += ''; // Type-convert\n            if (!compliantExecNpcg) {\n                // Doesn't need flags gy, but they don't hurt\n                separator2 = new RegExp('^' + separator.source + '$(?!\\\\s)', flags);\n            }\n            /* Values for `limit`, per the spec:\n             * If undefined: 4294967295 // Math.pow(2, 32) - 1\n             * If 0, Infinity, or NaN: 0\n             * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\n             * If negative number: 4294967296 - Math.floor(Math.abs(limit))\n             * If other: Type-convert, then use the above rules\n             */\n            limit = limit === void 0 ?\n                -1 >>> 0 : // Math.pow(2, 32) - 1\n                ToUint32(limit);\n            while (match = separator.exec(string)) {\n                // `separator.lastIndex` is not reliable cross-browser\n                lastIndex = match.index + match[0].length;\n                if (lastIndex > lastLastIndex) {\n                    output.push(string.slice(lastLastIndex, match.index));\n                    // Fix browsers whose `exec` methods don't consistently return `undefined` for\n                    // nonparticipating capturing groups\n                    if (!compliantExecNpcg && match.length > 1) {\n                        match[0].replace(separator2, function () {\n                            for (var i = 1; i < arguments.length - 2; i++) {\n                                if (arguments[i] === void 0) {\n                                    match[i] = void 0;\n                                }\n                            }\n                        });\n                    }\n                    if (match.length > 1 && match.index < string.length) {\n                        ArrayPrototype.push.apply(output, match.slice(1));\n                    }\n                    lastLength = match[0].length;\n                    lastLastIndex = lastIndex;\n                    if (output.length >= limit) {\n                        break;\n                    }\n                }\n                if (separator.lastIndex === match.index) {\n                    separator.lastIndex++; // Avoid an infinite loop\n                }\n            }\n            if (lastLastIndex === string.length) {\n                if (lastLength || !separator.test('')) {\n                    output.push('');\n                }\n            } else {\n                output.push(string.slice(lastLastIndex));\n            }\n            return output.length > limit ? output.slice(0, limit) : output;\n        };\n    }());\n\n// [bugfix, chrome]\n// If separator is undefined, then the result array contains just one String,\n// which is the this value (converted to a String). If limit is not undefined,\n// then the output array is truncated so that it contains no more than limit\n// elements.\n// \"0\".split(undefined, 0) -> []\n} else if ('0'.split(void 0, 0).length) {\n    StringPrototype.split = function split(separator, limit) {\n        if (separator === void 0 && limit === 0) { return []; }\n        return string_split.call(this, separator, limit);\n    };\n}\n\n// ECMA-262, 3rd B.2.3\n// Not an ECMAScript standard, although ECMAScript 3rd Edition has a\n// non-normative section suggesting uniform semantics and it should be\n// normalized across all browsers\n// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE\nvar string_substr = StringPrototype.substr;\nvar hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';\ndefineProperties(StringPrototype, {\n    substr: function substr(start, length) {\n        return string_substr.call(\n            this,\n            start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start,\n            length\n        );\n    }\n}, hasNegativeSubstrBug);\n","'use strict';\n\nmodule.exports = [\n  // streaming transports\n  require('./transport/websocket')\n, require('./transport/xhr-streaming')\n, require('./transport/xdr-streaming')\n, require('./transport/eventsource')\n, require('./transport/lib/iframe-wrap')(require('./transport/eventsource'))\n\n  // polling transports\n, require('./transport/htmlfile')\n, require('./transport/lib/iframe-wrap')(require('./transport/htmlfile'))\n, require('./transport/xhr-polling')\n, require('./transport/xdr-polling')\n, require('./transport/lib/iframe-wrap')(require('./transport/xhr-polling'))\n, require('./transport/jsonp-polling')\n];\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , utils = require('../../utils/event')\n  , urlUtils = require('../../utils/url')\n  , XHR = global.XMLHttpRequest\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:browser:xhr');\n}\n\nfunction AbstractXHRObject(method, url, payload, opts) {\n  debug(method, url);\n  var self = this;\n  EventEmitter.call(this);\n\n  setTimeout(function () {\n    self._start(method, url, payload, opts);\n  }, 0);\n}\n\ninherits(AbstractXHRObject, EventEmitter);\n\nAbstractXHRObject.prototype._start = function(method, url, payload, opts) {\n  var self = this;\n\n  try {\n    this.xhr = new XHR();\n  } catch (x) {\n    // intentionally empty\n  }\n\n  if (!this.xhr) {\n    debug('no xhr');\n    this.emit('finish', 0, 'no xhr support');\n    this._cleanup();\n    return;\n  }\n\n  // several browsers cache POSTs\n  url = urlUtils.addQuery(url, 't=' + (+new Date()));\n\n  // Explorer tends to keep connection open, even after the\n  // tab gets closed: http://bugs.jquery.com/ticket/5280\n  this.unloadRef = utils.unloadAdd(function() {\n    debug('unload cleanup');\n    self._cleanup(true);\n  });\n  try {\n    this.xhr.open(method, url, true);\n    if (this.timeout && 'timeout' in this.xhr) {\n      this.xhr.timeout = this.timeout;\n      this.xhr.ontimeout = function() {\n        debug('xhr timeout');\n        self.emit('finish', 0, '');\n        self._cleanup(false);\n      };\n    }\n  } catch (e) {\n    debug('exception', e);\n    // IE raises an exception on wrong port.\n    this.emit('finish', 0, '');\n    this._cleanup(false);\n    return;\n  }\n\n  if ((!opts || !opts.noCredentials) && AbstractXHRObject.supportsCORS) {\n    debug('withCredentials');\n    // Mozilla docs says https://developer.mozilla.org/en/XMLHttpRequest :\n    // \"This never affects same-site requests.\"\n\n    this.xhr.withCredentials = 'true';\n  }\n  if (opts && opts.headers) {\n    for (var key in opts.headers) {\n      this.xhr.setRequestHeader(key, opts.headers[key]);\n    }\n  }\n\n  this.xhr.onreadystatechange = function() {\n    if (self.xhr) {\n      var x = self.xhr;\n      var text, status;\n      debug('readyState', x.readyState);\n      switch (x.readyState) {\n      case 3:\n        // IE doesn't like peeking into responseText or status\n        // on Microsoft.XMLHTTP and readystate=3\n        try {\n          status = x.status;\n          text = x.responseText;\n        } catch (e) {\n          // intentionally empty\n        }\n        debug('status', status);\n        // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450\n        if (status === 1223) {\n          status = 204;\n        }\n\n        // IE does return readystate == 3 for 404 answers.\n        if (status === 200 && text && text.length > 0) {\n          debug('chunk');\n          self.emit('chunk', status, text);\n        }\n        break;\n      case 4:\n        status = x.status;\n        debug('status', status);\n        // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450\n        if (status === 1223) {\n          status = 204;\n        }\n        // IE returns this for a bad port\n        // http://msdn.microsoft.com/en-us/library/windows/desktop/aa383770(v=vs.85).aspx\n        if (status === 12005 || status === 12029) {\n          status = 0;\n        }\n\n        debug('finish', status, x.responseText);\n        self.emit('finish', status, x.responseText);\n        self._cleanup(false);\n        break;\n      }\n    }\n  };\n\n  try {\n    self.xhr.send(payload);\n  } catch (e) {\n    self.emit('finish', 0, '');\n    self._cleanup(false);\n  }\n};\n\nAbstractXHRObject.prototype._cleanup = function(abort) {\n  debug('cleanup');\n  if (!this.xhr) {\n    return;\n  }\n  this.removeAllListeners();\n  utils.unloadDel(this.unloadRef);\n\n  // IE needs this field to be a function\n  this.xhr.onreadystatechange = function() {};\n  if (this.xhr.ontimeout) {\n    this.xhr.ontimeout = null;\n  }\n\n  if (abort) {\n    try {\n      this.xhr.abort();\n    } catch (x) {\n      // intentionally empty\n    }\n  }\n  this.unloadRef = this.xhr = null;\n};\n\nAbstractXHRObject.prototype.close = function() {\n  debug('close');\n  this._cleanup(true);\n};\n\nAbstractXHRObject.enabled = !!XHR;\n// override XMLHttpRequest for IE6/7\n// obfuscate to avoid firewalls\nvar axo = ['Active'].concat('Object').join('X');\nif (!AbstractXHRObject.enabled && (axo in global)) {\n  debug('overriding xmlhttprequest');\n  XHR = function() {\n    try {\n      return new global[axo]('Microsoft.XMLHTTP');\n    } catch (e) {\n      return null;\n    }\n  };\n  AbstractXHRObject.enabled = !!new XHR();\n}\n\nvar cors = false;\ntry {\n  cors = 'withCredentials' in new XHR();\n} catch (ignored) {\n  // intentionally empty\n}\n\nAbstractXHRObject.supportsCORS = cors;\n\nmodule.exports = AbstractXHRObject;\n","module.exports = global.EventSource;\n","'use strict';\n\nvar Driver = global.WebSocket || global.MozWebSocket;\nif (Driver) {\n\tmodule.exports = function WebSocketBrowserDriver(url) {\n\t\treturn new Driver(url);\n\t};\n} else {\n\tmodule.exports = undefined;\n}\n","'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , EventSourceReceiver = require('./receiver/eventsource')\n  , XHRCorsObject = require('./sender/xhr-cors')\n  , EventSourceDriver = require('eventsource')\n  ;\n\nfunction EventSourceTransport(transUrl) {\n  if (!EventSourceTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n\n  AjaxBasedTransport.call(this, transUrl, '/eventsource', EventSourceReceiver, XHRCorsObject);\n}\n\ninherits(EventSourceTransport, AjaxBasedTransport);\n\nEventSourceTransport.enabled = function() {\n  return !!EventSourceDriver;\n};\n\nEventSourceTransport.transportName = 'eventsource';\nEventSourceTransport.roundTrips = 2;\n\nmodule.exports = EventSourceTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , HtmlfileReceiver = require('./receiver/htmlfile')\n  , XHRLocalObject = require('./sender/xhr-local')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  ;\n\nfunction HtmlFileTransport(transUrl) {\n  if (!HtmlfileReceiver.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/htmlfile', HtmlfileReceiver, XHRLocalObject);\n}\n\ninherits(HtmlFileTransport, AjaxBasedTransport);\n\nHtmlFileTransport.enabled = function(info) {\n  return HtmlfileReceiver.enabled && info.sameOrigin;\n};\n\nHtmlFileTransport.transportName = 'htmlfile';\nHtmlFileTransport.roundTrips = 2;\n\nmodule.exports = HtmlFileTransport;\n","'use strict';\n\n// Few cool transports do work only for same-origin. In order to make\n// them work cross-domain we shall use iframe, served from the\n// remote domain. New browsers have capabilities to communicate with\n// cross domain iframe using postMessage(). In IE it was implemented\n// from IE 8+, but of course, IE got some details wrong:\n//    http://msdn.microsoft.com/en-us/library/cc197015(v=VS.85).aspx\n//    http://stevesouders.com/misc/test-postmessage.php\n\nvar inherits = require('inherits')\n  , JSON3 = require('json3')\n  , EventEmitter = require('events').EventEmitter\n  , version = require('../version')\n  , urlUtils = require('../utils/url')\n  , iframeUtils = require('../utils/iframe')\n  , eventUtils = require('../utils/event')\n  , random = require('../utils/random')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:transport:iframe');\n}\n\nfunction IframeTransport(transport, transUrl, baseUrl) {\n  if (!IframeTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n  EventEmitter.call(this);\n\n  var self = this;\n  this.origin = urlUtils.getOrigin(baseUrl);\n  this.baseUrl = baseUrl;\n  this.transUrl = transUrl;\n  this.transport = transport;\n  this.windowId = random.string(8);\n\n  var iframeUrl = urlUtils.addPath(baseUrl, '/iframe.html') + '#' + this.windowId;\n  debug(transport, transUrl, iframeUrl);\n\n  this.iframeObj = iframeUtils.createIframe(iframeUrl, function(r) {\n    debug('err callback');\n    self.emit('close', 1006, 'Unable to load an iframe (' + r + ')');\n    self.close();\n  });\n\n  this.onmessageCallback = this._message.bind(this);\n  eventUtils.attachEvent('message', this.onmessageCallback);\n}\n\ninherits(IframeTransport, EventEmitter);\n\nIframeTransport.prototype.close = function() {\n  debug('close');\n  this.removeAllListeners();\n  if (this.iframeObj) {\n    eventUtils.detachEvent('message', this.onmessageCallback);\n    try {\n      // When the iframe is not loaded, IE raises an exception\n      // on 'contentWindow'.\n      this.postMessage('c');\n    } catch (x) {\n      // intentionally empty\n    }\n    this.iframeObj.cleanup();\n    this.iframeObj = null;\n    this.onmessageCallback = this.iframeObj = null;\n  }\n};\n\nIframeTransport.prototype._message = function(e) {\n  debug('message', e.data);\n  if (!urlUtils.isOriginEqual(e.origin, this.origin)) {\n    debug('not same origin', e.origin, this.origin);\n    return;\n  }\n\n  var iframeMessage;\n  try {\n    iframeMessage = JSON3.parse(e.data);\n  } catch (ignored) {\n    debug('bad json', e.data);\n    return;\n  }\n\n  if (iframeMessage.windowId !== this.windowId) {\n    debug('mismatched window id', iframeMessage.windowId, this.windowId);\n    return;\n  }\n\n  switch (iframeMessage.type) {\n  case 's':\n    this.iframeObj.loaded();\n    // window global dependency\n    this.postMessage('s', JSON3.stringify([\n      version\n    , this.transport\n    , this.transUrl\n    , this.baseUrl\n    ]));\n    break;\n  case 't':\n    this.emit('message', iframeMessage.data);\n    break;\n  case 'c':\n    var cdata;\n    try {\n      cdata = JSON3.parse(iframeMessage.data);\n    } catch (ignored) {\n      debug('bad json', iframeMessage.data);\n      return;\n    }\n    this.emit('close', cdata[0], cdata[1]);\n    this.close();\n    break;\n  }\n};\n\nIframeTransport.prototype.postMessage = function(type, data) {\n  debug('postMessage', type, data);\n  this.iframeObj.post(JSON3.stringify({\n    windowId: this.windowId\n  , type: type\n  , data: data || ''\n  }), this.origin);\n};\n\nIframeTransport.prototype.send = function(message) {\n  debug('send', message);\n  this.postMessage('m', message);\n};\n\nIframeTransport.enabled = function() {\n  return iframeUtils.iframeEnabled;\n};\n\nIframeTransport.transportName = 'iframe';\nIframeTransport.roundTrips = 2;\n\nmodule.exports = IframeTransport;\n","'use strict';\n\n// The simplest and most robust transport, using the well-know cross\n// domain hack - JSONP. This transport is quite inefficient - one\n// message could use up to one http request. But at least it works almost\n// everywhere.\n// Known limitations:\n//   o you will get a spinning cursor\n//   o for Konqueror a dumb timer is needed to detect errors\n\nvar inherits = require('inherits')\n  , SenderReceiver = require('./lib/sender-receiver')\n  , JsonpReceiver = require('./receiver/jsonp')\n  , jsonpSender = require('./sender/jsonp')\n  ;\n\nfunction JsonPTransport(transUrl) {\n  if (!JsonPTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n  SenderReceiver.call(this, transUrl, '/jsonp', jsonpSender, JsonpReceiver);\n}\n\ninherits(JsonPTransport, SenderReceiver);\n\nJsonPTransport.enabled = function() {\n  return !!global.document;\n};\n\nJsonPTransport.transportName = 'jsonp-polling';\nJsonPTransport.roundTrips = 1;\nJsonPTransport.needBody = true;\n\nmodule.exports = JsonPTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , urlUtils = require('../../utils/url')\n  , SenderReceiver = require('./sender-receiver')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:ajax-based');\n}\n\nfunction createAjaxSender(AjaxObject) {\n  return function(url, payload, callback) {\n    debug('create ajax sender', url, payload);\n    var opt = {};\n    if (typeof payload === 'string') {\n      opt.headers = {'Content-type': 'text/plain'};\n    }\n    var ajaxUrl = urlUtils.addPath(url, '/xhr_send');\n    var xo = new AjaxObject('POST', ajaxUrl, payload, opt);\n    xo.once('finish', function(status) {\n      debug('finish', status);\n      xo = null;\n\n      if (status !== 200 && status !== 204) {\n        return callback(new Error('http status ' + status));\n      }\n      callback();\n    });\n    return function() {\n      debug('abort');\n      xo.close();\n      xo = null;\n\n      var err = new Error('Aborted');\n      err.code = 1000;\n      callback(err);\n    };\n  };\n}\n\nfunction AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject) {\n  SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject), Receiver, AjaxObject);\n}\n\ninherits(AjaxBasedTransport, SenderReceiver);\n\nmodule.exports = AjaxBasedTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:buffered-sender');\n}\n\nfunction BufferedSender(url, sender) {\n  debug(url);\n  EventEmitter.call(this);\n  this.sendBuffer = [];\n  this.sender = sender;\n  this.url = url;\n}\n\ninherits(BufferedSender, EventEmitter);\n\nBufferedSender.prototype.send = function(message) {\n  debug('send', message);\n  this.sendBuffer.push(message);\n  if (!this.sendStop) {\n    this.sendSchedule();\n  }\n};\n\n// For polling transports in a situation when in the message callback,\n// new message is being send. If the sending connection was started\n// before receiving one, it is possible to saturate the network and\n// timeout due to the lack of receiving socket. To avoid that we delay\n// sending messages by some small time, in order to let receiving\n// connection be started beforehand. This is only a halfmeasure and\n// does not fix the big problem, but it does make the tests go more\n// stable on slow networks.\nBufferedSender.prototype.sendScheduleWait = function() {\n  debug('sendScheduleWait');\n  var self = this;\n  var tref;\n  this.sendStop = function() {\n    debug('sendStop');\n    self.sendStop = null;\n    clearTimeout(tref);\n  };\n  tref = setTimeout(function() {\n    debug('timeout');\n    self.sendStop = null;\n    self.sendSchedule();\n  }, 25);\n};\n\nBufferedSender.prototype.sendSchedule = function() {\n  debug('sendSchedule', this.sendBuffer.length);\n  var self = this;\n  if (this.sendBuffer.length > 0) {\n    var payload = '[' + this.sendBuffer.join(',') + ']';\n    this.sendStop = this.sender(this.url, payload, function(err) {\n      self.sendStop = null;\n      if (err) {\n        debug('error', err);\n        self.emit('close', err.code || 1006, 'Sending error: ' + err);\n        self.close();\n      } else {\n        self.sendScheduleWait();\n      }\n    });\n    this.sendBuffer = [];\n  }\n};\n\nBufferedSender.prototype._cleanup = function() {\n  debug('_cleanup');\n  this.removeAllListeners();\n};\n\nBufferedSender.prototype.close = function() {\n  debug('close');\n  this._cleanup();\n  if (this.sendStop) {\n    this.sendStop();\n    this.sendStop = null;\n  }\n};\n\nmodule.exports = BufferedSender;\n","'use strict';\n\nvar inherits = require('inherits')\n  , IframeTransport = require('../iframe')\n  , objectUtils = require('../../utils/object')\n  ;\n\nmodule.exports = function(transport) {\n\n  function IframeWrapTransport(transUrl, baseUrl) {\n    IframeTransport.call(this, transport.transportName, transUrl, baseUrl);\n  }\n\n  inherits(IframeWrapTransport, IframeTransport);\n\n  IframeWrapTransport.enabled = function(url, info) {\n    if (!global.document) {\n      return false;\n    }\n\n    var iframeInfo = objectUtils.extend({}, info);\n    iframeInfo.sameOrigin = true;\n    return transport.enabled(iframeInfo) && IframeTransport.enabled();\n  };\n\n  IframeWrapTransport.transportName = 'iframe-' + transport.transportName;\n  IframeWrapTransport.needBody = true;\n  IframeWrapTransport.roundTrips = IframeTransport.roundTrips + transport.roundTrips - 1; // html, javascript (2) + transport - no CORS (1)\n\n  IframeWrapTransport.facadeTransport = transport;\n\n  return IframeWrapTransport;\n};\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:polling');\n}\n\nfunction Polling(Receiver, receiveUrl, AjaxObject) {\n  debug(receiveUrl);\n  EventEmitter.call(this);\n  this.Receiver = Receiver;\n  this.receiveUrl = receiveUrl;\n  this.AjaxObject = AjaxObject;\n  this._scheduleReceiver();\n}\n\ninherits(Polling, EventEmitter);\n\nPolling.prototype._scheduleReceiver = function() {\n  debug('_scheduleReceiver');\n  var self = this;\n  var poll = this.poll = new this.Receiver(this.receiveUrl, this.AjaxObject);\n\n  poll.on('message', function(msg) {\n    debug('message', msg);\n    self.emit('message', msg);\n  });\n\n  poll.once('close', function(code, reason) {\n    debug('close', code, reason, self.pollIsClosing);\n    self.poll = poll = null;\n\n    if (!self.pollIsClosing) {\n      if (reason === 'network') {\n        self._scheduleReceiver();\n      } else {\n        self.emit('close', code || 1006, reason);\n        self.removeAllListeners();\n      }\n    }\n  });\n};\n\nPolling.prototype.abort = function() {\n  debug('abort');\n  this.removeAllListeners();\n  this.pollIsClosing = true;\n  if (this.poll) {\n    this.poll.abort();\n  }\n};\n\nmodule.exports = Polling;\n","'use strict';\n\nvar inherits = require('inherits')\n  , urlUtils = require('../../utils/url')\n  , BufferedSender = require('./buffered-sender')\n  , Polling = require('./polling')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:sender-receiver');\n}\n\nfunction SenderReceiver(transUrl, urlSuffix, senderFunc, Receiver, AjaxObject) {\n  var pollUrl = urlUtils.addPath(transUrl, urlSuffix);\n  debug(pollUrl);\n  var self = this;\n  BufferedSender.call(this, transUrl, senderFunc);\n\n  this.poll = new Polling(Receiver, pollUrl, AjaxObject);\n  this.poll.on('message', function(msg) {\n    debug('poll message', msg);\n    self.emit('message', msg);\n  });\n  this.poll.once('close', function(code, reason) {\n    debug('poll close', code, reason);\n    self.poll = null;\n    self.emit('close', code, reason);\n    self.close();\n  });\n}\n\ninherits(SenderReceiver, BufferedSender);\n\nSenderReceiver.prototype.close = function() {\n  BufferedSender.prototype.close.call(this);\n  debug('close');\n  this.removeAllListeners();\n  if (this.poll) {\n    this.poll.abort();\n    this.poll = null;\n  }\n};\n\nmodule.exports = SenderReceiver;\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  , EventSourceDriver = require('eventsource')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:eventsource');\n}\n\nfunction EventSourceReceiver(url) {\n  debug(url);\n  EventEmitter.call(this);\n\n  var self = this;\n  var es = this.es = new EventSourceDriver(url);\n  es.onmessage = function(e) {\n    debug('message', e.data);\n    self.emit('message', decodeURI(e.data));\n  };\n  es.onerror = function(e) {\n    debug('error', es.readyState, e);\n    // ES on reconnection has readyState = 0 or 1.\n    // on network error it's CLOSED = 2\n    var reason = (es.readyState !== 2 ? 'network' : 'permanent');\n    self._cleanup();\n    self._close(reason);\n  };\n}\n\ninherits(EventSourceReceiver, EventEmitter);\n\nEventSourceReceiver.prototype.abort = function() {\n  debug('abort');\n  this._cleanup();\n  this._close('user');\n};\n\nEventSourceReceiver.prototype._cleanup = function() {\n  debug('cleanup');\n  var es = this.es;\n  if (es) {\n    es.onmessage = es.onerror = null;\n    es.close();\n    this.es = null;\n  }\n};\n\nEventSourceReceiver.prototype._close = function(reason) {\n  debug('close', reason);\n  var self = this;\n  // Safari and chrome < 15 crash if we close window before\n  // waiting for ES cleanup. See:\n  // https://code.google.com/p/chromium/issues/detail?id=89155\n  setTimeout(function() {\n    self.emit('close', null, reason);\n    self.removeAllListeners();\n  }, 200);\n};\n\nmodule.exports = EventSourceReceiver;\n","'use strict';\n\nvar inherits = require('inherits')\n  , iframeUtils = require('../../utils/iframe')\n  , urlUtils = require('../../utils/url')\n  , EventEmitter = require('events').EventEmitter\n  , random = require('../../utils/random')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:htmlfile');\n}\n\nfunction HtmlfileReceiver(url) {\n  debug(url);\n  EventEmitter.call(this);\n  var self = this;\n  iframeUtils.polluteGlobalNamespace();\n\n  this.id = 'a' + random.string(6);\n  url = urlUtils.addQuery(url, 'c=' + decodeURIComponent(iframeUtils.WPrefix + '.' + this.id));\n\n  debug('using htmlfile', HtmlfileReceiver.htmlfileEnabled);\n  var constructFunc = HtmlfileReceiver.htmlfileEnabled ?\n      iframeUtils.createHtmlfile : iframeUtils.createIframe;\n\n  global[iframeUtils.WPrefix][this.id] = {\n    start: function() {\n      debug('start');\n      self.iframeObj.loaded();\n    }\n  , message: function(data) {\n      debug('message', data);\n      self.emit('message', data);\n    }\n  , stop: function() {\n      debug('stop');\n      self._cleanup();\n      self._close('network');\n    }\n  };\n  this.iframeObj = constructFunc(url, function() {\n    debug('callback');\n    self._cleanup();\n    self._close('permanent');\n  });\n}\n\ninherits(HtmlfileReceiver, EventEmitter);\n\nHtmlfileReceiver.prototype.abort = function() {\n  debug('abort');\n  this._cleanup();\n  this._close('user');\n};\n\nHtmlfileReceiver.prototype._cleanup = function() {\n  debug('_cleanup');\n  if (this.iframeObj) {\n    this.iframeObj.cleanup();\n    this.iframeObj = null;\n  }\n  delete global[iframeUtils.WPrefix][this.id];\n};\n\nHtmlfileReceiver.prototype._close = function(reason) {\n  debug('_close', reason);\n  this.emit('close', null, reason);\n  this.removeAllListeners();\n};\n\nHtmlfileReceiver.htmlfileEnabled = false;\n\n// obfuscate to avoid firewalls\nvar axo = ['Active'].concat('Object').join('X');\nif (axo in global) {\n  try {\n    HtmlfileReceiver.htmlfileEnabled = !!new global[axo]('htmlfile');\n  } catch (x) {\n    // intentionally empty\n  }\n}\n\nHtmlfileReceiver.enabled = HtmlfileReceiver.htmlfileEnabled || iframeUtils.iframeEnabled;\n\nmodule.exports = HtmlfileReceiver;\n","'use strict';\n\nvar utils = require('../../utils/iframe')\n  , random = require('../../utils/random')\n  , browser = require('../../utils/browser')\n  , urlUtils = require('../../utils/url')\n  , inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:jsonp');\n}\n\nfunction JsonpReceiver(url) {\n  debug(url);\n  var self = this;\n  EventEmitter.call(this);\n\n  utils.polluteGlobalNamespace();\n\n  this.id = 'a' + random.string(6);\n  var urlWithId = urlUtils.addQuery(url, 'c=' + encodeURIComponent(utils.WPrefix + '.' + this.id));\n\n  global[utils.WPrefix][this.id] = this._callback.bind(this);\n  this._createScript(urlWithId);\n\n  // Fallback mostly for Konqueror - stupid timer, 35 seconds shall be plenty.\n  this.timeoutId = setTimeout(function() {\n    debug('timeout');\n    self._abort(new Error('JSONP script loaded abnormally (timeout)'));\n  }, JsonpReceiver.timeout);\n}\n\ninherits(JsonpReceiver, EventEmitter);\n\nJsonpReceiver.prototype.abort = function() {\n  debug('abort');\n  if (global[utils.WPrefix][this.id]) {\n    var err = new Error('JSONP user aborted read');\n    err.code = 1000;\n    this._abort(err);\n  }\n};\n\nJsonpReceiver.timeout = 35000;\nJsonpReceiver.scriptErrorTimeout = 1000;\n\nJsonpReceiver.prototype._callback = function(data) {\n  debug('_callback', data);\n  this._cleanup();\n\n  if (this.aborting) {\n    return;\n  }\n\n  if (data) {\n    debug('message', data);\n    this.emit('message', data);\n  }\n  this.emit('close', null, 'network');\n  this.removeAllListeners();\n};\n\nJsonpReceiver.prototype._abort = function(err) {\n  debug('_abort', err);\n  this._cleanup();\n  this.aborting = true;\n  this.emit('close', err.code, err.message);\n  this.removeAllListeners();\n};\n\nJsonpReceiver.prototype._cleanup = function() {\n  debug('_cleanup');\n  clearTimeout(this.timeoutId);\n  if (this.script2) {\n    this.script2.parentNode.removeChild(this.script2);\n    this.script2 = null;\n  }\n  if (this.script) {\n    var script = this.script;\n    // Unfortunately, you can't really abort script loading of\n    // the script.\n    script.parentNode.removeChild(script);\n    script.onreadystatechange = script.onerror =\n        script.onload = script.onclick = null;\n    this.script = null;\n  }\n  delete global[utils.WPrefix][this.id];\n};\n\nJsonpReceiver.prototype._scriptError = function() {\n  debug('_scriptError');\n  var self = this;\n  if (this.errorTimer) {\n    return;\n  }\n\n  this.errorTimer = setTimeout(function() {\n    if (!self.loadedOkay) {\n      self._abort(new Error('JSONP script loaded abnormally (onerror)'));\n    }\n  }, JsonpReceiver.scriptErrorTimeout);\n};\n\nJsonpReceiver.prototype._createScript = function(url) {\n  debug('_createScript', url);\n  var self = this;\n  var script = this.script = global.document.createElement('script');\n  var script2;  // Opera synchronous load trick.\n\n  script.id = 'a' + random.string(8);\n  script.src = url;\n  script.type = 'text/javascript';\n  script.charset = 'UTF-8';\n  script.onerror = this._scriptError.bind(this);\n  script.onload = function() {\n    debug('onload');\n    self._abort(new Error('JSONP script loaded abnormally (onload)'));\n  };\n\n  // IE9 fires 'error' event after onreadystatechange or before, in random order.\n  // Use loadedOkay to determine if actually errored\n  script.onreadystatechange = function() {\n    debug('onreadystatechange', script.readyState);\n    if (/loaded|closed/.test(script.readyState)) {\n      if (script && script.htmlFor && script.onclick) {\n        self.loadedOkay = true;\n        try {\n          // In IE, actually execute the script.\n          script.onclick();\n        } catch (x) {\n          // intentionally empty\n        }\n      }\n      if (script) {\n        self._abort(new Error('JSONP script loaded abnormally (onreadystatechange)'));\n      }\n    }\n  };\n  // IE: event/htmlFor/onclick trick.\n  // One can't rely on proper order for onreadystatechange. In order to\n  // make sure, set a 'htmlFor' and 'event' properties, so that\n  // script code will be installed as 'onclick' handler for the\n  // script object. Later, onreadystatechange, manually execute this\n  // code. FF and Chrome doesn't work with 'event' and 'htmlFor'\n  // set. For reference see:\n  //   http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html\n  // Also, read on that about script ordering:\n  //   http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order\n  if (typeof script.async === 'undefined' && global.document.attachEvent) {\n    // According to mozilla docs, in recent browsers script.async defaults\n    // to 'true', so we may use it to detect a good browser:\n    // https://developer.mozilla.org/en/HTML/Element/script\n    if (!browser.isOpera()) {\n      // Naively assume we're in IE\n      try {\n        script.htmlFor = script.id;\n        script.event = 'onclick';\n      } catch (x) {\n        // intentionally empty\n      }\n      script.async = true;\n    } else {\n      // Opera, second sync script hack\n      script2 = this.script2 = global.document.createElement('script');\n      script2.text = \"try{var a = document.getElementById('\" + script.id + \"'); if(a)a.onerror();}catch(x){};\";\n      script.async = script2.async = false;\n    }\n  }\n  if (typeof script.async !== 'undefined') {\n    script.async = true;\n  }\n\n  var head = global.document.getElementsByTagName('head')[0];\n  head.insertBefore(script, head.firstChild);\n  if (script2) {\n    head.insertBefore(script2, head.firstChild);\n  }\n};\n\nmodule.exports = JsonpReceiver;\n","'use strict';\n\nvar inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:receiver:xhr');\n}\n\nfunction XhrReceiver(url, AjaxObject) {\n  debug(url);\n  EventEmitter.call(this);\n  var self = this;\n\n  this.bufferPosition = 0;\n\n  this.xo = new AjaxObject('POST', url, null);\n  this.xo.on('chunk', this._chunkHandler.bind(this));\n  this.xo.once('finish', function(status, text) {\n    debug('finish', status, text);\n    self._chunkHandler(status, text);\n    self.xo = null;\n    var reason = status === 200 ? 'network' : 'permanent';\n    debug('close', reason);\n    self.emit('close', null, reason);\n    self._cleanup();\n  });\n}\n\ninherits(XhrReceiver, EventEmitter);\n\nXhrReceiver.prototype._chunkHandler = function(status, text) {\n  debug('_chunkHandler', status);\n  if (status !== 200 || !text) {\n    return;\n  }\n\n  for (var idx = -1; ; this.bufferPosition += idx + 1) {\n    var buf = text.slice(this.bufferPosition);\n    idx = buf.indexOf('\\n');\n    if (idx === -1) {\n      break;\n    }\n    var msg = buf.slice(0, idx);\n    if (msg) {\n      debug('message', msg);\n      this.emit('message', msg);\n    }\n  }\n};\n\nXhrReceiver.prototype._cleanup = function() {\n  debug('_cleanup');\n  this.removeAllListeners();\n};\n\nXhrReceiver.prototype.abort = function() {\n  debug('abort');\n  if (this.xo) {\n    this.xo.close();\n    debug('close');\n    this.emit('close', null, 'user');\n    this.xo = null;\n  }\n  this._cleanup();\n};\n\nmodule.exports = XhrReceiver;\n","'use strict';\n\nvar random = require('../../utils/random')\n  , urlUtils = require('../../utils/url')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:sender:jsonp');\n}\n\nvar form, area;\n\nfunction createIframe(id) {\n  debug('createIframe', id);\n  try {\n    // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n    return global.document.createElement('<iframe name=\"' + id + '\">');\n  } catch (x) {\n    var iframe = global.document.createElement('iframe');\n    iframe.name = id;\n    return iframe;\n  }\n}\n\nfunction createForm() {\n  debug('createForm');\n  form = global.document.createElement('form');\n  form.style.display = 'none';\n  form.style.position = 'absolute';\n  form.method = 'POST';\n  form.enctype = 'application/x-www-form-urlencoded';\n  form.acceptCharset = 'UTF-8';\n\n  area = global.document.createElement('textarea');\n  area.name = 'd';\n  form.appendChild(area);\n\n  global.document.body.appendChild(form);\n}\n\nmodule.exports = function(url, payload, callback) {\n  debug(url, payload);\n  if (!form) {\n    createForm();\n  }\n  var id = 'a' + random.string(8);\n  form.target = id;\n  form.action = urlUtils.addQuery(urlUtils.addPath(url, '/jsonp_send'), 'i=' + id);\n\n  var iframe = createIframe(id);\n  iframe.id = id;\n  iframe.style.display = 'none';\n  form.appendChild(iframe);\n\n  try {\n    area.value = payload;\n  } catch (e) {\n    // seriously broken browsers get here\n  }\n  form.submit();\n\n  var completed = function(err) {\n    debug('completed', id, err);\n    if (!iframe.onerror) {\n      return;\n    }\n    iframe.onreadystatechange = iframe.onerror = iframe.onload = null;\n    // Opera mini doesn't like if we GC iframe\n    // immediately, thus this timeout.\n    setTimeout(function() {\n      debug('cleaning up', id);\n      iframe.parentNode.removeChild(iframe);\n      iframe = null;\n    }, 500);\n    area.value = '';\n    // It is not possible to detect if the iframe succeeded or\n    // failed to submit our form.\n    callback(err);\n  };\n  iframe.onerror = function() {\n    debug('onerror', id);\n    completed();\n  };\n  iframe.onload = function() {\n    debug('onload', id);\n    completed();\n  };\n  iframe.onreadystatechange = function(e) {\n    debug('onreadystatechange', id, iframe.readyState, e);\n    if (iframe.readyState === 'complete') {\n      completed();\n    }\n  };\n  return function() {\n    debug('aborted', id);\n    completed(new Error('Aborted'));\n  };\n};\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  , eventUtils = require('../../utils/event')\n  , browser = require('../../utils/browser')\n  , urlUtils = require('../../utils/url')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:sender:xdr');\n}\n\n// References:\n//   http://ajaxian.com/archives/100-line-ajax-wrapper\n//   http://msdn.microsoft.com/en-us/library/cc288060(v=VS.85).aspx\n\nfunction XDRObject(method, url, payload) {\n  debug(method, url);\n  var self = this;\n  EventEmitter.call(this);\n\n  setTimeout(function() {\n    self._start(method, url, payload);\n  }, 0);\n}\n\ninherits(XDRObject, EventEmitter);\n\nXDRObject.prototype._start = function(method, url, payload) {\n  debug('_start');\n  var self = this;\n  var xdr = new global.XDomainRequest();\n  // IE caches even POSTs\n  url = urlUtils.addQuery(url, 't=' + (+new Date()));\n\n  xdr.onerror = function() {\n    debug('onerror');\n    self._error();\n  };\n  xdr.ontimeout = function() {\n    debug('ontimeout');\n    self._error();\n  };\n  xdr.onprogress = function() {\n    debug('progress', xdr.responseText);\n    self.emit('chunk', 200, xdr.responseText);\n  };\n  xdr.onload = function() {\n    debug('load');\n    self.emit('finish', 200, xdr.responseText);\n    self._cleanup(false);\n  };\n  this.xdr = xdr;\n  this.unloadRef = eventUtils.unloadAdd(function() {\n    self._cleanup(true);\n  });\n  try {\n    // Fails with AccessDenied if port number is bogus\n    this.xdr.open(method, url);\n    if (this.timeout) {\n      this.xdr.timeout = this.timeout;\n    }\n    this.xdr.send(payload);\n  } catch (x) {\n    this._error();\n  }\n};\n\nXDRObject.prototype._error = function() {\n  this.emit('finish', 0, '');\n  this._cleanup(false);\n};\n\nXDRObject.prototype._cleanup = function(abort) {\n  debug('cleanup', abort);\n  if (!this.xdr) {\n    return;\n  }\n  this.removeAllListeners();\n  eventUtils.unloadDel(this.unloadRef);\n\n  this.xdr.ontimeout = this.xdr.onerror = this.xdr.onprogress = this.xdr.onload = null;\n  if (abort) {\n    try {\n      this.xdr.abort();\n    } catch (x) {\n      // intentionally empty\n    }\n  }\n  this.unloadRef = this.xdr = null;\n};\n\nXDRObject.prototype.close = function() {\n  debug('close');\n  this._cleanup(true);\n};\n\n// IE 8/9 if the request target uses the same scheme - #79\nXDRObject.enabled = !!(global.XDomainRequest && browser.hasDomain());\n\nmodule.exports = XDRObject;\n","'use strict';\n\nvar inherits = require('inherits')\n  , XhrDriver = require('../driver/xhr')\n  ;\n\nfunction XHRCorsObject(method, url, payload, opts) {\n  XhrDriver.call(this, method, url, payload, opts);\n}\n\ninherits(XHRCorsObject, XhrDriver);\n\nXHRCorsObject.enabled = XhrDriver.enabled && XhrDriver.supportsCORS;\n\nmodule.exports = XHRCorsObject;\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n  , inherits = require('inherits')\n  ;\n\nfunction XHRFake(/* method, url, payload, opts */) {\n  var self = this;\n  EventEmitter.call(this);\n\n  this.to = setTimeout(function() {\n    self.emit('finish', 200, '{}');\n  }, XHRFake.timeout);\n}\n\ninherits(XHRFake, EventEmitter);\n\nXHRFake.prototype.close = function() {\n  clearTimeout(this.to);\n};\n\nXHRFake.timeout = 2000;\n\nmodule.exports = XHRFake;\n","'use strict';\n\nvar inherits = require('inherits')\n  , XhrDriver = require('../driver/xhr')\n  ;\n\nfunction XHRLocalObject(method, url, payload /*, opts */) {\n  XhrDriver.call(this, method, url, payload, {\n    noCredentials: true\n  });\n}\n\ninherits(XHRLocalObject, XhrDriver);\n\nXHRLocalObject.enabled = XhrDriver.enabled;\n\nmodule.exports = XHRLocalObject;\n","'use strict';\n\nvar utils = require('../utils/event')\n  , urlUtils = require('../utils/url')\n  , inherits = require('inherits')\n  , EventEmitter = require('events').EventEmitter\n  , WebsocketDriver = require('./driver/websocket')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:websocket');\n}\n\nfunction WebSocketTransport(transUrl, ignore, options) {\n  if (!WebSocketTransport.enabled()) {\n    throw new Error('Transport created when disabled');\n  }\n\n  EventEmitter.call(this);\n  debug('constructor', transUrl);\n\n  var self = this;\n  var url = urlUtils.addPath(transUrl, '/websocket');\n  if (url.slice(0, 5) === 'https') {\n    url = 'wss' + url.slice(5);\n  } else {\n    url = 'ws' + url.slice(4);\n  }\n  this.url = url;\n\n  this.ws = new WebsocketDriver(this.url, [], options);\n  this.ws.onmessage = function(e) {\n    debug('message event', e.data);\n    self.emit('message', e.data);\n  };\n  // Firefox has an interesting bug. If a websocket connection is\n  // created after onunload, it stays alive even when user\n  // navigates away from the page. In such situation let's lie -\n  // let's not open the ws connection at all. See:\n  // https://github.com/sockjs/sockjs-client/issues/28\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=696085\n  this.unloadRef = utils.unloadAdd(function() {\n    debug('unload');\n    self.ws.close();\n  });\n  this.ws.onclose = function(e) {\n    debug('close event', e.code, e.reason);\n    self.emit('close', e.code, e.reason);\n    self._cleanup();\n  };\n  this.ws.onerror = function(e) {\n    debug('error event', e);\n    self.emit('close', 1006, 'WebSocket connection broken');\n    self._cleanup();\n  };\n}\n\ninherits(WebSocketTransport, EventEmitter);\n\nWebSocketTransport.prototype.send = function(data) {\n  var msg = '[' + data + ']';\n  debug('send', msg);\n  this.ws.send(msg);\n};\n\nWebSocketTransport.prototype.close = function() {\n  debug('close');\n  var ws = this.ws;\n  this._cleanup();\n  if (ws) {\n    ws.close();\n  }\n};\n\nWebSocketTransport.prototype._cleanup = function() {\n  debug('_cleanup');\n  var ws = this.ws;\n  if (ws) {\n    ws.onmessage = ws.onclose = ws.onerror = null;\n  }\n  utils.unloadDel(this.unloadRef);\n  this.unloadRef = this.ws = null;\n  this.removeAllListeners();\n};\n\nWebSocketTransport.enabled = function() {\n  debug('enabled');\n  return !!WebsocketDriver;\n};\nWebSocketTransport.transportName = 'websocket';\n\n// In theory, ws should require 1 round trip. But in chrome, this is\n// not very stable over SSL. Most likely a ws connection requires a\n// separate SSL connection, in which case 2 round trips are an\n// absolute minumum.\nWebSocketTransport.roundTrips = 2;\n\nmodule.exports = WebSocketTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XdrStreamingTransport = require('./xdr-streaming')\n  , XhrReceiver = require('./receiver/xhr')\n  , XDRObject = require('./sender/xdr')\n  ;\n\nfunction XdrPollingTransport(transUrl) {\n  if (!XDRObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XDRObject);\n}\n\ninherits(XdrPollingTransport, AjaxBasedTransport);\n\nXdrPollingTransport.enabled = XdrStreamingTransport.enabled;\nXdrPollingTransport.transportName = 'xdr-polling';\nXdrPollingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XdrPollingTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XhrReceiver = require('./receiver/xhr')\n  , XDRObject = require('./sender/xdr')\n  ;\n\n// According to:\n//   http://stackoverflow.com/questions/1641507/detect-browser-support-for-cross-domain-xmlhttprequests\n//   http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/\n\nfunction XdrStreamingTransport(transUrl) {\n  if (!XDRObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XDRObject);\n}\n\ninherits(XdrStreamingTransport, AjaxBasedTransport);\n\nXdrStreamingTransport.enabled = function(info) {\n  if (info.cookie_needed || info.nullOrigin) {\n    return false;\n  }\n  return XDRObject.enabled && info.sameScheme;\n};\n\nXdrStreamingTransport.transportName = 'xdr-streaming';\nXdrStreamingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XdrStreamingTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XhrReceiver = require('./receiver/xhr')\n  , XHRCorsObject = require('./sender/xhr-cors')\n  , XHRLocalObject = require('./sender/xhr-local')\n  ;\n\nfunction XhrPollingTransport(transUrl) {\n  if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XHRCorsObject);\n}\n\ninherits(XhrPollingTransport, AjaxBasedTransport);\n\nXhrPollingTransport.enabled = function(info) {\n  if (info.nullOrigin) {\n    return false;\n  }\n\n  if (XHRLocalObject.enabled && info.sameOrigin) {\n    return true;\n  }\n  return XHRCorsObject.enabled;\n};\n\nXhrPollingTransport.transportName = 'xhr-polling';\nXhrPollingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XhrPollingTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n  , AjaxBasedTransport = require('./lib/ajax-based')\n  , XhrReceiver = require('./receiver/xhr')\n  , XHRCorsObject = require('./sender/xhr-cors')\n  , XHRLocalObject = require('./sender/xhr-local')\n  , browser = require('../utils/browser')\n  ;\n\nfunction XhrStreamingTransport(transUrl) {\n  if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) {\n    throw new Error('Transport created when disabled');\n  }\n  AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XHRCorsObject);\n}\n\ninherits(XhrStreamingTransport, AjaxBasedTransport);\n\nXhrStreamingTransport.enabled = function(info) {\n  if (info.nullOrigin) {\n    return false;\n  }\n  // Opera doesn't support xhr-streaming #60\n  // But it might be able to #92\n  if (browser.isOpera()) {\n    return false;\n  }\n\n  return XHRCorsObject.enabled;\n};\n\nXhrStreamingTransport.transportName = 'xhr-streaming';\nXhrStreamingTransport.roundTrips = 2; // preflight, ajax\n\n// Safari gets confused when a streaming ajax request is started\n// before onload. This causes the load indicator to spin indefinetely.\n// Only require body when used in a browser\nXhrStreamingTransport.needBody = !!global.document;\n\nmodule.exports = XhrStreamingTransport;\n","'use strict';\n\nif (global.crypto && global.crypto.getRandomValues) {\n  module.exports.randomBytes = function(length) {\n    var bytes = new Uint8Array(length);\n    global.crypto.getRandomValues(bytes);\n    return bytes;\n  };\n} else {\n  module.exports.randomBytes = function(length) {\n    var bytes = new Array(length);\n    for (var i = 0; i < length; i++) {\n      bytes[i] = Math.floor(Math.random() * 256);\n    }\n    return bytes;\n  };\n}\n","'use strict';\n\nmodule.exports = {\n  isOpera: function() {\n    return global.navigator &&\n      /opera/i.test(global.navigator.userAgent);\n  }\n\n, isKonqueror: function() {\n    return global.navigator &&\n      /konqueror/i.test(global.navigator.userAgent);\n  }\n\n  // #187 wrap document.domain in try/catch because of WP8 from file:///\n, hasDomain: function () {\n    // non-browser client always has a domain\n    if (!global.document) {\n      return true;\n    }\n\n    try {\n      return !!global.document.domain;\n    } catch (e) {\n      return false;\n    }\n  }\n};\n","'use strict';\n\nvar JSON3 = require('json3');\n\n// Some extra characters that Chrome gets wrong, and substitutes with\n// something else on the wire.\n// eslint-disable-next-line no-control-regex\nvar extraEscapable = /[\\x00-\\x1f\\ud800-\\udfff\\ufffe\\uffff\\u0300-\\u0333\\u033d-\\u0346\\u034a-\\u034c\\u0350-\\u0352\\u0357-\\u0358\\u035c-\\u0362\\u0374\\u037e\\u0387\\u0591-\\u05af\\u05c4\\u0610-\\u0617\\u0653-\\u0654\\u0657-\\u065b\\u065d-\\u065e\\u06df-\\u06e2\\u06eb-\\u06ec\\u0730\\u0732-\\u0733\\u0735-\\u0736\\u073a\\u073d\\u073f-\\u0741\\u0743\\u0745\\u0747\\u07eb-\\u07f1\\u0951\\u0958-\\u095f\\u09dc-\\u09dd\\u09df\\u0a33\\u0a36\\u0a59-\\u0a5b\\u0a5e\\u0b5c-\\u0b5d\\u0e38-\\u0e39\\u0f43\\u0f4d\\u0f52\\u0f57\\u0f5c\\u0f69\\u0f72-\\u0f76\\u0f78\\u0f80-\\u0f83\\u0f93\\u0f9d\\u0fa2\\u0fa7\\u0fac\\u0fb9\\u1939-\\u193a\\u1a17\\u1b6b\\u1cda-\\u1cdb\\u1dc0-\\u1dcf\\u1dfc\\u1dfe\\u1f71\\u1f73\\u1f75\\u1f77\\u1f79\\u1f7b\\u1f7d\\u1fbb\\u1fbe\\u1fc9\\u1fcb\\u1fd3\\u1fdb\\u1fe3\\u1feb\\u1fee-\\u1fef\\u1ff9\\u1ffb\\u1ffd\\u2000-\\u2001\\u20d0-\\u20d1\\u20d4-\\u20d7\\u20e7-\\u20e9\\u2126\\u212a-\\u212b\\u2329-\\u232a\\u2adc\\u302b-\\u302c\\uaab2-\\uaab3\\uf900-\\ufa0d\\ufa10\\ufa12\\ufa15-\\ufa1e\\ufa20\\ufa22\\ufa25-\\ufa26\\ufa2a-\\ufa2d\\ufa30-\\ufa6d\\ufa70-\\ufad9\\ufb1d\\ufb1f\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4e\\ufff0-\\uffff]/g\n  , extraLookup;\n\n// This may be quite slow, so let's delay until user actually uses bad\n// characters.\nvar unrollLookup = function(escapable) {\n  var i;\n  var unrolled = {};\n  var c = [];\n  for (i = 0; i < 65536; i++) {\n    c.push( String.fromCharCode(i) );\n  }\n  escapable.lastIndex = 0;\n  c.join('').replace(escapable, function(a) {\n    unrolled[ a ] = '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n    return '';\n  });\n  escapable.lastIndex = 0;\n  return unrolled;\n};\n\n// Quote string, also taking care of unicode characters that browsers\n// often break. Especially, take care of unicode surrogates:\n// http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters#Surrogates\nmodule.exports = {\n  quote: function(string) {\n    var quoted = JSON3.stringify(string);\n\n    // In most cases this should be very fast and good enough.\n    extraEscapable.lastIndex = 0;\n    if (!extraEscapable.test(quoted)) {\n      return quoted;\n    }\n\n    if (!extraLookup) {\n      extraLookup = unrollLookup(extraEscapable);\n    }\n\n    return quoted.replace(extraEscapable, function(a) {\n      return extraLookup[a];\n    });\n  }\n};\n","'use strict';\n\nvar random = require('./random');\n\nvar onUnload = {}\n  , afterUnload = false\n    // detect google chrome packaged apps because they don't allow the 'unload' event\n  , isChromePackagedApp = global.chrome && global.chrome.app && global.chrome.app.runtime\n  ;\n\nmodule.exports = {\n  attachEvent: function(event, listener) {\n    if (typeof global.addEventListener !== 'undefined') {\n      global.addEventListener(event, listener, false);\n    } else if (global.document && global.attachEvent) {\n      // IE quirks.\n      // According to: http://stevesouders.com/misc/test-postmessage.php\n      // the message gets delivered only to 'document', not 'window'.\n      global.document.attachEvent('on' + event, listener);\n      // I get 'window' for ie8.\n      global.attachEvent('on' + event, listener);\n    }\n  }\n\n, detachEvent: function(event, listener) {\n    if (typeof global.addEventListener !== 'undefined') {\n      global.removeEventListener(event, listener, false);\n    } else if (global.document && global.detachEvent) {\n      global.document.detachEvent('on' + event, listener);\n      global.detachEvent('on' + event, listener);\n    }\n  }\n\n, unloadAdd: function(listener) {\n    if (isChromePackagedApp) {\n      return null;\n    }\n\n    var ref = random.string(8);\n    onUnload[ref] = listener;\n    if (afterUnload) {\n      setTimeout(this.triggerUnloadCallbacks, 0);\n    }\n    return ref;\n  }\n\n, unloadDel: function(ref) {\n    if (ref in onUnload) {\n      delete onUnload[ref];\n    }\n  }\n\n, triggerUnloadCallbacks: function() {\n    for (var ref in onUnload) {\n      onUnload[ref]();\n      delete onUnload[ref];\n    }\n  }\n};\n\nvar unloadTriggered = function() {\n  if (afterUnload) {\n    return;\n  }\n  afterUnload = true;\n  module.exports.triggerUnloadCallbacks();\n};\n\n// 'unload' alone is not reliable in opera within an iframe, but we\n// can't use `beforeunload` as IE fires it on javascript: links.\nif (!isChromePackagedApp) {\n  module.exports.attachEvent('unload', unloadTriggered);\n}\n","'use strict';\n\nvar eventUtils = require('./event')\n  , JSON3 = require('json3')\n  , browser = require('./browser')\n  ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:utils:iframe');\n}\n\nmodule.exports = {\n  WPrefix: '_jp'\n, currentWindowId: null\n\n, polluteGlobalNamespace: function() {\n    if (!(module.exports.WPrefix in global)) {\n      global[module.exports.WPrefix] = {};\n    }\n  }\n\n, postMessage: function(type, data) {\n    if (global.parent !== global) {\n      global.parent.postMessage(JSON3.stringify({\n        windowId: module.exports.currentWindowId\n      , type: type\n      , data: data || ''\n      }), '*');\n    } else {\n      debug('Cannot postMessage, no parent window.', type, data);\n    }\n  }\n\n, createIframe: function(iframeUrl, errorCallback) {\n    var iframe = global.document.createElement('iframe');\n    var tref, unloadRef;\n    var unattach = function() {\n      debug('unattach');\n      clearTimeout(tref);\n      // Explorer had problems with that.\n      try {\n        iframe.onload = null;\n      } catch (x) {\n        // intentionally empty\n      }\n      iframe.onerror = null;\n    };\n    var cleanup = function() {\n      debug('cleanup');\n      if (iframe) {\n        unattach();\n        // This timeout makes chrome fire onbeforeunload event\n        // within iframe. Without the timeout it goes straight to\n        // onunload.\n        setTimeout(function() {\n          if (iframe) {\n            iframe.parentNode.removeChild(iframe);\n          }\n          iframe = null;\n        }, 0);\n        eventUtils.unloadDel(unloadRef);\n      }\n    };\n    var onerror = function(err) {\n      debug('onerror', err);\n      if (iframe) {\n        cleanup();\n        errorCallback(err);\n      }\n    };\n    var post = function(msg, origin) {\n      debug('post', msg, origin);\n      try {\n        // When the iframe is not loaded, IE raises an exception\n        // on 'contentWindow'.\n        setTimeout(function() {\n          if (iframe && iframe.contentWindow) {\n            iframe.contentWindow.postMessage(msg, origin);\n          }\n        }, 0);\n      } catch (x) {\n        // intentionally empty\n      }\n    };\n\n    iframe.src = iframeUrl;\n    iframe.style.display = 'none';\n    iframe.style.position = 'absolute';\n    iframe.onerror = function() {\n      onerror('onerror');\n    };\n    iframe.onload = function() {\n      debug('onload');\n      // `onload` is triggered before scripts on the iframe are\n      // executed. Give it few seconds to actually load stuff.\n      clearTimeout(tref);\n      tref = setTimeout(function() {\n        onerror('onload timeout');\n      }, 2000);\n    };\n    global.document.body.appendChild(iframe);\n    tref = setTimeout(function() {\n      onerror('timeout');\n    }, 15000);\n    unloadRef = eventUtils.unloadAdd(cleanup);\n    return {\n      post: post\n    , cleanup: cleanup\n    , loaded: unattach\n    };\n  }\n\n/* eslint no-undef: \"off\", new-cap: \"off\" */\n, createHtmlfile: function(iframeUrl, errorCallback) {\n    var axo = ['Active'].concat('Object').join('X');\n    var doc = new global[axo]('htmlfile');\n    var tref, unloadRef;\n    var iframe;\n    var unattach = function() {\n      clearTimeout(tref);\n      iframe.onerror = null;\n    };\n    var cleanup = function() {\n      if (doc) {\n        unattach();\n        eventUtils.unloadDel(unloadRef);\n        iframe.parentNode.removeChild(iframe);\n        iframe = doc = null;\n        CollectGarbage();\n      }\n    };\n    var onerror = function(r) {\n      debug('onerror', r);\n      if (doc) {\n        cleanup();\n        errorCallback(r);\n      }\n    };\n    var post = function(msg, origin) {\n      try {\n        // When the iframe is not loaded, IE raises an exception\n        // on 'contentWindow'.\n        setTimeout(function() {\n          if (iframe && iframe.contentWindow) {\n              iframe.contentWindow.postMessage(msg, origin);\n          }\n        }, 0);\n      } catch (x) {\n        // intentionally empty\n      }\n    };\n\n    doc.open();\n    doc.write('<html><s' + 'cript>' +\n              'document.domain=\"' + global.document.domain + '\";' +\n              '</s' + 'cript></html>');\n    doc.close();\n    doc.parentWindow[module.exports.WPrefix] = global[module.exports.WPrefix];\n    var c = doc.createElement('div');\n    doc.body.appendChild(c);\n    iframe = doc.createElement('iframe');\n    c.appendChild(iframe);\n    iframe.src = iframeUrl;\n    iframe.onerror = function() {\n      onerror('onerror');\n    };\n    tref = setTimeout(function() {\n      onerror('timeout');\n    }, 15000);\n    unloadRef = eventUtils.unloadAdd(cleanup);\n    return {\n      post: post\n    , cleanup: cleanup\n    , loaded: unattach\n    };\n  }\n};\n\nmodule.exports.iframeEnabled = false;\nif (global.document) {\n  // postMessage misbehaves in konqueror 4.6.5 - the messages are delivered with\n  // huge delay, or not at all.\n  module.exports.iframeEnabled = (typeof global.postMessage === 'function' ||\n    typeof global.postMessage === 'object') && (!browser.isKonqueror());\n}\n","'use strict';\n\nvar logObject = {};\n['log', 'debug', 'warn'].forEach(function (level) {\n  var levelExists;\n\n  try {\n    levelExists = global.console && global.console[level] && global.console[level].apply;\n  } catch(e) {\n    // do nothing\n  }\n\n  logObject[level] = levelExists ? function () {\n    return global.console[level].apply(global.console, arguments);\n  } : (level === 'log' ? function () {} : logObject.log);\n});\n\nmodule.exports = logObject;\n","'use strict';\n\nmodule.exports = {\n  isObject: function(obj) {\n    var type = typeof obj;\n    return type === 'function' || type === 'object' && !!obj;\n  }\n\n, extend: function(obj) {\n    if (!this.isObject(obj)) {\n      return obj;\n    }\n    var source, prop;\n    for (var i = 1, length = arguments.length; i < length; i++) {\n      source = arguments[i];\n      for (prop in source) {\n        if (Object.prototype.hasOwnProperty.call(source, prop)) {\n          obj[prop] = source[prop];\n        }\n      }\n    }\n    return obj;\n  }\n};\n","'use strict';\n\n/* global crypto:true */\nvar crypto = require('crypto');\n\n// This string has length 32, a power of 2, so the modulus doesn't introduce a\n// bias.\nvar _randomStringChars = 'abcdefghijklmnopqrstuvwxyz012345';\nmodule.exports = {\n  string: function(length) {\n    var max = _randomStringChars.length;\n    var bytes = crypto.randomBytes(length);\n    var ret = [];\n    for (var i = 0; i < length; i++) {\n      ret.push(_randomStringChars.substr(bytes[i] % max, 1));\n    }\n    return ret.join('');\n  }\n\n, number: function(max) {\n    return Math.floor(Math.random() * max);\n  }\n\n, numberString: function(max) {\n    var t = ('' + (max - 1)).length;\n    var p = new Array(t + 1).join('0');\n    return (p + this.number(max)).slice(-t);\n  }\n};\n","'use strict';\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:utils:transport');\n}\n\nmodule.exports = function(availableTransports) {\n  return {\n    filterToEnabled: function(transportsWhitelist, info) {\n      var transports = {\n        main: []\n      , facade: []\n      };\n      if (!transportsWhitelist) {\n        transportsWhitelist = [];\n      } else if (typeof transportsWhitelist === 'string') {\n        transportsWhitelist = [transportsWhitelist];\n      }\n\n      availableTransports.forEach(function(trans) {\n        if (!trans) {\n          return;\n        }\n\n        if (trans.transportName === 'websocket' && info.websocket === false) {\n          debug('disabled from server', 'websocket');\n          return;\n        }\n\n        if (transportsWhitelist.length &&\n            transportsWhitelist.indexOf(trans.transportName) === -1) {\n          debug('not in whitelist', trans.transportName);\n          return;\n        }\n\n        if (trans.enabled(info)) {\n          debug('enabled', trans.transportName);\n          transports.main.push(trans);\n          if (trans.facadeTransport) {\n            transports.facade.push(trans.facadeTransport);\n          }\n        } else {\n          debug('disabled', trans.transportName);\n        }\n      });\n      return transports;\n    }\n  };\n};\n","'use strict';\n\nvar URL = require('url-parse');\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n  debug = require('debug')('sockjs-client:utils:url');\n}\n\nmodule.exports = {\n  getOrigin: function(url) {\n    if (!url) {\n      return null;\n    }\n\n    var p = new URL(url);\n    if (p.protocol === 'file:') {\n      return null;\n    }\n\n    var port = p.port;\n    if (!port) {\n      port = (p.protocol === 'https:') ? '443' : '80';\n    }\n\n    return p.protocol + '//' + p.hostname + ':' + port;\n  }\n\n, isOriginEqual: function(a, b) {\n    var res = this.getOrigin(a) === this.getOrigin(b);\n    debug('same', a, b, res);\n    return res;\n  }\n\n, isSchemeEqual: function(a, b) {\n    return (a.split(':')[0] === b.split(':')[0]);\n  }\n\n, addPath: function (url, path) {\n    var qs = url.split('?');\n    return qs[0] + path + (qs[1] ? '?' + qs[1] : '');\n  }\n\n, addQuery: function (url, q) {\n    return url + (url.indexOf('?') === -1 ? ('?' + q) : ('&' + q));\n  }\n};\n","module.exports = '1.1.4';\n","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n  // Detect the `define` function exposed by asynchronous module loaders. The\n  // strict `define` check is necessary for compatibility with `r.js`.\n  var isLoader = typeof define === \"function\" && define.amd;\n\n  // A set of types used to distinguish objects from primitives.\n  var objectTypes = {\n    \"function\": true,\n    \"object\": true\n  };\n\n  // Detect the `exports` object exposed by CommonJS implementations.\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n  // Use the `global` object exposed by Node (including Browserify via\n  // `insert-module-globals`), Narwhal, and Ringo as the default context,\n  // and the `window` object in browsers. Rhino exports a `global` function\n  // instead.\n  var root = objectTypes[typeof window] && window || this,\n      freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n  if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n    root = freeGlobal;\n  }\n\n  // Public: Initializes JSON 3 using the given `context` object, attaching the\n  // `stringify` and `parse` functions to the specified `exports` object.\n  function runInContext(context, exports) {\n    context || (context = root[\"Object\"]());\n    exports || (exports = root[\"Object\"]());\n\n    // Native constructor aliases.\n    var Number = context[\"Number\"] || root[\"Number\"],\n        String = context[\"String\"] || root[\"String\"],\n        Object = context[\"Object\"] || root[\"Object\"],\n        Date = context[\"Date\"] || root[\"Date\"],\n        SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n        TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n        Math = context[\"Math\"] || root[\"Math\"],\n        nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n    // Delegate to the native `stringify` and `parse` implementations.\n    if (typeof nativeJSON == \"object\" && nativeJSON) {\n      exports.stringify = nativeJSON.stringify;\n      exports.parse = nativeJSON.parse;\n    }\n\n    // Convenience aliases.\n    var objectProto = Object.prototype,\n        getClass = objectProto.toString,\n        isProperty, forEach, undef;\n\n    // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n    var isExtended = new Date(-3509827334573292);\n    try {\n      // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n      // results for certain dates in Opera >= 10.53.\n      isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n        // Safari < 2.0.2 stores the internal millisecond time value correctly,\n        // but clips the values returned by the date methods to the range of\n        // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n        isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n    } catch (exception) {}\n\n    // Internal: Determines whether the native `JSON.stringify` and `parse`\n    // implementations are spec-compliant. Based on work by Ken Snyder.\n    function has(name) {\n      if (has[name] !== undef) {\n        // Return cached feature test result.\n        return has[name];\n      }\n      var isSupported;\n      if (name == \"bug-string-char-index\") {\n        // IE <= 7 doesn't support accessing string characters using square\n        // bracket notation. IE 8 only supports this for primitives.\n        isSupported = \"a\"[0] != \"a\";\n      } else if (name == \"json\") {\n        // Indicates whether both `JSON.stringify` and `JSON.parse` are\n        // supported.\n        isSupported = has(\"json-stringify\") && has(\"json-parse\");\n      } else {\n        var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n        // Test `JSON.stringify`.\n        if (name == \"json-stringify\") {\n          var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n          if (stringifySupported) {\n            // A test function object with a custom `toJSON` method.\n            (value = function () {\n              return 1;\n            }).toJSON = value;\n            try {\n              stringifySupported =\n                // Firefox 3.1b1 and b2 serialize string, number, and boolean\n                // primitives as object literals.\n                stringify(0) === \"0\" &&\n                // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n                // literals.\n                stringify(new Number()) === \"0\" &&\n                stringify(new String()) == '\"\"' &&\n                // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n                // does not define a canonical JSON representation (this applies to\n                // objects with `toJSON` properties as well, *unless* they are nested\n                // within an object or array).\n                stringify(getClass) === undef &&\n                // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n                // FF 3.1b3 pass this test.\n                stringify(undef) === undef &&\n                // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n                // respectively, if the value is omitted entirely.\n                stringify() === undef &&\n                // FF 3.1b1, 2 throw an error if the given value is not a number,\n                // string, array, object, Boolean, or `null` literal. This applies to\n                // objects with custom `toJSON` methods as well, unless they are nested\n                // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n                // methods entirely.\n                stringify(value) === \"1\" &&\n                stringify([value]) == \"[1]\" &&\n                // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n                // `\"[null]\"`.\n                stringify([undef]) == \"[null]\" &&\n                // YUI 3.0.0b1 fails to serialize `null` literals.\n                stringify(null) == \"null\" &&\n                // FF 3.1b1, 2 halts serialization if an array contains a function:\n                // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n                // elides non-JSON values from objects and arrays, unless they\n                // define custom `toJSON` methods.\n                stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n                // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n                // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n                stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n                // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n                stringify(null, value) === \"1\" &&\n                stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n                // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n                // serialize extended years.\n                stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n                // The milliseconds are optional in ES 5, but required in 5.1.\n                stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n                // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n                // four-digit years instead of six-digit years. Credits: @Yaffle.\n                stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n                // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n                // values less than 1000. Credits: @Yaffle.\n                stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n            } catch (exception) {\n              stringifySupported = false;\n            }\n          }\n          isSupported = stringifySupported;\n        }\n        // Test `JSON.parse`.\n        if (name == \"json-parse\") {\n          var parse = exports.parse;\n          if (typeof parse == \"function\") {\n            try {\n              // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n              // Conforming implementations should also coerce the initial argument to\n              // a string prior to parsing.\n              if (parse(\"0\") === 0 && !parse(false)) {\n                // Simple parsing test.\n                value = parse(serialized);\n                var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n                if (parseSupported) {\n                  try {\n                    // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n                    parseSupported = !parse('\"\\t\"');\n                  } catch (exception) {}\n                  if (parseSupported) {\n                    try {\n                      // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n                      // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n                      // certain octal literals.\n                      parseSupported = parse(\"01\") !== 1;\n                    } catch (exception) {}\n                  }\n                  if (parseSupported) {\n                    try {\n                      // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n                      // points. These environments, along with FF 3.1b1 and 2,\n                      // also allow trailing commas in JSON objects and arrays.\n                      parseSupported = parse(\"1.\") !== 1;\n                    } catch (exception) {}\n                  }\n                }\n              }\n            } catch (exception) {\n              parseSupported = false;\n            }\n          }\n          isSupported = parseSupported;\n        }\n      }\n      return has[name] = !!isSupported;\n    }\n\n    if (!has(\"json\")) {\n      // Common `[[Class]]` name aliases.\n      var functionClass = \"[object Function]\",\n          dateClass = \"[object Date]\",\n          numberClass = \"[object Number]\",\n          stringClass = \"[object String]\",\n          arrayClass = \"[object Array]\",\n          booleanClass = \"[object Boolean]\";\n\n      // Detect incomplete support for accessing string characters by index.\n      var charIndexBuggy = has(\"bug-string-char-index\");\n\n      // Define additional utility methods if the `Date` methods are buggy.\n      if (!isExtended) {\n        var floor = Math.floor;\n        // A mapping between the months of the year and the number of days between\n        // January 1st and the first of the respective month.\n        var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n        // Internal: Calculates the number of days between the Unix epoch and the\n        // first day of the given month.\n        var getDay = function (year, month) {\n          return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n        };\n      }\n\n      // Internal: Determines if a property is a direct property of the given\n      // object. Delegates to the native `Object#hasOwnProperty` method.\n      if (!(isProperty = objectProto.hasOwnProperty)) {\n        isProperty = function (property) {\n          var members = {}, constructor;\n          if ((members.__proto__ = null, members.__proto__ = {\n            // The *proto* property cannot be set multiple times in recent\n            // versions of Firefox and SeaMonkey.\n            \"toString\": 1\n          }, members).toString != getClass) {\n            // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n            // supports the mutable *proto* property.\n            isProperty = function (property) {\n              // Capture and break the object's prototype chain (see section 8.6.2\n              // of the ES 5.1 spec). The parenthesized expression prevents an\n              // unsafe transformation by the Closure Compiler.\n              var original = this.__proto__, result = property in (this.__proto__ = null, this);\n              // Restore the original prototype chain.\n              this.__proto__ = original;\n              return result;\n            };\n          } else {\n            // Capture a reference to the top-level `Object` constructor.\n            constructor = members.constructor;\n            // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n            // other environments.\n            isProperty = function (property) {\n              var parent = (this.constructor || constructor).prototype;\n              return property in this && !(property in parent && this[property] === parent[property]);\n            };\n          }\n          members = null;\n          return isProperty.call(this, property);\n        };\n      }\n\n      // Internal: Normalizes the `for...in` iteration algorithm across\n      // environments. Each enumerated key is yielded to a `callback` function.\n      forEach = function (object, callback) {\n        var size = 0, Properties, members, property;\n\n        // Tests for bugs in the current environment's `for...in` algorithm. The\n        // `valueOf` property inherits the non-enumerable flag from\n        // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n        (Properties = function () {\n          this.valueOf = 0;\n        }).prototype.valueOf = 0;\n\n        // Iterate over a new instance of the `Properties` class.\n        members = new Properties();\n        for (property in members) {\n          // Ignore all properties inherited from `Object.prototype`.\n          if (isProperty.call(members, property)) {\n            size++;\n          }\n        }\n        Properties = members = null;\n\n        // Normalize the iteration algorithm.\n        if (!size) {\n          // A list of non-enumerable properties inherited from `Object.prototype`.\n          members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n          // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n          // properties.\n          forEach = function (object, callback) {\n            var isFunction = getClass.call(object) == functionClass, property, length;\n            var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n            for (property in object) {\n              // Gecko <= 1.0 enumerates the `prototype` property of functions under\n              // certain conditions; IE does not.\n              if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n                callback(property);\n              }\n            }\n            // Manually invoke the callback for each non-enumerable property.\n            for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n          };\n        } else if (size == 2) {\n          // Safari <= 2.0.4 enumerates shadowed properties twice.\n          forEach = function (object, callback) {\n            // Create a set of iterated properties.\n            var members = {}, isFunction = getClass.call(object) == functionClass, property;\n            for (property in object) {\n              // Store each property name to prevent double enumeration. The\n              // `prototype` property of functions is not enumerated due to cross-\n              // environment inconsistencies.\n              if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n                callback(property);\n              }\n            }\n          };\n        } else {\n          // No bugs detected; use the standard `for...in` algorithm.\n          forEach = function (object, callback) {\n            var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n            for (property in object) {\n              if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n                callback(property);\n              }\n            }\n            // Manually invoke the callback for the `constructor` property due to\n            // cross-environment inconsistencies.\n            if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n              callback(property);\n            }\n          };\n        }\n        return forEach(object, callback);\n      };\n\n      // Public: Serializes a JavaScript `value` as a JSON string. The optional\n      // `filter` argument may specify either a function that alters how object and\n      // array members are serialized, or an array of strings and numbers that\n      // indicates which properties should be serialized. The optional `width`\n      // argument may be either a string or number that specifies the indentation\n      // level of the output.\n      if (!has(\"json-stringify\")) {\n        // Internal: A map of control characters and their escaped equivalents.\n        var Escapes = {\n          92: \"\\\\\\\\\",\n          34: '\\\\\"',\n          8: \"\\\\b\",\n          12: \"\\\\f\",\n          10: \"\\\\n\",\n          13: \"\\\\r\",\n          9: \"\\\\t\"\n        };\n\n        // Internal: Converts `value` into a zero-padded string such that its\n        // length is at least equal to `width`. The `width` must be <= 6.\n        var leadingZeroes = \"000000\";\n        var toPaddedString = function (width, value) {\n          // The `|| 0` expression is necessary to work around a bug in\n          // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n          return (leadingZeroes + (value || 0)).slice(-width);\n        };\n\n        // Internal: Double-quotes a string `value`, replacing all ASCII control\n        // characters (characters with code unit values between 0 and 31) with\n        // their escaped equivalents. This is an implementation of the\n        // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n        var unicodePrefix = \"\\\\u00\";\n        var quote = function (value) {\n          var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n          var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n          for (; index < length; index++) {\n            var charCode = value.charCodeAt(index);\n            // If the character is a control character, append its Unicode or\n            // shorthand escape sequence; otherwise, append the character as-is.\n            switch (charCode) {\n              case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n                result += Escapes[charCode];\n                break;\n              default:\n                if (charCode < 32) {\n                  result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n                  break;\n                }\n                result += useCharIndex ? symbols[index] : value.charAt(index);\n            }\n          }\n          return result + '\"';\n        };\n\n        // Internal: Recursively serializes an object. Implements the\n        // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n        var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n          var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n          try {\n            // Necessary for host object support.\n            value = object[property];\n          } catch (exception) {}\n          if (typeof value == \"object\" && value) {\n            className = getClass.call(value);\n            if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n              if (value > -1 / 0 && value < 1 / 0) {\n                // Dates are serialized according to the `Date#toJSON` method\n                // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n                // for the ISO 8601 date time string format.\n                if (getDay) {\n                  // Manually compute the year, month, date, hours, minutes,\n                  // seconds, and milliseconds if the `getUTC*` methods are\n                  // buggy. Adapted from @Yaffle's `date-shim` project.\n                  date = floor(value / 864e5);\n                  for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n                  for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n                  date = 1 + date - getDay(year, month);\n                  // The `time` value specifies the time within the day (see ES\n                  // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n                  // to compute `A modulo B`, as the `%` operator does not\n                  // correspond to the `modulo` operation for negative numbers.\n                  time = (value % 864e5 + 864e5) % 864e5;\n                  // The hours, minutes, seconds, and milliseconds are obtained by\n                  // decomposing the time within the day. See section 15.9.1.10.\n                  hours = floor(time / 36e5) % 24;\n                  minutes = floor(time / 6e4) % 60;\n                  seconds = floor(time / 1e3) % 60;\n                  milliseconds = time % 1e3;\n                } else {\n                  year = value.getUTCFullYear();\n                  month = value.getUTCMonth();\n                  date = value.getUTCDate();\n                  hours = value.getUTCHours();\n                  minutes = value.getUTCMinutes();\n                  seconds = value.getUTCSeconds();\n                  milliseconds = value.getUTCMilliseconds();\n                }\n                // Serialize extended years correctly.\n                value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n                  \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n                  // Months, dates, hours, minutes, and seconds should have two\n                  // digits; milliseconds should have three.\n                  \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n                  // Milliseconds are optional in ES 5.0, but required in 5.1.\n                  \".\" + toPaddedString(3, milliseconds) + \"Z\";\n              } else {\n                value = null;\n              }\n            } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n              // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n              // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n              // ignores all `toJSON` methods on these objects unless they are\n              // defined directly on an instance.\n              value = value.toJSON(property);\n            }\n          }\n          if (callback) {\n            // If a replacement function was provided, call it to obtain the value\n            // for serialization.\n            value = callback.call(object, property, value);\n          }\n          if (value === null) {\n            return \"null\";\n          }\n          className = getClass.call(value);\n          if (className == booleanClass) {\n            // Booleans are represented literally.\n            return \"\" + value;\n          } else if (className == numberClass) {\n            // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n            // `\"null\"`.\n            return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n          } else if (className == stringClass) {\n            // Strings are double-quoted and escaped.\n            return quote(\"\" + value);\n          }\n          // Recursively serialize objects and arrays.\n          if (typeof value == \"object\") {\n            // Check for cyclic structures. This is a linear search; performance\n            // is inversely proportional to the number of unique nested objects.\n            for (length = stack.length; length--;) {\n              if (stack[length] === value) {\n                // Cyclic structures cannot be serialized by `JSON.stringify`.\n                throw TypeError();\n              }\n            }\n            // Add the object to the stack of traversed objects.\n            stack.push(value);\n            results = [];\n            // Save the current indentation level and indent one additional level.\n            prefix = indentation;\n            indentation += whitespace;\n            if (className == arrayClass) {\n              // Recursively serialize array elements.\n              for (index = 0, length = value.length; index < length; index++) {\n                element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n                results.push(element === undef ? \"null\" : element);\n              }\n              result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n            } else {\n              // Recursively serialize object members. Members are selected from\n              // either a user-specified list of property names, or the object\n              // itself.\n              forEach(properties || value, function (property) {\n                var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n                if (element !== undef) {\n                  // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n                  // is not the empty string, let `member` {quote(property) + \":\"}\n                  // be the concatenation of `member` and the `space` character.\"\n                  // The \"`space` character\" refers to the literal space\n                  // character, not the `space` {width} argument provided to\n                  // `JSON.stringify`.\n                  results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n                }\n              });\n              result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n            }\n            // Remove the object from the traversed object stack.\n            stack.pop();\n            return result;\n          }\n        };\n\n        // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n        exports.stringify = function (source, filter, width) {\n          var whitespace, callback, properties, className;\n          if (objectTypes[typeof filter] && filter) {\n            if ((className = getClass.call(filter)) == functionClass) {\n              callback = filter;\n            } else if (className == arrayClass) {\n              // Convert the property names array into a makeshift set.\n              properties = {};\n              for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n            }\n          }\n          if (width) {\n            if ((className = getClass.call(width)) == numberClass) {\n              // Convert the `width` to an integer and create a string containing\n              // `width` number of space characters.\n              if ((width -= width % 1) > 0) {\n                for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n              }\n            } else if (className == stringClass) {\n              whitespace = width.length <= 10 ? width : width.slice(0, 10);\n            }\n          }\n          // Opera <= 7.54u2 discards the values associated with empty string keys\n          // (`\"\"`) only if they are used directly within an object member list\n          // (e.g., `!(\"\" in { \"\": 1})`).\n          return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n        };\n      }\n\n      // Public: Parses a JSON source string.\n      if (!has(\"json-parse\")) {\n        var fromCharCode = String.fromCharCode;\n\n        // Internal: A map of escaped control characters and their unescaped\n        // equivalents.\n        var Unescapes = {\n          92: \"\\\\\",\n          34: '\"',\n          47: \"/\",\n          98: \"\\b\",\n          116: \"\\t\",\n          110: \"\\n\",\n          102: \"\\f\",\n          114: \"\\r\"\n        };\n\n        // Internal: Stores the parser state.\n        var Index, Source;\n\n        // Internal: Resets the parser state and throws a `SyntaxError`.\n        var abort = function () {\n          Index = Source = null;\n          throw SyntaxError();\n        };\n\n        // Internal: Returns the next token, or `\"$\"` if the parser has reached\n        // the end of the source string. A token may be a string, number, `null`\n        // literal, or Boolean literal.\n        var lex = function () {\n          var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n          while (Index < length) {\n            charCode = source.charCodeAt(Index);\n            switch (charCode) {\n              case 9: case 10: case 13: case 32:\n                // Skip whitespace tokens, including tabs, carriage returns, line\n                // feeds, and space characters.\n                Index++;\n                break;\n              case 123: case 125: case 91: case 93: case 58: case 44:\n                // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n                // the current position.\n                value = charIndexBuggy ? source.charAt(Index) : source[Index];\n                Index++;\n                return value;\n              case 34:\n                // `\"` delimits a JSON string; advance to the next character and\n                // begin parsing the string. String tokens are prefixed with the\n                // sentinel `@` character to distinguish them from punctuators and\n                // end-of-string tokens.\n                for (value = \"@\", Index++; Index < length;) {\n                  charCode = source.charCodeAt(Index);\n                  if (charCode < 32) {\n                    // Unescaped ASCII control characters (those with a code unit\n                    // less than the space character) are not permitted.\n                    abort();\n                  } else if (charCode == 92) {\n                    // A reverse solidus (`\\`) marks the beginning of an escaped\n                    // control character (including `\"`, `\\`, and `/`) or Unicode\n                    // escape sequence.\n                    charCode = source.charCodeAt(++Index);\n                    switch (charCode) {\n                      case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n                        // Revive escaped control characters.\n                        value += Unescapes[charCode];\n                        Index++;\n                        break;\n                      case 117:\n                        // `\\u` marks the beginning of a Unicode escape sequence.\n                        // Advance to the first character and validate the\n                        // four-digit code point.\n                        begin = ++Index;\n                        for (position = Index + 4; Index < position; Index++) {\n                          charCode = source.charCodeAt(Index);\n                          // A valid sequence comprises four hexdigits (case-\n                          // insensitive) that form a single hexadecimal value.\n                          if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n                            // Invalid Unicode escape sequence.\n                            abort();\n                          }\n                        }\n                        // Revive the escaped character.\n                        value += fromCharCode(\"0x\" + source.slice(begin, Index));\n                        break;\n                      default:\n                        // Invalid escape sequence.\n                        abort();\n                    }\n                  } else {\n                    if (charCode == 34) {\n                      // An unescaped double-quote character marks the end of the\n                      // string.\n                      break;\n                    }\n                    charCode = source.charCodeAt(Index);\n                    begin = Index;\n                    // Optimize for the common case where a string is valid.\n                    while (charCode >= 32 && charCode != 92 && charCode != 34) {\n                      charCode = source.charCodeAt(++Index);\n                    }\n                    // Append the string as-is.\n                    value += source.slice(begin, Index);\n                  }\n                }\n                if (source.charCodeAt(Index) == 34) {\n                  // Advance to the next character and return the revived string.\n                  Index++;\n                  return value;\n                }\n                // Unterminated string.\n                abort();\n              default:\n                // Parse numbers and literals.\n                begin = Index;\n                // Advance past the negative sign, if one is specified.\n                if (charCode == 45) {\n                  isSigned = true;\n                  charCode = source.charCodeAt(++Index);\n                }\n                // Parse an integer or floating-point value.\n                if (charCode >= 48 && charCode <= 57) {\n                  // Leading zeroes are interpreted as octal literals.\n                  if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n                    // Illegal octal literal.\n                    abort();\n                  }\n                  isSigned = false;\n                  // Parse the integer component.\n                  for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n                  // Floats cannot contain a leading decimal point; however, this\n                  // case is already accounted for by the parser.\n                  if (source.charCodeAt(Index) == 46) {\n                    position = ++Index;\n                    // Parse the decimal component.\n                    for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n                    if (position == Index) {\n                      // Illegal trailing decimal.\n                      abort();\n                    }\n                    Index = position;\n                  }\n                  // Parse exponents. The `e` denoting the exponent is\n                  // case-insensitive.\n                  charCode = source.charCodeAt(Index);\n                  if (charCode == 101 || charCode == 69) {\n                    charCode = source.charCodeAt(++Index);\n                    // Skip past the sign following the exponent, if one is\n                    // specified.\n                    if (charCode == 43 || charCode == 45) {\n                      Index++;\n                    }\n                    // Parse the exponential component.\n                    for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n                    if (position == Index) {\n                      // Illegal empty exponent.\n                      abort();\n                    }\n                    Index = position;\n                  }\n                  // Coerce the parsed value to a JavaScript number.\n                  return +source.slice(begin, Index);\n                }\n                // A negative sign may only precede numbers.\n                if (isSigned) {\n                  abort();\n                }\n                // `true`, `false`, and `null` literals.\n                if (source.slice(Index, Index + 4) == \"true\") {\n                  Index += 4;\n                  return true;\n                } else if (source.slice(Index, Index + 5) == \"false\") {\n                  Index += 5;\n                  return false;\n                } else if (source.slice(Index, Index + 4) == \"null\") {\n                  Index += 4;\n                  return null;\n                }\n                // Unrecognized token.\n                abort();\n            }\n          }\n          // Return the sentinel `$` character if the parser has reached the end\n          // of the source string.\n          return \"$\";\n        };\n\n        // Internal: Parses a JSON `value` token.\n        var get = function (value) {\n          var results, hasMembers;\n          if (value == \"$\") {\n            // Unexpected end of input.\n            abort();\n          }\n          if (typeof value == \"string\") {\n            if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n              // Remove the sentinel `@` character.\n              return value.slice(1);\n            }\n            // Parse object and array literals.\n            if (value == \"[\") {\n              // Parses a JSON array, returning a new JavaScript array.\n              results = [];\n              for (;; hasMembers || (hasMembers = true)) {\n                value = lex();\n                // A closing square bracket marks the end of the array literal.\n                if (value == \"]\") {\n                  break;\n                }\n                // If the array literal contains elements, the current token\n                // should be a comma separating the previous element from the\n                // next.\n                if (hasMembers) {\n                  if (value == \",\") {\n                    value = lex();\n                    if (value == \"]\") {\n                      // Unexpected trailing `,` in array literal.\n                      abort();\n                    }\n                  } else {\n                    // A `,` must separate each array element.\n                    abort();\n                  }\n                }\n                // Elisions and leading commas are not permitted.\n                if (value == \",\") {\n                  abort();\n                }\n                results.push(get(value));\n              }\n              return results;\n            } else if (value == \"{\") {\n              // Parses a JSON object, returning a new JavaScript object.\n              results = {};\n              for (;; hasMembers || (hasMembers = true)) {\n                value = lex();\n                // A closing curly brace marks the end of the object literal.\n                if (value == \"}\") {\n                  break;\n                }\n                // If the object literal contains members, the current token\n                // should be a comma separator.\n                if (hasMembers) {\n                  if (value == \",\") {\n                    value = lex();\n                    if (value == \"}\") {\n                      // Unexpected trailing `,` in object literal.\n                      abort();\n                    }\n                  } else {\n                    // A `,` must separate each object member.\n                    abort();\n                  }\n                }\n                // Leading commas are not permitted, object property names must be\n                // double-quoted strings, and a `:` must separate each property\n                // name and value.\n                if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n                  abort();\n                }\n                results[value.slice(1)] = get(lex());\n              }\n              return results;\n            }\n            // Unexpected token encountered.\n            abort();\n          }\n          return value;\n        };\n\n        // Internal: Updates a traversed object member.\n        var update = function (source, property, callback) {\n          var element = walk(source, property, callback);\n          if (element === undef) {\n            delete source[property];\n          } else {\n            source[property] = element;\n          }\n        };\n\n        // Internal: Recursively traverses a parsed JSON object, invoking the\n        // `callback` function for each value. This is an implementation of the\n        // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n        var walk = function (source, property, callback) {\n          var value = source[property], length;\n          if (typeof value == \"object\" && value) {\n            // `forEach` can't be used to traverse an array in Opera <= 8.54\n            // because its `Object#hasOwnProperty` implementation returns `false`\n            // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n            if (getClass.call(value) == arrayClass) {\n              for (length = value.length; length--;) {\n                update(value, length, callback);\n              }\n            } else {\n              forEach(value, function (property) {\n                update(value, property, callback);\n              });\n            }\n          }\n          return callback.call(source, property, value);\n        };\n\n        // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n        exports.parse = function (source, callback) {\n          var result, value;\n          Index = 0;\n          Source = \"\" + source;\n          result = get(lex());\n          // If a JSON string contains multiple tokens, it is invalid.\n          if (lex() != \"$\") {\n            abort();\n          }\n          // Reset the parser state.\n          Index = Source = null;\n          return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n        };\n      }\n    }\n\n    exports[\"runInContext\"] = runInContext;\n    return exports;\n  }\n\n  if (freeExports && !isLoader) {\n    // Export for CommonJS environments.\n    runInContext(root, freeExports);\n  } else {\n    // Export for web browsers and JavaScript engines.\n    var nativeJSON = root.JSON,\n        previousJSON = root[\"JSON3\"],\n        isRestored = false;\n\n    var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n      // Public: Restores the original value of the global `JSON` object and\n      // returns a reference to the `JSON3` object.\n      \"noConflict\": function () {\n        if (!isRestored) {\n          isRestored = true;\n          root.JSON = nativeJSON;\n          root[\"JSON3\"] = previousJSON;\n          nativeJSON = previousJSON = null;\n        }\n        return JSON3;\n      }\n    }));\n\n    root.JSON = {\n      \"parse\": JSON3.parse,\n      \"stringify\": JSON3.stringify\n    };\n  }\n\n  // Export for asynchronous module loaders.\n  if (isLoader) {\n    define(function () {\n      return JSON3;\n    });\n  }\n}).call(this);\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n  var parser = /([^=?&]+)=?([^&]*)/g\n    , result = {}\n    , part;\n\n  //\n  // Little nifty parsing hack, leverage the fact that RegExp.exec increments\n  // the lastIndex property so we can continue executing this loop until we've\n  // parsed all results.\n  //\n  for (;\n    part = parser.exec(query);\n    result[decodeURIComponent(part[1])] = decodeURIComponent(part[2])\n  );\n\n  return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n  prefix = prefix || '';\n\n  var pairs = [];\n\n  //\n  // Optionally prefix with a '?' if needed\n  //\n  if ('string' !== typeof prefix) prefix = '?';\n\n  for (var key in obj) {\n    if (has.call(obj, key)) {\n      pairs.push(encodeURIComponent(key) +'='+ encodeURIComponent(obj[key]));\n    }\n  }\n\n  return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n  protocol = protocol.split(':')[0];\n  port = +port;\n\n  if (!port) return false;\n\n  switch (protocol) {\n    case 'http':\n    case 'ws':\n    return port !== 80;\n\n    case 'https':\n    case 'wss':\n    return port !== 443;\n\n    case 'ftp':\n    return port !== 21;\n\n    case 'gopher':\n    return port !== 70;\n\n    case 'file':\n    return false;\n  }\n\n  return port !== 0;\n};\n","'use strict';\n\nvar required = require('requires-port')\n  , lolcation = require('./lolcation')\n  , qs = require('querystringify')\n  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i;\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n *    indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n *    the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n  ['#', 'hash'],                        // Extract from the back.\n  ['?', 'query'],                       // Extract from the back.\n  ['/', 'pathname'],                    // Extract from the back.\n  ['@', 'auth', 1],                     // Extract from the front.\n  [NaN, 'host', undefined, 1, 1],       // Set left over value.\n  [/:(\\d+)$/, 'port', undefined, 1],    // RegExp the back.\n  [NaN, 'hostname', undefined, 1, 1]    // Set left over.\n];\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @return {ProtocolExtract} Extracted information.\n * @api private\n */\nfunction extractProtocol(address) {\n  var match = protocolre.exec(address);\n\n  return {\n    protocol: match[1] ? match[1].toLowerCase() : '',\n    slashes: !!match[2],\n    rest: match[3]\n  };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @api private\n */\nfunction resolve(relative, base) {\n  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n    , i = path.length\n    , last = path[i - 1]\n    , unshift = false\n    , up = 0;\n\n  while (i--) {\n    if (path[i] === '.') {\n      path.splice(i, 1);\n    } else if (path[i] === '..') {\n      path.splice(i, 1);\n      up++;\n    } else if (up) {\n      if (i === 0) unshift = true;\n      path.splice(i, 1);\n      up--;\n    }\n  }\n\n  if (unshift) path.unshift('');\n  if (last === '.' || last === '..') path.push('');\n\n  return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} location Location defaults for relative paths.\n * @param {Boolean|Function} parser Parser for the query string.\n * @api public\n */\nfunction URL(address, location, parser) {\n  if (!(this instanceof URL)) {\n    return new URL(address, location, parser);\n  }\n\n  var relative, extracted, parse, instruction, index, key\n    , instructions = rules.slice()\n    , type = typeof location\n    , url = this\n    , i = 0;\n\n  //\n  // The following if statements allows this module two have compatibility with\n  // 2 different API:\n  //\n  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n  //    where the boolean indicates that the query string should also be parsed.\n  //\n  // 2. The `URL` interface of the browser which accepts a URL, object as\n  //    arguments. The supplied object will be used as default values / fall-back\n  //    for relative paths.\n  //\n  if ('object' !== type && 'string' !== type) {\n    parser = location;\n    location = null;\n  }\n\n  if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n  location = lolcation(location);\n\n  //\n  // Extract protocol information before running the instructions.\n  //\n  extracted = extractProtocol(address || '');\n  relative = !extracted.protocol && !extracted.slashes;\n  url.slashes = extracted.slashes || relative && location.slashes;\n  url.protocol = extracted.protocol || location.protocol || '';\n  address = extracted.rest;\n\n  //\n  // When the authority component is absent the URL starts with a path\n  // component.\n  //\n  if (!extracted.slashes) instructions[2] = [/(.*)/, 'pathname'];\n\n  for (; i < instructions.length; i++) {\n    instruction = instructions[i];\n    parse = instruction[0];\n    key = instruction[1];\n\n    if (parse !== parse) {\n      url[key] = address;\n    } else if ('string' === typeof parse) {\n      if (~(index = address.indexOf(parse))) {\n        if ('number' === typeof instruction[2]) {\n          url[key] = address.slice(0, index);\n          address = address.slice(index + instruction[2]);\n        } else {\n          url[key] = address.slice(index);\n          address = address.slice(0, index);\n        }\n      }\n    } else if ((index = parse.exec(address))) {\n      url[key] = index[1];\n      address = address.slice(0, index.index);\n    }\n\n    url[key] = url[key] || (\n      relative && instruction[3] ? location[key] || '' : ''\n    );\n\n    //\n    // Hostname, host and protocol should be lowercased so they can be used to\n    // create a proper `origin`.\n    //\n    if (instruction[4]) url[key] = url[key].toLowerCase();\n  }\n\n  //\n  // Also parse the supplied query string in to an object. If we're supplied\n  // with a custom parser as function use that instead of the default build-in\n  // parser.\n  //\n  if (parser) url.query = parser(url.query);\n\n  //\n  // If the URL is relative, resolve the pathname against the base URL.\n  //\n  if (\n      relative\n    && location.slashes\n    && url.pathname.charAt(0) !== '/'\n    && (url.pathname !== '' || location.pathname !== '')\n  ) {\n    url.pathname = resolve(url.pathname, location.pathname);\n  }\n\n  //\n  // We should not add port numbers if they are already the default port number\n  // for a given protocol. As the host also contains the port number we're going\n  // override it with the hostname which contains no port number.\n  //\n  if (!required(url.port, url.protocol)) {\n    url.host = url.hostname;\n    url.port = '';\n  }\n\n  //\n  // Parse down the `auth` for the username and password.\n  //\n  url.username = url.password = '';\n  if (url.auth) {\n    instruction = url.auth.split(':');\n    url.username = instruction[0] || '';\n    url.password = instruction[1] || '';\n  }\n\n  url.origin = url.protocol && url.host && url.protocol !== 'file:'\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  //\n  // The href is just the compiled result.\n  //\n  url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part          Property we need to adjust.\n * @param {Mixed} value          The newly assigned value.\n * @param {Boolean|Function} fn  When setting the query, it will be the function\n *                               used to parse the query.\n *                               When setting the protocol, double slash will be\n *                               removed from the final url if it is true.\n * @returns {URL}\n * @api public\n */\nfunction set(part, value, fn) {\n  var url = this;\n\n  switch (part) {\n    case 'query':\n      if ('string' === typeof value && value.length) {\n        value = (fn || qs.parse)(value);\n      }\n\n      url[part] = value;\n      break;\n\n    case 'port':\n      url[part] = value;\n\n      if (!required(value, url.protocol)) {\n        url.host = url.hostname;\n        url[part] = '';\n      } else if (value) {\n        url.host = url.hostname +':'+ value;\n      }\n\n      break;\n\n    case 'hostname':\n      url[part] = value;\n\n      if (url.port) value += ':'+ url.port;\n      url.host = value;\n      break;\n\n    case 'host':\n      url[part] = value;\n\n      if (/:\\d+$/.test(value)) {\n        value = value.split(':');\n        url.port = value.pop();\n        url.hostname = value.join(':');\n      } else {\n        url.hostname = value;\n        url.port = '';\n      }\n\n      break;\n\n    case 'protocol':\n      url.protocol = value.toLowerCase();\n      url.slashes = !fn;\n      break;\n\n    case 'pathname':\n      url.pathname = value.length && value.charAt(0) !== '/' ? '/' + value : value;\n\n      break;\n\n    default:\n      url[part] = value;\n  }\n\n  for (var i = 0; i < rules.length; i++) {\n    var ins = rules[i];\n\n    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n  }\n\n  url.origin = url.protocol && url.host && url.protocol !== 'file:'\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  url.href = url.toString();\n\n  return url;\n};\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String}\n * @api public\n */\nfunction toString(stringify) {\n  if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n  var query\n    , url = this\n    , protocol = url.protocol;\n\n  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n  var result = protocol + (url.slashes ? '//' : '');\n\n  if (url.username) {\n    result += url.username;\n    if (url.password) result += ':'+ url.password;\n    result += '@';\n  }\n\n  result += url.host + url.pathname;\n\n  query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n  if (url.hash) result += url.hash;\n\n  return result;\n}\n\nURL.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nURL.extractProtocol = extractProtocol;\nURL.location = lolcation;\nURL.qs = qs;\n\nmodule.exports = URL;\n","'use strict';\n\nvar slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//;\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 }\n  , URL;\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @api public\n */\nmodule.exports = function lolcation(loc) {\n  loc = loc || global.location || {};\n  URL = URL || require('./');\n\n  var finaldestination = {}\n    , type = typeof loc\n    , key;\n\n  if ('blob:' === loc.protocol) {\n    finaldestination = new URL(unescape(loc.pathname), {});\n  } else if ('string' === type) {\n    finaldestination = new URL(loc, {});\n    for (key in ignore) delete finaldestination[key];\n  } else if ('object' === type) {\n    for (key in loc) {\n      if (key in ignore) continue;\n      finaldestination[key] = loc[key];\n    }\n\n    if (finaldestination.slashes === undefined) {\n      finaldestination.slashes = slashes.test(loc.href);\n    }\n  }\n\n  return finaldestination;\n};\n"]}