@megawubs/avid
Version:
API consumption on fire, inspired by Laravel's Eloquent
100 lines (76 loc) • 286 kB
JavaScript
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // identity function for calling harmory imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/ // define getter function for harmory exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ };
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 38);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
eval("'use strict';\n\nvar bind = __webpack_require__(16);\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vYXhpb3MvbGliL3V0aWxzLmpzP2VkYTEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8qZ2xvYmFsIHRvU3RyaW5nOnRydWUqL1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJykgJiYgKHZhbCBpbnN0YW5jZW9mIEZvcm1EYXRhKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAodmFsLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJykucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgLT4gdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyAmJiAhaXNBcnJheShvYmopKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW1cbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYXhpb3MvbGliL3V0aWxzLmpzXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=");
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
eval("/* harmony export (immutable) */ exports[\"map\"] = map;\nfunction map(model, response) {\n var resolved = (response.constructor === Array)\n ? mapResponseToMultiple(response, model)\n : mapResponseToModel(response, model);\n return Promise.resolve(resolved);\n}\n\nfunction mapResponseToModel(response, bluePrint) {\n var model = (typeof bluePrint === 'function') ? new bluePrint : bluePrint;\n for (var key in response) {\n if (response.hasOwnProperty(key)) {\n model.properties[key] = response[key];\n model.originals[key] = response[key];\n //make sure relations aren't set directly on the model.\n if (typeof model[key] === 'undefined') {\n model[key] = response[key];\n }\n\n }\n }\n return model;\n}\n\nfunction mapResponseToMultiple(response, model) {\n return response.map(function (item) {\n return mapResponseToModel(item, model);\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zb3VyY2UvbWFwLmpzP2MwNDkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIG1hcChtb2RlbCwgcmVzcG9uc2UpIHtcbiAgICBsZXQgcmVzb2x2ZWQgPSAocmVzcG9uc2UuY29uc3RydWN0b3IgPT09IEFycmF5KVxuICAgICAgICA/IG1hcFJlc3BvbnNlVG9NdWx0aXBsZShyZXNwb25zZSwgbW9kZWwpXG4gICAgICAgIDogbWFwUmVzcG9uc2VUb01vZGVsKHJlc3BvbnNlLCBtb2RlbCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNvbHZlZCk7XG59XG5cbmZ1bmN0aW9uIG1hcFJlc3BvbnNlVG9Nb2RlbChyZXNwb25zZSwgYmx1ZVByaW50KSB7XG4gICAgbGV0IG1vZGVsID0gKHR5cGVvZiBibHVlUHJpbnQgPT09ICdmdW5jdGlvbicpID8gbmV3IGJsdWVQcmludCA6IGJsdWVQcmludDtcbiAgICBmb3IgKGxldCBrZXkgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIG1vZGVsLnByb3BlcnRpZXNba2V5XSA9IHJlc3BvbnNlW2tleV07XG4gICAgICAgICAgICBtb2RlbC5vcmlnaW5hbHNba2V5XSA9IHJlc3BvbnNlW2tleV07XG4gICAgICAgICAgICAvL21ha2Ugc3VyZSByZWxhdGlvbnMgYXJlbid0IHNldCBkaXJlY3RseSBvbiB0aGUgbW9kZWwuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1vZGVsW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxba2V5XSA9IHJlc3BvbnNlW2tleV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kZWw7XG59XG5cbmZ1bmN0aW9uIG1hcFJlc3BvbnNlVG9NdWx0aXBsZShyZXNwb25zZSwgbW9kZWwpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBtYXBSZXNwb25zZVRvTW9kZWwoaXRlbSwgbW9kZWwpO1xuICAgIH0pO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNvdXJjZS9tYXAuanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OyIsInNvdXJjZVJvb3QiOiIifQ==");
/***/ },
/* 2 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__avid__ = __webpack_require__(4);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"Api\", function() { return Api; });\n\nvar axios = __webpack_require__(5);\n/**\n * Communication layer for the api\n */\nvar Api = function Api(resource) {\n this.resource = resource;\n};\n\nApi.prototype.getJson = function getJson (response) {\n return response['data'];\n};\n\nApi.prototype.all = function all (params) {\n if ( params === void 0 ) params = null;\n\n return axios\n .get(this.url(), {params: params == null ? {} : params})\n .then(this.getJson);\n};\n\nApi.prototype.find = function find (id, params) {\n if ( params === void 0 ) params = null;\n\n return axios\n .get(this.url(id), {params: params == null ? {} : params})\n .then(this.getJson);\n};\n\nApi.prototype.update = function update (model) {\n return axios\n .put(this.url(model.id), model)\n .then(this.getJson);\n};\n\nApi.prototype.delete = function delete$1 (id) {\n return axios\n .delete(this.url(id))\n};\n\nApi.prototype.create = function create (model) {\n return axios\n .post(this.url(), model)\n .then(this.getJson);\n};\n\nApi.prototype.relation = function relation (model, relation, resource, params) {\n if ( params === void 0 ) params = null;\n\n if (model.id === undefined) return Promise.reject('Unable to find relation, model has no identifier.');\n var api = new Api(this.uri(model.id, resource));\n return api.all(params);\n};\n\nApi.prototype.uri = function uri () {\n var parts = [], len = arguments.length;\n while ( len-- ) parts[ len ] = arguments[ len ];\n\n parts.splice(0, 0, this.resource);\n return parts.join('/').toLowerCase();\n};\n\nApi.prototype.url = function url () {\n var parts = [], len = arguments.length;\n while ( len-- ) parts[ len ] = arguments[ len ];\n\n parts.splice(0, 0, [__WEBPACK_IMPORTED_MODULE_0__avid__[\"Avid\"].baseUrl, this.resource].join('/'));\n return parts.join('/').toLowerCase();\n};\n\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zb3VyY2UvYXBpLmpzPzVlYzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBdmlkfSBmcm9tIFwiLi9hdmlkXCI7XG5sZXQgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpO1xuLyoqXG4gKiBDb21tdW5pY2F0aW9uIGxheWVyIGZvciB0aGUgYXBpXG4gKi9cbmV4cG9ydCBjbGFzcyBBcGkge1xuICAgIC8qKlxuICAgICAqIFRoZSBhcGkgbmVlZHMgdGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIG1vZGVsIHRvIGdldFxuICAgICAqIHNvIHRoYXQgaXQgY2FuIGJ1aWxkIHRoZSB1cmkgcmVxdWlyZWQgdG8gcmVhY2ggaXRcbiAgICAgKiBAcGFyYW0gcmVzb3VyY2VcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihyZXNvdXJjZSkge1xuICAgICAgICB0aGlzLnJlc291cmNlID0gcmVzb3VyY2U7XG4gICAgfVxuXG4gICAgZ2V0SnNvbihyZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICB9XG5cbiAgICBhbGwocGFyYW1zID0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYXhpb3NcbiAgICAgICAgICAgIC5nZXQodGhpcy51cmwoKSwge3BhcmFtczogcGFyYW1zID09IG51bGwgPyB7fSA6IHBhcmFtc30pXG4gICAgICAgICAgICAudGhlbih0aGlzLmdldEpzb24pO1xuICAgIH1cblxuICAgIGZpbmQoaWQsIHBhcmFtcyA9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGF4aW9zXG4gICAgICAgICAgICAuZ2V0KHRoaXMudXJsKGlkKSwge3BhcmFtczogcGFyYW1zID09IG51bGwgPyB7fSA6IHBhcmFtc30pXG4gICAgICAgICAgICAudGhlbih0aGlzLmdldEpzb24pO1xuICAgIH1cblxuICAgIHVwZGF0ZShtb2RlbCkge1xuICAgICAgICByZXR1cm4gYXhpb3NcbiAgICAgICAgICAgIC5wdXQodGhpcy51cmwobW9kZWwuaWQpLCBtb2RlbClcbiAgICAgICAgICAgIC50aGVuKHRoaXMuZ2V0SnNvbik7XG4gICAgfVxuXG4gICAgZGVsZXRlKGlkKSB7XG4gICAgICAgIHJldHVybiBheGlvc1xuICAgICAgICAgICAgLmRlbGV0ZSh0aGlzLnVybChpZCkpXG4gICAgfVxuXG4gICAgY3JlYXRlKG1vZGVsKSB7XG4gICAgICAgIHJldHVybiBheGlvc1xuICAgICAgICAgICAgLnBvc3QodGhpcy51cmwoKSwgbW9kZWwpXG4gICAgICAgICAgICAudGhlbih0aGlzLmdldEpzb24pO1xuICAgIH1cblxuICAgIHJlbGF0aW9uKG1vZGVsLCByZWxhdGlvbiwgcmVzb3VyY2UsIHBhcmFtcyA9IG51bGwpIHtcbiAgICAgICAgaWYgKG1vZGVsLmlkID09PSB1bmRlZmluZWQpIHJldHVybiBQcm9taXNlLnJlamVjdCgnVW5hYmxlIHRvIGZpbmQgcmVsYXRpb24sIG1vZGVsIGhhcyBubyBpZGVudGlmaWVyLicpO1xuICAgICAgICBsZXQgYXBpID0gbmV3IEFwaSh0aGlzLnVyaShtb2RlbC5pZCwgcmVzb3VyY2UpKTtcbiAgICAgICAgcmV0dXJuIGFwaS5hbGwocGFyYW1zKTtcbiAgICB9XG5cbiAgICB1cmkoLi4ucGFydHMpIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKDAsIDAsIHRoaXMucmVzb3VyY2UpO1xuICAgICAgICByZXR1cm4gcGFydHMuam9pbignLycpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgdXJsKC4uLnBhcnRzKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgwLCAwLCBbQXZpZC5iYXNlVXJsLCB0aGlzLnJlc291cmNlXS5qb2luKCcvJykpO1xuICAgICAgICByZXR1cm4gcGFydHMuam9pbignLycpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxufVxuXG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzb3VyY2UvYXBpLmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7O0FBSUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzsiLCJzb3VyY2VSb290IjoiIn0=");
/***/ },
/* 3 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__avid__ = __webpack_require__(4);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"Interaction\", function() { return Interaction; });\n\n\nvar Interaction = function Interaction(entity, source, params) {\n if ( params === void 0 ) params = null;\n\n this.source = source;\n this.params = params;\n this.entity = entity;\n\n this.resource = (typeof entity === 'object')\n ? [__WEBPACK_IMPORTED_MODULE_0__avid__[\"Avid\"].baseUrl, entity._resource, entity.id, source].join('/')\n : [__WEBPACK_IMPORTED_MODULE_0__avid__[\"Avid\"].baseUrl, (new entity)._resource, source].join('/');\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zb3VyY2UvYWN0aW9ucy9pbnRlcmFjdGlvbi5qcz83N2QyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXZpZH0gZnJvbSBcIi4uL2F2aWRcIjtcblxuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihlbnRpdHksIHNvdXJjZSwgcGFyYW1zID0gbnVsbCkge1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5O1xuXG4gICAgICAgIHRoaXMucmVzb3VyY2UgPSAodHlwZW9mIGVudGl0eSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICA/IFtBdmlkLmJhc2VVcmwsIGVudGl0eS5fcmVzb3VyY2UsIGVudGl0eS5pZCwgc291cmNlXS5qb2luKCcvJylcbiAgICAgICAgICAgIDogW0F2aWQuYmFzZVVybCwgKG5ldyBlbnRpdHkpLl9yZXNvdXJjZSwgc291cmNlXS5qb2luKCcvJyk7XG4gICAgfVxuXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc291cmNlL2FjdGlvbnMvaW50ZXJhY3Rpb24uanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Iiwic291cmNlUm9vdCI6IiJ9");
/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__api__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__map__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__proxyfy__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__relations_hasMany__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__relations_belongsTo__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__actions_interactsWith__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__actions_loadsFrom__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_validate_js__ = __webpack_require__(36);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_validate_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_validate_js__);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"Avid\", function() { return Avid; });\n\n\n\n\n\n\n\n\n\n/**\n * Avid\n *\n * An active record like approach to consuming an API, inspired by Laravel's Avid\n *\n * Example:\n *\n * export class User extends Avid{\n * get _version(){\n * return 'v1'\n * }\n *\n * posts(){\n * return this.hasMany(Post, 'posts');\n * }\n * }\n *\n * export class Post extends Avid{\n * get _version(){\n * return 'v1'\n * }\n *\n * user(){\n * return this.belongsTo(User);\n * }\n * }\n *\n * User.find(1) //model fetched from api\n * .then(user => user.posts) //fetch relations from api\n * .then(posts => console.log(posts)); //log relations\n *\n * Post.find(1) //model fetched from api\n * .then(post => post.user) //fetch relation from api\n * .then(post => console.log(post)); //log relation\n *\n * let user = new User(); //new up a user\n *\n * user.name = 'John'\n * user.email = 'do@john.com'\n * user.email = 'secret'\n * user.save()\n * .then(user => console.log(user.id)); //1 (saved user through the API)\n *\n * User.find(1).then(user => {\n * user.name = 'jane'\n * user.email = 'do@jane.com'\n * return user.save();\n * }).then(updatedUser => console.log(updatedUser.name)); //jane\n */\nvar AvidConfig = {\n baseUrl: null,\n storage: []\n};\nvar Avid = function Avid() {\n\n /**\n * A proxy of this object is returned during construction, this way we\n * can catch when a relation is requested and keep track of\n * changes made to the model.\n */\n this.properties = {};\n this.originals = {};\n return this.proxify();\n };\n\nvar prototypeAccessors = { _prefix: {},_version: {},_name: {},_resource: {},_rules: {},_actionsValidator: {} };\nvar staticAccessors = { baseUrl: {},storage: {} };\n\n /**\n * Fetch all items from the resource.\n *\n * @returns {Promise}\n */\n staticAccessors.baseUrl.set = function (url) {\n AvidConfig.baseUrl = url;\n return true;\n };\n\n staticAccessors.baseUrl.get = function () {\n return AvidConfig.baseUrl;\n };\n\n //noinspection JSAnnotator\n staticAccessors.storage.set = function (value) {\n AvidConfig.storage = value;\n return true;\n };\n\n /**\n * A way to retrieve the storage\n * @returns {Array}\n */\n staticAccessors.storage.get = function () {\n return AvidConfig.storage\n };\n\n\n /**\n * The prefix to use for requests, this is appended as the first element\n * to the baseUrl. By default it is 'api'.\n * usage:\n * Avid.baseUrl = 'http://foo.com'\n * class User extends Avid{\n* get _prefix(){\n* return 'secret'\n* }\n* }\n *\n * User.find(1) //request is made to http://foo.com/secret/user/1\n *\n * @returns {string}\n */\n prototypeAccessors._prefix.get = function () {\n return 'api';\n };\n\n /**\n * Gives Avid models the ability to use the correct versioned url.\n * For example\n * get _version(){\n*return 'v1';\n* }\n * Will result in the following uri: '/api/v1'\n */\n prototypeAccessors._version.get = function () {\n return null\n };\n\n /**\n * The name of the entity. This is used to build the resource url for the entity.\n *\n * @returns {string}\n * @private\n */\n prototypeAccessors._name.get = function () {\n return this.constructor.name.toLowerCase();\n };\n\n /**\n * The full resource for the entity.\n * It includes the prefix, version and name. If no version is set\n * it's not used and the resource will become the prefix and name\n *\n * @returns {string}\n * @private\n */\n prototypeAccessors._resource.get = function () {\n return ((this._version === null && this._prefix !== null)\n ? [this._prefix, this._name]\n : (this._version === null && this._prefix === null)\n ? [this._name]\n : [this._prefix, this._version, this._name]\n ).join('/');\n };\n\n prototypeAccessors._rules.get = function () {\n return {};\n };\n\n prototypeAccessors._actionsValidator.get = function () {\n return {}\n };\n\nAvid.all = function all () {\n var this$1 = this;\n\n var model = new this;\n if (Avid.storage.hasOwnProperty(model._name)) {\n return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__map__[\"map\"])(this, Avid.storage[model._name]);\n }\n var api = new __WEBPACK_IMPORTED_MODULE_0__api__[\"Api\"](model._resource);\n return api.all().then(function (response) { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__map__[\"map\"])(this$1, response); });\n };\n\n /**\n * Find as specific model by its id\n * @param id\n * @returns {Promise}\n */\n Avid.find = function find (id) {\n var this$1 = this;\n\n var model = new this;\n if (Avid.storage.hasOwnProperty(model._name)) {\n var items = Avid.storage[model._name].filter(function (model) { return model.id === id; });\n return (items.length === 1) ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__map__[\"map\"])(this, items[0]) : Promise.reject();\n }\n var api = new __WEBPACK_IMPORTED_MODULE_0__api__[\"Api\"](model._resource);\n return api.find(id).then(function (response) { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__map__[\"map\"])(this$1, response); });\n };\n\n /**\n * Save or update an existing or new model\n * @returns {Promise}\n */\n Avid.prototype.save = function save () {\n var this$1 = this;\n\n\n var self = this;\n var api = new __WEBPACK_IMPORTED_MODULE_0__api__[\"Api\"](self._resource);\n\n /**\n * Validate the model based on validate.js validation rules\n */\n var validation = self.validate();\n if (validation !== undefined) return Promise.reject(validation);\n\n /**\n * Resolve directly when there are no changes to the model, saving us\n * an accidental update or save of an unchanged model.\n */\n if (self.hasChanged === false) return Promise.resolve(self);\n\n /**\n * When we do `let model = new Model();` it has no id yet, this way we can\n * check if a model needs to be updated or saved\n */\n\n if (typeof self.id === 'undefined') {\n /**\n * When the id is not set, we assume the model is unknown to\n * the api. A create is necessary in this case so the api server\n * knows the model needs to be created, not updated.\n */\n return api.create(self.properties)\n .then(function (response) { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__map__[\"map\"])(this$1, response); })\n .catch(function (error) { return console.warn(\"Failed saving \" + self._name + \" due to'\", error); });\n\n }\n\n /**\n * When there is an id, preform an update of the model\n */\n return api.update(self.properties)\n .then(function (response) { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__map__[\"map\"])(this$1, response); })\n\n };\n\n Avid.prototype.delete = function delete$1 () {\n var self = this;\n var api = new __WEBPACK_IMPORTED_MODULE_0__api__[\"Api\"](self._resource);\n\n return api.delete(self.id);\n };\n\n /**\n * Defines a one to many relationship.\n *\n * @param relation\n * @param resource\n * @param params\n * @returns {HasMany}\n */\n Avid.prototype.hasMany = function hasMany (relation, resource, params) {\n if ( params === void 0 ) params = null;\n\n return new __WEBPACK_IMPORTED_MODULE_3__relations_hasMany__[\"HasMany\"](relation, resource, this.proxify(), params);\n };\n\n /**\n * Defines a many to one relationship.\n *\n * @param parent\n * @returns {BelongsTo}\n */\n Avid.prototype.belongsTo = function belongsTo (parent) {\n return new __WEBPACK_IMPORTED_MODULE_4__relations_belongsTo__[\"BelongsTo\"](parent, this.proxify());\n };\n\n /**\n * Defines an action method to interact with other\n * entities or itself, in other words: it changes information.\n * Lets say we have two models: User and Group.\n * A user can join a group and a group can invite users.\n *\n * group.invite(user); //a group invites a user.\n * user.accept(invite); // a user accepts a invite.\n * user.join(group); // a user joins a group.\n * user.leave(group); //a user leaves a group.\n * group.ban(user); //a group bans a user.\n *\n * @param entity\n * @param source\n * @param params\n * @returns {InteractsWith | Promise}\n */\n Avid.prototype.interactsWith = function interactsWith (entity, source, params) {\n if ( params === void 0 ) params = null;\n\n //make it possible to omit 'this' when the interaction is with the same object.\n if (typeof entity === 'string') {\n params = source;\n source = entity;\n entity = this;\n }\n var errors = this.validate(source, params);\n if (errors) {\n return Promise.reject(errors);\n }\n return new __WEBPACK_IMPORTED_MODULE_5__actions_interactsWith__[\"InteractsWith\"](entity, source, params);\n };\n\n /**\n * Makes it possible to do Model.interactsWith.\n * This is useful when you have a interaction directly on the\n * resource, like this: [post] api/v1/group/search. The method for this will be:\n *\n * Definition:\n * export class Group extends Avid{\n*\n* static search(query){\n* return this.interactsWith('search', {query: query};\n* }\n*\n* }\n *\n * Usage:\n * Group.search('stuff').then(result => {...});\n * @param source\n * @param params\n * @returns {InteractsWith}\n */\n Avid.interacsWith = function interacsWith (source, params) {\n if ( params === void 0 ) params = null;\n\n var model = new this;\n return model.interactsWith(this, source, params);\n };\n\n /**\n * Defines an action method that only retrieves information. It does not make changes.\n * Lets say we have two models: User and Group.\n *\n * A group has metrics and a user has extended profile information\n * group.metrics(); //get the group metrics\n * user.extendedProfile(); //gt the extended user profile\n *\n * @param entity\n * @param source\n * @param params\n * @returns {LoadsFrom | Promise}\n */\n Avid.prototype.loadsFrom = function loadsFrom (entity, source, params) {\n if ( params === void 0 ) params = null;\n\n if (typeof entity === 'string') {\n params = source;\n source = entity;\n entity = this;\n }\n var errors = this.validate(source, params);\n if (errors) {\n return Promise.reject(errors);\n }\n return new __WEBPACK_IMPORTED_MODULE_6__actions_loadsFrom__[\"LoadsFrom\"](entity, source, params);\n };\n\n /**\n * Makes it possible to do Model.loadsFrom.\n * This is useful when you have an action directly on the\n * resource, like this: [get] api/v1/group/search. The method for this will be:\n *\n * Definition:\n * export class Group extends Avid{\n*\n* static search(query){\n* return this.loadsFrom('search', {query: query};\n* }\n*\n* }\n *\n * Usage:\n * Group.search('stuff').then(result => {...});\n *\n * @param source\n * @param params\n * @returns {LoadsFrom}\n */\n Avid.loadsFrom = function loadsFrom (source, params) {\n if ( params === void 0 ) params = null;\n\n var model = new this;\n return model.loadsFrom(this, source, params);\n };\n\n /**\n * We need a way to register get and set actions on a model to be able to set\n * the properties directly on the model. ES6 has no thing like magic methods, instead\n * it has Proxy's. This is an object that sits in between the object it proxy's and\n * the object that the actions are being preformed on.\n *\n * This way, we can catch get and set operations on a Avid instance!\n * let user = new User();\n * user.name = 'Bram';\n *\n * the set action for the name property is intercepted by the proxy,\n * setting it on the properties property. By doing this we can keep track of changes and\n * revert them if needed.\n *\n *\n * @returns {ModelProxy}\n */\n Avid.prototype.proxify = function proxify () {\n return new __WEBPACK_IMPORTED_MODULE_2__proxyfy__[\"ModelProxy\"](this);\n };\n\n /**\n * Validate the request. When no parameters are given\n * the default validation rules in this._rules are used to\n * validate this.properties. When both the parameters are given\n * it is assumed to be an interaction, thus this._actionsValidator is\n * used to find a corresponding method name to the resource url, only the last\n * part in camelCase. For example, when you have the following request:\n * `[POST] http://my.api.com/v1/user/5/send-post-cart {cart:5, message: 'hello'}`\n * the method on the validator object returned by this._actionsValidator should be\n * sendPostCart. This method should return the validate.js object for the parameters.\n *\n * @param name\n * @param values\n * @returns {*}\n */\n Avid.prototype.validate = function validate$1 (name, values) {\n if ( name === void 0 ) name = null;\n if ( values === void 0 ) values = null;\n\n if (name === null && values === null) {\n return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7_validate_js__[\"validate\"])(this.properties, this._rules)\n }\n if (name === null) {\n return;\n }\n name = name.split('-').map(function (word) { return word.charAt(0).toUpperCase() + word.slice(1); }).join('');\n name = name.charAt(0).toLowerCase() + name.slice(1);\n if (typeof this._actionsValidator[name] == 'function') {\n return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7_validate_js__[\"validate\"])(values, this._actionsValidator[name]());\n }\n };\n\n Avid.prototype.reset = function reset (error) {\n var self = this;\n Object.keys(this.originals).forEach(function (key) {\n if (typeof self[key] !== 'function') {\n self[key] = self.originals[key];\n }\n });\n return Promise.reject(error);\n };\n\n Avid.fill = function fill () {\n Object.keys(avidItems).forEach(function (modelName) {\n Avid.storage[modelName] = avidItems[modelName];\n });\n };\n\nObject.defineProperties( Avid.prototype, prototypeAccessors );\nObject.defineProperties( Avid, staticAccessors );\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zb3VyY2UvYXZpZC5qcz8xNDU3Iiwid2VicGFjazovLy8/ZDQxZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FwaX0gZnJvbSBcIi4vYXBpXCI7XG5pbXBvcnQge21hcH0gZnJvbSBcIi4vbWFwXCI7XG5pbXBvcnQge01vZGVsUHJveHl9IGZyb20gXCIuL3Byb3h5ZnlcIjtcbmltcG9ydCB7SGFzTWFueX0gZnJvbSBcIi4vcmVsYXRpb25zL2hhc01hbnlcIjtcbmltcG9ydCB7QmVsb25nc1RvfSBmcm9tIFwiLi9yZWxhdGlvbnMvYmVsb25nc1RvXCI7XG5pbXBvcnQge0ludGVyYWN0c1dpdGh9IGZyb20gXCIuL2FjdGlvbnMvaW50ZXJhY3RzV2l0aFwiO1xuaW1wb3J0IHtMb2Fkc0Zyb219IGZyb20gXCIuL2FjdGlvbnMvbG9hZHNGcm9tXCI7XG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tIFwidmFsaWRhdGUuanNcIjtcblxuLyoqXG4gKiBBdmlkXG4gKlxuICogQW4gYWN0aXZlIHJlY29yZCBsaWtlIGFwcHJvYWNoIHRvIGNvbnN1bWluZyBhbiBBUEksIGluc3BpcmVkIGJ5IExhcmF2ZWwncyBBdmlkXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBleHBvcnQgY2xhc3MgVXNlciBleHRlbmRzIEF2aWR7XG4gKiAgICBnZXQgX3ZlcnNpb24oKXtcbiAqICAgICAgcmV0dXJuICd2MSdcbiAqICAgIH1cbiAqXG4gKiAgICBwb3N0cygpe1xuICogICAgICByZXR1cm4gdGhpcy5oYXNNYW55KFBvc3QsICdwb3N0cycpO1xuICogICAgfVxuICogfVxuICpcbiAqIGV4cG9ydCBjbGFzcyBQb3N0IGV4dGVuZHMgQXZpZHtcbiAqICAgZ2V0IF92ZXJzaW9uKCl7XG4gKiAgICByZXR1cm4gJ3YxJ1xuICogICB9XG4gKlxuICogICB1c2VyKCl7XG4gKiAgICAgcmV0dXJuIHRoaXMuYmVsb25nc1RvKFVzZXIpO1xuICogICB9XG4gKiB9XG4gKlxuICogVXNlci5maW5kKDEpIC8vbW9kZWwgZmV0Y2hlZCBmcm9tIGFwaVxuICogLnRoZW4odXNlciA9PiB1c2VyLnBvc3RzKSAvL2ZldGNoIHJlbGF0aW9ucyBmcm9tIGFwaVxuICogLnRoZW4ocG9zdHMgPT4gY29uc29sZS5sb2cocG9zdHMpKTsgLy9sb2cgcmVsYXRpb25zXG4gKlxuICogIFBvc3QuZmluZCgxKSAvL21vZGVsIGZldGNoZWQgZnJvbSBhcGlcbiAqICAudGhlbihwb3N0ID0+IHBvc3QudXNlcikgLy9mZXRjaCByZWxhdGlvbiBmcm9tIGFwaVxuICogIC50aGVuKHBvc3QgPT4gY29uc29sZS5sb2cocG9zdCkpOyAvL2xvZyByZWxhdGlvblxuICpcbiAqICBsZXQgdXNlciA9IG5ldyBVc2VyKCk7IC8vbmV3IHVwIGEgdXNlclxuICpcbiAqICB1c2VyLm5hbWUgPSAnSm9obidcbiAqICB1c2VyLmVtYWlsID0gJ2RvQGpvaG4uY29tJ1xuICogIHVzZXIuZW1haWwgPSAnc2VjcmV0J1xuICogIHVzZXIuc2F2ZSgpXG4gKiAgICAudGhlbih1c2VyID0+IGNvbnNvbGUubG9nKHVzZXIuaWQpKTsgLy8xIChzYXZlZCB1c2VyIHRocm91Z2ggdGhlIEFQSSlcbiAqXG4gKiAgVXN