���ѧۧݧ�ӧ�� �ާ֧ߧ֧էا֧� - ���֧էѧܧ�ڧ��ӧѧ�� - /home/alphpwcp/public_html/us/alphachat/design/defaulttheme/js/widgetv2/1.76e60b1aab09f2ea2bea.ie.js.map
���ѧ٧ѧ�
{"version":3,"sources":["webpack://LHCReactAPP/./node_modules/sc-errors/index.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/node_modules/component-emitter/index.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/lib/scclientsocket.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/lib/response.js","webpack://LHCReactAPP/./node_modules/querystring-es3/index.js","webpack://LHCReactAPP/./node_modules/buffer/index.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/node_modules/uuid/lib/rng-browser.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/node_modules/uuid/lib/bytesToUuid.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/index.js","webpack://LHCReactAPP/./node_modules/sc-channel/index.js","webpack://LHCReactAPP/./node_modules/sc-channel/node_modules/component-emitter/index.js","webpack://LHCReactAPP/./node_modules/sc-errors/decycle.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/lib/auth.js","webpack://LHCReactAPP/./node_modules/sc-formatter/index.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/lib/sctransport.js","webpack://LHCReactAPP/./node_modules/querystring-es3/decode.js","webpack://LHCReactAPP/./node_modules/querystring-es3/encode.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/lib/ws-browser.js","webpack://LHCReactAPP/./node_modules/linked-list/index.js","webpack://LHCReactAPP/./node_modules/linked-list/_source/linked-list.js","webpack://LHCReactAPP/./node_modules/base64-js/index.js","webpack://LHCReactAPP/./node_modules/ieee754/index.js","webpack://LHCReactAPP/./node_modules/isarray/index.js","webpack://LHCReactAPP/./node_modules/clone/clone.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/lib/factory.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/node_modules/uuid/index.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/node_modules/uuid/v1.js","webpack://LHCReactAPP/./node_modules/socketcluster-client/node_modules/uuid/v4.js"],"names":["decycle","isStrict","this","AuthTokenExpiredError","message","expiry","name","Error","captureStackTrace","arguments","callee","stack","AuthTokenInvalidError","AuthTokenNotBeforeError","date","AuthTokenError","AuthError","SilentMiddlewareBlockedError","type","InvalidActionError","InvalidArgumentsError","InvalidOptionsError","InvalidMessageError","SocketProtocolError","code","ServerProtocolError","HTTPServerError","ResourceLimitError","TimeoutError","BadConnectionError","BrokerError","ProcessExitError","UnknownError","prototype","Object","create","module","exports","socketProtocolErrorStatuses","1001","1002","1003","1005","1006","1007","1008","1009","1010","1011","4000","4001","4002","4003","4004","4005","4006","4007","4008","4009","socketProtocolIgnoreStatuses","1000","unserializableErrorProperties","domain","domainEmitter","domainThrown","dehydrateError","error","includeStackTrace","dehydratedError","i","hydrateError","hydratedError","hasOwnProperty","Emitter","obj","key","mixin","on","addEventListener","event","fn","_callbacks","push","once","off","apply","removeListener","removeAllListeners","removeEventListener","length","cb","callbacks","splice","emit","args","slice","call","len","listeners","hasListeners","SCChannel","AuthEngine","Response","formatter","SCTransport","querystring","LinkedList","Buffer","clone","scErrors","isBrowser","window","SCClientSocket","opts","self","id","state","CLOSED","authState","UNAUTHENTICATED","signedAuthToken","authToken","pendingReconnect","pendingReconnectTimeout","preparingPendingSubscriptions","clientId","connectTimeout","ackTimeout","channelPrefix","disconnectOnUnload","authTokenName","pingTimeout","pingTimeoutDisabled","active","_clientMap","clientMap","maxTimeout","Math","pow","verifyDuration","propertyName","_localEvents","connectAttempts","_emitBuffer","channels","options","_cid","callIdGenerator","autoReconnect","autoReconnectOptions","reconnectOptions","initialDelay","randomness","multiplier","maxDelay","subscriptionRetryOptions","authEngine","auth","codecEngine","codec","protocol","protocolOptionError","_onSCError","path","replace","query","parse","_channelEmitter","_unloadHandler","disconnect","global","autoConnect","connect","CONNECTING","OPEN","AUTHENTICATED","PENDING","ignoreStatuses","errorStatuses","_privateEventHandlerMap","data","undecoratedChannelName","_undecorateChannelName","channel","isSubscribed","_triggerChannelUnsubscribe","response","saveToken","token","err","_changeToAuthenticatedState","end","removeToken","oldToken","_changeToUnauthenticatedStateAndClearTokens","transport","close","getState","getBytesReceived","deauthenticate","callback","open","clearTimeout","_reconnectTimeoutRef","status","_onSCOpen","_onSCClose","res","_onSCEvent","reconnect","destroy","oldState","oldSignedToken","stateChangeData","newState","_extractAuthTokenData","processPendingSubscriptions","decodeBase64","encodedString","from","toString","encodeBase64","decodedString","encodedTokenData","split","tokenData","JSON","e","getAuthToken","getSignedAuthToken","authenticate","authStatus","isAuthenticated","authError","_tryReconnect","timeout","exponent","initialTimeout","round","random","setTimeout","autoSubscribeOnConnect","_flushEmitBuffer","_suspendSubscriptions","channelName","SUBSCRIBED","UNSUBSCRIBED","_abortAllPendingEventsDueToBadConnection","failureType","nextNode","currentNode","head","next","eventObject","detach","errorMessage","cid","cancelPendingResponse","openAbort","closeMessage","handler","decode","encode","object","emitObject","_handleEventAckTimeout","eventNode","_emit","Item","cloneData","append","send","publish","pubData","_decorateChannelName","_triggerChannelSubscribe","subscriptionOptions","_triggerChannelSubscribeFail","meetsAuthRequirements","waitForAuth","_cancelPendingSubscribeCallback","_pendingSubscriptionCid","decoratedChannelName","indexOf","_trySubscribe","noTimeout","batch","subscribe","setOptions","_tryUnsubscribe","unsubscribe","currentChannel","destroyChannel","unwatch","subscriptions","includePending","subs","pendingChannels","sort","a","b","ap","priority","bp","forEach","watch","watchers","socket","sent","_respond","responseData","rid","undefined","stringify","base64","ieee754","isArray","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","Uint8Array","__proto__","arg","encodingOrOffset","allocUnsafe","value","TypeError","ArrayBuffer","array","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","write","fromString","isBuffer","checked","copy","buffer","val","fromObject","assertSize","size","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","start","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","dir","isNaN","arrayIndexOf","lastIndexOf","arr","indexSize","arrLength","valLength","String","read","buf","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","charCodeAt","asciiToBytes","latin1Write","base64Write","ucs2Write","units","c","hi","lo","utf16leToBytes","fromByteArray","min","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","Symbol","species","defineProperty","configurable","fill","allocUnsafeSlow","_isBuffer","compare","x","y","concat","list","pos","swap16","swap32","swap64","equals","inspect","max","match","join","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","Array","_arr","ret","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","floor","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","set","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","trim","stringtrim","base64clean","src","dst","getRandomValues","crypto","bind","msCrypto","rnds8","rnds","r","byteToHex","bth","factory","clients","version","client","objects","paths","derez","nu","Boolean","Date","RegExp","$ref","_internalStorage","isLocalStorageEnabled","_checkLocalStorageEnabled","localStorage","setItem","removeItem","loadToken","getItem","validJSONStartRegex","arrayBufferToBase64","arraybuffer","base64Chars","substring","binaryToBase64Replacer","input","test","WebSocket","createWebSocket","uri","_pingTimeoutTicker","_callbackMap","_batchSendList","wsSocket","binaryType","onopen","_onOpen","onclose","_onClose","reason","onmessage","flags","_onMessage","onerror","_connectTimeoutRef","host","schema","secure","timestampRequests","timestampParam","getTime","port","hostname","_resetPingTimeout","_handshake","statusCode","_onError","force","badConnectionError","_batchTimeout","_handleEventObject","rehydratedError","readyState","sendObject","bytesReceived","packet","simpleEventObject","Function","serializeObject","formatError","sendObjectBatch","pubSubBatchDuration","sendObjectSingle","prop","qs","sep","eq","regexp","maxKeys","kstr","vstr","k","v","idx","decodeURIComponent","xs","stringifyPrimitive","map","objectKeys","ks","encodeURIComponent","f","keys","WorkerGlobalScope","MozWebSocket","ws","protocols","ListPrototype","List","ListItem","of","items","iterator","item","tail","toArray","result","prepend","ListItemPrototype","prev","b64","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","parts","len2","encodeChunk","lookup","num","output","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","s","NaN","rt","abs","log","LN2","_instanceof","nativeMap","nativeSet","nativePromise","Map","_","Set","Promise","parent","circular","depth","includeNonEnumerable","allParents","allChildren","useBuffer","_clone","child","proto","resolve","reject","then","__isArray","__isRegExp","source","__getRegExpFlags","lastIndex","__isDate","getPrototypeOf","index","keyChild","valueChild","entryChild","add","attrs","getOwnPropertyDescriptor","getOwnPropertySymbols","symbols","symbol","descriptor","enumerable","allPropertyNames","getOwnPropertyNames","__objToStr","o","re","ignoreCase","multiline","clonePrototype","uuid","_clients","getPort","isSecureDefault","isSecure","location","multiplex","v4","protocolPrefix","queryString","queryArray","queryMap","getMultiplexId","v1","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","node","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","ii"],"mappings":"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","file":"1.76e60b1aab09f2ea2bea.ie.js","sourcesContent":["var decycle = require('./decycle');\n\nvar isStrict = (function () { return !this; })();\n\nfunction AuthTokenExpiredError(message, expiry) {\n this.name = 'AuthTokenExpiredError';\n this.message = message;\n this.expiry = expiry;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nAuthTokenExpiredError.prototype = Object.create(Error.prototype);\n\n\nfunction AuthTokenInvalidError(message) {\n this.name = 'AuthTokenInvalidError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nAuthTokenInvalidError.prototype = Object.create(Error.prototype);\n\n\nfunction AuthTokenNotBeforeError(message, date) {\n this.name = 'AuthTokenNotBeforeError';\n this.message = message;\n this.date = date;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nAuthTokenNotBeforeError.prototype = Object.create(Error.prototype);\n\n\n// For any other auth token error.\nfunction AuthTokenError(message) {\n this.name = 'AuthTokenError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nAuthTokenError.prototype = Object.create(Error.prototype);\n\n// For any other auth error; not specifically related to the auth token itself.\nfunction AuthError(message) {\n this.name = 'AuthError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nAuthError.prototype = Object.create(Error.prototype);\n\n\nfunction SilentMiddlewareBlockedError(message, type) {\n this.name = 'SilentMiddlewareBlockedError';\n this.message = message;\n this.type = type;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nSilentMiddlewareBlockedError.prototype = Object.create(Error.prototype);\n\n\nfunction InvalidActionError(message) {\n this.name = 'InvalidActionError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nInvalidActionError.prototype = Object.create(Error.prototype);\n\nfunction InvalidArgumentsError(message) {\n this.name = 'InvalidArgumentsError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nInvalidArgumentsError.prototype = Object.create(Error.prototype);\n\nfunction InvalidOptionsError(message) {\n this.name = 'InvalidOptionsError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nInvalidOptionsError.prototype = Object.create(Error.prototype);\n\n\nfunction InvalidMessageError(message) {\n this.name = 'InvalidMessageError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nInvalidMessageError.prototype = Object.create(Error.prototype);\n\n\nfunction SocketProtocolError(message, code) {\n this.name = 'SocketProtocolError';\n this.message = message;\n this.code = code;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nSocketProtocolError.prototype = Object.create(Error.prototype);\n\n\nfunction ServerProtocolError(message) {\n this.name = 'ServerProtocolError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nServerProtocolError.prototype = Object.create(Error.prototype);\n\nfunction HTTPServerError(message) {\n this.name = 'HTTPServerError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nHTTPServerError.prototype = Object.create(Error.prototype);\n\n\nfunction ResourceLimitError(message) {\n this.name = 'ResourceLimitError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nResourceLimitError.prototype = Object.create(Error.prototype);\n\n\nfunction TimeoutError(message) {\n this.name = 'TimeoutError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nTimeoutError.prototype = Object.create(Error.prototype);\n\n\nfunction BadConnectionError(message, type) {\n this.name = 'BadConnectionError';\n this.message = message;\n this.type = type;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nBadConnectionError.prototype = Object.create(Error.prototype);\n\n\nfunction BrokerError(message) {\n this.name = 'BrokerError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nBrokerError.prototype = Object.create(Error.prototype);\n\n\nfunction ProcessExitError(message, code) {\n this.name = 'ProcessExitError';\n this.message = message;\n this.code = code;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nProcessExitError.prototype = Object.create(Error.prototype);\n\n\nfunction UnknownError(message) {\n this.name = 'UnknownError';\n this.message = message;\n if (Error.captureStackTrace && !isStrict) {\n Error.captureStackTrace(this, arguments.callee);\n } else {\n this.stack = (new Error()).stack;\n }\n}\nUnknownError.prototype = Object.create(Error.prototype);\n\n\n// Expose all error types.\n\nmodule.exports = {\n AuthTokenExpiredError: AuthTokenExpiredError,\n AuthTokenInvalidError: AuthTokenInvalidError,\n AuthTokenNotBeforeError: AuthTokenNotBeforeError,\n AuthTokenError: AuthTokenError,\n AuthError: AuthError,\n SilentMiddlewareBlockedError: SilentMiddlewareBlockedError,\n InvalidActionError: InvalidActionError,\n InvalidArgumentsError: InvalidArgumentsError,\n InvalidOptionsError: InvalidOptionsError,\n InvalidMessageError: InvalidMessageError,\n SocketProtocolError: SocketProtocolError,\n ServerProtocolError: ServerProtocolError,\n HTTPServerError: HTTPServerError,\n ResourceLimitError: ResourceLimitError,\n TimeoutError: TimeoutError,\n BadConnectionError: BadConnectionError,\n BrokerError: BrokerError,\n ProcessExitError: ProcessExitError,\n UnknownError: UnknownError\n};\n\nmodule.exports.socketProtocolErrorStatuses = {\n 1001: 'Socket was disconnected',\n 1002: 'A WebSocket protocol error was encountered',\n 1003: 'Server terminated socket because it received invalid data',\n 1005: 'Socket closed without status code',\n 1006: 'Socket hung up',\n 1007: 'Message format was incorrect',\n 1008: 'Encountered a policy violation',\n 1009: 'Message was too big to process',\n 1010: 'Client ended the connection because the server did not comply with extension requirements',\n 1011: 'Server encountered an unexpected fatal condition',\n 4000: 'Server ping timed out',\n 4001: 'Client pong timed out',\n 4002: 'Server failed to sign auth token',\n 4003: 'Failed to complete handshake',\n 4004: 'Client failed to save auth token',\n 4005: 'Did not receive #handshake from client before timeout',\n 4006: 'Failed to bind socket to message broker',\n 4007: 'Client connection establishment timed out',\n 4008: 'Server rejected handshake from client',\n 4009: 'Server received a message before the client handshake'\n};\n\nmodule.exports.socketProtocolIgnoreStatuses = {\n 1000: 'Socket closed normally',\n 1001: 'Socket hung up'\n};\n\n// Properties related to error domains cannot be serialized.\nvar unserializableErrorProperties = {\n domain: 1,\n domainEmitter: 1,\n domainThrown: 1\n};\n\n// Convert an error into a JSON-compatible type which can later be hydrated\n// back to its *original* form.\nmodule.exports.dehydrateError = function dehydrateError(error, includeStackTrace) {\n var dehydratedError;\n\n if (error && typeof error === 'object') {\n dehydratedError = {\n message: error.message\n };\n if (includeStackTrace) {\n dehydratedError.stack = error.stack;\n }\n for (var i in error) {\n if (!unserializableErrorProperties[i]) {\n dehydratedError[i] = error[i];\n }\n }\n } else if (typeof error === 'function') {\n dehydratedError = '[function ' + (error.name || 'anonymous') + ']';\n } else {\n dehydratedError = error;\n }\n\n return decycle(dehydratedError);\n};\n\n// Convert a dehydrated error back to its *original* form.\nmodule.exports.hydrateError = function hydrateError(error) {\n var hydratedError = null;\n if (error != null) {\n if (typeof error === 'object') {\n hydratedError = new Error(error.message);\n for (var i in error) {\n if (error.hasOwnProperty(i)) {\n hydratedError[i] = error[i];\n }\n }\n } else {\n hydratedError = error;\n }\n }\n return hydratedError;\n};\n\nmodule.exports.decycle = decycle;\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n var args = [].slice.call(arguments, 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","var Emitter = require('component-emitter');\r\nvar SCChannel = require('sc-channel').SCChannel;\r\nvar Response = require('./response').Response;\r\nvar AuthEngine = require('./auth').AuthEngine;\r\nvar formatter = require('sc-formatter');\r\nvar SCTransport = require('./sctransport').SCTransport;\r\nvar querystring = require('querystring');\r\nvar LinkedList = require('linked-list');\r\nvar Buffer = require('buffer/').Buffer;\r\nvar clone = require('clone');\r\n\r\nvar scErrors = require('sc-errors');\r\nvar InvalidArgumentsError = scErrors.InvalidArgumentsError;\r\nvar InvalidMessageError = scErrors.InvalidMessageError;\r\nvar InvalidActionError = scErrors.InvalidActionError;\r\nvar SocketProtocolError = scErrors.SocketProtocolError;\r\nvar TimeoutError = scErrors.TimeoutError;\r\nvar BadConnectionError = scErrors.BadConnectionError;\r\n\r\nvar isBrowser = typeof window !== 'undefined';\r\n\r\n\r\nvar SCClientSocket = function (opts) {\r\n var self = this;\r\n\r\n Emitter.call(this);\r\n\r\n this.id = null;\r\n this.state = this.CLOSED;\r\n this.authState = this.UNAUTHENTICATED;\r\n this.signedAuthToken = null;\r\n this.authToken = null;\r\n this.pendingReconnect = false;\r\n this.pendingReconnectTimeout = null;\r\n this.preparingPendingSubscriptions = false;\r\n this.clientId = opts.clientId;\r\n\r\n this.connectTimeout = opts.connectTimeout;\r\n this.ackTimeout = opts.ackTimeout;\r\n this.channelPrefix = opts.channelPrefix || null;\r\n this.disconnectOnUnload = opts.disconnectOnUnload == null ? true : opts.disconnectOnUnload;\r\n this.authTokenName = opts.authTokenName;\r\n\r\n // pingTimeout will be ackTimeout at the start, but it will\r\n // be updated with values provided by the 'connect' event\r\n this.pingTimeout = this.ackTimeout;\r\n this.pingTimeoutDisabled = !!opts.pingTimeoutDisabled;\r\n this.active = true;\r\n\r\n this._clientMap = opts.clientMap || {};\r\n\r\n var maxTimeout = Math.pow(2, 31) - 1;\r\n\r\n var verifyDuration = function (propertyName) {\r\n if (self[propertyName] > maxTimeout) {\r\n throw new InvalidArgumentsError('The ' + propertyName +\r\n ' value provided exceeded the maximum amount allowed');\r\n }\r\n };\r\n\r\n verifyDuration('connectTimeout');\r\n verifyDuration('ackTimeout');\r\n\r\n this._localEvents = {\r\n 'connect': 1,\r\n 'connectAbort': 1,\r\n 'close': 1,\r\n 'disconnect': 1,\r\n 'message': 1,\r\n 'error': 1,\r\n 'raw': 1,\r\n 'kickOut': 1,\r\n 'subscribe': 1,\r\n 'unsubscribe': 1,\r\n 'subscribeStateChange': 1,\r\n 'authStateChange': 1,\r\n 'authenticate': 1,\r\n 'deauthenticate': 1,\r\n 'removeAuthToken': 1,\r\n 'subscribeRequest': 1\r\n };\r\n\r\n this.connectAttempts = 0;\r\n\r\n this._emitBuffer = new LinkedList();\r\n this.channels = {};\r\n\r\n this.options = opts;\r\n\r\n this._cid = 1;\r\n\r\n this.options.callIdGenerator = function () {\r\n return self._cid++;\r\n };\r\n\r\n if (this.options.autoReconnect) {\r\n if (this.options.autoReconnectOptions == null) {\r\n this.options.autoReconnectOptions = {};\r\n }\r\n\r\n // Add properties to the this.options.autoReconnectOptions object.\r\n // We assign the reference to a reconnectOptions variable to avoid repetition.\r\n var reconnectOptions = this.options.autoReconnectOptions;\r\n if (reconnectOptions.initialDelay == null) {\r\n reconnectOptions.initialDelay = 10000;\r\n }\r\n if (reconnectOptions.randomness == null) {\r\n reconnectOptions.randomness = 10000;\r\n }\r\n if (reconnectOptions.multiplier == null) {\r\n reconnectOptions.multiplier = 1.5;\r\n }\r\n if (reconnectOptions.maxDelay == null) {\r\n reconnectOptions.maxDelay = 60000;\r\n }\r\n }\r\n\r\n if (this.options.subscriptionRetryOptions == null) {\r\n this.options.subscriptionRetryOptions = {};\r\n }\r\n\r\n if (this.options.authEngine) {\r\n this.auth = this.options.authEngine;\r\n } else {\r\n this.auth = new AuthEngine();\r\n }\r\n\r\n if (this.options.codecEngine) {\r\n this.codec = this.options.codecEngine;\r\n } else {\r\n // Default codec engine\r\n this.codec = formatter;\r\n }\r\n\r\n if (this.options.protocol) {\r\n var protocolOptionError = new InvalidArgumentsError('The \"protocol\" option' +\r\n ' does not affect socketcluster-client. If you want to utilize SSL/TLS' +\r\n ' - use \"secure\" option instead');\r\n this._onSCError(protocolOptionError);\r\n }\r\n\r\n this.options.path = this.options.path.replace(/\\/$/, '') + '/';\r\n\r\n this.options.query = opts.query || {};\r\n if (typeof this.options.query === 'string') {\r\n this.options.query = querystring.parse(this.options.query);\r\n }\r\n\r\n this._channelEmitter = new Emitter();\r\n\r\n this._unloadHandler = function () {\r\n self.disconnect();\r\n };\r\n\r\n if (isBrowser && this.disconnectOnUnload && global.addEventListener) {\r\n global.addEventListener('beforeunload', this._unloadHandler, false);\r\n }\r\n this._clientMap[this.clientId] = this;\r\n\r\n if (this.options.autoConnect) {\r\n this.connect();\r\n }\r\n};\r\n\r\nSCClientSocket.prototype = Object.create(Emitter.prototype);\r\n\r\nSCClientSocket.CONNECTING = SCClientSocket.prototype.CONNECTING = SCTransport.prototype.CONNECTING;\r\nSCClientSocket.OPEN = SCClientSocket.prototype.OPEN = SCTransport.prototype.OPEN;\r\nSCClientSocket.CLOSED = SCClientSocket.prototype.CLOSED = SCTransport.prototype.CLOSED;\r\n\r\nSCClientSocket.AUTHENTICATED = SCClientSocket.prototype.AUTHENTICATED = 'authenticated';\r\nSCClientSocket.UNAUTHENTICATED = SCClientSocket.prototype.UNAUTHENTICATED = 'unauthenticated';\r\n\r\nSCClientSocket.PENDING = SCClientSocket.prototype.PENDING = 'pending';\r\n\r\nSCClientSocket.ignoreStatuses = scErrors.socketProtocolIgnoreStatuses;\r\nSCClientSocket.errorStatuses = scErrors.socketProtocolErrorStatuses;\r\n\r\nSCClientSocket.prototype._privateEventHandlerMap = {\r\n '#publish': function (data) {\r\n var undecoratedChannelName = this._undecorateChannelName(data.channel);\r\n var isSubscribed = this.isSubscribed(undecoratedChannelName, true);\r\n\r\n if (isSubscribed) {\r\n this._channelEmitter.emit(undecoratedChannelName, data.data);\r\n }\r\n },\r\n '#kickOut': function (data) {\r\n var undecoratedChannelName = this._undecorateChannelName(data.channel);\r\n var channel = this.channels[undecoratedChannelName];\r\n if (channel) {\r\n Emitter.prototype.emit.call(this, 'kickOut', data.message, undecoratedChannelName);\r\n channel.emit('kickOut', data.message, undecoratedChannelName);\r\n this._triggerChannelUnsubscribe(channel);\r\n }\r\n },\r\n '#setAuthToken': function (data, response) {\r\n var self = this;\r\n\r\n if (data) {\r\n var triggerAuthenticate = function (err) {\r\n if (err) {\r\n // This is a non-fatal error, we don't want to close the connection\r\n // because of this but we do want to notify the server and throw an error\r\n // on the client.\r\n response.error(err);\r\n self._onSCError(err);\r\n } else {\r\n self._changeToAuthenticatedState(data.token);\r\n response.end();\r\n }\r\n };\r\n\r\n this.auth.saveToken(this.authTokenName, data.token, {}, triggerAuthenticate);\r\n } else {\r\n response.error(new InvalidMessageError('No token data provided by #setAuthToken event'));\r\n }\r\n },\r\n '#removeAuthToken': function (data, response) {\r\n var self = this;\r\n\r\n this.auth.removeToken(this.authTokenName, function (err, oldToken) {\r\n if (err) {\r\n // Non-fatal error - Do not close the connection\r\n response.error(err);\r\n self._onSCError(err);\r\n } else {\r\n Emitter.prototype.emit.call(self, 'removeAuthToken', oldToken);\r\n self._changeToUnauthenticatedStateAndClearTokens();\r\n response.end();\r\n }\r\n });\r\n },\r\n '#disconnect': function (data) {\r\n this.transport.close(data.code, data.data);\r\n }\r\n};\r\n\r\nSCClientSocket.prototype.getState = function () {\r\n return this.state;\r\n};\r\n\r\nSCClientSocket.prototype.getBytesReceived = function () {\r\n return this.transport.getBytesReceived();\r\n};\r\n\r\nSCClientSocket.prototype.deauthenticate = function (callback) {\r\n var self = this;\r\n\r\n this.auth.removeToken(this.authTokenName, function (err, oldToken) {\r\n if (err) {\r\n // Non-fatal error - Do not close the connection\r\n self._onSCError(err);\r\n } else {\r\n Emitter.prototype.emit.call(self, 'removeAuthToken', oldToken);\r\n if (self.state !== self.CLOSED) {\r\n self.emit('#removeAuthToken');\r\n }\r\n self._changeToUnauthenticatedStateAndClearTokens();\r\n }\r\n callback && callback(err);\r\n });\r\n};\r\n\r\nSCClientSocket.prototype.connect = SCClientSocket.prototype.open = function () {\r\n var self = this;\r\n\r\n if (!this.active) {\r\n var error = new InvalidActionError('Cannot connect a destroyed client');\r\n this._onSCError(error);\r\n return;\r\n }\r\n\r\n if (this.state === this.CLOSED) {\r\n this.pendingReconnect = false;\r\n this.pendingReconnectTimeout = null;\r\n clearTimeout(this._reconnectTimeoutRef);\r\n\r\n this.state = this.CONNECTING;\r\n Emitter.prototype.emit.call(this, 'connecting');\r\n\r\n if (this.transport) {\r\n this.transport.off();\r\n }\r\n\r\n this.transport = new SCTransport(this.auth, this.codec, this.options);\r\n\r\n this.transport.on('open', function (status) {\r\n self.state = self.OPEN;\r\n self._onSCOpen(status);\r\n });\r\n\r\n this.transport.on('error', function (err) {\r\n self._onSCError(err);\r\n });\r\n\r\n this.transport.on('close', function (code, data) {\r\n self.state = self.CLOSED;\r\n self._onSCClose(code, data);\r\n });\r\n\r\n this.transport.on('openAbort', function (code, data) {\r\n self.state = self.CLOSED;\r\n self._onSCClose(code, data, true);\r\n });\r\n\r\n this.transport.on('event', function (event, data, res) {\r\n self._onSCEvent(event, data, res);\r\n });\r\n }\r\n};\r\n\r\nSCClientSocket.prototype.reconnect = function (code, data) {\r\n this.disconnect(code, data);\r\n this.connect();\r\n};\r\n\r\nSCClientSocket.prototype.disconnect = function (code, data) {\r\n code = code || 1000;\r\n\r\n if (typeof code !== 'number') {\r\n throw new InvalidArgumentsError('If specified, the code argument must be a number');\r\n }\r\n\r\n if (this.state === this.OPEN || this.state === this.CONNECTING) {\r\n this.transport.close(code, data);\r\n } else {\r\n this.pendingReconnect = false;\r\n this.pendingReconnectTimeout = null;\r\n clearTimeout(this._reconnectTimeoutRef);\r\n }\r\n};\r\n\r\nSCClientSocket.prototype.destroy = function (code, data) {\r\n if (isBrowser && global.removeEventListener) {\r\n global.removeEventListener('beforeunload', this._unloadHandler, false);\r\n }\r\n this.active = false;\r\n this.disconnect(code, data);\r\n delete this._clientMap[this.clientId];\r\n};\r\n\r\nSCClientSocket.prototype._changeToUnauthenticatedStateAndClearTokens = function () {\r\n if (this.authState !== this.UNAUTHENTICATED) {\r\n var oldState = this.authState;\r\n var oldSignedToken = this.signedAuthToken;\r\n this.authState = this.UNAUTHENTICATED;\r\n this.signedAuthToken = null;\r\n this.authToken = null;\r\n\r\n var stateChangeData = {\r\n oldState: oldState,\r\n newState: this.authState\r\n };\r\n Emitter.prototype.emit.call(this, 'authStateChange', stateChangeData);\r\n Emitter.prototype.emit.call(this, 'deauthenticate', oldSignedToken);\r\n }\r\n};\r\n\r\nSCClientSocket.prototype._changeToAuthenticatedState = function (signedAuthToken) {\r\n this.signedAuthToken = signedAuthToken;\r\n this.authToken = this._extractAuthTokenData(signedAuthToken);\r\n\r\n if (this.authState !== this.AUTHENTICATED) {\r\n var oldState = this.authState;\r\n this.authState = this.AUTHENTICATED;\r\n var stateChangeData = {\r\n oldState: oldState,\r\n newState: this.authState,\r\n signedAuthToken: signedAuthToken,\r\n authToken: this.authToken\r\n };\r\n if (!this.preparingPendingSubscriptions) {\r\n this.processPendingSubscriptions();\r\n }\r\n\r\n Emitter.prototype.emit.call(this, 'authStateChange', stateChangeData);\r\n }\r\n Emitter.prototype.emit.call(this, 'authenticate', signedAuthToken);\r\n};\r\n\r\nSCClientSocket.prototype.decodeBase64 = function (encodedString) {\r\n return Buffer.from(encodedString, 'base64').toString('utf8');\r\n};\r\n\r\nSCClientSocket.prototype.encodeBase64 = function (decodedString) {\r\n return Buffer.from(decodedString, 'utf8').toString('base64');\r\n};\r\n\r\nSCClientSocket.prototype._extractAuthTokenData = function (signedAuthToken) {\r\n var tokenParts = (signedAuthToken || '').split('.');\r\n var encodedTokenData = tokenParts[1];\r\n if (encodedTokenData != null) {\r\n var tokenData = encodedTokenData;\r\n try {\r\n tokenData = this.decodeBase64(tokenData);\r\n return JSON.parse(tokenData);\r\n } catch (e) {\r\n return tokenData;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nSCClientSocket.prototype.getAuthToken = function () {\r\n return this.authToken;\r\n};\r\n\r\nSCClientSocket.prototype.getSignedAuthToken = function () {\r\n return this.signedAuthToken;\r\n};\r\n\r\n// Perform client-initiated authentication by providing an encrypted token string.\r\nSCClientSocket.prototype.authenticate = function (signedAuthToken, callback) {\r\n var self = this;\r\n\r\n this.emit('#authenticate', signedAuthToken, function (err, authStatus) {\r\n if (authStatus && authStatus.isAuthenticated != null) {\r\n // If authStatus is correctly formatted (has an isAuthenticated property),\r\n // then we will rehydrate the authError.\r\n if (authStatus.authError) {\r\n authStatus.authError = scErrors.hydrateError(authStatus.authError);\r\n }\r\n } else {\r\n // Some errors like BadConnectionError and TimeoutError will not pass a valid\r\n // authStatus object to the current function, so we need to create it ourselves.\r\n authStatus = {\r\n isAuthenticated: self.authState,\r\n authError: null\r\n };\r\n }\r\n if (err) {\r\n if (err.name !== 'BadConnectionError' && err.name !== 'TimeoutError') {\r\n // In case of a bad/closed connection or a timeout, we maintain the last\r\n // known auth state since those errors don't mean that the token is invalid.\r\n\r\n self._changeToUnauthenticatedStateAndClearTokens();\r\n }\r\n callback && callback(err, authStatus);\r\n } else {\r\n self.auth.saveToken(self.authTokenName, signedAuthToken, {}, function (err) {\r\n if (err) {\r\n self._onSCError(err);\r\n }\r\n if (authStatus.isAuthenticated) {\r\n self._changeToAuthenticatedState(signedAuthToken);\r\n } else {\r\n self._changeToUnauthenticatedStateAndClearTokens();\r\n }\r\n callback && callback(err, authStatus);\r\n });\r\n }\r\n });\r\n};\r\n\r\nSCClientSocket.prototype._tryReconnect = function (initialDelay) {\r\n var self = this;\r\n\r\n var exponent = this.connectAttempts++;\r\n var reconnectOptions = this.options.autoReconnectOptions;\r\n var timeout;\r\n\r\n if (initialDelay == null || exponent > 0) {\r\n var initialTimeout = Math.round(reconnectOptions.initialDelay + (reconnectOptions.randomness || 0) * Math.random());\r\n\r\n timeout = Math.round(initialTimeout * Math.pow(reconnectOptions.multiplier, exponent));\r\n } else {\r\n timeout = initialDelay;\r\n }\r\n\r\n if (timeout > reconnectOptions.maxDelay) {\r\n timeout = reconnectOptions.maxDelay;\r\n }\r\n\r\n clearTimeout(this._reconnectTimeoutRef);\r\n\r\n this.pendingReconnect = true;\r\n this.pendingReconnectTimeout = timeout;\r\n this._reconnectTimeoutRef = setTimeout(function () {\r\n self.connect();\r\n }, timeout);\r\n};\r\n\r\nSCClientSocket.prototype._onSCOpen = function (status) {\r\n var self = this;\r\n\r\n this.preparingPendingSubscriptions = true;\r\n\r\n if (status) {\r\n this.id = status.id;\r\n this.pingTimeout = status.pingTimeout;\r\n this.transport.pingTimeout = this.pingTimeout;\r\n if (status.isAuthenticated) {\r\n this._changeToAuthenticatedState(status.authToken);\r\n } else {\r\n this._changeToUnauthenticatedStateAndClearTokens();\r\n }\r\n } else {\r\n // This can happen if auth.loadToken (in sctransport.js) fails with\r\n // an error - This means that the signedAuthToken cannot be loaded by\r\n // the auth engine and therefore, we need to unauthenticate the client.\r\n this._changeToUnauthenticatedStateAndClearTokens();\r\n }\r\n\r\n this.connectAttempts = 0;\r\n\r\n if (this.options.autoSubscribeOnConnect) {\r\n this.processPendingSubscriptions();\r\n }\r\n\r\n // If the user invokes the callback while in autoSubscribeOnConnect mode, it\r\n // won't break anything.\r\n Emitter.prototype.emit.call(this, 'connect', status, function () {\r\n self.processPendingSubscriptions();\r\n });\r\n\r\n if (this.state === this.OPEN) {\r\n this._flushEmitBuffer();\r\n }\r\n};\r\n\r\nSCClientSocket.prototype._onSCError = function (err) {\r\n var self = this;\r\n\r\n // Throw error in different stack frame so that error handling\r\n // cannot interfere with a reconnect action.\r\n setTimeout(function () {\r\n if (self.listeners('error').length < 1) {\r\n throw err;\r\n } else {\r\n Emitter.prototype.emit.call(self, 'error', err);\r\n }\r\n }, 0);\r\n};\r\n\r\nSCClientSocket.prototype._suspendSubscriptions = function () {\r\n var channel, newState;\r\n for (var channelName in this.channels) {\r\n if (this.channels.hasOwnProperty(channelName)) {\r\n channel = this.channels[channelName];\r\n if (channel.state === channel.SUBSCRIBED ||\r\n channel.state === channel.PENDING) {\r\n\r\n newState = channel.PENDING;\r\n } else {\r\n newState = channel.UNSUBSCRIBED;\r\n }\r\n\r\n this._triggerChannelUnsubscribe(channel, newState);\r\n }\r\n }\r\n};\r\n\r\nSCClientSocket.prototype._abortAllPendingEventsDueToBadConnection = function (failureType) {\r\n var currentNode = this._emitBuffer.head;\r\n var nextNode;\r\n\r\n while (currentNode) {\r\n nextNode = currentNode.next;\r\n var eventObject = currentNode.data;\r\n clearTimeout(eventObject.timeout);\r\n delete eventObject.timeout;\r\n currentNode.detach();\r\n currentNode = nextNode;\r\n\r\n var callback = eventObject.callback;\r\n if (callback) {\r\n delete eventObject.callback;\r\n var errorMessage = \"Event '\" + eventObject.event +\r\n \"' was aborted due to a bad connection\";\r\n var error = new BadConnectionError(errorMessage, failureType);\r\n callback.call(eventObject, error, eventObject);\r\n }\r\n // Cleanup any pending response callback in the transport layer too.\r\n if (eventObject.cid) {\r\n this.transport.cancelPendingResponse(eventObject.cid);\r\n }\r\n }\r\n};\r\n\r\nSCClientSocket.prototype._onSCClose = function (code, data, openAbort) {\r\n var self = this;\r\n\r\n this.id = null;\r\n\r\n if (this.transport) {\r\n this.transport.off();\r\n }\r\n this.pendingReconnect = false;\r\n this.pendingReconnectTimeout = null;\r\n clearTimeout(this._reconnectTimeoutRef);\r\n\r\n this._suspendSubscriptions();\r\n this._abortAllPendingEventsDueToBadConnection(openAbort ? 'connectAbort' : 'disconnect');\r\n\r\n // Try to reconnect\r\n // on server ping timeout (4000)\r\n // or on client pong timeout (4001)\r\n // or on close without status (1005)\r\n // or on handshake failure (4003)\r\n // or on handshake rejection (4008)\r\n // or on socket hung up (1006)\r\n if (this.options.autoReconnect) {\r\n if (code === 4000 || code === 4001 || code === 1005) {\r\n // If there is a ping or pong timeout or socket closes without\r\n // status, don't wait before trying to reconnect - These could happen\r\n // if the client wakes up after a period of inactivity and in this case we\r\n // want to re-establish the connection as soon as possible.\r\n this._tryReconnect(0);\r\n\r\n // Codes 4500 and above will be treated as permanent disconnects.\r\n // Socket will not try to auto-reconnect.\r\n } else if (code !== 1000 && code < 4500) {\r\n this._tryReconnect();\r\n }\r\n }\r\n\r\n if (openAbort) {\r\n Emitter.prototype.emit.call(self, 'connectAbort', code, data);\r\n } else {\r\n Emitter.prototype.emit.call(self, 'disconnect', code, data);\r\n }\r\n Emitter.prototype.emit.call(self, 'close', code, data);\r\n\r\n if (!SCClientSocket.ignoreStatuses[code]) {\r\n var closeMessage;\r\n if (data) {\r\n closeMessage = 'Socket connection closed with status code ' + code + ' and reason: ' + data;\r\n } else {\r\n closeMessage = 'Socket connection closed with status code ' + code;\r\n }\r\n var err = new SocketProtocolError(SCClientSocket.errorStatuses[code] || closeMessage, code);\r\n this._onSCError(err);\r\n }\r\n};\r\n\r\nSCClientSocket.prototype._onSCEvent = function (event, data, res) {\r\n var handler = this._privateEventHandlerMap[event];\r\n if (handler) {\r\n handler.call(this, data, res);\r\n } else {\r\n Emitter.prototype.emit.call(this, event, data, function () {\r\n res && res.callback.apply(res, arguments);\r\n });\r\n }\r\n};\r\n\r\nSCClientSocket.prototype.decode = function (message) {\r\n return this.transport.decode(message);\r\n};\r\n\r\nSCClientSocket.prototype.encode = function (object) {\r\n return this.transport.encode(object);\r\n};\r\n\r\nSCClientSocket.prototype._flushEmitBuffer = function () {\r\n var currentNode = this._emitBuffer.head;\r\n var nextNode;\r\n\r\n while (currentNode) {\r\n nextNode = currentNode.next;\r\n var eventObject = currentNode.data;\r\n currentNode.detach();\r\n this.transport.emitObject(eventObject);\r\n currentNode = nextNode;\r\n }\r\n};\r\n\r\nSCClientSocket.prototype._handleEventAckTimeout = function (eventObject, eventNode) {\r\n if (eventNode) {\r\n eventNode.detach();\r\n }\r\n delete eventObject.timeout;\r\n\r\n var callback = eventObject.callback;\r\n if (callback) {\r\n delete eventObject.callback;\r\n var error = new TimeoutError(\"Event response for '\" + eventObject.event + \"' timed out\");\r\n callback.call(eventObject, error, eventObject);\r\n }\r\n // Cleanup any pending response callback in the transport layer too.\r\n if (eventObject.cid) {\r\n this.transport.cancelPendingResponse(eventObject.cid);\r\n }\r\n};\r\n\r\nSCClientSocket.prototype._emit = function (event, data, callback) {\r\n var self = this;\r\n\r\n if (this.state === this.CLOSED) {\r\n this.connect();\r\n }\r\n var eventObject = {\r\n event: event,\r\n callback: callback\r\n };\r\n\r\n var eventNode = new LinkedList.Item();\r\n\r\n if (this.options.cloneData) {\r\n eventObject.data = clone(data);\r\n } else {\r\n eventObject.data = data;\r\n }\r\n eventNode.data = eventObject;\r\n\r\n eventObject.timeout = setTimeout(function () {\r\n self._handleEventAckTimeout(eventObject, eventNode);\r\n }, this.ackTimeout);\r\n\r\n this._emitBuffer.append(eventNode);\r\n if (this.state === this.OPEN) {\r\n this._flushEmitBuffer();\r\n }\r\n};\r\n\r\nSCClientSocket.prototype.send = function (data) {\r\n this.transport.send(data);\r\n};\r\n\r\nSCClientSocket.prototype.emit = function (event, data, callback) {\r\n if (this._localEvents[event] == null) {\r\n this._emit(event, data, callback);\r\n } else if (event === 'error') {\r\n Emitter.prototype.emit.call(this, event, data);\r\n } else {\r\n var error = new InvalidActionError('The \"' + event + '\" event is reserved and cannot be emitted on a client socket');\r\n this._onSCError(error);\r\n }\r\n};\r\n\r\nSCClientSocket.prototype.publish = function (channelName, data, callback) {\r\n var pubData = {\r\n channel: this._decorateChannelName(channelName),\r\n data: data\r\n };\r\n this.emit('#publish', pubData, callback);\r\n};\r\n\r\nSCClientSocket.prototype._triggerChannelSubscribe = function (channel, subscriptionOptions) {\r\n var channelName = channel.name;\r\n\r\n if (channel.state !== channel.SUBSCRIBED) {\r\n var oldState = channel.state;\r\n channel.state = channel.SUBSCRIBED;\r\n\r\n var stateChangeData = {\r\n channel: channelName,\r\n oldState: oldState,\r\n newState: channel.state,\r\n subscriptionOptions: subscriptionOptions\r\n };\r\n channel.emit('subscribeStateChange', stateChangeData);\r\n channel.emit('subscribe', channelName, subscriptionOptions);\r\n Emitter.prototype.emit.call(this, 'subscribeStateChange', stateChangeData);\r\n Emitter.prototype.emit.call(this, 'subscribe', channelName, subscriptionOptions);\r\n }\r\n};\r\n\r\nSCClientSocket.prototype._triggerChannelSubscribeFail = function (err, channel, subscriptionOptions) {\r\n var channelName = channel.name;\r\n var meetsAuthRequirements = !channel.waitForAuth || this.authState === this.AUTHENTICATED;\r\n\r\n if (channel.state !== channel.UNSUBSCRIBED && meetsAuthRequirements) {\r\n channel.state = channel.UNSUBSCRIBED;\r\n\r\n channel.emit('subscribeFail', err, channelName, subscriptionOptions);\r\n Emitter.prototype.emit.call(this, 'subscribeFail', err, channelName, subscriptionOptions);\r\n }\r\n};\r\n\r\n// Cancel any pending subscribe callback\r\nSCClientSocket.prototype._cancelPendingSubscribeCallback = function (channel) {\r\n if (channel._pendingSubscriptionCid != null) {\r\n this.transport.cancelPendingResponse(channel._pendingSubscriptionCid);\r\n delete channel._pendingSubscriptionCid;\r\n }\r\n};\r\n\r\nSCClientSocket.prototype._decorateChannelName = function (channelName) {\r\n if (this.channelPrefix) {\r\n channelName = this.channelPrefix + channelName;\r\n }\r\n return channelName;\r\n};\r\n\r\nSCClientSocket.prototype._undecorateChannelName = function (decoratedChannelName) {\r\n if (this.channelPrefix && decoratedChannelName.indexOf(this.channelPrefix) === 0) {\r\n return decoratedChannelName.replace(this.channelPrefix, '');\r\n }\r\n return decoratedChannelName;\r\n};\r\n\r\nSCClientSocket.prototype._trySubscribe = function (channel) {\r\n var self = this;\r\n\r\n var meetsAuthRequirements = !channel.waitForAuth || this.authState === this.AUTHENTICATED;\r\n\r\n // We can only ever have one pending subscribe action at any given time on a channel\r\n if (this.state === this.OPEN && !this.preparingPendingSubscriptions &&\r\n channel._pendingSubscriptionCid == null && meetsAuthRequirements) {\r\n\r\n var options = {\r\n noTimeout: true\r\n };\r\n\r\n var subscriptionOptions = {\r\n channel: this._decorateChannelName(channel.name)\r\n };\r\n if (channel.waitForAuth) {\r\n options.waitForAuth = true;\r\n subscriptionOptions.waitForAuth = options.waitForAuth;\r\n }\r\n if (channel.data) {\r\n subscriptionOptions.data = channel.data;\r\n }\r\n if (channel.batch) {\r\n options.batch = true;\r\n subscriptionOptions.batch = true;\r\n }\r\n\r\n channel._pendingSubscriptionCid = this.transport.emit(\r\n '#subscribe', subscriptionOptions, options,\r\n function (err) {\r\n delete channel._pendingSubscriptionCid;\r\n if (err) {\r\n self._triggerChannelSubscribeFail(err, channel, subscriptionOptions);\r\n } else {\r\n self._triggerChannelSubscribe(channel, subscriptionOptions);\r\n }\r\n }\r\n );\r\n Emitter.prototype.emit.call(this, 'subscribeRequest', channel.name, subscriptionOptions);\r\n }\r\n};\r\n\r\nSCClientSocket.prototype.subscribe = function (channelName, options) {\r\n var channel = this.channels[channelName];\r\n\r\n if (!channel) {\r\n channel = new SCChannel(channelName, this, options);\r\n this.channels[channelName] = channel;\r\n } else if (options) {\r\n channel.setOptions(options);\r\n }\r\n\r\n if (channel.state === channel.UNSUBSCRIBED) {\r\n channel.state = channel.PENDING;\r\n this._trySubscribe(channel);\r\n }\r\n\r\n return channel;\r\n};\r\n\r\nSCClientSocket.prototype._triggerChannelUnsubscribe = function (channel, newState) {\r\n var channelName = channel.name;\r\n var oldState = channel.state;\r\n\r\n if (newState) {\r\n channel.state = newState;\r\n } else {\r\n channel.state = channel.UNSUBSCRIBED;\r\n }\r\n this._cancelPendingSubscribeCallback(channel);\r\n\r\n if (oldState === channel.SUBSCRIBED) {\r\n var stateChangeData = {\r\n channel: channelName,\r\n oldState: oldState,\r\n newState: channel.state\r\n };\r\n channel.emit('subscribeStateChange', stateChangeData);\r\n channel.emit('unsubscribe', channelName);\r\n Emitter.prototype.emit.call(this, 'subscribeStateChange', stateChangeData);\r\n Emitter.prototype.emit.call(this, 'unsubscribe', channelName);\r\n }\r\n};\r\n\r\nSCClientSocket.prototype._tryUnsubscribe = function (channel) {\r\n var self = this;\r\n\r\n if (this.state === this.OPEN) {\r\n var options = {\r\n noTimeout: true\r\n };\r\n if (channel.batch) {\r\n options.batch = true;\r\n }\r\n // If there is a pending subscribe action, cancel the callback\r\n this._cancelPendingSubscribeCallback(channel);\r\n\r\n // This operation cannot fail because the TCP protocol guarantees delivery\r\n // so long as the connection remains open. If the connection closes,\r\n // the server will automatically unsubscribe the client and thus complete\r\n // the operation on the server side.\r\n var decoratedChannelName = this._decorateChannelName(channel.name);\r\n this.transport.emit('#unsubscribe', decoratedChannelName, options);\r\n }\r\n};\r\n\r\nSCClientSocket.prototype.unsubscribe = function (channelName) {\r\n var channel = this.channels[channelName];\r\n\r\n if (channel) {\r\n if (channel.state !== channel.UNSUBSCRIBED) {\r\n this._triggerChannelUnsubscribe(channel);\r\n this._tryUnsubscribe(channel);\r\n }\r\n }\r\n};\r\n\r\nSCClientSocket.prototype.channel = function (channelName, options) {\r\n var currentChannel = this.channels[channelName];\r\n\r\n if (!currentChannel) {\r\n currentChannel = new SCChannel(channelName, this, options);\r\n this.channels[channelName] = currentChannel;\r\n }\r\n return currentChannel;\r\n};\r\n\r\nSCClientSocket.prototype.destroyChannel = function (channelName) {\r\n var channel = this.channels[channelName];\r\n\r\n if (channel) {\r\n channel.unwatch();\r\n channel.unsubscribe();\r\n delete this.channels[channelName];\r\n }\r\n};\r\n\r\nSCClientSocket.prototype.subscriptions = function (includePending) {\r\n var subs = [];\r\n var channel, includeChannel;\r\n for (var channelName in this.channels) {\r\n if (this.channels.hasOwnProperty(channelName)) {\r\n channel = this.channels[channelName];\r\n\r\n if (includePending) {\r\n includeChannel = channel && (channel.state === channel.SUBSCRIBED ||\r\n channel.state === channel.PENDING);\r\n } else {\r\n includeChannel = channel && channel.state === channel.SUBSCRIBED;\r\n }\r\n\r\n if (includeChannel) {\r\n subs.push(channelName);\r\n }\r\n }\r\n }\r\n return subs;\r\n};\r\n\r\nSCClientSocket.prototype.isSubscribed = function (channelName, includePending) {\r\n var channel = this.channels[channelName];\r\n if (includePending) {\r\n return !!channel && (channel.state === channel.SUBSCRIBED ||\r\n channel.state === channel.PENDING);\r\n }\r\n return !!channel && channel.state === channel.SUBSCRIBED;\r\n};\r\n\r\nSCClientSocket.prototype.processPendingSubscriptions = function () {\r\n var self = this;\r\n\r\n this.preparingPendingSubscriptions = false;\r\n\r\n var pendingChannels = [];\r\n\r\n for (var i in this.channels) {\r\n if (this.channels.hasOwnProperty(i)) {\r\n var channel = this.channels[i];\r\n if (channel.state === channel.PENDING) {\r\n pendingChannels.push(channel);\r\n }\r\n }\r\n }\r\n\r\n pendingChannels.sort(function (a, b) {\r\n var ap = a.priority || 0;\r\n var bp = b.priority || 0;\r\n if (ap > bp) {\r\n return -1;\r\n }\r\n if (ap < bp) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n\r\n pendingChannels.forEach(function (channel) {\r\n self._trySubscribe(channel);\r\n });\r\n};\r\n\r\nSCClientSocket.prototype.watch = function (channelName, handler) {\r\n if (typeof handler !== 'function') {\r\n throw new InvalidArgumentsError('No handler function was provided');\r\n }\r\n this._channelEmitter.on(channelName, handler);\r\n};\r\n\r\nSCClientSocket.prototype.unwatch = function (channelName, handler) {\r\n if (handler) {\r\n this._channelEmitter.removeListener(channelName, handler);\r\n } else {\r\n this._channelEmitter.removeAllListeners(channelName);\r\n }\r\n};\r\n\r\nSCClientSocket.prototype.watchers = function (channelName) {\r\n return this._channelEmitter.listeners(channelName);\r\n};\r\n\r\nmodule.exports = SCClientSocket;\r\n","var scErrors = require('sc-errors');\r\nvar InvalidActionError = scErrors.InvalidActionError;\r\n\r\nvar Response = function (socket, id) {\r\n this.socket = socket;\r\n this.id = id;\r\n this.sent = false;\r\n};\r\n\r\nResponse.prototype._respond = function (responseData) {\r\n if (this.sent) {\r\n throw new InvalidActionError('Response ' + this.id + ' has already been sent');\r\n } else {\r\n this.sent = true;\r\n this.socket.send(this.socket.encode(responseData));\r\n }\r\n};\r\n\r\nResponse.prototype.end = function (data) {\r\n if (this.id) {\r\n var responseData = {\r\n rid: this.id\r\n };\r\n if (data !== undefined) {\r\n responseData.data = data;\r\n }\r\n this._respond(responseData);\r\n }\r\n};\r\n\r\nResponse.prototype.error = function (error, data) {\r\n if (this.id) {\r\n var err = scErrors.dehydrateError(error);\r\n\r\n var responseData = {\r\n rid: this.id,\r\n error: err\r\n };\r\n if (data !== undefined) {\r\n responseData.data = data;\r\n }\r\n\r\n this._respond(responseData);\r\n }\r\n};\r\n\r\nResponse.prototype.callback = function (error, data) {\r\n if (error) {\r\n this.error(error, data);\r\n } else {\r\n this.end(data);\r\n }\r\n};\r\n\r\nmodule.exports.Response = Response;\r\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && msCrypto.getRandomValues.bind(msCrypto));\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]];\n}\n\nmodule.exports = bytesToUuid;\n","var SCClientSocket = require('./lib/scclientsocket');\r\nvar factory = require('./lib/factory');\r\n\r\nmodule.exports.factory = factory;\r\nmodule.exports.SCClientSocket = SCClientSocket;\r\n\r\nmodule.exports.Emitter = require('component-emitter');\r\n\r\nmodule.exports.create = function (options) {\r\n return factory.create(options);\r\n};\r\n\r\nmodule.exports.connect = module.exports.create;\r\n\r\nmodule.exports.destroy = function (socket) {\r\n return factory.destroy(socket);\r\n};\r\n\r\nmodule.exports.clients = factory.clients;\r\n\r\nmodule.exports.version = '14.3.1';\r\n","var Emitter = require('component-emitter');\n\nvar SCChannel = function (name, client, options) {\n var self = this;\n\n Emitter.call(this);\n\n this.PENDING = 'pending';\n this.SUBSCRIBED = 'subscribed';\n this.UNSUBSCRIBED = 'unsubscribed';\n\n this.name = name;\n this.state = this.UNSUBSCRIBED;\n this.client = client;\n\n this.options = options || {};\n this.setOptions(this.options);\n};\n\nSCChannel.prototype = Object.create(Emitter.prototype);\n\nSCChannel.prototype.setOptions = function (options) {\n if (!options) {\n options = {};\n }\n this.waitForAuth = options.waitForAuth || false;\n this.batch = options.batch || false;\n\n if (options.data !== undefined) {\n this.data = options.data;\n }\n};\n\nSCChannel.prototype.getState = function () {\n return this.state;\n};\n\nSCChannel.prototype.subscribe = function (options) {\n this.client.subscribe(this.name, options);\n};\n\nSCChannel.prototype.unsubscribe = function () {\n this.client.unsubscribe(this.name);\n};\n\nSCChannel.prototype.isSubscribed = function (includePending) {\n return this.client.isSubscribed(this.name, includePending);\n};\n\nSCChannel.prototype.publish = function (data, callback) {\n this.client.publish(this.name, data, callback);\n};\n\nSCChannel.prototype.watch = function (handler) {\n this.client.watch(this.name, handler);\n};\n\nSCChannel.prototype.unwatch = function (handler) {\n this.client.unwatch(this.name, handler);\n};\n\nSCChannel.prototype.watchers = function () {\n return this.client.watchers(this.name);\n};\n\nSCChannel.prototype.destroy = function () {\n this.client.destroyChannel(this.name);\n};\n\nmodule.exports.SCChannel = SCChannel;\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n var args = [].slice.call(arguments, 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","// Based on https://github.com/dscape/cycle/blob/master/cycle.js\n\nmodule.exports = function decycle(object) {\n// Make a deep copy of an object or array, assuring that there is at most\n// one instance of each object or array in the resulting structure. The\n// duplicate references (which might be forming cycles) are replaced with\n// an object of the form\n// {$ref: PATH}\n// where the PATH is a JSONPath string that locates the first occurance.\n// So,\n// var a = [];\n// a[0] = a;\n// return JSON.stringify(JSON.decycle(a));\n// produces the string '[{\"$ref\":\"$\"}]'.\n\n// JSONPath is used to locate the unique object. $ indicates the top level of\n// the object or array. [NUMBER] or [STRING] indicates a child member or\n// property.\n\n var objects = [], // Keep a reference to each unique object or array\n paths = []; // Keep the path to each unique object or array\n\n return (function derez(value, path) {\n\n// The derez recurses through the object, producing the deep copy.\n\n var i, // The loop counter\n name, // Property name\n nu; // The new object or array\n\n// typeof null === 'object', so go on if this value is really an object but not\n// one of the weird builtin objects.\n\n if (typeof value === 'object' && value !== null &&\n !(value instanceof Boolean) &&\n !(value instanceof Date) &&\n !(value instanceof Number) &&\n !(value instanceof RegExp) &&\n !(value instanceof String)) {\n\n// If the value is an object or array, look to see if we have already\n// encountered it. If so, return a $ref/path object. This is a hard way,\n// linear search that will get slower as the number of unique objects grows.\n\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return {$ref: paths[i]};\n }\n }\n\n// Otherwise, accumulate the unique value and its path.\n\n objects.push(value);\n paths.push(path);\n\n// If it is an array, replicate the array.\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n\n// If it is an object, replicate the object.\n\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(value[name],\n path + '[' + JSON.stringify(name) + ']');\n }\n }\n }\n return nu;\n }\n return value;\n }(object, '$'));\n};\n","var AuthEngine = function () {\r\n this._internalStorage = {};\r\n this.isLocalStorageEnabled = this._checkLocalStorageEnabled();\r\n};\r\n\r\nAuthEngine.prototype._checkLocalStorageEnabled = function () {\r\n var err;\r\n try {\r\n // Some browsers will throw an error here if localStorage is disabled.\r\n global.localStorage;\r\n\r\n // Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem\r\n // throw QuotaExceededError. We're going to detect this and avoid hard to debug edge cases.\r\n global.localStorage.setItem('__scLocalStorageTest', 1);\r\n global.localStorage.removeItem('__scLocalStorageTest');\r\n } catch (e) {\r\n err = e;\r\n }\r\n return !err;\r\n};\r\n\r\nAuthEngine.prototype.saveToken = function (name, token, options, callback) {\r\n if (this.isLocalStorageEnabled && global.localStorage) {\r\n global.localStorage.setItem(name, token);\r\n } else {\r\n this._internalStorage[name] = token;\r\n }\r\n callback && callback(null, token);\r\n};\r\n\r\nAuthEngine.prototype.removeToken = function (name, callback) {\r\n var token;\r\n\r\n this.loadToken(name, function (err, authToken) {\r\n token = authToken;\r\n });\r\n\r\n if (this.isLocalStorageEnabled && global.localStorage) {\r\n global.localStorage.removeItem(name);\r\n } else {\r\n delete this._internalStorage[name];\r\n }\r\n\r\n callback && callback(null, token);\r\n};\r\n\r\nAuthEngine.prototype.loadToken = function (name, callback) {\r\n var token;\r\n\r\n if (this.isLocalStorageEnabled && global.localStorage) {\r\n token = global.localStorage.getItem(name);\r\n } else {\r\n token = this._internalStorage[name] || null;\r\n }\r\n callback(null, token);\r\n};\r\n\r\nmodule.exports.AuthEngine = AuthEngine;\r\n","var base64Chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar validJSONStartRegex = /^[ \\n\\r\\t]*[{\\[]/;\n\nvar arrayBufferToBase64 = function (arraybuffer) {\n var bytes = new Uint8Array(arraybuffer);\n var len = bytes.length;\n var base64 = '';\n\n for (var i = 0; i < len; i += 3) {\n base64 += base64Chars[bytes[i] >> 2];\n base64 += base64Chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += base64Chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += base64Chars[bytes[i + 2] & 63];\n }\n\n if ((len % 3) === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n\n return base64;\n};\n\nvar binaryToBase64Replacer = function (key, value) {\n if (global.ArrayBuffer && value instanceof global.ArrayBuffer) {\n return {\n base64: true,\n data: arrayBufferToBase64(value)\n };\n } else if (global.Buffer) {\n if (value instanceof global.Buffer){\n return {\n base64: true,\n data: value.toString('base64')\n };\n }\n // Some versions of Node.js convert Buffers to Objects before they are passed to\n // the replacer function - Because of this, we need to rehydrate Buffers\n // before we can convert them to base64 strings.\n if (value && value.type === 'Buffer' && Array.isArray(value.data)) {\n var rehydratedBuffer;\n if (global.Buffer.from) {\n rehydratedBuffer = global.Buffer.from(value.data);\n } else {\n rehydratedBuffer = new global.Buffer(value.data);\n }\n return {\n base64: true,\n data: rehydratedBuffer.toString('base64')\n };\n }\n }\n return value;\n};\n\n// Decode the data which was transmitted over the wire to a JavaScript Object in a format which SC understands.\n// See encode function below for more details.\nmodule.exports.decode = function (input) {\n if (input == null) {\n return null;\n }\n // Leave ping or pong message as is\n if (input === '#1' || input === '#2') {\n return input;\n }\n var message = input.toString();\n\n // Performance optimization to detect invalid JSON packet sooner.\n if (!validJSONStartRegex.test(message)) {\n return message;\n }\n\n try {\n return JSON.parse(message);\n } catch (err) {}\n return message;\n};\n\n// Encode a raw JavaScript object (which is in the SC protocol format) into a format for\n// transfering it over the wire. In this case, we just convert it into a simple JSON string.\n// If you want to create your own custom codec, you can encode the object into any format\n// (e.g. binary ArrayBuffer or string with any kind of compression) so long as your decode\n// function is able to rehydrate that object back into its original JavaScript Object format\n// (which adheres to the SC protocol).\n// See https://github.com/SocketCluster/socketcluster/blob/master/socketcluster-protocol.md\n// for details about the SC protocol.\nmodule.exports.encode = function (object) {\n // Leave ping or pong message as is\n if (object === '#1' || object === '#2') {\n return object;\n }\n return JSON.stringify(object, binaryToBase64Replacer);\n};\n","var Emitter = require('component-emitter');\r\nvar Response = require('./response').Response;\r\nvar querystring = require('querystring');\r\nvar WebSocket;\r\nvar createWebSocket;\r\n\r\nif (global.WebSocket) {\r\n WebSocket = global.WebSocket;\r\n createWebSocket = function (uri, options) {\r\n return new WebSocket(uri);\r\n };\r\n} else {\r\n WebSocket = require('ws');\r\n createWebSocket = function (uri, options) {\r\n return new WebSocket(uri, null, options);\r\n };\r\n}\r\n\r\nvar scErrors = require('sc-errors');\r\nvar TimeoutError = scErrors.TimeoutError;\r\nvar BadConnectionError = scErrors.BadConnectionError;\r\n\r\n\r\nvar SCTransport = function (authEngine, codecEngine, options) {\r\n var self = this;\r\n\r\n this.state = this.CLOSED;\r\n this.auth = authEngine;\r\n this.codec = codecEngine;\r\n this.options = options;\r\n this.connectTimeout = options.connectTimeout;\r\n this.pingTimeout = options.ackTimeout;\r\n this.pingTimeoutDisabled = !!options.pingTimeoutDisabled;\r\n this.callIdGenerator = options.callIdGenerator;\r\n this.authTokenName = options.authTokenName;\r\n\r\n this._pingTimeoutTicker = null;\r\n this._callbackMap = {};\r\n this._batchSendList = [];\r\n\r\n // Open the connection.\r\n\r\n this.state = this.CONNECTING;\r\n var uri = this.uri();\r\n\r\n var wsSocket = createWebSocket(uri, this.options);\r\n wsSocket.binaryType = this.options.binaryType;\r\n\r\n this.socket = wsSocket;\r\n\r\n wsSocket.onopen = function () {\r\n self._onOpen();\r\n };\r\n\r\n wsSocket.onclose = function (event) {\r\n var code;\r\n if (event.code == null) {\r\n // This is to handle an edge case in React Native whereby\r\n // event.code is undefined when the mobile device is locked.\r\n // TODO: This is not perfect since this condition could also apply to\r\n // an abnormal close (no close control frame) which would be a 1006.\r\n code = 1005;\r\n } else {\r\n code = event.code;\r\n }\r\n self._onClose(code, event.reason);\r\n };\r\n\r\n wsSocket.onmessage = function (message, flags) {\r\n self._onMessage(message.data);\r\n };\r\n\r\n wsSocket.onerror = function (error) {\r\n // The onclose event will be called automatically after the onerror event\r\n // if the socket is connected - Otherwise, if it's in the middle of\r\n // connecting, we want to close it manually with a 1006 - This is necessary\r\n // to prevent inconsistent behavior when running the client in Node.js\r\n // vs in a browser.\r\n\r\n if (self.state === self.CONNECTING) {\r\n self._onClose(1006);\r\n }\r\n };\r\n\r\n this._connectTimeoutRef = setTimeout(function () {\r\n self._onClose(4007);\r\n self.socket.close(4007);\r\n }, this.connectTimeout);\r\n};\r\n\r\nSCTransport.prototype = Object.create(Emitter.prototype);\r\n\r\nSCTransport.CONNECTING = SCTransport.prototype.CONNECTING = 'connecting';\r\nSCTransport.OPEN = SCTransport.prototype.OPEN = 'open';\r\nSCTransport.CLOSED = SCTransport.prototype.CLOSED = 'closed';\r\n\r\nSCTransport.prototype.uri = function () {\r\n var query = this.options.query || {};\r\n var schema = this.options.secure ? 'wss' : 'ws';\r\n\r\n if (this.options.timestampRequests) {\r\n query[this.options.timestampParam] = (new Date()).getTime();\r\n }\r\n\r\n query = querystring.encode(query);\r\n\r\n if (query.length) {\r\n query = '?' + query;\r\n }\r\n\r\n var host;\r\n if (this.options.host) {\r\n host = this.options.host;\r\n } else {\r\n var port = '';\r\n\r\n if (this.options.port && ((schema === 'wss' && this.options.port !== 443)\r\n || (schema === 'ws' && this.options.port !== 80))) {\r\n port = ':' + this.options.port;\r\n }\r\n host = this.options.hostname + port;\r\n }\r\n\r\n return schema + '://' + host + this.options.path + query;\r\n};\r\n\r\nSCTransport.prototype._onOpen = function () {\r\n var self = this;\r\n\r\n clearTimeout(this._connectTimeoutRef);\r\n this._resetPingTimeout();\r\n\r\n this._handshake(function (err, status) {\r\n if (err) {\r\n var statusCode;\r\n if (status && status.code) {\r\n statusCode = status.code;\r\n } else {\r\n statusCode = 4003;\r\n }\r\n self._onError(err);\r\n self._onClose(statusCode, err.toString());\r\n self.socket.close(statusCode);\r\n } else {\r\n self.state = self.OPEN;\r\n Emitter.prototype.emit.call(self, 'open', status);\r\n self._resetPingTimeout();\r\n }\r\n });\r\n};\r\n\r\nSCTransport.prototype._handshake = function (callback) {\r\n var self = this;\r\n this.auth.loadToken(this.authTokenName, function (err, token) {\r\n if (err) {\r\n callback(err);\r\n } else {\r\n // Don't wait for this.state to be 'open'.\r\n // The underlying WebSocket (this.socket) is already open.\r\n var options = {\r\n force: true\r\n };\r\n self.emit('#handshake', {\r\n authToken: token\r\n }, options, function (err, status) {\r\n if (status) {\r\n // Add the token which was used as part of authentication attempt\r\n // to the status object.\r\n status.authToken = token;\r\n if (status.authError) {\r\n status.authError = scErrors.hydrateError(status.authError);\r\n }\r\n }\r\n callback(err, status);\r\n });\r\n }\r\n });\r\n};\r\n\r\nSCTransport.prototype._abortAllPendingEventsDueToBadConnection = function (failureType) {\r\n for (var i in this._callbackMap) {\r\n if (this._callbackMap.hasOwnProperty(i)) {\r\n var eventObject = this._callbackMap[i];\r\n delete this._callbackMap[i];\r\n\r\n clearTimeout(eventObject.timeout);\r\n delete eventObject.timeout;\r\n\r\n var errorMessage = \"Event '\" + eventObject.event +\r\n \"' was aborted due to a bad connection\";\r\n var badConnectionError = new BadConnectionError(errorMessage, failureType);\r\n\r\n var callback = eventObject.callback;\r\n delete eventObject.callback;\r\n callback.call(eventObject, badConnectionError, eventObject);\r\n }\r\n }\r\n};\r\n\r\nSCTransport.prototype._onClose = function (code, data) {\r\n delete this.socket.onopen;\r\n delete this.socket.onclose;\r\n delete this.socket.onmessage;\r\n delete this.socket.onerror;\r\n\r\n clearTimeout(this._connectTimeoutRef);\r\n clearTimeout(this._pingTimeoutTicker);\r\n clearTimeout(this._batchTimeout);\r\n\r\n if (this.state === this.OPEN) {\r\n this.state = this.CLOSED;\r\n Emitter.prototype.emit.call(this, 'close', code, data);\r\n this._abortAllPendingEventsDueToBadConnection('disconnect');\r\n\r\n } else if (this.state === this.CONNECTING) {\r\n this.state = this.CLOSED;\r\n Emitter.prototype.emit.call(this, 'openAbort', code, data);\r\n this._abortAllPendingEventsDueToBadConnection('connectAbort');\r\n }\r\n};\r\n\r\nSCTransport.prototype._handleEventObject = function (obj, message) {\r\n if (obj && obj.event != null) {\r\n var response = new Response(this, obj.cid);\r\n Emitter.prototype.emit.call(this, 'event', obj.event, obj.data, response);\r\n } else if (obj && obj.rid != null) {\r\n var eventObject = this._callbackMap[obj.rid];\r\n if (eventObject) {\r\n clearTimeout(eventObject.timeout);\r\n delete eventObject.timeout;\r\n delete this._callbackMap[obj.rid];\r\n\r\n if (eventObject.callback) {\r\n var rehydratedError = scErrors.hydrateError(obj.error);\r\n eventObject.callback(rehydratedError, obj.data);\r\n }\r\n }\r\n } else {\r\n Emitter.prototype.emit.call(this, 'event', 'raw', message);\r\n }\r\n};\r\n\r\nSCTransport.prototype._onMessage = function (message) {\r\n Emitter.prototype.emit.call(this, 'event', 'message', message);\r\n\r\n var obj = this.decode(message);\r\n\r\n // If ping\r\n if (obj === '#1') {\r\n this._resetPingTimeout();\r\n if (this.socket.readyState === this.socket.OPEN) {\r\n this.sendObject('#2');\r\n }\r\n } else {\r\n if (Array.isArray(obj)) {\r\n var len = obj.length;\r\n for (var i = 0; i < len; i++) {\r\n this._handleEventObject(obj[i], message);\r\n }\r\n } else {\r\n this._handleEventObject(obj, message);\r\n }\r\n }\r\n};\r\n\r\nSCTransport.prototype._onError = function (err) {\r\n Emitter.prototype.emit.call(this, 'error', err);\r\n};\r\n\r\nSCTransport.prototype._resetPingTimeout = function () {\r\n if (this.pingTimeoutDisabled) {\r\n return;\r\n }\r\n var self = this;\r\n\r\n var now = (new Date()).getTime();\r\n clearTimeout(this._pingTimeoutTicker);\r\n\r\n this._pingTimeoutTicker = setTimeout(function () {\r\n self._onClose(4000);\r\n self.socket.close(4000);\r\n }, this.pingTimeout);\r\n};\r\n\r\nSCTransport.prototype.getBytesReceived = function () {\r\n return this.socket.bytesReceived;\r\n};\r\n\r\nSCTransport.prototype.close = function (code, data) {\r\n code = code || 1000;\r\n\r\n if (this.state === this.OPEN) {\r\n var packet = {\r\n code: code,\r\n data: data\r\n };\r\n this.emit('#disconnect', packet);\r\n\r\n this._onClose(code, data);\r\n this.socket.close(code);\r\n\r\n } else if (this.state === this.CONNECTING) {\r\n this._onClose(code, data);\r\n this.socket.close(code);\r\n }\r\n};\r\n\r\nSCTransport.prototype.emitObject = function (eventObject, options) {\r\n var simpleEventObject = {\r\n event: eventObject.event,\r\n data: eventObject.data\r\n };\r\n\r\n if (eventObject.callback) {\r\n simpleEventObject.cid = eventObject.cid = this.callIdGenerator();\r\n this._callbackMap[eventObject.cid] = eventObject;\r\n }\r\n\r\n this.sendObject(simpleEventObject, options);\r\n\r\n return eventObject.cid || null;\r\n};\r\n\r\nSCTransport.prototype._handleEventAckTimeout = function (eventObject) {\r\n if (eventObject.cid) {\r\n delete this._callbackMap[eventObject.cid];\r\n }\r\n delete eventObject.timeout;\r\n\r\n var callback = eventObject.callback;\r\n if (callback) {\r\n delete eventObject.callback;\r\n var error = new TimeoutError(\"Event response for '\" + eventObject.event + \"' timed out\");\r\n callback.call(eventObject, error, eventObject);\r\n }\r\n};\r\n\r\n// The last two optional arguments (a and b) can be options and/or callback\r\nSCTransport.prototype.emit = function (event, data, a, b) {\r\n var self = this;\r\n\r\n var callback, options;\r\n\r\n if (b) {\r\n options = a;\r\n callback = b;\r\n } else {\r\n if (a instanceof Function) {\r\n options = {};\r\n callback = a;\r\n } else {\r\n options = a;\r\n }\r\n }\r\n\r\n var eventObject = {\r\n event: event,\r\n data: data,\r\n callback: callback\r\n };\r\n\r\n if (callback && !options.noTimeout) {\r\n eventObject.timeout = setTimeout(function () {\r\n self._handleEventAckTimeout(eventObject);\r\n }, this.options.ackTimeout);\r\n }\r\n\r\n var cid = null;\r\n if (this.state === this.OPEN || options.force) {\r\n cid = this.emitObject(eventObject, options);\r\n }\r\n return cid;\r\n};\r\n\r\nSCTransport.prototype.cancelPendingResponse = function (cid) {\r\n delete this._callbackMap[cid];\r\n};\r\n\r\nSCTransport.prototype.decode = function (message) {\r\n return this.codec.decode(message);\r\n};\r\n\r\nSCTransport.prototype.encode = function (object) {\r\n return this.codec.encode(object);\r\n};\r\n\r\nSCTransport.prototype.send = function (data) {\r\n if (this.socket.readyState !== this.socket.OPEN) {\r\n this._onClose(1005);\r\n } else {\r\n this.socket.send(data);\r\n }\r\n};\r\n\r\nSCTransport.prototype.serializeObject = function (object) {\r\n var str, formatError;\r\n try {\r\n str = this.encode(object);\r\n } catch (err) {\r\n formatError = err;\r\n this._onError(formatError);\r\n }\r\n if (!formatError) {\r\n return str;\r\n }\r\n return null;\r\n};\r\n\r\nSCTransport.prototype.sendObjectBatch = function (object) {\r\n var self = this;\r\n\r\n this._batchSendList.push(object);\r\n if (this._batchTimeout) {\r\n return;\r\n }\r\n\r\n this._batchTimeout = setTimeout(function () {\r\n delete self._batchTimeout;\r\n if (self._batchSendList.length) {\r\n var str = self.serializeObject(self._batchSendList);\r\n if (str != null) {\r\n self.send(str);\r\n }\r\n self._batchSendList = [];\r\n }\r\n }, this.options.pubSubBatchDuration || 0);\r\n};\r\n\r\nSCTransport.prototype.sendObjectSingle = function (object) {\r\n var str = this.serializeObject(object);\r\n if (str != null) {\r\n this.send(str);\r\n }\r\n};\r\n\r\nSCTransport.prototype.sendObject = function (object, options) {\r\n if (options && options.batch) {\r\n this.sendObjectBatch(object);\r\n } else {\r\n this.sendObjectSingle(object);\r\n }\r\n};\r\n\r\nmodule.exports.SCTransport = SCTransport;\r\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","var global;\r\nif (typeof WorkerGlobalScope !== 'undefined') {\r\n global = self;\r\n} else {\r\n global = typeof window !== 'undefined' && window || (function() { return this; })();\r\n}\r\n\r\nvar WebSocket = global.WebSocket || global.MozWebSocket;\r\n\r\n/**\r\n * WebSocket constructor.\r\n *\r\n * The third `opts` options object gets ignored in web browsers, since it's\r\n * non-standard, and throws a TypeError if passed to the constructor.\r\n * See: https://github.com/einaros/ws/issues/227\r\n *\r\n * @param {String} uri\r\n * @param {Array} protocols (optional)\r\n * @param {Object} opts (optional)\r\n * @api public\r\n */\r\n\r\nfunction ws(uri, protocols, opts) {\r\n var instance;\r\n if (protocols) {\r\n instance = new WebSocket(uri, protocols);\r\n } else {\r\n instance = new WebSocket(uri);\r\n }\r\n return instance;\r\n}\r\n\r\nif (WebSocket) ws.prototype = WebSocket.prototype;\r\n\r\nmodule.exports = WebSocket ? ws : null;\r\n","'use strict';\n\nmodule.exports = require('./_source/linked-list.js');\n","'use strict';\n\n/**\n * Constants.\n */\n\nvar errorMessage;\n\nerrorMessage = 'An argument without append, prepend, ' +\n 'or detach methods was given to `List';\n\n/**\n * Creates a new List: A linked list is a bit like an Array, but\n * knows nothing about how many items are in it, and knows only about its\n * first (`head`) and last (`tail`) items. Each item (e.g. `head`, `tail`,\n * &c.) knows which item comes before or after it (its more like the\n * implementation of the DOM in JavaScript).\n * @global\n * @private\n * @constructor\n * @class Represents an instance of List.\n */\n\nfunction List(/*items...*/) {\n if (arguments.length) {\n return List.from(arguments);\n }\n}\n\nvar ListPrototype;\n\nListPrototype = List.prototype;\n\n/**\n * Creates a new list from the arguments (each a list item) passed in.\n * @name List.of\n * @param {...ListItem} [items] - Zero or more items to attach.\n * @returns {list} - A new instance of List.\n */\n\nList.of = function (/*items...*/) {\n return List.from.call(this, arguments);\n};\n\n/**\n * Creates a new list from the given array-like object (each a list item)\n * passed in.\n * @name List.from\n * @param {ListItem[]} [items] - The items to append.\n * @returns {list} - A new instance of List.\n */\nList.from = function (items) {\n var list = new this(), length, iterator, item;\n\n if (items && (length = items.length)) {\n iterator = -1;\n\n while (++iterator < length) {\n item = items[iterator];\n\n if (item !== null && item !== undefined) {\n list.append(item);\n }\n }\n }\n\n return list;\n};\n\n/**\n * List#head\n * Default to `null`.\n */\nListPrototype.head = null;\n\n/**\n * List#tail\n * Default to `null`.\n */\nListPrototype.tail = null;\n\n/**\n * Returns the list's items as an array. This does *not* detach the items.\n * @name List#toArray\n * @returns {ListItem[]} - An array of (still attached) ListItems.\n */\nListPrototype.toArray = function () {\n var item = this.head,\n result = [];\n\n while (item) {\n result.push(item);\n item = item.next;\n }\n\n return result;\n};\n\n/**\n * Prepends the given item to the list: Item will be the new first item\n * (`head`).\n * @name List#prepend\n * @param {ListItem} item - The item to prepend.\n * @returns {ListItem} - An instance of ListItem (the given item).\n */\nListPrototype.prepend = function (item) {\n if (!item) {\n return false;\n }\n\n if (!item.append || !item.prepend || !item.detach) {\n throw new Error(errorMessage + '#prepend`.');\n }\n\n var self, head;\n\n // Cache self.\n self = this;\n\n // If self has a first item, defer prepend to the first items prepend\n // method, and return the result.\n head = self.head;\n\n if (head) {\n return head.prepend(item);\n }\n\n // ...otherwise, there is no `head` (or `tail`) item yet.\n\n // Detach the prependee.\n item.detach();\n\n // Set the prependees parent list to reference self.\n item.list = self;\n\n // Set self's first item to the prependee, and return the item.\n self.head = item;\n\n return item;\n};\n\n/**\n * Appends the given item to the list: Item will be the new last item (`tail`)\n * if the list had a first item, and its first item (`head`) otherwise.\n * @name List#append\n * @param {ListItem} item - The item to append.\n * @returns {ListItem} - An instance of ListItem (the given item).\n */\n\nListPrototype.append = function (item) {\n if (!item) {\n return false;\n }\n\n if (!item.append || !item.prepend || !item.detach) {\n throw new Error(errorMessage + '#append`.');\n }\n\n var self, head, tail;\n\n // Cache self.\n self = this;\n\n // If self has a last item, defer appending to the last items append\n // method, and return the result.\n tail = self.tail;\n\n if (tail) {\n return tail.append(item);\n }\n\n // If self has a first item, defer appending to the first items append\n // method, and return the result.\n head = self.head;\n\n if (head) {\n return head.append(item);\n }\n\n // ...otherwise, there is no `tail` or `head` item yet.\n\n // Detach the appendee.\n item.detach();\n\n // Set the appendees parent list to reference self.\n item.list = self;\n\n // Set self's first item to the appendee, and return the item.\n self.head = item;\n\n return item;\n};\n\n/**\n * Creates a new ListItem: A linked list item is a bit like DOM node:\n * It knows only about its \"parent\" (`list`), the item before it (`prev`),\n * and the item after it (`next`).\n * @global\n * @private\n * @constructor\n * @class Represents an instance of ListItem.\n */\n\nfunction ListItem() {}\n\nList.Item = ListItem;\n\nvar ListItemPrototype = ListItem.prototype;\n\nListItemPrototype.next = null;\n\nListItemPrototype.prev = null;\n\nListItemPrototype.list = null;\n\n/**\n * Detaches the item operated on from its parent list.\n * @name ListItem#detach\n * @returns {ListItem} - The item operated on.\n */\nListItemPrototype.detach = function () {\n // Cache self, the parent list, and the previous and next items.\n var self = this,\n list = self.list,\n prev = self.prev,\n next = self.next;\n\n // If the item is already detached, return self.\n if (!list) {\n return self;\n }\n\n // If self is the last item in the parent list, link the lists last item\n // to the previous item.\n if (list.tail === self) {\n list.tail = prev;\n }\n\n // If self is the first item in the parent list, link the lists first item\n // to the next item.\n if (list.head === self) {\n list.head = next;\n }\n\n // If both the last and first items in the parent list are the same,\n // remove the link to the last item.\n if (list.tail === list.head) {\n list.tail = null;\n }\n\n // If a previous item exists, link its next item to selfs next item.\n if (prev) {\n prev.next = next;\n }\n\n // If a next item exists, link its previous item to selfs previous item.\n if (next) {\n next.prev = prev;\n }\n\n // Remove links from self to both the next and previous items, and to the\n // parent list.\n self.prev = self.next = self.list = null;\n\n // Return self.\n return self;\n};\n\n/**\n * Prepends the given item *before* the item operated on.\n * @name ListItem#prepend\n * @param {ListItem} item - The item to prepend.\n * @returns {ListItem} - The item operated on, or false when that item is not\n * attached.\n */\nListItemPrototype.prepend = function (item) {\n if (!item || !item.append || !item.prepend || !item.detach) {\n throw new Error(errorMessage + 'Item#prepend`.');\n }\n\n // Cache self, the parent list, and the previous item.\n var self = this,\n list = self.list,\n prev = self.prev;\n\n // If self is detached, return false.\n if (!list) {\n return false;\n }\n\n // Detach the prependee.\n item.detach();\n\n // If self has a previous item...\n if (prev) {\n // ...link the prependees previous item, to selfs previous item.\n item.prev = prev;\n\n // ...link the previous items next item, to self.\n prev.next = item;\n }\n\n // Set the prependees next item to self.\n item.next = self;\n\n // Set the prependees parent list to selfs parent list.\n item.list = list;\n\n // Set the previous item of self to the prependee.\n self.prev = item;\n\n // If self is the first item in the parent list, link the lists first item\n // to the prependee.\n if (self === list.head) {\n list.head = item;\n }\n\n // If the the parent list has no last item, link the lists last item to\n // self.\n if (!list.tail) {\n list.tail = self;\n }\n\n // Return the prependee.\n return item;\n};\n\n/**\n * Appends the given item *after* the item operated on.\n * @name ListItem#append\n * @param {ListItem} item - The item to append.\n * @returns {ListItem} - The item operated on, or false when that item is not\n * attached.\n */\nListItemPrototype.append = function (item) {\n // If item is falsey, return false.\n if (!item || !item.append || !item.prepend || !item.detach) {\n throw new Error(errorMessage + 'Item#append`.');\n }\n\n // Cache self, the parent list, and the next item.\n var self = this,\n list = self.list,\n next = self.next;\n\n // If self is detached, return false.\n if (!list) {\n return false;\n }\n\n // Detach the appendee.\n item.detach();\n\n // If self has a next item...\n if (next) {\n // ...link the appendees next item, to selfs next item.\n item.next = next;\n\n // ...link the next items previous item, to the appendee.\n next.prev = item;\n }\n\n // Set the appendees previous item to self.\n item.prev = self;\n\n // Set the appendees parent list to selfs parent list.\n item.list = list;\n\n // Set the next item of self to the appendee.\n self.next = item;\n\n // If the the parent list has no last item or if self is the parent lists\n // last item, link the lists last item to the appendee.\n if (self === list.tail || !list.tail) {\n list.tail = item;\n }\n\n // Return the appendee.\n return item;\n};\n\n/**\n * Expose `List`.\n */\n\nmodule.exports = List;\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","var clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n nativeMap = Map;\n} catch(_) {\n // maybe a reference error because no `Map`. Give it a dummy value that no\n // value will ever be an instanceof.\n nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n nativeSet = Set;\n} catch(_) {\n nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n nativePromise = Promise;\n} catch(_) {\n nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n * should be cloned as well. Non-enumerable properties on the prototype\n * chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n includeNonEnumerable = circular.includeNonEnumerable;\n circular = circular.circular;\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth === 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (_instanceof(parent, nativeMap)) {\n child = new nativeMap();\n } else if (_instanceof(parent, nativeSet)) {\n child = new nativeSet();\n } else if (_instanceof(parent, nativePromise)) {\n child = new nativePromise(function (resolve, reject) {\n parent.then(function(value) {\n resolve(_clone(value, depth - 1));\n }, function(err) {\n reject(_clone(err, depth - 1));\n });\n });\n } else if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n child = new Buffer(parent.length);\n parent.copy(child);\n return child;\n } else if (_instanceof(parent, Error)) {\n child = Object.create(parent);\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n if (_instanceof(parent, nativeMap)) {\n parent.forEach(function(value, key) {\n var keyChild = _clone(key, depth - 1);\n var valueChild = _clone(value, depth - 1);\n child.set(keyChild, valueChild);\n });\n }\n if (_instanceof(parent, nativeSet)) {\n parent.forEach(function(value) {\n var entryChild = _clone(value, depth - 1);\n child.add(entryChild);\n });\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(parent);\n for (var i = 0; i < symbols.length; i++) {\n // Don't need to worry about cloning a symbol because it is a primitive,\n // like a number or string.\n var symbol = symbols[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n continue;\n }\n child[symbol] = _clone(parent[symbol], depth - 1);\n if (!descriptor.enumerable) {\n Object.defineProperty(child, symbol, {\n enumerable: false\n });\n }\n }\n }\n\n if (includeNonEnumerable) {\n var allPropertyNames = Object.getOwnPropertyNames(parent);\n for (var i = 0; i < allPropertyNames.length; i++) {\n var propertyName = allPropertyNames[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n if (descriptor && descriptor.enumerable) {\n continue;\n }\n child[propertyName] = _clone(parent[propertyName], depth - 1);\n Object.defineProperty(child, propertyName, {\n enumerable: false\n });\n }\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n module.exports = clone;\n}\n","var SCClientSocket = require('./scclientsocket');\r\nvar scErrors = require('sc-errors');\r\nvar uuid = require('uuid');\r\nvar InvalidArgumentsError = scErrors.InvalidArgumentsError;\r\n\r\nvar _clients = {};\r\n\r\nfunction getMultiplexId(options) {\r\n var protocolPrefix = options.secure ? 'https://' : 'http://';\r\n var queryString = '';\r\n if (options.query) {\r\n if (typeof options.query === 'string') {\r\n queryString = options.query;\r\n } else {\r\n var queryArray = [];\r\n var queryMap = options.query;\r\n for (var key in queryMap) {\r\n if (queryMap.hasOwnProperty(key)) {\r\n queryArray.push(key + '=' + queryMap[key]);\r\n }\r\n }\r\n if (queryArray.length) {\r\n queryString = '?' + queryArray.join('&');\r\n }\r\n }\r\n }\r\n var host;\r\n if (options.host) {\r\n host = options.host;\r\n } else {\r\n host = options.hostname + ':' + options.port;\r\n }\r\n return protocolPrefix + host + options.path + queryString;\r\n}\r\n\r\nfunction isUrlSecure() {\r\n return global.location && location.protocol === 'https:';\r\n}\r\n\r\nfunction getPort(options, isSecureDefault) {\r\n var isSecure = options.secure == null ? isSecureDefault : options.secure;\r\n return options.port || (global.location && location.port ? location.port : isSecure ? 443 : 80);\r\n}\r\n\r\nfunction create(options) {\r\n var self = this;\r\n\r\n options = options || {};\r\n\r\n if (options.host && !options.host.match(/[^:]+:\\d{2,5}/)) {\r\n throw new InvalidArgumentsError('The host option should include both' +\r\n ' the hostname and the port number in the format \"hostname:port\"');\r\n }\r\n\r\n if (options.host && options.hostname) {\r\n throw new InvalidArgumentsError('The host option should already include' +\r\n ' the hostname and the port number in the format \"hostname:port\"' +\r\n ' - Because of this, you should never use host and hostname options together');\r\n }\r\n\r\n if (options.host && options.port) {\r\n throw new InvalidArgumentsError('The host option should already include' +\r\n ' the hostname and the port number in the format \"hostname:port\"' +\r\n ' - Because of this, you should never use host and port options together');\r\n }\r\n\r\n var isSecureDefault = isUrlSecure();\r\n\r\n var opts = {\r\n port: getPort(options, isSecureDefault),\r\n hostname: global.location && location.hostname || 'localhost',\r\n path: '/socketcluster/',\r\n secure: isSecureDefault,\r\n autoConnect: true,\r\n autoReconnect: true,\r\n autoSubscribeOnConnect: true,\r\n connectTimeout: 20000,\r\n ackTimeout: 10000,\r\n timestampRequests: false,\r\n timestampParam: 't',\r\n authEngine: null,\r\n authTokenName: 'socketCluster.authToken',\r\n binaryType: 'arraybuffer',\r\n multiplex: true,\r\n pubSubBatchDuration: null,\r\n cloneData: false\r\n };\r\n for (var i in options) {\r\n if (options.hasOwnProperty(i)) {\r\n opts[i] = options[i];\r\n }\r\n }\r\n opts.clientMap = _clients;\r\n\r\n if (opts.multiplex === false) {\r\n opts.clientId = uuid.v4();\r\n var socket = new SCClientSocket(opts);\r\n _clients[opts.clientId] = socket;\r\n return socket;\r\n }\r\n opts.clientId = getMultiplexId(opts);\r\n\r\n if (_clients[opts.clientId]) {\r\n if (opts.autoConnect) {\r\n _clients[opts.clientId].connect();\r\n }\r\n } else {\r\n _clients[opts.clientId] = new SCClientSocket(opts);\r\n }\r\n return _clients[opts.clientId];\r\n}\r\n\r\nfunction destroy(socket) {\r\n socket.destroy();\r\n}\r\n\r\nmodule.exports = {\r\n create: create,\r\n destroy: destroy,\r\n clients: _clients\r\n};\r\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n"],"sourceRoot":""}
| ver. 1.4 |
Github
|
.
| PHP 8.2.30 | ���֧ߧ֧�ѧ�ڧ� ����ѧߧڧ��: 0.14 |
proxy
|
phpinfo
|
���ѧ����ۧܧ�