{"version":3,"file":"filestack.js","sources":["../config/env_production.js","../node_modules/api-client/api-client.es2015.js","../node_modules/loader/dist/loader.es2015.js","../lib/index.js"],"sourcesContent":["export default {\n picker: 'https://static.filestackapi.com/picker/v3/picker-0.9.7.js',\n};\n","var ENV = {\n storeApiUrl: 'https://www.filestackapi.com/api/store',\n fileApiUrl: 'https://www.filestackapi.com/api/file',\n uploadApiUrl: 'https://upload.filestackapi.com',\n cloudApiUrl: 'https://cloud.filestackapi.com',\n processApiUrl: 'https://process.filestackapi.com'\n};\n\nvar isFunction = function isFunction(x) {\n return typeof x === 'function';\n};\n\nvar isNil = function isNil(x) {\n return x === null || x === void 0;\n};\n\nvar fail = function fail(message) {\n throw new TypeError('[tcomb] ' + message);\n};\n\nvar getFunctionName = function getFunctionName(f) {\n return f.displayName || f.name || '';\n};\n\nfunction replacer(key, value) {\n if (typeof value === 'function') {\n return getFunctionName(value);\n }\n return value;\n}\n\nvar stringify$1 = function stringify(x) {\n try { // handle \"Converting circular structure to JSON\" error\n return JSON.stringify(x, replacer, 2);\n }\n catch (e) {\n return String(x);\n }\n};\n\nfunction assert(guard, message) {\n if (guard !== true) {\n if (isFunction(message)) { // handle lazy messages\n message = message();\n }\n else if (isNil(message)) { // use a default message\n message = 'Assert failed (turn on \"Pause on exceptions\" in your Source panel)';\n }\n assert.fail(message);\n }\n}\n\nassert.fail = fail;\nassert.stringify = stringify$1;\n\nvar assert_1 = assert;\n\nvar isString = function isString(x) {\n return typeof x === 'string';\n};\n\nvar isArray = function isArray(x) {\n return Array.isArray ? Array.isArray(x) : x instanceof Array;\n};\n\nvar isObject = function isObject(x) {\n return !isNil(x) && typeof x === 'object' && !isArray(x);\n};\n\nvar isType = function isType(x) {\n return isFunction(x) && isObject(x.meta);\n};\n\nvar getTypeName = function getTypeName(ctor) {\n if (isType(ctor)) {\n return ctor.displayName;\n }\n return getFunctionName(ctor);\n};\n\nvar irreducible = function irreducible(name, predicate) {\n\n function Irreducible(value, path) {\n\n return value;\n }\n\n Irreducible.meta = {\n kind: 'irreducible',\n name: name,\n predicate: predicate,\n identity: true\n };\n\n Irreducible.displayName = name;\n\n Irreducible.is = predicate;\n\n return Irreducible;\n};\n\nvar Any = irreducible('Any', function () { return true; });\n\nvar _Array = irreducible('Array', isArray);\n\nvar isBoolean = function isBoolean(x) {\n return x === true || x === false;\n};\n\nvar _Boolean = irreducible('Boolean', isBoolean);\n\nvar _Date = irreducible('Date', function (x) { return x instanceof Date; });\n\nvar _Error = irreducible('Error', function (x) { return x instanceof Error; });\n\nvar _Function = irreducible('Function', isFunction);\n\nvar Nil = irreducible('Nil', isNil);\n\nvar isNumber = function isNumber(x) {\n return typeof x === 'number' && isFinite(x) && !isNaN(x);\n};\n\nvar _Number = irreducible('Number', isNumber);\n\n// return true if the type constructor behaves like the identity function\nvar isIdentity = function isIdentity(type) {\n if (isType(type)) {\n return type.meta.identity;\n }\n // for tcomb the other constructors, like ES6 classes, are identity-like\n return true;\n};\n\n// creates an instance of a type, handling the optional new operator\nvar create = function create(type, value, path) {\n if (isType(type)) {\n return !type.meta.identity && typeof value === 'object' && value !== null ? new type(value, path): type(value, path);\n }\n\n return value;\n};\n\n// returns true if x is an instance of type\nvar is = function is(x, type) {\n if (isType(type)) {\n return type.is(x);\n }\n return x instanceof type; // type should be a class constructor\n};\n\nfunction getDefaultName(type, predicate) {\n return '{' + getTypeName(type) + ' | ' + getFunctionName(predicate) + '}';\n}\n\nfunction refinement(type, predicate, name) {\n\n var displayName = name || getDefaultName(type, predicate);\n var identity = isIdentity(type);\n\n function Refinement(value, path) {\n\n var x = create(type, value, path);\n\n return x;\n }\n\n Refinement.meta = {\n kind: 'subtype',\n type: type,\n predicate: predicate,\n name: name,\n identity: identity\n };\n\n Refinement.displayName = displayName;\n\n Refinement.is = function (x) {\n return is(x, type) && predicate(x);\n };\n\n Refinement.update = function (instance, patch) {\n return Refinement(assert_1.update(instance, patch));\n };\n\n return Refinement;\n}\n\nrefinement.getDefaultName = getDefaultName;\nvar refinement_1 = refinement;\n\nvar Integer = refinement_1(_Number, function (x) { return x % 1 === 0; }, 'Integer');\n\nvar _Object = irreducible('Object', isObject);\n\nvar _RegExp = irreducible('RegExp', function (x) { return x instanceof RegExp; });\n\nvar _String = irreducible('String', isString);\n\nvar Type = irreducible('Type', isType);\n\nfunction getDefaultName$1(domain, codomain) {\n return '{[key: ' + getTypeName(domain) + ']: ' + getTypeName(codomain) + '}';\n}\n\nfunction dict(domain, codomain, name) {\n\n var displayName = name || getDefaultName$1(domain, codomain);\n var domainNameCache = getTypeName(domain);\n var codomainNameCache = getTypeName(codomain);\n var identity = isIdentity(domain) && isIdentity(codomain);\n\n function Dict(value, path) {\n\n {\n if (identity) {\n return value; // just trust the input if elements must not be hydrated\n }\n }\n\n var idempotent = true; // will remain true if I can reutilise the input\n var ret = {}; // make a temporary copy, will be discarded if idempotent remains true\n for (var k in value) {\n if (value.hasOwnProperty(k)) {\n k = create(domain, k, ( null ));\n var actual = value[k];\n var instance = create(codomain, actual, ( null ));\n idempotent = idempotent && ( actual === instance );\n ret[k] = instance;\n }\n }\n\n if (idempotent) { // implements idempotency\n ret = value;\n }\n\n return ret;\n }\n\n Dict.meta = {\n kind: 'dict',\n domain: domain,\n codomain: codomain,\n name: name,\n identity: identity\n };\n\n Dict.displayName = displayName;\n\n Dict.is = function (x) {\n if (!isObject(x)) {\n return false;\n }\n for (var k in x) {\n if (x.hasOwnProperty(k)) {\n if (!is(k, domain) || !is(x[k], codomain)) {\n return false;\n }\n }\n }\n return true;\n };\n\n Dict.update = function (instance, patch) {\n return Dict(assert_1.update(instance, patch));\n };\n\n return Dict;\n}\n\ndict.getDefaultName = getDefaultName$1;\nvar dict_1 = dict;\n\n// safe mixin, cannot override props unless specified\nvar mixin = function mixin(target, source, overwrite) {\n if (isNil(source)) { return target; }\n for (var k in source) {\n if (source.hasOwnProperty(k)) {\n if (overwrite !== true) {\n \n }\n target[k] = source[k];\n }\n }\n return target;\n};\n\nvar isUnion = function isUnion(x) {\n return isType(x) && ( x.meta.kind === 'union' );\n};\n\n// All the .declare-d types should be clearly different from each other thus they should have\n// different names when a name was not explicitly provided.\nvar nextDeclareUniqueId = 1;\n\nvar declare = function declare(name) {\n var type;\n\n function Declare(value, path) {\n return type(value, path);\n }\n\n Declare.define = function (spec) {\n if (isUnion(spec) && Declare.hasOwnProperty('dispatch')) {\n spec.dispatch = Declare.dispatch;\n }\n type = spec;\n mixin(Declare, type, true); // true because it overwrites Declare.displayName\n if (name) {\n type.displayName = Declare.displayName = name;\n Declare.meta.name = name;\n }\n Declare.meta.identity = type.meta.identity;\n Declare.prototype = type.prototype;\n return Declare;\n };\n\n Declare.displayName = name || ( getTypeName(Declare) + \"$\" + nextDeclareUniqueId++ );\n // in general I can't say if this type will be an identity, for safety setting to false\n Declare.meta = { identity: false };\n Declare.prototype = null;\n return Declare;\n};\n\nfunction getDefaultName$2(map) {\n return Object.keys(map).map(function (k) { return assert_1.stringify(k); }).join(' | ');\n}\n\nfunction enums(map, name) {\n\n var displayName = name || getDefaultName$2(map);\n\n function Enums(value, path) {\n\n return value;\n }\n\n Enums.meta = {\n kind: 'enums',\n map: map,\n name: name,\n identity: true\n };\n\n Enums.displayName = displayName;\n\n Enums.is = function (x) {\n return map.hasOwnProperty(x);\n };\n\n return Enums;\n}\n\nenums.of = function (keys, name) {\n keys = isString(keys) ? keys.split(' ') : keys;\n var value = {};\n keys.forEach(function (k) {\n value[k] = k;\n });\n return enums(value, name);\n};\n\nenums.getDefaultName = getDefaultName$2;\nvar enums_1 = enums;\n\nfunction getDefaultName$3(type) {\n return 'Array<' + getTypeName(type) + '>';\n}\n\nfunction list(type, name) {\n\n var displayName = name || getDefaultName$3(type);\n var typeNameCache = getTypeName(type);\n var identity = isIdentity(type); // the list is identity iif type is identity\n\n function List(value, path) {\n\n {\n if (identity) {\n return value; // just trust the input if elements must not be hydrated\n }\n }\n\n var idempotent = true; // will remain true if I can reutilise the input\n var ret = []; // make a temporary copy, will be discarded if idempotent remains true\n for (var i = 0, len = value.length; i < len; i++ ) {\n var actual = value[i];\n var instance = create(type, actual, ( null ));\n idempotent = idempotent && ( actual === instance );\n ret.push(instance);\n }\n\n if (idempotent) { // implements idempotency\n ret = value;\n }\n\n return ret;\n }\n\n List.meta = {\n kind: 'list',\n type: type,\n name: name,\n identity: identity\n };\n\n List.displayName = displayName;\n\n List.is = function (x) {\n return isArray(x) && x.every(function (e) {\n return is(e, type);\n });\n };\n\n List.update = function (instance, patch) {\n return List(assert_1.update(instance, patch));\n };\n\n return List;\n}\n\nlist.getDefaultName = getDefaultName$3;\nvar list_1 = list;\n\nvar isMaybe = function isMaybe(x) {\n return isType(x) && ( x.meta.kind === 'maybe' );\n};\n\nfunction getDefaultName$4(type) {\n return '?' + getTypeName(type);\n}\n\nfunction maybe(type, name) {\n\n if (isMaybe(type) || type === Any || type === Nil) { // makes the combinator idempotent and handle Any, Nil\n return type;\n }\n\n var displayName = name || getDefaultName$4(type);\n var identity = isIdentity(type);\n\n function Maybe(value, path) {\n return Nil.is(value) ? value : create(type, value, path);\n }\n\n Maybe.meta = {\n kind: 'maybe',\n type: type,\n name: name,\n identity: identity\n };\n\n Maybe.displayName = displayName;\n\n Maybe.is = function (x) {\n return Nil.is(x) || is(x, type);\n };\n\n return Maybe;\n}\n\nmaybe.getDefaultName = getDefaultName$4;\nvar maybe_1 = maybe;\n\nfunction getDefaultInterfaceName(props) {\n return '{' + Object.keys(props).map(function (prop) {\n return prop + ': ' + getTypeName(props[prop]);\n }).join(', ') + '}';\n}\n\nvar getDefaultInterfaceName_1 = getDefaultInterfaceName;\n\nfunction isRefinement(type) {\n return isType(type) && type.meta.kind === 'subtype';\n}\n\nfunction getPredicates(type) {\n return isRefinement(type) ?\n [type.meta.predicate].concat(getPredicates(type.meta.type)) :\n [];\n}\n\nfunction getUnrefinedType(type) {\n return isRefinement(type) ?\n getUnrefinedType(type.meta.type) :\n type;\n}\n\nfunction decompose(type) {\n return {\n predicates: getPredicates(type),\n unrefinedType: getUnrefinedType(type)\n };\n}\n\nvar decompose_1 = decompose;\n\nfunction compose(predicates, unrefinedType) {\n return predicates.reduce(function (type, predicate) {\n return refinement_1(type, predicate);\n }, unrefinedType);\n}\n\nfunction getProps(type) {\n return isObject(type) ? type : type.meta.props;\n}\n\nfunction getDefaultProps(type) {\n return isObject(type) ? null : type.meta.defaultProps;\n}\n\nfunction pushAll(arr, elements) {\n Array.prototype.push.apply(arr, elements);\n}\n\nfunction extend(combinator, mixins, options) {\n var props = {};\n var prototype = {};\n var predicates = [];\n var defaultProps = {};\n mixins.forEach(function (x, i) {\n var decomposition = decompose_1(x);\n var unrefinedType = decomposition.unrefinedType;\n pushAll(predicates, decomposition.predicates);\n mixin(props, getProps(unrefinedType));\n mixin(prototype, unrefinedType.prototype);\n mixin(defaultProps, getDefaultProps(unrefinedType), true);\n });\n options = combinator.getOptions(options);\n options.defaultProps = mixin(defaultProps, options.defaultProps, true);\n var result = compose(predicates, combinator(props, options));\n mixin(result.prototype, prototype);\n return result;\n}\n\nvar extend_1 = extend;\n\nfunction getDefaultName$5(props) {\n return 'Struct' + getDefaultInterfaceName_1(props);\n}\n\nfunction extendStruct(mixins, name) {\n return extend_1(struct, mixins, name);\n}\n\nfunction getOptions(options) {\n if (!isObject(options)) {\n options = isNil(options) ? {} : { name: options };\n }\n if (!options.hasOwnProperty('strict')) {\n options.strict = struct.strict;\n }\n if (!options.hasOwnProperty('defaultProps')) {\n options.defaultProps = {};\n }\n return options;\n}\n\nfunction struct(props, options) {\n\n options = getOptions(options);\n var name = options.name;\n var strict = options.strict;\n var defaultProps = options.defaultProps;\n\n var displayName = name || getDefaultName$5(props);\n\n function Struct(value, path) {\n\n if (Struct.is(value)) { // implements idempotency\n return value;\n }\n\n if (!(this instanceof Struct)) { // `new` is optional\n return new Struct(value, path);\n }\n\n for (var k in props) {\n if (props.hasOwnProperty(k)) {\n var expected = props[k];\n var actual = value[k];\n // apply defaults\n if (actual === undefined) {\n actual = defaultProps[k];\n }\n this[k] = create(expected, actual, ( null ));\n }\n }\n\n \n\n }\n\n Struct.meta = {\n kind: 'struct',\n props: props,\n name: name,\n identity: false,\n strict: strict,\n defaultProps: defaultProps\n };\n\n Struct.displayName = displayName;\n\n Struct.is = function (x) {\n return x instanceof Struct;\n };\n\n Struct.update = function (instance, patch) {\n return new Struct(assert_1.update(instance, patch));\n };\n\n Struct.extend = function (xs, name) {\n return extendStruct([Struct].concat(xs), name);\n };\n\n return Struct;\n}\n\nstruct.strict = false;\nstruct.getOptions = getOptions;\nstruct.getDefaultName = getDefaultName$5;\nstruct.extend = extendStruct;\nvar struct_1 = struct;\n\nfunction getDefaultName$6(types) {\n return '[' + types.map(getTypeName).join(', ') + ']';\n}\n\nfunction tuple(types, name) {\n\n var displayName = name || getDefaultName$6(types);\n var identity = types.every(isIdentity);\n\n function Tuple(value, path) {\n\n {\n if (identity) {\n return value;\n }\n }\n\n var idempotent = true;\n var ret = [];\n for (var i = 0, len = types.length; i < len; i++) {\n var expected = types[i];\n var actual = value[i];\n var instance = create(expected, actual, ( null ));\n idempotent = idempotent && ( actual === instance );\n ret.push(instance);\n }\n\n if (idempotent) { // implements idempotency\n ret = value;\n }\n\n return ret;\n }\n\n Tuple.meta = {\n kind: 'tuple',\n types: types,\n name: name,\n identity: identity\n };\n\n Tuple.displayName = displayName;\n\n Tuple.is = function (x) {\n return isArray(x) &&\n x.length === types.length &&\n types.every(function (type, i) {\n return is(x[i], type);\n });\n };\n\n Tuple.update = function (instance, patch) {\n return Tuple(assert_1.update(instance, patch));\n };\n\n return Tuple;\n}\n\ntuple.getDefaultName = getDefaultName$6;\nvar tuple_1 = tuple;\n\nfunction getDefaultName$7(types) {\n return types.map(getTypeName).join(' | ');\n}\n\nfunction union(types, name) {\n\n var displayName = name || getDefaultName$7(types);\n var identity = types.every(isIdentity);\n\n function Union(value, path) {\n\n {\n if (identity) {\n return value;\n }\n }\n\n var type = Union.dispatch(value);\n if (!type && Union.is(value)) {\n return value;\n }\n\n return create(type, value, path);\n }\n\n Union.meta = {\n kind: 'union',\n types: types,\n name: name,\n identity: identity\n };\n\n Union.displayName = displayName;\n\n Union.is = function (x) {\n return types.some(function (type) {\n return is(x, type);\n });\n };\n\n Union.dispatch = function (x) { // default dispatch implementation\n for (var i = 0, len = types.length; i < len; i++ ) {\n var type = types[i];\n if (isUnion(type)) { // handle union of unions\n var t = type.dispatch(x);\n if (!isNil(t)) {\n return t;\n }\n }\n else if (is(x, type)) {\n return type;\n }\n }\n };\n\n Union.update = function (instance, patch) {\n return Union(assert_1.update(instance, patch));\n };\n\n return Union;\n}\n\nunion.getDefaultName = getDefaultName$7;\nvar union_1 = union;\n\nfunction getDefaultName$8(domain, codomain) {\n return '(' + domain.map(getTypeName).join(', ') + ') => ' + getTypeName(codomain);\n}\n\nfunction isInstrumented(f) {\n return _Function.is(f) && isObject(f.instrumentation);\n}\n\nfunction getOptionalArgumentsIndex(types) {\n var end = types.length;\n var areAllMaybes = false;\n for (var i = end - 1; i >= 0; i--) {\n var type = types[i];\n if (!isType(type) || type.meta.kind !== 'maybe') {\n return (i + 1);\n } else {\n areAllMaybes = true;\n }\n }\n return areAllMaybes ? 0 : end;\n}\n\nfunction func(domain, codomain, name) {\n\n domain = isArray(domain) ? domain : [domain]; // handle handy syntax for unary functions\n\n var displayName = name || getDefaultName$8(domain, codomain);\n var domainLength = domain.length;\n var optionalArgumentsIndex = getOptionalArgumentsIndex(domain);\n\n function FuncType(value, path) {\n\n if (!isInstrumented(value)) { // automatically instrument the function\n return FuncType.of(value);\n }\n\n return value;\n }\n\n FuncType.meta = {\n kind: 'func',\n domain: domain,\n codomain: codomain,\n name: name,\n identity: true\n };\n\n FuncType.displayName = displayName;\n\n FuncType.is = function (x) {\n return isInstrumented(x) &&\n x.instrumentation.domain.length === domainLength &&\n x.instrumentation.domain.every(function (type, i) {\n return type === domain[i];\n }) &&\n x.instrumentation.codomain === codomain;\n };\n\n FuncType.of = function (f, curried) {\n\n if (FuncType.is(f)) { // makes FuncType.of idempotent\n return f;\n }\n\n function fn() {\n var args = Array.prototype.slice.call(arguments);\n var argsLength = args.length;\n\n if (curried && argsLength < domainLength) {\n var g = Function.prototype.bind.apply(f, [this].concat(args));\n var newDomain = func(domain.slice(argsLength), codomain);\n return newDomain.of(g, true);\n }\n else {\n return create(codomain, f.apply(this, args));\n }\n }\n\n fn.instrumentation = {\n domain: domain,\n codomain: codomain,\n f: f\n };\n\n fn.displayName = getFunctionName(f);\n\n return fn;\n\n };\n\n return FuncType;\n\n}\n\nfunc.getDefaultName = getDefaultName$8;\nfunc.getOptionalArgumentsIndex = getOptionalArgumentsIndex;\nvar func_1 = func;\n\nvar isIdentity$3 = isIdentity;\n\nfunction getDefaultName$9(types) {\n return types.map(getTypeName).join(' & ');\n}\n\nfunction intersection(types, name) {\n\n var displayName = name || getDefaultName$9(types);\n var identity = types.every(isIdentity$3);\n\n function Intersection(value, path) {\n\n return value;\n }\n\n Intersection.meta = {\n kind: 'intersection',\n types: types,\n name: name,\n identity: identity\n };\n\n Intersection.displayName = displayName;\n\n Intersection.is = function (x) {\n return types.every(function (type) {\n return is(x, type);\n });\n };\n\n Intersection.update = function (instance, patch) {\n return Intersection(assert_1.update(instance, patch));\n };\n\n return Intersection;\n}\n\nintersection.getDefaultName = getDefaultName$9;\nvar intersection_1 = intersection;\n\nfunction assign(x, y) {\n for (var k in y) {\n if (y.hasOwnProperty(k)) {\n x[k] = y[k];\n }\n }\n return x;\n}\n\nvar assign_1 = assign;\n\nfunction extendInterface(mixins, name) {\n return extend_1(inter, mixins, name);\n}\n\nfunction getOptions$1(options) {\n if (!isObject(options)) {\n options = isNil(options) ? {} : { name: options };\n }\n if (!options.hasOwnProperty('strict')) {\n options.strict = inter.strict;\n }\n return options;\n}\n\nfunction inter(props, options) {\n\n options = getOptions$1(options);\n var name = options.name;\n var strict = options.strict;\n\n var displayName = name || getDefaultInterfaceName_1(props);\n var identity = Object.keys(props).map(function (prop) { return props[prop]; }).every(isIdentity);\n\n function Interface(value, path) {\n\n {\n if (identity) {\n return value; // just trust the input if elements must not be hydrated\n }\n }\n\n var idempotent = true;\n var ret = identity ? {} : assign_1({}, value);\n for (var prop in props) {\n var expected = props[prop];\n var actual = value[prop];\n var instance = create(expected, actual, ( null ));\n idempotent = idempotent && ( actual === instance );\n ret[prop] = instance;\n }\n\n if (idempotent) { // implements idempotency\n ret = value;\n }\n\n return ret;\n\n }\n\n Interface.meta = {\n kind: 'interface',\n props: props,\n name: name,\n identity: identity,\n strict: strict\n };\n\n Interface.displayName = displayName;\n\n Interface.is = function (x) {\n if (isNil(x)) {\n return false;\n }\n if (strict) {\n for (var k in x) {\n if (!props.hasOwnProperty(k)) {\n return false;\n }\n }\n }\n for (var prop in props) {\n if (!is(x[prop], props[prop])) {\n return false;\n }\n }\n return true;\n };\n\n Interface.update = function (instance, patch) {\n return Interface(assert_1.update(instance, patch));\n };\n\n Interface.extend = function (xs, name) {\n return extendInterface([Interface].concat(xs), name);\n };\n\n return Interface;\n}\n\ninter.strict = false;\ninter.getOptions = getOptions$1;\ninter.getDefaultName = getDefaultInterfaceName_1;\ninter.extend = extendInterface;\nvar _interface = inter;\n\nfunction getShallowCopy(x) {\n if (isObject(x)) {\n if (x instanceof Date || x instanceof RegExp) {\n return x;\n }\n return assign_1({}, x);\n }\n if (isArray(x)) {\n return x.concat();\n }\n return x;\n}\n\nfunction isCommand(k) {\n return update.commands.hasOwnProperty(k);\n}\n\nfunction getCommand(k) {\n return update.commands[k];\n}\n\nfunction update(instance, patch) {\n\n var value = instance;\n var isChanged = false;\n var newValue;\n for (var k in patch) {\n if (patch.hasOwnProperty(k)) {\n if (isCommand(k)) {\n newValue = getCommand(k)(patch[k], value);\n if (newValue !== instance) {\n isChanged = true;\n value = newValue;\n } else {\n value = instance;\n }\n }\n else {\n if (value === instance) {\n value = getShallowCopy(instance);\n }\n newValue = update(value[k], patch[k]);\n isChanged = isChanged || ( newValue !== value[k] );\n value[k] = newValue;\n }\n }\n }\n return isChanged ? value : instance;\n}\n\n// built-in commands\n\nfunction $apply(f, value) {\n return f(value);\n}\n\nfunction $push(elements, arr) {\n if (elements.length > 0) {\n return arr.concat(elements);\n }\n return arr;\n}\n\nfunction $remove(keys, obj) {\n if (keys.length > 0) {\n obj = getShallowCopy(obj);\n for (var i = 0, len = keys.length; i < len; i++ ) {\n delete obj[keys[i]];\n }\n }\n return obj;\n}\n\nfunction $set(value) {\n return value;\n}\n\nfunction $splice(splices, arr) {\n if (splices.length > 0) {\n arr = getShallowCopy(arr);\n return splices.reduce(function (acc, splice) {\n acc.splice.apply(acc, splice);\n return acc;\n }, arr);\n }\n return arr;\n}\n\nfunction $swap(config, arr) {\n if (config.from !== config.to) {\n arr = getShallowCopy(arr);\n var element = arr[config.to];\n arr[config.to] = arr[config.from];\n arr[config.from] = element;\n }\n return arr;\n}\n\nfunction $unshift(elements, arr) {\n if (elements.length > 0) {\n return elements.concat(arr);\n }\n return arr;\n}\n\nfunction $merge(whatToMerge, value) {\n var isChanged = false;\n var result = getShallowCopy(value);\n for (var k in whatToMerge) {\n if (whatToMerge.hasOwnProperty(k)) {\n result[k] = whatToMerge[k];\n isChanged = isChanged || ( result[k] !== value[k] );\n }\n }\n return isChanged ? result : value;\n}\n\nupdate.commands = {\n $apply: $apply,\n $push: $push,\n $remove: $remove,\n $set: $set,\n $splice: $splice,\n $swap: $swap,\n $unshift: $unshift,\n $merge: $merge\n};\n\nvar update_1 = update;\n\nvar match = function match(x) {\n var type, guard, f, count;\n for (var i = 1, len = arguments.length; i < len; ) {\n type = arguments[i];\n guard = arguments[i + 1];\n f = arguments[i + 2];\n\n if (isFunction(f) && !isType(f)) {\n i = i + 3;\n }\n else {\n f = guard;\n guard = Any.is;\n i = i + 2;\n }\n\n if (type.is(x) && guard(x)) {\n return f(x);\n }\n }\n assert_1.fail('Match error');\n};\n\n/*! @preserve\n *\n * tcomb.js - Type checking and DDD for JavaScript\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2014-2016 Giulio Canti\n *\n */\n\n// core\n\n\n// types\nassert_1.Any = Any;\nassert_1.Array = _Array;\nassert_1.Boolean = _Boolean;\nassert_1.Date = _Date;\nassert_1.Error = _Error;\nassert_1.Function = _Function;\nassert_1.Nil = Nil;\nassert_1.Number = _Number;\nassert_1.Integer = Integer;\nassert_1.IntegerT = assert_1.Integer;\nassert_1.Object = _Object;\nassert_1.RegExp = _RegExp;\nassert_1.String = _String;\nassert_1.Type = Type;\nassert_1.TypeT = assert_1.Type;\n\n// short alias are deprecated\nassert_1.Arr = assert_1.Array;\nassert_1.Bool = assert_1.Boolean;\nassert_1.Dat = assert_1.Date;\nassert_1.Err = assert_1.Error;\nassert_1.Func = assert_1.Function;\nassert_1.Num = assert_1.Number;\nassert_1.Obj = assert_1.Object;\nassert_1.Re = assert_1.RegExp;\nassert_1.Str = assert_1.String;\n\n// combinators\nassert_1.dict = dict_1;\nassert_1.declare = declare;\nassert_1.enums = enums_1;\nassert_1.irreducible = irreducible;\nassert_1.list = list_1;\nassert_1.maybe = maybe_1;\nassert_1.refinement = refinement_1;\nassert_1.struct = struct_1;\nassert_1.tuple = tuple_1;\nassert_1.union = union_1;\nassert_1.func = func_1;\nassert_1.intersection = intersection_1;\nassert_1.subtype = assert_1.refinement;\nassert_1.inter = _interface; // IE8 alias\nassert_1['interface'] = assert_1.inter;\n\n// functions\nassert_1.assert = assert_1;\nassert_1.update = update_1;\nassert_1.mixin = mixin;\nassert_1.isType = isType;\nassert_1.is = is;\nassert_1.getTypeName = getTypeName;\nassert_1.match = match;\n\nvar index$1 = assert_1;\n\nvar stringify = index$1.stringify;\n\nvar noobj = {};\n\nvar ValidationError = index$1.struct({\n message: index$1.Any,\n actual: index$1.Any,\n expected: index$1.Any,\n path: index$1.list(index$1.union([index$1.String, index$1.Number]))\n}, 'ValidationError');\n\nfunction getDefaultValidationErrorMessage(actual, expected, path) {\n var expectedName = index$1.getTypeName(expected);\n var to = path.length ? '/' + path.join('/') + ': ' + expectedName : expectedName;\n return 'Invalid value ' + stringify(actual) + ' supplied to ' + to;\n}\n\nfunction getValidationErrorMessage(actual, expected, path, context) {\n if (index$1.Function.is(expected.getValidationErrorMessage)) {\n return expected.getValidationErrorMessage(actual, path, context);\n }\n else {\n return getDefaultValidationErrorMessage(actual, expected, path);\n }\n}\n\nValidationError.of = function (actual, expected, path, context) {\n return new ValidationError({\n message: getValidationErrorMessage(actual, expected, path, context),\n actual: actual,\n expected: expected,\n path: path\n });\n};\n\nvar ValidationResult = index$1.struct({\n errors: index$1.list(ValidationError),\n value: index$1.Any\n}, 'ValidationResult');\n\nValidationResult.prototype.isValid = function () {\n return !(this.errors.length);\n};\n\nValidationResult.prototype.firstError = function () {\n return this.isValid() ? null : this.errors[0];\n};\n\nValidationResult.prototype.toString = function () {\n if (this.isValid()) {\n return '[ValidationResult, true, ' + stringify(this.value) + ']';\n }\n else {\n return '[ValidationResult, false, (' + this.errors.map(function (err) {\n return stringify(err.message);\n }).join(', ') + ')]';\n }\n};\n\nfunction validate(x, type, options) {\n options = options || {};\n var path = index$1.Array.is(options) ? options : options.path || [];\n return new ValidationResult(recurse(x, type, path, options));\n}\n\nfunction recurse(x, type, path, options) {\n if (index$1.isType(type)) {\n return validators[type.meta.kind](x, type, path, options);\n }\n else {\n return validators.es6classes(x, type, path, options);\n }\n}\n\nvar validators = validate.validators = {};\n\nvalidators.es6classes = function validateES6Classes(x, type, path, options) {\n return {\n value: x,\n errors: x instanceof type ? [] : [ValidationError.of(x, type, path, options.context)]\n };\n};\n\n// irreducibles and enums\nvalidators.irreducible =\nvalidators.enums = function validateIrreducible(x, type, path, options) {\n return {\n value: x,\n errors: type.is(x) ? [] : [ValidationError.of(x, type, path, options.context)]\n };\n};\n\nvalidators.list = function validateList(x, type, path, options) {\n\n // x should be an array\n if (!index$1.Array.is(x)) {\n return {value: x, errors: [ValidationError.of(x, type, path, options.context)]};\n }\n\n var ret = {value: [], errors: []};\n // every item should be of type `type.meta.type`\n for (var i = 0, len = x.length; i < len; i++ ) {\n var item = recurse(x[i], type.meta.type, path.concat(i), options);\n ret.value[i] = item.value;\n ret.errors = ret.errors.concat(item.errors);\n }\n return ret;\n};\n\nvalidators.subtype = function validateSubtype(x, type, path, options) {\n\n // x should be a valid inner type\n var ret = recurse(x, type.meta.type, path, options);\n if (ret.errors.length) {\n return ret;\n }\n\n // x should satisfy the predicate\n if (!type.meta.predicate(ret.value)) {\n ret.errors = [ValidationError.of(x, type, path, options.context)];\n }\n\n return ret;\n\n};\n\nvalidators.maybe = function validateMaybe(x, type, path, options) {\n return index$1.Nil.is(x) ?\n {value: x, errors: []} :\n recurse(x, type.meta.type, path, options);\n};\n\nvalidators.struct = function validateStruct(x, type, path, options) {\n\n // x should be an object\n if (!index$1.Object.is(x)) {\n return {value: x, errors: [ValidationError.of(x, type, path, options.context)]};\n }\n\n // [optimization]\n if (type.is(x)) {\n return {value: x, errors: []};\n }\n\n var ret = {value: {}, errors: []};\n var props = type.meta.props;\n var defaultProps = type.meta.defaultProps || noobj;\n // every item should be of type `props[name]`\n for (var name in props) {\n if (props.hasOwnProperty(name)) {\n var actual = x[name];\n // apply defaults\n if (actual === undefined) {\n actual = defaultProps[name];\n }\n var prop = recurse(actual, props[name], path.concat(name), options);\n ret.value[name] = prop.value;\n ret.errors = ret.errors.concat(prop.errors);\n }\n }\n var strict = options.hasOwnProperty('strict') ? options.strict : type.meta.strict;\n if (strict) {\n for (var field in x) {\n if (x.hasOwnProperty(field) && !props.hasOwnProperty(field)) {\n ret.errors.push(ValidationError.of(x[field], index$1.Nil, path.concat(field), options.context));\n }\n }\n }\n if (!ret.errors.length) {\n ret.value = new type(ret.value);\n }\n return ret;\n};\n\nvalidators.tuple = function validateTuple(x, type, path, options) {\n\n var types = type.meta.types;\n var len = types.length;\n\n // x should be an array of at most `len` items\n if (!index$1.Array.is(x) || x.length > len) {\n return {value: x, errors: [ValidationError.of(x, type, path, options.context)]};\n }\n\n var ret = {value: [], errors: []};\n // every item should be of type `types[i]`\n for (var i = 0; i < len; i++) {\n var item = recurse(x[i], types[i], path.concat(i), options);\n ret.value[i] = item.value;\n ret.errors = ret.errors.concat(item.errors);\n }\n return ret;\n};\n\nvalidators.dict = function validateDict(x, type, path, options) {\n\n // x should be an object\n if (!index$1.Object.is(x)) {\n return {value: x, errors: [ValidationError.of(x, type, path, options.context)]};\n }\n\n var ret = {value: {}, errors: []};\n // every key should be of type `domain`\n // every value should be of type `codomain`\n for (var k in x) {\n if (x.hasOwnProperty(k)) {\n var subpath = path.concat(k);\n var key = recurse(k, type.meta.domain, subpath, options);\n var item = recurse(x[k], type.meta.codomain, subpath, options);\n ret.value[k] = item.value;\n ret.errors = ret.errors.concat(key.errors, item.errors);\n }\n }\n return ret;\n};\n\nvalidators.union = function validateUnion(x, type, path, options) {\n var ctor = type.dispatch(x);\n return index$1.Function.is(ctor) ?\n recurse(x, ctor, path.concat(type.meta.types.indexOf(ctor)), options) :\n {value: x, errors: [ValidationError.of(x, type, path, options.context)]};\n};\n\nvalidators.intersection = function validateIntersection(x, type, path, options) {\n\n var types = type.meta.types;\n var len = types.length;\n\n var ret = {value: x, errors: []};\n var nrOfStructs = 0;\n // x should be of type `types[i]` for all i\n for (var i = 0; i < len; i++) {\n if (types[i].meta.kind === 'struct') {\n nrOfStructs++;\n }\n var item = recurse(x, types[i], path, options);\n ret.errors = ret.errors.concat(item.errors);\n }\n if (nrOfStructs > 1) {\n ret.errors.push(ValidationError.of(x, type, path, options.context));\n }\n return ret;\n};\n\nvalidators['interface'] = function validateInterface(x, type, path, options) { // eslint-disable-line dot-notation\n\n // x should be an object\n if (!index$1.Object.is(x)) {\n return {value: x, errors: [ValidationError.of(x, type, path, options.context)]};\n }\n\n var ret = {value: {}, errors: []};\n var props = type.meta.props;\n // every item should be of type `props[name]`\n for (var name in props) {\n var prop = recurse(x[name], props[name], path.concat(name), options);\n ret.value[name] = prop.value;\n ret.errors = ret.errors.concat(prop.errors);\n }\n var strict = options.hasOwnProperty('strict') ? options.strict : type.meta.strict;\n if (strict) {\n for (var field in x) {\n if (!props.hasOwnProperty(field) && !index$1.Nil.is(x[field])) {\n ret.errors.push(ValidationError.of(x[field], index$1.Nil, path.concat(field), options.context));\n }\n }\n }\n return ret;\n};\n\nindex$1.mixin(index$1, {\n ValidationError: ValidationError,\n ValidationResult: ValidationResult,\n validate: validate\n});\n\nvar index = index$1;\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\n\n\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar index$3 = createCommonjsModule(function (module) {\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\n{\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};\n});\n\n/**\n * Check if `obj` is an object.\n *\n * @param {Object} obj\n * @return {Boolean}\n * @api private\n */\n\nfunction isObject$3(obj) {\n return null !== obj && 'object' === typeof obj;\n}\n\nvar isObject_1 = isObject$3;\n\n/**\n * Module of mixed-in functions shared between node and client code\n */\n\n\n/**\n * Expose `RequestBase`.\n */\n\nvar requestBase = RequestBase;\n\n/**\n * Initialize a new `RequestBase`.\n *\n * @api public\n */\n\nfunction RequestBase(obj) {\n if (obj) return mixin$3(obj);\n}\n\n/**\n * Mixin the prototype properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin$3(obj) {\n for (var key in RequestBase.prototype) {\n obj[key] = RequestBase.prototype[key];\n }\n return obj;\n}\n\n/**\n * Clear previous timeout.\n *\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.clearTimeout = function _clearTimeout(){\n clearTimeout(this._timer);\n clearTimeout(this._responseTimeoutTimer);\n delete this._timer;\n delete this._responseTimeoutTimer;\n return this;\n};\n\n/**\n * Override default response body parser\n *\n * This function will be called to convert incoming data into request.body\n *\n * @param {Function}\n * @api public\n */\n\nRequestBase.prototype.parse = function parse(fn){\n this._parser = fn;\n return this;\n};\n\n/**\n * Set format of binary response body.\n * In browser valid formats are 'blob' and 'arraybuffer',\n * which return Blob and ArrayBuffer, respectively.\n *\n * In Node all values result in Buffer.\n *\n * Examples:\n *\n * req.get('/')\n * .responseType('blob')\n * .end(callback);\n *\n * @param {String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.responseType = function(val){\n this._responseType = val;\n return this;\n};\n\n/**\n * Override default request body serializer\n *\n * This function will be called to convert data set via .send or .attach into payload to send\n *\n * @param {Function}\n * @api public\n */\n\nRequestBase.prototype.serialize = function serialize(fn){\n this._serializer = fn;\n return this;\n};\n\n/**\n * Set timeouts.\n *\n * - response timeout is time between sending request and receiving the first byte of the response. Includes DNS and connection time.\n * - deadline is the time from start of the request to receiving response body in full. If the deadline is too short large files may not load at all on slow connections.\n *\n * Value of 0 or false means no timeout.\n *\n * @param {Number|Object} ms or {response, read, deadline}\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.timeout = function timeout(options){\n if (!options || 'object' !== typeof options) {\n this._timeout = options;\n this._responseTimeout = 0;\n return this;\n }\n\n for(var option in options) {\n switch(option) {\n case 'deadline':\n this._timeout = options.deadline;\n break;\n case 'response':\n this._responseTimeout = options.response;\n break;\n default:\n console.warn(\"Unknown timeout option\", option);\n }\n }\n return this;\n};\n\n/**\n * Set number of retry attempts on error.\n *\n * Failed requests will be retried 'count' times if timeout or err.code >= 500.\n *\n * @param {Number} count\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.retry = function retry(count){\n // Default to 1 if no count passed or true\n if (arguments.length === 0 || count === true) count = 1;\n if (count <= 0) count = 0;\n this._maxRetries = count;\n this._retries = 0;\n return this;\n};\n\n/**\n * Retry request\n *\n * @return {Request} for chaining\n * @api private\n */\n\nRequestBase.prototype._retry = function() {\n this.clearTimeout();\n\n // node\n if (this.req) {\n this.req = null;\n this.req = this.request();\n }\n\n this._aborted = false;\n this.timedout = false;\n\n return this._end();\n};\n\n/**\n * Promise support\n *\n * @param {Function} resolve\n * @param {Function} [reject]\n * @return {Request}\n */\n\nRequestBase.prototype.then = function then(resolve, reject) {\n if (!this._fullfilledPromise) {\n var self = this;\n if (this._endCalled) {\n console.warn(\"Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises\");\n }\n this._fullfilledPromise = new Promise(function(innerResolve, innerReject){\n self.end(function(err, res){\n if (err) innerReject(err); else innerResolve(res);\n });\n });\n }\n return this._fullfilledPromise.then(resolve, reject);\n};\n\nRequestBase.prototype.catch = function(cb) {\n return this.then(undefined, cb);\n};\n\n/**\n * Allow for extension\n */\n\nRequestBase.prototype.use = function use(fn) {\n fn(this);\n return this;\n};\n\nRequestBase.prototype.ok = function(cb) {\n if ('function' !== typeof cb) throw Error(\"Callback required\");\n this._okCallback = cb;\n return this;\n};\n\nRequestBase.prototype._isResponseOK = function(res) {\n if (!res) {\n return false;\n }\n\n if (this._okCallback) {\n return this._okCallback(res);\n }\n\n return res.status >= 200 && res.status < 300;\n};\n\n\n/**\n * Get request header `field`.\n * Case-insensitive.\n *\n * @param {String} field\n * @return {String}\n * @api public\n */\n\nRequestBase.prototype.get = function(field){\n return this._header[field.toLowerCase()];\n};\n\n/**\n * Get case-insensitive header `field` value.\n * This is a deprecated internal API. Use `.get(field)` instead.\n *\n * (getHeader is no longer used internally by the superagent code base)\n *\n * @param {String} field\n * @return {String}\n * @api private\n * @deprecated\n */\n\nRequestBase.prototype.getHeader = RequestBase.prototype.get;\n\n/**\n * Set header `field` to `val`, or multiple fields with one object.\n * Case-insensitive.\n *\n * Examples:\n *\n * req.get('/')\n * .set('Accept', 'application/json')\n * .set('X-API-Key', 'foobar')\n * .end(callback);\n *\n * req.get('/')\n * .set({ Accept: 'application/json', 'X-API-Key': 'foobar' })\n * .end(callback);\n *\n * @param {String|Object} field\n * @param {String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.set = function(field, val){\n if (isObject_1(field)) {\n for (var key in field) {\n this.set(key, field[key]);\n }\n return this;\n }\n this._header[field.toLowerCase()] = val;\n this.header[field] = val;\n return this;\n};\n\n/**\n * Remove header `field`.\n * Case-insensitive.\n *\n * Example:\n *\n * req.get('/')\n * .unset('User-Agent')\n * .end(callback);\n *\n * @param {String} field\n */\nRequestBase.prototype.unset = function(field){\n delete this._header[field.toLowerCase()];\n delete this.header[field];\n return this;\n};\n\n/**\n * Write the field `name` and `val`, or multiple fields with one object\n * for \"multipart/form-data\" request bodies.\n *\n * ``` js\n * request.post('/upload')\n * .field('foo', 'bar')\n * .end(callback);\n *\n * request.post('/upload')\n * .field({ foo: 'bar', baz: 'qux' })\n * .end(callback);\n * ```\n *\n * @param {String|Object} name\n * @param {String|Blob|File|Buffer|fs.ReadStream} val\n * @return {Request} for chaining\n * @api public\n */\nRequestBase.prototype.field = function(name, val) {\n\n // name should be either a string or an object.\n if (null === name || undefined === name) {\n throw new Error('.field(name, val) name can not be empty');\n }\n\n if (this._data) {\n console.error(\".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()\");\n }\n\n if (isObject_1(name)) {\n for (var key in name) {\n this.field(key, name[key]);\n }\n return this;\n }\n\n if (Array.isArray(val)) {\n for (var i in val) {\n this.field(name, val[i]);\n }\n return this;\n }\n\n // val should be defined now\n if (null === val || undefined === val) {\n throw new Error('.field(name, val) val can not be empty');\n }\n if ('boolean' === typeof val) {\n val = '' + val;\n }\n this._getFormData().append(name, val);\n return this;\n};\n\n/**\n * Abort the request, and clear potential timeout.\n *\n * @return {Request}\n * @api public\n */\nRequestBase.prototype.abort = function(){\n if (this._aborted) {\n return this;\n }\n this._aborted = true;\n this.xhr && this.xhr.abort(); // browser\n this.req && this.req.abort(); // node\n this.clearTimeout();\n this.emit('abort');\n return this;\n};\n\n/**\n * Enable transmission of cookies with x-domain requests.\n *\n * Note that for this to work the origin must not be\n * using \"Access-Control-Allow-Origin\" with a wildcard,\n * and also must set \"Access-Control-Allow-Credentials\"\n * to \"true\".\n *\n * @api public\n */\n\nRequestBase.prototype.withCredentials = function(on){\n // This is browser-only functionality. Node side is no-op.\n if(on==undefined) on = true;\n this._withCredentials = on;\n return this;\n};\n\n/**\n * Set the max redirects to `n`. Does noting in browser XHR implementation.\n *\n * @param {Number} n\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.redirects = function(n){\n this._maxRedirects = n;\n return this;\n};\n\n/**\n * Convert to a plain javascript object (not JSON string) of scalar properties.\n * Note as this method is designed to return a useful non-this value,\n * it cannot be chained.\n *\n * @return {Object} describing method, url, and data of this request\n * @api public\n */\n\nRequestBase.prototype.toJSON = function(){\n return {\n method: this.method,\n url: this.url,\n data: this._data,\n headers: this._header\n };\n};\n\n\n/**\n * Send `data` as the request body, defaulting the `.type()` to \"json\" when\n * an object is given.\n *\n * Examples:\n *\n * // manual json\n * request.post('/user')\n * .type('json')\n * .send('{\"name\":\"tj\"}')\n * .end(callback)\n *\n * // auto json\n * request.post('/user')\n * .send({ name: 'tj' })\n * .end(callback)\n *\n * // manual x-www-form-urlencoded\n * request.post('/user')\n * .type('form')\n * .send('name=tj')\n * .end(callback)\n *\n * // auto x-www-form-urlencoded\n * request.post('/user')\n * .type('form')\n * .send({ name: 'tj' })\n * .end(callback)\n *\n * // defaults to x-www-form-urlencoded\n * request.post('/user')\n * .send('name=tobi')\n * .send('species=ferret')\n * .end(callback)\n *\n * @param {String|Object} data\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.send = function(data){\n var isObj = isObject_1(data);\n var type = this._header['content-type'];\n\n if (this._formData) {\n console.error(\".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()\");\n }\n\n if (isObj && !this._data) {\n if (Array.isArray(data)) {\n this._data = [];\n } else if (!this._isHost(data)) {\n this._data = {};\n }\n } else if (data && this._data && this._isHost(this._data)) {\n throw Error(\"Can't merge these send calls\");\n }\n\n // merge\n if (isObj && isObject_1(this._data)) {\n for (var key in data) {\n this._data[key] = data[key];\n }\n } else if ('string' == typeof data) {\n // default to x-www-form-urlencoded\n if (!type) this.type('form');\n type = this._header['content-type'];\n if ('application/x-www-form-urlencoded' == type) {\n this._data = this._data\n ? this._data + '&' + data\n : data;\n } else {\n this._data = (this._data || '') + data;\n }\n } else {\n this._data = data;\n }\n\n if (!isObj || this._isHost(data)) {\n return this;\n }\n\n // default to json\n if (!type) this.type('json');\n return this;\n};\n\n\n/**\n * Sort `querystring` by the sort function\n *\n *\n * Examples:\n *\n * // default order\n * request.get('/user')\n * .query('name=Nick')\n * .query('search=Manny')\n * .sortQuery()\n * .end(callback)\n *\n * // customized sort function\n * request.get('/user')\n * .query('name=Nick')\n * .query('search=Manny')\n * .sortQuery(function(a, b){\n * return a.length - b.length;\n * })\n * .end(callback)\n *\n *\n * @param {Function} sort\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.sortQuery = function(sort) {\n // _sort default to true but otherwise can be a function or boolean\n this._sort = typeof sort === 'undefined' ? true : sort;\n return this;\n};\n\n/**\n * Invoke callback with timeout error.\n *\n * @api private\n */\n\nRequestBase.prototype._timeoutError = function(reason, timeout, errno){\n if (this._aborted) {\n return;\n }\n var err = new Error(reason + timeout + 'ms exceeded');\n err.timeout = timeout;\n err.code = 'ECONNABORTED';\n err.errno = errno;\n this.timedout = true;\n this.abort();\n this.callback(err);\n};\n\nRequestBase.prototype._setTimeouts = function() {\n var self = this;\n\n // deadline\n if (this._timeout && !this._timer) {\n this._timer = setTimeout(function(){\n self._timeoutError('Timeout of ', self._timeout, 'ETIME');\n }, this._timeout);\n }\n // response timeout\n if (this._responseTimeout && !this._responseTimeoutTimer) {\n this._responseTimeoutTimer = setTimeout(function(){\n self._timeoutError('Response timeout of ', self._responseTimeout, 'ETIMEDOUT');\n }, this._responseTimeout);\n }\n};\n\n/**\n * Check if `fn` is a function.\n *\n * @param {Function} fn\n * @return {Boolean}\n * @api private\n */\n\n\nfunction isFunction$3(fn) {\n var tag = isObject_1(fn) ? Object.prototype.toString.call(fn) : '';\n return tag === '[object Function]';\n}\n\nvar isFunction_1 = isFunction$3;\n\n/**\n * Return the mime type for the given `str`.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nvar type = function(str){\n return str.split(/ *; */).shift();\n};\n\n/**\n * Return header field parameters.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nvar params = function(str){\n return str.split(/ *; */).reduce(function(obj, str){\n var parts = str.split(/ *= */);\n var key = parts.shift();\n var val = parts.shift();\n\n if (key && val) obj[key] = val;\n return obj;\n }, {});\n};\n\n/**\n * Parse Link header fields.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nvar parseLinks = function(str){\n return str.split(/ *, */).reduce(function(obj, str){\n var parts = str.split(/ *; */);\n var url = parts[0].slice(1, -1);\n var rel = parts[1].split(/ *= */)[1].slice(1, -1);\n obj[rel] = url;\n return obj;\n }, {});\n};\n\n/**\n * Strip content related fields from `header`.\n *\n * @param {Object} header\n * @return {Object} header\n * @api private\n */\n\nvar cleanHeader = function(header, shouldStripCookie){\n delete header['content-type'];\n delete header['content-length'];\n delete header['transfer-encoding'];\n delete header['host'];\n if (shouldStripCookie) {\n delete header['cookie'];\n }\n return header;\n};\n\nvar utils = {\n\ttype: type,\n\tparams: params,\n\tparseLinks: parseLinks,\n\tcleanHeader: cleanHeader\n};\n\n/**\n * Module dependencies.\n */\n\n\n\n/**\n * Expose `ResponseBase`.\n */\n\nvar responseBase = ResponseBase;\n\n/**\n * Initialize a new `ResponseBase`.\n *\n * @api public\n */\n\nfunction ResponseBase(obj) {\n if (obj) return mixin$4(obj);\n}\n\n/**\n * Mixin the prototype properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin$4(obj) {\n for (var key in ResponseBase.prototype) {\n obj[key] = ResponseBase.prototype[key];\n }\n return obj;\n}\n\n/**\n * Get case-insensitive `field` value.\n *\n * @param {String} field\n * @return {String}\n * @api public\n */\n\nResponseBase.prototype.get = function(field){\n return this.header[field.toLowerCase()];\n};\n\n/**\n * Set header related properties:\n *\n * - `.type` the content type without params\n *\n * A response of \"Content-Type: text/plain; charset=utf-8\"\n * will provide you with a `.type` of \"text/plain\".\n *\n * @param {Object} header\n * @api private\n */\n\nResponseBase.prototype._setHeaderProperties = function(header){\n // TODO: moar!\n // TODO: make this a util\n\n // content-type\n var ct = header['content-type'] || '';\n this.type = utils.type(ct);\n\n // params\n var params = utils.params(ct);\n for (var key in params) this[key] = params[key];\n\n this.links = {};\n\n // links\n try {\n if (header.link) {\n this.links = utils.parseLinks(header.link);\n }\n } catch (err) {\n // ignore\n }\n};\n\n/**\n * Set flags such as `.ok` based on `status`.\n *\n * For example a 2xx response will give you a `.ok` of __true__\n * whereas 5xx will be __false__ and `.error` will be __true__. The\n * `.clientError` and `.serverError` are also available to be more\n * specific, and `.statusType` is the class of error ranging from 1..5\n * sometimes useful for mapping respond colors etc.\n *\n * \"sugar\" properties are also defined for common cases. Currently providing:\n *\n * - .noContent\n * - .badRequest\n * - .unauthorized\n * - .notAcceptable\n * - .notFound\n *\n * @param {Number} status\n * @api private\n */\n\nResponseBase.prototype._setStatusProperties = function(status){\n var type = status / 100 | 0;\n\n // status / class\n this.status = this.statusCode = status;\n this.statusType = type;\n\n // basics\n this.info = 1 == type;\n this.ok = 2 == type;\n this.redirect = 3 == type;\n this.clientError = 4 == type;\n this.serverError = 5 == type;\n this.error = (4 == type || 5 == type)\n ? this.toError()\n : false;\n\n // sugar\n this.accepted = 202 == status;\n this.noContent = 204 == status;\n this.badRequest = 400 == status;\n this.unauthorized = 401 == status;\n this.notAcceptable = 406 == status;\n this.forbidden = 403 == status;\n this.notFound = 404 == status;\n};\n\nvar ERROR_CODES = [\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'EADDRINFO',\n 'ESOCKETTIMEDOUT'\n];\n\n/**\n * Determine if a request should be retried.\n * (Borrowed from segmentio/superagent-retry)\n *\n * @param {Error} err\n * @param {Response} [res]\n * @returns {Boolean}\n */\nvar shouldRetry = function shouldRetry(err, res) {\n if (err && err.code && ~ERROR_CODES.indexOf(err.code)) return true;\n if (res && res.status && res.status >= 500) return true;\n // Superagent timeout\n if (err && 'timeout' in err && err.code == 'ECONNABORTED') return true;\n if (err && 'crossDomain' in err) return true;\n return false;\n};\n\nvar client$1 = createCommonjsModule(function (module, exports) {\n/**\n * Root reference for iframes.\n */\n\nvar root;\nif (typeof window !== 'undefined') { // Browser window\n root = window;\n} else if (typeof self !== 'undefined') { // Web Worker\n root = self;\n} else { // Other environments\n console.warn(\"Using browser-only version of superagent in non-browser environment\");\n root = commonjsGlobal;\n}\n\n\n\n\n\n\n\n\n/**\n * Noop.\n */\n\nfunction noop(){}\n\n/**\n * Expose `request`.\n */\n\nvar request = exports = module.exports = function(method, url) {\n // callback\n if ('function' == typeof url) {\n return new exports.Request('GET', method).end(url);\n }\n\n // url first\n if (1 == arguments.length) {\n return new exports.Request('GET', method);\n }\n\n return new exports.Request(method, url);\n};\n\nexports.Request = Request;\n\n/**\n * Determine XHR.\n */\n\nrequest.getXHR = function () {\n if (root.XMLHttpRequest\n && (!root.location || 'file:' != root.location.protocol\n || !root.ActiveXObject)) {\n return new XMLHttpRequest;\n } else {\n try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch(e) {}\n try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(e) {}\n try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(e) {}\n try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) {}\n }\n throw Error(\"Browser-only verison of superagent could not find XHR\");\n};\n\n/**\n * Removes leading and trailing whitespace, added to support IE.\n *\n * @param {String} s\n * @return {String}\n * @api private\n */\n\nvar trim = ''.trim\n ? function(s) { return s.trim(); }\n : function(s) { return s.replace(/(^\\s*|\\s*$)/g, ''); };\n\n/**\n * Serialize the given `obj`.\n *\n * @param {Object} obj\n * @return {String}\n * @api private\n */\n\nfunction serialize(obj) {\n if (!isObject_1(obj)) return obj;\n var pairs = [];\n for (var key in obj) {\n pushEncodedKeyValuePair(pairs, key, obj[key]);\n }\n return pairs.join('&');\n}\n\n/**\n * Helps 'serialize' with serializing arrays.\n * Mutates the pairs array.\n *\n * @param {Array} pairs\n * @param {String} key\n * @param {Mixed} val\n */\n\nfunction pushEncodedKeyValuePair(pairs, key, val) {\n if (val != null) {\n if (Array.isArray(val)) {\n val.forEach(function(v) {\n pushEncodedKeyValuePair(pairs, key, v);\n });\n } else if (isObject_1(val)) {\n for(var subkey in val) {\n pushEncodedKeyValuePair(pairs, key + '[' + subkey + ']', val[subkey]);\n }\n } else {\n pairs.push(encodeURIComponent(key)\n + '=' + encodeURIComponent(val));\n }\n } else if (val === null) {\n pairs.push(encodeURIComponent(key));\n }\n}\n\n/**\n * Expose serialization method.\n */\n\n request.serializeObject = serialize;\n\n /**\n * Parse the given x-www-form-urlencoded `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parseString(str) {\n var obj = {};\n var pairs = str.split('&');\n var pair;\n var pos;\n\n for (var i = 0, len = pairs.length; i < len; ++i) {\n pair = pairs[i];\n pos = pair.indexOf('=');\n if (pos == -1) {\n obj[decodeURIComponent(pair)] = '';\n } else {\n obj[decodeURIComponent(pair.slice(0, pos))] =\n decodeURIComponent(pair.slice(pos + 1));\n }\n }\n\n return obj;\n}\n\n/**\n * Expose parser.\n */\n\nrequest.parseString = parseString;\n\n/**\n * Default MIME type map.\n *\n * superagent.types.xml = 'application/xml';\n *\n */\n\nrequest.types = {\n html: 'text/html',\n json: 'application/json',\n xml: 'application/xml',\n urlencoded: 'application/x-www-form-urlencoded',\n 'form': 'application/x-www-form-urlencoded',\n 'form-data': 'application/x-www-form-urlencoded'\n};\n\n/**\n * Default serialization map.\n *\n * superagent.serialize['application/xml'] = function(obj){\n * return 'generated xml here';\n * };\n *\n */\n\n request.serialize = {\n 'application/x-www-form-urlencoded': serialize,\n 'application/json': JSON.stringify\n };\n\n /**\n * Default parsers.\n *\n * superagent.parse['application/xml'] = function(str){\n * return { object parsed from str };\n * };\n *\n */\n\nrequest.parse = {\n 'application/x-www-form-urlencoded': parseString,\n 'application/json': JSON.parse\n};\n\n/**\n * Parse the given header `str` into\n * an object containing the mapped fields.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parseHeader(str) {\n var lines = str.split(/\\r?\\n/);\n var fields = {};\n var index;\n var line;\n var field;\n var val;\n\n lines.pop(); // trailing CRLF\n\n for (var i = 0, len = lines.length; i < len; ++i) {\n line = lines[i];\n index = line.indexOf(':');\n field = line.slice(0, index).toLowerCase();\n val = trim(line.slice(index + 1));\n fields[field] = val;\n }\n\n return fields;\n}\n\n/**\n * Check if `mime` is json or has +json structured syntax suffix.\n *\n * @param {String} mime\n * @return {Boolean}\n * @api private\n */\n\nfunction isJSON(mime) {\n return /[\\/+]json\\b/.test(mime);\n}\n\n/**\n * Initialize a new `Response` with the given `xhr`.\n *\n * - set flags (.ok, .error, etc)\n * - parse header\n *\n * Examples:\n *\n * Aliasing `superagent` as `request` is nice:\n *\n * request = superagent;\n *\n * We can use the promise-like API, or pass callbacks:\n *\n * request.get('/').end(function(res){});\n * request.get('/', function(res){});\n *\n * Sending data can be chained:\n *\n * request\n * .post('/user')\n * .send({ name: 'tj' })\n * .end(function(res){});\n *\n * Or passed to `.send()`:\n *\n * request\n * .post('/user')\n * .send({ name: 'tj' }, function(res){});\n *\n * Or passed to `.post()`:\n *\n * request\n * .post('/user', { name: 'tj' })\n * .end(function(res){});\n *\n * Or further reduced to a single call for simple cases:\n *\n * request\n * .post('/user', { name: 'tj' }, function(res){});\n *\n * @param {XMLHTTPRequest} xhr\n * @param {Object} options\n * @api private\n */\n\nfunction Response(req) {\n this.req = req;\n this.xhr = this.req.xhr;\n // responseText is accessible only if responseType is '' or 'text' and on older browsers\n this.text = ((this.req.method !='HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text')) || typeof this.xhr.responseType === 'undefined')\n ? this.xhr.responseText\n : null;\n this.statusText = this.req.xhr.statusText;\n var status = this.xhr.status;\n // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request\n if (status === 1223) {\n status = 204;\n }\n this._setStatusProperties(status);\n this.header = this.headers = parseHeader(this.xhr.getAllResponseHeaders());\n // getAllResponseHeaders sometimes falsely returns \"\" for CORS requests, but\n // getResponseHeader still works. so we get content-type even if getting\n // other headers fails.\n this.header['content-type'] = this.xhr.getResponseHeader('content-type');\n this._setHeaderProperties(this.header);\n\n if (null === this.text && req._responseType) {\n this.body = this.xhr.response;\n } else {\n this.body = this.req.method != 'HEAD'\n ? this._parseBody(this.text ? this.text : this.xhr.response)\n : null;\n }\n}\n\nresponseBase(Response.prototype);\n\n/**\n * Parse the given body `str`.\n *\n * Used for auto-parsing of bodies. Parsers\n * are defined on the `superagent.parse` object.\n *\n * @param {String} str\n * @return {Mixed}\n * @api private\n */\n\nResponse.prototype._parseBody = function(str){\n var parse = request.parse[this.type];\n if(this.req._parser) {\n return this.req._parser(this, str);\n }\n if (!parse && isJSON(this.type)) {\n parse = request.parse['application/json'];\n }\n return parse && str && (str.length || str instanceof Object)\n ? parse(str)\n : null;\n};\n\n/**\n * Return an `Error` representative of this response.\n *\n * @return {Error}\n * @api public\n */\n\nResponse.prototype.toError = function(){\n var req = this.req;\n var method = req.method;\n var url = req.url;\n\n var msg = 'cannot ' + method + ' ' + url + ' (' + this.status + ')';\n var err = new Error(msg);\n err.status = this.status;\n err.method = method;\n err.url = url;\n\n return err;\n};\n\n/**\n * Expose `Response`.\n */\n\nrequest.Response = Response;\n\n/**\n * Initialize a new `Request` with the given `method` and `url`.\n *\n * @param {String} method\n * @param {String} url\n * @api public\n */\n\nfunction Request(method, url) {\n var self = this;\n this._query = this._query || [];\n this.method = method;\n this.url = url;\n this.header = {}; // preserves header name case\n this._header = {}; // coerces header names to lowercase\n this.on('end', function(){\n var err = null;\n var res = null;\n\n try {\n res = new Response(self);\n } catch(e) {\n err = new Error('Parser is unable to parse the response');\n err.parse = true;\n err.original = e;\n // issue #675: return the raw response if the response parsing fails\n if (self.xhr) {\n // ie9 doesn't have 'response' property\n err.rawResponse = typeof self.xhr.responseType == 'undefined' ? self.xhr.responseText : self.xhr.response;\n // issue #876: return the http status code if the response parsing fails\n err.status = self.xhr.status ? self.xhr.status : null;\n err.statusCode = err.status; // backwards-compat only\n } else {\n err.rawResponse = null;\n err.status = null;\n }\n\n return self.callback(err);\n }\n\n self.emit('response', res);\n\n var new_err;\n try {\n if (!self._isResponseOK(res)) {\n new_err = new Error(res.statusText || 'Unsuccessful HTTP response');\n new_err.original = err;\n new_err.response = res;\n new_err.status = res.status;\n }\n } catch(e) {\n new_err = e; // #985 touching res may cause INVALID_STATE_ERR on old Android\n }\n\n // #1000 don't catch errors from the callback to avoid double calling it\n if (new_err) {\n self.callback(new_err, res);\n } else {\n self.callback(null, res);\n }\n });\n}\n\n/**\n * Mixin `Emitter` and `RequestBase`.\n */\n\nindex$3(Request.prototype);\nrequestBase(Request.prototype);\n\n/**\n * Set Content-Type to `type`, mapping values from `request.types`.\n *\n * Examples:\n *\n * superagent.types.xml = 'application/xml';\n *\n * request.post('/')\n * .type('xml')\n * .send(xmlstring)\n * .end(callback);\n *\n * request.post('/')\n * .type('application/xml')\n * .send(xmlstring)\n * .end(callback);\n *\n * @param {String} type\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.type = function(type){\n this.set('Content-Type', request.types[type] || type);\n return this;\n};\n\n/**\n * Set Accept to `type`, mapping values from `request.types`.\n *\n * Examples:\n *\n * superagent.types.json = 'application/json';\n *\n * request.get('/agent')\n * .accept('json')\n * .end(callback);\n *\n * request.get('/agent')\n * .accept('application/json')\n * .end(callback);\n *\n * @param {String} accept\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.accept = function(type){\n this.set('Accept', request.types[type] || type);\n return this;\n};\n\n/**\n * Set Authorization field value with `user` and `pass`.\n *\n * @param {String} user\n * @param {String} [pass] optional in case of using 'bearer' as type\n * @param {Object} options with 'type' property 'auto', 'basic' or 'bearer' (default 'basic')\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.auth = function(user, pass, options){\n if (typeof pass === 'object' && pass !== null) { // pass is optional and can substitute for options\n options = pass;\n }\n if (!options) {\n options = {\n type: 'function' === typeof btoa ? 'basic' : 'auto',\n };\n }\n\n switch (options.type) {\n case 'basic':\n this.set('Authorization', 'Basic ' + btoa(user + ':' + pass));\n break;\n\n case 'auto':\n this.username = user;\n this.password = pass;\n break;\n \n case 'bearer': // usage would be .auth(accessToken, { type: 'bearer' })\n this.set('Authorization', 'Bearer ' + user);\n break; \n }\n return this;\n};\n\n/**\n * Add query-string `val`.\n *\n * Examples:\n *\n * request.get('/shoes')\n * .query('size=10')\n * .query({ color: 'blue' })\n *\n * @param {Object|String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.query = function(val){\n if ('string' != typeof val) val = serialize(val);\n if (val) this._query.push(val);\n return this;\n};\n\n/**\n * Queue the given `file` as an attachment to the specified `field`,\n * with optional `options` (or filename).\n *\n * ``` js\n * request.post('/upload')\n * .attach('content', new Blob(['hey!'], { type: \"text/html\"}))\n * .end(callback);\n * ```\n *\n * @param {String} field\n * @param {Blob|File} file\n * @param {String|Object} options\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.attach = function(field, file, options){\n if (file) {\n if (this._data) {\n throw Error(\"superagent can't mix .send() and .attach()\");\n }\n\n this._getFormData().append(field, file, options || file.name);\n }\n return this;\n};\n\nRequest.prototype._getFormData = function(){\n if (!this._formData) {\n this._formData = new root.FormData();\n }\n return this._formData;\n};\n\n/**\n * Invoke the callback with `err` and `res`\n * and handle arity check.\n *\n * @param {Error} err\n * @param {Response} res\n * @api private\n */\n\nRequest.prototype.callback = function(err, res){\n // console.log(this._retries, this._maxRetries)\n if (this._maxRetries && this._retries++ < this._maxRetries && shouldRetry(err, res)) {\n return this._retry();\n }\n\n var fn = this._callback;\n this.clearTimeout();\n\n if (err) {\n if (this._maxRetries) err.retries = this._retries - 1;\n this.emit('error', err);\n }\n\n fn(err, res);\n};\n\n/**\n * Invoke callback with x-domain error.\n *\n * @api private\n */\n\nRequest.prototype.crossDomainError = function(){\n var err = new Error('Request has been terminated\\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.');\n err.crossDomain = true;\n\n err.status = this.status;\n err.method = this.method;\n err.url = this.url;\n\n this.callback(err);\n};\n\n// This only warns, because the request is still likely to work\nRequest.prototype.buffer = Request.prototype.ca = Request.prototype.agent = function(){\n console.warn(\"This is not supported in browser version of superagent\");\n return this;\n};\n\n// This throws, because it can't send/receive data as expected\nRequest.prototype.pipe = Request.prototype.write = function(){\n throw Error(\"Streaming is not supported in browser version of superagent\");\n};\n\n/**\n * Compose querystring to append to req.url\n *\n * @api private\n */\n\nRequest.prototype._appendQueryString = function(){\n var query = this._query.join('&');\n if (query) {\n this.url += (this.url.indexOf('?') >= 0 ? '&' : '?') + query;\n }\n\n if (this._sort) {\n var index = this.url.indexOf('?');\n if (index >= 0) {\n var queryArr = this.url.substring(index + 1).split('&');\n if (isFunction_1(this._sort)) {\n queryArr.sort(this._sort);\n } else {\n queryArr.sort();\n }\n this.url = this.url.substring(0, index) + '?' + queryArr.join('&');\n }\n }\n};\n\n/**\n * Check if `obj` is a host object,\n * we don't want to serialize these :)\n *\n * @param {Object} obj\n * @return {Boolean}\n * @api private\n */\nRequest.prototype._isHost = function _isHost(obj) {\n // Native objects stringify to [object File], [object Blob], [object FormData], etc.\n return obj && 'object' === typeof obj && !Array.isArray(obj) && Object.prototype.toString.call(obj) !== '[object Object]';\n};\n\n/**\n * Initiate request, invoking callback `fn(res)`\n * with an instanceof `Response`.\n *\n * @param {Function} fn\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.end = function(fn){\n if (this._endCalled) {\n console.warn(\"Warning: .end() was called twice. This is not supported in superagent\");\n }\n this._endCalled = true;\n\n // store callback\n this._callback = fn || noop;\n\n // querystring\n this._appendQueryString();\n\n return this._end();\n};\n\nRequest.prototype._end = function() {\n var self = this;\n var xhr = this.xhr = request.getXHR();\n var data = this._formData || this._data;\n\n this._setTimeouts();\n\n // state change\n xhr.onreadystatechange = function(){\n var readyState = xhr.readyState;\n if (readyState >= 2 && self._responseTimeoutTimer) {\n clearTimeout(self._responseTimeoutTimer);\n }\n if (4 != readyState) {\n return;\n }\n\n // In IE9, reads to any property (e.g. status) off of an aborted XHR will\n // result in the error \"Could not complete the operation due to error c00c023f\"\n var status;\n try { status = xhr.status; } catch(e) { status = 0; }\n\n if (!status) {\n if (self.timedout || self._aborted) return;\n return self.crossDomainError();\n }\n self.emit('end');\n };\n\n // progress\n var handleProgress = function(direction, e) {\n if (e.total > 0) {\n e.percent = e.loaded / e.total * 100;\n }\n e.direction = direction;\n self.emit('progress', e);\n };\n if (this.hasListeners('progress')) {\n try {\n xhr.onprogress = handleProgress.bind(null, 'download');\n if (xhr.upload) {\n xhr.upload.onprogress = handleProgress.bind(null, 'upload');\n }\n } catch(e) {\n // Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist.\n // Reported here:\n // https://connect.microsoft.com/IE/feedback/details/837245/xmlhttprequest-upload-throws-invalid-argument-when-used-from-web-worker-context\n }\n }\n\n // initiate request\n try {\n if (this.username && this.password) {\n xhr.open(this.method, this.url, true, this.username, this.password);\n } else {\n xhr.open(this.method, this.url, true);\n }\n } catch (err) {\n // see #1149\n return this.callback(err);\n }\n\n // CORS\n if (this._withCredentials) xhr.withCredentials = true;\n\n // body\n if (!this._formData && 'GET' != this.method && 'HEAD' != this.method && 'string' != typeof data && !this._isHost(data)) {\n // serialize stuff\n var contentType = this._header['content-type'];\n var serialize = this._serializer || request.serialize[contentType ? contentType.split(';')[0] : ''];\n if (!serialize && isJSON(contentType)) {\n serialize = request.serialize['application/json'];\n }\n if (serialize) data = serialize(data);\n }\n\n // set header fields\n for (var field in this.header) {\n if (null == this.header[field]) continue;\n\n if (this.header.hasOwnProperty(field))\n xhr.setRequestHeader(field, this.header[field]);\n }\n\n if (this._responseType) {\n xhr.responseType = this._responseType;\n }\n\n // send stuff\n this.emit('request', this);\n\n // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing)\n // We need null here if data is undefined\n xhr.send(typeof data !== 'undefined' ? data : null);\n return this;\n};\n\n/**\n * GET `url` with optional callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.get = function(url, data, fn){\n var req = request('GET', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.query(data);\n if (fn) req.end(fn);\n return req;\n};\n\n/**\n * HEAD `url` with optional callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.head = function(url, data, fn){\n var req = request('HEAD', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.send(data);\n if (fn) req.end(fn);\n return req;\n};\n\n/**\n * OPTIONS query to `url` with optional callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.options = function(url, data, fn){\n var req = request('OPTIONS', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.send(data);\n if (fn) req.end(fn);\n return req;\n};\n\n/**\n * DELETE `url` with optional `data` and callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed} [data]\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nfunction del(url, data, fn){\n var req = request('DELETE', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.send(data);\n if (fn) req.end(fn);\n return req;\n}\n\nrequest['del'] = del;\nrequest['delete'] = del;\n\n/**\n * PATCH `url` with optional `data` and callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed} [data]\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.patch = function(url, data, fn){\n var req = request('PATCH', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.send(data);\n if (fn) req.end(fn);\n return req;\n};\n\n/**\n * POST `url` with optional `data` and callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed} [data]\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.post = function(url, data, fn){\n var req = request('POST', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.send(data);\n if (fn) req.end(fn);\n return req;\n};\n\n/**\n * PUT `url` with optional `data` and callback `fn(res)`.\n *\n * @param {String} url\n * @param {Mixed|Function} [data] or fn\n * @param {Function} [fn]\n * @return {Request}\n * @api public\n */\n\nrequest.put = function(url, data, fn){\n var req = request('PUT', url);\n if ('function' == typeof data) fn = data, data = null;\n if (data) req.send(data);\n if (fn) req.end(fn);\n return req;\n};\n});\n\nvar requestWithSource = function requestWithSource(method, url) {\n return client$1[method](url).set('Filestack-Source', 'JS-0.5.5');\n};\n\n/**\n * Special language-specific overrides.\n *\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n *\n * @type {Object}\n */\nvar LANGUAGES = {\n tr: {\n regexp: /\\u0130|\\u0049|\\u0049\\u0307/g,\n map: {\n '\\u0130': '\\u0069',\n '\\u0049': '\\u0131',\n '\\u0049\\u0307': '\\u0069'\n }\n },\n az: {\n regexp: /[\\u0130]/g,\n map: {\n '\\u0130': '\\u0069',\n '\\u0049': '\\u0131',\n '\\u0049\\u0307': '\\u0069'\n }\n },\n lt: {\n regexp: /[\\u0049\\u004A\\u012E\\u00CC\\u00CD\\u0128]/g,\n map: {\n '\\u0049': '\\u0069\\u0307',\n '\\u004A': '\\u006A\\u0307',\n '\\u012E': '\\u012F\\u0307',\n '\\u00CC': '\\u0069\\u0307\\u0300',\n '\\u00CD': '\\u0069\\u0307\\u0301',\n '\\u0128': '\\u0069\\u0307\\u0303'\n }\n }\n};\n\n/**\n * Lowercase a string.\n *\n * @param {String} str\n * @return {String}\n */\nvar lowerCase = function (str, locale) {\n var lang = LANGUAGES[locale];\n\n str = str == null ? '' : String(str);\n\n if (lang) {\n str = str.replace(lang.regexp, function (m) { return lang.map[m] });\n }\n\n return str.toLowerCase()\n};\n\nvar nonWordRegexp = /[^A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC0-9\\xB2\\xB3\\xB9\\xBC-\\xBE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]+/g;\n\nvar camelCaseRegexp = /([a-z\\xB5\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0561-\\u0587\\u13F8-\\u13FD\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7B5\\uA7B7\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB65\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A0-9\\xB2\\xB3\\xB9\\xBC-\\xBE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19])([A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AD\\uA7B0-\\uA7B4\\uA7B6\\uFF21-\\uFF3A])/g;\n\nvar camelCaseUpperRegexp = /([A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AD\\uA7B0-\\uA7B4\\uA7B6\\uFF21-\\uFF3A]+)([A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AD\\uA7B0-\\uA7B4\\uA7B6\\uFF21-\\uFF3A][a-z\\xB5\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0561-\\u0587\\u13F8-\\u13FD\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7B5\\uA7B7\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB65\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A])/g;\n\n/**\n * Sentence case a string.\n *\n * @param {string} str\n * @param {string} locale\n * @param {string} replacement\n * @return {string}\n */\nvar noCase = function (str, locale, replacement) {\n if (str == null) {\n return ''\n }\n\n replacement = typeof replacement !== 'string' ? ' ' : replacement;\n\n function replace (match, index, value) {\n if (index === 0 || index === (value.length - match.length)) {\n return ''\n }\n\n return replacement\n }\n\n str = String(str)\n // Support camel case (\"camelCase\" -> \"camel Case\").\n .replace(camelCaseRegexp, '$1 $2')\n // Support odd camel case (\"CAMELCase\" -> \"CAMEL Case\").\n .replace(camelCaseUpperRegexp, '$1 $2')\n // Remove all non-word characters and replace with a single space.\n .replace(nonWordRegexp, replace);\n\n // Lower case the entire string.\n return lowerCase(str, locale)\n};\n\n/**\n * Snake case a string.\n *\n * @param {string} value\n * @param {string} [locale]\n * @return {string}\n */\nvar snakeCase = function (value, locale) {\n return noCase(value, locale, '_')\n};\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/* eslint-disable no-param-reassign */\nvar validate$1 = index.validate;\n\nvar checkOptions = function checkOptions(name, allowed, options) {\n var keys = Object.keys(options);\n var allowedNames = allowed.map(function (a) {\n return a.name;\n });\n var namesFormatted = allowedNames.join(', ');\n keys.forEach(function (key) {\n if (allowedNames.indexOf(key) < 0) {\n throw new Error(key + ' is not a valid option for ' + name + '. Valid options are: ' + namesFormatted);\n }\n });\n allowed.forEach(function (obj) {\n var value = options[obj.name];\n if (obj.name === 'location' && typeof value === 'string') {\n value = value.toLowerCase();\n }\n if (value !== undefined) {\n var result = validate$1(value, obj.type);\n if (!result.isValid()) {\n throw new Error(result.firstError().message);\n }\n }\n });\n return keys;\n};\n\nvar removeEmpty = function removeEmpty(obj) {\n var newObj = _extends({}, obj);\n Object.keys(newObj).forEach(function (k) {\n return !newObj[k] && newObj[k] !== undefined && delete newObj[k];\n });\n return newObj;\n};\n\nvar snakeKeys = function snakeKeys(opts) {\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n var options = _extends({}, opts);\n return Object.keys(options).reduce(function (prev, curr) {\n prev[snakeCase(prefix + '-' + curr)] = options[curr];\n delete options[curr];\n return prev;\n }, {});\n};\n\n/* eslint-disable no-param-reassign */\nvar storeURL = function storeURL(session, url) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var token = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n var storeApiUrl = session.urls.storeApiUrl;\n if (!url || typeof url !== 'string') {\n throw new Error('url is required for storeURL');\n }\n var allowed = [{ name: 'filename', type: index.String }, { name: 'location', type: index.enums.of('s3 gcs rackspace azure dropbox') }, { name: 'mimetype', type: index.String }, { name: 'path', type: index.String }, { name: 'region', type: index.String }, { name: 'container', type: index.String }, { name: 'access', type: index.enums.of('public private') }];\n\n // Throw if options are invalid\n checkOptions('storeURL', allowed, options);\n\n // Default location\n var location = options.location || 's3';\n\n var newOptions = removeEmpty(options);\n\n if (session.policy && session.signature) {\n newOptions.policy = session.policy;\n newOptions.signature = session.signature;\n }\n\n var baseURL = storeApiUrl + '/' + location;\n\n return new Promise(function (resolve, reject) {\n var req = client$1.post(baseURL).query({ key: session.apikey }).query(newOptions).send('url=' + url).end(function (err, res) {\n if (err) {\n reject(err);\n } else if (res.body && res.body.url) {\n var handle = res.body.url.split('/').pop();\n var response = _extends({}, res.body, { handle: handle });\n resolve(response);\n } else {\n resolve(res.body);\n }\n });\n token.cancel = function () {\n req.abort();\n reject(new Error('Upload cancelled'));\n };\n });\n};\n\n/* eslint-disable no-multi-spaces */\nvar retrieve = function retrieve(session, handle) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var fileApiUrl = session.urls.fileApiUrl;\n if (!handle || typeof handle !== 'string') {\n throw new Error('handle is required for retrieve');\n }\n var allowed = [{ name: 'metadata', type: index.Boolean }, { name: 'head', type: index.Boolean }, { name: 'cache', type: index.Boolean }, { name: 'dl', type: index.Boolean }, { name: 'extension', type: index.String }];\n\n // Throw if options are invalid\n checkOptions('retrieve', allowed, options);\n\n var baseURL = fileApiUrl + '/' + handle;\n var newOptions = removeEmpty(options);\n\n // extension is added to handle like 'DCL5k45342323kadsf+name.jpg'\n // it is not part of query string\n if (newOptions.extension) {\n baseURL += '+' + newOptions.extension;\n delete newOptions.extension;\n }\n\n // metadata is passed as 'DCL5k45342323kadsf/metadata'\n if (newOptions.metadata) {\n baseURL += '/metadata';\n }\n\n if (session.policy && session.signature) {\n newOptions.policy = session.policy;\n newOptions.signature = session.signature;\n }\n\n if (newOptions.head) {\n delete newOptions.head;\n return new Promise(function (resolve, reject) {\n client$1.head(baseURL).query(newOptions).end(function (err, res) {\n if (err) {\n reject(err);\n } else {\n resolve(res.headers);\n }\n });\n });\n }\n return new Promise(function (resolve, reject) {\n var responseType = newOptions.metadata ? 'json' : 'blob';\n delete newOptions.metadata;\n\n client$1.get(baseURL).query(newOptions).responseType(responseType).end(function (err, res) {\n if (err) {\n reject(err);\n } else {\n resolve(res.body);\n }\n });\n });\n};\n\nvar remove = function remove(session, handle) {\n var fileApiUrl = session.urls.fileApiUrl;\n if (!handle || typeof handle !== 'string') {\n throw new Error('handle is required for remove');\n }\n\n if (!session.policy || !session.signature) {\n throw new Error('security policy and signature are required for remove');\n }\n\n var baseURL = fileApiUrl + '/' + handle;\n\n return new Promise(function (resolve, reject) {\n client$1.delete(baseURL).query({ key: session.apikey }).query({ policy: session.policy, signature: session.signature }).end(function (err, res) {\n if (err) {\n reject(err);\n } else {\n resolve(res);\n }\n });\n });\n};\n\nvar overwrite = function overwrite(session, handle) {\n var fileApiUrl = session.urls.fileApiUrl;\n if (!handle || typeof handle !== 'string') {\n throw new Error('handle is required for overwrite');\n }\n\n if (!session.policy || !session.signature) {\n throw new Error('security policy and signature are required for overwrite');\n }\n\n var baseURL = fileApiUrl + '/' + handle;\n\n return new Promise(function (resolve, reject) {\n client$1.post(baseURL).query({ key: session.apikey }).query({ policy: session.policy, signature: session.signature }).end(function (err, res) {\n if (err) {\n reject(err);\n } else {\n var response = _extends({}, res.body, { handle: handle });\n resolve(response);\n }\n });\n });\n};\n\nvar metadata = function metadata(session, handle) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var fileApiUrl = session.urls.fileApiUrl;\n if (!handle || typeof handle !== 'string') {\n throw new Error('handle is required for metadata');\n }\n var allowed = [{ name: 'size', type: index.Boolean }, { name: 'mimetype', type: index.Boolean }, { name: 'filename', type: index.Boolean }, { name: 'width', type: index.Boolean }, { name: 'height', type: index.Boolean }, { name: 'uploaded', type: index.Boolean }, { name: 'writeable', type: index.Boolean }, { name: 'cloud', type: index.Boolean }, { name: 'sourceUrl', type: index.Boolean }, { name: 'md5', type: index.Boolean }, { name: 'sha1', type: index.Boolean }, { name: 'sha224', type: index.Boolean }, { name: 'sha256', type: index.Boolean }, { name: 'sha384', type: index.Boolean }, { name: 'sha512', type: index.Boolean }, { name: 'location', type: index.Boolean }, { name: 'path', type: index.Boolean }, { name: 'container', type: index.Boolean }, { name: 'exif', type: index.Boolean }];\n\n // Throw if options are invalid\n checkOptions('retrieve', allowed, options);\n\n var newOptions = removeEmpty(snakeKeys(options));\n\n if (session.policy && session.signature) {\n newOptions.policy = session.policy;\n newOptions.signature = session.signature;\n }\n\n var baseURL = fileApiUrl + '/' + handle + '/metadata';\n return new Promise(function (resolve, reject) {\n client$1.get(baseURL).query(newOptions).end(function (err, res) {\n if (err) {\n reject(err);\n } else {\n resolve(res.body);\n }\n });\n });\n};\n\n// Logger can be used and required from many places.\n// This is global on / off switch for it, which all\n// created logger contexts respect.\n\nvar onOff = {\n init: function init() {\n window.filestackInternals.logger.working = false;\n },\n isWorking: function isWorking() {\n return window.filestackInternals.logger.working;\n },\n on: function on() {\n window.filestackInternals.logger.working = true;\n },\n off: function off() {\n window.filestackInternals.logger.working = false;\n }\n};\n\nvar _typeof$1 = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray$1 = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\n/* eslint no-console:0 */\n\nvar context = function context(contextName, onOff) {\n var api = function log() {\n for (var _len = arguments.length, stuff = Array(_len), _key = 0; _key < _len; _key++) {\n stuff[_key] = arguments[_key];\n }\n\n var convertedToStrings = [].concat(stuff).map(function (thing) {\n if ((typeof thing === 'undefined' ? 'undefined' : _typeof$1(thing)) === 'object') {\n return JSON.stringify(thing, function (key, value) {\n if (typeof value === 'function') {\n // If any function named json is found then call that function to get the json object.\n if (key === 'json') {\n try {\n return value();\n } catch (err) {\n // Throws? No worries. Just go on and return string.\n }\n }\n return '[Function]';\n }\n if (value instanceof File) {\n return '[File name: ' + value.name + ', mimetype: ' + value.type + ', size: ' + value.size + ']';\n }\n return value;\n }, 2);\n }\n return thing;\n });\n if (onOff.isWorking()) {\n var _console;\n\n (_console = console).log.apply(_console, ['[' + contextName + ']'].concat(toConsumableArray$1(convertedToStrings)));\n }\n };\n\n api.context = function (subContextName) {\n return context(contextName + '][' + subContextName, onOff);\n };\n\n api.on = onOff.on;\n api.off = onOff.off;\n\n return api;\n};\n\nvar logger = context('filestack', onOff);\n\nvar initializeGlobalNamespace = function initializeGlobalNamespace() {\n var namespace = void 0;\n if ((typeof window === 'undefined' ? 'undefined' : _typeof$1(window)) === 'object') {\n namespace = window.filestackInternals;\n if (!namespace) {\n namespace = {};\n window.filestackInternals = namespace;\n }\n if (!namespace.logger) {\n namespace.logger = logger;\n onOff.init();\n }\n }\n return namespace;\n};\n\ninitializeGlobalNamespace();\n\n/* eslint-disable no-param-reassign */\nvar log = logger.context('api-client');\n\nvar _cloud = (function (session) {\n var cloudApiUrl = session.urls.cloudApiUrl;\n var list = function list(clouds) {\n var token = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var payload = {\n apikey: session.apikey,\n clouds: clouds\n };\n if (session.policy && session.signature) {\n payload.policy = session.policy;\n payload.signature = session.signature;\n }\n log('cloud.list() called:', payload);\n return new Promise(function (resolve, reject) {\n var req = client$1.post(cloudApiUrl + '/folder/list').send(payload).withCredentials().end(function (err, response) {\n if (err) {\n reject(err);\n } else {\n log('cloud.list() responded:', response.body);\n resolve(response.body);\n }\n });\n token.cancel = function () {\n req.abort();\n reject(new Error('Cancelled'));\n };\n });\n };\n\n var store = function store(name, path) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var token = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n log('cloud.store() called:', name, path, options);\n var allowed = [{ name: 'location', type: index.enums.of('s3 gcs rackspace azure dropbox') }, { name: 'region', type: index.String }, { name: 'path', type: index.String }, { name: 'container', type: index.String }, { name: 'access', type: index.enums.of('public private') }];\n\n // Throw if options are invalid\n checkOptions('cloud.store', allowed, options);\n\n // Default to S3\n if (options.location === undefined) options.location = 's3';\n\n var payload = {\n apikey: session.apikey,\n clouds: defineProperty({}, name, {\n path: path,\n store: _extends({}, removeEmpty(options))\n })\n };\n\n if (session.policy && session.signature) {\n payload.policy = session.policy;\n payload.signature = session.signature;\n }\n\n return new Promise(function (resolve, reject) {\n var req = client$1.post(cloudApiUrl + '/store/').send(payload).withCredentials().end(function (err, response) {\n if (err) {\n reject(err);\n } else {\n log('cloud.store() responded:', response.body);\n if (response.body[name]) {\n resolve(response.body[name]);\n } else {\n resolve(response.body);\n }\n }\n });\n\n token.cancel = function () {\n req.abort();\n reject(new Error('Cancelled'));\n };\n });\n };\n\n var link = function link(name, path) {\n var token = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n log('cloud.link() called:', name, path);\n var payload = {\n apikey: session.apikey,\n clouds: defineProperty({}, name, {\n path: path\n })\n };\n if (session.policy && session.signature) {\n payload.policy = session.policy;\n payload.signature = session.signature;\n }\n return new Promise(function (resolve, reject) {\n var req = client$1.post(cloudApiUrl + '/link/').send(payload).withCredentials().end(function (err, response) {\n if (err) {\n reject(err);\n } else {\n log('cloud.link() responded:', response.body);\n if (response.body[name]) {\n resolve(response.body[name]);\n } else {\n resolve(response.body);\n }\n }\n });\n token.cancel = function () {\n req.abort();\n reject(new Error('Cancelled'));\n };\n });\n };\n\n var logout = function logout(name) {\n log('cloud.logout() called:', name);\n var payload = {\n apikey: session.apikey,\n clouds: defineProperty({}, name, {})\n };\n return new Promise(function (resolve, reject) {\n client$1.post(cloudApiUrl + '/auth/logout/').send(payload).withCredentials().end(function (err, response) {\n if (err) {\n reject(err);\n } else {\n log('cloud.logout() responded:', response.body);\n resolve(response.body);\n }\n });\n });\n };\n\n var metadata = function metadata(url) {\n var payload = {\n apikey: session.apikey,\n url: url\n };\n if (session.policy && session.signature) {\n payload.policy = session.policy;\n payload.signature = session.signature;\n }\n return new Promise(function (resolve, reject) {\n client$1.post(cloudApiUrl + '/metadata').send(payload).end(function (err, response) {\n if (err) {\n reject(err);\n } else {\n log('cloud.metadata() responded:', response.body);\n resolve(response.body);\n }\n });\n });\n };\n\n // Opentok API Endpoints\n var tokInit = function tokInit(type) {\n if (type !== 'video' && type !== 'audio') {\n throw new Error('Type must be one of video or audio.');\n }\n return client$1.post(cloudApiUrl + '/recording/' + type + '/init');\n };\n var tokStart = function tokStart(type, key, sessionId) {\n if (type !== 'video' && type !== 'audio') {\n throw new Error('Type must be one of video or audio.');\n }\n var payload = {\n apikey: key,\n session_id: sessionId\n };\n return client$1.post(cloudApiUrl + '/recording/' + type + '/start').send(payload);\n };\n var tokStop = function tokStop(type, key, sessionId, archiveId) {\n if (type !== 'video' && type !== 'audio') {\n throw new Error('Type must be one of video or audio.');\n }\n var payload = {\n apikey: key,\n session_id: sessionId,\n archive_id: archiveId\n };\n return client$1.post(cloudApiUrl + '/recording/' + type + '/stop').send(payload);\n };\n\n return {\n list: list,\n store: store,\n link: link,\n metadata: metadata,\n logout: logout,\n tokInit: tokInit,\n tokStart: tokStart,\n tokStop: tokStop\n };\n});\n\nvar prefetch = function prefetch(session) {\n var cloudURL = session.urls.cloudApiUrl;\n var params = {\n apikey: session.apikey\n };\n return client$1.get(cloudURL + '/prefetch').timeout(5000).query(params).then(function (res) {\n return res.body;\n });\n};\n\n/* eslint-disable max-len */\n/* eslint-disable no-param-reassign */\n\n/*\n-----------------------------------\nType definitions\n-----------------------------------\n*/\n\n// Number range (not integer range)\nvar numberRange = function numberRange(start, end) {\n return index.refinement(index.Number, function (n) {\n return n >= start && n <= end;\n });\n};\n\n// Integer range type\nvar min = function min(int) {\n return index.refinement(index.Integer, function (n) {\n return n >= int;\n });\n};\nvar max = function max(int) {\n return index.refinement(index.Integer, function (n) {\n return n <= int;\n });\n};\nvar range = function range(start, end) {\n return index.tuple([min(start), max(end)], 'range');\n};\n\n// Special type for resize align\nvar alignment = index.enums.of('top left right bottom');\nvar alignPair = index.refinement(index.tuple([alignment, alignment]), function (tup) {\n return tup[0] !== tup[1];\n}, 'pair');\n\n/*\n-----------------------------------\nFormat options for API\n-----------------------------------\n*/\n\nvar formatOption = function formatOption(op, options) {\n var name = snakeCase(op.name);\n var value = options[op.name];\n if (Array.isArray(value)) {\n return name + ':[' + value + ']';\n }\n return value ? name + ':' + value : null;\n};\n\nvar formatOptions = function formatOptions(name, allowed, options) {\n var fOptions = allowed.map(function (op) {\n return formatOption(op, options);\n }).filter(function (op) {\n return op;\n }).join(',');\n\n var snakeName = snakeCase(name);\n\n if (fOptions.length) {\n return snakeName + '=' + fOptions;\n }\n return snakeName;\n};\n\n/*\n-----------------------------------\nTransform options\n-----------------------------------\n*/\n\nvar sepia = function sepia() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'tone', type: numberRange(0, 100) }];\n checkOptions('sepia', allowed, options);\n var sepiaOptions = formatOptions('sepia', allowed, options);\n return transforms.concat(sepiaOptions);\n};\n\nvar blackwhite = function blackwhite() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'threshold', type: numberRange(0, 100) }];\n checkOptions('blackwhite', allowed, options);\n var blackWhiteOptions = formatOptions('blackwhite', allowed, options);\n return transforms.concat(blackWhiteOptions);\n};\n\nvar border = function border() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'width', type: numberRange(1, 1000) }, { name: 'color', type: index.String }, { name: 'background', type: index.String }];\n checkOptions('border', allowed, options);\n var borderOptions = formatOptions('border', allowed, options);\n return transforms.concat(borderOptions);\n};\n\nvar circle = function circle() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'background', type: index.String }];\n checkOptions('circle', allowed, options);\n var circleOptions = formatOptions('circle', allowed, options);\n return transforms.concat(circleOptions);\n};\n\nvar shadow = function shadow() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'blur', type: numberRange(0, 20) }, { name: 'opacity', type: numberRange(0, 100) }, { name: 'vector', type: range(-1000, 1000) }, { name: 'color', type: index.String }, { name: 'background', type: index.String }];\n checkOptions('shadow', allowed, options);\n var shadowOptions = formatOptions('shadow', allowed, options);\n return transforms.concat(shadowOptions);\n};\n\nvar tornEdges = function tornEdges() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'spread', type: range(1, 10000) }, { name: 'background', type: index.String }];\n checkOptions('tornEdges', allowed, options);\n var tornEdgesOptions = formatOptions('tornEdges', allowed, options);\n return transforms.concat(tornEdgesOptions);\n};\n\nvar polaroid = function polaroid() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'color', type: index.String }, { name: 'rotate', type: numberRange(0, 359) }, { name: 'background', type: index.String }];\n checkOptions('polaroid', allowed, options);\n var polaroidOptions = formatOptions('polaroid', allowed, options);\n return transforms.concat(polaroidOptions);\n};\n\nvar vignette = function vignette() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'amount', type: numberRange(0, 100) }, { name: 'blurmode', type: index.enums.of('linear gaussian') }, { name: 'background', type: index.String }];\n checkOptions('vignette', allowed, options);\n var vignetteOptions = formatOptions('vignette', allowed, options);\n return transforms.concat(vignetteOptions);\n};\n\nvar roundedCorners = function roundedCorners() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'radius', type: index.union([numberRange(1, 10000), index.enums.of('max')]) }, { name: 'blur', type: numberRange(0, 20) }, { name: 'background', type: index.String }];\n checkOptions('roundedCorners', allowed, options);\n var roundedCornersOptions = formatOptions('roundedCorners', allowed, options);\n return transforms.concat(roundedCornersOptions);\n};\n\nvar rotate = function rotate() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'deg', type: index.union([numberRange(0, 359), index.enums.of('exif')]) }, { name: 'exif', type: index.Boolean }, { name: 'background', type: index.String }];\n var keys = checkOptions('rotate', allowed, options);\n if (keys.length < 1) {\n throw new Error('Rotate options must contain either deg or exif');\n }\n\n var rotateOptions = formatOptions('rotate', allowed, options);\n return transforms.concat(rotateOptions);\n};\n\nvar resize = function resize() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'width', type: numberRange(0, 10000) }, { name: 'height', type: numberRange(0, 10000) }, { name: 'fit', type: index.enums.of('clip crop scale max') }, { name: 'align', type: index.union([index.enums.of('center top bottom left right faces'), alignPair]) }];\n var keys = checkOptions('resize', allowed, options);\n if (keys.length < 1) {\n throw new Error('Resize options must contain either width, height, fit, or align');\n }\n var resizeOptions = formatOptions('resize', allowed, options);\n return transforms.concat(resizeOptions);\n};\n\nvar flip = function flip() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var value = arguments[1];\n\n if (typeof value !== 'boolean') {\n throw Error('flip must be a Boolean value');\n }\n return value ? transforms.concat('flip') : transforms;\n};\n\nvar flop = function flop() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var value = arguments[1];\n\n if (typeof value !== 'boolean') {\n throw Error('flop must be a Boolean value');\n }\n return value ? transforms.concat('flop') : transforms;\n};\n\nvar monochrome = function monochrome() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var value = arguments[1];\n\n if (typeof value !== 'boolean') {\n throw Error('monochrome must be a Boolean value');\n }\n return value ? transforms.concat('monochrome') : transforms;\n};\n\nvar crop = function crop() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{\n name: 'dim',\n type: index.struct({\n x: index.Integer,\n y: index.Integer,\n width: index.Integer,\n height: index.Integer\n })\n }];\n checkOptions('crop', allowed, options);\n var dim = options.dim;\n var cropOptions = 'crop=dim:[' + dim.x + ',' + dim.y + ',' + dim.width + ',' + dim.height + ']';\n return transforms.concat(cropOptions);\n};\n\nvar output = function output() {\n var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments[1];\n\n var allowed = [{ name: 'format', type: index.String }, { name: 'background', type: index.String }, { name: 'page', type: numberRange(1, 10000) }, { name: 'density', type: numberRange(1, 500) }, { name: 'compress', type: index.Boolean }, { name: 'quality', type: index.union([numberRange(1, 100), index.enums.of('input')]) }, { name: 'input', type: index.Boolean }, { name: 'strip', type: index.Boolean }, { name: 'colorspace', type: index.enums.of('rgb cmyk input') }, { name: 'secure', type: index.Boolean }, { name: 'docinfo', type: index.Boolean }, { name: 'pageformat', type: index.enums.of('a3 a4 a5 b4 b5 letter legal tabloid') }, { name: 'pageorientation', type: index.enums.of('landscape portrait') }];\n checkOptions('output', allowed, options);\n var outputOptions = formatOptions('output', allowed, options);\n return transforms.concat(outputOptions);\n};\n\n// Table of valid transformers, keys point to private functions\nvar transformers = {\n crop: crop,\n resize: resize,\n rotate: rotate,\n roundedCorners: roundedCorners,\n vignette: vignette,\n polaroid: polaroid,\n tornEdges: tornEdges,\n shadow: shadow,\n circle: circle,\n border: border,\n flip: flip,\n flop: flop,\n blackwhite: blackwhite,\n monochrome: monochrome,\n sepia: sepia,\n output: output\n};\n\nvar transform = function transform(session, url, config) {\n var processURL = session.urls.processApiUrl;\n var allowed = Object.keys(transformers);\n // Need some options or we're done here\n var keys = Object.keys(config);\n // Fail fast\n keys.forEach(function (key) {\n if (allowed.indexOf(key) < 0) {\n throw new Error('Invalid option specified: ' + key + ' is not a valid transform option.');\n }\n });\n // Construct URL\n var construct = function construct() {\n var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n if (count === keys.length) {\n return arr;\n }\n var transformIndex = keys[count];\n var transformConfig = config[transformIndex];\n var transformer = transformers[transformIndex];\n var newCount = count + 1;\n return construct(transformer(arr, transformConfig), newCount);\n };\n\n if (session.policy && session.signature) {\n var secString = 'security=policy:' + session.policy + ',signature:' + session.signature;\n var _baseURL = processURL + '/' + session.apikey + '/' + secString;\n var transformString = construct().join('/');\n return _baseURL + '/' + transformString + '/' + url;\n }\n\n // See URL format: https://www.filestack.com/docs/image-transformations\n var baseURL = processURL + '/' + session.apikey;\n var transforms = construct();\n if (transforms.length) {\n var _transformString = construct().join('/');\n return baseURL + '/' + _transformString + '/' + url;\n }\n return url;\n};\n\nvar bowser = createCommonjsModule(function (module) {\n/*!\n * Bowser - a browser detector\n * https://github.com/ded/bowser\n * MIT License | (c) Dustin Diaz 2015\n */\n\n!function (root, name, definition) {\n if ('object' != 'undefined' && module.exports) module.exports = definition();\n else if (typeof undefined == 'function' && undefined.amd) undefined(name, definition);\n else root[name] = definition();\n}(commonjsGlobal, 'bowser', function () {\n /**\n * See useragents.js for examples of navigator.userAgent\n */\n\n var t = true;\n\n function detect(ua) {\n\n function getFirstMatch(regex) {\n var match = ua.match(regex);\n return (match && match.length > 1 && match[1]) || '';\n }\n\n function getSecondMatch(regex) {\n var match = ua.match(regex);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()\n , likeAndroid = /like android/i.test(ua)\n , android = !likeAndroid && /android/i.test(ua)\n , nexusMobile = /nexus\\s*[0-6]\\s*/i.test(ua)\n , nexusTablet = !nexusMobile && /nexus\\s*[0-9]+/i.test(ua)\n , chromeos = /CrOS/.test(ua)\n , silk = /silk/i.test(ua)\n , sailfish = /sailfish/i.test(ua)\n , tizen = /tizen/i.test(ua)\n , webos = /(web|hpw)os/i.test(ua)\n , windowsphone = /windows phone/i.test(ua)\n , samsungBrowser = /SamsungBrowser/i.test(ua)\n , windows = !windowsphone && /windows/i.test(ua)\n , mac = !iosdevice && !silk && /macintosh/i.test(ua)\n , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)\n , edgeVersion = getFirstMatch(/edge\\/(\\d+(\\.\\d+)?)/i)\n , versionIdentifier = getFirstMatch(/version\\/(\\d+(\\.\\d+)?)/i)\n , tablet = /tablet/i.test(ua) && !/tablet pc/i.test(ua)\n , mobile = !tablet && /[^-]mobi/i.test(ua)\n , xbox = /xbox/i.test(ua)\n , result;\n\n if (/opera/i.test(ua)) {\n // an old Opera\n result = {\n name: 'Opera'\n , opera: t\n , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\\s\\/](\\d+(\\.\\d+)?)/i)\n };\n } else if (/opr|opios/i.test(ua)) {\n // a new Opera\n result = {\n name: 'Opera'\n , opera: t\n , version: getFirstMatch(/(?:opr|opios)[\\s\\/](\\d+(\\.\\d+)?)/i) || versionIdentifier\n };\n }\n else if (/SamsungBrowser/i.test(ua)) {\n result = {\n name: 'Samsung Internet for Android'\n , samsungBrowser: t\n , version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\\s\\/](\\d+(\\.\\d+)?)/i)\n };\n }\n else if (/coast/i.test(ua)) {\n result = {\n name: 'Opera Coast'\n , coast: t\n , version: versionIdentifier || getFirstMatch(/(?:coast)[\\s\\/](\\d+(\\.\\d+)?)/i)\n };\n }\n else if (/yabrowser/i.test(ua)) {\n result = {\n name: 'Yandex Browser'\n , yandexbrowser: t\n , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\\s\\/](\\d+(\\.\\d+)?)/i)\n };\n }\n else if (/ucbrowser/i.test(ua)) {\n result = {\n name: 'UC Browser'\n , ucbrowser: t\n , version: getFirstMatch(/(?:ucbrowser)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n };\n }\n else if (/mxios/i.test(ua)) {\n result = {\n name: 'Maxthon'\n , maxthon: t\n , version: getFirstMatch(/(?:mxios)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n };\n }\n else if (/epiphany/i.test(ua)) {\n result = {\n name: 'Epiphany'\n , epiphany: t\n , version: getFirstMatch(/(?:epiphany)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n };\n }\n else if (/puffin/i.test(ua)) {\n result = {\n name: 'Puffin'\n , puffin: t\n , version: getFirstMatch(/(?:puffin)[\\s\\/](\\d+(?:\\.\\d+)?)/i)\n };\n }\n else if (/sleipnir/i.test(ua)) {\n result = {\n name: 'Sleipnir'\n , sleipnir: t\n , version: getFirstMatch(/(?:sleipnir)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n };\n }\n else if (/k-meleon/i.test(ua)) {\n result = {\n name: 'K-Meleon'\n , kMeleon: t\n , version: getFirstMatch(/(?:k-meleon)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n };\n }\n else if (windowsphone) {\n result = {\n name: 'Windows Phone'\n , windowsphone: t\n };\n if (edgeVersion) {\n result.msedge = t;\n result.version = edgeVersion;\n }\n else {\n result.msie = t;\n result.version = getFirstMatch(/iemobile\\/(\\d+(\\.\\d+)?)/i);\n }\n }\n else if (/msie|trident/i.test(ua)) {\n result = {\n name: 'Internet Explorer'\n , msie: t\n , version: getFirstMatch(/(?:msie |rv:)(\\d+(\\.\\d+)?)/i)\n };\n } else if (chromeos) {\n result = {\n name: 'Chrome'\n , chromeos: t\n , chromeBook: t\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n };\n } else if (/chrome.+? edge/i.test(ua)) {\n result = {\n name: 'Microsoft Edge'\n , msedge: t\n , version: edgeVersion\n };\n }\n else if (/vivaldi/i.test(ua)) {\n result = {\n name: 'Vivaldi'\n , vivaldi: t\n , version: getFirstMatch(/vivaldi\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n };\n }\n else if (sailfish) {\n result = {\n name: 'Sailfish'\n , sailfish: t\n , version: getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (/seamonkey\\//i.test(ua)) {\n result = {\n name: 'SeaMonkey'\n , seamonkey: t\n , version: getFirstMatch(/seamonkey\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (/firefox|iceweasel|fxios/i.test(ua)) {\n result = {\n name: 'Firefox'\n , firefox: t\n , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \\/](\\d+(\\.\\d+)?)/i)\n };\n if (/\\((mobile|tablet);[^\\)]*rv:[\\d\\.]+\\)/i.test(ua)) {\n result.firefoxos = t;\n }\n }\n else if (silk) {\n result = {\n name: 'Amazon Silk'\n , silk: t\n , version : getFirstMatch(/silk\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (/phantom/i.test(ua)) {\n result = {\n name: 'PhantomJS'\n , phantom: t\n , version: getFirstMatch(/phantomjs\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (/slimerjs/i.test(ua)) {\n result = {\n name: 'SlimerJS'\n , slimer: t\n , version: getFirstMatch(/slimerjs\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (/blackberry|\\bbb\\d+/i.test(ua) || /rim\\stablet/i.test(ua)) {\n result = {\n name: 'BlackBerry'\n , blackberry: t\n , version: versionIdentifier || getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (webos) {\n result = {\n name: 'WebOS'\n , webos: t\n , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\\/(\\d+(\\.\\d+)?)/i)\n };\n /touchpad\\//i.test(ua) && (result.touchpad = t);\n }\n else if (/bada/i.test(ua)) {\n result = {\n name: 'Bada'\n , bada: t\n , version: getFirstMatch(/dolfin\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (tizen) {\n result = {\n name: 'Tizen'\n , tizen: t\n , version: getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n };\n }\n else if (/qupzilla/i.test(ua)) {\n result = {\n name: 'QupZilla'\n , qupzilla: t\n , version: getFirstMatch(/(?:qupzilla)[\\s\\/](\\d+(?:\\.\\d+)+)/i) || versionIdentifier\n };\n }\n else if (/chromium/i.test(ua)) {\n result = {\n name: 'Chromium'\n , chromium: t\n , version: getFirstMatch(/(?:chromium)[\\s\\/](\\d+(?:\\.\\d+)?)/i) || versionIdentifier\n };\n }\n else if (/chrome|crios|crmo/i.test(ua)) {\n result = {\n name: 'Chrome'\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (android) {\n result = {\n name: 'Android'\n , version: versionIdentifier\n };\n }\n else if (/safari|applewebkit/i.test(ua)) {\n result = {\n name: 'Safari'\n , safari: t\n };\n if (versionIdentifier) {\n result.version = versionIdentifier;\n }\n }\n else if (iosdevice) {\n result = {\n name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'\n };\n // WTF: version is not part of user agent in web apps\n if (versionIdentifier) {\n result.version = versionIdentifier;\n }\n }\n else if(/googlebot/i.test(ua)) {\n result = {\n name: 'Googlebot'\n , googlebot: t\n , version: getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i) || versionIdentifier\n };\n }\n else {\n result = {\n name: getFirstMatch(/^(.*)\\/(.*) /),\n version: getSecondMatch(/^(.*)\\/(.*) /)\n };\n }\n\n // set webkit or gecko flag for browsers based on these engines\n if (!result.msedge && /(apple)?webkit/i.test(ua)) {\n if (/(apple)?webkit\\/537\\.36/i.test(ua)) {\n result.name = result.name || \"Blink\";\n result.blink = t;\n } else {\n result.name = result.name || \"Webkit\";\n result.webkit = t;\n }\n if (!result.version && versionIdentifier) {\n result.version = versionIdentifier;\n }\n } else if (!result.opera && /gecko\\//i.test(ua)) {\n result.name = result.name || \"Gecko\";\n result.gecko = t;\n result.version = result.version || getFirstMatch(/gecko\\/(\\d+(\\.\\d+)?)/i);\n }\n\n // set OS flags for platforms that have multiple browsers\n if (!result.windowsphone && !result.msedge && (android || result.silk)) {\n result.android = t;\n } else if (!result.windowsphone && !result.msedge && iosdevice) {\n result[iosdevice] = t;\n result.ios = t;\n } else if (mac) {\n result.mac = t;\n } else if (xbox) {\n result.xbox = t;\n } else if (windows) {\n result.windows = t;\n } else if (linux) {\n result.linux = t;\n }\n\n function getWindowsVersion (s) {\n switch (s) {\n case 'NT': return 'NT'\n case 'XP': return 'XP'\n case 'NT 5.0': return '2000'\n case 'NT 5.1': return 'XP'\n case 'NT 5.2': return '2003'\n case 'NT 6.0': return 'Vista'\n case 'NT 6.1': return '7'\n case 'NT 6.2': return '8'\n case 'NT 6.3': return '8.1'\n case 'NT 10.0': return '10'\n default: return undefined\n }\n }\n \n // OS version extraction\n var osVersion = '';\n if (result.windows) {\n osVersion = getWindowsVersion(getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i));\n } else if (result.windowsphone) {\n osVersion = getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i);\n } else if (result.mac) {\n osVersion = getFirstMatch(/Mac OS X (\\d+([_\\.\\s]\\d+)*)/i);\n osVersion = osVersion.replace(/[_\\s]/g, '.');\n } else if (iosdevice) {\n osVersion = getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i);\n osVersion = osVersion.replace(/[_\\s]/g, '.');\n } else if (android) {\n osVersion = getFirstMatch(/android[ \\/-](\\d+(\\.\\d+)*)/i);\n } else if (result.webos) {\n osVersion = getFirstMatch(/(?:web|hpw)os\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.blackberry) {\n osVersion = getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i);\n } else if (result.bada) {\n osVersion = getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.tizen) {\n osVersion = getFirstMatch(/tizen[\\/\\s](\\d+(\\.\\d+)*)/i);\n }\n if (osVersion) {\n result.osversion = osVersion;\n }\n\n // device type extraction\n var osMajorVersion = !result.windows && osVersion.split('.')[0];\n if (\n tablet\n || nexusTablet\n || iosdevice == 'ipad'\n || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))\n || result.silk\n ) {\n result.tablet = t;\n } else if (\n mobile\n || iosdevice == 'iphone'\n || iosdevice == 'ipod'\n || android\n || nexusMobile\n || result.blackberry\n || result.webos\n || result.bada\n ) {\n result.mobile = t;\n }\n\n // Graded Browser Support\n // http://developer.yahoo.com/yui/articles/gbs\n if (result.msedge ||\n (result.msie && result.version >= 10) ||\n (result.yandexbrowser && result.version >= 15) ||\n\t\t (result.vivaldi && result.version >= 1.0) ||\n (result.chrome && result.version >= 20) ||\n (result.samsungBrowser && result.version >= 4) ||\n (result.firefox && result.version >= 20.0) ||\n (result.safari && result.version >= 6) ||\n (result.opera && result.version >= 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] >= 6) ||\n (result.blackberry && result.version >= 10.1)\n || (result.chromium && result.version >= 20)\n ) {\n result.a = t;\n }\n else if ((result.msie && result.version < 10) ||\n (result.chrome && result.version < 20) ||\n (result.firefox && result.version < 20.0) ||\n (result.safari && result.version < 6) ||\n (result.opera && result.version < 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] < 6)\n || (result.chromium && result.version < 20)\n ) {\n result.c = t;\n } else result.x = t;\n\n return result\n }\n\n var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '');\n\n bowser.test = function (browserList) {\n for (var i = 0; i < browserList.length; ++i) {\n var browserItem = browserList[i];\n if (typeof browserItem=== 'string') {\n if (browserItem in bowser) {\n return true;\n }\n }\n }\n return false;\n };\n\n /**\n * Get version precisions count\n *\n * @example\n * getVersionPrecision(\"1.10.3\") // 3\n *\n * @param {string} version\n * @return {number}\n */\n function getVersionPrecision(version) {\n return version.split(\".\").length;\n }\n\n /**\n * Array::map polyfill\n *\n * @param {Array} arr\n * @param {Function} iterator\n * @return {Array}\n */\n function map(arr, iterator) {\n var result = [], i;\n if (Array.prototype.map) {\n return Array.prototype.map.call(arr, iterator);\n }\n for (i = 0; i < arr.length; i++) {\n result.push(iterator(arr[i]));\n }\n return result;\n }\n\n /**\n * Calculate browser version weight\n *\n * @example\n * compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1\n * compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1\n * compareVersions(['1.10.2.1', '1.10.2.1']); // 0\n * compareVersions(['1.10.2.1', '1.0800.2']); // -1\n *\n * @param {Array} versions versions to compare\n * @return {Number} comparison result\n */\n function compareVersions(versions) {\n // 1) get common precision for both versions, for example for \"10.0\" and \"9\" it should be 2\n var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));\n var chunks = map(versions, function (version) {\n var delta = precision - getVersionPrecision(version);\n\n // 2) \"9\" -> \"9.0\" (for precision = 2)\n version = version + new Array(delta + 1).join(\".0\");\n\n // 3) \"9.0\" -> [\"000000000\"\", \"000000009\"]\n return map(version.split(\".\"), function (chunk) {\n return new Array(20 - chunk.length).join(\"0\") + chunk;\n }).reverse();\n });\n\n // iterate in reverse order by reversed chunks array\n while (--precision >= 0) {\n // 4) compare: \"000000009\" > \"000000010\" = false (but \"9\" > \"10\" = true)\n if (chunks[0][precision] > chunks[1][precision]) {\n return 1;\n }\n else if (chunks[0][precision] === chunks[1][precision]) {\n if (precision === 0) {\n // all version chunks are same\n return 0;\n }\n }\n else {\n return -1;\n }\n }\n }\n\n /**\n * Check if browser is unsupported\n *\n * @example\n * bowser.isUnsupportedBrowser({\n * msie: \"10\",\n * firefox: \"23\",\n * chrome: \"29\",\n * safari: \"5.1\",\n * opera: \"16\",\n * phantom: \"534\"\n * });\n *\n * @param {Object} minVersions map of minimal version to browser\n * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map\n * @param {String} [ua] user agent string\n * @return {Boolean}\n */\n function isUnsupportedBrowser(minVersions, strictMode, ua) {\n var _bowser = bowser;\n\n // make strictMode param optional with ua param usage\n if (typeof strictMode === 'string') {\n ua = strictMode;\n strictMode = void(0);\n }\n\n if (strictMode === void(0)) {\n strictMode = false;\n }\n if (ua) {\n _bowser = detect(ua);\n }\n\n var version = \"\" + _bowser.version;\n for (var browser in minVersions) {\n if (minVersions.hasOwnProperty(browser)) {\n if (_bowser[browser]) {\n if (typeof minVersions[browser] !== 'string') {\n throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions));\n }\n\n // browser version and min supported version.\n return compareVersions([version, minVersions[browser]]) < 0;\n }\n }\n }\n\n return strictMode; // not found\n }\n\n /**\n * Check if browser is supported\n *\n * @param {Object} minVersions map of minimal version to browser\n * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map\n * @param {String} [ua] user agent string\n * @return {Boolean}\n */\n function check(minVersions, strictMode, ua) {\n return !isUnsupportedBrowser(minVersions, strictMode, ua);\n }\n\n bowser.isUnsupportedBrowser = isUnsupportedBrowser;\n bowser.compareVersions = compareVersions;\n bowser.check = check;\n\n /*\n * Set our detect method to the main bowser object so we can\n * reuse it to test other user agents.\n * This is needed to implement future tests.\n */\n bowser._detect = detect;\n\n return bowser\n});\n});\n\nvar sparkMd5 = createCommonjsModule(function (module, exports) {\n(function (factory) {\n {\n // Node/CommonJS\n module.exports = factory();\n }\n}(function (undefined) {\n\n 'use strict';\n\n /*\n * Fastest md5 implementation around (JKM md5).\n * Credits: Joseph Myers\n *\n * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n * @see http://jsperf.com/md5-shootout/7\n */\n\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n var add32 = function (a, b) {\n return (a + b) & 0xFFFFFFFF;\n },\n hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n }\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n // containing the last element of the parent array if the sub array specified starts\n // beyond the length of the parent array - weird.\n // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << ((i % 4) << 3);\n }\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n\n return state;\n }\n\n function rhex(n) {\n var s = '',\n j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n }\n return s;\n }\n\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n }\n\n // In some cases the fast add32 function cannot be used..\n if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n add32 = function (x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xFFFF);\n };\n }\n\n // ---------------------------------------------------\n\n /**\n * ArrayBuffer slice polyfill.\n *\n * @see https://github.com/ttaubert/node-arraybuffer-slice\n */\n\n if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = (val | 0) || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n\n return target;\n };\n })();\n }\n\n // ---------------------------------------------------\n\n /**\n * Helpers.\n */\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation.\n *\n * Use this class to perform an incremental md5, otherwise use the\n * static methods instead.\n */\n\n function SparkMD5() {\n // call reset to init the instance\n this.reset();\n }\n\n /**\n * Appends a string.\n * A conversion will be applied if an utf8 string is detected.\n *\n * @param {String} str The string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.append = function (str) {\n // Converts the string to utf8 bytes if necessary\n // Then append as binary\n this.appendBinary(toUtf8(str));\n\n return this;\n };\n\n /**\n * Appends a binary string.\n *\n * @param {String} contents The binary string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.reset = function () {\n this._buff = '';\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n\n return this;\n };\n\n /**\n * Releases memory used by the incremental buffer and other additional\n * resources. If you plan to use the instance again, use reset instead.\n */\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n /**\n * Finish the final calculation based on the tail.\n *\n * @param {Array} tail The tail (will be modified)\n * @param {Number} length The length of the remaining buffer\n */\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n /**\n * Performs the md5 hash on a string.\n * A conversion will be applied if utf8 string is detected.\n *\n * @param {String} str The string\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hash = function (str, raw) {\n // Converts the string to utf8 bytes if necessary\n // Then compute it using the binary function\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n /**\n * Performs the md5 hash on a binary string.\n *\n * @param {String} content The binary string\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation for array buffers.\n *\n * Use this class to perform an incremental md5 ONLY for array buffers.\n */\n SparkMD5.ArrayBuffer = function () {\n // call reset to init the instance\n this.reset();\n };\n\n /**\n * Appends an array buffer.\n *\n * @param {ArrayBuffer} arr The array to be appended\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n\n // Convert buffer to a string\n state.buff = arrayBuffer2Utf8Str(state.buff);\n\n return state;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n // Convert string to buffer\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n /**\n * Performs the md5 hash on an array buffer.\n *\n * @param {ArrayBuffer} arr The array buffer\n * @param {Boolean} raw True to get the raw string, false to get the hex one\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n}));\n});\n\nvar index$5 = createCommonjsModule(function (module) {\n'use strict';\n\nmodule.exports = function (PromiseArgument) {\n var Promise;\n function throat(size, fn) {\n var queue = new Queue();\n function run(fn, self, args) {\n if (size) {\n size--;\n var result = new Promise(function (resolve) {\n resolve(fn.apply(self, args));\n });\n result.then(release, release);\n return result;\n } else {\n return new Promise(function (resolve) {\n queue.push(new Delayed(resolve, fn, self, args));\n });\n }\n }\n function release() {\n size++;\n if (!queue.isEmpty()) {\n var next = queue.shift();\n next.resolve(run(next.fn, next.self, next.args));\n }\n }\n if (typeof size === 'function') {\n var temp = fn;\n fn = size;\n size = temp;\n }\n if (typeof size !== 'number') {\n throw new TypeError(\n 'Expected throat size to be a number but got ' + typeof size\n );\n }\n if (fn !== undefined && typeof fn !== 'function') {\n throw new TypeError(\n 'Expected throat fn to be a function but got ' + typeof fn\n );\n }\n if (typeof fn === 'function') {\n return function () {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n return run(fn, this, args);\n };\n } else {\n return function (fn) {\n if (typeof fn !== 'function') {\n throw new TypeError(\n 'Expected throat fn to be a function but got ' + typeof fn\n );\n }\n var args = [];\n for (var i = 1; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n return run(fn, this, args);\n };\n }\n }\n if (arguments.length === 1 && typeof PromiseArgument === 'function') {\n Promise = PromiseArgument;\n return throat;\n } else {\n Promise = module.exports.Promise;\n if (typeof Promise !== 'function') {\n throw new Error(\n 'You must provide a Promise polyfill for this library to work in older environments'\n );\n }\n return throat(arguments[0], arguments[1]);\n }\n};\n\n/* istanbul ignore next */\nif (typeof Promise === 'function') {\n module.exports.Promise = Promise;\n}\n\nfunction Delayed(resolve, fn, self, args) {\n this.resolve = resolve;\n this.fn = fn;\n this.self = self || null;\n this.args = args;\n}\n\nfunction Queue() {\n this._s1 = [];\n this._s2 = [];\n}\n\nQueue.prototype.push = function (value) {\n this._s1.push(value);\n};\n\nQueue.prototype.shift = function () {\n if (!this._s2.length) {\n while (this._s1.length) {\n this._s2.push(this._s1.pop());\n }\n }\n return this._s2.pop();\n};\n\nQueue.prototype.isEmpty = function () {\n return !this._s1.length && !this._s2.length;\n};\n});\n\n/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\nvar MAX_SAFE_INTEGER = 9007199254740991;\nvar MAX_INTEGER = 1.7976931348623157e+308;\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\nvar genTag = '[object GeneratorFunction]';\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil;\nvar nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject$5(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction$5(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction$5(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject$5(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject$5(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject$5(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject$5(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range$1 = createRange();\n\nvar index$6 = range$1;\n\n/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN$1 = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag$1 = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim$1 = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex$1 = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary$1 = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal$1 = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt$1 = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto$1 = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString$1 = objectProto$1.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax$1 = Math.max;\nvar nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber$1(wait) || 0;\n if (isObject$6(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax$1(toNumber$1(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject$6(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject$6(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike$1(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol$1(value) {\n return typeof value == 'symbol' ||\n (isObjectLike$1(value) && objectToString$1.call(value) == symbolTag$1);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber$1(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol$1(value)) {\n return NAN$1;\n }\n if (isObject$6(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject$6(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim$1, '');\n var isBinary = reIsBinary$1.test(value);\n return (isBinary || reIsOctal$1.test(value))\n ? freeParseInt$1(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex$1.test(value) ? NAN$1 : +value);\n}\n\nvar index$7 = throttle;\n\n/* eslint-disable max-len, no-param-reassign, no-shadow */\nvar MIN_CHUNK_SIZE = 32 * 1024;\n\n/* Global helpers */\nvar log$1 = logger.context('api-client');\nvar https = function https(url) {\n return 'https://' + url;\n};\nvar getLocationURL = function getLocationURL(url) {\n return url && https(url);\n};\nvar getName = function getName(file) {\n return file.customName || file.name;\n};\n\n/**\n * Is file?\n * @param {File} file\n * @return {Boolean}\n */\nvar isFile = function isFile(file) {\n return file.toString() === '[object File]';\n};\n\n/**\n * Is blob?\n * @param {Blob} blob\n * @returns {Boolean}\n */\nvar isBlob = function isBlob(blob) {\n return isFile(blob) || blob.toString() === '[object Blob]';\n};\n\n/**\n * Convert encoded base64 string or dataURI to blob\n * @param b64data {b64data} - String to decode\n * @param sliceSize {sliceSize} - Byte quantity to split data into\n * @returns {Blob}\n */\nvar b64toBlob = function b64toBlob(b64Data) {\n var sliceSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 512;\n\n var byteString = void 0;\n var contentType = '';\n if (b64Data.split(',')[0].indexOf('base64') >= 0) {\n byteString = b64Data.split(',')[1];\n }\n if (byteString !== undefined) {\n contentType = b64Data.split(',')[0].split(':')[1].split(';')[0];\n b64Data = decodeURI(byteString);\n }\n var byteCharacters = atob(b64Data);\n var byteArrays = [];\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n var slice = byteCharacters.slice(offset, offset + sliceSize);\n var byteNumbers = new Array(slice.length);\n for (var i = 0; i < slice.length; i += 1) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n var byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n var blob = new Blob(byteArrays, { type: contentType });\n return blob;\n};\n\n/**\n * ------------------------------------------------------------\n * Filestack Multipart Upload Flow\n * https://github.com/filepicker/filestack-uploads/\n * ------------------------------------------------------------\n */\n\n/**\n * Get start and end for slice operations\n * @param file {File} - Valid File instance\n * @param partNumber {number} - Current part number being uploaded\n * @param config {object} - Upload config\n * @returns {object} Keys are `start` and `end`\n */\nvar getRange = function getRange(file, partNumber, cfg) {\n var start = partNumber * cfg.partSize;\n var end = Math.min(start + cfg.partSize, file.size);\n return { start: start, end: end };\n};\n\n/**\n * Slice file into a single part\n * @param file {File} - Valid File instance\n * @param partNumber {number} - Current part number being uploaded\n * @param config {object} - Upload config\n * @returns {Blob}\n */\nvar sliceFile = function sliceFile(file, partNumber, cfg) {\n var slice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\n var _getRange = getRange(file, partNumber, cfg),\n start = _getRange.start,\n end = _getRange.end;\n\n return slice.call(file, start, end);\n};\n\n/**\n * Slice a part into smaller chunks\n * @param part {object} - Part buffer to slice.\n * @param size {object} - Size of slices.\n * @returns {array} - List of chunks.\n */\nvar slicePartIntoChunks = function slicePartIntoChunks(part, size) {\n var offset = 0;\n var chunks = [];\n var slice = ArrayBuffer.prototype.slice;\n while (offset < part.size) {\n var buf = slice.call(part.buffer, offset, offset + size);\n var chunk = { buf: buf, offset: offset, size: buf.byteLength, part: part };\n chunks.push(chunk);\n offset += size;\n }\n return chunks;\n};\n\n/**\n * Reads file as ArrayBuffer using HTML5 FileReader implementation\n * @param file {File} - Valid File instance\n * @returns {Promise}\n * @resolve {object} - Load event\n * @reject {error} - Error event\n */\nvar readFile = function readFile(file) {\n return new Promise(function (resolve, reject) {\n var reader = void 0;\n if (window.File && window.FileReader && window.Blob) {\n reader = new FileReader();\n } else {\n reject(new Error('The File APIs are not fully supported by your browser'));\n }\n reader.onloadend = resolve;\n reader.onerror = reject;\n reader.readAsArrayBuffer(file);\n });\n};\n\n/**\n * Calculates a MD5 checksum for passed buffer\n * @param data {ArrayBuffer} - Data to be hashed\n * @returns {string} base64 encoded MD5 hash\n */\nvar calcMD5 = function calcMD5(data) {\n return window.btoa(sparkMd5.ArrayBuffer.hash(data, true));\n};\n\n/**\n * Generates FormData instance for all requests\n * @param fields {object} - Object containing form data keys\n * @param config {object} - Upload config\n * @returns {FormData}\n */\nvar getFormData = function getFormData(fields, cfg) {\n var fd = new FormData();\n Object.keys(fields).forEach(function (key) {\n fd.append(key, fields[key]);\n });\n Object.keys(cfg.store).forEach(function (key) {\n fd.append(key, cfg.store[key]);\n });\n return fd;\n};\n\n/**\n * Starts the multi-part upload flow (/start)\n * @param file {File} - Valid File instance\n * @param config {object} - Upload config\n * @returns {Promise}\n * @resolve {object} - Superagent response object\n * @reject {error} - Superagent error object\n */\nvar start = function start(file, cfg) {\n var fields = {\n apikey: cfg.apikey,\n filename: getName(file),\n // TODO Find a better way to determine default\n mimetype: file.type || 'application/octet-stream',\n size: file.size\n };\n // Security\n if (cfg.policy && cfg.signature) {\n fields.policy = cfg.policy;\n fields.signature = cfg.signature;\n }\n // Intelligent Ingestion\n if (cfg.intelligent) {\n fields.multipart = true;\n }\n var formData = getFormData(fields, cfg);\n return requestWithSource('post', cfg.host + '/multipart/start').send(formData);\n};\n\n/**\n * Gets the S3 upload params for current part (/upload)\n * @param startParams {object} - Parameters returned from start call\n * @param partNumber {number} - Current part number (1 - 10000)\n * @param size {number} - Size of current part in bytes\n * @param md5 {string} - MD5 hash of part\n * @param config {object} - Upload config\n * @returns {Promise}\n * @resolve {object} - Superagent response object\n * @reject {error} - Superagent error object\n */\nvar getS3PartData = function getS3PartData(startParams, partNumber, size, md5, cfg, offset) {\n var host = cfg.debug ? cfg.host : getLocationURL(startParams.location_url) || cfg.host;\n var locationRegion = startParams.location_region;\n var fields = _extends({\n apikey: cfg.apikey,\n part: partNumber,\n size: size,\n md5: md5\n }, startParams);\n // Intelligent Ingestion\n if (cfg.intelligent) {\n fields.multipart = true;\n fields.offset = offset;\n }\n var formData = getFormData(fields, cfg);\n return requestWithSource('post', host + '/multipart/upload').set('Filestack-Upload-Region', locationRegion).send(formData);\n};\n\n/**\n * Uploads bytes directly to S3 with HTTP PUT\n * @param part {Uint8Array} - Current actual part/chunk\n * @param params {object} - Params for this part returned by getS3PartData response\n * @param onProgress {function} - A function to be called on progress event for this part\n * @returns {Promise}\n * @resolve {object} - Superagent response object\n * @reject {error} - Superagent error object\n */\nvar uploadToS3 = function uploadToS3(part, params, onProgress, cfg) {\n var host = cfg.fakeS3 ? cfg.host + '/fakeS3' : params.url;\n var req = client$1.put(host).set(params.headers).send(part);\n // Don't call progress handler if user didn't specify a callback\n if (onProgress) {\n return req.on('progress', onProgress);\n }\n return req;\n};\n\n/**\n * Get chunk (of part) metadata and PUT chunk to S3\n * @param chunk {object} - Chunk object, has offset information\n * @param startParams {object} - Parameters returned from start call\n * @param config {object} - Upload config\n * @returns {Promise}\n * @resolve {object} - Superagent response object\n * @reject {error} - Superagent error object\n */\nvar uploadChunk = function uploadChunk(chunk, startParams, cfg) {\n chunk.buf = new Uint8Array(chunk.buf);\n var md5 = calcMD5(chunk.buf);\n return getS3PartData(startParams, chunk.part.number + 1, chunk.size, md5, cfg, chunk.offset).then(function (res) {\n var onProgress = void 0;\n if (cfg.onProgress) {\n onProgress = index$7(function (evt) {\n if (evt.loaded > 0) {\n chunk.loaded = evt.loaded;\n }\n }, cfg.progressInterval);\n }\n delete res.xhr;\n delete res.req;\n chunk.request = uploadToS3(chunk.buf, res.body, onProgress, cfg);\n return chunk.request;\n }).then(function (res) {\n delete chunk.buf;\n delete chunk.request;\n delete res.req;\n delete res.xhr;\n return res;\n });\n};\n\n/**\n * Commits single part (/commit) for intelligent ingestion (only called after all chunks have been uploaded)\n * @param file {Blob} - File being uploaded\n * @param part {object} - Part object\n * @param startParams {object} - Parameters returned from start call\n * @param config {object} - Upload config\n * @returns {Promise}\n * @resolve {object} - Superagent response object\n * @reject {error} - Superagent error object\n */\nvar commitPart = function commitPart(file, part, startParams, cfg) {\n var host = cfg.debug ? cfg.host : getLocationURL(startParams.location_url) || cfg.host;\n var fields = _extends({\n apikey: cfg.apikey,\n part: part.number + 1,\n size: file.size\n }, startParams);\n var formData = getFormData(fields, cfg);\n return requestWithSource('post', host + '/multipart/commit').send(formData);\n};\n\n/**\n * Completes upload flow (/complete)\n * @param file {File} - File being uploaded\n * @param parts {array} - An array of etags collected from all uploadToS3 responses\n * @param startParams {object} - Parameters returned from start call\n * @param config {object} - Upload config\n * @returns {Promise}\n * @resolve {object} - Superagent response object\n * @reject {error} - Superagent error object\n */\nvar complete = function complete(file, parts, startParams, cfg) {\n var host = cfg.debug ? cfg.host : getLocationURL(startParams.location_url) || cfg.host;\n var locationRegion = startParams.location_region;\n var fields = _extends({\n apikey: cfg.apikey,\n size: file.size,\n filename: file.customName || file.name,\n // TODO Find a better way to determine default\n mimetype: file.type || 'application/octet-stream',\n parts: parts\n }, startParams);\n // Intelligent Ingestion\n if (cfg.intelligent) {\n fields.multipart = true;\n delete fields.parts;\n }\n var formData = getFormData(fields, cfg);\n return requestWithSource('post', host + '/multipart/complete').set('Filestack-Upload-Region', locationRegion).send(formData);\n};\n\n/**\n * Convert array of Etags into format for /complete call\n * @param etags {string[]} - Array of Etag strings\n * @returns {string}\n */\nvar formatETags = function formatETags(etags) {\n return etags.map(function (tag, idx) {\n return idx + 1 + ':' + tag;\n }).join(';');\n};\n\n/**\n * Entry point for multi-part upload flow\n * @param file {File} - File to upload\n * @param config {object} - Upload config\n * @param token {object} - Control token\n * @returns {Promise}\n * @resolve {object} - Superagent response object\n * @reject {error} - Superagent error object\n */\nvar uploadFile = function uploadFile(file, cfg, token) {\n log$1('calling upload with config:', cfg, 'file: ', file);\n\n // -----------------------------------------------------------------------\n // State\n // -----------------------------------------------------------------------\n\n // Constructor for part object\n var mkPart = function mkPart(num) {\n return {\n size: null,\n number: num,\n loaded: 0,\n request: null,\n chunks: []\n };\n };\n\n var state = {\n progressTick: null,\n paused: false,\n failed: false,\n done: false,\n retries: {},\n chunkSize: bowser.mobile ? 1 * 1024 * 1024 : 8 * 1024 * 1024\n };\n\n // Parts state (array of part/chunk objects)\n var totalParts = Math.ceil(file.size / cfg.partSize);\n var allParts = index$6(0, totalParts).map(mkPart);\n\n // -----------------------------------------------------------------------\n // Progress Reporting\n // -----------------------------------------------------------------------\n\n // TODO We can put whatever we want into the payload\n // TODO Add \"time until done\" ?\n\n // Helpers to calculate total progress across all parts\n var sumBytes = function sumBytes(bytes) {\n return bytes.reduce(function (a, b) {\n return a + b;\n }, 0);\n };\n var percentOfFile = function percentOfFile(bytes) {\n return Math.round(bytes / file.size * 100);\n };\n\n var startProgress = function startProgress() {\n if (cfg.onProgress) {\n state.progressTick = setInterval(function () {\n var loaded = cfg.intelligent ? allParts.map(function (p) {\n return p.chunks;\n }) // Get all chunks of part\n .reduce(function (a, b) {\n return a.concat(b);\n }, []) // Flat map\n .map(function (c) {\n return c.loaded;\n }) // Get each chunk's loaded bytes\n .filter(function (n) {\n return n;\n }) // Filter out empty values\n : allParts.map(function (p) {\n return p.loaded;\n });\n var totalBytes = sumBytes(loaded);\n var totalPercent = percentOfFile(totalBytes);\n var payload = {\n totalBytes: totalBytes,\n totalPercent: totalPercent\n };\n var prev = state.previousPayload || {};\n if (totalPercent === 100) {\n clearInterval(state.progressTick);\n return;\n }\n if (totalPercent < prev.totalPercent) {\n payload.totalBytes = prev.totalBytes;\n payload.totalPercent = prev.totalPercent;\n }\n cfg.onProgress(payload);\n state.previousPayload = payload;\n }, cfg.progressInterval);\n }\n };\n var finishProgress = function finishProgress() {\n if (cfg.onProgress) {\n var totalBytes = file.size;\n var totalPercent = 100;\n var payload = {\n totalBytes: totalBytes,\n totalPercent: totalPercent\n };\n cfg.onProgress(payload);\n clearInterval(state.progressTick);\n }\n };\n\n // -----------------------------------------------------------------------\n // Token handlers\n // -----------------------------------------------------------------------\n\n // Will also pause progress tick\n token.pause = function () {\n if (!state.failed && !state.done && !state.paused) {\n log$1('Upload flow paused');\n state.paused = true;\n clearInterval(state.progressTick);\n }\n };\n\n // Will resume flow and start progress tick again\n token.resume = function () {\n if (!state.failed && !state.done && state.paused) {\n log$1('Upload flow resumed');\n state.paused = false;\n startProgress();\n }\n if (state.paused && state.done) {\n state.paused = false;\n finishProgress();\n }\n };\n\n // Iterate over all parts and abort their requests\n var cancelAllRequests = function cancelAllRequests() {\n allParts.forEach(function (part) {\n if (part.request) part.request.abort();\n delete part.request;\n part.chunks.forEach(function (chunk) {\n if (chunk.request) chunk.request.abort();\n delete chunk.request;\n });\n });\n };\n\n /**\n * Used in conjuction with Promise.race wherever we need to cancel a Promise chain\n * @type {Promise}\n */\n var cancel = new Promise(function (resolve, reject) {\n // token.cancel will reject the Promise that wraps it\n // Because we use Promise.race throughout the flow,\n // this rejection will prevent those parts of the flow from resolving any further\n token.cancel = function () {\n if (!state.failed && !state.done) {\n // Clear progress\n clearInterval(state.progressTick);\n // Cancel any in-flight XHR\n cancelAllRequests();\n state.failed = true;\n reject(new Error('Upload cancelled'));\n }\n };\n });\n\n /**\n * Returns a Promise based on the flow state\n * If the flow is paused it will return a Promise that resolves when resumed\n * If the flow failed it will resolve harmlessly\n *\n * @param func {function} - function that returns a Promise\n * @returns {Promise}\n */\n var flowControl = function flowControl(func) {\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (state.failed) {\n return Promise.resolve();\n }\n if (state.paused) {\n return new Promise(function (resolve) {\n var check = function check() {\n if (state.paused) {\n setTimeout(function () {\n return check();\n }, 100);\n } else {\n resolve(func.apply(undefined, args));\n }\n };\n check();\n });\n }\n return func.apply(undefined, args);\n };\n };\n\n /**\n * Retries a function up to the retry limit. For intelligent ingestion it halves chunk size before retrying part\n * @param location {string} - A name for the function being retried\n * @param func {function} - The function to retry\n * @param err {error} - An Error whose message will be used if the retry limit is met.\n * @returns {Promise}\n * @resolve {function}\n * @reject {error}\n */\n var retry = function retry(location, func, err) {\n var attempt = state.retries[location] || 0;\n var promise = new Promise(function (resolve, reject) {\n // Reject if we hit the retry limit\n if (attempt === cfg.retry || state.failed || err.status === 400 || err.status === 401 || err.status === 403 || err.status === 404 || state.chunkSize === MIN_CHUNK_SIZE) {\n // Clear progress\n clearInterval(state.progressTick);\n state.failed = true;\n reject(new Error('Upload for ' + getName(file) + ' failed. ' + err.message));\n } else {\n // Add task to event queue\n setTimeout(function () {\n if (state.failed) {\n // Resolve instead of reject because if we're here then flow has already rejected\n resolve();\n } else if (cfg.intelligent && (err.crossDomain && err.method === 'PUT' || err.timeout)) {\n // The presence of err.crossDomain implies this is a network error (see https://github.com/visionmedia/superagent/issues/484)\n // The PUT also implies this is our direct to S3 request\n if (state.chunkSize === MIN_CHUNK_SIZE) {\n resolve();\n } else {\n // Network error during intelligent part upload -- half chunk size and retry part\n state.chunkSize /= 2;\n if (cfg.onRetry) {\n cfg.onRetry({\n location: location,\n parts: allParts,\n filename: getName(file),\n chunkSize: state.chunkSize\n });\n }\n resolve(func());\n }\n } else {\n // Increment retry count\n attempt += 1;\n state.retries[location] = attempt;\n if (cfg.onRetry) {\n cfg.onRetry({\n location: location,\n parts: allParts,\n filename: getName(file),\n attempt: attempt\n });\n }\n resolve(func());\n }\n }, Math.pow(cfg.retryFactor, attempt - 1) * 3000);\n }\n });\n return Promise.race([cancel, promise]);\n };\n\n /**\n * Job function for a single part\n * @param part {object} - part object (see mkPart)\n * @param startParams {object} - upload config\n * @returns {Promise}\n * @resolve {object} - Superagent response object\n * @reject {error}\n */\n var sliceAndUpload = function sliceAndUpload(part, startParams) {\n var getPart = readFile(sliceFile(file, part.number, cfg)).then(function (evt) {\n part.buffer = cfg.intelligent ? evt.target.result : new Uint8Array(evt.target.result);\n part.size = part.buffer.byteLength;\n // We should not be uploading empty chunks -- fail fast in this case\n if (part.size === 0) {\n state.failed = true;\n return Promise.reject(new Error('Upload aborted due to empty chunk.'));\n }\n return part;\n });\n\n // Handle intelligent ingestion flow -- parts get chunked into even smaller sizes\n if (cfg.intelligent) {\n return getPart.then(function (part) {\n var go = flowControl(function (chunk) {\n return uploadChunk(chunk, startParams, cfg);\n });\n part.chunks = slicePartIntoChunks(part, state.chunkSize);\n return Promise.race([cancel, Promise.all(part.chunks.map(index$5(cfg.concurrency, go)))]).then(function () {\n delete part.buffer;\n part.loaded = part.size;\n return commitPart(file, part, startParams, cfg);\n });\n });\n }\n\n return getPart.then(function (part) {\n var md5 = calcMD5(part.buffer);\n part.request = getS3PartData(startParams, part.number + 1, part.size, md5, cfg);\n return part.request;\n }).then(function (res) {\n var onProgress = void 0;\n if (cfg.onProgress) {\n onProgress = index$7(function (evt) {\n if (evt.loaded > 0) {\n part.loaded = evt.loaded;\n }\n }, cfg.progressInterval);\n }\n part.request = uploadToS3(part.buffer, res.body, onProgress, cfg);\n return part.request;\n }).then(function (res) {\n delete part.buffer;\n delete part.request;\n delete res.req;\n delete res.xhr;\n if (res.headers.etag === undefined) {\n state.failed = true;\n var msg = 'Response from S3 is missing ETag header. Please expose it in your bucket CORS config.';\n return Promise.reject(new Error(msg));\n }\n return res;\n });\n };\n\n var startFlow = function startFlow() {\n return start(file, cfg).catch(function (err) {\n return retry('start', startFlow, err);\n });\n };\n return Promise.race([cancel, startFlow()]).then(function (res) {\n var startParams = res.body;\n startProgress();\n var go = flowControl(function (part) {\n return sliceAndUpload(part, startParams).catch(function (err) {\n part.loaded = 0;\n part.chunks = [];\n return retry('upload part ' + (part.number + 1), function () {\n return go(part);\n }, err);\n });\n });\n\n // We map over allParts with throat, which takes in a limit and a function\n // throat returns a function that is an exact copy of the passed function,\n // except that it will only execute up to \"concurrency\" times in parallel before further requests are queued\n var partsFlow = Promise.all(allParts.map(index$5(cfg.concurrency, go)));\n\n return Promise.race([cancel, partsFlow]).then(function (results) {\n var etags = void 0;\n if (!cfg.intelligent) {\n etags = formatETags(results.map(function (res) {\n return res.headers && res.headers.etag;\n }));\n }\n var go = flowControl(function () {\n return complete(file, etags, startParams, cfg).then(function (res) {\n if (res.status === 202) {\n return new Promise(function (resolve) {\n setTimeout(function () {\n return resolve(go());\n }, 1000);\n });\n }\n state.done = true;\n if (!state.paused) finishProgress();\n return res.body;\n }).catch(function (err) {\n return retry('complete', go, err);\n });\n });\n return go();\n });\n });\n};\n\n/**\n * User facing method to upload a single file\n * @param session {object} - Session object that contains apikey\n * @param file {object} - A valid File, Blob, or base64 encoded string\n * @param options {object} - Configures the uploader\n * @param storeOptions {object} - Storage options for the backend\n * @param token {object} - Control token\n * @returns {Promise}\n * @resolve {object} - File metadata.\n * @reject {error}\n */\nvar upload = function upload(session, file) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var storeOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var token = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n if (typeof file === 'string') {\n file = b64toBlob(file);\n }\n if (!file || !isBlob(file)) {\n return Promise.reject(new TypeError('File parameter is not a valid Blob or File instance'));\n }\n if (file.size !== undefined && file.size === 0) {\n return Promise.reject(new Error('File has a size of 0.'));\n }\n var allowedOptions = [{ name: 'host', type: index.String }, { name: 'partSize', type: index.Number }, { name: 'concurrency', type: index.refinement(index.Integer, function (n) {\n return n > 0;\n }) }, { name: 'onProgress', type: index.Function }, { name: 'progressInterval', type: index.Integer }, { name: 'onRetry', type: index.Function }, { name: 'retry', type: index.Integer }, { name: 'retryFactor', type: index.Integer }, { name: 'debug', type: index.Bool }, { name: 'intelligent', type: index.Bool }, { name: 'fakeS3', type: index.Bool }];\n var allowedStoreOptions = [{ name: 'location', type: index.enums.of('s3 gcs rackspace azure dropbox') }, { name: 'region', type: index.String }, { name: 'path', type: index.String }, { name: 'container', type: index.String }, { name: 'filename', type: index.String }, { name: 'access', type: index.enums.of('public private') }];\n\n // Throw if any options are invalid\n checkOptions('upload (options)', allowedOptions, options);\n checkOptions('upload (storeOptions)', allowedStoreOptions, storeOptions);\n\n // Custom filename option\n if (storeOptions.filename) {\n file.customName = storeOptions.filename;\n } else if (file.name === undefined) {\n // Blobs don't have names, Files do. Give a placeholder name for blobs.\n if (file.type) {\n var ext = file.type.split('/').pop();\n file.customName = 'untitled.' + ext;\n } else {\n file.customName = 'untitled';\n }\n }\n // We don't actually use filename as a real param. Just makes sense for it to live in the store options.\n // Remove it so we don't pass it as a param.\n delete storeOptions.filename;\n\n // Default location param\n if (storeOptions.location === undefined) {\n storeOptions.location = 's3';\n }\n\n // Intelligent Ingestion requires part size of exactly 8MB\n if (options.intelligent) {\n options.partSize = 8 * 1024 * 1024;\n }\n\n // Convert store options to format expected by API (snake_case prefixed with 'store')\n var snakeOpts = snakeKeys(storeOptions, 'store');\n\n // Configurables\n var config = _extends({\n host: session.urls.uploadApiUrl,\n apikey: session.apikey,\n policy: session.policy,\n signature: session.signature,\n partSize: 6 * 1024 * 1024,\n concurrency: 3,\n onProgress: null,\n progressInterval: 1000,\n onRetry: null,\n retry: 5,\n retryFactor: 2,\n store: snakeOpts,\n debug: false\n }, options);\n\n return uploadFile(file, config, token);\n};\n\n/* eslint-disable max-len */\n/**\n * @module filestack\n */\n\n/**\n * @typedef TransformOptions {object}\n * @param crop {object} - [Crop options.](https://www.filestack.com/docs/image-transformations/crop)\n * @param crop.dim {object} - Crop dimensions.\n * @param crop.dim.x {number}\n * @param crop.dim.y {number}\n * @param crop.dim.width {number}\n * @param crop.dim.height {number}\n * @param resize {object} - [Resize options.](https://www.filestack.com/docs/image-transformations/resize) At least one option is __required__.\n * @param resize.width {number}\n * @param resize.height {number}\n * @param resize.fit {string} - One of `clip`, `crop`, `scale`, `max`.\n * @param resize.align {string} - One of `center`, `top`, `bottom`, `left`, `right`, `faces`, or align pair like `['top', 'left']`.\n * @param rotate {object} - [Rotate options](https://www.filestack.com/docs/image-transformations/rotate). At least one option is __required__.\n * @param rotate.deg {number|string} - Can be number in range 0-359 or `exif`.\n * @param rotate.exif {boolean}\n * @param rotate.background {string}\n * @param flip {boolean} - [Flip](https://www.filestack.com/docs/image-transformations/rotate#flip) image\n * @param flop {boolean} - [Flop](https://www.filestack.com/docs/image-transformations/rotate#flop) image\n * @param roundedCorners {object} - [Rounded corners options.](https://www.filestack.com/docs/image-transformations/borders-and-effects#rounded-corners)\n * @param roundedCorners.radius {number|string} - Can be number in range 1-10000 or `max`.\n * @param roundedCorners.blur {number}\n * @param roundedCorners.background {string}\n * @param vignette {object} - [Vignette options.](https://www.filestack.com/docs/image-transformations/borders-and-effects#vignette)\n * @param vignette.amount {number}\n * @param vignette.blurmode {string} - One of `linear` or `gaussian`.\n * @param vignette.background {string}\n * @param polaroid {object} - [Polaroid options.](https://www.filestack.com/docs/image-transformations/borders-and-effects#polaroid)\n * @param polaroid.color {string}\n * @param polaroid.rotate {number}\n * @param polaroid.background {string}\n * @param tornEdges {object} - [Torn edges options.](https://www.filestack.com/docs/image-transformations/borders-and-effects#torn-edges)\n * @param tornEdges.spread {number[]} - Range format `[10, 50]`.\n * @param tornEdges.background {string}\n * @param shadow {object} - [Shadow options.](https://www.filestack.com/docs/image-transformations/borders-and-effects#shadow)\n * @param shadow.blur {number}\n * @param shadow.opacity {number}\n * @param shadow.vector {number[]} - Range format `[25, 25]`.\n * @param shadow.color {string}\n * @param shadow.background {string}\n * @param circle {object} - [Circle options.](https://www.filestack.com/docs/image-transformations/borders-and-effects#circle)\n * @param circle.background {string}\n * @param border {object} - [Border options.](https://www.filestack.com/docs/image-transformations/borders-and-effects#border)\n * @param border.width {number}\n * @param border.color {number}\n * @param border.background {number}\n * @param monochrome {boolean} - [Monochrome.](https://www.filestack.com/docs/image-transformations/filters#monochrome)\n * @param sepia {object} - [Sepia.](https://www.filestack.com/docs/image-transformations/filters#sepia)\n * @param sepia.tone {number}\n * @param output {object} - [Output options.](https://www.filestack.com/docs/image-transformations/conversion)\n * @param output.format {string}\n * @param output.background {string}\n * @param output.page {number[]} - Range format `[1, 10000]`.\n * @param output.density {number[]} - Range format `[1, 500]`.\n * @param output.compress {boolean}\n * @param output.quality {number|string} - Can be number in range 1-100 or `input`.\n * @param output.input {boolean}\n * @param output.strip {boolean}\n * @param output.colorspace {string} - One of `rgb` or `cmyk` or `input`.\n * @param output.secure {boolean}\n * @param output.docinfo {boolean}\n * @param output.pageformat {string} - One of `a3` or `a4` or `a5` or `b4` or `b5` or `letter` or `legal` or `tabloid`.\n * @param output.pageorientation {string} - One of `landscape` or `portrait`.\n */\n\n/**\n * @callback progressCallback\n * @param event {object} - Progress event.\n * @param event.totalPercent {number} - Percent of total file upload progress.\n * @param event.totalBytes {number} - Total number of bytes uploaded thus far across all parts.\n */\n\n/**\n * @callback retryCallback\n * @param retry {object} - Retry information object.\n * @param retry.location {string} - Which part of the flow is being retried.\n * @param retry.parts {object[]} - Array of current parts at this point in the flow.\n * @param retry.filename {string} - Name of the file being retried.\n * @param retry.attempt {number} - Current attempt.\n */\n\n/**\n * Initializes the client.\n * @alias module:filestack~init\n * @typicalname client\n * @param apikey {string} - Filestack API key. Get a free key [here](https://dev.filestack.com/register/free).\n * @param [security] {object} - Read about [security policies](https://www.filestack.com/docs/security).\n * @param security.policy {string} - Filestack security policy encoded in base64.\n * @param security.signature {string} - HMAC-SHA256 sIgnature for the security policy.\n * @param [cname] {string} - Custom domain to use for all URLs. This requires the custom CNAME feature on your Filestack app.\n * @returns {object} Object containing the available methods documented below.\n * @example\n *\n * import apiClient from 'api-client';\n * const client = apiClient.init('apikey');\n */\nvar init = function init(apikey, security, cname) {\n if (!apikey || typeof apikey !== 'string') {\n throw new Error('apikey is required to initialize the Filestack client');\n }\n\n var getUrls = function getUrls() {\n var urls = ENV;\n if (cname) {\n Object.keys(ENV).forEach(function (key) {\n urls[key] = ENV[key].replace('filestackapi.com', cname);\n });\n }\n return urls;\n };\n\n var session = _extends({}, security, { apikey: apikey, urls: getUrls() });\n\n return {\n /**\n * Get current security parameters\n * @memberof module:filestack~init\n * @returns {object} Object containing current security parameters\n */\n getSecurity: function getSecurity() {\n return {\n policy: session.policy,\n signature: session.signature\n };\n },\n /**\n * Set security parameters -- useful for changing policy on instantiated client\n * @memberof module:filestack~init\n * @param security {object} - Read about [security policies](https://www.filestack.com/docs/security).\n * @param security.policy {string} - Filestack security policy encoded in base64.\n * @param security.signature {string} - HMAC-SHA256 sIgnature for the security policy.\n * @returns {object} Object containing current session parameters\n *\n * @example\n *\n * client.setSecurity({ policy: 'policy', signature: 'signature' });\n */\n setSecurity: function setSecurity(sec) {\n if (sec && !(sec.policy && sec.signature)) {\n throw new Error('signature and policy are both required for security');\n }\n session.policy = sec.policy;\n session.signature = sec.signature;\n return session;\n },\n\n /**\n * Interface to the Filestack [Store API](https://www.filestack.com/docs/rest-api/store). Used for storing from a URL.\n * @memberof module:filestack~init\n * @param url {string} - Valid URL to a file.\n * @param [options] {object}\n * @param options.filename {string}\n * @param options.location=s3 {string} - One of `s3`, `gcs`, `rackspace`, `azure`, `dropbox`.\n * @param options.mimetype {string}\n * @param options.path {string}\n * @param options.container {string}\n * @param options.region {string} - Valid S3 region for the selected container (S3 only).\n * @param options.access {string} - One of `public` or `private`.\n * @returns {Promise}\n * @resolve {object} - Metadata of stored file.\n * @reject {error} - A Superagent error object.\n *\n * @example\n *\n * client\n * .storeURL('https://d1wtqaffaaj63z.cloudfront.net/images/NY_199_E_of_Hammertown_2014.jpg')\n * .then(res => console.log(res));\n */\n storeURL: function storeURL$$1(url, uploadOptions, token) {\n return storeURL(session, url, uploadOptions, token);\n },\n\n /**\n * Interface to the Filestack [Retrieve API](https://www.filestack.com/docs/rest-api/retrieve).\n * Used for accessing files via Filestack handles.\n * @memberof module:filestack~init\n * @param handle {string} - Valid Filestack handle.\n * @param [options] {object}\n * @param options.metadata {boolean} - return json of file metadata\n * @param options.head {boolean} - perform a 'head' request instead of a 'get'\n * @param options.dl {boolean} - X-File-Name will be returned\n * @param options.extension {string} - add extension to handle\n * @returns {Promise}\n * @resolve {object} - Metadata of stored file or stored file, depending on metadata / head option.\n * @reject {error} - A Superagent error object.\n *\n * @example\n *\n * client\n * .retrieve('DCL5K46FS3OIxb5iuKby')\n * .then((blob) => {\n * var urlCreator = window.URL || window.webkitURL;\n * var imageUrl = urlCreator.createObjectURL(blob);\n * document.querySelector('#myImage').src = imageUrl;\n * })\n * .catch((err) => {\n * console.log(err);\n * }));\n */\n retrieve: function retrieve$$1(handle, uploadOptions) {\n return retrieve(session, handle, uploadOptions);\n },\n\n /**\n * Interface to the Filestack [Remove API](https://www.filestack.com/docs/rest-api/remove).\n * Used for removing files, __requires security to be enabled__.\n * @memberof module:filestack~init\n * @param handle {string} - Valid Filestack handle.\n * @returns {Promise}\n * @resolve {object} - Result of remove.\n * @reject {error} - A Superagent error object.\n *\n * @example\n *\n * client\n * .remove('DCL5K46FS3OIxb5iuKby')\n * .then((res) => {\n * console.log(res);\n * })\n * .catch((err) => {\n * console.log(err);\n * }));\n */\n remove: function remove$$1(handle, options) {\n return remove(session, handle, options);\n },\n\n /**\n * Interface to the Filestack [Write API](https://www.filestack.com/docs/rest-api/write).\n * Used for overwriting files, __requires security to be enabled__.\n * @memberof module:filestack~init\n * @param handle {string} - Valid Filestack handle.\n * @returns {Promise}\n * @resolve {object} - Result of overwrite.\n * @reject {error} - A Superagent error object.\n *\n * @example\n *\n * client\n * .overwrite('DCL5K46FS3OIxb5iuKby')\n * .then((res) => {\n * console.log(res);\n * })\n * .catch((err) => {\n * console.log(err);\n * }));\n */\n overwrite: function overwrite$$1(handle, options) {\n return overwrite(session, handle, options);\n },\n\n /**\n * Interface to the Filestack [Metadata API](https://www.filestack.com/docs/rest-api/meta-data).\n * Used for retrieving detailed data of stored files.\n * @memberof module:filestack~init\n * @param handle {string} - Valid Filestack handle.\n * @param [options] {object}\n * @param options.size {boolean}\n * @param options.mimetype {boolean}\n * @param options.filename {boolean}\n * @param options.width {boolean}\n * @param options.height {boolean}\n * @param options.uploaded {boolean}\n * @param options.writeable {boolean}\n * @param options.cloud {boolean}\n * @param options.sourceUrl {boolean}\n * @param options.md1 {boolean}\n * @param options.sha1 {boolean}\n * @param options.sha224 {boolean}\n * @param options.sha256 {boolean}\n * @param options.sha384 {boolean}\n * @param options.sha512 {boolean}\n * @param options.location {boolean}\n * @param options.path {boolean}\n * @param options.container {boolean}\n * @param options.exif {boolean}\n * @returns {Promise}\n * @resolve {object} - Result of metadata.\n * @reject {error} - A Superagent error object.\n *\n * @example\n *\n * client\n * .metadata('DCL5K46FS3OIxb5iuKby')\n * .then((res) => {\n * console.log(res);\n * })\n * .catch((err) => {\n * console.log(err);\n * }));\n */\n metadata: function metadata$$1(handle, options) {\n return metadata(session, handle, options);\n },\n\n /**\n * Interface to the Filestack [transformation engine](https://www.filestack.com/docs/image-transformations).\n * @memberof module:filestack~init\n * @param url {string} - Valid URL to an image.\n * @param options {module:filestack~TransformOptions} - Transformations are applied in the order specified by this object.\n * @returns {string} A new URL that points to the transformed resource.\n * @example\n *\n * const transformedUrl = client.transform(url, {\n * crop: {\n * dim: {\n * x: 0,\n * y: 50,\n * width: 300,\n * height: 300,\n * },\n * },\n * vignette: {\n * blurmode: 'gaussian',\n * amount: 50,\n * },\n * flip: true,\n * };\n *\n * // optionally store the new URL\n * client.storeURL(transformedUrl).then(res => console.log(res));\n */\n transform: function transform$$1(url, options) {\n return transform(session, url, options);\n },\n\n /**\n * Initiates a multi-part upload flow.\n * @memberof module:filestack~init\n * @param file {Blob|string} - must be a valid [File](https://developer.mozilla.org/en-US/docs/Web/API/File), Blob, or base64 encoded string.\n * @param [uploadOptions] {object}\n * @param [uploadOptions.partSize=6 * 1024 * 1024] {number} - Size of each uploaded part. This is overridden when intelligent ingestion is enabled.\n * @param [uploadOptions.concurrency=3] {number} - Max number of concurrent parts uploading.\n * @param [uploadOptions.intelligent] {boolean} - Enable/disable intelligent ingestion. If true then intelligent ingestion must be enabled in your Filestack application.\n * @param [uploadOptions.retry=5] {number} - Number of times to retry a failed part of the flow.\n * @param [uploadOptions.retryFactor=2] {number} - Base factor for exponential backoff.\n * @param [uploadOptions.progressInterval=1000] {number} - Frequency (in milliseconds) at which progress events are dispatched.\n * @param [uploadOptions.onProgress] {module:filestack~progressCallback} - Called regularly to give progress updates.\n * @param [uploadOptions.onRetry] {module:filestack~retryCallback} - Called when a retry is initiated.\n * @param [storeOptions] {object} - Configure where the file is stored.\n * @param [storeOptions.filename] {string} - Define a custom filename for the Blob/File being uploaded.\n * @param [storeOptions.location=s3] {string} - Valid options are: `s3`, `gcs`, `dropbox`, `azure`, `rackspace`.\n * @param [storeOptions.region] {string} - Valid S3 region for the selected container (S3 only).\n * @param [storeOptions.container] {string} - Name of the storage container.\n * @param [storeOptions.path] {string} - Path where the file will be stored. A trailing slash will put the file in that folder path.\n * @param [storeOptions.access] {string} - Valid options are `private` or `public`.\n * @param [token] {object} - A control token that can be used to call cancel(), pause(), and resume().\n *\n * @returns {Promise}\n * @resolve {object} - Metadata of uploaded file.\n * @reject {error} - An Error object depending on where the flow halted.\n * @example\n *\n * const token = {};\n * const onRetry = (obj) => {\n * console.log(`Retrying ${obj.location} for ${obj.filename}. Attempt ${obj.attempt} of 10.`);\n * };\n *\n * client.upload(file, { onRetry }, { filename: 'foobar.jpg' }, token)\n * .then(res => console.log(res));\n *\n * token.pause(); // Pause flow\n * token.resume(); // Resume flow\n * token.cancel(); // Cancel flow (rejects)\n */\n upload: function upload$$1(file, options, storeOptions, token) {\n return upload(session, file, options, storeOptions, token);\n },\n\n /**\n * Fetches application profile information. (Internal only).\n * @ignore\n * @memberof module:filestack~init\n * @returns {Promise}\n * @resolve {object} - Application data.\n * @reject {error}\n */\n prefetch: function prefetch$$1() {\n return prefetch(session);\n },\n\n /**\n * Initializes a CloudRouter client. (Internal only).\n * @ignore\n * @memberof module:filestack~init\n * @param name {string} - Name of cloud source, e.g. `dropbox`, `imagesearch`.\n */\n cloud: function cloud() {\n return _cloud(session);\n }\n };\n};\n\nvar client = {\n /**\n * Gets current version.\n *\n * @alias module:filestack~version\n * @static\n * @returns {string}\n * @example\n *\n * import apiClient from 'api-client';\n * console.log(apiClient.version);\n */\n version: '0.5.5',\n init: init\n};\n\nexport default client;\n//# sourceMappingURL=api-client.es2015.js.map\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n// -----------------------------------------------------------------------------\n// Init\n\nvar initializeGlobalNamespace = function initializeGlobalNamespace() {\n var namespace = void 0;\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object') {\n namespace = window.filestackInternals;\n if (!namespace) {\n namespace = {};\n window.filestackInternals = namespace;\n }\n if (!namespace.loader) {\n namespace.loader = {\n modules: {}\n };\n }\n }\n return namespace;\n};\n\nvar filestackInternals = initializeGlobalNamespace();\n\n// -----------------------------------------------------------------------------\n// Modules loading\n\n// All modules share global \"register\", so different instances of loader can\n// communicate which modules were already loaded and which not.\nvar modules = filestackInternals && filestackInternals.loader.modules;\n\nvar loadModule = function loadModule(url) {\n var moduleDefinition = modules[url];\n if (!moduleDefinition) {\n modules[url] = {};\n moduleDefinition = modules[url];\n }\n\n if (moduleDefinition.instance) {\n return Promise.resolve(moduleDefinition.instance);\n }\n\n if (moduleDefinition.promise) {\n return moduleDefinition.promise;\n }\n\n var promise = new Promise(function (resolve) {\n var embedScript = function embedScript() {\n moduleDefinition.resolvePromise = resolve;\n var script = document.createElement('script');\n script.src = url;\n document.body.appendChild(script);\n };\n\n var checkIfDomReady = function checkIfDomReady() {\n if (document.readyState === 'complete') {\n embedScript();\n } else {\n setTimeout(checkIfDomReady, 50);\n }\n };\n\n checkIfDomReady();\n });\n\n moduleDefinition.promise = promise;\n\n return promise;\n};\n\nvar registerReadyModule = function registerReadyModule(instance) {\n var scriptTags = document.getElementsByTagName('script');\n var thisScript = scriptTags[scriptTags.length - 1];\n var url = thisScript.getAttribute('src');\n var moduleDefinition = modules[url];\n if (moduleDefinition.resolvePromise) {\n moduleDefinition.instance = instance;\n moduleDefinition.resolvePromise(instance);\n delete moduleDefinition.promise;\n delete moduleDefinition.resolvePromise;\n }\n};\n\n// -----------------------------------------------------------------------------\n// CSS loading\n\nvar loadCss = function loadCss(url) {\n var alreadyAddedThisTag = document.querySelector('link[href=\"' + url + '\"]');\n if (alreadyAddedThisTag !== null) {\n return Promise.resolve();\n }\n\n return new Promise(function (resolve) {\n var head = document.getElementsByTagName('head')[0];\n var link = document.createElement('link');\n\n var loaded = function loaded() {\n resolve();\n link.removeEventListener('load', loaded);\n };\n\n link.rel = 'stylesheet';\n link.href = url;\n link.addEventListener('load', loaded);\n head.appendChild(link);\n });\n};\n\nvar index = {\n registerReadyModule: registerReadyModule,\n loadModule: loadModule,\n loadCss: loadCss\n};\n\nexport default index;\n//# sourceMappingURL=loader.es2015.js.map\n","import apiClient from 'api-client';\nimport loader from 'loader';\n\nconst init = (apikey, security, cname) => {\n const client = apiClient.init(apikey, security, cname);\n return {\n getSecurity() {\n return client.getSecurity();\n },\n setSecurity(sec) {\n return client.setSecurity(sec);\n },\n pick(options) {\n return loader.loadModule(ENV.picker)\n .then((pickerConstructor) => {\n return pickerConstructor(client, options);\n });\n },\n storeURL(url, options) {\n return client.storeURL(url, options);\n },\n transform(url, options) {\n return client.transform(url, options);\n },\n upload(file, uploadOptions, storeOptions, token) {\n return client.upload(file, uploadOptions, storeOptions, token);\n },\n retrieve(handle, options) {\n return client.retrieve(handle, options);\n },\n remove(handle) {\n return client.remove(handle);\n },\n metadata(handle, options) {\n return client.metadata(handle, options);\n },\n };\n};\n\nexport default {\n version: '@{VERSION}',\n init,\n};\n"],"names":["ENV","storeApiUrl","fileApiUrl","uploadApiUrl","cloudApiUrl","processApiUrl","isFunction","x","isNil","fail","message","TypeError","getFunctionName","f","displayName","name","length","replacer","key","value","stringify$1","stringify","JSON","e","String","assert","guard","assert_1","isString","isArray","Array","isObject","isType","meta","getTypeName","ctor","irreducible","predicate","Irreducible","path","kind","identity","is","Any","_Array","isBoolean","_Boolean","_Date","Date","_Error","Error","_Function","Nil","isNumber","isFinite","isNaN","_Number","isIdentity","type","create","getDefaultName","refinement","Refinement","update","instance","patch","refinement_1","Integer","_Object","_RegExp","RegExp","_String","Type","getDefaultName$1","domain","codomain","dict","domainNameCache","codomainNameCache","Dict","idempotent","ret","k","hasOwnProperty","actual","dict_1","mixin","target","source","overwrite","isUnion","nextDeclareUniqueId","declare","Declare","define","spec","dispatch","prototype","getDefaultName$2","map","Object","keys","join","enums","Enums","of","split","forEach","enums_1","getDefaultName$3","list","typeNameCache","List","i","len","push","every","list_1","isMaybe","getDefaultName$4","maybe","Maybe","maybe_1","getDefaultInterfaceName","props","prop","getDefaultInterfaceName_1","isRefinement","getPredicates","concat","getUnrefinedType","decompose","predicates","unrefinedType","decompose_1","compose","reduce","getProps","getDefaultProps","defaultProps","pushAll","arr","elements","apply","extend","combinator","mixins","options","decomposition","getOptions","result","extend_1","getDefaultName$5","extendStruct","struct","strict","Struct","this","expected","undefined","xs","struct_1","getDefaultName$6","types","tuple","Tuple","tuple_1","getDefaultName$7","union","Union","some","t","union_1","getDefaultName$8","isInstrumented","instrumentation","getOptionalArgumentsIndex","end","areAllMaybes","func","domainLength","optionalArgumentsIndex","FuncType","curried","fn","args","slice","call","arguments","argsLength","g","Function","bind","newDomain","func_1","isIdentity$3","getDefaultName$9","intersection","Intersection","intersection_1","assign","y","assign_1","extendInterface","inter","getOptions$1","Interface","_interface","getShallowCopy","isCommand","commands","getCommand","isChanged","newValue","$apply","$push","$remove","obj","$set","$splice","splices","acc","splice","$swap","config","from","to","element","$unshift","$merge","whatToMerge","update_1","match","count","Boolean","Number","IntegerT","TypeT","Arr","Bool","Dat","Err","Func","Num","Obj","Re","Str","subtype","index$1","noobj","ValidationError","getDefaultValidationErrorMessage","expectedName","getValidationErrorMessage","context","ValidationResult","errors","isValid","firstError","toString","err","validate","recurse","validators","es6classes","validateES6Classes","validateIrreducible","validateList","item","validateSubtype","validateMaybe","validateStruct","field","validateTuple","validateDict","subpath","validateUnion","indexOf","validateIntersection","nrOfStructs","validateInterface","index","commonjsGlobal","window","global","self","createCommonjsModule","module","exports","index$3","Emitter","on","addEventListener","event","_callbacks","once","off","removeListener","removeAllListeners","removeEventListener","callbacks","cb","emit","listeners","hasListeners","isObject$3","isObject_1","requestBase","RequestBase","mixin$3","clearTimeout","_clearTimeout","_timer","_responseTimeoutTimer","parse","_parser","responseType","val","_responseType","serialize","_serializer","timeout","_timeout","_responseTimeout","option","deadline","response","console","warn","retry","_maxRetries","_retries","_retry","req","request","_aborted","timedout","_end","then","resolve","reject","_fullfilledPromise","_endCalled","Promise","innerResolve","innerReject","res","catch","use","ok","_okCallback","_isResponseOK","status","get","_header","toLowerCase","getHeader","set","header","unset","_data","error","_getFormData","append","abort","xhr","withCredentials","_withCredentials","redirects","n","_maxRedirects","toJSON","method","url","data","headers","send","isObj","_formData","_isHost","sortQuery","sort","_sort","_timeoutError","reason","errno","code","callback","_setTimeouts","setTimeout","isFunction$3","tag","isFunction_1","str","shift","params","parts","parseLinks","rel","cleanHeader","shouldStripCookie","utils","responseBase","ResponseBase","mixin$4","_setHeaderProperties","ct","links","link","_setStatusProperties","statusCode","statusType","info","redirect","clientError","serverError","toError","accepted","noContent","badRequest","unauthorized","notAcceptable","forbidden","notFound","ERROR_CODES","shouldRetry","client$1","root","noop","Request","getXHR","XMLHttpRequest","location","protocol","ActiveXObject","trim","s","replace","pairs","pushEncodedKeyValuePair","v","subkey","encodeURIComponent","serializeObject","parseString","pair","pos","decodeURIComponent","html","json","xml","urlencoded","form","form-data","application/x-www-form-urlencoded","application/json","parseHeader","lines","fields","line","pop","isJSON","mime","test","Response","text","responseText","statusText","getAllResponseHeaders","getResponseHeader","body","_parseBody","msg","_query","original","rawResponse","new_err","accept","auth","user","pass","btoa","username","password","query","attach","file","FormData","_callback","retries","crossDomainError","crossDomain","buffer","ca","agent","pipe","write","_appendQueryString","queryArr","substring","onreadystatechange","readyState","handleProgress","direction","total","percent","loaded","onprogress","upload","open","contentType","setRequestHeader","head","del","post","put","requestWithSource","LANGUAGES","tr","regexp","İ","I","İ","az","lt","J","Į","Ì","Í","Ĩ","lowerCase","locale","lang","m","nonWordRegexp","camelCaseRegexp","camelCaseUpperRegexp","noCase","replacement","snakeCase","defineProperty","enumerable","configurable","writable","_extends","validate$1","checkOptions","allowed","allowedNames","a","namesFormatted","removeEmpty","newObj","snakeKeys","opts","prefix","prev","curr","storeURL","session","token","urls","newOptions","policy","signature","baseURL","apikey","handle","cancel","retrieve","extension","metadata","remove","delete","onOff","init","filestackInternals","logger","working","isWorking","_typeof$1","Symbol","iterator","constructor","toConsumableArray$1","arr2","contextName","api","log","_len","stuff","_key","convertedToStrings","thing","File","size","_console","subContextName","initializeGlobalNamespace","namespace","_cloud","clouds","payload","store","logout","tokInit","tokStart","sessionId","session_id","tokStop","archiveId","archive_id","prefetch","cloudURL","numberRange","start","min","int","max","range","alignment","alignPair","tup","formatOption","op","formatOptions","fOptions","filter","snakeName","sepia","transforms","sepiaOptions","blackwhite","blackWhiteOptions","border","borderOptions","circle","circleOptions","shadow","shadowOptions","tornEdges","tornEdgesOptions","polaroid","polaroidOptions","vignette","vignetteOptions","roundedCorners","roundedCornersOptions","rotate","rotateOptions","resize","resizeOptions","flip","flop","monochrome","crop","width","height","dim","cropOptions","output","outputOptions","transformers","transform","processURL","construct","transformIndex","transformConfig","transformer","newCount","secString","_baseURL","transformString","_transformString","bowser","definition","amd","detect","ua","getFirstMatch","regex","getSecondMatch","iosdevice","likeAndroid","android","nexusMobile","nexusTablet","chromeos","silk","sailfish","tizen","webos","windowsphone","samsungBrowser","windows","mac","linux","edgeVersion","versionIdentifier","tablet","mobile","xbox","opera","version","coast","yandexbrowser","ucbrowser","maxthon","epiphany","puffin","sleipnir","kMeleon","msedge","msie","chromeBook","chrome","vivaldi","seamonkey","firefox","firefoxos","phantom","slimer","blackberry","touchpad","bada","qupzilla","chromium","safari","googlebot","blink","webkit","gecko","ios","getWindowsVersion","osVersion","osversion","osMajorVersion","c","navigator","userAgent","browserList","browserItem","getVersionPrecision","compareVersions","versions","precision","Math","chunks","delta","chunk","reverse","isUnsupportedBrowser","minVersions","strictMode","_bowser","browser","check","_detect","sparkMd5","factory","add32","b","hex_chr","md5cycle","d","md5blk","md5blks","charCodeAt","md5blk_array","md51","state","tail","tmp","lo","hi","parseInt","md51_array","subarray","Uint8Array","rhex","j","hex","lsw","msw","ArrayBuffer","clamp","byteLength","begin","num","targetArray","sourceArray","toUtf8","unescape","utf8Str2ArrayBuffer","returnUInt8Array","buff","arrayBuffer2Utf8Str","fromCharCode","concatenateArrayBuffers","first","second","hexToBinaryString","bytes","substr","SparkMD5","reset","appendBinary","contents","_buff","_length","_hash","raw","_finish","getState","hash","setState","destroy","hashBinary","content","index$5","PromiseArgument","throat","queue","Queue","run","release","Delayed","isEmpty","next","temp","_s1","_s2","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","NAN","funcTag","genTag","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","reIsUint","freeParseInt","objectProto","objectToString","nativeCeil","ceil","nativeMax","baseRange","step","fromRight","createRange","isIterateeCall","toFinite","isIndex","object","isObject$5","isArrayLike","eq","other","isLength","isFunction$5","isObjectLike","isSymbol","toNumber","sign","valueOf","isBinary","range$1","index$6","FUNC_ERROR_TEXT","NAN$1","symbolTag$1","reTrim$1","reIsBadHex$1","reIsBinary$1","reIsOctal$1","freeParseInt$1","freeGlobal","freeSelf","objectProto$1","objectToString$1","nativeMax$1","nativeMin","now","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","toNumber$1","isObject$6","invokeFunc","time","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","flush","debounced","isInvoking","throttle","isObjectLike$1","isSymbol$1","index$7","MIN_CHUNK_SIZE","log$1","https","getLocationURL","getName","customName","isFile","isBlob","blob","b64toBlob","b64Data","sliceSize","byteString","decodeURI","byteCharacters","atob","byteArrays","offset","byteNumbers","byteArray","Blob","getRange","partNumber","cfg","partSize","sliceFile","mozSlice","webkitSlice","_getRange","slicePartIntoChunks","part","buf","readFile","reader","FileReader","onloadend","onerror","readAsArrayBuffer","calcMD5","getFormData","fd","filename","mimetype","intelligent","multipart","formData","host","getS3PartData","startParams","md5","debug","location_url","locationRegion","location_region","uploadToS3","onProgress","fakeS3","uploadChunk","number","evt","progressInterval","commitPart","complete","formatETags","etags","idx","uploadFile","mkPart","progressTick","paused","failed","done","chunkSize","totalParts","allParts","sumBytes","percentOfFile","round","startProgress","setInterval","p","totalBytes","totalPercent","previousPayload","clearInterval","finishProgress","pause","resume","cancelAllRequests","flowControl","attempt","promise","onRetry","pow","retryFactor","race","sliceAndUpload","getPart","go","all","concurrency","etag","startFlow","partsFlow","results","storeOptions","allowedOptions","allowedStoreOptions","ext","snakeOpts","security","cname","getUrls","getSecurity","setSecurity","sec","storeURL$$1","uploadOptions","retrieve$$1","remove$$1","overwrite$$1","metadata$$1","transform$$1","upload$$1","prefetch$$1","cloud","client","_typeof","loader","modules","loadModule","moduleDefinition","embedScript","resolvePromise","script","document","createElement","src","appendChild","checkIfDomReady","registerReadyModule","scriptTags","getElementsByTagName","thisScript","getAttribute","loadCss","alreadyAddedThisTag","querySelector","href","apiClient","picker","pickerConstructor"],"mappings":"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"}