/** * Kakao SDK for JavaScript - v1.43.0 * * Copyright 2017 Kakao Corp. * * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * * OSS Notice | KakaoSDK-Javascript * * This application is Copyright © Kakao Corp. All rights reserved. * The following sets forth attribution notices for third party software that may be contained in this application. * If you have any questions or concerns, please contact us at opensource@kakaocorp.com * * * crypto-js * * https://github.com/brix/crypto-js * * Copyright 2009-2013 Jeff Mott * Copyright 2013-2016 Evan Vosberg * * MIT License * * * easyXDM * * https://github.com/oyvindkinsey/easyXDM/ * * Copyright 2009-2011 Øyvind Sean Kinsey, oyvind@kinsey.no * * MIT License * * * ES6-Promise * * https://github.com/stefanpenner/es6-promise * * Copyright 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors * * MIT License * * * Kakao Web2App Library * * https://github.com/kakao/web2app * * Copyright 2015 Kakao Corp. http://www.kakaocorp.com * * MIT License * * * lodash * * https://github.com/lodash/lodash * * Copyright JS Foundation and other contributors * * MIT License * * * ua_parser * * https://github.com/html5crew/ua_parser * * Copyright HTML5 Tech. Team in Daum Communications Corp. * * MIT License * * * `````````` * MIT License * * Copyright (c) * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * 'Software'), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * `````````` */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Kakao = global.Kakao || {})); })(this, (function (exports) { 'use strict'; var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; var freeGlobal$1 = freeGlobal; var freeSelf = typeof self == 'object' && self && self.Object === Object && self; var root = freeGlobal$1 || freeSelf || Function('return this')(); var root$1 = root; var Symbol$1 = root$1.Symbol; var Symbol$2 = Symbol$1; var objectProto$a = Object.prototype; var hasOwnProperty$8 = objectProto$a.hasOwnProperty; var nativeObjectToString$1 = objectProto$a.toString; var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined; function getRawTag(value) { var isOwn = hasOwnProperty$8.call(value, symToStringTag$1), tag = value[symToStringTag$1]; try { value[symToStringTag$1] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString$1.call(value); if (unmasked) { if (isOwn) { value[symToStringTag$1] = tag; } else { delete value[symToStringTag$1]; } } return result; } var objectProto$9 = Object.prototype; var nativeObjectToString = objectProto$9.toString; function objectToString(value) { return nativeObjectToString.call(value); } var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : undefined; function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); } function isObjectLike(value) { return value != null && typeof value == 'object'; } var symbolTag = '[object Symbol]'; function isSymbol(value) { return typeof value == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag; } var isArray = Array.isArray; var isArray$1 = isArray; var reWhitespace = /\s/; function trimmedEndIndex(string) { var index = string.length; while (index-- && reWhitespace.test(string.charAt(index))) {} return index; } var reTrimStart = /^\s+/; function baseTrim(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string; } function isObject(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } var NAN = 0 / 0; var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; var reIsBinary = /^0b[01]+$/i; var reIsOctal = /^0o[0-7]+$/i; var freeParseInt = parseInt; function toNumber(value) { if (typeof value == 'number') { return value; } if (isSymbol(value)) { return NAN; } if (isObject(value)) { var other = typeof value.valueOf == 'function' ? value.valueOf() : value; value = isObject(other) ? other + '' : other; } if (typeof value != 'string') { return value === 0 ? value : +value; } value = baseTrim(value); var isBinary = reIsBinary.test(value); return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; } var INFINITY = 1 / 0, MAX_INTEGER = 1.7976931348623157e+308; function toFinite(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber(value); if (value === INFINITY || value === -INFINITY) { var sign = value < 0 ? -1 : 1; return sign * MAX_INTEGER; } return value === value ? value : 0; } function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? remainder ? result - remainder : result : 0; } function identity(value) { return value; } var asyncTag = '[object AsyncFunction]', funcTag$1 = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; function isFunction(value) { if (!isObject(value)) { return false; } var tag = baseGetTag(value); return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; } var coreJsData = root$1['__core-js_shared__']; var coreJsData$1 = coreJsData; var maskSrcKey = function () { var uid = /[^.]+$/.exec(coreJsData$1 && coreJsData$1.keys && coreJsData$1.keys.IE_PROTO || ''); return uid ? 'Symbol(src)_1.' + uid : ''; }(); function isMasked(func) { return !!maskSrcKey && maskSrcKey in func; } var funcProto$2 = Function.prototype; var funcToString$2 = funcProto$2.toString; function toSource(func) { if (func != null) { try { return funcToString$2.call(func); } catch (e) {} try { return func + ''; } catch (e) {} } return ''; } var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; var reIsHostCtor = /^\[object .+?Constructor\]$/; var funcProto$1 = Function.prototype, objectProto$8 = Object.prototype; var funcToString$1 = funcProto$1.toString; var hasOwnProperty$7 = objectProto$8.hasOwnProperty; var reIsNative = RegExp('^' + funcToString$1.call(hasOwnProperty$7).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'); function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } function getValue(object, key) { return object == null ? undefined : object[key]; } function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } var HOT_COUNT = 800, HOT_SPAN = 16; var nativeNow = Date.now; function shortOut(func) { var count = 0, lastCalled = 0; return function () { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(undefined, arguments); }; } function constant(value) { return function () { return value; }; } var defineProperty = function () { try { var func = getNative(Object, 'defineProperty'); func({}, '', {}); return func; } catch (e) {} }(); var defineProperty$1 = defineProperty; var baseSetToString = !defineProperty$1 ? identity : function (func, string) { return defineProperty$1(func, 'toString', { 'configurable': true, 'enumerable': false, 'value': constant(string), 'writable': true }); }; var baseSetToString$1 = baseSetToString; var setToString = shortOut(baseSetToString$1); var setToString$1 = setToString; function arrayEach(array, iteratee) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (iteratee(array[index], index, array) === false) { break; } } return array; } var MAX_SAFE_INTEGER$1 = 9007199254740991; var reIsUint = /^(?:0|[1-9]\d*)$/; function isIndex(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER$1 : length; return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; } function baseAssignValue(object, key, value) { if (key == '__proto__' && defineProperty$1) { defineProperty$1(object, key, { 'configurable': true, 'enumerable': true, 'value': value, 'writable': true }); } else { object[key] = value; } } function eq(value, other) { return value === other || value !== value && other !== other; } var objectProto$7 = Object.prototype; var hasOwnProperty$6 = objectProto$7.hasOwnProperty; function assignValue(object, key, value) { var objValue = object[key]; if (!(hasOwnProperty$6.call(object, key) && eq(objValue, value)) || value === undefined && !(key in object)) { baseAssignValue(object, key, value); } } function copyObject(source, props, object, customizer) { var isNew = !object; object || (object = {}); var index = -1, length = props.length; while (++index < length) { var key = props[index]; var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined; if (newValue === undefined) { newValue = source[key]; } if (isNew) { baseAssignValue(object, key, newValue); } else { assignValue(object, key, newValue); } } return object; } var nativeMax = Math.max; function overRest(func, start, transform) { start = nativeMax(start === undefined ? func.length - 1 : start, 0); return function () { var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length); while (++index < length) { array[index] = args[start + index]; } index = -1; var otherArgs = Array(start + 1); while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = transform(array); return apply(func, this, otherArgs); }; } function baseRest(func, start) { return setToString$1(overRest(func, start, identity), func + ''); } var MAX_SAFE_INTEGER = 9007199254740991; function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } function isIterateeCall(value, index, object) { if (!isObject(object)) { return false; } var type = typeof index; if (type == 'number' ? isArrayLike(object) && isIndex(index, object.length) : type == 'string' && index in object) { return eq(object[index], value); } return false; } function createAssigner(assigner) { return baseRest(function (object, sources) { var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined, guard = length > 2 ? sources[2] : undefined; customizer = assigner.length > 3 && typeof customizer == 'function' ? (length--, customizer) : undefined; if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? undefined : customizer; length = 1; } object = Object(object); while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }); } var objectProto$6 = Object.prototype; function isPrototype(value) { var Ctor = value && value.constructor, proto = typeof Ctor == 'function' && Ctor.prototype || objectProto$6; return value === proto; } function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } var argsTag$1 = '[object Arguments]'; function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag$1; } var objectProto$5 = Object.prototype; var hasOwnProperty$5 = objectProto$5.hasOwnProperty; var propertyIsEnumerable = objectProto$5.propertyIsEnumerable; var isArguments = baseIsArguments(function () { return arguments; }()) ? baseIsArguments : function (value) { return isObjectLike(value) && hasOwnProperty$5.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; var isArguments$1 = isArguments; function stubFalse() { return false; } var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; var Buffer = moduleExports$1 ? root$1.Buffer : undefined; var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; var isBuffer = nativeIsBuffer || stubFalse; var isBuffer$1 = isBuffer; var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag$1 = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag = '[object Map]', numberTag$1 = '[object Number]', objectTag$1 = '[object Object]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag$1 = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$1] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag$1] = typedArrayTags[weakMapTag] = false; function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } function baseUnary(func) { return function (value) { return func(value); }; } var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; var moduleExports = freeModule && freeModule.exports === freeExports; var freeProcess = moduleExports && freeGlobal$1.process; var nodeUtil = function () { try { var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }(); var nodeUtil$1 = nodeUtil; var nodeIsTypedArray = nodeUtil$1 && nodeUtil$1.isTypedArray; var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; var isTypedArray$1 = isTypedArray; var objectProto$4 = Object.prototype; var hasOwnProperty$4 = objectProto$4.hasOwnProperty; function arrayLikeKeys(value, inherited) { var isArr = isArray$1(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty$4.call(value, key)) && !(skipIndexes && ( key == 'length' || isBuff && (key == 'offset' || key == 'parent') || isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || isIndex(key, length)))) { result.push(key); } } return result; } function overArg(func, transform) { return function (arg) { return func(transform(arg)); }; } var nativeKeys = overArg(Object.keys, Object); var nativeKeys$1 = nativeKeys; var objectProto$3 = Object.prototype; var hasOwnProperty$3 = objectProto$3.hasOwnProperty; function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys$1(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty$3.call(object, key) && key != 'constructor') { result.push(key); } } return result; } function keys$1(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } function nativeKeysIn(object) { var result = []; if (object != null) { for (var key in Object(object)) { result.push(key); } } return result; } var objectProto$2 = Object.prototype; var hasOwnProperty$2 = objectProto$2.hasOwnProperty; function baseKeysIn(object) { if (!isObject(object)) { return nativeKeysIn(object); } var isProto = isPrototype(object), result = []; for (var key in object) { if (!(key == 'constructor' && (isProto || !hasOwnProperty$2.call(object, key)))) { result.push(key); } } return result; } function keysIn(object) { return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } var assignIn = createAssigner(function (object, source) { copyObject(source, keysIn(source), object); }); var extend = assignIn; var getPrototype = overArg(Object.getPrototypeOf, Object); var getPrototype$1 = getPrototype; var objectTag = '[object Object]'; var funcProto = Function.prototype, objectProto$1 = Object.prototype; var funcToString = funcProto.toString; var hasOwnProperty$1 = objectProto$1.hasOwnProperty; var objectCtorString = funcToString.call(Object); function isPlainObject(value) { if (!isObjectLike(value) || baseGetTag(value) != objectTag) { return false; } var proto = getPrototype$1(value); if (proto === null) { return true; } var Ctor = hasOwnProperty$1.call(proto, 'constructor') && proto.constructor; return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } function createBaseFor(fromRight) { return function (object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } var baseFor = createBaseFor(); var baseFor$1 = baseFor; function baseForOwn(object, iteratee) { return object && baseFor$1(object, iteratee, keys$1); } function createBaseEach(eachFunc, fromRight) { return function (collection, iteratee) { if (collection == null) { return collection; } if (!isArrayLike(collection)) { return eachFunc(collection, iteratee); } var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection); while (fromRight ? index-- : ++index < length) { if (iteratee(iterable[index], index, iterable) === false) { break; } } return collection; }; } var baseEach = createBaseEach(baseForOwn); var baseEach$1 = baseEach; var objectProto = Object.prototype; var hasOwnProperty = objectProto.hasOwnProperty; var defaults = baseRest(function (object, sources) { object = Object(object); var index = -1; var length = sources.length; var guard = length > 2 ? sources[2] : undefined; if (guard && isIterateeCall(sources[0], sources[1], guard)) { length = 1; } while (++index < length) { var source = sources[index]; var props = keysIn(source); var propsIndex = -1; var propsLength = props.length; while (++propsIndex < propsLength) { var key = props[propsIndex]; var value = object[key]; if (value === undefined || eq(value, objectProto[key]) && !hasOwnProperty.call(object, key)) { object[key] = source[key]; } } } return object; }); var defaults$1 = defaults; function castFunction(value) { return typeof value == 'function' ? value : identity; } function forEach(collection, iteratee) { var func = isArray$1(collection) ? arrayEach : baseEach$1; return func(collection, castFunction(iteratee)); } var stringTag = '[object String]'; function isString(value) { return typeof value == 'string' || !isArray$1(value) && isObjectLike(value) && baseGetTag(value) == stringTag; } var boolTag = '[object Boolean]'; function isBoolean(value) { return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag; } function isElement(value) { return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); } function isInteger(value) { return typeof value == 'number' && value == toInteger(value); } var numberTag = '[object Number]'; function isNumber(value) { return typeof value == 'number' || isObjectLike(value) && baseGetTag(value) == numberTag; } function checkObjType(type) { return function (e) { return Object.prototype.toString.call(e) === "[object ".concat(type, "]"); }; } function isBlob(b) { return checkObjType('Blob')(b); } function isFile(f) { return checkObjType('File')(f); } function isFileList(fl) { return checkObjType('FileList')(fl); } function isURL(u) { var urlRegex = /(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/; return urlRegex.test(u); } function isJSONString(s) { try { JSON.parse(s); } catch (e) { return false; } return true; } function map(arr, fn) { return Array.prototype.slice.call(arr).map(fn); } function every(arr, fn) { return Array.prototype.slice.call(arr).every(fn); } function difference(a0, a1) { var arrays = [a0, a1]; return arrays.reduce(function (a, b) { return a.filter(function (c) { return b.indexOf(c) === -1; }); }); } function keys(e) { return Object.keys(e || {}); } function emptyFunc() { } function getRandomString() { return Math.random().toString(36).slice(2); } function getElement(e) { if (isElement(e)) { return e; } else if (isString(e)) { return document.querySelector(e); } else { return null; } } function addEvent(target, type, callback) { if (target.addEventListener) { target.addEventListener(type, callback, false); } } function removeEvent(target, type, callback) { if (target.removeEventListener) { target.removeEventListener(type, callback, false); } } function buildQueryString(params) { var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var esc = encode ? encodeURIComponent : function (e) { return e; }; var ret = map(keys(params), function (k) { var v = params[k]; return esc(k) + '=' + esc(isObjectLike(v) ? JSON.stringify(v) : v); }); return ret.join('&'); } function ab2str(buf) { var bytes = Array.prototype.slice.call(new Uint8Array(buf)); return bytes.reduce(function (acc, b) { return acc + String.fromCharCode.apply(null, [b]); }, ''); } function isOneOf(elements) { if (!isArray$1(elements)) { throw new Error('elements should be an Array'); } return function (e) { return elements.indexOf(e) > -1; }; } function passesOneOf(validators) { if (!isArray$1(validators)) { throw new Error('validators should be an Array'); } return function (e) { return validators.some(function (v) { return v(e); }); }; } var localStorage = function () { var polyfill = { _data: {}, setItem: function setItem(id, val) { return this._data[id] = String(val); }, getItem: function getItem(id) { return this._data.hasOwnProperty(id) ? this._data[id] : null; }, removeItem: function removeItem(id) { return delete this._data[id]; }, clear: function clear() { return this._data = {}; } }; try { if ('localStorage' in window && window['localStorage'] !== null) { window.localStorage.setItem('store', ''); window.localStorage.removeItem('store'); return window.localStorage; } else { return polyfill; } } catch (e) { return polyfill; } }(); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; var ua_parser = function () { if (!Array.isArray) { Array.isArray = function (arg) { return Object.prototype.toString.call(arg) === '[object Array]'; }; } function checkUserAgent(ua) { var browser = {}; var match = /(dolfin)[ \/]([\w.]+)/.exec(ua) || /(edge)[ \/]([\w.]+)/.exec(ua) || /(chrome)[ \/]([\w.]+)/.exec(ua) || /(tizen)[ \/]([\w.]+)/.exec(ua) || /(opera)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || /(webkit)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+))?/.exec(ua) || ["", "unknown"]; if (match[1] === "webkit") { match = /(iphone|ipad|ipod)[\S\s]*os ([\w._\-]+) like/.exec(ua) || /(android)[ \/]([\w._\-]+);/.exec(ua) || [match[0], "safari", match[2]]; } else if (match[1] === "mozilla") { if (/trident/.test(ua)) { match[1] = "msie"; } else { match[1] = "firefox"; } } else if (/polaris|natebrowser|([010|011|016|017|018|019]{3}\d{3,4}\d{4}$)/.test(ua)) { match[1] = "polaris"; } browser[match[1]] = true; browser.name = match[1]; browser.version = setVersion(match[2]); return browser; } function setVersion(versionString) { var version = {}; var versions = versionString ? versionString.split(/\.|-|_/) : ["0", "0", "0"]; version.info = versions.join("."); version.major = versions[0] || "0"; version.minor = versions[1] || "0"; version.patch = versions[2] || "0"; return version; } function checkPlatform(ua) { if (isTablet(ua)) { return "tablet"; } else if (isPc(ua)) { return "pc"; } else if (isMobile(ua)) { return "mobile"; } else { return ""; } } function isPc(ua) { if (ua.match(/linux|windows (nt|98)|macintosh|cros/) && !ua.match(/android|mobile|polaris|lgtelecom|uzard|natebrowser|ktf;|skt;/)) { return true; } return false; } function isTablet(ua) { if (ua.match(/ipad/) || ua.match(/android/) && !ua.match(/mobi|mini|fennec/) || ua.match(/macintosh/) && window.navigator.maxTouchPoints > 1) { return true; } return false; } function isMobile(ua) { if (!!ua.match(/ip(hone|od)|android.+mobile|windows (ce|phone)|blackberry|bb10|symbian|webos|firefox.+fennec|opera m(ob|in)i|tizen.+mobile|polaris|iemobile|lgtelecom|nokia|sonyericsson|dolfin|uzard|natebrowser|ktf;|skt;/)) { return true; } else { return false; } } function checkOs(ua) { var os = {}, match = /(iphone|ipad|ipod)[\S\s]*os ([\w._\-]+) like/.exec(ua) || (/polaris|natebrowser|([010|011|016|017|018|019]{3}\d{3,4}\d{4}$)/.test(ua) ? ["", "polaris", "0.0.0"] : false) || /(windows)(?: nt | phone(?: os){0,1} | )([\w._\-]+)/.exec(ua) || /(android)[ \/]([\w._\-]+);/.exec(ua) || (/android/.test(ua) ? ["", "android", "0.0.0"] : false) || (/(windows)/.test(ua) ? ["", "windows", "0.0.0"] : false) || /(mac) os x ([\w._\-]+)/.exec(ua) || /(tizen)[ \/]([\w._\-]+);/.exec(ua) || (/(linux)/.test(ua) ? ["", "linux", "0.0.0"] : false) || (/webos/.test(ua) ? ["", "webos", "0.0.0"] : false) || /(cros)(?:\s[\w]+\s)([\d._\-]+)/.exec(ua) || /(bada)[ \/]([\w._\-]+)/.exec(ua) || (/bada/.test(ua) ? ["", "bada", "0.0.0"] : false) || (/(rim|blackberry|bb10)/.test(ua) ? ["", "blackberry", "0.0.0"] : false) || ["", "unknown", "0.0.0"]; if (match[1] === "iphone" || match[1] === "ipad" || match[1] === "ipod") { match[1] = "ios"; } else if (match[1] === "windows" && match[2] === "98") { match[2] = "0.98.0"; } if (match[1] === "mac" && typeof window !== 'undefined' && window.navigator.maxTouchPoints > 1) { match[1] = "ios"; } if (match[1] === 'cros') { match[1] = "chrome"; } os[match[1]] = true; os.name = match[1]; os.version = setVersion(match[2]); return os; } var baseAppList = ['crios', 'fxios', 'daumapps']; function checkApp(ua, customAppList) { var app = {}, match = null, checkAppList = baseAppList; if (Array.isArray(customAppList)) { checkAppList = baseAppList.concat(customAppList); } else if (typeof customAppList === 'string') { checkAppList = baseAppList.concat([customAppList]); } for (var i = 0, len = checkAppList.length; i < len; i += 1) { var appname = checkAppList[i]; var regex = new RegExp('(' + appname + ')[ \\/]([\\w._\\-]+)'); match = regex.exec(ua); if (match) { break; } } if (!match) { match = ["", ""]; } if (match[1]) { app.isApp = true; app.name = match[1]; app.version = setVersion(match[2]); } else { app.isApp = false; } return app; } function getLowerUserAgent(ua) { var lowerUa = ''; if (!ua) { if (typeof window !== 'undefined' && window.navigator && typeof window.navigator.userAgent === 'string') { lowerUa = window.navigator.userAgent.toLowerCase(); } else { lowerUa = ''; } } else { lowerUa = ua.toLowerCase(); } return lowerUa; } var userAgent = function userAgent(ua, customAppList) { var lowerUa = getLowerUserAgent(ua); return { ua: lowerUa, browser: checkUserAgent(lowerUa), platform: checkPlatform(lowerUa), os: checkOs(lowerUa), app: checkApp(lowerUa, customAppList) }; }; return userAgent; }(); var ua_parser$1 = ua_parser; var UA$1 = ua_parser$1(); function getOrigin() { var _location = location, protocol = _location.protocol, hostname = _location.hostname, port = _location.port; return "".concat(protocol, "//").concat(hostname).concat(port ? ':' + port : ''); } function getNavigator() { return navigator; } function getUA() { return UA$1; } var ACCOUNT = "https://accounts.kakao.com"; var AUTH = "https://kauth.kakao.com"; var API$2 = "https://kapi.kakao.com"; var SHARER_DOMAIN = "https://sharer.kakao.com"; var PICKER_DOMAIN = "https://friend-picker.kakao.com"; var APPS_DOMAIN = "https://apps.kakao.com"; var CHANNEL = "https://pf.kakao.com"; var STORY = "https://story.kakao.com"; var STORY_POST_SCHEME = "storylink://posting"; var REDIRECT_URI = "JS-SDK"; var UNIVERSAL_LINK = "https://talk-apps.kakao.com"; var TALK_LOGIN_SCHEME = "kakaokompassauth://authorize"; var TALK_LOGIN_REDIRECT_URI = "https://kapi.kakao.com/cors/afterlogin.html"; var TALK_INAPP_SCHEME = "kakaotalk://inappbrowser"; var TALK_SYNCPLUGIN_SCHEME = "kakaotalk://bizplugin?plugin_id=6011263b74fc2b49c73a7298"; var TALK_LINK_SCHEME = "kakaolink://send"; var TALK_ANDROID_PACKAGE = "com.kakao.talk"; var NAVI_SCHEME = "kakaonavi-sdk://navigate"; var NAVI_FALLBACK_URL = "https://kakaonavi.kakao.com/launch/index.do"; var DEVELOPERS = "https://developers.kakao.com"; var origin = getOrigin(); var UA = getUA(); var isTalkWebview = /KAKAOTALK/i.test(UA.ua); var VERSION = "1.43.0".concat(''); var navigator$1 = getNavigator(); var KAKAO_AGENT = ["sdk/".concat(VERSION), 'os/javascript', 'sdk_type/javascript', "lang/".concat(navigator$1.userLanguage || navigator$1.language), "device/".concat(navigator$1.platform.replace(/ /g, '_')), "origin/".concat(encodeURIComponent(origin))].join(' '); var URL = { accountDomain: ACCOUNT, authDomain: AUTH, authorize: "".concat(AUTH, "/oauth/authorize"), loginWidget: "".concat(AUTH, "/public/widget/login/kakaoLoginWidget.html"), redirectUri: REDIRECT_URI, universalKakaoLink: "".concat(UNIVERSAL_LINK, "/scheme/"), talkLoginScheme: TALK_LOGIN_SCHEME, talkLoginRedirectUri: TALK_LOGIN_REDIRECT_URI, talkInappScheme: TALK_INAPP_SCHEME, talkSyncpluginScheme: TALK_SYNCPLUGIN_SCHEME, apiRemote: "".concat(API$2, "/cors/"), sharerDomain: SHARER_DOMAIN, pickerDomain: PICKER_DOMAIN, appsDomain: APPS_DOMAIN, talkLinkScheme: TALK_LINK_SCHEME, talkAndroidPackage: TALK_ANDROID_PACKAGE, channel: CHANNEL, channelIcon: "".concat(DEVELOPERS, "/assets/img/about/logos"), storyShare: "".concat(STORY, "/s/share"), storyChannelFollow: "".concat(STORY, "/s/follow"), storyIcon: "".concat(DEVELOPERS, "/sdk/js/resources/story/icon_small.png"), storyPostScheme: STORY_POST_SCHEME, naviScheme: NAVI_SCHEME, naviFallback: NAVI_FALLBACK_URL }; var appKey$1 = null; function getAppKey$1() { return appKey$1; } function setAppKey(_appKey) { appKey$1 = _appKey; } function KakaoError(message) { Error.prototype.constructor.apply(this, arguments); this.name = 'KakaoError'; this.message = message; } KakaoError.prototype = new Error(); function logDebug(obj) { } function makeModule(subModules) { var module = extend.apply(void 0, [{ cleanup: function cleanup() { forEach(subModules, function (e) { return e.cleanup && e.cleanup(); }); } }].concat(_toConsumableArray(subModules))); return module; } function emptyCleanups(cleanups) { forEach(cleanups, function (fn) { fn(); }); cleanups.length = 0; } function validate(target, validator, callerMsg) { if (validator(target) === false) { throw new KakaoError("Illegal argument for ".concat(callerMsg)); } } function processRules() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var rules = arguments.length > 1 ? arguments[1] : undefined; var callerMsg = arguments.length > 2 ? arguments[2] : undefined; if (!isObjectLike(params)) { throw new Error('params should be an Object'); } if (isFunction(rules.before)) { rules.before(params); } if (isFunction(rules.defaults)) { defaults$1(params, rules.defaults(params)); } else { defaults$1(params, rules.defaults); } var _rules$required = rules.required, required = _rules$required === void 0 ? {} : _rules$required, _rules$optional = rules.optional, optional = _rules$optional === void 0 ? {} : _rules$optional; var missingRequiredKeys = difference(keys(required), keys(params)); if (missingRequiredKeys.length > 0) { throw new KakaoError("Missing required keys: ".concat(missingRequiredKeys.join(','), " at ").concat(callerMsg)); } var allowed = extend({}, required, optional); var invalidKeys = difference(keys(params), keys(allowed)); if (invalidKeys.length > 0) { throw new KakaoError("Invalid parameter keys: ".concat(invalidKeys.join(','), " at ").concat(callerMsg)); } forEach(params, function (value, key) { validate(value, allowed[key], "\"".concat(key, "\" in ").concat(callerMsg)); }); if (isFunction(rules.after)) { rules.after(params); } return params; } function generateTxId() { var tranId = Math.random().toString(36).slice(2) + getAppKey$1() + Date.now().toString(36); return tranId.slice(0, 60); } function getInstallUrl(androidAppId, iOSAppId) { if (UA.os.android) { var referrer = JSON.stringify({ appKey: appKey$1, KA: KAKAO_AGENT }); return "market://details?id=".concat(androidAppId, "&referrer=").concat(referrer); } else if (UA.os.ios) { return "https://itunes.apple.com/app/id".concat(iOSAppId); } else { return location.href; } } function guardCreateEasyXDM(createEasyXDM) { try { return createEasyXDM(); } catch (e) { if (e instanceof TypeError) { throw new KakaoError('kakao.js should be loaded from a web server'); } else { throw new KakaoError("EasyXDM - ".concat(e.message)); } } } var popupWindows = {}; function windowOpen(url, name, feature) { var popupWindow = popupWindows[name]; if (popupWindow && popupWindow.close && !popupWindow.closed) { popupWindow.close(); } popupWindows[name] = window.open(url, name, feature); return popupWindows[name]; } function applyAttributes(settings, container$, mapper) { forEach(mapper, function (value, key) { var attr = container$.getAttribute(value); if (attr !== null) { settings[key] = attr === 'true' || attr === 'false' ? attr === 'true' : attr; } }); } function createHiddenIframe(id, src, cleanups) { var iframe = document.createElement('iframe'); iframe.id = iframe.name = id; iframe.src = src; iframe.setAttribute('style', 'border:none; width:0; height:0; display:none; overflow:hidden;'); document.body.appendChild(iframe); cleanups.push(function () { document.body.removeChild(iframe); }); } function addMessageEvent(settings, requestDomain, cleanups) { var callback = function callback(_ref) { var data = _ref.data, origin = _ref.origin; if (data && origin === requestDomain) { var resp = JSON.parse(data); if (resp.code) { settings.fail(resp); } else { settings.success(resp); } settings.always(resp); removeEvent(window, 'message', callback); } }; addEvent(window, 'message', callback); cleanups.push(function () { removeEvent(window, 'message', callback); }); } function openPopupAndSubmitForm(params, popupParams) { var url = popupParams.url, popupName = popupParams.popupName, popupFeatures = popupParams.popupFeatures; var popup = UA.browser.msie ? {} : windowOpen('', popupName, popupFeatures); if (popup.focus) { popup.focus(); } createAndSubmitForm(params, url, popupName); return popup; } function createAndSubmitForm(params, url) { var popupName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; var form = document.createElement('form'); form.setAttribute('accept-charset', 'utf-8'); form.setAttribute('method', 'post'); form.setAttribute('action', url); form.setAttribute('target', popupName); form.setAttribute('style', 'display:none'); forEach(params, function (value, key) { var input = document.createElement('input'); input.type = 'hidden'; input.name = key; input.value = isString(value) ? value : JSON.stringify(value); form.appendChild(input); }); document.body.appendChild(form); form.submit(); document.body.removeChild(form); } var eventObserverMap = {}; function subscribe(eventName, observer) { eventObserverMap[eventName] = eventObserverMap[eventName] || []; eventObserverMap[eventName].push(observer); } function unsubscribe(eventName, observer) { var observers = eventObserverMap[eventName]; for (var i = 0; i < observers.length; i++) { if (observers[i] === observer) { observers.splice(i, 1); return; } } } function dispatch(eventName) { forEach(eventObserverMap[eventName], function (observer) { observer(); }); } var eventObserver = { subscribe: subscribe, unsubscribe: unsubscribe, dispatch: dispatch }; var Poller = function () { function Poller(interval, maxCount) { _classCallCheck(this, Poller); this._interval = interval; this._maxCount = maxCount; this._count = 0; this._stopped = false; this._timeout = null; } _createClass(Poller, [{ key: "start", value: function start(pollFunc, failFunc) { if (this._timeout !== null) { this.stop(); } this._count = 0; this._stopped = false; this._doPolling(pollFunc, failFunc); } }, { key: "_doPolling", value: function _doPolling(pollFunc, failFunc) { var _this = this; if (this._stopped) return; this._timeout = setTimeout(function () { if (++_this._count > _this._maxCount) { failFunc(); } else { pollFunc(); _this._doPolling(pollFunc, failFunc); } }, this._interval); } }, { key: "stop", value: function stop() { this._stopped = true; clearTimeout(this._timeout); this._timeout = null; } }]); return Poller; }(); var defaultCallbacks = { success: emptyFunc, fail: emptyFunc, always: emptyFunc }; var loginDefaultSettings = _objectSpread2({ throughTalk: true, persistAccessToken: true, persistRefreshToken: false }, defaultCallbacks); var loginCommonSettings = { success: isFunction, fail: isFunction, always: isFunction, persistAccessToken: isBoolean, persistRefreshToken: isBoolean, approvalType: isOneOf(['project']), scope: isString, throughTalk: isBoolean, plusFriendPublicId: isString, channelPublicId: isString, serviceTerms: isString, redirectUri: isString, state: isString, deviceType: isOneOf(['watch', 'tv']), nonce: isString }; var shippingAddressSettings = { optional: { success: isFunction, fail: isFunction, always: isFunction, close: isFunction, returnUrl: isString, forceMobileLayout: isBoolean, enableBackButton: isBoolean }, defaults: _objectSpread2(_objectSpread2({}, defaultCallbacks), {}, { close: emptyFunc, forceMobileLayout: false, enableBackButton: true }) }; var rules$8 = { createLoginButton: { required: { container: passesOneOf([isElement, isString]) }, optional: _objectSpread2({ lang: isOneOf(['en', 'kr']), size: isOneOf(['small', 'medium', 'large']) }, loginCommonSettings), defaults: _objectSpread2({ lang: 'kr', size: 'medium' }, loginDefaultSettings) }, login: { optional: loginCommonSettings, defaults: loginDefaultSettings }, authorize: { optional: { redirectUri: isString, approvalType: isOneOf(['project']), scope: isString, throughTalk: isBoolean, plusFriendPublicId: isString, channelPublicId: isString, serviceTerms: isString, isPopup: isBoolean, state: isString, autoLogin: isBoolean, deviceType: isOneOf(['watch', 'tv']), prompts: isString, reauthenticate: isBoolean, throughSyncplugin: isBoolean, loginHint: isString, nonce: isString, success: isFunction, fail: isFunction, always: isFunction }, defaults: _objectSpread2({ throughTalk: true, isPopup: false, reauthenticate: false, throughSyncplugin: true }, defaultCallbacks) }, autoLogin: { optional: { success: isFunction, fail: isFunction, always: isFunction }, defaults: defaultCallbacks }, issueAccessToken: { required: { code: isString, redirectUri: isString }, optional: { success: isFunction, fail: isFunction, always: isFunction }, defaults: defaultCallbacks }, selectShippingAddress: shippingAddressSettings, createShippingAddress: shippingAddressSettings, updateShippingAddress: _objectSpread2({ required: { addressId: isInteger } }, shippingAddressSettings) }; function openLoginPopup(url) { var LOGIN_POPUP_NAME = '_blank'; return windowOpen(url, LOGIN_POPUP_NAME, getLoginPopupFeatures()); } function getLoginPopupFeatures() { var popupWidth = 480; var popupHeight = 700; var sLeft = window.screenLeft ? window.screenLeft : window.screenX ? window.screenX : 0; var sTop = window.screenTop ? window.screenTop : window.screenY ? window.screenY : 0; var popupLeft = screen.width / 2 - popupWidth / 2 + sLeft; var popupTop = screen.height / 2 - popupHeight / 2 + sTop; return ["width=".concat(popupWidth), "height=".concat(popupHeight), "left=".concat(popupLeft), "top=".concat(popupTop), 'scrollbars=yes', 'resizable=1'].join(','); } function makeAuthUrl(params) { return "".concat(URL.authorize, "?").concat(buildQueryString(params)); } function makeAuthParams(settings) { var params = { client_id: getAppKey$1() }; if (settings.approvalType) { params['approval_type'] = settings.approvalType; } if (settings.scope) { params['scope'] = settings.scope; } if (settings.state) { params['state'] = settings.state; } return params; } function makeAuthExtraParams(settings) { var params = {}; if (settings.plusFriendPublicId) { params['extra.plus_friend_public_id'] = settings.plusFriendPublicId; } if (settings.channelPublicId) { params['channel_public_id'] = settings.channelPublicId; } if (settings.serviceTerms) { params['extra.service_terms'] = settings.serviceTerms; } if (settings.autoLogin) { params['prompt'] = 'none'; } if (settings.reauthenticate) { params['prompt'] = 'login'; } if (settings.prompts) { params['prompt'] = settings.prompts; } if (settings.deviceType) { params['device_type'] = settings.deviceType; } if (settings.loginHint) { params['login_hint'] = settings.loginHint; } if (settings.nonce) { params['nonce'] = settings.nonce; } return params; } function makeBaseAuthParams(settings) { return _objectSpread2(_objectSpread2(_objectSpread2({}, makeAuthParams(settings)), makeAuthExtraParams(settings)), {}, { redirect_uri: settings.redirectUri || URL.redirectUri, response_type: 'code', auth_tran_id: generateTxId() }); } function makeWebAuthParams(settings, baseAuthParams) { return _objectSpread2(_objectSpread2({}, baseAuthParams), {}, { ka: KAKAO_AGENT, is_popup: settings.isPopup }); } function makeCodeUrl(authTranId) { var params = buildQueryString({ client_id: getAppKey$1(), auth_tran_id: authTranId, ka: KAKAO_AGENT }); return "".concat(URL.authDomain, "/apiweb/code.json?").concat(params); } function runAuthCallback(settings, resp) { if (resp.error) { settings.fail(resp); } else { settings.success(resp); } settings.always(resp); } function checkAuthorize(url, onResponse) { request$7({ method: 'GET', url: url }, onResponse); } function request$7(req, onResponse) { var url = req.url, method = req.method, data = req.data; var xhr = new XMLHttpRequest(); if (typeof xhr.withCredentials !== 'undefined') { xhr.open(method, url); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onreadystatechange = function () { if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { onResponse(xhr); } }; xhr.send(data); } else { var xdr = new XDomainRequest(); xdr.open(method.toLowerCase(), url); xdr.onload = function () { onResponse({ status: xdr.responseText ? 200 : 'error', response: xdr.responseText }); }; setTimeout(function () { xdr.send(data); }, 0); } } var poller$2 = new Poller(1000, 600); function authorize(settings) { settings = processRules(settings, rules$8.authorize, 'Auth.authorize'); if ((settings.autoLogin || includePrompts(settings.prompts, 'none')) && !isTalkWebview) { handleResponse(settings, { error: 'auto_login', error_description: 'NOT_SUPPORTED_BROWSER' }); return false; } if (isTalkChannelHome(settings) && isSupportImplicitLogin(settings)) { implicitLogin(settings).then(function (isNeedRetry) { if (isNeedRetry) { doAuthorize(settings); } }); } else { doAuthorize(settings); } eventObserver.dispatch('LOGIN_START'); } function doAuthorize(settings) { var baseAuthParams = makeBaseAuthParams(settings); var webAuthParams = makeWebAuthParams(settings, baseAuthParams); var isEasyLogin = isSupportEasyLogin(settings); var isSupportSyncplugin = isTalkChannelHome(settings); var webAuthUrl = makeAuthUrl(webAuthParams); var loginUrl = isEasyLogin ? makeEasyLoginUrl(settings, baseAuthParams, webAuthUrl) : webAuthUrl; var popup = null; if (isSupportSyncplugin) { executeSyncpluginScheme(webAuthParams); } else if (settings.isPopup) { popup = openLoginPopup(loginUrl); } else { location.href = loginUrl; } if (isEasyLogin || isSupportSyncplugin || settings.isPopup) { var codeUrl = makeCodeUrl(baseAuthParams.auth_tran_id); poller$2.start(function () { checkAuthorize(codeUrl, function (httpResp) { var isValidResp = onResponse(settings, httpResp); if (isValidResp) { poller$2.stop(); popup && popup.close && popup.close(); } if (!isEasyLogin && popup && popup.closed) { poller$2.stop(); } }); }, function () { handleResponse(settings, { error: 'timeout', error_description: 'LOGIN_TIMEOUT' }); }); } } function isSupportEasyLogin(settings) { var isNotInAppBrowser = UA.os.ios || UA.os.android ? !isTalkWebview : false; var isAccountLogin = settings.reauthenticate === true || includePrompts(settings.prompts, 'login'); var isAutoLogin = settings.autoLogin === true || includePrompts(settings.prompts, 'none'); return !(UA.os.android && /instagram|fb_iab/g.test(UA.ua)) && isNotInAppBrowser && !isAccountLogin && settings.throughTalk === true && !isAutoLogin; } function includePrompts(prompts, option) { return !!(prompts && prompts.indexOf(option) > -1); } function onResponse(settings, httpResp) { if (httpResp.status === 200 && httpResp.response) { var resp = JSON.parse(httpResp.response); if (resp.status === 'ok' && resp.code) { handleResponse(settings, { code: resp.code }); return true; } else if (resp.status === 'error' && resp.error_code && resp.error_code !== '300') { handleResponse(settings, { error: resp.error, error_description: resp.error_description }); if (resp.error_code === '700') { location.href = "".concat(URL.authDomain, "/error/network"); } return true; } } return false; } function handleResponse(settings, respObj) { if (settings.state) { respObj.state = settings.state; } if (settings.redirectUri) { var delimiter = settings.redirectUri.indexOf('?') > -1 ? '&' : '?'; location.href = settings.redirectUri + delimiter + buildQueryString(respObj); } else { runAuthCallback(settings, respObj); } } function makeEasyLoginUrl(settings, baseAuthParams, fallbackUrl) { var easyLoginAuthParams = _objectSpread2(_objectSpread2({}, baseAuthParams), {}, { is_popup: true }); var getAndroidLoginIntent = function getAndroidLoginIntent() { return ['intent:#Intent', 'action=com.kakao.talk.intent.action.CAPRI_LOGGED_IN_ACTIVITY', 'launchFlags=0x08880000', "S.com.kakao.sdk.talk.appKey=".concat(getAppKey$1()), "S.com.kakao.sdk.talk.redirectUri=".concat(easyLoginAuthParams.redirect_uri), "S.com.kakao.sdk.talk.kaHeader=".concat(KAKAO_AGENT), "S.com.kakao.sdk.talk.extraparams=".concat(encodeURIComponent(JSON.stringify(easyLoginAuthParams)))].concat(_toConsumableArray(settings.state ? ["S.com.kakao.sdk.talk.state=".concat(settings.state)] : []), ["S.browser_fallback_url=".concat(encodeURIComponent(fallbackUrl)), 'end;']).join(';'); }; var getIosLoginUniversalLink = function getIosLoginUniversalLink() { var iosLoginUrl = makeAuthUrl(easyLoginAuthParams); var iosFallbackUrl = settings.isPopup ? iosLoginUrl : fallbackUrl; var iosEasyLoginUrl = "".concat(iosLoginUrl, "&ka=").concat(encodeURIComponent(KAKAO_AGENT)); var talkWebviewUrl = "".concat(URL.talkInappScheme, "?url=").concat(encodeURIComponent(iosEasyLoginUrl)); return "".concat(URL.universalKakaoLink).concat(encodeURIComponent(talkWebviewUrl), "&web=").concat(encodeURIComponent(iosFallbackUrl)); }; return UA.os.android ? getAndroidLoginIntent() : getIosLoginUniversalLink(); } function isTalkChannelHome(settings) { return settings.throughSyncplugin && isTalkWebview && /ch-home/i.test(UA.ua); } function executeSyncpluginScheme(webAuthParams) { var bizpluginParams = _objectSpread2(_objectSpread2({}, webAuthParams), {}, { is_popup: true, approval_window_type: 'v4_bizplugin' }); var query = encodeURIComponent(buildQueryString(bizpluginParams)); location.href = "".concat(URL.talkSyncpluginScheme, "&query=").concat(query); } function isSupportImplicitLogin(settings) { return settings.isPopup === false && !includePrompts(settings.prompts, 'cert') && window.kakaoweb && typeof window.kakaoweb.reqSignInLocation === 'function'; } function implicitLogin(settings) { var baseAuthParams = makeBaseAuthParams(settings); var webAuthParams = makeWebAuthParams(settings, baseAuthParams); var implicitLoginParams = buildQueryString(_objectSpread2(_objectSpread2({}, webAuthParams), {}, { is_popup: false, prompt: 'none' })); return kakaoweb.reqSignInLocation(implicitLoginParams).then(function (location) { var parsed = Object.fromEntries(new window.URL(location).searchParams); if (parsed.error === 'consent_required' && !includePrompts(settings.prompts, 'none') || parsed.error === 'interaction_required') { return true; } handleResponse(settings, _objectSpread2(_objectSpread2({}, parsed.code && { code: parsed.code }), parsed.error && { error: parsed.error, error_description: parsed.error_description })); return false; })["catch"](function (error) { return false; }); } var oauth = /*#__PURE__*/Object.freeze({ __proto__: null, authorize: authorize }); function isAndroidWebView() { return UA.os.android && (olderAndroidWebView() || oldAndroidWebView() || newerAndroidWebView()); } function olderAndroidWebView() { return UA.os.version.major == 2 && /Version\/\d+.\d+|/i.test(UA.ua); } function oldAndroidWebView() { return UA.os.version.major == 4 && UA.os.version.minor < 4 && /Version\/\d+.\d+|/i.test(UA.ua); } function newerAndroidWebView() { return /Version\/\d+\.\d+/i.test(UA.ua) && (/Chrome\/\d+\.\d+\.\d+\.\d+ Mobile/i.test(UA.ua) || /; wv\)/i.test(UA.ua)); } function isIOSKakaoTalkWebView() { return UA.os.ios && isTalkWebview; } function isAndroidKakaoTalkWebView() { return UA.os.android && isTalkWebview; } function isNewerAndroidKakaoTalkWebView() { return UA.os.android && isTalkWebview && UA.browser.chrome && UA.browser.version.major >= 71; } function commonjsRequire(path) { throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); } var es6Promise = {exports: {}}; (function (module, exports) { (function (global, factory) { module.exports = factory() ; })(commonjsGlobal, function () { function objectOrFunction(x) { var type = typeof x; return x !== null && (type === 'object' || type === 'function'); } function isFunction(x) { return typeof x === 'function'; } var _isArray = void 0; if (Array.isArray) { _isArray = Array.isArray; } else { _isArray = function (x) { return Object.prototype.toString.call(x) === '[object Array]'; }; } var isArray = _isArray; var len = 0; var vertxNext = void 0; var customSchedulerFn = void 0; var asap = function asap(callback, arg) { queue[len] = callback; queue[len + 1] = arg; len += 2; if (len === 2) { if (customSchedulerFn) { customSchedulerFn(flush); } else { scheduleFlush(); } } }; function setScheduler(scheduleFn) { customSchedulerFn = scheduleFn; } function setAsap(asapFn) { asap = asapFn; } var browserWindow = typeof window !== 'undefined' ? window : undefined; var browserGlobal = browserWindow || {}; var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; function useNextTick() { return function () { return process.nextTick(flush); }; } function useVertxTimer() { if (typeof vertxNext !== 'undefined') { return function () { vertxNext(flush); }; } return useSetTimeout(); } function useMutationObserver() { var iterations = 0; var observer = new BrowserMutationObserver(flush); var node = document.createTextNode(''); observer.observe(node, { characterData: true }); return function () { node.data = iterations = ++iterations % 2; }; } function useMessageChannel() { var channel = new MessageChannel(); channel.port1.onmessage = flush; return function () { return channel.port2.postMessage(0); }; } function useSetTimeout() { var globalSetTimeout = setTimeout; return function () { return globalSetTimeout(flush, 1); }; } var queue = new Array(1000); function flush() { for (var i = 0; i < len; i += 2) { var callback = queue[i]; var arg = queue[i + 1]; callback(arg); queue[i] = undefined; queue[i + 1] = undefined; } len = 0; } function attemptVertx() { try { var vertx = Function('return this')().require('vertx'); vertxNext = vertx.runOnLoop || vertx.runOnContext; return useVertxTimer(); } catch (e) { return useSetTimeout(); } } var scheduleFlush = void 0; if (isNode) { scheduleFlush = useNextTick(); } else if (BrowserMutationObserver) { scheduleFlush = useMutationObserver(); } else if (isWorker) { scheduleFlush = useMessageChannel(); } else if (browserWindow === undefined && typeof commonjsRequire === 'function') { scheduleFlush = attemptVertx(); } else { scheduleFlush = useSetTimeout(); } function then(onFulfillment, onRejection) { var parent = this; var child = new this.constructor(noop); if (child[PROMISE_ID] === undefined) { makePromise(child); } var _state = parent._state; if (_state) { var callback = arguments[_state - 1]; asap(function () { return invokeCallback(_state, child, callback, parent._result); }); } else { subscribe(parent, child, onFulfillment, onRejection); } return child; } function resolve$1(object) { var Constructor = this; if (object && typeof object === 'object' && object.constructor === Constructor) { return object; } var promise = new Constructor(noop); resolve(promise, object); return promise; } var PROMISE_ID = Math.random().toString(36).substring(2); function noop() {} var PENDING = void 0; var FULFILLED = 1; var REJECTED = 2; function selfFulfillment() { return new TypeError("You cannot resolve a promise with itself"); } function cannotReturnOwn() { return new TypeError('A promises callback cannot return that same promise.'); } function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) { try { then$$1.call(value, fulfillmentHandler, rejectionHandler); } catch (e) { return e; } } function handleForeignThenable(promise, thenable, then$$1) { asap(function (promise) { var sealed = false; var error = tryThen(then$$1, thenable, function (value) { if (sealed) { return; } sealed = true; if (thenable !== value) { resolve(promise, value); } else { fulfill(promise, value); } }, function (reason) { if (sealed) { return; } sealed = true; reject(promise, reason); }, 'Settle: ' + (promise._label || ' unknown promise')); if (!sealed && error) { sealed = true; reject(promise, error); } }, promise); } function handleOwnThenable(promise, thenable) { if (thenable._state === FULFILLED) { fulfill(promise, thenable._result); } else if (thenable._state === REJECTED) { reject(promise, thenable._result); } else { subscribe(thenable, undefined, function (value) { return resolve(promise, value); }, function (reason) { return reject(promise, reason); }); } } function handleMaybeThenable(promise, maybeThenable, then$$1) { if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) { handleOwnThenable(promise, maybeThenable); } else { if (then$$1 === undefined) { fulfill(promise, maybeThenable); } else if (isFunction(then$$1)) { handleForeignThenable(promise, maybeThenable, then$$1); } else { fulfill(promise, maybeThenable); } } } function resolve(promise, value) { if (promise === value) { reject(promise, selfFulfillment()); } else if (objectOrFunction(value)) { var then$$1 = void 0; try { then$$1 = value.then; } catch (error) { reject(promise, error); return; } handleMaybeThenable(promise, value, then$$1); } else { fulfill(promise, value); } } function publishRejection(promise) { if (promise._onerror) { promise._onerror(promise._result); } publish(promise); } function fulfill(promise, value) { if (promise._state !== PENDING) { return; } promise._result = value; promise._state = FULFILLED; if (promise._subscribers.length !== 0) { asap(publish, promise); } } function reject(promise, reason) { if (promise._state !== PENDING) { return; } promise._state = REJECTED; promise._result = reason; asap(publishRejection, promise); } function subscribe(parent, child, onFulfillment, onRejection) { var _subscribers = parent._subscribers; var length = _subscribers.length; parent._onerror = null; _subscribers[length] = child; _subscribers[length + FULFILLED] = onFulfillment; _subscribers[length + REJECTED] = onRejection; if (length === 0 && parent._state) { asap(publish, parent); } } function publish(promise) { var subscribers = promise._subscribers; var settled = promise._state; if (subscribers.length === 0) { return; } var child = void 0, callback = void 0, detail = promise._result; for (var i = 0; i < subscribers.length; i += 3) { child = subscribers[i]; callback = subscribers[i + settled]; if (child) { invokeCallback(settled, child, callback, detail); } else { callback(detail); } } promise._subscribers.length = 0; } function invokeCallback(settled, promise, callback, detail) { var hasCallback = isFunction(callback), value = void 0, error = void 0, succeeded = true; if (hasCallback) { try { value = callback(detail); } catch (e) { succeeded = false; error = e; } if (promise === value) { reject(promise, cannotReturnOwn()); return; } } else { value = detail; } if (promise._state !== PENDING) ; else if (hasCallback && succeeded) { resolve(promise, value); } else if (succeeded === false) { reject(promise, error); } else if (settled === FULFILLED) { fulfill(promise, value); } else if (settled === REJECTED) { reject(promise, value); } } function initializePromise(promise, resolver) { try { resolver(function resolvePromise(value) { resolve(promise, value); }, function rejectPromise(reason) { reject(promise, reason); }); } catch (e) { reject(promise, e); } } var id = 0; function nextId() { return id++; } function makePromise(promise) { promise[PROMISE_ID] = id++; promise._state = undefined; promise._result = undefined; promise._subscribers = []; } function validationError() { return new Error('Array Methods must be provided an Array'); } var Enumerator = function () { function Enumerator(Constructor, input) { this._instanceConstructor = Constructor; this.promise = new Constructor(noop); if (!this.promise[PROMISE_ID]) { makePromise(this.promise); } if (isArray(input)) { this.length = input.length; this._remaining = input.length; this._result = new Array(this.length); if (this.length === 0) { fulfill(this.promise, this._result); } else { this.length = this.length || 0; this._enumerate(input); if (this._remaining === 0) { fulfill(this.promise, this._result); } } } else { reject(this.promise, validationError()); } } Enumerator.prototype._enumerate = function _enumerate(input) { for (var i = 0; this._state === PENDING && i < input.length; i++) { this._eachEntry(input[i], i); } }; Enumerator.prototype._eachEntry = function _eachEntry(entry, i) { var c = this._instanceConstructor; var resolve$$1 = c.resolve; if (resolve$$1 === resolve$1) { var _then = void 0; var error = void 0; var didError = false; try { _then = entry.then; } catch (e) { didError = true; error = e; } if (_then === then && entry._state !== PENDING) { this._settledAt(entry._state, i, entry._result); } else if (typeof _then !== 'function') { this._remaining--; this._result[i] = entry; } else if (c === Promise$1) { var promise = new c(noop); if (didError) { reject(promise, error); } else { handleMaybeThenable(promise, entry, _then); } this._willSettleAt(promise, i); } else { this._willSettleAt(new c(function (resolve$$1) { return resolve$$1(entry); }), i); } } else { this._willSettleAt(resolve$$1(entry), i); } }; Enumerator.prototype._settledAt = function _settledAt(state, i, value) { var promise = this.promise; if (promise._state === PENDING) { this._remaining--; if (state === REJECTED) { reject(promise, value); } else { this._result[i] = value; } } if (this._remaining === 0) { fulfill(promise, this._result); } }; Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) { var enumerator = this; subscribe(promise, undefined, function (value) { return enumerator._settledAt(FULFILLED, i, value); }, function (reason) { return enumerator._settledAt(REJECTED, i, reason); }); }; return Enumerator; }(); function all(entries) { return new Enumerator(this, entries).promise; } function race(entries) { var Constructor = this; if (!isArray(entries)) { return new Constructor(function (_, reject) { return reject(new TypeError('You must pass an array to race.')); }); } else { return new Constructor(function (resolve, reject) { var length = entries.length; for (var i = 0; i < length; i++) { Constructor.resolve(entries[i]).then(resolve, reject); } }); } } function reject$1(reason) { var Constructor = this; var promise = new Constructor(noop); reject(promise, reason); return promise; } function needsResolver() { throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); } function needsNew() { throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); } var Promise$1 = function () { function Promise(resolver) { this[PROMISE_ID] = nextId(); this._result = this._state = undefined; this._subscribers = []; if (noop !== resolver) { typeof resolver !== 'function' && needsResolver(); this instanceof Promise ? initializePromise(this, resolver) : needsNew(); } } Promise.prototype.catch = function _catch(onRejection) { return this.then(null, onRejection); }; Promise.prototype.finally = function _finally(callback) { var promise = this; var constructor = promise.constructor; if (isFunction(callback)) { return promise.then(function (value) { return constructor.resolve(callback()).then(function () { return value; }); }, function (reason) { return constructor.resolve(callback()).then(function () { throw reason; }); }); } return promise.then(callback, callback); }; return Promise; }(); Promise$1.prototype.then = then; Promise$1.all = all; Promise$1.race = race; Promise$1.resolve = resolve$1; Promise$1.reject = reject$1; Promise$1._setScheduler = setScheduler; Promise$1._setAsap = setAsap; Promise$1._asap = asap; function polyfill() { var local = void 0; if (typeof commonjsGlobal !== 'undefined') { local = commonjsGlobal; } else if (typeof self !== 'undefined') { local = self; } else { try { local = Function('return this')(); } catch (e) { throw new Error('polyfill failed because global object is unavailable in this environment'); } } var P = local.Promise; if (P) { var promiseToString = null; try { promiseToString = Object.prototype.toString.call(P.resolve()); } catch (e) { } if (promiseToString === '[object Promise]' && !P.cast) { return; } } local.Promise = Promise$1; } Promise$1.polyfill = polyfill; Promise$1.Promise = Promise$1; return Promise$1; }); })(es6Promise); var easyXDM_1 = function () { (function (O, d, q, L, l, I) { var b = this || O; var o = Math.floor(Math.random() * 10000); var r = Function.prototype; var R = /^((http.?:)\/\/([^:\/\s]+)(:\d+)*)/; var S = /[\-\w]+\/\.\.\//; var G = /([^:])\/\//g; var J = ""; var p = {}; var N = O.easyXDM; var V = "easyXDM_"; var F; var z = false; var j; var i; function D(Y, aa) { var Z = _typeof(Y[aa]); return Z == "function" || !!(Z == "object" && Y[aa]) || Z == "unknown"; } function v(Y, Z) { return !!(_typeof(Y[Z]) == "object" && Y[Z]); } function s(Y) { return Object.prototype.toString.call(Y) === "[object Array]"; } function c() { var aa = "Shockwave Flash", ae = "application/x-shockwave-flash"; if (!u(navigator.plugins) && _typeof(navigator.plugins[aa]) == "object") { var ac = navigator.plugins[aa].description; if (ac && !u(navigator.mimeTypes) && navigator.mimeTypes[ae] && navigator.mimeTypes[ae].enabledPlugin) { j = ac.match(/\d+/g); } } if (!j) { var Z; try { Z = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); j = Array.prototype.slice.call(Z.GetVariable("$version").match(/(\d+),(\d+),(\d+),(\d+)/), 1); Z = null; } catch (ad) {} } if (!j) { return false; } var Y = parseInt(j[0], 10), ab = parseInt(j[1], 10); i = Y > 9 && ab > 0; return true; } var w, y; if (D(O, "addEventListener")) { w = function w(aa, Y, Z) { aa.addEventListener(Y, Z, false); }; y = function y(aa, Y, Z) { aa.removeEventListener(Y, Z, false); }; } else { if (D(O, "attachEvent")) { w = function w(Y, aa, Z) { Y.attachEvent("on" + aa, Z); }; y = function y(Y, aa, Z) { Y.detachEvent("on" + aa, Z); }; } else { throw new Error("Browser not supported"); } } var X = false, K = [], M; if ("readyState" in d) { M = d.readyState; X = M == "complete" || ~navigator.userAgent.indexOf("AppleWebKit/") && (M == "loaded" || M == "interactive"); } else { X = !!d.body; } function t() { if (X) { return; } X = true; for (var Y = 0; Y < K.length; Y++) { K[Y](); } K.length = 0; } if (!X) { if (D(O, "addEventListener")) { w(d, "DOMContentLoaded", t); } else { w(d, "readystatechange", function () { if (d.readyState == "complete") { t(); } }); if (d.documentElement.doScroll && O === top) { var h = function h() { if (X) { return; } try { d.documentElement.doScroll("left"); } catch (Y) { L(h, 1); return; } t(); }; h(); } } w(O, "load", t); } function H(Z, Y) { if (X) { Z.call(Y); return; } K.push(function () { Z.call(Y); }); } function n() { var aa = parent; if (J !== "") { for (var Y = 0, Z = J.split("."); Y < Z.length; Y++) { aa = aa[Z[Y]]; } } return aa.easyXDM; } function f(Y) { O.easyXDM = N; J = Y; if (J) { V = "easyXDM_" + J.replace(".", "_") + "_"; } return p; } function A(Y) { return Y.match(R)[3]; } function g(Y) { return Y.match(R)[4] || ""; } function k(aa) { if (aa.indexOf("file://") >= 0) { return "file://"; } var Y = aa.toLowerCase().match(R); if (!Y) { return ""; } var ab = Y[2], ac = Y[3], Z = Y[4] || ""; if (ab == "http:" && Z == ":80" || ab == "https:" && Z == ":443") { Z = ""; } return ab + "//" + ac + Z; } function C(Y) { Y = Y.replace(G, "$1/"); if (!Y.match(/^(http||https):\/\//)) { var Z = Y.substring(0, 1) === "/" ? "" : q.pathname; if (Z.substring(Z.length - 1) !== "/") { Z = Z.substring(0, Z.lastIndexOf("/") + 1); } Y = q.protocol + "//" + q.host + Z + Y; } while (S.test(Y)) { Y = Y.replace(S, ""); } return Y; } function Q(Y, ab) { var ad = "", aa = Y.indexOf("#"); if (aa !== -1) { ad = Y.substring(aa); Y = Y.substring(0, aa); } var ac = []; for (var Z in ab) { if (ab.hasOwnProperty(Z)) { ac.push(Z + "=" + I(ab[Z])); } } return Y + (z ? "#" : Y.indexOf("?") == -1 ? "?" : "&") + ac.join("&") + ad; } var T = function (Y) { Y = Y.substring(1).split("&"); var aa = {}, ab, Z = Y.length; while (Z--) { ab = Y[Z].split("="); aa[ab[0]] = l(ab[1]); } return aa; }(/xdm_e=/.test(q.search) ? q.search : q.hash); function u(Y) { return typeof Y === "undefined"; } var _P = function P() { var Z = {}; var aa = { a: [1, 2, 3] }, Y = '{"a":[1,2,3]}'; if (typeof JSON != "undefined" && typeof JSON.stringify === "function" && JSON.stringify(aa).replace(/\s/g, "") === Y) { return JSON; } if (Object.toJSON) { if (Object.toJSON(aa).replace(/\s/g, "") === Y) { Z.stringify = Object.toJSON; } } if (typeof String.prototype.evalJSON === "function") { aa = Y.evalJSON(); if (aa.a && aa.a.length === 3 && aa.a[2] === 3) { Z.parse = function (ab) { return ab.evalJSON(); }; } } if (Z.stringify && Z.parse) { _P = function P() { return Z; }; return Z; } return null; }; function U(Y, Z, aa) { var ac; for (var ab in Z) { if (Z.hasOwnProperty(ab)) { if (ab in Y) { ac = Z[ab]; if (_typeof(ac) === "object") { U(Y[ab], ac, aa); } else { if (!aa) { Y[ab] = Z[ab]; } } } else { Y[ab] = Z[ab]; } } } return Y; } function a() { var Z = d.body.appendChild(d.createElement("form")), Y = Z.appendChild(d.createElement("input")); Y.name = V + "TEST" + o; F = Y !== Z.elements[Y.name]; d.body.removeChild(Z); } function B(Z) { if (u(F)) { a(); } var ad; if (F) { ad = d.createElement('