eventman/static/js/eda.easyFormViewer.js

182 lines
No EOL
590 KiB
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] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = 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;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "http://localhost:8080/";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
eval("'use strict';\n\n__webpack_require__(1);\n\n__webpack_require__(6);\n\n__webpack_require__(19);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvaW5kZXguanM/NzYxNCJdLCJuYW1lcyI6WyJyZXF1aXJlIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUVBOztBQURBLG1CQUFBQSxDQUFRLEVBQVIiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnLi92ZW5kb3JzJztcbnJlcXVpcmUoJy4vc3R5bGUvZm9ybXZpZXdlci5zY3NzJyk7XG5pbXBvcnQgJy4vbWFpbic7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2Zvcm12aWV3ZXIvaW5kZXguanMiXSwic291cmNlUm9vdCI6IiJ9");
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
eval("'use strict';\n\n__webpack_require__(2);\n\n__webpack_require__(3);\n\n__webpack_require__(5);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvdmVuZG9ycy5qcz9mN2JlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0EiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnYXBpLWNoZWNrJzsgLy8gTk9URTogYWx3YXlzIGltcG9ydGVkIGJlZm9yZSBhbmd1bGFyLWZvcm1seSFcbmltcG9ydCAnYW5ndWxhci1mb3JtbHknO1xuaW1wb3J0ICdhbmd1bGFyLWZvcm1seS10ZW1wbGF0ZXMtYm9vdHN0cmFwJztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZm9ybXZpZXdlci92ZW5kb3JzLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==");
/***/ },
/* 2 */
/***/ function(module, exports, __webpack_require__) {
eval("//! api-check version 7.5.5 built with ♥ by Kent C. Dodds <kent@doddsfamily.us> (http://kent.doddsfamily.us) (ó ì_í)=óò=(ì_í ò)\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"apiCheck\"] = factory();\n\telse\n\t\troot[\"apiCheck\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n\tvar _apiCheck = __webpack_require__(1);\n\n\tvar _apiCheck2 = _interopRequireDefault(_apiCheck);\n\n\texports['default'] = _apiCheck2['default'];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar stringify = __webpack_require__(2);\n\tvar apiCheckUtil = __webpack_require__(3);\n\tvar each = apiCheckUtil.each;\n\tvar isError = apiCheckUtil.isError;\n\tvar t = apiCheckUtil.t;\n\tvar arrayify = apiCheckUtil.arrayify;\n\tvar getCheckerDisplay = apiCheckUtil.getCheckerDisplay;\n\tvar typeOf = apiCheckUtil.typeOf;\n\tvar getError = apiCheckUtil.getError;\n\n\tvar checkers = __webpack_require__(4);\n\tvar apiCheckApis = getApiCheckApis();\n\n\tmodule.exports = getApiCheckInstance;\n\tmodule.exports.VERSION = (\"7.5.5\");\n\tmodule.exports.utils = apiCheckUtil;\n\tmodule.exports.globalConfig = {\n\t verbose: false,\n\t disabled: false\n\t};\n\n\tvar apiCheckApiCheck = getApiCheckInstance({\n\t output: { prefix: 'apiCheck' }\n\t});\n\tmodule.exports.internalChecker = apiCheckApiCheck;\n\n\teach(checkers, function (checker, name) {\n\t return module.exports[name] = checker;\n\t});\n\n\tfunction getApiCheckInstance() {\n\t var config = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t var extraCheckers = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t /* eslint complexity:[2, 6] */\n\t if (apiCheckApiCheck && arguments.length) {\n\t apiCheckApiCheck['throw'](apiCheckApis.getApiCheckInstanceCheckers, arguments, {\n\t prefix: 'creating an apiCheck instance'\n\t });\n\t }\n\n\t var additionalProperties = {\n\t 'throw': getApiCheck(true),\n\t warn: getApiCheck(false),\n\t getErrorMessage: getErrorMessage,\n\t handleErrorMessage: handleErrorMessage,\n\t config: {\n\t output: config.output || {\n\t prefix: '',\n\t suffix: '',\n\t docsBaseUrl: ''\n\t },\n\t verbose: config.verbose || false,\n\t disabled: config.disabled || false\n\t },\n\t utils: apiCheckUtil\n\t };\n\n\t each(additionalProperties, function (wrapper, name) {\n\t return apiCheck[name] = wrapper;\n\t });\n\n\t var disabled = apiCheck.disabled || module.exports.globalConfig.disabled;\n\t each(checkers.getCheckers(disabled), function (checker, name) {\n\t return apiCheck[name] = checker;\n\t });\n\t each(extraCheckers, function (checker, name) {\n\t return apiCheck[name] = checker;\n\t });\n\n\t return apiCheck;\n\n\t /**\n\t * This is the instance function. Other things are attached to this see additional properties above.\n\t * @param {Array} api - the checkers to check with\n\t * @param {Array} args - the args to check\n\t * @param {Object} output - output options\n\t * @returns {Object} - if this has a failed = true property, then it failed\n\t */\n\t function apiCheck(api, args, output) {\n\t /* eslint complexity:[2, 8] */\n\t if (apiCheck.config.disabled || module.exports.globalConfig.disabled) {\n\t return {\n\t apiTypes: {}, argTypes: {},\n\t passed: true, message: '',\n\t failed: false\n\t }; // empty version of what is normally returned\n\t }\n\t checkApiCheckApi(arguments);\n\t if (!Array.isArray(api)) {\n\t api = [api];\n\t args = [args];\n\t } else {\n\t // turn arguments into an array\n\t args = Array.prototype.slice.call(args);\n\t }\n\t var messages = checkEnoughArgs(api, args);\n\t if (!messages.length) {\n\t // this is where we actually go perform the checks.\n\t messages = checkApiWithArgs(api, args);\n\t }\n\n\t var returnObject = getTypes(api, args);\n\t returnObject.args = args;\n\t if (messages.length) {\n\t returnObject.message = apiCheck.getErrorMessage(api, args, messages, output);\n\t returnObject.failed = true;\n\t returnObject.passed = false;\n\t } else {\n\t returnObject.message = '';\n\t returnObject.failed = false;\n\t returnObject.passed = true;\n\t }\n\t return returnObject;\n\t }\n\n\t /**\n\t * checkApiCheckApi, should be read like: check apiCheck api. As in, check the api for apiCheck :-)\n\t * @param {Array} checkApiArgs - args provided to apiCheck function\n\t */\n\t function checkApiCheckApi(checkApiArgs) {\n\t var api = checkApiArgs[0];\n\t var args = checkApiArgs[1];\n\t var isArrayOrArgs = Array.isArray(args) || args && typeof args === 'object' && typeof args.length === 'number';\n\n\t if (Array.isArray(api) && !isArrayOrArgs) {\n\t throw new Error(getErrorMessage(api, [args], ['If an array is provided for the api, an array must be provided for the args as well.'], { prefix: 'apiCheck' }));\n\t }\n\t // dog fooding here\n\t var errors = checkApiWithArgs(apiCheckApis.checkApiCheckApi, checkApiArgs);\n\t if (errors.length) {\n\t var message = apiCheck.getErrorMessage(apiCheckApis.checkApiCheckApi, checkApiArgs, errors, {\n\t prefix: 'apiCheck'\n\t });\n\t apiCheck.handleErrorMessage(message, true);\n\t }\n\t }\n\n\t function getApiCheck(shouldThrow) {\n\t return function apiCheckWrapper(api, args, output) {\n\t var result = apiCheck(api, args, output);\n\t apiCheck.handleErrorMessage(result.message, shouldThrow);\n\t return result; // wont get here if an error is thrown\n\t };\n\t }\n\n\t function handleErrorMessage(message, shouldThrow) {\n\t if (shouldThrow && message) {\n\t throw new Error(message);\n\t } else if (message) {\n\t /* eslint no-console:0 */\n\t console.warn(message);\n\t }\n\t }\n\n\t function getErrorMessage(api, args) {\n\t var messages = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];\n\t var output = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];\n\n\t var gOut = apiCheck.config.output || {};\n\t var prefix = getPrefix();\n\t var suffix = getSuffix();\n\t var url = getUrl();\n\t var message = 'apiCheck failed! ' + messages.join(', ');\n\t var passedAndShouldHavePassed = '\\n\\n' + buildMessageFromApiAndArgs(api, args);\n\t return (prefix + ' ' + message + ' ' + suffix + ' ' + (url || '') + passedAndShouldHavePassed).trim();\n\n\t function getPrefix() {\n\t var p = output.onlyPrefix;\n\t if (!p) {\n\t p = ((gOut.prefix || '') + ' ' + (output.prefix || '')).trim();\n\t }\n\t return p;\n\t }\n\n\t function getSuffix() {\n\t var s = output.onlySuffix;\n\t if (!s) {\n\t s = ((output.suffix || '') + ' ' + (gOut.suffix || '')).trim();\n\t }\n\t return s;\n\t }\n\n\t function getUrl() {\n\t var u = output.url;\n\t if (!u) {\n\t u = gOut.docsBaseUrl && output.urlSuffix && ('' + gOut.docsBaseUrl + output.urlSuffix).trim();\n\t }\n\t return u;\n\t }\n\t }\n\n\t function buildMessageFromApiAndArgs(api, args) {\n\t var _getTypes = getTypes(api, args);\n\n\t var apiTypes = _getTypes.apiTypes;\n\t var argTypes = _getTypes.argTypes;\n\n\t var copy = Array.prototype.slice.call(args || []);\n\t var replacedItems = [];\n\t replaceFunctionWithName(copy);\n\t var passedArgs = getObjectString(copy);\n\t argTypes = getObjectString(argTypes);\n\t apiTypes = getObjectString(apiTypes);\n\n\t return generateMessage();\n\n\t // functions\n\n\t function replaceFunctionWithName(obj) {\n\t each(obj, function (val, name) {\n\t /* eslint complexity:[2, 6] */\n\t if (replacedItems.indexOf(val) === -1) {\n\t // avoid recursive problems\n\t replacedItems.push(val);\n\t if (typeof val === 'object') {\n\t replaceFunctionWithName(obj);\n\t } else if (typeof val === 'function') {\n\t obj[name] = val.displayName || val.name || 'anonymous function';\n\t }\n\t }\n\t });\n\t }\n\n\t function getObjectString(types) {\n\t if (!types || !types.length) {\n\t return 'nothing';\n\t } else if (types && types.length === 1) {\n\t types = types[0];\n\t }\n\t return stringify(types, null, 2);\n\t }\n\n\t function generateMessage() {\n\t var n = '\\n';\n\t var useS = true;\n\t if (args && args.length === 1) {\n\t if (typeof args[0] === 'object' && args[0] !== null) {\n\t useS = !!Object.keys(args[0]).length;\n\t } else {\n\t useS = false;\n\t }\n\t }\n\t var types = 'type' + (useS ? 's' : '');\n\t var newLine = n + n;\n\t return 'You passed:' + n + passedArgs + newLine + ('With the ' + types + ':' + n + argTypes + newLine) + ('The API calls for:' + n + apiTypes);\n\t }\n\t }\n\n\t function getTypes(api, args) {\n\t api = arrayify(api);\n\t args = arrayify(args);\n\t var apiTypes = api.map(function (checker, index) {\n\t var specified = module.exports.globalConfig.hasOwnProperty('verbose');\n\t return getCheckerDisplay(checker, {\n\t terse: specified ? !module.exports.globalConfig.verbose : !apiCheck.config.verbose,\n\t obj: args[index],\n\t addHelpers: true\n\t });\n\t });\n\t var argTypes = args.map(function (arg) {\n\t return getArgDisplay(arg, []);\n\t });\n\t return { argTypes: argTypes, apiTypes: apiTypes };\n\t }\n\t}\n\n\t// STATELESS FUNCTIONS\n\n\t/**\n\t * This is where the magic happens for actually checking the arguments with the api.\n\t * @param {Array} api - checkers\n\t * @param {Array} args - and arguments object\n\t * @returns {Array} - the error messages\n\t */\n\tfunction checkApiWithArgs(api, args) {\n\t /* eslint complexity:[2, 7] */\n\t var messages = [];\n\t var failed = false;\n\t var checkerIndex = 0;\n\t var argIndex = 0;\n\t var arg = undefined,\n\t checker = undefined,\n\t res = undefined,\n\t lastChecker = undefined,\n\t argName = undefined,\n\t argFailed = undefined,\n\t skipPreviousChecker = undefined;\n\t /* jshint -W084 */\n\t while ((checker = api[checkerIndex++]) && argIndex < args.length) {\n\t arg = args[argIndex++];\n\t argName = 'Argument ' + argIndex + (checker.isOptional ? ' (optional)' : '');\n\t res = checker(arg, 'value', argName);\n\t argFailed = isError(res);\n\t lastChecker = checkerIndex >= api.length;\n\t skipPreviousChecker = checkerIndex > 1 && api[checkerIndex - 1].isOptional;\n\t if (argFailed && lastChecker || argFailed && !lastChecker && !checker.isOptional && !skipPreviousChecker) {\n\t failed = true;\n\t messages.push(getCheckerErrorMessage(res, checker, arg));\n\t } else if (argFailed && checker.isOptional) {\n\t argIndex--;\n\t } else {\n\t messages.push(t(argName) + ' passed');\n\t }\n\t }\n\t return failed ? messages : [];\n\t}\n\n\tcheckerTypeType.type = 'function with __apiCheckData property and `${function.type}` property';\n\tfunction checkerTypeType(checkerType, name, location) {\n\t var apiCheckDataChecker = checkers.shape({\n\t type: checkers.string,\n\t optional: checkers.bool\n\t });\n\t var asFunc = checkers.func.withProperties({ __apiCheckData: apiCheckDataChecker });\n\t var asShape = checkers.shape({ __apiCheckData: apiCheckDataChecker });\n\t var wrongShape = checkers.oneOfType([asFunc, asShape])(checkerType, name, location);\n\t if (isError(wrongShape)) {\n\t return wrongShape;\n\t }\n\t if (typeof checkerType !== 'function' && !checkerType.hasOwnProperty(checkerType.__apiCheckData.type)) {\n\t return getError(name, location, checkerTypeType.type);\n\t }\n\t}\n\n\tfunction getCheckerErrorMessage(res, checker, val) {\n\t var checkerHelp = getCheckerHelp(checker, val);\n\t checkerHelp = checkerHelp ? ' - ' + checkerHelp : '';\n\t return res.message + checkerHelp;\n\t}\n\n\tfunction getCheckerHelp(_ref, val) {\n\t var help = _ref.help;\n\n\t if (!help) {\n\t return '';\n\t }\n\t if (typeof help === 'function') {\n\t help = help(val);\n\t }\n\t return help;\n\t}\n\n\tfunction checkEnoughArgs(api, args) {\n\t var requiredArgs = api.filter(function (a) {\n\t return !a.isOptional;\n\t });\n\t if (args.length < requiredArgs.length) {\n\t return ['Not enough arguments specified. Requires `' + requiredArgs.length + '`, you passed `' + args.length + '`'];\n\t } else {\n\t return [];\n\t }\n\t}\n\n\tfunction getArgDisplay(arg, gottenArgs) {\n\t /* eslint complexity:[2, 7] */\n\t var cName = arg && arg.constructor && arg.constructor.name;\n\t var type = typeOf(arg);\n\t if (type === 'function') {\n\t if (hasKeys()) {\n\t var properties = stringify(getDisplayIfNotGotten());\n\t return cName + ' (with properties: ' + properties + ')';\n\t }\n\t return cName;\n\t }\n\n\t if (arg === null) {\n\t return 'null';\n\t }\n\n\t if (type !== 'array' && type !== 'object') {\n\t return type;\n\t }\n\n\t if (hasKeys()) {\n\t return getDisplayIfNotGotten();\n\t }\n\n\t return cName;\n\n\t // utility functions\n\t function hasKeys() {\n\t return arg && Object.keys(arg).length;\n\t }\n\n\t function getDisplayIfNotGotten() {\n\t if (gottenArgs.indexOf(arg) !== -1) {\n\t return '[Circular]';\n\t }\n\t gottenArgs.push(arg);\n\t return getDisplay(arg, gottenArgs);\n\t }\n\t}\n\n\tfunction getDisplay(obj, gottenArgs) {\n\t var argDisplay = {};\n\t each(obj, function (v, k) {\n\t return argDisplay[k] = getArgDisplay(v, gottenArgs);\n\t });\n\t return argDisplay;\n\t}\n\n\tfunction getApiCheckApis() {\n\t var os = checkers.string.optional;\n\n\t var checkerFnChecker = checkers.func.withProperties({\n\t type: checkers.oneOfType([checkers.string, checkerTypeType]).optional,\n\t displayName: checkers.string.optional,\n\t shortType: checkers.string.optional,\n\t notOptional: checkers.bool.optional,\n\t notRequired: checkers.bool.optional\n\t });\n\n\t var getApiCheckInstanceCheckers = [checkers.shape({\n\t output: checkers.shape({\n\t prefix: checkers.string.optional,\n\t suffix: checkers.string.optional,\n\t docsBaseUrl: checkers.string.optional\n\t }).strict.optional,\n\t verbose: checkers.bool.optional,\n\t disabled: checkers.bool.optional\n\t }).strict.optional, checkers.objectOf(checkerFnChecker).optional];\n\n\t var checkApiCheckApi = [checkers.typeOrArrayOf(checkerFnChecker), checkers.any.optional, checkers.shape({\n\t prefix: os, suffix: os, urlSuffix: os, // appended case\n\t onlyPrefix: os, onlySuffix: os, url: os // override case\n\t }).strict.optional];\n\n\t return {\n\t checkerFnChecker: checkerFnChecker,\n\t getApiCheckInstanceCheckers: getApiCheckInstanceCheckers,\n\t checkApiCheckApi: checkApiCheckApi\n\t };\n\t}\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = stringify;\n\n\tfunction getSerialize (fn, decycle) {\n\t var seen = [], keys = [];\n\t decycle = decycle || function(key, value) {\n\t return '[Circular ' + getPath(value, seen, keys) + ']'\n\t };\n\t return function(key, value) {\n\t var ret = value;\n\t if (typeof value === 'object' && value) {\n\t if (seen.indexOf(value) !== -1)\n\t ret = decycle(key, value);\n\t else {\n\t seen.push(value);\n\t keys.push(key);\n\t }\n\t }\n\t if (fn) ret = fn(key, ret);\n\t return ret;\n\t }\n\t}\n\n\tfunction getPath (value, seen, keys) {\n\t var index = seen.indexOf(value);\n\t var path = [ keys[index] ];\n\t for (index--; index >= 0; index--) {\n\t if (seen[index][ path[0] ] === value) {\n\t value = seen[index];\n\t path.unshift(keys[index]);\n\t }\n\t }\n\t return '~' + path.join('.');\n\t}\n\n\tfunction stringify(obj, fn, spaces, decycle) {\n\t return JSON.stringify(obj, getSerialize(fn, decycle), spaces);\n\t}\n\n\tstringify.getSerialize = getSerialize;\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tfunction _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; }\n\n\tvar stringify = __webpack_require__(2);\n\tvar checkerHelpers = {\n\t addOptional: addOptional, getRequiredVersion: getRequiredVersion, setupChecker: setupChecker, addNullable: addNullable\n\t};\n\n\tmodule.exports = {\n\t each: each, copy: copy, typeOf: typeOf, arrayify: arrayify, getCheckerDisplay: getCheckerDisplay,\n\t isError: isError, list: list, getError: getError, nAtL: nAtL, t: t, undef: undef, checkerHelpers: checkerHelpers,\n\t noop: noop\n\t};\n\n\tfunction copy(obj) {\n\t var type = typeOf(obj);\n\t var daCopy = undefined;\n\t if (type === 'array') {\n\t daCopy = [];\n\t } else if (type === 'object') {\n\t daCopy = {};\n\t } else {\n\t return obj;\n\t }\n\t each(obj, function (val, key) {\n\t daCopy[key] = val; // cannot single-line this because we don't want to abort the each\n\t });\n\t return daCopy;\n\t}\n\n\tfunction typeOf(obj) {\n\t if (Array.isArray(obj)) {\n\t return 'array';\n\t } else if (obj instanceof RegExp) {\n\t return 'object';\n\t } else {\n\t return typeof obj;\n\t }\n\t}\n\n\tfunction getCheckerDisplay(checker, options) {\n\t /* eslint complexity:[2, 7] */\n\t var display = undefined;\n\t var short = options && options.short;\n\t if (short && checker.shortType) {\n\t display = checker.shortType;\n\t } else if (!short && typeof checker.type === 'object' || checker.type === 'function') {\n\t display = getCheckerType(checker, options);\n\t } else {\n\t display = getCheckerType(checker, options) || checker.displayName || checker.name;\n\t }\n\t return display;\n\t}\n\n\tfunction getCheckerType(_ref, options) {\n\t var type = _ref.type;\n\n\t if (typeof type === 'function') {\n\t var __apiCheckData = type.__apiCheckData;\n\t var typeTypes = type(options);\n\t type = _defineProperty({\n\t __apiCheckData: __apiCheckData\n\t }, __apiCheckData.type, typeTypes);\n\t }\n\t return type;\n\t}\n\n\tfunction arrayify(obj) {\n\t if (!obj) {\n\t return [];\n\t } else if (Array.isArray(obj)) {\n\t return obj;\n\t } else {\n\t return [obj];\n\t }\n\t}\n\n\tfunction each(obj, iterator, context) {\n\t if (Array.isArray(obj)) {\n\t return eachArry(obj, iterator, context);\n\t } else {\n\t return eachObj(obj, iterator, context);\n\t }\n\t}\n\n\tfunction eachObj(obj, iterator, context) {\n\t var ret = undefined;\n\t var hasOwn = Object.prototype.hasOwnProperty;\n\t /* eslint prefer-const:0 */ // some weird eslint bug?\n\t for (var key in obj) {\n\t if (hasOwn.call(obj, key)) {\n\t ret = iterator.call(context, obj[key], key, obj);\n\t if (ret === false) {\n\t return ret;\n\t }\n\t }\n\t }\n\t return true;\n\t}\n\n\tfunction eachArry(obj, iterator, context) {\n\t var ret = undefined;\n\t var length = obj.length;\n\t for (var i = 0; i < length; i++) {\n\t ret = iterator.call(context, obj[i], i, obj);\n\t if (ret === false) {\n\t return ret;\n\t }\n\t }\n\t return true;\n\t}\n\n\tfunction isError(obj) {\n\t return obj instanceof Error;\n\t}\n\n\tfunction list(arry, join, finalJoin) {\n\t arry = arrayify(arry);\n\t var copy = arry.slice();\n\t var last = copy.pop();\n\t if (copy.length === 1) {\n\t join = ' ';\n\t }\n\t return copy.join(join) + ('' + (copy.length ? join + finalJoin : '') + last);\n\t}\n\n\tfunction getError(name, location, checkerType) {\n\t if (typeof checkerType === 'function') {\n\t checkerType = checkerType({ short: true });\n\t }\n\t var stringType = typeof checkerType !== 'object' ? checkerType : stringify(checkerType);\n\t return new Error(nAtL(name, location) + ' must be ' + t(stringType));\n\t}\n\n\tfunction nAtL(name, location) {\n\t var tName = t(name || 'value');\n\t var tLocation = !location ? '' : ' at ' + t(location);\n\t return '' + tName + tLocation;\n\t}\n\n\tfunction t(thing) {\n\t return '`' + thing + '`';\n\t}\n\n\tfunction undef(thing) {\n\t return typeof thing === 'undefined';\n\t}\n\n\t/**\n\t * This will set up the checker with all of the defaults that most checkers want like required by default and an\n\t * optional version\n\t *\n\t * @param {Function} checker - the checker to setup with properties\n\t * @param {Object} properties - properties to add to the checker\n\t * @param {boolean} disabled - when set to true, this will set the checker to a no-op function\n\t * @returns {Function} checker - the setup checker\n\t */\n\tfunction setupChecker(checker, properties, disabled) {\n\t /* eslint complexity:[2, 9] */\n\t if (disabled) {\n\t // swap out the checker for its own copy of noop\n\t checker = getNoop();\n\t checker.isNoop = true;\n\t }\n\n\t if (typeof checker.type === 'string') {\n\t checker.shortType = checker.type;\n\t }\n\n\t // assign all properties given\n\t each(properties, function (prop, name) {\n\t return checker[name] = prop;\n\t });\n\n\t if (!checker.displayName) {\n\t checker.displayName = 'apiCheck ' + t(checker.shortType || checker.type || checker.name) + ' type checker';\n\t }\n\n\t if (!checker.notRequired) {\n\t checker = getRequiredVersion(checker, disabled);\n\t }\n\n\t if (!checker.notNullable) {\n\t addNullable(checker, disabled);\n\t }\n\n\t if (!checker.notOptional) {\n\t addOptional(checker, disabled);\n\t }\n\n\t return checker;\n\t}\n\n\tfunction getRequiredVersion(checker, disabled) {\n\t var requiredChecker = disabled ? getNoop() : function requiredChecker(val, name, location, obj) {\n\t if (undef(val) && !checker.isOptional) {\n\t var tLocation = location ? ' in ' + t(location) : '';\n\t var type = getCheckerDisplay(checker, { short: true });\n\t var stringType = typeof type !== 'object' ? type : stringify(type);\n\t return new Error('Required ' + t(name) + ' not specified' + tLocation + '. Must be ' + t(stringType));\n\t } else {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t copyProps(checker, requiredChecker);\n\t requiredChecker.originalChecker = checker;\n\t return requiredChecker;\n\t}\n\n\tfunction addOptional(checker, disabled) {\n\t var optionalCheck = disabled ? getNoop() : function optionalCheck(val, name, location, obj) {\n\t if (!undef(val)) {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t // inherit all properties on the original checker\n\t copyProps(checker, optionalCheck);\n\n\t optionalCheck.isOptional = true;\n\t optionalCheck.displayName = checker.displayName + ' (optional)';\n\t optionalCheck.originalChecker = checker;\n\n\t // the magic line that allows you to add .optional to the end of the checkers\n\t checker.optional = optionalCheck;\n\n\t fixType(checker, checker.optional);\n\t}\n\n\tfunction addNullable(checker, disabled) {\n\t var nullableCheck = disabled ? getNoop() : function nullableCheck(val, name, location, obj) {\n\t if (val !== null) {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t // inherit all properties on the original checker\n\t copyProps(checker, nullableCheck);\n\n\t nullableCheck.isNullable = true;\n\t nullableCheck.displayName = checker.displayName + ' (nullable)';\n\t nullableCheck.originalChecker = checker;\n\n\t // the magic line that allows you to add .nullable to the end of the checkers\n\t checker.nullable = nullableCheck;\n\n\t fixType(checker, checker.nullable);\n\t if (!checker.notOptional) {\n\t addOptional(checker.nullable, disabled);\n\t }\n\t}\n\n\tfunction fixType(checker, checkerCopy) {\n\t // fix type, because it's not a straight copy...\n\t // the reason is we need to specify type.__apiCheckData.optional as true for the terse/verbose option.\n\t // we also want to add \"(optional)\" to the types with a string\n\t if (typeof checkerCopy.type === 'object') {\n\t checkerCopy.type = copy(checkerCopy.type); // make our own copy of this\n\t } else if (typeof checkerCopy.type === 'function') {\n\t checkerCopy.type = function () {\n\t return checker.type.apply(checker, arguments);\n\t };\n\t } else {\n\t checkerCopy.type += ' (optional)';\n\t return;\n\t }\n\t checkerCopy.type.__apiCheckData = copy(checker.type.__apiCheckData) || {}; // and this\n\t checkerCopy.type.__apiCheckData.optional = true;\n\t}\n\n\t// UTILS\n\n\tfunction copyProps(src, dest) {\n\t each(Object.keys(src), function (key) {\n\t return dest[key] = src[key];\n\t });\n\t}\n\n\tfunction noop() {}\n\n\tfunction getNoop() {\n\t /* eslint no-shadow:0 */\n\t /* istanbul ignore next */\n\t return function noop() {};\n\t}\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar stringify = __webpack_require__(2);\n\n\tvar _require = __webpack_require__(3);\n\n\tvar typeOf = _require.typeOf;\n\tvar each = _require.each;\n\tvar copy = _require.copy;\n\tvar getCheckerDisplay = _require.getCheckerDisplay;\n\tvar isError = _require.isError;\n\tvar arrayify = _require.arrayify;\n\tvar list = _require.list;\n\tvar getError = _require.getError;\n\tvar nAtL = _require.nAtL;\n\tvar t = _require.t;\n\tvar checkerHelpers = _require.checkerHelpers;\n\tvar undef = _require.undef;\n\tvar setupChecker = checkerHelpers.setupChecker;\n\n\tvar checkers = module.exports = getCheckers();\n\tmodule.exports.getCheckers = getCheckers;\n\n\tfunction getCheckers(disabled) {\n\t return {\n\t array: typeOfCheckGetter('Array'),\n\t bool: typeOfCheckGetter('Boolean'),\n\t number: typeOfCheckGetter('Number'),\n\t string: typeOfCheckGetter('String'),\n\t func: funcCheckGetter(),\n\t object: objectCheckGetter(),\n\n\t emptyObject: emptyObjectCheckGetter(),\n\n\t instanceOf: instanceCheckGetter,\n\t oneOf: oneOfCheckGetter,\n\t oneOfType: oneOfTypeCheckGetter,\n\n\t arrayOf: arrayOfCheckGetter,\n\t objectOf: objectOfCheckGetter,\n\t typeOrArrayOf: typeOrArrayOfCheckGetter,\n\n\t range: rangeCheckGetter,\n\t lessThan: lessThanCheckGetter,\n\t greaterThan: greaterThanCheckGetter,\n\n\t shape: getShapeCheckGetter(),\n\t args: argumentsCheckerGetter(),\n\n\t any: anyCheckGetter(),\n\t 'null': nullCheckGetter()\n\n\t };\n\n\t function typeOfCheckGetter(type) {\n\t var lType = type.toLowerCase();\n\t return setupChecker(function typeOfCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== lType) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function funcCheckGetter() {\n\t var type = 'Function';\n\t var functionChecker = setupChecker(function functionCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== 'function') {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\n\t functionChecker.withProperties = function getWithPropertiesChecker(properties) {\n\t var apiError = checkers.objectOf(checkers.func)(properties, 'properties', 'apiCheck.func.withProperties');\n\t if (isError(apiError)) {\n\t throw apiError;\n\t }\n\t var shapeChecker = checkers.shape(properties, true);\n\t shapeChecker.type.__apiCheckData.type = 'func.withProperties';\n\n\t return setupChecker(function functionWithPropertiesChecker(val, name, location) {\n\t var notFunction = checkers.func(val, name, location);\n\t if (isError(notFunction)) {\n\t return notFunction;\n\t }\n\t return shapeChecker(val, name, location);\n\t }, { type: shapeChecker.type, shortType: 'func.withProperties' }, disabled);\n\t };\n\t return functionChecker;\n\t }\n\n\t function objectCheckGetter() {\n\t var type = 'Object';\n\t var nullType = 'Object (null ok)';\n\t var objectNullOkChecker = setupChecker(function objectNullOkCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== 'object') {\n\t return getError(name, location, nullType);\n\t }\n\t }, { type: nullType }, disabled);\n\n\t var objectChecker = setupChecker(function objectCheckerDefinition(val, name, location) {\n\t if (val === null || isError(objectNullOkChecker(val, name, location))) {\n\t return getError(name, location, objectChecker.type);\n\t }\n\t }, { type: type, nullOk: objectNullOkChecker }, disabled);\n\n\t return objectChecker;\n\t }\n\n\t function instanceCheckGetter(classToCheck) {\n\t return setupChecker(function instanceCheckerDefinition(val, name, location) {\n\t if (!(val instanceof classToCheck)) {\n\t return getError(name, location, classToCheck.name);\n\t }\n\t }, { type: classToCheck.name }, disabled);\n\t }\n\n\t function oneOfCheckGetter(enums) {\n\t var type = {\n\t __apiCheckData: { optional: false, type: 'enum' },\n\t 'enum': enums\n\t };\n\t var shortType = 'oneOf[' + enums.map(function (enm) {\n\t return stringify(enm);\n\t }).join(', ') + ']';\n\t return setupChecker(function oneOfCheckerDefinition(val, name, location) {\n\t if (!enums.some(function (enm) {\n\t return enm === val;\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\n\t function oneOfTypeCheckGetter(typeCheckers) {\n\t var checkersDisplay = typeCheckers.map(function (checker) {\n\t return getCheckerDisplay(checker, { short: true });\n\t });\n\t var shortType = 'oneOfType[' + checkersDisplay.join(', ') + ']';\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return typeCheckers.map(function (checker) {\n\t return getCheckerDisplay(checker, options);\n\t });\n\t }\n\t type.__apiCheckData = { optional: false, type: 'oneOfType' };\n\t return setupChecker(function oneOfTypeCheckerDefinition(val, name, location) {\n\t if (!typeCheckers.some(function (checker) {\n\t return !isError(checker(val, name, location));\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\n\t function arrayOfCheckGetter(checker) {\n\t var shortCheckerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = 'arrayOf[' + shortCheckerDisplay + ']';\n\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\t type.__apiCheckData = { optional: false, type: 'arrayOf' };\n\n\t return setupChecker(function arrayOfCheckerDefinition(val, name, location) {\n\t if (isError(checkers.array(val)) || !val.every(function (item) {\n\t return !isError(checker(item));\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\n\t function objectOfCheckGetter(checker) {\n\t var checkerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = 'objectOf[' + checkerDisplay + ']';\n\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\t type.__apiCheckData = { optional: false, type: 'objectOf' };\n\n\t return setupChecker(function objectOfCheckerDefinition(val, name, location) {\n\t var notObject = checkers.object(val, name, location);\n\t if (isError(notObject)) {\n\t return notObject;\n\t }\n\t var allTypesSuccess = each(val, function (item, key) {\n\t if (isError(checker(item, key, name))) {\n\t return false;\n\t }\n\t });\n\t if (!allTypesSuccess) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\n\t function typeOrArrayOfCheckGetter(checker) {\n\t var checkerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = 'typeOrArrayOf[' + checkerDisplay + ']';\n\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\n\t type.__apiCheckData = { optional: false, type: 'typeOrArrayOf' };\n\t return setupChecker(function typeOrArrayOfDefinition(val, name, location, obj) {\n\t if (isError(checkers.oneOfType([checker, checkers.arrayOf(checker)])(val, name, location, obj))) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\n\t function getShapeCheckGetter() {\n\t function shapeCheckGetter(shape, nonObject) {\n\t var shapeTypes = {};\n\t each(shape, function (checker, prop) {\n\t shapeTypes[prop] = getCheckerDisplay(checker);\n\t });\n\t function type() {\n\t var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n\t var ret = {};\n\t var terse = options.terse;\n\t var obj = options.obj;\n\t var addHelpers = options.addHelpers;\n\n\t var parentRequired = options.required;\n\t each(shape, function (checker, prop) {\n\t /* eslint complexity:[2, 6] */\n\t var specified = obj && obj.hasOwnProperty(prop);\n\t var required = undef(parentRequired) ? !checker.isOptional : parentRequired;\n\t if (!terse || (specified || !checker.isOptional)) {\n\t ret[prop] = getCheckerDisplay(checker, { terse: terse, obj: obj && obj[prop], required: required, addHelpers: addHelpers });\n\t }\n\t if (addHelpers) {\n\t modifyTypeDisplayToHelpOut(ret, prop, specified, checker, required);\n\t }\n\t });\n\t return ret;\n\n\t function modifyTypeDisplayToHelpOut(theRet, prop, specified, checker, required) {\n\t if (!specified && required && !checker.isOptional) {\n\t var item = 'ITEM';\n\t if (checker.type && checker.type.__apiCheckData) {\n\t item = checker.type.__apiCheckData.type.toUpperCase();\n\t }\n\t addHelper('missing', 'MISSING THIS ' + item, ' <-- YOU ARE MISSING THIS');\n\t } else if (specified) {\n\t var error = checker(obj[prop], prop, null, obj);\n\t if (isError(error)) {\n\t addHelper('error', 'THIS IS THE PROBLEM: ' + error.message, ' <-- THIS IS THE PROBLEM: ' + error.message);\n\t }\n\t }\n\n\t function addHelper(property, objectMessage, stringMessage) {\n\t if (typeof theRet[prop] === 'string') {\n\t theRet[prop] += stringMessage;\n\t } else {\n\t theRet[prop].__apiCheckData[property] = objectMessage;\n\t }\n\t }\n\t }\n\t }\n\n\t type.__apiCheckData = { strict: false, optional: false, type: 'shape' };\n\t var shapeChecker = setupChecker(function shapeCheckerDefinition(val, name, location) {\n\t /* eslint complexity:[2, 6] */\n\t var isObject = !nonObject && checkers.object(val, name, location);\n\t if (isError(isObject)) {\n\t return isObject;\n\t }\n\t var shapePropError = undefined;\n\t location = location ? location + (name ? '/' : '') : '';\n\t name = name || '';\n\t each(shape, function (checker, prop) {\n\t if (val.hasOwnProperty(prop) || !checker.isOptional) {\n\t shapePropError = checker(val[prop], prop, '' + location + name, val);\n\t return !isError(shapePropError);\n\t }\n\t });\n\t if (isError(shapePropError)) {\n\t return shapePropError;\n\t }\n\t }, { type: type, shortType: 'shape' }, disabled);\n\n\t function strictType() {\n\t return type.apply(undefined, arguments);\n\t }\n\n\t strictType.__apiCheckData = copy(shapeChecker.type.__apiCheckData);\n\t strictType.__apiCheckData.strict = true;\n\t shapeChecker.strict = setupChecker(function strictShapeCheckerDefinition(val, name, location) {\n\t var shapeError = shapeChecker(val, name, location);\n\t if (isError(shapeError)) {\n\t return shapeError;\n\t }\n\t var allowedProperties = Object.keys(shape);\n\t var extraProps = Object.keys(val).filter(function (prop) {\n\t return allowedProperties.indexOf(prop) === -1;\n\t });\n\t if (extraProps.length) {\n\t return new Error(nAtL(name, location) + ' cannot have extra properties: ' + t(extraProps.join('`, `')) + '.' + ('It is limited to ' + t(allowedProperties.join('`, `'))));\n\t }\n\t }, { type: strictType, shortType: 'strict shape' }, disabled);\n\n\t return shapeChecker;\n\t }\n\n\t shapeCheckGetter.ifNot = function ifNot(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t otherProps = [otherProps];\n\t }\n\t var description = undefined;\n\t if (otherProps.length === 1) {\n\t description = 'specified only if ' + otherProps[0] + ' is not specified';\n\t } else {\n\t description = 'specified only if none of the following are specified: [' + list(otherProps, ', ', 'and ') + ']';\n\t }\n\t var shortType = 'ifNot[' + otherProps.join(', ') + ']';\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function ifNotChecker(prop, propName, location, obj) {\n\t var propExists = obj && obj.hasOwnProperty(propName);\n\t var otherPropsExist = otherProps.some(function (otherProp) {\n\t return obj && obj.hasOwnProperty(otherProp);\n\t });\n\t if (propExists === otherPropsExist) {\n\t return getError(propName, location, type);\n\t } else if (propExists) {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { notRequired: true, type: type, shortType: shortType }, disabled);\n\t };\n\n\t shapeCheckGetter.onlyIf = function onlyIf(otherProps, propChecker) {\n\t otherProps = arrayify(otherProps);\n\t var description = undefined;\n\t if (otherProps.length === 1) {\n\t description = 'specified only if ' + otherProps[0] + ' is also specified';\n\t } else {\n\t description = 'specified only if all of the following are specified: [' + list(otherProps, ', ', 'and ') + ']';\n\t }\n\t var shortType = 'onlyIf[' + otherProps.join(', ') + ']';\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function onlyIfCheckerDefinition(prop, propName, location, obj) {\n\t var othersPresent = otherProps.every(function (property) {\n\t return obj.hasOwnProperty(property);\n\t });\n\t if (!othersPresent) {\n\t return getError(propName, location, type);\n\t } else {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t };\n\n\t shapeCheckGetter.requiredIfNot = function shapeRequiredIfNot(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t otherProps = [otherProps];\n\t }\n\t return getRequiredIfNotChecker(false, otherProps, propChecker);\n\t };\n\n\t shapeCheckGetter.requiredIfNot.all = function shapeRequiredIfNotAll(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t throw new Error('requiredIfNot.all must be passed an array');\n\t }\n\t return getRequiredIfNotChecker(true, otherProps, propChecker);\n\t };\n\n\t function getRequiredIfNotChecker(all, otherProps, propChecker) {\n\t var props = t(otherProps.join(', '));\n\t var ifProps = 'if ' + (all ? 'all of' : 'at least one of');\n\t var description = 'specified ' + ifProps + ' these are not specified: ' + props + ' (otherwise it\\'s optional)';\n\t var shortType = 'requiredIfNot' + (all ? '.all' : '') + '[' + otherProps.join(', ') + '}]';\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function shapeRequiredIfNotDefinition(prop, propName, location, obj) {\n\t var propExists = obj && obj.hasOwnProperty(propName);\n\t var iteration = all ? 'every' : 'some';\n\t var otherPropsExist = otherProps[iteration](function (otherProp) {\n\t return obj && obj.hasOwnProperty(otherProp);\n\t });\n\t if (!otherPropsExist && !propExists) {\n\t return getError(propName, location, type);\n\t } else if (propExists) {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { type: type, notRequired: true }, disabled);\n\t }\n\n\t return shapeCheckGetter;\n\n\t function getTypeForShapeChild(propChecker, description, shortType) {\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(propChecker);\n\t }\n\t type.__apiCheckData = { optional: false, type: 'ifNot', description: description };\n\t return type;\n\t }\n\t }\n\n\t function argumentsCheckerGetter() {\n\t var type = 'function arguments';\n\t return setupChecker(function argsCheckerDefinition(val, name, location) {\n\t if (Array.isArray(val) || isError(checkers.object(val)) || isError(checkers.number(val.length))) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function anyCheckGetter() {\n\t return setupChecker(function anyCheckerDefinition() {\n\t // don't do anything\n\t }, { type: 'any' }, disabled);\n\t }\n\n\t function nullCheckGetter() {\n\t var type = 'null';\n\t return setupChecker(function nullChecker(val, name, location) {\n\t if (val !== null) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function rangeCheckGetter(min, max) {\n\t var type = 'Range (' + min + ' - ' + max + ')';\n\t return setupChecker(function rangeChecker(val, name, location) {\n\t if (typeof val !== 'number' || val < min || val > max) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function lessThanCheckGetter(min) {\n\t var type = 'lessThan[' + min + ']';\n\t return setupChecker(function lessThanChecker(val, name, location) {\n\t if (typeof val !== 'number' || val > min) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function greaterThanCheckGetter(max) {\n\t var type = 'greaterThan[' + max + ']';\n\t return setupChecker(function greaterThanChecker(val, name, location) {\n\t if (typeof val !== 'number' || val < max) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function emptyObjectCheckGetter() {\n\t var type = 'empty object';\n\t return setupChecker(function emptyObjectChecker(val, name, location) {\n\t if (typeOf(val) !== 'object' || val === null || Object.keys(val).length) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t}\n\n/***/ }\n/******/ ])\n});\n;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2FwaS1jaGVjay9kaXN0L2FwaS1jaGVjay5qcz83ZWE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxvQ0FBb0M7QUFDcEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGLHVDQUF1Qyx1Q0FBdUMsa0JBQWtCOztBQUVoRzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBLHdFQUF3RTtBQUN4RSwrRUFBK0U7O0FBRS9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQixjQUFjLE1BQU07QUFDcEIsY0FBYyxPQUFP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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEdBQUcsYUFBYTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEdBQUcsYUFBYTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEdBQUcsYUFBYTtBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBhcGktY2hlY2sgdmVyc2lvbiA3LjUuNSBidWlsdCB3aXRoIOKZpSBieSBLZW50IEMuIERvZGRzIDxrZW50QGRvZGRzZmFtaWx5LnVzPiAoaHR0cDovL2tlbnQuZG9kZHNmYW1pbHkudXMpICjDsyDDrF/DrSk9w7PDsj0ow6xfw60gw7IpXG5cbihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiYXBpQ2hlY2tcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiYXBpQ2hlY2tcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0dmFyIF9hcGlDaGVjayA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cblx0dmFyIF9hcGlDaGVjazIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hcGlDaGVjayk7XG5cblx0ZXhwb3J0c1snZGVmYXVsdCddID0gX2FwaUNoZWNrMlsnZGVmYXVsdCddO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgc3RyaW5naWZ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblx0dmFyIGFwaUNoZWNrVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cdHZhciBlYWNoID0gYXBpQ2hlY2tVdGlsLmVhY2g7XG5cdHZhciBpc0Vycm9yID0gYXBpQ2hlY2tVdGlsLmlzRXJyb3I7XG5cdHZhciB0ID0gYXBpQ2hlY2tVdGlsLnQ7XG5cdHZhciBhcnJheWlmeSA9IGFwaUNoZWNrVXRpbC5hcnJheWlmeTtcblx0dmFyIGdldENoZWNrZXJEaXNwbGF5ID0gYXBpQ2hlY2tVdGlsLmdldENoZWNrZXJEaXNwbGF5O1xuXHR2YXIgdHlwZU9mID0gYXBpQ2hlY2tVdGlsLnR5cGVPZjtcblx0dmFyIGdldEVycm9yID0gYXBpQ2hlY2tVdGlsLmdldEVycm9yO1xuXG5cdHZhciBjaGVja2VycyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBhcGlDaGVja0FwaXMgPSBnZXRBcGlDaGVja0FwaXMoKTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGdldEFwaUNoZWNrSW5zdGFuY2U7XG5cdG1vZHVsZS5leHBvcnRzLlZFUlNJT04gPSAoXCI3LjUuNVwiKTtcblx0bW9kdWxlLmV4cG9ydHMudXRpbHMgPSBhcGlDaGVja1V0aWw7XG5cdG1vZHVsZS5leHBvcnRzLmdsb2JhbENvbmZpZyA9IHtcblx0ICB2ZXJib3NlOiBmYWxzZSxcblx0ICBkaXNhYmxlZDogZmFsc2Vcblx0fTtcblxuXHR2YXIgYXBpQ2hlY2tBcGlDaGVjayA9IGdldEFwaUNoZWNrSW5zdGFuY2Uoe1xuXHQgIG91dHB1dDogeyBwcmVmaXg6ICdhcGlDaGVjaycgfVxuXHR9KTtcblx0bW9kdWxlLmV4cG9ydHMuaW50ZXJuYWxDaGVja2VyID0gYXBpQ2hlY2tBcGlDaGVjaztcblxuXHRlYWNoKGNoZWNrZXJzLCBmdW5jdGlvbiAoY2hlY2tlciwgbmFtZSkge1xuXHQgIHJldHVybiBtb2R1bGUuZXhwb3J0c1tuYW1lXSA9IGNoZWNrZXI7XG5cdH0pO1xuXG5cdGZ1bmN0aW9uIGdldEFwaUNoZWNrSW5zdGFuY2UoKSB7XG5cdCAgdmFyIGNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdO1xuXHQgIHZhciBleHRyYUNoZWNrZXJzID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07XG5cblx0ICAvKiBlc2xpbnQgY29tcGxleGl0eTpbMiwgNl0gKi9cblx0ICBpZiAoYXBpQ2hlY2tBcGlDaGVjayAmJiBhcmd1bWVudHMubGVuZ3RoKSB7XG5cdCAgICBhcGlDaGVja0FwaUNoZWNrWyd0aHJvdyddKGFwaUNoZWNrQXBpcy5nZXRBcGlDaGVja0luc3RhbmNlQ2hlY2tlcnMsIGFyZ3VtZW50cywge1xuXHQgICAgICBwcmVmaXg6ICdjcmVhdGluZyBhbiBhcGlDaGVjayBpbnN0YW5jZSdcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIHZhciBhZGRpdGlvbmFsUHJvcGVydGllcyA9IHtcblx0ICAgICd0aHJvdyc6IGdldEFwaUNoZWNrKHRydWUpLFxuXHQgICAgd2FybjogZ2V0QXBpQ2hlY2soZmFsc2UpLFxuXHQgICAgZ2V0RXJyb3JNZXNzYWdlOiBnZXRFcnJvck1lc3NhZ2UsXG5cdCAgICBoYW5kbGVFcnJvck1lc3NhZ2U6IGhhbmRsZUVycm9yTWVzc2FnZSxcblx0ICAgIGNvbmZpZzoge1xuXHQgICAgICBvdXRwdXQ6IGNvbmZpZy5vdXRwdXQgfHwge1xuXHQgICAgICAgIHByZWZpeDogJycsXG5cdCAgICAgICAgc3VmZml4OiAnJyxcblx0ICAgICAgICBkb2NzQmFzZVVybDogJydcblx0ICAgICAgfSxcblx0ICAgICAgdmVyYm9zZTogY29uZmlnLnZlcmJvc2UgfHwgZmFsc2UsXG5cdCAgICAgIGRpc2FibGVkOiBjb25maWcuZGlzYWJsZWQgfHwgZmFsc2Vcblx0ICAgIH0sXG5cdCAgICB1dGlsczogYXBpQ2hlY2tVdGlsXG5cdCAgfTtcblxuXHQgIGVhY2goYWRkaXRpb25hbFByb3BlcnRpZXMsIGZ1bmN0aW9uICh3cmFwcGVyLCBuYW1lKSB7XG5cdCAgICByZXR1cm4gYXBpQ2hlY2tbbmFtZV0gPSB3cmFwcGVyO1xuXHQgIH0pO1xuXG5cdCAgdmFyIGRpc2FibGVkID0gYXBpQ2hlY2suZGlzYWJsZWQgfHwgbW9kdWxlLmV4cG9ydHMuZ2xvYmFsQ29uZmlnLmRpc2FibGVkO1xuXHQgIGVhY2goY2hlY2tlcnMuZ2V0Q2hlY2tlcnMoZGlzYWJsZWQpLCBmdW5jdGlvbiAoY2hlY2tlciwgbmFtZSkge1xuXHQgICAgcmV0dXJuIGFwaUNoZWNrW25hbWVdID0gY2hlY2tlcjtcblx0ICB9KTtcblx0ICBlYWNoKGV4dHJhQ2hlY2tlcnMsIGZ1bmN0aW9uIChjaGVja2VyLCBuYW1lKSB7XG5cdCAgICByZXR1cm4gYXBpQ2hlY2tbbmFtZV0gPSBjaGVja2VyO1xuXHQgIH0pO1xuXG5cdCAgcmV0dXJuIGFwaUNoZWNrO1xuXG5cdCAgLyoqXG5cdCAgICogVGhpcyBpcyB0aGUgaW5zdGFuY2UgZnVuY3Rpb24uIE90aGVyIHRoaW5ncyBhcmUgYXR0YWNoZWQgdG8gdGhpcyBzZWUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFib3ZlLlxuXHQgICAqIEBwYXJhbSB7QXJyYXl9IGFwaSAtIHRoZSBjaGVja2VycyB0byBjaGVjayB3aXRoXG5cdCAgICogQHBhcmFtIHtBcnJheX0gYXJncyAtIHRoZSBhcmdzIHRvIGNoZWNrXG5cdCAgICogQHBhcmFtIHtPYmplY3R9IG91dHB1dCAtIG91dHB1dCBvcHRpb25zXG5cdCAgICogQHJldHVybnMge09iamVjdH0gLSBpZiB0aGlzIGhhcyBhIGZhaWxlZCA9IHRydWUgcHJvcGVydHksIHRoZW4gaXQgZmFpbGVkXG5cdCAgICovXG5cdCAgZnVuY3Rpb24gYXBpQ2hlY2soYXBpLCBhcmdzLCBvdXRwdXQpIHtcblx0ICAgIC8qIGVzbGludCBjb21wbGV4aXR5OlsyLCA4XSAqL1xuXHQgICAgaWYgKGFwaUNoZWNrLmNvbmZpZy5kaXNhYmxlZCB8fCBtb2R1bGUuZXhwb3J0cy5nbG9iYWxDb25maWcuZGlzYWJsZWQpIHtcblx0ICAgICAgcmV0dXJuIHtcblx0ICAgICAgICBhcGlUeXBlczoge30sIGFyZ1R5cGVzOiB7fSxcblx0ICAgICAgICBwYXNzZWQ6IHRydWUsIG1lc3NhZ2U6ICcnLFxuXHQgICAgICAgIGZhaWxlZDogZmFsc2Vcblx0ICAgICAgfTsgLy8gZW1wdHkgdmVyc2lvbiBvZiB3aGF0IGlzIG5vcm1hbGx5IHJldHVybmVkXG5cdCAgICB9XG5cdCAgICBjaGVja0FwaUNoZWNrQXBpKGFyZ3VtZW50cyk7XG5cdCAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXBpKSkge1xuXHQgICAgICBhcGkgPSBbYXBpXTtcblx0ICAgICAgYXJncyA9IFthcmdzXTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIC8vIHR1cm4gYXJndW1lbnRzIGludG8gYW4gYXJyYXlcblx0ICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpO1xuXHQgICAgfVxuXHQgICAgdmFyIG1lc3NhZ2VzID0gY2hlY2tFbm91Z2hBcmdzKGFwaSwgYXJncyk7XG5cdCAgICBpZiAoIW1lc3NhZ2VzLmxlbmd0aCkge1xuXHQgICAgICAvLyB0aGlzIGlzIHdoZXJlIHdlIGFjdHVhbGx5IGdvIHBlcmZvcm0gdGhlIGNoZWNrcy5cblx0ICAgICAgbWVzc2FnZXMgPSBjaGVja0FwaVdpdGhBcmdzKGFwaSwgYXJncyk7XG5cdCAgICB9XG5cblx0ICAgIHZhciByZXR1cm5PYmplY3QgPSBnZXRUeXBlcyhhcGksIGFyZ3MpO1xuXHQgICAgcmV0dXJuT2JqZWN0LmFyZ3MgPSBhcmdzO1xuXHQgICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCkge1xuXHQgICAgICByZXR1cm5PYmplY3QubWVzc2FnZSA9IGFwaUNoZWNrLmdldEVycm9yTWVzc2FnZShhcGksIGFyZ3MsIG1lc3NhZ2VzLCBvdXRwdXQpO1xuXHQgICAgICByZXR1cm5PYmplY3QuZmFpbGVkID0gdHJ1ZTtcblx0ICAgICAgcmV0dXJuT2JqZWN0LnBhc3NlZCA9IGZhbHNlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuT2JqZWN0Lm1lc3NhZ2UgPSAnJztcblx0ICAgICAgcmV0dXJuT2JqZWN0LmZhaWxlZCA9IGZhbHNlO1xuXHQgICAgICByZXR1cm5PYmplY3QucGFzc2VkID0gdHJ1ZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiByZXR1cm5PYmplY3Q7XG5cdCAgfVxuXG5cdCAgLyoqXG5cdCAgICogY2hlY2tBcGlDaGVja0FwaSwgc2hvdWxkIGJlIHJlYWQgbGlrZTogY2hlY2sgYXBpQ2hlY2sgYXBpLiBBcyBpbiwgY2hlY2sgdGhlIGFwaSBmb3IgYXBpQ2hlY2sgOi0pXG5cdCAgICogQHBhcmFtIHtBcnJheX0gY2hlY2tBcGlBcmdzIC0gYXJncyBwcm92aWRlZCB0byBhcGlDaGVjayBmdW5jdGlvblxuXHQgICAqL1xuXHQgIGZ1bmN0aW9uIGNoZWNrQXBpQ2hlY2tBcGkoY2hlY2tBcGlBcmdzKSB7XG5cdCAgICB2YXIgYXBpID0gY2hlY2tBcGlBcmdzWzBdO1xuXHQgICAgdmFyIGFyZ3MgPSBjaGVja0FwaUFyZ3NbMV07XG5cdCAgICB2YXIgaXNBcnJheU9yQXJncyA9IEFycmF5LmlzQXJyYXkoYXJncykgfHwgYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGFyZ3MubGVuZ3RoID09PSAnbnVtYmVyJztcblxuXHQgICAgaWYgKEFycmF5LmlzQXJyYXkoYXBpKSAmJiAhaXNBcnJheU9yQXJncykge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoZ2V0RXJyb3JNZXNzYWdlKGFwaSwgW2FyZ3NdLCBbJ0lmIGFuIGFycmF5IGlzIHByb3ZpZGVkIGZvciB0aGUgYXBpLCBhbiBhcnJheSBtdXN0IGJlIHByb3ZpZGVkIGZvciB0aGUgYXJncyBhcyB3ZWxsLiddLCB7IHByZWZpeDogJ2FwaUNoZWNrJyB9KSk7XG5cdCAgICB9XG5cdCAgICAvLyBkb2cgZm9vZGluZyBoZXJlXG5cdCAgICB2YXIgZXJyb3JzID0gY2hlY2tBcGlXaXRoQXJncyhhcGlDaGVja0FwaXMuY2hlY2tBcGlDaGVja0FwaSwgY2hlY2tBcGlBcmdzKTtcblx0ICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG5cdCAgICAgIHZhciBtZXNzYWdlID0gYXBpQ2hlY2suZ2V0RXJyb3JNZXNzYWdlKGFwaUNoZWNrQXBpcy5jaGVja0FwaUNoZWNrQXBpLCBjaGVja0FwaUFyZ3MsIGVycm9ycywge1xuXHQgICAgICAgIHByZWZpeDogJ2FwaUNoZWNrJ1xuXHQgICAgICB9KTtcblx0ICAgICAgYXBpQ2hlY2suaGFuZGxlRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIHRydWUpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldEFwaUNoZWNrKHNob3VsZFRocm93KSB7XG5cdCAgICByZXR1cm4gZnVuY3Rpb24gYXBpQ2hlY2tXcmFwcGVyKGFwaSwgYXJncywgb3V0cHV0KSB7XG5cdCAgICAgIHZhciByZXN1bHQgPSBhcGlDaGVjayhhcGksIGFyZ3MsIG91dHB1dCk7XG5cdCAgICAgIGFwaUNoZWNrLmhhbmRsZUVycm9yTWVzc2FnZShyZXN1bHQubWVzc2FnZSwgc2hvdWxkVGhyb3cpO1xuXHQgICAgICByZXR1cm4gcmVzdWx0OyAvLyB3b250IGdldCBoZXJlIGlmIGFuIGVycm9yIGlzIHRocm93blxuXHQgICAgfTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBoYW5kbGVFcnJvck1lc3NhZ2UobWVzc2FnZSwgc2hvdWxkVGhyb3cpIHtcblx0ICAgIGlmIChzaG91bGRUaHJvdyAmJiBtZXNzYWdlKSB7XG5cdCAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcblx0ICAgIH0gZWxzZSBpZiAobWVzc2FnZSkge1xuXHQgICAgICAvKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cdCAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoYXBpLCBhcmdzKSB7XG5cdCAgICB2YXIgbWVzc2FnZXMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIgfHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBbXSA6IGFyZ3VtZW50c1syXTtcblx0ICAgIHZhciBvdXRwdXQgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1szXTtcblxuXHQgICAgdmFyIGdPdXQgPSBhcGlDaGVjay5jb25maWcub3V0cHV0IHx8IHt9O1xuXHQgICAgdmFyIHByZWZpeCA9IGdldFByZWZpeCgpO1xuXHQgICAgdmFyIHN1ZmZpeCA9IGdldFN1ZmZpeCgpO1xuXHQgICAgdmFyIHVybCA9IGdldFVybCgpO1xuXHQgICAgdmFyIG1lc3NhZ2UgPSAnYXBpQ2hlY2sgZmFpbGVkISAnICsgbWVzc2FnZXMuam9pbignLCAnKTtcblx0ICAgIHZhciBwYXNzZWRBbmRTaG91bGRIYXZlUGFzc2VkID0gJ1xcblxcbicgKyBidWlsZE1lc3NhZ2VGcm9tQXBpQW5kQXJncyhhcGksIGFyZ3MpO1xuXHQgICAgcmV0dXJuIChwcmVmaXggKyAnICcgKyBtZXNzYWdlICsgJyAnICsgc3VmZml4ICsgJyAnICsgKHVybCB8fCAnJykgKyBwYXNzZWRBbmRTaG91bGRIYXZlUGFzc2VkKS50cmltKCk7XG5cblx0ICAgIGZ1bmN0aW9uIGdldFByZWZpeCgpIHtcblx0ICAgICAgdmFyIHAgPSBvdXRwdXQub25seVByZWZpeDtcblx0ICAgICAgaWYgKCFwKSB7XG5cdCAgICAgICAgcCA9ICgoZ091dC5wcmVmaXggfHwgJycpICsgJyAnICsgKG91dHB1dC5wcmVmaXggfHwgJycpKS50cmltKCk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHA7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGdldFN1ZmZpeCgpIHtcblx0ICAgICAgdmFyIHMgPSBvdXRwdXQub25seVN1ZmZpeDtcblx0ICAgICAgaWYgKCFzKSB7XG5cdCAgICAgICAgcyA9ICgob3V0cHV0LnN1ZmZpeCB8fCAnJykgKyAnICcgKyAoZ091dC5zdWZmaXggfHwgJycpKS50cmltKCk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHM7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcblx0ICAgICAgdmFyIHUgPSBvdXRwdXQudXJsO1xuXHQgICAgICBpZiAoIXUpIHtcblx0ICAgICAgICB1ID0gZ091dC5kb2NzQmFzZVVybCAmJiBvdXRwdXQudXJsU3VmZml4ICYmICgnJyArIGdPdXQuZG9jc0Jhc2VVcmwgKyBvdXRwdXQudXJsU3VmZml4KS50cmltKCk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gYnVpbGRNZXNzYWdlRnJvbUFwaUFuZEFyZ3MoYXBpLCBhcmdzKSB7XG5cdCAgICB2YXIgX2dldFR5cGVzID0gZ2V0VHlwZXMoYXBpLCBhcmdzKTtcblxuXHQgICAgdmFyIGFwaVR5cGVzID0gX2dldFR5cGVzLmFwaVR5cGVzO1xuXHQgICAgdmFyIGFyZ1R5cGVzID0gX2dldFR5cGVzLmFyZ1R5cGVzO1xuXG5cdCAgICB2YXIgY29weSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MgfHwgW10pO1xuXHQgICAgdmFyIHJlcGxhY2VkSXRlbXMgPSBbXTtcblx0ICAgIHJlcGxhY2VGdW5jdGlvbldpdGhOYW1lKGNvcHkpO1xuXHQgICAgdmFyIHBhc3NlZEFyZ3MgPSBnZXRPYmplY3RTdHJpbmcoY29weSk7XG5cdCAgICBhcmdUeXBlcyA9IGdldE9iamVjdFN0cmluZyhhcmdUeXBlcyk7XG5cdCAgICBhcGlUeXBlcyA9IGdldE9iamVjdFN0cmluZyhhcGlUeXBlcyk7XG5cblx0ICAgIHJldHVybiBnZW5lcmF0ZU1lc3NhZ2UoKTtcblxuXHQgICAgLy8gZnVuY3Rpb25zXG5cblx0ICAgIGZ1bmN0aW9uIHJlcGxhY2VGdW5jdGlvbldpdGhOYW1lKG9iaikge1xuXHQgICAgICBlYWNoKG9iaiwgZnVuY3Rpb24gKHZhbCwgbmFtZSkge1xuXHQgICAgICAgIC8qIGVzbGludCBjb21wbGV4aXR5OlsyLCA2XSAqL1xuXHQgICAgICAgIGlmIChyZXBsYWNlZEl0ZW1zLmluZGV4T2YodmFsKSA9PT0gLTEpIHtcblx0ICAgICAgICAgIC8vIGF2b2lkIHJlY3Vyc2l2ZSBwcm9ibGVtc1xuXHQgICAgICAgICAgcmVwbGFjZWRJdGVtcy5wdXNoKHZhbCk7XG5cdCAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcblx0ICAgICAgICAgICAgcmVwbGFjZUZ1bmN0aW9uV2l0aE5hbWUob2JqKTtcblx0ICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICBvYmpbbmFtZV0gPSB2YWwuZGlzcGxheU5hbWUgfHwgdmFsLm5hbWUgfHwgJ2Fub255bW91cyBmdW5jdGlvbic7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZ2V0T2JqZWN0U3RyaW5nKHR5cGVzKSB7XG5cdCAgICAgIGlmICghdHlwZXMgfHwgIXR5cGVzLmxlbmd0aCkge1xuXHQgICAgICAgIHJldHVybiAnbm90aGluZyc7XG5cdCAgICAgIH0gZWxzZSBpZiAodHlwZXMgJiYgdHlwZXMubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgdHlwZXMgPSB0eXBlc1swXTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gc3RyaW5naWZ5KHR5cGVzLCBudWxsLCAyKTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZ2VuZXJhdGVNZXNzYWdlKCkge1xuXHQgICAgICB2YXIgbiA9ICdcXG4nO1xuXHQgICAgICB2YXIgdXNlUyA9IHRydWU7XG5cdCAgICAgIGlmIChhcmdzICYmIGFyZ3MubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsKSB7XG5cdCAgICAgICAgICB1c2VTID0gISFPYmplY3Qua2V5cyhhcmdzWzBdKS5sZW5ndGg7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHVzZVMgPSBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHR5cGVzID0gJ3R5cGUnICsgKHVzZVMgPyAncycgOiAnJyk7XG5cdCAgICAgIHZhciBuZXdMaW5lID0gbiArIG47XG5cdCAgICAgIHJldHVybiAnWW91IHBhc3NlZDonICsgbiArIHBhc3NlZEFyZ3MgKyBuZXdMaW5lICsgKCdXaXRoIHRoZSAnICsgdHlwZXMgKyAnOicgKyBuICsgYXJnVHlwZXMgKyBuZXdMaW5lKSArICgnVGhlIEFQSSBjYWxscyBmb3I6JyArIG4gKyBhcGlUeXBlcyk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0VHlwZXMoYXBpLCBhcmdzKSB7XG5cdCAgICBhcGkgPSBhcnJheWlmeShhcGkpO1xuXHQgICAgYXJncyA9IGFycmF5aWZ5KGFyZ3MpO1xuXHQgICAgdmFyIGFwaVR5cGVzID0gYXBpLm1hcChmdW5jdGlvbiAoY2hlY2tlciwgaW5kZXgpIHtcblx0ICAgICAgdmFyIHNwZWNpZmllZCA9IG1vZHVsZS5leHBvcnRzLmdsb2JhbENvbmZpZy5oYXNPd25Qcm9wZXJ0eSgndmVyYm9zZScpO1xuXHQgICAgICByZXR1cm4gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwge1xuXHQgICAgICAgIHRlcnNlOiBzcGVjaWZpZWQgPyAhbW9kdWxlLmV4cG9ydHMuZ2xvYmFsQ29uZmlnLnZlcmJvc2UgOiAhYXBpQ2hlY2suY29uZmlnLnZlcmJvc2UsXG5cdCAgICAgICAgb2JqOiBhcmdzW2luZGV4XSxcblx0ICAgICAgICBhZGRIZWxwZXJzOiB0cnVlXG5cdCAgICAgIH0pO1xuXHQgICAgfSk7XG5cdCAgICB2YXIgYXJnVHlwZXMgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgIHJldHVybiBnZXRBcmdEaXNwbGF5KGFyZywgW10pO1xuXHQgICAgfSk7XG5cdCAgICByZXR1cm4geyBhcmdUeXBlczogYXJnVHlwZXMsIGFwaVR5cGVzOiBhcGlUeXBlcyB9O1xuXHQgIH1cblx0fVxuXG5cdC8vIFNUQVRFTEVTUyBGVU5DVElPTlNcblxuXHQvKipcblx0ICogVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBmb3IgYWN0dWFsbHkgY2hlY2tpbmcgdGhlIGFyZ3VtZW50cyB3aXRoIHRoZSBhcGkuXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFwaSAtIGNoZWNrZXJzXG5cdCAqIEBwYXJhbSAge0FycmF5fSBhcmdzIC0gYW5kIGFyZ3VtZW50cyBvYmplY3Rcblx0ICogQHJldHVybnMge0FycmF5fSAtIHRoZSBlcnJvciBtZXNzYWdlc1xuXHQgKi9cblx0ZnVuY3Rpb24gY2hlY2tBcGlXaXRoQXJncyhhcGksIGFyZ3MpIHtcblx0ICAvKiBlc2xpbnQgY29tcGxleGl0eTpbMiwgN10gKi9cblx0ICB2YXIgbWVzc2FnZXMgPSBbXTtcblx0ICB2YXIgZmFpbGVkID0gZmFsc2U7XG5cdCAgdmFyIGNoZWNrZXJJbmRleCA9IDA7XG5cdCAgdmFyIGFyZ0luZGV4ID0gMDtcblx0ICB2YXIgYXJnID0gdW5kZWZpbmVkLFxuXHQgICAgICBjaGVja2VyID0gdW5kZWZpbmVkLFxuXHQgICAgICByZXMgPSB1bmRlZmluZWQsXG5cdCAgICAgIGxhc3RDaGVja2VyID0gdW5kZWZpbmVkLFxuXHQgICAgICBhcmdOYW1lID0gdW5kZWZpbmVkLFxuXHQgICAgICBhcmdGYWlsZWQgPSB1bmRlZmluZWQsXG5cdCAgICAgIHNraXBQcmV2aW91c0NoZWNrZXIgPSB1bmRlZmluZWQ7XG5cdCAgLyoganNoaW50IC1XMDg0ICovXG5cdCAgd2hpbGUgKChjaGVja2VyID0gYXBpW2NoZWNrZXJJbmRleCsrXSkgJiYgYXJnSW5kZXggPCBhcmdzLmxlbmd0aCkge1xuXHQgICAgYXJnID0gYXJnc1thcmdJbmRleCsrXTtcblx0ICAgIGFyZ05hbWUgPSAnQXJndW1lbnQgJyArIGFyZ0luZGV4ICsgKGNoZWNrZXIuaXNPcHRpb25hbCA/ICcgKG9wdGlvbmFsKScgOiAnJyk7XG5cdCAgICByZXMgPSBjaGVja2VyKGFyZywgJ3ZhbHVlJywgYXJnTmFtZSk7XG5cdCAgICBhcmdGYWlsZWQgPSBpc0Vycm9yKHJlcyk7XG5cdCAgICBsYXN0Q2hlY2tlciA9IGNoZWNrZXJJbmRleCA+PSBhcGkubGVuZ3RoO1xuXHQgICAgc2tpcFByZXZpb3VzQ2hlY2tlciA9IGNoZWNrZXJJbmRleCA+IDEgJiYgYXBpW2NoZWNrZXJJbmRleCAtIDFdLmlzT3B0aW9uYWw7XG5cdCAgICBpZiAoYXJnRmFpbGVkICYmIGxhc3RDaGVja2VyIHx8IGFyZ0ZhaWxlZCAmJiAhbGFzdENoZWNrZXIgJiYgIWNoZWNrZXIuaXNPcHRpb25hbCAmJiAhc2tpcFByZXZpb3VzQ2hlY2tlcikge1xuXHQgICAgICBmYWlsZWQgPSB0cnVlO1xuXHQgICAgICBtZXNzYWdlcy5wdXNoKGdldENoZWNrZXJFcnJvck1lc3NhZ2UocmVzLCBjaGVja2VyLCBhcmcpKTtcblx0ICAgIH0gZWxzZSBpZiAoYXJnRmFpbGVkICYmIGNoZWNrZXIuaXNPcHRpb25hbCkge1xuXHQgICAgICBhcmdJbmRleC0tO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgbWVzc2FnZXMucHVzaCh0KGFyZ05hbWUpICsgJyBwYXNzZWQnKTtcblx0ICAgIH1cblx0ICB9XG5cdCAgcmV0dXJuIGZhaWxlZCA/IG1lc3NhZ2VzIDogW107XG5cdH1cblxuXHRjaGVja2VyVHlwZVR5cGUudHlwZSA9ICdmdW5jdGlvbiB3aXRoIF9fYXBpQ2hlY2tEYXRhIHByb3BlcnR5IGFuZCBgJHtmdW5jdGlvbi50eXBlfWAgcHJvcGVydHknO1xuXHRmdW5jdGlvbiBjaGVja2VyVHlwZVR5cGUoY2hlY2tlclR5cGUsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgdmFyIGFwaUNoZWNrRGF0YUNoZWNrZXIgPSBjaGVja2Vycy5zaGFwZSh7XG5cdCAgICB0eXBlOiBjaGVja2Vycy5zdHJpbmcsXG5cdCAgICBvcHRpb25hbDogY2hlY2tlcnMuYm9vbFxuXHQgIH0pO1xuXHQgIHZhciBhc0Z1bmMgPSBjaGVja2Vycy5mdW5jLndpdGhQcm9wZXJ0aWVzKHsgX19hcGlDaGVja0RhdGE6IGFwaUNoZWNrRGF0YUNoZWNrZXIgfSk7XG5cdCAgdmFyIGFzU2hhcGUgPSBjaGVja2Vycy5zaGFwZSh7IF9fYXBpQ2hlY2tEYXRhOiBhcGlDaGVja0RhdGFDaGVja2VyIH0pO1xuXHQgIHZhciB3cm9uZ1NoYXBlID0gY2hlY2tlcnMub25lT2ZUeXBlKFthc0Z1bmMsIGFzU2hhcGVdKShjaGVja2VyVHlwZSwgbmFtZSwgbG9jYXRpb24pO1xuXHQgIGlmIChpc0Vycm9yKHdyb25nU2hhcGUpKSB7XG5cdCAgICByZXR1cm4gd3JvbmdTaGFwZTtcblx0ICB9XG5cdCAgaWYgKHR5cGVvZiBjaGVja2VyVHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiAhY2hlY2tlclR5cGUuaGFzT3duUHJvcGVydHkoY2hlY2tlclR5cGUuX19hcGlDaGVja0RhdGEudHlwZSkpIHtcblx0ICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgY2hlY2tlclR5cGVUeXBlLnR5cGUpO1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldENoZWNrZXJFcnJvck1lc3NhZ2UocmVzLCBjaGVja2VyLCB2YWwpIHtcblx0ICB2YXIgY2hlY2tlckhlbHAgPSBnZXRDaGVja2VySGVscChjaGVja2VyLCB2YWwpO1xuXHQgIGNoZWNrZXJIZWxwID0gY2hlY2tlckhlbHAgPyAnIC0gJyArIGNoZWNrZXJIZWxwIDogJyc7XG5cdCAgcmV0dXJuIHJlcy5tZXNzYWdlICsgY2hlY2tlckhlbHA7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDaGVja2VySGVscChfcmVmLCB2YWwpIHtcblx0ICB2YXIgaGVscCA9IF9yZWYuaGVscDtcblxuXHQgIGlmICghaGVscCkge1xuXHQgICAgcmV0dXJuICcnO1xuXHQgIH1cblx0ICBpZiAodHlwZW9mIGhlbHAgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIGhlbHAgPSBoZWxwKHZhbCk7XG5cdCAgfVxuXHQgIHJldHVybiBoZWxwO1xuXHR9XG5cblx0ZnVuY3Rpb24gY2hlY2tFbm91Z2hBcmdzKGFwaSwgYXJncykge1xuXHQgIHZhciByZXF1aXJlZEFyZ3MgPSBhcGkuZmlsdGVyKGZ1bmN0aW9uIChhKSB7XG5cdCAgICByZXR1cm4gIWEuaXNPcHRpb25hbDtcblx0ICB9KTtcblx0ICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZEFyZ3MubGVuZ3RoKSB7XG5cdCAgICByZXR1cm4gWydOb3QgZW5vdWdoIGFyZ3VtZW50cyBzcGVjaWZpZWQuIFJlcXVpcmVzIGAnICsgcmVxdWlyZWRBcmdzLmxlbmd0aCArICdgLCB5b3UgcGFzc2VkIGAnICsgYXJncy5sZW5ndGggKyAnYCddO1xuXHQgIH0gZWxzZSB7XG5cdCAgICByZXR1cm4gW107XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0QXJnRGlzcGxheShhcmcsIGdvdHRlbkFyZ3MpIHtcblx0ICAvKiBlc2xpbnQgY29tcGxleGl0eTpbMiwgN10gKi9cblx0ICB2YXIgY05hbWUgPSBhcmcgJiYgYXJnLmNvbnN0cnVjdG9yICYmIGFyZy5jb25zdHJ1Y3Rvci5uYW1lO1xuXHQgIHZhciB0eXBlID0gdHlwZU9mKGFyZyk7XG5cdCAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIGlmIChoYXNLZXlzKCkpIHtcblx0ICAgICAgdmFyIHByb3BlcnRpZXMgPSBzdHJpbmdpZnkoZ2V0RGlzcGxheUlmTm90R290dGVuKCkpO1xuXHQgICAgICByZXR1cm4gY05hbWUgKyAnICh3aXRoIHByb3BlcnRpZXM6ICcgKyBwcm9wZXJ0aWVzICsgJyknO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIGNOYW1lO1xuXHQgIH1cblxuXHQgIGlmIChhcmcgPT09IG51bGwpIHtcblx0ICAgIHJldHVybiAnbnVsbCc7XG5cdCAgfVxuXG5cdCAgaWYgKHR5cGUgIT09ICdhcnJheScgJiYgdHlwZSAhPT0gJ29iamVjdCcpIHtcblx0ICAgIHJldHVybiB0eXBlO1xuXHQgIH1cblxuXHQgIGlmIChoYXNLZXlzKCkpIHtcblx0ICAgIHJldHVybiBnZXREaXNwbGF5SWZOb3RHb3R0ZW4oKTtcblx0ICB9XG5cblx0ICByZXR1cm4gY05hbWU7XG5cblx0ICAvLyB1dGlsaXR5IGZ1bmN0aW9uc1xuXHQgIGZ1bmN0aW9uIGhhc0tleXMoKSB7XG5cdCAgICByZXR1cm4gYXJnICYmIE9iamVjdC5rZXlzKGFyZykubGVuZ3RoO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldERpc3BsYXlJZk5vdEdvdHRlbigpIHtcblx0ICAgIGlmIChnb3R0ZW5BcmdzLmluZGV4T2YoYXJnKSAhPT0gLTEpIHtcblx0ICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcblx0ICAgIH1cblx0ICAgIGdvdHRlbkFyZ3MucHVzaChhcmcpO1xuXHQgICAgcmV0dXJuIGdldERpc3BsYXkoYXJnLCBnb3R0ZW5BcmdzKTtcblx0ICB9XG5cdH1cblxuXHRmdW5jdGlvbiBnZXREaXNwbGF5KG9iaiwgZ290dGVuQXJncykge1xuXHQgIHZhciBhcmdEaXNwbGF5ID0ge307XG5cdCAgZWFjaChvYmosIGZ1bmN0aW9uICh2LCBrKSB7XG5cdCAgICByZXR1cm4gYXJnRGlzcGxheVtrXSA9IGdldEFyZ0Rpc3BsYXkodiwgZ290dGVuQXJncyk7XG5cdCAgfSk7XG5cdCAgcmV0dXJuIGFyZ0Rpc3BsYXk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRBcGlDaGVja0FwaXMoKSB7XG5cdCAgdmFyIG9zID0gY2hlY2tlcnMuc3RyaW5nLm9wdGlvbmFsO1xuXG5cdCAgdmFyIGNoZWNrZXJGbkNoZWNrZXIgPSBjaGVja2Vycy5mdW5jLndpdGhQcm9wZXJ0aWVzKHtcblx0ICAgIHR5cGU6IGNoZWNrZXJzLm9uZU9mVHlwZShbY2hlY2tlcnMuc3RyaW5nLCBjaGVja2VyVHlwZVR5cGVdKS5vcHRpb25hbCxcblx0ICAgIGRpc3BsYXlOYW1lOiBjaGVja2Vycy5zdHJpbmcub3B0aW9uYWwsXG5cdCAgICBzaG9ydFR5cGU6IGNoZWNrZXJzLnN0cmluZy5vcHRpb25hbCxcblx0ICAgIG5vdE9wdGlvbmFsOiBjaGVja2Vycy5ib29sLm9wdGlvbmFsLFxuXHQgICAgbm90UmVxdWlyZWQ6IGNoZWNrZXJzLmJvb2wub3B0aW9uYWxcblx0ICB9KTtcblxuXHQgIHZhciBnZXRBcGlDaGVja0luc3RhbmNlQ2hlY2tlcnMgPSBbY2hlY2tlcnMuc2hhcGUoe1xuXHQgICAgb3V0cHV0OiBjaGVja2Vycy5zaGFwZSh7XG5cdCAgICAgIHByZWZpeDogY2hlY2tlcnMuc3RyaW5nLm9wdGlvbmFsLFxuXHQgICAgICBzdWZmaXg6IGNoZWNrZXJzLnN0cmluZy5vcHRpb25hbCxcblx0ICAgICAgZG9jc0Jhc2VVcmw6IGNoZWNrZXJzLnN0cmluZy5vcHRpb25hbFxuXHQgICAgfSkuc3RyaWN0Lm9wdGlvbmFsLFxuXHQgICAgdmVyYm9zZTogY2hlY2tlcnMuYm9vbC5vcHRpb25hbCxcblx0ICAgIGRpc2FibGVkOiBjaGVja2Vycy5ib29sLm9wdGlvbmFsXG5cdCAgfSkuc3RyaWN0Lm9wdGlvbmFsLCBjaGVja2Vycy5vYmplY3RPZihjaGVja2VyRm5DaGVja2VyKS5vcHRpb25hbF07XG5cblx0ICB2YXIgY2hlY2tBcGlDaGVja0FwaSA9IFtjaGVja2Vycy50eXBlT3JBcnJheU9mKGNoZWNrZXJGbkNoZWNrZXIpLCBjaGVja2Vycy5hbnkub3B0aW9uYWwsIGNoZWNrZXJzLnNoYXBlKHtcblx0ICAgIHByZWZpeDogb3MsIHN1ZmZpeDogb3MsIHVybFN1ZmZpeDogb3MsIC8vIGFwcGVuZGVkIGNhc2Vcblx0ICAgIG9ubHlQcmVmaXg6IG9zLCBvbmx5U3VmZml4OiBvcywgdXJsOiBvcyAvLyBvdmVycmlkZSBjYXNlXG5cdCAgfSkuc3RyaWN0Lm9wdGlvbmFsXTtcblxuXHQgIHJldHVybiB7XG5cdCAgICBjaGVja2VyRm5DaGVja2VyOiBjaGVja2VyRm5DaGVja2VyLFxuXHQgICAgZ2V0QXBpQ2hlY2tJbnN0YW5jZUNoZWNrZXJzOiBnZXRBcGlDaGVja0luc3RhbmNlQ2hlY2tlcnMsXG5cdCAgICBjaGVja0FwaUNoZWNrQXBpOiBjaGVja0FwaUNoZWNrQXBpXG5cdCAgfTtcblx0fVxuXG4vKioqLyB9LFxuLyogMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdpZnk7XG5cblx0ZnVuY3Rpb24gZ2V0U2VyaWFsaXplIChmbiwgZGVjeWNsZSkge1xuXHQgIHZhciBzZWVuID0gW10sIGtleXMgPSBbXTtcblx0ICBkZWN5Y2xlID0gZGVjeWNsZSB8fCBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG5cdCAgICByZXR1cm4gJ1tDaXJjdWxhciAnICsgZ2V0UGF0aCh2YWx1ZSwgc2Vlbiwga2V5cykgKyAnXSdcblx0ICB9O1xuXHQgIHJldHVybiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG5cdCAgICB2YXIgcmV0ID0gdmFsdWU7XG5cdCAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSkge1xuXHQgICAgICBpZiAoc2Vlbi5pbmRleE9mKHZhbHVlKSAhPT0gLTEpXG5cdCAgICAgICAgcmV0ID0gZGVjeWNsZShrZXksIHZhbHVlKTtcblx0ICAgICAgZWxzZSB7XG5cdCAgICAgICAgc2Vlbi5wdXNoKHZhbHVlKTtcblx0ICAgICAgICBrZXlzLnB1c2goa2V5KTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgaWYgKGZuKSByZXQgPSBmbihrZXksIHJldCk7XG5cdCAgICByZXR1cm4gcmV0O1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldFBhdGggKHZhbHVlLCBzZWVuLCBrZXlzKSB7XG5cdCAgdmFyIGluZGV4ID0gc2Vlbi5pbmRleE9mKHZhbHVlKTtcblx0ICB2YXIgcGF0aCA9IFsga2V5c1tpbmRleF0gXTtcblx0ICBmb3IgKGluZGV4LS07IGluZGV4ID49IDA7IGluZGV4LS0pIHtcblx0ICAgIGlmIChzZWVuW2luZGV4XVsgcGF0aFswXSBdID09PSB2YWx1ZSkge1xuXHQgICAgICB2YWx1ZSA9IHNlZW5baW5kZXhdO1xuXHQgICAgICBwYXRoLnVuc2hpZnQoa2V5c1tpbmRleF0pO1xuXHQgICAgfVxuXHQgIH1cblx0ICByZXR1cm4gJ34nICsgcGF0aC5qb2luKCcuJyk7XG5cdH1cblxuXHRmdW5jdGlvbiBzdHJpbmdpZnkob2JqLCBmbiwgc3BhY2VzLCBkZWN5Y2xlKSB7XG5cdCAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgZ2V0U2VyaWFsaXplKGZuLCBkZWN5Y2xlKSwgc3BhY2VzKTtcblx0fVxuXG5cdHN0cmluZ2lmeS5nZXRTZXJpYWxpemUgPSBnZXRTZXJpYWxpemU7XG5cblxuLyoqKi8gfSxcbi8qIDMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5cdHZhciBzdHJpbmdpZnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXHR2YXIgY2hlY2tlckhlbHBlcnMgPSB7XG5cdCAgYWRkT3B0aW9uYWw6IGFkZE9wdGlvbmFsLCBnZXRSZXF1aXJlZFZlcnNpb246IGdldFJlcXVpcmVkVmVyc2lvbiwgc2V0dXBDaGVja2VyOiBzZXR1cENoZWNrZXIsIGFkZE51bGxhYmxlOiBhZGROdWxsYWJsZVxuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgIGVhY2g6IGVhY2gsIGNvcHk6IGNvcHksIHR5cGVPZjogdHlwZU9mLCBhcnJheWlmeTogYXJyYXlpZnksIGdldENoZWNrZXJEaXNwbGF5OiBnZXRDaGVja2VyRGlzcGxheSxcblx0ICBpc0Vycm9yOiBpc0Vycm9yLCBsaXN0OiBsaXN0LCBnZXRFcnJvcjogZ2V0RXJyb3IsIG5BdEw6IG5BdEwsIHQ6IHQsIHVuZGVmOiB1bmRlZiwgY2hlY2tlckhlbHBlcnM6IGNoZWNrZXJIZWxwZXJzLFxuXHQgIG5vb3A6IG5vb3Bcblx0fTtcblxuXHRmdW5jdGlvbiBjb3B5KG9iaikge1xuXHQgIHZhciB0eXBlID0gdHlwZU9mKG9iaik7XG5cdCAgdmFyIGRhQ29weSA9IHVuZGVmaW5lZDtcblx0ICBpZiAodHlwZSA9PT0gJ2FycmF5Jykge1xuXHQgICAgZGFDb3B5ID0gW107XG5cdCAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuXHQgICAgZGFDb3B5ID0ge307XG5cdCAgfSBlbHNlIHtcblx0ICAgIHJldHVybiBvYmo7XG5cdCAgfVxuXHQgIGVhY2gob2JqLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcblx0ICAgIGRhQ29weVtrZXldID0gdmFsOyAvLyBjYW5ub3Qgc2luZ2xlLWxpbmUgdGhpcyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYWJvcnQgdGhlIGVhY2hcblx0ICB9KTtcblx0ICByZXR1cm4gZGFDb3B5O1xuXHR9XG5cblx0ZnVuY3Rpb24gdHlwZU9mKG9iaikge1xuXHQgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcblx0ICAgIHJldHVybiAnYXJyYXknO1xuXHQgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG5cdCAgICByZXR1cm4gJ29iamVjdCc7XG5cdCAgfSBlbHNlIHtcblx0ICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldENoZWNrZXJEaXNwbGF5KGNoZWNrZXIsIG9wdGlvbnMpIHtcblx0ICAvKiBlc2xpbnQgY29tcGxleGl0eTpbMiwgN10gKi9cblx0ICB2YXIgZGlzcGxheSA9IHVuZGVmaW5lZDtcblx0ICB2YXIgc2hvcnQgPSBvcHRpb25zICYmIG9wdGlvbnMuc2hvcnQ7XG5cdCAgaWYgKHNob3J0ICYmIGNoZWNrZXIuc2hvcnRUeXBlKSB7XG5cdCAgICBkaXNwbGF5ID0gY2hlY2tlci5zaG9ydFR5cGU7XG5cdCAgfSBlbHNlIGlmICghc2hvcnQgJiYgdHlwZW9mIGNoZWNrZXIudHlwZSA9PT0gJ29iamVjdCcgfHwgY2hlY2tlci50eXBlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICBkaXNwbGF5ID0gZ2V0Q2hlY2tlclR5cGUoY2hlY2tlciwgb3B0aW9ucyk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGRpc3BsYXkgPSBnZXRDaGVja2VyVHlwZShjaGVja2VyLCBvcHRpb25zKSB8fCBjaGVja2VyLmRpc3BsYXlOYW1lIHx8IGNoZWNrZXIubmFtZTtcblx0ICB9XG5cdCAgcmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDaGVja2VyVHlwZShfcmVmLCBvcHRpb25zKSB7XG5cdCAgdmFyIHR5cGUgPSBfcmVmLnR5cGU7XG5cblx0ICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIHZhciBfX2FwaUNoZWNrRGF0YSA9IHR5cGUuX19hcGlDaGVja0RhdGE7XG5cdCAgICB2YXIgdHlwZVR5cGVzID0gdHlwZShvcHRpb25zKTtcblx0ICAgIHR5cGUgPSBfZGVmaW5lUHJvcGVydHkoe1xuXHQgICAgICBfX2FwaUNoZWNrRGF0YTogX19hcGlDaGVja0RhdGFcblx0ICAgIH0sIF9fYXBpQ2hlY2tEYXRhLnR5cGUsIHR5cGVUeXBlcyk7XG5cdCAgfVxuXHQgIHJldHVybiB0eXBlO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXJyYXlpZnkob2JqKSB7XG5cdCAgaWYgKCFvYmopIHtcblx0ICAgIHJldHVybiBbXTtcblx0ICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuXHQgICAgcmV0dXJuIG9iajtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIFtvYmpdO1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuXHQgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcblx0ICAgIHJldHVybiBlYWNoQXJyeShvYmosIGl0ZXJhdG9yLCBjb250ZXh0KTtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIGVhY2hPYmoob2JqLCBpdGVyYXRvciwgY29udGV4dCk7XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gZWFjaE9iaihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG5cdCAgdmFyIHJldCA9IHVuZGVmaW5lZDtcblx0ICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0ICAvKiBlc2xpbnQgcHJlZmVyLWNvbnN0OjAgKi8gLy8gc29tZSB3ZWlyZCBlc2xpbnQgYnVnP1xuXHQgIGZvciAodmFyIGtleSBpbiBvYmopIHtcblx0ICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIHtcblx0ICAgICAgcmV0ID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5XSwga2V5LCBvYmopO1xuXHQgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuXHQgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdCAgcmV0dXJuIHRydWU7XG5cdH1cblxuXHRmdW5jdGlvbiBlYWNoQXJyeShvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG5cdCAgdmFyIHJldCA9IHVuZGVmaW5lZDtcblx0ICB2YXIgbGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdCAgICByZXQgPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcblx0ICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG5cdCAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9XG5cdCAgfVxuXHQgIHJldHVybiB0cnVlO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNFcnJvcihvYmopIHtcblx0ICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRXJyb3I7XG5cdH1cblxuXHRmdW5jdGlvbiBsaXN0KGFycnksIGpvaW4sIGZpbmFsSm9pbikge1xuXHQgIGFycnkgPSBhcnJheWlmeShhcnJ5KTtcblx0ICB2YXIgY29weSA9IGFycnkuc2xpY2UoKTtcblx0ICB2YXIgbGFzdCA9IGNvcHkucG9wKCk7XG5cdCAgaWYgKGNvcHkubGVuZ3RoID09PSAxKSB7XG5cdCAgICBqb2luID0gJyAnO1xuXHQgIH1cblx0ICByZXR1cm4gY29weS5qb2luKGpvaW4pICsgKCcnICsgKGNvcHkubGVuZ3RoID8gam9pbiArIGZpbmFsSm9pbiA6ICcnKSArIGxhc3QpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIGNoZWNrZXJUeXBlKSB7XG5cdCAgaWYgKHR5cGVvZiBjaGVja2VyVHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgY2hlY2tlclR5cGUgPSBjaGVja2VyVHlwZSh7IHNob3J0OiB0cnVlIH0pO1xuXHQgIH1cblx0ICB2YXIgc3RyaW5nVHlwZSA9IHR5cGVvZiBjaGVja2VyVHlwZSAhPT0gJ29iamVjdCcgPyBjaGVja2VyVHlwZSA6IHN0cmluZ2lmeShjaGVja2VyVHlwZSk7XG5cdCAgcmV0dXJuIG5ldyBFcnJvcihuQXRMKG5hbWUsIGxvY2F0aW9uKSArICcgbXVzdCBiZSAnICsgdChzdHJpbmdUeXBlKSk7XG5cdH1cblxuXHRmdW5jdGlvbiBuQXRMKG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgdmFyIHROYW1lID0gdChuYW1lIHx8ICd2YWx1ZScpO1xuXHQgIHZhciB0TG9jYXRpb24gPSAhbG9jYXRpb24gPyAnJyA6ICcgYXQgJyArIHQobG9jYXRpb24pO1xuXHQgIHJldHVybiAnJyArIHROYW1lICsgdExvY2F0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gdCh0aGluZykge1xuXHQgIHJldHVybiAnYCcgKyB0aGluZyArICdgJztcblx0fVxuXG5cdGZ1bmN0aW9uIHVuZGVmKHRoaW5nKSB7XG5cdCAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gJ3VuZGVmaW5lZCc7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyB3aWxsIHNldCB1cCB0aGUgY2hlY2tlciB3aXRoIGFsbCBvZiB0aGUgZGVmYXVsdHMgdGhhdCBtb3N0IGNoZWNrZXJzIHdhbnQgbGlrZSByZXF1aXJlZCBieSBkZWZhdWx0IGFuZCBhblxuXHQgKiBvcHRpb25hbCB2ZXJzaW9uXG5cdCAqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGNoZWNrZXIgLSB0aGUgY2hlY2tlciB0byBzZXR1cCB3aXRoIHByb3BlcnRpZXNcblx0ICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgLSBwcm9wZXJ0aWVzIHRvIGFkZCB0byB0aGUgY2hlY2tlclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGRpc2FibGVkIC0gd2hlbiBzZXQgdG8gdHJ1ZSwgdGhpcyB3aWxsIHNldCB0aGUgY2hlY2tlciB0byBhIG5vLW9wIGZ1bmN0aW9uXG5cdCAqIEByZXR1cm5zIHtGdW5jdGlvbn0gY2hlY2tlciAtIHRoZSBzZXR1cCBjaGVja2VyXG5cdCAqL1xuXHRmdW5jdGlvbiBzZXR1cENoZWNrZXIoY2hlY2tlciwgcHJvcGVydGllcywgZGlzYWJsZWQpIHtcblx0ICAvKiBlc2xpbnQgY29tcGxleGl0eTpbMiwgOV0gKi9cblx0ICBpZiAoZGlzYWJsZWQpIHtcblx0ICAgIC8vIHN3YXAgb3V0IHRoZSBjaGVja2VyIGZvciBpdHMgb3duIGNvcHkgb2Ygbm9vcFxuXHQgICAgY2hlY2tlciA9IGdldE5vb3AoKTtcblx0ICAgIGNoZWNrZXIuaXNOb29wID0gdHJ1ZTtcblx0ICB9XG5cblx0ICBpZiAodHlwZW9mIGNoZWNrZXIudHlwZSA9PT0gJ3N0cmluZycpIHtcblx0ICAgIGNoZWNrZXIuc2hvcnRUeXBlID0gY2hlY2tlci50eXBlO1xuXHQgIH1cblxuXHQgIC8vIGFzc2lnbiBhbGwgcHJvcGVydGllcyBnaXZlblxuXHQgIGVhY2gocHJvcGVydGllcywgZnVuY3Rpb24gKHByb3AsIG5hbWUpIHtcblx0ICAgIHJldHVybiBjaGVja2VyW25hbWVdID0gcHJvcDtcblx0ICB9KTtcblxuXHQgIGlmICghY2hlY2tlci5kaXNwbGF5TmFtZSkge1xuXHQgICAgY2hlY2tlci5kaXNwbGF5TmFtZSA9ICdhcGlDaGVjayAnICsgdChjaGVja2VyLnNob3J0VHlwZSB8fCBjaGVja2VyLnR5cGUgfHwgY2hlY2tlci5uYW1lKSArICcgdHlwZSBjaGVja2VyJztcblx0ICB9XG5cblx0ICBpZiAoIWNoZWNrZXIubm90UmVxdWlyZWQpIHtcblx0ICAgIGNoZWNrZXIgPSBnZXRSZXF1aXJlZFZlcnNpb24oY2hlY2tlciwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGlmICghY2hlY2tlci5ub3ROdWxsYWJsZSkge1xuXHQgICAgYWRkTnVsbGFibGUoY2hlY2tlciwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGlmICghY2hlY2tlci5ub3RPcHRpb25hbCkge1xuXHQgICAgYWRkT3B0aW9uYWwoY2hlY2tlciwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIHJldHVybiBjaGVja2VyO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UmVxdWlyZWRWZXJzaW9uKGNoZWNrZXIsIGRpc2FibGVkKSB7XG5cdCAgdmFyIHJlcXVpcmVkQ2hlY2tlciA9IGRpc2FibGVkID8gZ2V0Tm9vcCgpIDogZnVuY3Rpb24gcmVxdWlyZWRDaGVja2VyKHZhbCwgbmFtZSwgbG9jYXRpb24sIG9iaikge1xuXHQgICAgaWYgKHVuZGVmKHZhbCkgJiYgIWNoZWNrZXIuaXNPcHRpb25hbCkge1xuXHQgICAgICB2YXIgdExvY2F0aW9uID0gbG9jYXRpb24gPyAnIGluICcgKyB0KGxvY2F0aW9uKSA6ICcnO1xuXHQgICAgICB2YXIgdHlwZSA9IGdldENoZWNrZXJEaXNwbGF5KGNoZWNrZXIsIHsgc2hvcnQ6IHRydWUgfSk7XG5cdCAgICAgIHZhciBzdHJpbmdUeXBlID0gdHlwZW9mIHR5cGUgIT09ICdvYmplY3QnID8gdHlwZSA6IHN0cmluZ2lmeSh0eXBlKTtcblx0ICAgICAgcmV0dXJuIG5ldyBFcnJvcignUmVxdWlyZWQgJyArIHQobmFtZSkgKyAnIG5vdCBzcGVjaWZpZWQnICsgdExvY2F0aW9uICsgJy4gTXVzdCBiZSAnICsgdChzdHJpbmdUeXBlKSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gY2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uLCBvYmopO1xuXHQgICAgfVxuXHQgIH07XG5cdCAgY29weVByb3BzKGNoZWNrZXIsIHJlcXVpcmVkQ2hlY2tlcik7XG5cdCAgcmVxdWlyZWRDaGVja2VyLm9yaWdpbmFsQ2hlY2tlciA9IGNoZWNrZXI7XG5cdCAgcmV0dXJuIHJlcXVpcmVkQ2hlY2tlcjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZE9wdGlvbmFsKGNoZWNrZXIsIGRpc2FibGVkKSB7XG5cdCAgdmFyIG9wdGlvbmFsQ2hlY2sgPSBkaXNhYmxlZCA/IGdldE5vb3AoKSA6IGZ1bmN0aW9uIG9wdGlvbmFsQ2hlY2sodmFsLCBuYW1lLCBsb2NhdGlvbiwgb2JqKSB7XG5cdCAgICBpZiAoIXVuZGVmKHZhbCkpIHtcblx0ICAgICAgcmV0dXJuIGNoZWNrZXIodmFsLCBuYW1lLCBsb2NhdGlvbiwgb2JqKTtcblx0ICAgIH1cblx0ICB9O1xuXHQgIC8vIGluaGVyaXQgYWxsIHByb3BlcnRpZXMgb24gdGhlIG9yaWdpbmFsIGNoZWNrZXJcblx0ICBjb3B5UHJvcHMoY2hlY2tlciwgb3B0aW9uYWxDaGVjayk7XG5cblx0ICBvcHRpb25hbENoZWNrLmlzT3B0aW9uYWwgPSB0cnVlO1xuXHQgIG9wdGlvbmFsQ2hlY2suZGlzcGxheU5hbWUgPSBjaGVja2VyLmRpc3BsYXlOYW1lICsgJyAob3B0aW9uYWwpJztcblx0ICBvcHRpb25hbENoZWNrLm9yaWdpbmFsQ2hlY2tlciA9IGNoZWNrZXI7XG5cblx0ICAvLyB0aGUgbWFnaWMgbGluZSB0aGF0IGFsbG93cyB5b3UgdG8gYWRkIC5vcHRpb25hbCB0byB0aGUgZW5kIG9mIHRoZSBjaGVja2Vyc1xuXHQgIGNoZWNrZXIub3B0aW9uYWwgPSBvcHRpb25hbENoZWNrO1xuXG5cdCAgZml4VHlwZShjaGVja2VyLCBjaGVja2VyLm9wdGlvbmFsKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZE51bGxhYmxlKGNoZWNrZXIsIGRpc2FibGVkKSB7XG5cdCAgdmFyIG51bGxhYmxlQ2hlY2sgPSBkaXNhYmxlZCA/IGdldE5vb3AoKSA6IGZ1bmN0aW9uIG51bGxhYmxlQ2hlY2sodmFsLCBuYW1lLCBsb2NhdGlvbiwgb2JqKSB7XG5cdCAgICBpZiAodmFsICE9PSBudWxsKSB7XG5cdCAgICAgIHJldHVybiBjaGVja2VyKHZhbCwgbmFtZSwgbG9jYXRpb24sIG9iaik7XG5cdCAgICB9XG5cdCAgfTtcblx0ICAvLyBpbmhlcml0IGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBvcmlnaW5hbCBjaGVja2VyXG5cdCAgY29weVByb3BzKGNoZWNrZXIsIG51bGxhYmxlQ2hlY2spO1xuXG5cdCAgbnVsbGFibGVDaGVjay5pc051bGxhYmxlID0gdHJ1ZTtcblx0ICBudWxsYWJsZUNoZWNrLmRpc3BsYXlOYW1lID0gY2hlY2tlci5kaXNwbGF5TmFtZSArICcgKG51bGxhYmxlKSc7XG5cdCAgbnVsbGFibGVDaGVjay5vcmlnaW5hbENoZWNrZXIgPSBjaGVja2VyO1xuXG5cdCAgLy8gdGhlIG1hZ2ljIGxpbmUgdGhhdCBhbGxvd3MgeW91IHRvIGFkZCAubnVsbGFibGUgdG8gdGhlIGVuZCBvZiB0aGUgY2hlY2tlcnNcblx0ICBjaGVja2VyLm51bGxhYmxlID0gbnVsbGFibGVDaGVjaztcblxuXHQgIGZpeFR5cGUoY2hlY2tlciwgY2hlY2tlci5udWxsYWJsZSk7XG5cdCAgaWYgKCFjaGVja2VyLm5vdE9wdGlvbmFsKSB7XG5cdCAgICBhZGRPcHRpb25hbChjaGVja2VyLm51bGxhYmxlLCBkaXNhYmxlZCk7XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gZml4VHlwZShjaGVja2VyLCBjaGVja2VyQ29weSkge1xuXHQgIC8vIGZpeCB0eXBlLCBiZWNhdXNlIGl0J3Mgbm90IGEgc3RyYWlnaHQgY29weS4uLlxuXHQgIC8vIHRoZSByZWFzb24gaXMgd2UgbmVlZCB0byBzcGVjaWZ5IHR5cGUuX19hcGlDaGVja0RhdGEub3B0aW9uYWwgYXMgdHJ1ZSBmb3IgdGhlIHRlcnNlL3ZlcmJvc2Ugb3B0aW9uLlxuXHQgIC8vIHdlIGFsc28gd2FudCB0byBhZGQgXCIob3B0aW9uYWwpXCIgdG8gdGhlIHR5cGVzIHdpdGggYSBzdHJpbmdcblx0ICBpZiAodHlwZW9mIGNoZWNrZXJDb3B5LnR5cGUgPT09ICdvYmplY3QnKSB7XG5cdCAgICBjaGVja2VyQ29weS50eXBlID0gY29weShjaGVja2VyQ29weS50eXBlKTsgLy8gbWFrZSBvdXIgb3duIGNvcHkgb2YgdGhpc1xuXHQgIH0gZWxzZSBpZiAodHlwZW9mIGNoZWNrZXJDb3B5LnR5cGUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgY2hlY2tlckNvcHkudHlwZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gY2hlY2tlci50eXBlLmFwcGx5KGNoZWNrZXIsIGFyZ3VtZW50cyk7XG5cdCAgICAgIH07XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBjaGVja2VyQ29weS50eXBlICs9ICcgKG9wdGlvbmFsKSc7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICBjaGVja2VyQ29weS50eXBlLl9fYXBpQ2hlY2tEYXRhID0gY29weShjaGVja2VyLnR5cGUuX19hcGlDaGVja0RhdGEpIHx8IHt9OyAvLyBhbmQgdGhpc1xuXHQgIGNoZWNrZXJDb3B5LnR5cGUuX19hcGlDaGVja0RhdGEub3B0aW9uYWwgPSB0cnVlO1xuXHR9XG5cblx0Ly8gVVRJTFNcblxuXHRmdW5jdGlvbiBjb3B5UHJvcHMoc3JjLCBkZXN0KSB7XG5cdCAgZWFjaChPYmplY3Qua2V5cyhzcmMpLCBmdW5jdGlvbiAoa2V5KSB7XG5cdCAgICByZXR1cm4gZGVzdFtrZXldID0gc3JjW2tleV07XG5cdCAgfSk7XG5cdH1cblxuXHRmdW5jdGlvbiBub29wKCkge31cblxuXHRmdW5jdGlvbiBnZXROb29wKCkge1xuXHQgIC8qIGVzbGludCBuby1zaGFkb3c6MCAqL1xuXHQgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdCAgcmV0dXJuIGZ1bmN0aW9uIG5vb3AoKSB7fTtcblx0fVxuXG4vKioqLyB9LFxuLyogNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBzdHJpbmdpZnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG5cdHZhciBfcmVxdWlyZSA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cblx0dmFyIHR5cGVPZiA9IF9yZXF1aXJlLnR5cGVPZjtcblx0dmFyIGVhY2ggPSBfcmVxdWlyZS5lYWNoO1xuXHR2YXIgY29weSA9IF9yZXF1aXJlLmNvcHk7XG5cdHZhciBnZXRDaGVja2VyRGlzcGxheSA9IF9yZXF1aXJlLmdldENoZWNrZXJEaXNwbGF5O1xuXHR2YXIgaXNFcnJvciA9IF9yZXF1aXJlLmlzRXJyb3I7XG5cdHZhciBhcnJheWlmeSA9IF9yZXF1aXJlLmFycmF5aWZ5O1xuXHR2YXIgbGlzdCA9IF9yZXF1aXJlLmxpc3Q7XG5cdHZhciBnZXRFcnJvciA9IF9yZXF1aXJlLmdldEVycm9yO1xuXHR2YXIgbkF0TCA9IF9yZXF1aXJlLm5BdEw7XG5cdHZhciB0ID0gX3JlcXVpcmUudDtcblx0dmFyIGNoZWNrZXJIZWxwZXJzID0gX3JlcXVpcmUuY2hlY2tlckhlbHBlcnM7XG5cdHZhciB1bmRlZiA9IF9yZXF1aXJlLnVuZGVmO1xuXHR2YXIgc2V0dXBDaGVja2VyID0gY2hlY2tlckhlbHBlcnMuc2V0dXBDaGVja2VyO1xuXG5cdHZhciBjaGVja2VycyA9IG1vZHVsZS5leHBvcnRzID0gZ2V0Q2hlY2tlcnMoKTtcblx0bW9kdWxlLmV4cG9ydHMuZ2V0Q2hlY2tlcnMgPSBnZXRDaGVja2VycztcblxuXHRmdW5jdGlvbiBnZXRDaGVja2VycyhkaXNhYmxlZCkge1xuXHQgIHJldHVybiB7XG5cdCAgICBhcnJheTogdHlwZU9mQ2hlY2tHZXR0ZXIoJ0FycmF5JyksXG5cdCAgICBib29sOiB0eXBlT2ZDaGVja0dldHRlcignQm9vbGVhbicpLFxuXHQgICAgbnVtYmVyOiB0eXBlT2ZDaGVja0dldHRlcignTnVtYmVyJyksXG5cdCAgICBzdHJpbmc6IHR5cGVPZkNoZWNrR2V0dGVyKCdTdHJpbmcnKSxcblx0ICAgIGZ1bmM6IGZ1bmNDaGVja0dldHRlcigpLFxuXHQgICAgb2JqZWN0OiBvYmplY3RDaGVja0dldHRlcigpLFxuXG5cdCAgICBlbXB0eU9iamVjdDogZW1wdHlPYmplY3RDaGVja0dldHRlcigpLFxuXG5cdCAgICBpbnN0YW5jZU9mOiBpbnN0YW5jZUNoZWNrR2V0dGVyLFxuXHQgICAgb25lT2Y6IG9uZU9mQ2hlY2tHZXR0ZXIsXG5cdCAgICBvbmVPZlR5cGU6IG9uZU9mVHlwZUNoZWNrR2V0dGVyLFxuXG5cdCAgICBhcnJheU9mOiBhcnJheU9mQ2hlY2tHZXR0ZXIsXG5cdCAgICBvYmplY3RPZjogb2JqZWN0T2ZDaGVja0dldHRlcixcblx0ICAgIHR5cGVPckFycmF5T2Y6IHR5cGVPckFycmF5T2ZDaGVja0dldHRlcixcblxuXHQgICAgcmFuZ2U6IHJhbmdlQ2hlY2tHZXR0ZXIsXG5cdCAgICBsZXNzVGhhbjogbGVzc1RoYW5DaGVja0dldHRlcixcblx0ICAgIGdyZWF0ZXJUaGFuOiBncmVhdGVyVGhhbkNoZWNrR2V0dGVyLFxuXG5cdCAgICBzaGFwZTogZ2V0U2hhcGVDaGVja0dldHRlcigpLFxuXHQgICAgYXJnczogYXJndW1lbnRzQ2hlY2tlckdldHRlcigpLFxuXG5cdCAgICBhbnk6IGFueUNoZWNrR2V0dGVyKCksXG5cdCAgICAnbnVsbCc6IG51bGxDaGVja0dldHRlcigpXG5cblx0ICB9O1xuXG5cdCAgZnVuY3Rpb24gdHlwZU9mQ2hlY2tHZXR0ZXIodHlwZSkge1xuXHQgICAgdmFyIGxUeXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiB0eXBlT2ZDaGVja2VyRGVmaW5pdGlvbih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICh0eXBlT2YodmFsKSAhPT0gbFR5cGUpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUgfSwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGZ1bmNDaGVja0dldHRlcigpIHtcblx0ICAgIHZhciB0eXBlID0gJ0Z1bmN0aW9uJztcblx0ICAgIHZhciBmdW5jdGlvbkNoZWNrZXIgPSBzZXR1cENoZWNrZXIoZnVuY3Rpb24gZnVuY3Rpb25DaGVja2VyRGVmaW5pdGlvbih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICh0eXBlT2YodmFsKSAhPT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgdHlwZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sIHsgdHlwZTogdHlwZSB9LCBkaXNhYmxlZCk7XG5cblx0ICAgIGZ1bmN0aW9uQ2hlY2tlci53aXRoUHJvcGVydGllcyA9IGZ1bmN0aW9uIGdldFdpdGhQcm9wZXJ0aWVzQ2hlY2tlcihwcm9wZXJ0aWVzKSB7XG5cdCAgICAgIHZhciBhcGlFcnJvciA9IGNoZWNrZXJzLm9iamVjdE9mKGNoZWNrZXJzLmZ1bmMpKHByb3BlcnRpZXMsICdwcm9wZXJ0aWVzJywgJ2FwaUNoZWNrLmZ1bmMud2l0aFByb3BlcnRpZXMnKTtcblx0ICAgICAgaWYgKGlzRXJyb3IoYXBpRXJyb3IpKSB7XG5cdCAgICAgICAgdGhyb3cgYXBpRXJyb3I7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHNoYXBlQ2hlY2tlciA9IGNoZWNrZXJzLnNoYXBlKHByb3BlcnRpZXMsIHRydWUpO1xuXHQgICAgICBzaGFwZUNoZWNrZXIudHlwZS5fX2FwaUNoZWNrRGF0YS50eXBlID0gJ2Z1bmMud2l0aFByb3BlcnRpZXMnO1xuXG5cdCAgICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gZnVuY3Rpb25XaXRoUHJvcGVydGllc0NoZWNrZXIodmFsLCBuYW1lLCBsb2NhdGlvbikge1xuXHQgICAgICAgIHZhciBub3RGdW5jdGlvbiA9IGNoZWNrZXJzLmZ1bmModmFsLCBuYW1lLCBsb2NhdGlvbik7XG5cdCAgICAgICAgaWYgKGlzRXJyb3Iobm90RnVuY3Rpb24pKSB7XG5cdCAgICAgICAgICByZXR1cm4gbm90RnVuY3Rpb247XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBzaGFwZUNoZWNrZXIodmFsLCBuYW1lLCBsb2NhdGlvbik7XG5cdCAgICAgIH0sIHsgdHlwZTogc2hhcGVDaGVja2VyLnR5cGUsIHNob3J0VHlwZTogJ2Z1bmMud2l0aFByb3BlcnRpZXMnIH0sIGRpc2FibGVkKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gZnVuY3Rpb25DaGVja2VyO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIG9iamVjdENoZWNrR2V0dGVyKCkge1xuXHQgICAgdmFyIHR5cGUgPSAnT2JqZWN0Jztcblx0ICAgIHZhciBudWxsVHlwZSA9ICdPYmplY3QgKG51bGwgb2spJztcblx0ICAgIHZhciBvYmplY3ROdWxsT2tDaGVja2VyID0gc2V0dXBDaGVja2VyKGZ1bmN0aW9uIG9iamVjdE51bGxPa0NoZWNrZXJEZWZpbml0aW9uKHZhbCwgbmFtZSwgbG9jYXRpb24pIHtcblx0ICAgICAgaWYgKHR5cGVPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgbnVsbFR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IG51bGxUeXBlIH0sIGRpc2FibGVkKTtcblxuXHQgICAgdmFyIG9iamVjdENoZWNrZXIgPSBzZXR1cENoZWNrZXIoZnVuY3Rpb24gb2JqZWN0Q2hlY2tlckRlZmluaXRpb24odmFsLCBuYW1lLCBsb2NhdGlvbikge1xuXHQgICAgICBpZiAodmFsID09PSBudWxsIHx8IGlzRXJyb3Iob2JqZWN0TnVsbE9rQ2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uKSkpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIG9iamVjdENoZWNrZXIudHlwZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sIHsgdHlwZTogdHlwZSwgbnVsbE9rOiBvYmplY3ROdWxsT2tDaGVja2VyIH0sIGRpc2FibGVkKTtcblxuXHQgICAgcmV0dXJuIG9iamVjdENoZWNrZXI7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gaW5zdGFuY2VDaGVja0dldHRlcihjbGFzc1RvQ2hlY2spIHtcblx0ICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gaW5zdGFuY2VDaGVja2VyRGVmaW5pdGlvbih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICghKHZhbCBpbnN0YW5jZW9mIGNsYXNzVG9DaGVjaykpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIGNsYXNzVG9DaGVjay5uYW1lKTtcblx0ICAgICAgfVxuXHQgICAgfSwgeyB0eXBlOiBjbGFzc1RvQ2hlY2submFtZSB9LCBkaXNhYmxlZCk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gb25lT2ZDaGVja0dldHRlcihlbnVtcykge1xuXHQgICAgdmFyIHR5cGUgPSB7XG5cdCAgICAgIF9fYXBpQ2hlY2tEYXRhOiB7IG9wdGlvbmFsOiBmYWxzZSwgdHlwZTogJ2VudW0nIH0sXG5cdCAgICAgICdlbnVtJzogZW51bXNcblx0ICAgIH07XG5cdCAgICB2YXIgc2hvcnRUeXBlID0gJ29uZU9mWycgKyBlbnVtcy5tYXAoZnVuY3Rpb24gKGVubSkge1xuXHQgICAgICByZXR1cm4gc3RyaW5naWZ5KGVubSk7XG5cdCAgICB9KS5qb2luKCcsICcpICsgJ10nO1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBvbmVPZkNoZWNrZXJEZWZpbml0aW9uKHZhbCwgbmFtZSwgbG9jYXRpb24pIHtcblx0ICAgICAgaWYgKCFlbnVtcy5zb21lKGZ1bmN0aW9uIChlbm0pIHtcblx0ICAgICAgICByZXR1cm4gZW5tID09PSB2YWw7XG5cdCAgICAgIH0pKSB7XG5cdCAgICAgICAgcmV0dXJuIGdldEVycm9yKG5hbWUsIGxvY2F0aW9uLCBzaG9ydFR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUsIHNob3J0VHlwZTogc2hvcnRUeXBlIH0sIGRpc2FibGVkKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBvbmVPZlR5cGVDaGVja0dldHRlcih0eXBlQ2hlY2tlcnMpIHtcblx0ICAgIHZhciBjaGVja2Vyc0Rpc3BsYXkgPSB0eXBlQ2hlY2tlcnMubWFwKGZ1bmN0aW9uIChjaGVja2VyKSB7XG5cdCAgICAgIHJldHVybiBnZXRDaGVja2VyRGlzcGxheShjaGVja2VyLCB7IHNob3J0OiB0cnVlIH0pO1xuXHQgICAgfSk7XG5cdCAgICB2YXIgc2hvcnRUeXBlID0gJ29uZU9mVHlwZVsnICsgY2hlY2tlcnNEaXNwbGF5LmpvaW4oJywgJykgKyAnXSc7XG5cdCAgICBmdW5jdGlvbiB0eXBlKG9wdGlvbnMpIHtcblx0ICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaG9ydCkge1xuXHQgICAgICAgIHJldHVybiBzaG9ydFR5cGU7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHR5cGVDaGVja2Vycy5tYXAoZnVuY3Rpb24gKGNoZWNrZXIpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwgb3B0aW9ucyk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHQgICAgdHlwZS5fX2FwaUNoZWNrRGF0YSA9IHsgb3B0aW9uYWw6IGZhbHNlLCB0eXBlOiAnb25lT2ZUeXBlJyB9O1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBvbmVPZlR5cGVDaGVja2VyRGVmaW5pdGlvbih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICghdHlwZUNoZWNrZXJzLnNvbWUoZnVuY3Rpb24gKGNoZWNrZXIpIHtcblx0ICAgICAgICByZXR1cm4gIWlzRXJyb3IoY2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uKSk7XG5cdCAgICAgIH0pKSB7XG5cdCAgICAgICAgcmV0dXJuIGdldEVycm9yKG5hbWUsIGxvY2F0aW9uLCBzaG9ydFR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUsIHNob3J0VHlwZTogc2hvcnRUeXBlIH0sIGRpc2FibGVkKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBhcnJheU9mQ2hlY2tHZXR0ZXIoY2hlY2tlcikge1xuXHQgICAgdmFyIHNob3J0Q2hlY2tlckRpc3BsYXkgPSBnZXRDaGVja2VyRGlzcGxheShjaGVja2VyLCB7IHNob3J0OiB0cnVlIH0pO1xuXHQgICAgdmFyIHNob3J0VHlwZSA9ICdhcnJheU9mWycgKyBzaG9ydENoZWNrZXJEaXNwbGF5ICsgJ10nO1xuXG5cdCAgICBmdW5jdGlvbiB0eXBlKG9wdGlvbnMpIHtcblx0ICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaG9ydCkge1xuXHQgICAgICAgIHJldHVybiBzaG9ydFR5cGU7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIGdldENoZWNrZXJEaXNwbGF5KGNoZWNrZXIsIG9wdGlvbnMpO1xuXHQgICAgfVxuXHQgICAgdHlwZS5fX2FwaUNoZWNrRGF0YSA9IHsgb3B0aW9uYWw6IGZhbHNlLCB0eXBlOiAnYXJyYXlPZicgfTtcblxuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBhcnJheU9mQ2hlY2tlckRlZmluaXRpb24odmFsLCBuYW1lLCBsb2NhdGlvbikge1xuXHQgICAgICBpZiAoaXNFcnJvcihjaGVja2Vycy5hcnJheSh2YWwpKSB8fCAhdmFsLmV2ZXJ5KGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgcmV0dXJuICFpc0Vycm9yKGNoZWNrZXIoaXRlbSkpO1xuXHQgICAgICB9KSkge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgc2hvcnRUeXBlKTtcblx0ICAgICAgfVxuXHQgICAgfSwgeyB0eXBlOiB0eXBlLCBzaG9ydFR5cGU6IHNob3J0VHlwZSB9LCBkaXNhYmxlZCk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gb2JqZWN0T2ZDaGVja0dldHRlcihjaGVja2VyKSB7XG5cdCAgICB2YXIgY2hlY2tlckRpc3BsYXkgPSBnZXRDaGVja2VyRGlzcGxheShjaGVja2VyLCB7IHNob3J0OiB0cnVlIH0pO1xuXHQgICAgdmFyIHNob3J0VHlwZSA9ICdvYmplY3RPZlsnICsgY2hlY2tlckRpc3BsYXkgKyAnXSc7XG5cblx0ICAgIGZ1bmN0aW9uIHR5cGUob3B0aW9ucykge1xuXHQgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNob3J0KSB7XG5cdCAgICAgICAgcmV0dXJuIHNob3J0VHlwZTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwgb3B0aW9ucyk7XG5cdCAgICB9XG5cdCAgICB0eXBlLl9fYXBpQ2hlY2tEYXRhID0geyBvcHRpb25hbDogZmFsc2UsIHR5cGU6ICdvYmplY3RPZicgfTtcblxuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBvYmplY3RPZkNoZWNrZXJEZWZpbml0aW9uKHZhbCwgbmFtZSwgbG9jYXRpb24pIHtcblx0ICAgICAgdmFyIG5vdE9iamVjdCA9IGNoZWNrZXJzLm9iamVjdCh2YWwsIG5hbWUsIGxvY2F0aW9uKTtcblx0ICAgICAgaWYgKGlzRXJyb3Iobm90T2JqZWN0KSkge1xuXHQgICAgICAgIHJldHVybiBub3RPYmplY3Q7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIGFsbFR5cGVzU3VjY2VzcyA9IGVhY2godmFsLCBmdW5jdGlvbiAoaXRlbSwga2V5KSB7XG5cdCAgICAgICAgaWYgKGlzRXJyb3IoY2hlY2tlcihpdGVtLCBrZXksIG5hbWUpKSkge1xuXHQgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIGlmICghYWxsVHlwZXNTdWNjZXNzKSB7XG5cdCAgICAgICAgcmV0dXJuIGdldEVycm9yKG5hbWUsIGxvY2F0aW9uLCBzaG9ydFR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUsIHNob3J0VHlwZTogc2hvcnRUeXBlIH0sIGRpc2FibGVkKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiB0eXBlT3JBcnJheU9mQ2hlY2tHZXR0ZXIoY2hlY2tlcikge1xuXHQgICAgdmFyIGNoZWNrZXJEaXNwbGF5ID0gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwgeyBzaG9ydDogdHJ1ZSB9KTtcblx0ICAgIHZhciBzaG9ydFR5cGUgPSAndHlwZU9yQXJyYXlPZlsnICsgY2hlY2tlckRpc3BsYXkgKyAnXSc7XG5cblx0ICAgIGZ1bmN0aW9uIHR5cGUob3B0aW9ucykge1xuXHQgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNob3J0KSB7XG5cdCAgICAgICAgcmV0dXJuIHNob3J0VHlwZTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwgb3B0aW9ucyk7XG5cdCAgICB9XG5cblx0ICAgIHR5cGUuX19hcGlDaGVja0RhdGEgPSB7IG9wdGlvbmFsOiBmYWxzZSwgdHlwZTogJ3R5cGVPckFycmF5T2YnIH07XG5cdCAgICByZXR1cm4gc2V0dXBDaGVja2VyKGZ1bmN0aW9uIHR5cGVPckFycmF5T2ZEZWZpbml0aW9uKHZhbCwgbmFtZSwgbG9jYXRpb24sIG9iaikge1xuXHQgICAgICBpZiAoaXNFcnJvcihjaGVja2Vycy5vbmVPZlR5cGUoW2NoZWNrZXIsIGNoZWNrZXJzLmFycmF5T2YoY2hlY2tlcildKSh2YWwsIG5hbWUsIGxvY2F0aW9uLCBvYmopKSkge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgc2hvcnRUeXBlKTtcblx0ICAgICAgfVxuXHQgICAgfSwgeyB0eXBlOiB0eXBlLCBzaG9ydFR5cGU6IHNob3J0VHlwZSB9LCBkaXNhYmxlZCk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0U2hhcGVDaGVja0dldHRlcigpIHtcblx0ICAgIGZ1bmN0aW9uIHNoYXBlQ2hlY2tHZXR0ZXIoc2hhcGUsIG5vbk9iamVjdCkge1xuXHQgICAgICB2YXIgc2hhcGVUeXBlcyA9IHt9O1xuXHQgICAgICBlYWNoKHNoYXBlLCBmdW5jdGlvbiAoY2hlY2tlciwgcHJvcCkge1xuXHQgICAgICAgIHNoYXBlVHlwZXNbcHJvcF0gPSBnZXRDaGVja2VyRGlzcGxheShjaGVja2VyKTtcblx0ICAgICAgfSk7XG5cdCAgICAgIGZ1bmN0aW9uIHR5cGUoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTtcblxuXHQgICAgICAgIHZhciByZXQgPSB7fTtcblx0ICAgICAgICB2YXIgdGVyc2UgPSBvcHRpb25zLnRlcnNlO1xuXHQgICAgICAgIHZhciBvYmogPSBvcHRpb25zLm9iajtcblx0ICAgICAgICB2YXIgYWRkSGVscGVycyA9IG9wdGlvbnMuYWRkSGVscGVycztcblxuXHQgICAgICAgIHZhciBwYXJlbnRSZXF1aXJlZCA9IG9wdGlvbnMucmVxdWlyZWQ7XG5cdCAgICAgICAgZWFjaChzaGFwZSwgZnVuY3Rpb24gKGNoZWNrZXIsIHByb3ApIHtcblx0ICAgICAgICAgIC8qIGVzbGludCBjb21wbGV4aXR5OlsyLCA2XSAqL1xuXHQgICAgICAgICAgdmFyIHNwZWNpZmllZCA9IG9iaiAmJiBvYmouaGFzT3duUHJvcGVydHkocHJvcCk7XG5cdCAgICAgICAgICB2YXIgcmVxdWlyZWQgPSB1bmRlZihwYXJlbnRSZXF1aXJlZCkgPyAhY2hlY2tlci5pc09wdGlvbmFsIDogcGFyZW50UmVxdWlyZWQ7XG5cdCAgICAgICAgICBpZiAoIXRlcnNlIHx8IChzcGVjaWZpZWQgfHwgIWNoZWNrZXIuaXNPcHRpb25hbCkpIHtcblx0ICAgICAgICAgICAgcmV0W3Byb3BdID0gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwgeyB0ZXJzZTogdGVyc2UsIG9iajogb2JqICYmIG9ialtwcm9wXSwgcmVxdWlyZWQ6IHJlcXVpcmVkLCBhZGRIZWxwZXJzOiBhZGRIZWxwZXJzIH0pO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgaWYgKGFkZEhlbHBlcnMpIHtcblx0ICAgICAgICAgICAgbW9kaWZ5VHlwZURpc3BsYXlUb0hlbHBPdXQocmV0LCBwcm9wLCBzcGVjaWZpZWQsIGNoZWNrZXIsIHJlcXVpcmVkKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gcmV0O1xuXG5cdCAgICAgICAgZnVuY3Rpb24gbW9kaWZ5VHlwZURpc3BsYXlUb0hlbHBPdXQodGhlUmV0LCBwcm9wLCBzcGVjaWZpZWQsIGNoZWNrZXIsIHJlcXVpcmVkKSB7XG5cdCAgICAgICAgICBpZiAoIXNwZWNpZmllZCAmJiByZXF1aXJlZCAmJiAhY2hlY2tlci5pc09wdGlvbmFsKSB7XG5cdCAgICAgICAgICAgIHZhciBpdGVtID0gJ0lURU0nO1xuXHQgICAgICAgICAgICBpZiAoY2hlY2tlci50eXBlICYmIGNoZWNrZXIudHlwZS5fX2FwaUNoZWNrRGF0YSkge1xuXHQgICAgICAgICAgICAgIGl0ZW0gPSBjaGVja2VyLnR5cGUuX19hcGlDaGVja0RhdGEudHlwZS50b1VwcGVyQ2FzZSgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGFkZEhlbHBlcignbWlzc2luZycsICdNSVNTSU5HIFRISVMgJyArIGl0ZW0sICcgPC0tIFlPVSBBUkUgTUlTU0lORyBUSElTJyk7XG5cdCAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNpZmllZCkge1xuXHQgICAgICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKG9ialtwcm9wXSwgcHJvcCwgbnVsbCwgb2JqKTtcblx0ICAgICAgICAgICAgaWYgKGlzRXJyb3IoZXJyb3IpKSB7XG5cdCAgICAgICAgICAgICAgYWRkSGVscGVyKCdlcnJvcicsICdUSElTIElTIFRIRSBQUk9CTEVNOiAnICsgZXJyb3IubWVzc2FnZSwgJyA8LS0gVEhJUyBJUyBUSEUgUFJPQkxFTTogJyArIGVycm9yLm1lc3NhZ2UpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cblx0ICAgICAgICAgIGZ1bmN0aW9uIGFkZEhlbHBlcihwcm9wZXJ0eSwgb2JqZWN0TWVzc2FnZSwgc3RyaW5nTWVzc2FnZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZW9mIHRoZVJldFtwcm9wXSA9PT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICB0aGVSZXRbcHJvcF0gKz0gc3RyaW5nTWVzc2FnZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICB0aGVSZXRbcHJvcF0uX19hcGlDaGVja0RhdGFbcHJvcGVydHldID0gb2JqZWN0TWVzc2FnZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIHR5cGUuX19hcGlDaGVja0RhdGEgPSB7IHN0cmljdDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgdHlwZTogJ3NoYXBlJyB9O1xuXHQgICAgICB2YXIgc2hhcGVDaGVja2VyID0gc2V0dXBDaGVja2VyKGZ1bmN0aW9uIHNoYXBlQ2hlY2tlckRlZmluaXRpb24odmFsLCBuYW1lLCBsb2NhdGlvbikge1xuXHQgICAgICAgIC8qIGVzbGludCBjb21wbGV4aXR5OlsyLCA2XSAqL1xuXHQgICAgICAgIHZhciBpc09iamVjdCA9ICFub25PYmplY3QgJiYgY2hlY2tlcnMub2JqZWN0KHZhbCwgbmFtZSwgbG9jYXRpb24pO1xuXHQgICAgICAgIGlmIChpc0Vycm9yKGlzT2JqZWN0KSkge1xuXHQgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgc2hhcGVQcm9wRXJyb3IgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgbG9jYXRpb24gPSBsb2NhdGlvbiA/IGxvY2F0aW9uICsgKG5hbWUgPyAnLycgOiAnJykgOiAnJztcblx0ICAgICAgICBuYW1lID0gbmFtZSB8fCAnJztcblx0ICAgICAgICBlYWNoKHNoYXBlLCBmdW5jdGlvbiAoY2hlY2tlciwgcHJvcCkge1xuXHQgICAgICAgICAgaWYgKHZhbC5oYXNPd25Qcm9wZXJ0eShwcm9wKSB8fCAhY2hlY2tlci5pc09wdGlvbmFsKSB7XG5cdCAgICAgICAgICAgIHNoYXBlUHJvcEVycm9yID0gY2hlY2tlcih2YWxbcHJvcF0sIHByb3AsICcnICsgbG9jYXRpb24gKyBuYW1lLCB2YWwpO1xuXHQgICAgICAgICAgICByZXR1cm4gIWlzRXJyb3Ioc2hhcGVQcm9wRXJyb3IpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmIChpc0Vycm9yKHNoYXBlUHJvcEVycm9yKSkge1xuXHQgICAgICAgICAgcmV0dXJuIHNoYXBlUHJvcEVycm9yO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSwgeyB0eXBlOiB0eXBlLCBzaG9ydFR5cGU6ICdzaGFwZScgfSwgZGlzYWJsZWQpO1xuXG5cdCAgICAgIGZ1bmN0aW9uIHN0cmljdFR5cGUoKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGUuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuXHQgICAgICB9XG5cblx0ICAgICAgc3RyaWN0VHlwZS5fX2FwaUNoZWNrRGF0YSA9IGNvcHkoc2hhcGVDaGVja2VyLnR5cGUuX19hcGlDaGVja0RhdGEpO1xuXHQgICAgICBzdHJpY3RUeXBlLl9fYXBpQ2hlY2tEYXRhLnN0cmljdCA9IHRydWU7XG5cdCAgICAgIHNoYXBlQ2hlY2tlci5zdHJpY3QgPSBzZXR1cENoZWNrZXIoZnVuY3Rpb24gc3RyaWN0U2hhcGVDaGVja2VyRGVmaW5pdGlvbih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgICAgdmFyIHNoYXBlRXJyb3IgPSBzaGFwZUNoZWNrZXIodmFsLCBuYW1lLCBsb2NhdGlvbik7XG5cdCAgICAgICAgaWYgKGlzRXJyb3Ioc2hhcGVFcnJvcikpIHtcblx0ICAgICAgICAgIHJldHVybiBzaGFwZUVycm9yO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgYWxsb3dlZFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzaGFwZSk7XG5cdCAgICAgICAgdmFyIGV4dHJhUHJvcHMgPSBPYmplY3Qua2V5cyh2YWwpLmZpbHRlcihmdW5jdGlvbiAocHJvcCkge1xuXHQgICAgICAgICAgcmV0dXJuIGFsbG93ZWRQcm9wZXJ0aWVzLmluZGV4T2YocHJvcCkgPT09IC0xO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmIChleHRyYVByb3BzLmxlbmd0aCkge1xuXHQgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihuQXRMKG5hbWUsIGxvY2F0aW9uKSArICcgY2Fubm90IGhhdmUgZXh0cmEgcHJvcGVydGllczogJyArIHQoZXh0cmFQcm9wcy5qb2luKCdgLCBgJykpICsgJy4nICsgKCdJdCBpcyBsaW1pdGVkIHRvICcgKyB0KGFsbG93ZWRQcm9wZXJ0aWVzLmpvaW4oJ2AsIGAnKSkpKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHsgdHlwZTogc3RyaWN0VHlwZSwgc2hvcnRUeXBlOiAnc3RyaWN0IHNoYXBlJyB9LCBkaXNhYmxlZCk7XG5cblx0ICAgICAgcmV0dXJuIHNoYXBlQ2hlY2tlcjtcblx0ICAgIH1cblxuXHQgICAgc2hhcGVDaGVja0dldHRlci5pZk5vdCA9IGZ1bmN0aW9uIGlmTm90KG90aGVyUHJvcHMsIHByb3BDaGVja2VyKSB7XG5cdCAgICAgIGlmICghQXJyYXkuaXNBcnJheShvdGhlclByb3BzKSkge1xuXHQgICAgICAgIG90aGVyUHJvcHMgPSBbb3RoZXJQcm9wc107XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIGRlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuXHQgICAgICBpZiAob3RoZXJQcm9wcy5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICBkZXNjcmlwdGlvbiA9ICdzcGVjaWZpZWQgb25seSBpZiAnICsgb3RoZXJQcm9wc1swXSArICcgaXMgbm90IHNwZWNpZmllZCc7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgZGVzY3JpcHRpb24gPSAnc3BlY2lmaWVkIG9ubHkgaWYgbm9uZSBvZiB0aGUgZm9sbG93aW5nIGFyZSBzcGVjaWZpZWQ6IFsnICsgbGlzdChvdGhlclByb3BzLCAnLCAnLCAnYW5kICcpICsgJ10nO1xuXHQgICAgICB9XG5cdCAgICAgIHZhciBzaG9ydFR5cGUgPSAnaWZOb3RbJyArIG90aGVyUHJvcHMuam9pbignLCAnKSArICddJztcblx0ICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlRm9yU2hhcGVDaGlsZChwcm9wQ2hlY2tlciwgZGVzY3JpcHRpb24sIHNob3J0VHlwZSk7XG5cdCAgICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gaWZOb3RDaGVja2VyKHByb3AsIHByb3BOYW1lLCBsb2NhdGlvbiwgb2JqKSB7XG5cdCAgICAgICAgdmFyIHByb3BFeGlzdHMgPSBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KHByb3BOYW1lKTtcblx0ICAgICAgICB2YXIgb3RoZXJQcm9wc0V4aXN0ID0gb3RoZXJQcm9wcy5zb21lKGZ1bmN0aW9uIChvdGhlclByb3ApIHtcblx0ICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KG90aGVyUHJvcCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKHByb3BFeGlzdHMgPT09IG90aGVyUHJvcHNFeGlzdCkge1xuXHQgICAgICAgICAgcmV0dXJuIGdldEVycm9yKHByb3BOYW1lLCBsb2NhdGlvbiwgdHlwZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChwcm9wRXhpc3RzKSB7XG5cdCAgICAgICAgICByZXR1cm4gcHJvcENoZWNrZXIocHJvcCwgcHJvcE5hbWUsIGxvY2F0aW9uLCBvYmopO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSwgeyBub3RSZXF1aXJlZDogdHJ1ZSwgdHlwZTogdHlwZSwgc2hvcnRUeXBlOiBzaG9ydFR5cGUgfSwgZGlzYWJsZWQpO1xuXHQgICAgfTtcblxuXHQgICAgc2hhcGVDaGVja0dldHRlci5vbmx5SWYgPSBmdW5jdGlvbiBvbmx5SWYob3RoZXJQcm9wcywgcHJvcENoZWNrZXIpIHtcblx0ICAgICAgb3RoZXJQcm9wcyA9IGFycmF5aWZ5KG90aGVyUHJvcHMpO1xuXHQgICAgICB2YXIgZGVzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG5cdCAgICAgIGlmIChvdGhlclByb3BzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgIGRlc2NyaXB0aW9uID0gJ3NwZWNpZmllZCBvbmx5IGlmICcgKyBvdGhlclByb3BzWzBdICsgJyBpcyBhbHNvIHNwZWNpZmllZCc7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgZGVzY3JpcHRpb24gPSAnc3BlY2lmaWVkIG9ubHkgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHNwZWNpZmllZDogWycgKyBsaXN0KG90aGVyUHJvcHMsICcsICcsICdhbmQgJykgKyAnXSc7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHNob3J0VHlwZSA9ICdvbmx5SWZbJyArIG90aGVyUHJvcHMuam9pbignLCAnKSArICddJztcblx0ICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlRm9yU2hhcGVDaGlsZChwcm9wQ2hlY2tlciwgZGVzY3JpcHRpb24sIHNob3J0VHlwZSk7XG5cdCAgICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gb25seUlmQ2hlY2tlckRlZmluaXRpb24ocHJvcCwgcHJvcE5hbWUsIGxvY2F0aW9uLCBvYmopIHtcblx0ICAgICAgICB2YXIgb3RoZXJzUHJlc2VudCA9IG90aGVyUHJvcHMuZXZlcnkoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgICAgICByZXR1cm4gb2JqLmhhc093blByb3BlcnR5KHByb3BlcnR5KTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAoIW90aGVyc1ByZXNlbnQpIHtcblx0ICAgICAgICAgIHJldHVybiBnZXRFcnJvcihwcm9wTmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICByZXR1cm4gcHJvcENoZWNrZXIocHJvcCwgcHJvcE5hbWUsIGxvY2F0aW9uLCBvYmopO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSwgeyB0eXBlOiB0eXBlLCBzaG9ydFR5cGU6IHNob3J0VHlwZSB9LCBkaXNhYmxlZCk7XG5cdCAgICB9O1xuXG5cdCAgICBzaGFwZUNoZWNrR2V0dGVyLnJlcXVpcmVkSWZOb3QgPSBmdW5jdGlvbiBzaGFwZVJlcXVpcmVkSWZOb3Qob3RoZXJQcm9wcywgcHJvcENoZWNrZXIpIHtcblx0ICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG90aGVyUHJvcHMpKSB7XG5cdCAgICAgICAgb3RoZXJQcm9wcyA9IFtvdGhlclByb3BzXTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gZ2V0UmVxdWlyZWRJZk5vdENoZWNrZXIoZmFsc2UsIG90aGVyUHJvcHMsIHByb3BDaGVja2VyKTtcblx0ICAgIH07XG5cblx0ICAgIHNoYXBlQ2hlY2tHZXR0ZXIucmVxdWlyZWRJZk5vdC5hbGwgPSBmdW5jdGlvbiBzaGFwZVJlcXVpcmVkSWZOb3RBbGwob3RoZXJQcm9wcywgcHJvcENoZWNrZXIpIHtcblx0ICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG90aGVyUHJvcHMpKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZElmTm90LmFsbCBtdXN0IGJlIHBhc3NlZCBhbiBhcnJheScpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBnZXRSZXF1aXJlZElmTm90Q2hlY2tlcih0cnVlLCBvdGhlclByb3BzLCBwcm9wQ2hlY2tlcik7XG5cdCAgICB9O1xuXG5cdCAgICBmdW5jdGlvbiBnZXRSZXF1aXJlZElmTm90Q2hlY2tlcihhbGwsIG90aGVyUHJvcHMsIHByb3BDaGVja2VyKSB7XG5cdCAgICAgIHZhciBwcm9wcyA9IHQob3RoZXJQcm9wcy5qb2luKCcsICcpKTtcblx0ICAgICAgdmFyIGlmUHJvcHMgPSAnaWYgJyArIChhbGwgPyAnYWxsIG9mJyA6ICdhdCBsZWFzdCBvbmUgb2YnKTtcblx0ICAgICAgdmFyIGRlc2NyaXB0aW9uID0gJ3NwZWNpZmllZCAnICsgaWZQcm9wcyArICcgdGhlc2UgYXJlIG5vdCBzcGVjaWZpZWQ6ICcgKyBwcm9wcyArICcgKG90aGVyd2lzZSBpdFxcJ3Mgb3B0aW9uYWwpJztcblx0ICAgICAgdmFyIHNob3J0VHlwZSA9ICdyZXF1aXJlZElmTm90JyArIChhbGwgPyAnLmFsbCcgOiAnJykgKyAnWycgKyBvdGhlclByb3BzLmpvaW4oJywgJykgKyAnfV0nO1xuXHQgICAgICB2YXIgdHlwZSA9IGdldFR5cGVGb3JTaGFwZUNoaWxkKHByb3BDaGVja2VyLCBkZXNjcmlwdGlvbiwgc2hvcnRUeXBlKTtcblx0ICAgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBzaGFwZVJlcXVpcmVkSWZOb3REZWZpbml0aW9uKHByb3AsIHByb3BOYW1lLCBsb2NhdGlvbiwgb2JqKSB7XG5cdCAgICAgICAgdmFyIHByb3BFeGlzdHMgPSBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KHByb3BOYW1lKTtcblx0ICAgICAgICB2YXIgaXRlcmF0aW9uID0gYWxsID8gJ2V2ZXJ5JyA6ICdzb21lJztcblx0ICAgICAgICB2YXIgb3RoZXJQcm9wc0V4aXN0ID0gb3RoZXJQcm9wc1tpdGVyYXRpb25dKGZ1bmN0aW9uIChvdGhlclByb3ApIHtcblx0ICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KG90aGVyUHJvcCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKCFvdGhlclByb3BzRXhpc3QgJiYgIXByb3BFeGlzdHMpIHtcblx0ICAgICAgICAgIHJldHVybiBnZXRFcnJvcihwcm9wTmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAocHJvcEV4aXN0cykge1xuXHQgICAgICAgICAgcmV0dXJuIHByb3BDaGVja2VyKHByb3AsIHByb3BOYW1lLCBsb2NhdGlvbiwgb2JqKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHsgdHlwZTogdHlwZSwgbm90UmVxdWlyZWQ6IHRydWUgfSwgZGlzYWJsZWQpO1xuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gc2hhcGVDaGVja0dldHRlcjtcblxuXHQgICAgZnVuY3Rpb24gZ2V0VHlwZUZvclNoYXBlQ2hpbGQocHJvcENoZWNrZXIsIGRlc2NyaXB0aW9uLCBzaG9ydFR5cGUpIHtcblx0ICAgICAgZnVuY3Rpb24gdHlwZShvcHRpb25zKSB7XG5cdCAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaG9ydCkge1xuXHQgICAgICAgICAgcmV0dXJuIHNob3J0VHlwZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGdldENoZWNrZXJEaXNwbGF5KHByb3BDaGVja2VyKTtcblx0ICAgICAgfVxuXHQgICAgICB0eXBlLl9fYXBpQ2hlY2tEYXRhID0geyBvcHRpb25hbDogZmFsc2UsIHR5cGU6ICdpZk5vdCcsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB9O1xuXHQgICAgICByZXR1cm4gdHlwZTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBmdW5jdGlvbiBhcmd1bWVudHNDaGVja2VyR2V0dGVyKCkge1xuXHQgICAgdmFyIHR5cGUgPSAnZnVuY3Rpb24gYXJndW1lbnRzJztcblx0ICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gYXJnc0NoZWNrZXJEZWZpbml0aW9uKHZhbCwgbmFtZSwgbG9jYXRpb24pIHtcblx0ICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCBpc0Vycm9yKGNoZWNrZXJzLm9iamVjdCh2YWwpKSB8fCBpc0Vycm9yKGNoZWNrZXJzLm51bWJlcih2YWwubGVuZ3RoKSkpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUgfSwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGFueUNoZWNrR2V0dGVyKCkge1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBhbnlDaGVja2VyRGVmaW5pdGlvbigpIHtcblx0ICAgICAgLy8gZG9uJ3QgZG8gYW55dGhpbmdcblx0ICAgIH0sIHsgdHlwZTogJ2FueScgfSwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIG51bGxDaGVja0dldHRlcigpIHtcblx0ICAgIHZhciB0eXBlID0gJ251bGwnO1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBudWxsQ2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICh2YWwgIT09IG51bGwpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUgfSwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIHJhbmdlQ2hlY2tHZXR0ZXIobWluLCBtYXgpIHtcblx0ICAgIHZhciB0eXBlID0gJ1JhbmdlICgnICsgbWluICsgJyAtICcgKyBtYXggKyAnKSc7XG5cdCAgICByZXR1cm4gc2V0dXBDaGVja2VyKGZ1bmN0aW9uIHJhbmdlQ2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJyB8fCB2YWwgPCBtaW4gfHwgdmFsID4gbWF4KSB7XG5cdCAgICAgICAgcmV0dXJuIGdldEVycm9yKG5hbWUsIGxvY2F0aW9uLCB0eXBlKTtcblx0ICAgICAgfVxuXHQgICAgfSwgeyB0eXBlOiB0eXBlIH0sIGRpc2FibGVkKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBsZXNzVGhhbkNoZWNrR2V0dGVyKG1pbikge1xuXHQgICAgdmFyIHR5cGUgPSAnbGVzc1RoYW5bJyArIG1pbiArICddJztcblx0ICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gbGVzc1RoYW5DaGVja2VyKHZhbCwgbmFtZSwgbG9jYXRpb24pIHtcblx0ICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInIHx8IHZhbCA+IG1pbikge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgdHlwZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sIHsgdHlwZTogdHlwZSB9LCBkaXNhYmxlZCk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ3JlYXRlclRoYW5DaGVja0dldHRlcihtYXgpIHtcblx0ICAgIHZhciB0eXBlID0gJ2dyZWF0ZXJUaGFuWycgKyBtYXggKyAnXSc7XG5cdCAgICByZXR1cm4gc2V0dXBDaGVja2VyKGZ1bmN0aW9uIGdyZWF0ZXJUaGFuQ2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJyB8fCB2YWwgPCBtYXgpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUgfSwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGVtcHR5T2JqZWN0Q2hlY2tHZXR0ZXIoKSB7XG5cdCAgICB2YXIgdHlwZSA9ICdlbXB0eSBvYmplY3QnO1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBlbXB0eU9iamVjdENoZWNrZXIodmFsLCBuYW1lLCBsb2NhdGlvbikge1xuXHQgICAgICBpZiAodHlwZU9mKHZhbCkgIT09ICdvYmplY3QnIHx8IHZhbCA9PT0gbnVsbCB8fCBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCkge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgdHlwZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sIHsgdHlwZTogdHlwZSB9LCBkaXNhYmxlZCk7XG5cdCAgfVxuXHR9XG5cbi8qKiovIH1cbi8qKioqKiovIF0pXG59KTtcbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYXBpLWNoZWNrL2Rpc3QvYXBpLWNoZWNrLmpzXG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=");
/***/ },
/* 3 */
/***/ function(module, exports, __webpack_require__) {
eval("// angular-formly version 6.8.2 built with ♥ by Astrism <astrisms@gmail.com>, Kent C. Dodds <kent@doddsfamily.us> (ó ì_í)=óò=(ì_í ò)\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory(__webpack_require__(2), __webpack_require__(4));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"api-check\", \"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormly\"] = factory(require(\"api-check\"), require(\"angular\"));\n\telse\n\t\troot[\"ngFormly\"] = factory(root[\"apiCheck\"], root[\"angular\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__, __WEBPACK_EXTERNAL_MODULE_17__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar index = _interopRequire(__webpack_require__(1));\n\n\tmodule.exports = index;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tvar formlyApiCheck = _interopRequire(__webpack_require__(2));\n\n\tvar formlyErrorAndWarningsUrlPrefix = _interopRequire(__webpack_require__(3));\n\n\tvar formlyUsability = _interopRequire(__webpack_require__(4));\n\n\tvar formlyConfig = _interopRequire(__webpack_require__(5));\n\n\tvar formlyValidationMessages = _interopRequire(__webpack_require__(6));\n\n\tvar formlyUtil = _interopRequire(__webpack_require__(7));\n\n\tvar formlyWarn = _interopRequire(__webpack_require__(8));\n\n\tvar formlyCustomValidation = _interopRequire(__webpack_require__(9));\n\n\tvar formlyField = _interopRequire(__webpack_require__(10));\n\n\tvar formlyFocus = _interopRequire(__webpack_require__(11));\n\n\tvar formlyForm = _interopRequire(__webpack_require__(12));\n\n\tvar formlyNgModelAttrsManipulator = _interopRequire(__webpack_require__(13));\n\n\tvar formlyCustomTags = _interopRequire(__webpack_require__(14));\n\n\tvar ngModuleName = \"formly\";\n\n\tmodule.exports = ngModuleName;\n\n\tvar ngModule = angular.module(ngModuleName, []);\n\n\tngModule.constant(\"formlyApiCheck\", formlyApiCheck);\n\tngModule.constant(\"formlyErrorAndWarningsUrlPrefix\", formlyErrorAndWarningsUrlPrefix);\n\tngModule.constant(\"formlyVersion\", (\"6.8.2\")); // <-- webpack variable\n\n\tngModule.provider(\"formlyUsability\", formlyUsability);\n\tngModule.provider(\"formlyConfig\", formlyConfig);\n\n\tngModule.factory(\"formlyValidationMessages\", formlyValidationMessages);\n\tngModule.factory(\"formlyUtil\", formlyUtil);\n\tngModule.factory(\"formlyWarn\", formlyWarn);\n\n\tngModule.directive(\"formlyCustomValidation\", formlyCustomValidation);\n\tngModule.directive(\"formlyField\", formlyField);\n\tngModule.directive(\"formlyFocus\", formlyFocus);\n\tngModule.directive(\"formlyForm\", formlyForm);\n\n\tngModule.run(formlyNgModelAttrsManipulator);\n\tngModule.run(formlyCustomTags);\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar apiCheckFactory = _interopRequire(__webpack_require__(16));\n\n\tvar apiCheck = apiCheckFactory({\n\t output: {\n\t prefix: \"angular-formly:\",\n\t docsBaseUrl: __webpack_require__(3)\n\t }\n\t});\n\n\tfunction shapeRequiredIfNot(otherProps, propChecker) {\n\t if (!angular.isArray(otherProps)) {\n\t otherProps = [otherProps];\n\t }\n\t var type = \"specified if these are not specified: `\" + otherProps.join(\", \") + \"` (otherwise it's optional)\";\n\t function shapeRequiredIfNotDefinition(prop, propName, location, obj) {\n\t var propExists = obj && obj.hasOwnProperty(propName);\n\t var otherPropsExist = otherProps.some(function (otherProp) {\n\t return obj && obj.hasOwnProperty(otherProp);\n\t });\n\t if (!otherPropsExist && !propExists) {\n\t return apiCheck.utils.getError(propName, location, type);\n\t } else if (propExists) {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }\n\t shapeRequiredIfNotDefinition.type = type;\n\t return apiCheck.utils.checkerHelpers.setupChecker(shapeRequiredIfNotDefinition);\n\t}\n\n\tvar formlyExpression = apiCheck.oneOfType([apiCheck.string, apiCheck.func]);\n\tvar specifyWrapperType = apiCheck.oneOfType([apiCheck.oneOf([null]), apiCheck.typeOrArrayOf(apiCheck.string)]);\n\n\tvar apiCheckProperty = apiCheck.objectOf(apiCheck.func);\n\n\tvar apiCheckInstanceProperty = apiCheck.shape.onlyIf(\"apiCheck\", apiCheck.func.withProperties({\n\t warn: apiCheck.func,\n\t \"throw\": apiCheck.func,\n\t shape: apiCheck.func\n\t}));\n\n\tvar apiCheckFunctionProperty = apiCheck.shape.onlyIf(\"apiCheck\", apiCheck.oneOf([\"throw\", \"warn\"]));\n\n\tvar formlyWrapperType = apiCheck.shape({\n\t name: shapeRequiredIfNot(\"types\", apiCheck.string).optional,\n\t template: apiCheck.shape.ifNot(\"templateUrl\", apiCheck.string).optional,\n\t templateUrl: apiCheck.shape.ifNot(\"template\", apiCheck.string).optional,\n\t types: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n\t overwriteOk: apiCheck.bool.optional,\n\t validateOptions: apiCheck.func.optional,\n\t apiCheck: apiCheckProperty.optional,\n\t apiCheckInstance: apiCheckInstanceProperty.optional,\n\t apiCheckFunction: apiCheckFunctionProperty.optional,\n\t apiCheckOptions: apiCheck.object.optional\n\t}).strict;\n\n\tvar expressionProperties = apiCheck.objectOf(apiCheck.oneOfType([formlyExpression, apiCheck.shape({\n\t expression: formlyExpression,\n\t message: formlyExpression.optional\n\t}).strict]));\n\n\tvar modelChecker = apiCheck.oneOfType([apiCheck.oneOf([\"formState\"]), apiCheck.object]);\n\n\tvar fieldOptionsApiShape = {\n\t $$hashKey: apiCheck.any.optional,\n\t type: apiCheck.shape.ifNot([\"template\", \"templateUrl\"], apiCheck.string).optional,\n\t template: apiCheck.shape.ifNot([\"type\", \"templateUrl\"], apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t templateUrl: apiCheck.shape.ifNot([\"type\", \"template\"], apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t key: apiCheck.oneOfType([apiCheck.string, apiCheck.number]).optional,\n\t model: modelChecker.optional,\n\t className: apiCheck.string.optional,\n\t id: apiCheck.string.optional,\n\t expressionProperties: expressionProperties.optional,\n\t data: apiCheck.object.optional,\n\t templateOptions: apiCheck.object.optional,\n\t wrapper: specifyWrapperType.optional,\n\t modelOptions: apiCheck.shape({\n\t updateOn: apiCheck.string.optional,\n\t debounce: apiCheck.oneOfType([apiCheck.objectOf(apiCheck.number), apiCheck.number]).optional,\n\t allowInvalid: apiCheck.bool.optional,\n\t getterSetter: apiCheck.bool.optional,\n\t timezone: apiCheck.string.optional\n\t }).optional,\n\t watcher: apiCheck.typeOrArrayOf(apiCheck.shape({\n\t expression: formlyExpression.optional,\n\t listener: formlyExpression\n\t })).optional,\n\t validators: apiCheck.objectOf(apiCheck.oneOfType([formlyExpression, apiCheck.shape({\n\t expression: formlyExpression,\n\t message: formlyExpression.optional\n\t }).strict])).optional,\n\t noFormControl: apiCheck.bool.optional,\n\t hide: apiCheck.bool.optional,\n\t hideExpression: formlyExpression.optional,\n\t ngModelAttrs: apiCheck.objectOf(apiCheck.shape({\n\t expression: apiCheck.shape.ifNot([\"value\", \"attribute\", \"bound\"], apiCheck.any).optional,\n\t value: apiCheck.shape.ifNot(\"expression\", apiCheck.any).optional,\n\t attribute: apiCheck.shape.ifNot(\"expression\", apiCheck.any).optional,\n\t bound: apiCheck.shape.ifNot(\"expression\", apiCheck.any).optional\n\t }).strict).optional,\n\t elementAttributes: apiCheck.objectOf(apiCheck.string).optional,\n\t optionsTypes: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n\t link: apiCheck.func.optional,\n\t controller: apiCheck.oneOfType([apiCheck.string, apiCheck.func, apiCheck.array]).optional,\n\t validation: apiCheck.shape({\n\t show: apiCheck.oneOfType([apiCheck.bool, apiCheck.oneOf([null])]).optional,\n\t messages: apiCheck.objectOf(formlyExpression).optional,\n\t errorExistsAndShouldBeVisible: apiCheck.bool.optional\n\t }).optional,\n\t formControl: apiCheck.object.optional,\n\t value: apiCheck.func.optional,\n\t runExpressions: apiCheck.func.optional,\n\t resetModel: apiCheck.func.optional,\n\t updateInitialValue: apiCheck.func.optional,\n\t initialValue: apiCheck.any.optional,\n\t defaultValue: apiCheck.any.optional\n\t};\n\n\tvar formlyFieldOptions = apiCheck.shape(fieldOptionsApiShape).strict;\n\n\tvar formOptionsApi = apiCheck.shape({\n\t formState: apiCheck.object.optional,\n\t resetModel: apiCheck.func.optional,\n\t updateInitialValue: apiCheck.func.optional,\n\t removeChromeAutoComplete: apiCheck.bool.optional\n\t}).strict;\n\n\tvar fieldGroup = apiCheck.shape({\n\t $$hashKey: apiCheck.any.optional,\n\t // danger. Nested field groups wont get api-checked...\n\t fieldGroup: apiCheck.arrayOf(apiCheck.oneOfType([formlyFieldOptions, apiCheck.object])),\n\t className: apiCheck.string.optional,\n\t options: formOptionsApi.optional,\n\t hide: apiCheck.bool.optional,\n\t hideExpression: formlyExpression.optional,\n\t model: modelChecker.optional,\n\t form: apiCheck.object.optional,\n\t elementAttributes: apiCheck.objectOf(apiCheck.string).optional\n\t}).strict;\n\n\tvar typeOptionsDefaultOptions = angular.copy(fieldOptionsApiShape);\n\ttypeOptionsDefaultOptions.key = apiCheck.string.optional;\n\n\tvar formlyTypeOptions = apiCheck.shape({\n\t name: apiCheck.string,\n\t template: apiCheck.shape.ifNot(\"templateUrl\", apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t templateUrl: apiCheck.shape.ifNot(\"template\", apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t controller: apiCheck.oneOfType([apiCheck.func, apiCheck.string, apiCheck.array]).optional,\n\t link: apiCheck.func.optional,\n\t defaultOptions: apiCheck.oneOfType([apiCheck.func, apiCheck.shape(typeOptionsDefaultOptions)]).optional,\n\t \"extends\": apiCheck.string.optional,\n\t wrapper: specifyWrapperType.optional,\n\t data: apiCheck.object.optional,\n\t validateOptions: apiCheck.func.optional,\n\t apiCheck: apiCheckProperty.optional,\n\t apiCheckInstance: apiCheckInstanceProperty.optional,\n\t apiCheckFunction: apiCheckFunctionProperty.optional,\n\t apiCheckOptions: apiCheck.object.optional,\n\t overwriteOk: apiCheck.bool.optional\n\t}).strict;\n\tangular.extend(apiCheck, {\n\t formlyTypeOptions: formlyTypeOptions, formlyFieldOptions: formlyFieldOptions, formlyExpression: formlyExpression, formlyWrapperType: formlyWrapperType, fieldGroup: fieldGroup, formOptionsApi: formOptionsApi\n\t});\n\n\tmodule.exports = apiCheck;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tmodule.exports = \"https://github.com/formly-js/angular-formly/blob/\" + (\"6.8.2\") + \"/other/ERRORS_AND_WARNINGS.md#\";\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tmodule.exports = formlyUsability;\n\n\t// @ngInject\n\tfunction formlyUsability(formlyApiCheck, formlyErrorAndWarningsUrlPrefix) {\n\t var _this = this;\n\n\t angular.extend(this, {\n\t getFormlyError: getFormlyError,\n\t getFieldError: getFieldError,\n\t checkWrapper: checkWrapper,\n\t checkWrapperTemplate: checkWrapperTemplate,\n\t $get: function () {\n\t return _this;\n\t }\n\t });\n\n\t function getFieldError(errorInfoSlug, message, field) {\n\t if (arguments.length < 3) {\n\t field = message;\n\t message = errorInfoSlug;\n\t errorInfoSlug = null;\n\t }\n\t return new Error(getErrorMessage(errorInfoSlug, message) + (\" Field definition: \" + angular.toJson(field)));\n\t }\n\n\t function getFormlyError(errorInfoSlug, message) {\n\t if (!message) {\n\t message = errorInfoSlug;\n\t errorInfoSlug = null;\n\t }\n\t return new Error(getErrorMessage(errorInfoSlug, message));\n\t }\n\n\t function getErrorMessage(errorInfoSlug, message) {\n\t var url = \"\";\n\t if (errorInfoSlug !== null) {\n\t url = \"\" + formlyErrorAndWarningsUrlPrefix + \"\" + errorInfoSlug;\n\t }\n\t return \"Formly Error: \" + message + \". \" + url;\n\t }\n\n\t function checkWrapper(wrapper) {\n\t formlyApiCheck[\"throw\"](formlyApiCheck.formlyWrapperType, wrapper, {\n\t prefix: \"formlyConfig.setWrapper\",\n\t urlSuffix: \"setwrapper-validation-failed\"\n\t });\n\t }\n\n\t function checkWrapperTemplate(template, additionalInfo) {\n\t var formlyTransclude = \"<formly-transclude></formly-transclude>\";\n\t if (template.indexOf(formlyTransclude) === -1) {\n\t throw getFormlyError(\"Template wrapper templates must use \\\"\" + formlyTransclude + \"\\\" somewhere in them. \" + (\"This one does not have \\\"<formly-transclude></formly-transclude>\\\" in it: \" + template) + \"\\n\" + (\"Additional information: \" + JSON.stringify(additionalInfo)));\n\t }\n\t }\n\t}\n\tformlyUsability.$inject = [\"formlyApiCheck\", \"formlyErrorAndWarningsUrlPrefix\"];\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tvar utils = _interopRequire(__webpack_require__(18));\n\n\tmodule.exports = formlyConfig;\n\n\t// @ngInject\n\tfunction formlyConfig(formlyUsabilityProvider, formlyApiCheck) {\n\t var _this2 = this;\n\n\t var typeMap = {};\n\t var templateWrappersMap = {};\n\t var defaultWrapperName = \"default\";\n\t var _this = this;\n\t var getError = formlyUsabilityProvider.getFormlyError;\n\n\t angular.extend(this, {\n\t setType: setType,\n\t getType: getType,\n\t setWrapper: setWrapper,\n\t getWrapper: getWrapper,\n\t getWrapperByType: getWrapperByType,\n\t removeWrapperByName: removeWrapperByName,\n\t removeWrappersForType: removeWrappersForType,\n\t disableWarnings: false,\n\t extras: {\n\t disableNgModelAttrsManipulator: false,\n\t ngModelAttrsManipulatorPreferUnbound: false,\n\t removeChromeAutoComplete: false,\n\t defaultHideDirective: \"ng-if\",\n\t getFieldId: null\n\t },\n\t templateManipulators: {\n\t preWrapper: [],\n\t postWrapper: []\n\t },\n\t $get: function () {\n\t return _this2;\n\t }\n\t });\n\n\t function setType(options) {\n\t if (angular.isArray(options)) {\n\t angular.forEach(options, setType);\n\t } else if (angular.isObject(options)) {\n\t checkType(options);\n\t if (options[\"extends\"]) {\n\t extendTypeOptions(options);\n\t }\n\t typeMap[options.name] = options;\n\t } else {\n\t throw getError(\"You must provide an object or array for setType. You provided: \" + JSON.stringify(arguments));\n\t }\n\t }\n\n\t function checkType(options) {\n\t formlyApiCheck[\"throw\"](formlyApiCheck.formlyTypeOptions, options, {\n\t prefix: \"formlyConfig.setType\",\n\t url: \"settype-validation-failed\"\n\t });\n\t if (!options.overwriteOk) {\n\t checkOverwrite(options.name, typeMap, options, \"types\");\n\t } else {\n\t options.overwriteOk = undefined;\n\t }\n\t }\n\n\t function extendTypeOptions(options) {\n\t var extendsType = getType(options[\"extends\"], true, options);\n\t extendTypeControllerFunction(options, extendsType);\n\t extendTypeLinkFunction(options, extendsType);\n\t extendTypeValidateOptionsFunction(options, extendsType);\n\t extendTypeDefaultOptions(options, extendsType);\n\t utils.reverseDeepMerge(options, extendsType);\n\t extendTemplate(options, extendsType);\n\t }\n\n\t function extendTemplate(options, extendsType) {\n\t if (options.template && extendsType.templateUrl) {\n\t delete options.templateUrl;\n\t } else if (options.templateUrl && extendsType.template) {\n\t delete options.template;\n\t }\n\t }\n\n\t function extendTypeControllerFunction(options, extendsType) {\n\t var extendsCtrl = extendsType.controller;\n\t if (!angular.isDefined(extendsCtrl)) {\n\t return;\n\t }\n\t var optionsCtrl = options.controller;\n\t if (angular.isDefined(optionsCtrl)) {\n\t options.controller = function ($scope, $controller) {\n\t $controller(extendsCtrl, { $scope: $scope });\n\t $controller(optionsCtrl, { $scope: $scope });\n\t };\n\t options.controller.$inject = [\"$scope\", \"$controller\"];\n\t } else {\n\t options.controller = extendsCtrl;\n\t }\n\t }\n\n\t function extendTypeLinkFunction(options, extendsType) {\n\t var extendsFn = extendsType.link;\n\t if (!angular.isDefined(extendsFn)) {\n\t return;\n\t }\n\t var optionsFn = options.link;\n\t if (angular.isDefined(optionsFn)) {\n\t options.link = function () {\n\t extendsFn.apply(undefined, arguments);\n\t optionsFn.apply(undefined, arguments);\n\t };\n\t } else {\n\t options.link = extendsFn;\n\t }\n\t }\n\n\t function extendTypeValidateOptionsFunction(options, extendsType) {\n\t var extendsFn = extendsType.validateOptions;\n\t if (!angular.isDefined(extendsFn)) {\n\t return;\n\t }\n\t var optionsFn = options.validateOptions;\n\t var originalDefaultOptions = options.defaultOptions;\n\t if (angular.isDefined(optionsFn)) {\n\t options.validateOptions = function (options) {\n\t optionsFn(options);\n\t var mergedOptions = angular.copy(options);\n\t var defaultOptions = originalDefaultOptions;\n\t if (defaultOptions) {\n\t if (angular.isFunction(defaultOptions)) {\n\t defaultOptions = defaultOptions(mergedOptions);\n\t }\n\t utils.reverseDeepMerge(mergedOptions, defaultOptions);\n\t }\n\t extendsFn(mergedOptions);\n\t };\n\t } else {\n\t options.validateOptions = extendsFn;\n\t }\n\t }\n\n\t function extendTypeDefaultOptions(options, extendsType) {\n\t var extendsDO = extendsType.defaultOptions;\n\t if (!angular.isDefined(extendsDO)) {\n\t return;\n\t }\n\t var optionsDO = options.defaultOptions;\n\t var optionsDOIsFn = angular.isFunction(optionsDO);\n\t var extendsDOIsFn = angular.isFunction(extendsDO);\n\t if (extendsDOIsFn) {\n\t options.defaultOptions = function defaultOptions(options) {\n\t var extendsDefaultOptions = extendsDO(options);\n\t var mergedDefaultOptions = {};\n\t utils.reverseDeepMerge(mergedDefaultOptions, options, extendsDefaultOptions);\n\t var extenderOptionsDefaultOptions = optionsDO;\n\t if (optionsDOIsFn) {\n\t extenderOptionsDefaultOptions = extenderOptionsDefaultOptions(mergedDefaultOptions);\n\t }\n\t utils.reverseDeepMerge(extendsDefaultOptions, extenderOptionsDefaultOptions);\n\t return extendsDefaultOptions;\n\t };\n\t } else if (optionsDOIsFn) {\n\t options.defaultOptions = function defaultOptions(options) {\n\t var newDefaultOptions = {};\n\t utils.reverseDeepMerge(newDefaultOptions, options, extendsDO);\n\t return optionsDO(newDefaultOptions);\n\t };\n\t }\n\t }\n\n\t function getType(name, throwError, errorContext) {\n\t if (!name) {\n\t return undefined;\n\t }\n\t var type = typeMap[name];\n\t if (!type && throwError === true) {\n\t throw getError(\"There is no type by the name of \\\"\" + name + \"\\\": \" + JSON.stringify(errorContext));\n\t } else {\n\t return type;\n\t }\n\t }\n\n\t function setWrapper(_x, _x2) {\n\t var _again = true;\n\n\t _function: while (_again) {\n\t _again = false;\n\t var options = _x,\n\t name = _x2;\n\n\t if (angular.isArray(options)) {\n\t return options.map(function (wrapperOptions) {\n\t return setWrapper(wrapperOptions);\n\t });\n\t } else if (angular.isObject(options)) {\n\t options.types = getOptionsTypes(options);\n\t options.name = getOptionsName(options, name);\n\t checkWrapperAPI(options);\n\t templateWrappersMap[options.name] = options;\n\t return options;\n\t } else if (angular.isString(options)) {\n\t _x = {\n\t template: options,\n\t name: name\n\t };\n\t _again = true;\n\t continue _function;\n\t }\n\t }\n\t }\n\n\t function getOptionsTypes(options) {\n\t if (angular.isString(options.types)) {\n\t return [options.types];\n\t }\n\t if (!angular.isDefined(options.types)) {\n\t return [];\n\t } else {\n\t return options.types;\n\t }\n\t }\n\n\t function getOptionsName(options, name) {\n\t return options.name || name || options.types.join(\" \") || defaultWrapperName;\n\t }\n\n\t function checkWrapperAPI(options) {\n\t formlyUsabilityProvider.checkWrapper(options);\n\t if (options.template) {\n\t formlyUsabilityProvider.checkWrapperTemplate(options.template, options);\n\t }\n\t if (!options.overwriteOk) {\n\t checkOverwrite(options.name, templateWrappersMap, options, \"templateWrappers\");\n\t } else {\n\t delete options.overwriteOk;\n\t }\n\t checkWrapperTypes(options);\n\t }\n\n\t function checkWrapperTypes(options) {\n\t var shouldThrow = !angular.isArray(options.types) || !options.types.every(angular.isString);\n\t if (shouldThrow) {\n\t throw getError(\"Attempted to create a template wrapper with types that is not a string or an array of strings\");\n\t }\n\t }\n\n\t function checkOverwrite(property, object, newValue, objectName) {\n\t if (object.hasOwnProperty(property)) {\n\t warn([\"Attempting to overwrite \" + property + \" on \" + objectName + \" which is currently\", \"\" + JSON.stringify(object[property]) + \" with \" + JSON.stringify(newValue), \"To supress this warning, specify the property \\\"overwriteOk: true\\\"\"].join(\" \"));\n\t }\n\t }\n\n\t function getWrapper(name) {\n\t return templateWrappersMap[name || defaultWrapperName];\n\t }\n\n\t function getWrapperByType(type) {\n\t /* jshint maxcomplexity:6 */\n\t var wrappers = [];\n\t for (var name in templateWrappersMap) {\n\t if (templateWrappersMap.hasOwnProperty(name)) {\n\t if (templateWrappersMap[name].types && templateWrappersMap[name].types.indexOf(type) !== -1) {\n\t wrappers.push(templateWrappersMap[name]);\n\t }\n\t }\n\t }\n\t return wrappers;\n\t }\n\n\t function removeWrapperByName(name) {\n\t var wrapper = templateWrappersMap[name];\n\t delete templateWrappersMap[name];\n\t return wrapper;\n\t }\n\n\t function removeWrappersForType(type) {\n\t var wrappers = getWrapperByType(type);\n\t if (!wrappers) {\n\t return;\n\t }\n\t if (!angular.isArray(wrappers)) {\n\t return removeWrapperByName(wrappers.name);\n\t } else {\n\t wrappers.forEach(function (wrapper) {\n\t return removeWrapperByName(wrapper.name);\n\t });\n\t return wrappers;\n\t }\n\t }\n\n\t function warn() {\n\t if (!_this.disableWarnings) {\n\t console.warn.apply(console, arguments);\n\t }\n\t }\n\t}\n\tformlyConfig.$inject = [\"formlyUsabilityProvider\", \"formlyApiCheck\"];\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tmodule.exports = formlyValidationMessages;\n\n\t// @ngInject\n\tfunction formlyValidationMessages() {\n\n\t var validationMessages = {\n\t addTemplateOptionValueMessage: addTemplateOptionValueMessage,\n\t addStringMessage: addStringMessage,\n\t messages: {}\n\t };\n\n\t return validationMessages;\n\n\t function addTemplateOptionValueMessage(name, prop, prefix, suffix, alternate) {\n\t validationMessages.messages[name] = templateOptionValue(prop, prefix, suffix, alternate);\n\t }\n\n\t function addStringMessage(name, string) {\n\t validationMessages.messages[name] = function () {\n\t return string;\n\t };\n\t }\n\n\t function templateOptionValue(prop, prefix, suffix, alternate) {\n\t return function getValidationMessage(viewValue, modelValue, scope) {\n\t if (scope.options.templateOptions[prop]) {\n\t return \"\" + prefix + \" \" + scope.options.templateOptions[prop] + \" \" + suffix;\n\t } else {\n\t return alternate;\n\t }\n\t };\n\t }\n\t}\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar utils = _interopRequire(__webpack_require__(18));\n\n\tmodule.exports = formlyUtil;\n\n\t// @ngInject\n\tfunction formlyUtil() {\n\t return utils;\n\t}\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _toConsumableArray = function (arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } };\n\n\tmodule.exports = formlyWarn;\n\n\t// @ngInject\n\tfunction formlyWarn(formlyConfig, formlyErrorAndWarningsUrlPrefix, $log) {\n\t return function warn() {\n\t if (!formlyConfig.disableWarnings) {\n\t var args = Array.prototype.slice.call(arguments);\n\t var warnInfoSlug = args.shift();\n\t args.unshift(\"Formly Warning:\");\n\t args.push(\"\" + formlyErrorAndWarningsUrlPrefix + \"\" + warnInfoSlug);\n\t $log.warn.apply($log, _toConsumableArray(args));\n\t }\n\t };\n\t}\n\tformlyWarn.$inject = [\"formlyConfig\", \"formlyErrorAndWarningsUrlPrefix\", \"$log\"];\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tmodule.exports = formlyCustomValidation;\n\n\t// @ngInject\n\tfunction formlyCustomValidation(formlyUtil, $q) {\n\t return {\n\t restrict: \"A\",\n\t require: \"ngModel\",\n\t link: function formlyCustomValidationLink(scope, el, attrs, ctrl) {\n\t var opts = scope.options;\n\t if (opts.validators) {\n\t checkValidators(opts.validators);\n\t }\n\t opts.validation.messages = opts.validation.messages || {};\n\t angular.forEach(opts.validation.messages, function (message, key) {\n\t opts.validation.messages[key] = function () {\n\t return formlyUtil.formlyEval(scope, message, ctrl.$modelValue, ctrl.$viewValue);\n\t };\n\t });\n\n\t var useNewValidatorsApi = ctrl.hasOwnProperty(\"$validators\") && !attrs.hasOwnProperty(\"useParsers\");\n\t angular.forEach(opts.validators, function addValidatorToPipeline(validator, name) {\n\t var message = validator.message;\n\t if (message) {\n\t opts.validation.messages[name] = function () {\n\t return formlyUtil.formlyEval(scope, message, ctrl.$modelValue, ctrl.$viewValue);\n\t };\n\t }\n\t validator = angular.isObject(validator) ? validator.expression : validator;\n\t var isPossiblyAsync = !angular.isString(validator);\n\t if (useNewValidatorsApi) {\n\t setupWithValidators();\n\t } else {\n\t setupWithParsers();\n\t }\n\n\t function setupWithValidators() {\n\t var validatorCollection = isPossiblyAsync ? \"$asyncValidators\" : \"$validators\";\n\t ctrl[validatorCollection][name] = function evalValidity(modelValue, viewValue) {\n\t var value = formlyUtil.formlyEval(scope, validator, modelValue, viewValue);\n\t if (isPossiblyAsync) {\n\t return isPromiseLike(value) ? value : value ? $q.when(value) : $q.reject(value);\n\t } else {\n\t return value;\n\t }\n\t };\n\t }\n\n\t function setupWithParsers() {\n\t var inFlightValidator = undefined;\n\t ctrl.$parsers.unshift(function evalValidityOfParser(viewValue) {\n\t var isValid = formlyUtil.formlyEval(scope, validator, ctrl.$modelValue, viewValue);\n\t if (isPromiseLike(isValid)) {\n\t ctrl.$pending = ctrl.$pending || {};\n\t ctrl.$pending[name] = true;\n\t inFlightValidator = isValid;\n\t isValid.then(function () {\n\t if (inFlightValidator === isValid) {\n\t ctrl.$setValidity(name, true);\n\t }\n\t })[\"catch\"](function () {\n\t if (inFlightValidator === isValid) {\n\t ctrl.$setValidity(name, false);\n\t }\n\t })[\"finally\"](function () {\n\t if (Object.keys(ctrl.$pending).length === 1) {\n\t delete ctrl.$pending;\n\t } else {\n\t delete ctrl.$pending[name];\n\t }\n\t });\n\t } else {\n\t ctrl.$setValidity(name, isValid);\n\t }\n\t return viewValue;\n\t });\n\t }\n\t });\n\t }\n\t };\n\n\t function isPromiseLike(obj) {\n\t return obj && angular.isFunction(obj.then);\n\t }\n\n\t function checkValidators(validators) {\n\t var allowedProperties = [\"expression\", \"message\"];\n\t var validatorsWithExtraProps = {};\n\t angular.forEach(validators, function (validator, name) {\n\t if (angular.isString(validator)) {\n\t return;\n\t }\n\t var extraProps = [];\n\t angular.forEach(validator, function (v, key) {\n\t if (allowedProperties.indexOf(key) === -1) {\n\t extraProps.push(key);\n\t }\n\t });\n\t if (extraProps.length) {\n\t validatorsWithExtraProps[name] = extraProps;\n\t }\n\t });\n\t if (Object.keys(validatorsWithExtraProps).length) {\n\t throw new Error([\"Validators are only allowed to be functions or objects that have \" + allowedProperties.join(\", \") + \".\", \"You provided some extra properties: \" + JSON.stringify(validatorsWithExtraProps)].join(\" \"));\n\t }\n\t }\n\t}\n\tformlyCustomValidation.$inject = [\"formlyUtil\", \"$q\"];\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tmodule.exports = formlyField;\n\n\t/**\n\t * @ngdoc directive\n\t * @name formlyField\n\t * @restrict AE\n\t */\n\t// @ngInject\n\tfunction formlyField($http, $q, $compile, $templateCache, formlyConfig, formlyValidationMessages, formlyApiCheck, formlyUtil, formlyUsability, formlyWarn) {\n\t var arrayify = formlyUtil.arrayify;\n\n\t FormlyFieldController.$inject = [\"$scope\", \"$timeout\", \"$parse\", \"$controller\"];\n\t return {\n\t restrict: \"AE\",\n\t transclude: true,\n\t scope: {\n\t options: \"=\",\n\t model: \"=\",\n\t formId: \"@\", // TODO remove formId in a breaking release\n\t index: \"=?\",\n\t fields: \"=?\",\n\t formState: \"=?\",\n\t form: \"=?\" // TODO require form in a breaking release\n\t },\n\t controller: FormlyFieldController,\n\t link: fieldLink\n\t };\n\n\t // @ngInject\n\t function FormlyFieldController($scope, $timeout, $parse, $controller) {\n\t /* jshint maxstatements:31 */\n\t if ($scope.options.fieldGroup) {\n\t setupFieldGroup();\n\t return;\n\t }\n\n\t var fieldType = getFieldType($scope.options);\n\t simplifyLife($scope.options);\n\t mergeFieldOptionsWithTypeDefaults($scope.options, fieldType);\n\t extendOptionsWithDefaults($scope.options, $scope.index);\n\t checkApi($scope.options);\n\t // set field id to link labels and fields\n\n\t // initalization\n\t setFieldId();\n\t setDefaultValue();\n\t setInitialValue();\n\t runExpressions();\n\t addModelWatcher($scope, $scope.options);\n\t addValidationMessages($scope.options);\n\t invokeControllers($scope, $scope.options, fieldType);\n\n\t // function definitions\n\t function runExpressions() {\n\t // must run on next tick to make sure that the current value is correct.\n\t $timeout(function runExpressionsOnNextTick() {\n\t var field = $scope.options;\n\t var currentValue = valueGetterSetter();\n\t angular.forEach(field.expressionProperties, function runExpression(expression, prop) {\n\t var setter = $parse(prop).assign;\n\t var promise = $q.when(formlyUtil.formlyEval($scope, expression, currentValue));\n\t promise.then(function setFieldValue(value) {\n\t setter(field, value);\n\t });\n\t });\n\t });\n\t }\n\n\t function valueGetterSetter(newVal) {\n\t if (!$scope.model || !$scope.options.key) {\n\t return;\n\t }\n\t if (angular.isDefined(newVal)) {\n\t $scope.model[$scope.options.key] = newVal;\n\t }\n\t return $scope.model[$scope.options.key];\n\t }\n\n\t function simplifyLife(options) {\n\t // add a few empty objects (if they don't already exist) so you don't have to undefined check everywhere\n\t formlyUtil.reverseDeepMerge(options, {\n\t data: {},\n\t templateOptions: {},\n\t validation: {}\n\t });\n\t // create $scope.to so template authors can reference to instead of $scope.options.templateOptions\n\t $scope.to = $scope.options.templateOptions;\n\t }\n\n\t function setFieldId() {\n\t if (angular.isFunction(formlyConfig.extras.getFieldId)) {\n\t $scope.id = formlyConfig.extras.getFieldId($scope.options, $scope.model, $scope);\n\t } else {\n\t var formName = $scope.form && $scope.form.$name || $scope.formId;\n\t $scope.id = formlyUtil.getFieldId(formName, $scope.options, $scope.index);\n\t }\n\t $scope.options.id = $scope.id;\n\t }\n\n\t function setDefaultValue() {\n\t if (angular.isDefined($scope.options.defaultValue) && !angular.isDefined($scope.model[$scope.options.key])) {\n\t $scope.model[$scope.options.key] = $scope.options.defaultValue;\n\t }\n\t }\n\n\t function setInitialValue() {\n\t $scope.options.initialValue = $scope.model && $scope.model[$scope.options.key];\n\t }\n\n\t function mergeFieldOptionsWithTypeDefaults(options, type) {\n\t if (type) {\n\t mergeOptions(options, type.defaultOptions);\n\t }\n\t var properOrder = arrayify(options.optionsTypes).reverse(); // so the right things are overridden\n\t angular.forEach(properOrder, function (typeName) {\n\t mergeOptions(options, formlyConfig.getType(typeName, true, options).defaultOptions);\n\t });\n\t }\n\n\t function mergeOptions(options, extraOptions) {\n\t if (extraOptions) {\n\t if (angular.isFunction(extraOptions)) {\n\t extraOptions = extraOptions(options);\n\t }\n\t formlyUtil.reverseDeepMerge(options, extraOptions);\n\t }\n\t }\n\n\t function extendOptionsWithDefaults(options, index) {\n\t var key = options.key || index || 0;\n\t angular.extend(options, {\n\t // attach the key in case the formly-field directive is used directly\n\t key: key,\n\t value: valueGetterSetter,\n\t runExpressions: runExpressions,\n\t resetModel: resetModel,\n\t updateInitialValue: updateInitialValue\n\t });\n\t }\n\n\t // initialization functions\n\t function addModelWatcher(scope, options) {\n\t if (options.model) {\n\t scope.$watch(\"options.model\", runExpressions, true);\n\t }\n\t }\n\n\t function resetModel() {\n\t $scope.model[$scope.options.key] = $scope.options.initialValue;\n\t if ($scope.options.formControl) {\n\t $scope.options.formControl.$setViewValue($scope.model[$scope.options.key]);\n\t $scope.options.formControl.$render();\n\t $scope.options.formControl.$setUntouched();\n\t $scope.options.formControl.$setPristine();\n\t }\n\t }\n\n\t function updateInitialValue() {\n\t $scope.options.initialValue = $scope.model[$scope.options.key];\n\t }\n\n\t function addValidationMessages(options) {\n\t options.validation.messages = options.validation.messages || {};\n\t angular.forEach(formlyValidationMessages.messages, function createFunctionForMessage(expression, name) {\n\t if (!options.validation.messages[name]) {\n\t options.validation.messages[name] = function evaluateMessage(viewValue, modelValue, scope) {\n\t return formlyUtil.formlyEval(scope, expression, modelValue, viewValue);\n\t };\n\t }\n\t });\n\t }\n\n\t function invokeControllers(scope) {\n\t var options = arguments[1] === undefined ? {} : arguments[1];\n\t var type = arguments[2] === undefined ? {} : arguments[2];\n\n\t angular.forEach([type.controller, options.controller], function (controller) {\n\t if (controller) {\n\t $controller(controller, { $scope: scope });\n\t }\n\t });\n\t }\n\n\t function setupFieldGroup() {\n\t $scope.options.options = $scope.options.options || {};\n\t $scope.options.options.formState = $scope.formState;\n\t }\n\t }\n\n\t // link function\n\t function fieldLink(scope, el) {\n\t if (scope.options.fieldGroup) {\n\t setFieldGroupTemplate();\n\t return;\n\t }\n\n\t addAttributes();\n\t addClasses();\n\n\t var type = getFieldType(scope.options);\n\t var args = arguments;\n\t var thusly = this;\n\t getFieldTemplate(scope.options).then(runManipulators(formlyConfig.templateManipulators.preWrapper)).then(transcludeInWrappers(scope.options)).then(runManipulators(formlyConfig.templateManipulators.postWrapper)).then(setElementTemplate).then(watchFormControl).then(callLinkFunctions)[\"catch\"](function (error) {\n\t formlyWarn(\"there-was-a-problem-setting-the-template-for-this-field\", \"There was a problem setting the template for this field \", scope.options, error);\n\t });\n\n\t function setFieldGroupTemplate() {\n\t checkFieldGroupApi(scope.options);\n\t el.addClass(\"formly-field-group\");\n\t var extraAttributes = \"\";\n\t if (scope.options.elementAttributes) {\n\t extraAttributes = Object.keys(scope.options.elementAttributes).map(function (key) {\n\t return \"\" + key + \"=\\\"\" + scope.options.elementAttributes[key] + \"\\\"\";\n\t }).join(\" \");\n\t }\n\t setElementTemplate(\"\\n <formly-form model=\\\"model\\\"\\n fields=\\\"options.fieldGroup\\\"\\n options=\\\"options.options\\\"\\n form=\\\"options.form\\\"\\n class=\\\"\" + scope.options.className + \"\\\"\\n \" + extraAttributes + \"\\n is-field-group>\\n </formly-form>\\n \");\n\t }\n\n\t function addAttributes() {\n\t if (scope.options.elementAttributes) {\n\t el.attr(scope.options.elementAttributes);\n\t }\n\t }\n\n\t function addClasses() {\n\t if (scope.options.className) {\n\t el.addClass(scope.options.className);\n\t }\n\t if (scope.options.type) {\n\t el.addClass(\"formly-field-\" + scope.options.type);\n\t }\n\t }\n\n\t function setElementTemplate(templateString) {\n\t el.html(asHtml(templateString));\n\t $compile(el.contents())(scope);\n\t return templateString;\n\t }\n\n\t function watchFormControl(templateString) {\n\t var stopWatchingField = angular.noop;\n\t var stopWatchingShowError = angular.noop;\n\t if (scope.options.noFormControl) {\n\t return;\n\t }\n\t var templateEl = angular.element(\"<div>\" + templateString + \"</div>\");\n\t var ngModelNode = templateEl[0].querySelector(\"[ng-model],[data-ng-model]\");\n\t if (ngModelNode && ngModelNode.getAttribute(\"name\")) {\n\t watchFieldNameOrExistence(ngModelNode.getAttribute(\"name\"));\n\t }\n\n\t function watchFieldNameOrExistence(name) {\n\t var nameExpressionRegex = /\\{\\{(.*?)}}/;\n\t var nameExpression = nameExpressionRegex.exec(name);\n\t if (nameExpression) {\n\t watchFieldName(nameExpression[1]);\n\t } else {\n\t watchFieldExistence(name);\n\t }\n\t }\n\n\t function watchFieldName(expression) {\n\t scope.$watch(expression, function oneFieldNameChange(name) {\n\t if (name) {\n\t stopWatchingField();\n\t watchFieldExistence(name);\n\t }\n\t });\n\t }\n\n\t function watchFieldExistence(name) {\n\t stopWatchingField = scope.$watch(\"form[\\\"\" + name + \"\\\"]\", function formControlChange(formControl) {\n\t if (formControl) {\n\t scope.fc = formControl; // shortcut for template authors\n\t scope.options.formControl = formControl;\n\t stopWatchingShowError();\n\t addShowMessagesWatcher();\n\t }\n\t });\n\t }\n\n\t function addShowMessagesWatcher() {\n\t stopWatchingShowError = scope.$watch(function watchShowValidationChange() {\n\t var customExpression = formlyConfig.extras.errorExistsAndShouldBeVisibleExpression;\n\t var options = scope.options;\n\t var fc = scope.fc;\n\n\t if (!fc.$invalid) {\n\t return false;\n\t } else if (typeof options.validation.show === \"boolean\") {\n\t return options.validation.show;\n\t } else if (customExpression) {\n\t return formlyUtil.formlyEval(scope, customExpression, fc.$modelValue, fc.$viewValue);\n\t } else {\n\t var noTouchedButDirty = angular.isUndefined(fc.$touched) && fc.$dirty;\n\t return scope.fc.$touched || noTouchedButDirty;\n\t }\n\t }, function onShowValidationChange(show) {\n\t scope.options.validation.errorExistsAndShouldBeVisible = show;\n\t scope.showError = show; // shortcut for template authors\n\t });\n\t }\n\t }\n\n\t function callLinkFunctions() {\n\t if (type && type.link) {\n\t type.link.apply(thusly, args);\n\t }\n\t if (scope.options.link) {\n\t scope.options.link.apply(thusly, args);\n\t }\n\t }\n\n\t function runManipulators(manipulators) {\n\t return function runManipulatorsOnTemplate(template) {\n\t var chain = $q.when(template);\n\t angular.forEach(manipulators, function (manipulator) {\n\t chain = chain.then(function (template) {\n\t return $q.when(manipulator(template, scope.options, scope)).then(function (newTemplate) {\n\t return angular.isString(newTemplate) ? newTemplate : asHtml(newTemplate);\n\t });\n\t });\n\t });\n\t return chain;\n\t };\n\t }\n\t }\n\n\t // stateless util functions\n\t function asHtml(el) {\n\t var wrapper = angular.element(\"<a></a>\");\n\t return wrapper.append(el).html();\n\t }\n\n\t function getFieldType(options) {\n\t return options.type && formlyConfig.getType(options.type);\n\t }\n\n\t function getFieldTemplate(options) {\n\t function fromOptionsOrType(key, type) {\n\t if (angular.isDefined(options[key])) {\n\t return options[key];\n\t } else if (type && angular.isDefined(type[key])) {\n\t return type[key];\n\t }\n\t }\n\n\t var type = formlyConfig.getType(options.type, true, options);\n\t var template = fromOptionsOrType(\"template\", type);\n\t var templateUrl = fromOptionsOrType(\"templateUrl\", type);\n\t if (angular.isUndefined(template) && !templateUrl) {\n\t throw formlyUsability.getFieldError(\"type-type-has-no-template\", \"Type '\" + options.type + \"' has not template. On element:\", options);\n\t }\n\n\t return getTemplate(templateUrl || template, angular.isUndefined(template), options);\n\t }\n\n\t function getTemplate(template, isUrl, options) {\n\t var templatePromise = undefined;\n\t if (angular.isFunction(template)) {\n\t templatePromise = $q.when(template(options));\n\t } else {\n\t templatePromise = $q.when(template);\n\t }\n\n\t if (!isUrl) {\n\t return templatePromise;\n\t } else {\n\t var _ret = (function () {\n\t var httpOptions = { cache: $templateCache };\n\t return {\n\t v: templatePromise.then(function (url) {\n\t return $http.get(url, httpOptions);\n\t }).then(function (response) {\n\t return response.data;\n\t })[\"catch\"](function handleErrorGettingATemplate(error) {\n\t formlyWarn(\"problem-loading-template-for-templateurl\", \"Problem loading template for \" + template, error);\n\t })\n\t };\n\t })();\n\n\t if (typeof _ret === \"object\") {\n\t return _ret.v;\n\t }\n\t }\n\t }\n\n\t function transcludeInWrappers(options) {\n\t var wrapper = getWrapperOption(options);\n\n\t return function transcludeTemplate(template) {\n\t if (!wrapper.length) {\n\t return $q.when(template);\n\t }\n\n\t wrapper.forEach(function (wrapper) {\n\t formlyUsability.checkWrapper(wrapper, options);\n\t wrapper.validateOptions && wrapper.validateOptions(options);\n\t runApiCheck(wrapper, options);\n\t });\n\t var promises = wrapper.map(function (w) {\n\t return getTemplate(w.template || w.templateUrl, !w.template);\n\t });\n\t return $q.all(promises).then(function (wrappersTemplates) {\n\t wrappersTemplates.forEach(function (wrapperTemplate, index) {\n\t formlyUsability.checkWrapperTemplate(wrapperTemplate, wrapper[index]);\n\t });\n\t wrappersTemplates.reverse(); // wrapper 0 is wrapped in wrapper 1 and so on...\n\t var totalWrapper = wrappersTemplates.shift();\n\t wrappersTemplates.forEach(function (wrapperTemplate) {\n\t totalWrapper = doTransclusion(totalWrapper, wrapperTemplate);\n\t });\n\t return doTransclusion(totalWrapper, template);\n\t });\n\t };\n\t }\n\n\t function doTransclusion(wrapper, template) {\n\t var superWrapper = angular.element(\"<a></a>\"); // this allows people not have to have a single root in wrappers\n\t superWrapper.append(wrapper);\n\t var transcludeEl = superWrapper.find(\"formly-transclude\");\n\t if (!transcludeEl.length) {\n\t //try it using our custom find function\n\t transcludeEl = formlyUtil.findByNodeName(superWrapper, \"formly-transclude\");\n\t }\n\t transcludeEl.replaceWith(template);\n\t return superWrapper.html();\n\t }\n\n\t function getWrapperOption(options) {\n\t var wrapper = options.wrapper;\n\t // explicit null means no wrapper\n\t if (wrapper === null) {\n\t return [];\n\t }\n\n\t // nothing specified means use the default wrapper for the type\n\t if (!wrapper) {\n\t // get all wrappers that specify they apply to this type\n\t wrapper = arrayify(formlyConfig.getWrapperByType(options.type));\n\t } else {\n\t wrapper = arrayify(wrapper).map(formlyConfig.getWrapper);\n\t }\n\n\t // get all wrappers for that this type specified that it uses.\n\t var type = formlyConfig.getType(options.type, true, options);\n\t if (type && type.wrapper) {\n\t var typeWrappers = arrayify(type.wrapper).map(formlyConfig.getWrapper);\n\t wrapper = wrapper.concat(typeWrappers);\n\t }\n\n\t // add the default wrapper last\n\t var defaultWrapper = formlyConfig.getWrapper();\n\t if (defaultWrapper) {\n\t wrapper.push(defaultWrapper);\n\t }\n\t return wrapper;\n\t }\n\n\t function checkApi(options) {\n\t formlyApiCheck[\"throw\"](formlyApiCheck.formlyFieldOptions, options, {\n\t prefix: \"formly-field directive\",\n\t url: \"formly-field-directive-validation-failed\"\n\t });\n\t // validate with the type\n\t var type = options.type && formlyConfig.getType(options.type);\n\t if (type) {\n\t if (type.validateOptions) {\n\t type.validateOptions(options);\n\t }\n\t runApiCheck(type, options);\n\t }\n\t }\n\n\t function checkFieldGroupApi(options) {\n\t formlyApiCheck[\"throw\"](formlyApiCheck.fieldGroup, options, {\n\t prefix: \"formly-field directive\",\n\t url: \"formly-field-directive-validation-failed\"\n\t });\n\t }\n\n\t function runApiCheck(_ref, options) {\n\t var apiCheck = _ref.apiCheck;\n\t var apiCheckInstance = _ref.apiCheckInstance;\n\t var apiCheckFunction = _ref.apiCheckFunction;\n\t var apiCheckOptions = _ref.apiCheckOptions;\n\n\t if (!apiCheck) {\n\t return;\n\t }\n\t var instance = apiCheckInstance || formlyApiCheck;\n\t var fn = apiCheckFunction || \"warn\";\n\t var shape = instance.shape(apiCheck);\n\t instance[fn](shape, options, apiCheckOptions || {\n\t prefix: \"formly-field \" + name,\n\t url: formlyApiCheck.config.output.docsBaseUrl + \"formly-field-type-apicheck-failed\"\n\t });\n\t }\n\t}\n\tformlyField.$inject = [\"$http\", \"$q\", \"$compile\", \"$templateCache\", \"formlyConfig\", \"formlyValidationMessages\", \"formlyApiCheck\", \"formlyUtil\", \"formlyUsability\", \"formlyWarn\"];\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tmodule.exports = formlyFocus;\n\n\t// @ngInject\n\tfunction formlyFocus($timeout, $document) {\n\t /* jshint -W052 */\n\t return {\n\t restrict: \"A\",\n\t link: function formlyFocusLink(scope, element, attrs) {\n\t var previousEl = null;\n\t var el = element[0];\n\t var doc = $document[0];\n\t attrs.$observe(\"formlyFocus\", function respondToFocusExpressionChange(value) {\n\t if (value === \"true\") {\n\t $timeout(function setElementFocus() {\n\t previousEl = doc.activeElement;\n\t el.focus();\n\t }, ~ ~attrs.focusWait);\n\t } else if (value === \"false\") {\n\t if (doc.activeElement === el) {\n\t el.blur();\n\t if (attrs.hasOwnProperty(\"refocus\") && previousEl) {\n\t previousEl.focus();\n\t }\n\t }\n\t }\n\t });\n\t }\n\t };\n\t}\n\tformlyFocus.$inject = [\"$timeout\", \"$document\"];\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar _toConsumableArray = function (arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } };\n\n\tvar _slice = Array.prototype.slice;\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tmodule.exports = formlyForm;\n\n\t/**\n\t * @ngdoc directive\n\t * @name formlyForm\n\t * @restrict E\n\t */\n\t// @ngInject\n\tfunction formlyForm(formlyUsability, $parse, formlyApiCheck, formlyConfig) {\n\t var currentFormId = 1;\n\t return {\n\t restrict: \"E\",\n\t template: function formlyFormGetTemplate(el, attrs) {\n\t /* jshint -W033 */ // this because jshint is broken I guess...\n\t var rootEl = getRootEl();\n\t var fieldRootEl = getFieldRootEl();\n\t var formId = \"formly_\" + currentFormId++;\n\t var parentFormAttributes = \"\";\n\t if (attrs.hasOwnProperty(\"isFieldGroup\") && el.parent().parent().hasClass(\"formly\")) {\n\t parentFormAttributes = copyAttributes(el.parent().parent()[0].attributes);\n\t }\n\t return \"\\n <\" + rootEl + \" class=\\\"formly\\\"\\n name=\\\"\" + getFormName() + \"\\\"\\n role=\\\"form\\\" \" + parentFormAttributes + \">\\n <\" + fieldRootEl + \" formly-field\\n ng-repeat=\\\"field in fields \" + getTrackBy() + \"\\\"\\n \" + getHideDirective() + \"=\\\"!field.hide\\\"\\n class=\\\"formly-field\\\"\\n options=\\\"field\\\"\\n model=\\\"field.model || model\\\"\\n fields=\\\"fields\\\"\\n form=\\\"theFormlyForm\\\"\\n form-id=\\\"\" + getFormName() + \"\\\"\\n form-state=\\\"options.formState\\\"\\n index=\\\"$index\\\">\\n </\" + fieldRootEl + \">\\n <div ng-transclude></div>\\n </\" + rootEl + \">\\n \";\n\n\t function getRootEl() {\n\t return attrs.rootEl || \"ng-form\";\n\t }\n\n\t function getFieldRootEl() {\n\t return attrs.fieldRootEl || \"div\";\n\t }\n\n\t function getHideDirective() {\n\t return attrs.hideDirective || formlyConfig.extras.defaultHideDirective || \"ng-if\";\n\t }\n\n\t function getTrackBy() {\n\t if (!attrs.trackBy) {\n\t return \"\";\n\t } else {\n\t return \"track by \" + attrs.trackBy;\n\t }\n\t }\n\n\t function getFormName() {\n\t var formName = formId;\n\t var bindName = attrs.bindName;\n\t if (bindName) {\n\t if (angular.version.minor < 3) {\n\t throw formlyUsability.getFormlyError(\"bind-name attribute on formly-form not allowed in > angular 1.3\");\n\t }\n\t // we can do a one-time binding here because we know we're in 1.3.x territory\n\t formName = \"{{::'formly_' + \" + bindName + \"}}\";\n\t }\n\t return formName;\n\t }\n\n\t function copyAttributes(attributes) {\n\t var excluded = [\"model\", \"form\", \"fields\", \"options\", \"name\", \"role\", \"class\"];\n\t var arrayAttrs = [];\n\t angular.forEach(attributes, function (_ref) {\n\t var nodeName = _ref.nodeName;\n\t var nodeValue = _ref.nodeValue;\n\n\t if (nodeName !== \"undefined\" && excluded.indexOf(nodeName) === -1) {\n\t arrayAttrs.push(\"\" + toKebabCase(nodeName) + \"=\\\"\" + nodeValue + \"\\\"\");\n\t }\n\t });\n\t return arrayAttrs.join(\" \");\n\t }\n\n\t function toKebabCase(string) {\n\t if (string) {\n\t return string.replace(/([A-Z])/g, function ($1) {\n\t return \"-\" + $1.toLowerCase();\n\t });\n\t } else {\n\t return \"\";\n\t }\n\t }\n\t },\n\t replace: true,\n\t transclude: true,\n\t scope: {\n\t fields: \"=\",\n\t model: \"=\",\n\t form: \"=?\",\n\t options: \"=?\"\n\t },\n\t controller: /* @ngInject */[\"$scope\", \"formlyUtil\", function FormlyFormController($scope, formlyUtil) {\n\t setupOptions();\n\t $scope.model = $scope.model || {};\n\t $scope.fields = $scope.fields || [];\n\n\t angular.forEach($scope.fields, initModel); // initializes the model property if set to 'formState'\n\t angular.forEach($scope.fields, attachKey); // attaches a key based on the index if a key isn't specified\n\t angular.forEach($scope.fields, setupWatchers); // setup watchers for all fields\n\n\t // watch the model and evaluate watch expressions that depend on it.\n\t $scope.$watch(\"model\", onModelOrFormStateChange, true);\n\t if ($scope.options.formState) {\n\t $scope.$watch(\"options.formState\", onModelOrFormStateChange, true);\n\t }\n\n\t function onModelOrFormStateChange() {\n\t angular.forEach($scope.fields, function runFieldExpressionProperties(field, index) {\n\t /*jshint -W030 */\n\t var model = field.model || $scope.model;\n\t field.runExpressions && field.runExpressions(model);\n\t if (field.hideExpression) {\n\t // can't use hide with expressionProperties reliably\n\t var val = model[field.key];\n\t // this makes it closer to what a regular expressionProperty would be\n\t var extraLocals = {\n\t options: field,\n\t index: index,\n\t formState: $scope.options.formState,\n\t formId: $scope.formId\n\t };\n\t field.hide = formlyUtil.formlyEval($scope, field.hideExpression, val, val, extraLocals);\n\t }\n\t });\n\t }\n\n\t function setupOptions() {\n\t formlyApiCheck[\"throw\"]([formlyApiCheck.formOptionsApi.optional], [$scope.options], { prefix: \"formly-form options check\" });\n\t $scope.options = $scope.options || {};\n\t $scope.options.formState = $scope.options.formState || {};\n\n\t angular.extend($scope.options, {\n\t updateInitialValue: updateInitialValue,\n\t resetModel: resetModel\n\t });\n\t }\n\n\t function updateInitialValue() {\n\t angular.forEach($scope.fields, function (field) {\n\t if (isFieldGroup(field)) {\n\t field.options.updateInitialValue();\n\t } else {\n\t field.updateInitialValue();\n\t }\n\t });\n\t }\n\n\t function resetModel() {\n\t angular.forEach($scope.fields, function (field) {\n\t if (isFieldGroup(field)) {\n\t field.options.resetModel();\n\t } else {\n\t field.resetModel();\n\t }\n\t });\n\t }\n\n\t function initModel(field) {\n\t if (field.model && field.model === \"formState\") {\n\t field.model = $scope.options.formState;\n\t }\n\t }\n\n\t function attachKey(field, index) {\n\t if (!isFieldGroup(field)) {\n\t field.key = field.key || index || 0;\n\t }\n\t }\n\n\t function setupWatchers(field, index) {\n\t if (isFieldGroup(field) || !angular.isDefined(field.watcher)) {\n\t return;\n\t }\n\t var watchers = field.watcher;\n\t if (!angular.isArray(watchers)) {\n\t watchers = [watchers];\n\t }\n\t angular.forEach(watchers, function setupWatcher(watcher) {\n\t if (!angular.isDefined(watcher.listener)) {\n\t throw formlyUsability.getFieldError(\"all-field-watchers-must-have-a-listener\", \"All field watchers must have a listener\", field);\n\t }\n\t var watchExpression = getWatchExpression(watcher, field, index);\n\t var watchListener = getWatchListener(watcher, field, index);\n\n\t var type = watcher.type || \"$watch\";\n\t watcher.stopWatching = $scope[type](watchExpression, watchListener, watcher.watchDeep);\n\t });\n\t }\n\n\t function getWatchExpression(watcher, field, index) {\n\t var watchExpression = watcher.expression || \"model['\" + field.key + \"']\";\n\t if (angular.isFunction(watchExpression)) {\n\t // wrap the field's watch expression so we can call it with the field as the first arg\n\t // and the stop function as the last arg as a helper\n\t var originalExpression = watchExpression;\n\t watchExpression = function formlyWatchExpression() {\n\t var args = modifyArgs.apply(undefined, [watcher, index].concat(_slice.call(arguments)));\n\t return originalExpression.apply(undefined, _toConsumableArray(args));\n\t };\n\t watchExpression.displayName = \"Formly Watch Expression for field for \" + field.key;\n\t }\n\t return watchExpression;\n\t }\n\n\t function getWatchListener(watcher, field, index) {\n\t var watchListener = watcher.listener;\n\t if (angular.isFunction(watchListener)) {\n\t // wrap the field's watch listener so we can call it with the field as the first arg\n\t // and the stop function as the last arg as a helper\n\t var originalListener = watchListener;\n\t watchListener = function formlyWatchListener() {\n\t var args = modifyArgs.apply(undefined, [watcher, index].concat(_slice.call(arguments)));\n\t return originalListener.apply(undefined, _toConsumableArray(args));\n\t };\n\t watchListener.displayName = \"Formly Watch Listener for field for \" + field.key;\n\t }\n\t return watchListener;\n\t }\n\n\t function modifyArgs(watcher, index) {\n\t for (var _len = arguments.length, originalArgs = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n\t originalArgs[_key - 2] = arguments[_key];\n\t }\n\n\t return [$scope.fields[index]].concat(originalArgs, [watcher.stopWatching]);\n\t }\n\n\t function isFieldGroup(field) {\n\t return field && !!field.fieldGroup;\n\t }\n\t }],\n\t link: function link(scope, el, attrs) {\n\t var formId = attrs.name;\n\t scope.formId = formId;\n\t scope.theFormlyForm = scope[formId];\n\t if (attrs.form) {\n\t $parse(attrs.form).assign(scope.$parent, scope[formId]);\n\t }\n\n\t // chrome autocomplete lameness\n\t // see https://code.google.com/p/chromium/issues/detail?id=468153#c14\n\t // ლ(ಠ益ಠლ) (╯°□°)╯︵ ┻━┻ (◞‸◟;)\n\t var global = formlyConfig.extras.removeChromeAutoComplete === true;\n\t var offInstance = scope.options && scope.options.removeChromeAutoComplete === false;\n\t var onInstance = scope.options && scope.options.removeChromeAutoComplete === true;\n\t if (global && !offInstance || onInstance) {\n\t var input = document.createElement(\"input\");\n\t input.setAttribute(\"autocomplete\", \"address-level4\");\n\t input.setAttribute(\"hidden\", true);\n\t el[0].appendChild(input);\n\t }\n\t }\n\t };\n\t}\n\tformlyForm.$inject = [\"formlyUsability\", \"$parse\", \"formlyApiCheck\", \"formlyConfig\"];\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tmodule.exports = addFormlyNgModelAttrsManipulator;\n\n\t// @ngInject\n\tfunction addFormlyNgModelAttrsManipulator(formlyConfig) {\n\t if (formlyConfig.extras.disableNgModelAttrsManipulator) {\n\t return;\n\t }\n\t formlyConfig.templateManipulators.preWrapper.push(ngModelAttrsManipulator);\n\n\t function ngModelAttrsManipulator(template, options, scope) {\n\t /* jshint maxcomplexity:6 */\n\t var el = document.createElement(\"div\");\n\t var data = options.data;\n\t if (data.skipNgModelAttrsManipulator === true) {\n\t return template;\n\t }\n\t el.innerHTML = template;\n\t var modelNodes = el.querySelectorAll(\"[ng-model], [data-ng-model]\");\n\t if (!modelNodes || !modelNodes.length) {\n\t return template;\n\t }\n\n\t addIfNotPresent(modelNodes, \"id\", scope.id);\n\t addIfNotPresent(modelNodes, \"name\", scope.id);\n\n\t addValidation();\n\t addModelOptions();\n\t addTemplateOptionsAttrs();\n\n\t return el.innerHTML;\n\n\t function addValidation() {\n\t if (angular.isDefined(options.validators) || angular.isDefined(options.validation.messages)) {\n\t addIfNotPresent(modelNodes, \"formly-custom-validation\", \"\");\n\t }\n\t }\n\n\t function addModelOptions() {\n\t if (angular.isDefined(options.modelOptions)) {\n\t addIfNotPresent(modelNodes, \"ng-model-options\", \"options.modelOptions\");\n\t if (options.modelOptions.getterSetter) {\n\t angular.forEach(modelNodes, function (node) {\n\t node.setAttribute(\"ng-model\", \"options.value\");\n\t });\n\t }\n\t }\n\t }\n\n\t function addTemplateOptionsAttrs() {\n\t if (!options.templateOptions && !options.expressionProperties) {\n\t // no need to run these if there are no templateOptions or expressionProperties\n\t return;\n\t }\n\t var to = options.templateOptions || {};\n\t var ep = options.expressionProperties || {};\n\n\t var ngModelAttributes = getBuiltInAttributes();\n\n\t // extend with the user's specifications winning\n\t angular.extend(ngModelAttributes, options.ngModelAttrs);\n\n\t // Feel free to make this more simple :-)\n\t angular.forEach(ngModelAttributes, function (val, name) {\n\t /* jshint maxcomplexity:14 */\n\t var attrVal = undefined;\n\t var attrName = undefined;\n\t var ref = \"options.templateOptions['\" + name + \"']\";\n\t var toVal = to[name];\n\t var epVal = getEpValue(ep, name);\n\n\t var inTo = angular.isDefined(toVal);\n\t var inEp = angular.isDefined(epVal);\n\t if (val.value) {\n\t // I realize this looks backwards, but it's right, trust me...\n\t attrName = val.value;\n\t attrVal = name;\n\t } else if (val.expression && inTo) {\n\t attrName = val.expression;\n\t if (angular.isString(to[name])) {\n\t attrVal = \"$eval(\" + ref + \")\";\n\t } else if (angular.isFunction(to[name])) {\n\t attrVal = \"\" + ref + \"(model[options.key], options, this, $event)\";\n\t } else {\n\t throw new Error(\"options.templateOptions.\" + name + \" must be a string or function: \" + JSON.stringify(options));\n\t }\n\t } else if (val.bound && inEp) {\n\t attrName = val.bound;\n\t attrVal = ref;\n\t } else if ((val.attribute || val.boolean) && inEp) {\n\t attrName = val.attribute || val.boolean;\n\t attrVal = \"{{\" + ref + \"}}\";\n\t } else if (val.attribute && inTo) {\n\t attrName = val.attribute;\n\t attrVal = toVal;\n\t } else if (val.boolean) {\n\t if (inTo && !inEp && toVal) {\n\t attrName = val.boolean;\n\t attrVal = true;\n\t } else {}\n\t } else if (val.bound && inTo) {\n\t attrName = val.bound;\n\t attrVal = ref;\n\t }\n\n\t if (angular.isDefined(attrName) && angular.isDefined(attrVal)) {\n\t addIfNotPresent(modelNodes, attrName, attrVal);\n\t }\n\t });\n\t }\n\t }\n\n\t // Utility functions\n\t function getBuiltInAttributes() {\n\t var ngModelAttributes = {\n\t focus: {\n\t attribute: \"formly-focus\"\n\t }\n\t };\n\t var boundOnly = [];\n\t var bothBooleanAndBound = [\"required\", \"disabled\"];\n\t var bothAttributeAndBound = [\"pattern\", \"minlength\"];\n\t var expressionOnly = [\"change\", \"keydown\", \"keyup\", \"keypress\", \"click\", \"focus\", \"blur\"];\n\t var attributeOnly = [\"placeholder\", \"min\", \"max\", \"tabindex\", \"type\"];\n\t if (formlyConfig.extras.ngModelAttrsManipulatorPreferUnbound) {\n\t bothAttributeAndBound.push(\"maxlength\");\n\t } else {\n\t boundOnly.push(\"maxlength\");\n\t }\n\n\t angular.forEach(boundOnly, function (item) {\n\t ngModelAttributes[item] = { bound: \"ng-\" + item };\n\t });\n\n\t angular.forEach(bothBooleanAndBound, function (item) {\n\t ngModelAttributes[item] = { boolean: item, bound: \"ng-\" + item };\n\t });\n\n\t angular.forEach(bothAttributeAndBound, function (item) {\n\t ngModelAttributes[item] = { attribute: item, bound: \"ng-\" + item };\n\t });\n\n\t angular.forEach(expressionOnly, function (item) {\n\t var propName = \"on\" + item.substr(0, 1).toUpperCase() + item.substr(1);\n\t ngModelAttributes[propName] = { expression: \"ng-\" + item };\n\t });\n\n\t angular.forEach(attributeOnly, function (item) {\n\t ngModelAttributes[item] = { attribute: item };\n\t });\n\t return ngModelAttributes;\n\t }\n\n\t function getEpValue(ep, name) {\n\t return ep[\"templateOptions.\" + name] || ep[\"templateOptions['\" + name + \"']\"] || ep[\"templateOptions[\\\"\" + name + \"\\\"]\"];\n\t }\n\n\t function addIfNotPresent(nodes, attr, val) {\n\t angular.forEach(nodes, function (node) {\n\t if (!node.getAttribute(attr)) {\n\t node.setAttribute(attr, val);\n\t }\n\t });\n\t }\n\t}\n\taddFormlyNgModelAttrsManipulator.$inject = [\"formlyConfig\"];\n\n\t// jshint -W035\n\t// empty to illustrate that a boolean will not be added via val.bound\n\t// if you want it added via val.bound, then put it in expressionProperties\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tmodule.exports = addCustomTags;\n\n\t// @ngInject\n\tfunction addCustomTags($document) {\n\t if ($document && $document.get) {\n\t (function () {\n\t //IE8 check ->\n\t // http://stackoverflow.com/questions/10964966/detect-ie-version-prior-to-v9-in-javascript/10965203#10965203\n\t var document = $document.get(0);\n\t var div = document.createElement(\"div\");\n\t div.innerHTML = \"<!--[if lt IE 9]><i></i><![endif]-->\";\n\t var isIeLessThan9 = div.getElementsByTagName(\"i\").length === 1;\n\n\t if (isIeLessThan9) {\n\t //add the custom elements that we need for formly\n\t var customElements = [\"formly-field\", \"formly-form\", \"formly-custom-validation\", \"formly-focus\", \"formly-transpose\"];\n\t angular.forEach(customElements, function (el) {\n\t document.createElement(el);\n\t });\n\t }\n\t })();\n\t }\n\t}\n\taddCustomTags.$inject = [\"$document\"];\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\t// some versions of angular don't export the angular module properly,\n\t// so we get it from window in this case.\n\n\tvar angular = _interopRequire(__webpack_require__(17));\n\n\tif (!angular.version) {\n\t angular = window.angular;\n\t}\n\tmodule.exports = angular;\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_17__;\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tmodule.exports = { formlyEval: formlyEval, getFieldId: getFieldId, reverseDeepMerge: reverseDeepMerge, findByNodeName: findByNodeName, arrayify: arrayify, extendFunction: extendFunction };\n\n\tfunction formlyEval(scope, expression, $modelValue, $viewValue, extraLocals) {\n\t if (angular.isFunction(expression)) {\n\t return expression($viewValue, $modelValue, scope, extraLocals);\n\t } else {\n\t return scope.$eval(expression, angular.extend({ $viewValue: $viewValue, $modelValue: $modelValue }, extraLocals));\n\t }\n\t}\n\n\tfunction getFieldId(formId, options, index) {\n\t if (options.id) {\n\t return options.id;\n\t }\n\t var type = options.type;\n\t if (!type && options.template) {\n\t type = \"template\";\n\t } else if (!type && options.templateUrl) {\n\t type = \"templateUrl\";\n\t }\n\n\t return [formId, type, options.key, index].join(\"_\");\n\t}\n\n\tfunction reverseDeepMerge(dest) {\n\t angular.forEach(arguments, function (src, index) {\n\t if (!index) {\n\t return;\n\t }\n\t angular.forEach(src, function (val, prop) {\n\t if (!angular.isDefined(dest[prop])) {\n\t dest[prop] = angular.copy(val);\n\t } else if (objAndSameType(dest[prop], val)) {\n\t reverseDeepMerge(dest[prop], val);\n\t }\n\t });\n\t });\n\t}\n\n\tfunction objAndSameType(obj1, obj2) {\n\t return angular.isObject(obj1) && angular.isObject(obj2) && Object.getPrototypeOf(obj1) === Object.getPrototypeOf(obj2);\n\t}\n\n\t//recurse down a node tree to find a node with matching nodeName, for custom tags jQuery.find doesn't work in IE8\n\tfunction findByNodeName(el, nodeName) {\n\t if (!el.prop) {\n\t // not a jQuery or jqLite object -> wrap it\n\t el = angular.element(el);\n\t }\n\n\t if (el.prop(\"nodeName\") === nodeName.toUpperCase()) {\n\t return el;\n\t }\n\n\t var c = el.children();\n\t for (var i = 0; c && i < c.length; i++) {\n\t var node = findByNodeName(c[i], nodeName);\n\t if (node) {\n\t return node;\n\t }\n\t }\n\t}\n\n\tfunction arrayify(obj) {\n\t if (obj && !angular.isArray(obj)) {\n\t obj = [obj];\n\t } else if (!obj) {\n\t obj = [];\n\t }\n\t return obj;\n\t}\n\n\tfunction extendFunction() {\n\t for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n\t fns[_key] = arguments[_key];\n\t }\n\n\t return function extendedFunction() {\n\t var args = arguments;\n\t fns.forEach(function (fn) {\n\t return fn.apply(null, args);\n\t });\n\t };\n\t}\n\n/***/ }\n/******/ ])\n});\n;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2FuZ3VsYXItZm9ybWx5L2Rpc3QvZm9ybWx5LmpzPzUxZmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG9DQUFvQztBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDLHFEQUFxRDs7QUFFNUY7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDLHFEQUFxRDs7QUFFNUY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSx1Q0FBdUMscURBQXFEOztBQUU1Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDLHFEQUFxRDs7QUFFNUY7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSx1Q0FBdUMscURBQXFEOztBQUU1Rjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsaUJBQWlCO0FBQ3BELG1DQUFtQyxpQkFBaUI7QUFDcEQ7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSx1Q0FBdUMscURBQXFEOztBQUU1Rjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSwwQ0FBMEMsMEJBQTBCLDBDQUEwQyxnQkFBZ0IsdUJBQXVCLGFBQWEsRUFBRSxPQUFPLHdCQUF3QixFQUFFOztBQUVyTTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLHVDQUF1QyxxREFBcUQ7O0FBRTVGOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLFVBQVU7QUFDVixRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQiw0QkFBNEI7QUFDNUI7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFO0FBQ2xFO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBLG9EQUFvRDtBQUNwRCxpREFBaUQ7O0FBRWpEO0FBQ0E7QUFDQSxvQ0FBb0MsZ0JBQWdCO0FBQ3BEO0FBQ0EsUUFBUTtBQUNSOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0MsRUFBRSxPQUFPO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0Esa0NBQWtDO0FBQ2xDLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsWUFBWTtBQUNaLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWixVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDLHFEQUFxRDs7QUFFNUYsMENBQTBDLDBCQUEwQiwwQ0FBMEMsZ0JBQWdCLHVCQUF1QixhQUFhLEVBQUUsT0FBTyx3QkFBd0IsRUFBRTs7QUFFck07O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZ0NBQWdDO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpREFBaUQ7QUFDakQsaURBQWlEO0FBQ2pELHFEQUFxRDs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0EsOEZBQThGLHNDQUFzQztBQUNwSTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtR0FBbUcsYUFBYTtBQUNoSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLHVDQUF1QyxxREFBcUQ7O0FBRTVGOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLHdCQUF3QixhQUFhO0FBQ3JDLFVBQVU7QUFDVjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWixVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBLGtDQUFrQztBQUNsQyxNQUFNOztBQUVOO0FBQ0Esa0NBQWtDO0FBQ2xDLE1BQU07O0FBRU47QUFDQSxrQ0FBa0M7QUFDbEMsTUFBTTs7QUFFTjtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDLE1BQU07O0FBRU47QUFDQSxrQ0FBa0M7QUFDbEMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSx1Q0FBdUMscURBQXFEOztBQUU1RjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLHVDQUF1QyxxREFBcUQ7O0FBRTVGOztBQUVBLG1CQUFtQjs7QUFFbkI7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLG9EQUFvRCxtREFBbUQ7QUFDdkc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSxhQUFhO0FBQzlFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbmd1bGFyLWZvcm1seSB2ZXJzaW9uIDYuOC4yIGJ1aWx0IHdpdGgg4pmlIGJ5IEFzdHJpc20gPGFzdHJpc21zQGdtYWlsLmNvbT4sIEtlbnQgQy4gRG9kZHMgPGtlbnRAZG9kZHNmYW1pbHkudXM+ICjDsyDDrF/DrSk9w7PDsj0ow6xfw60gw7IpXG5cbihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImFwaS1jaGVja1wiKSwgcmVxdWlyZShcImFuZ3VsYXJcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wiYXBpLWNoZWNrXCIsIFwiYW5ndWxhclwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJuZ0Zvcm1seVwiXSA9IGZhY3RvcnkocmVxdWlyZShcImFwaS1jaGVja1wiKSwgcmVxdWlyZShcImFuZ3VsYXJcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIm5nRm9ybWx5XCJdID0gZmFjdG9yeShyb290W1wiYXBpQ2hlY2tcIl0sIHJvb3RbXCJhbmd1bGFyXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMTZfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xN19fKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcblxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cblxuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciBfaW50ZXJvcFJlcXVpcmUgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmpbXCJkZWZhdWx0XCJdIDogb2JqOyB9O1xuXG5cdHZhciBpbmRleCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGluZGV4O1xuXG4vKioqLyB9LFxuLyogMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNSkpO1xuXG5cdHZhciBmb3JtbHlBcGlDaGVjayA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDIpKTtcblxuXHR2YXIgZm9ybWx5RXJyb3JBbmRXYXJuaW5nc1VybFByZWZpeCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKTtcblxuXHR2YXIgZm9ybWx5VXNhYmlsaXR5ID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oNCkpO1xuXG5cdHZhciBmb3JtbHlDb25maWcgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXyg1KSk7XG5cblx0dmFyIGZvcm1seVZhbGlkYXRpb25NZXNzYWdlcyA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDYpKTtcblxuXHR2YXIgZm9ybWx5VXRpbCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDcpKTtcblxuXHR2YXIgZm9ybWx5V2FybiA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDgpKTtcblxuXHR2YXIgZm9ybWx5Q3VzdG9tVmFsaWRhdGlvbiA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDkpKTtcblxuXHR2YXIgZm9ybWx5RmllbGQgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxMCkpO1xuXG5cdHZhciBmb3JtbHlGb2N1cyA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSk7XG5cblx0dmFyIGZvcm1seUZvcm0gPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxMikpO1xuXG5cdHZhciBmb3JtbHlOZ01vZGVsQXR0cnNNYW5pcHVsYXRvciA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKSk7XG5cblx0dmFyIGZvcm1seUN1c3RvbVRhZ3MgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNCkpO1xuXG5cdHZhciBuZ01vZHVsZU5hbWUgPSBcImZvcm1seVwiO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gbmdNb2R1bGVOYW1lO1xuXG5cdHZhciBuZ01vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKG5nTW9kdWxlTmFtZSwgW10pO1xuXG5cdG5nTW9kdWxlLmNvbnN0YW50KFwiZm9ybWx5QXBpQ2hlY2tcIiwgZm9ybWx5QXBpQ2hlY2spO1xuXHRuZ01vZHVsZS5jb25zdGFudChcImZvcm1seUVycm9yQW5kV2FybmluZ3NVcmxQcmVmaXhcIiwgZm9ybWx5RXJyb3JBbmRXYXJuaW5nc1VybFByZWZpeCk7XG5cdG5nTW9kdWxlLmNvbnN0YW50KFwiZm9ybWx5VmVyc2lvblwiLCAoXCI2LjguMlwiKSk7IC8vIDwtLSB3ZWJwYWNrIHZhcmlhYmxlXG5cblx0bmdNb2R1bGUucHJvdmlkZXIoXCJmb3JtbHlVc2FiaWxpdHlcIiwgZm9ybWx5VXNhYmlsaXR5KTtcblx0bmdNb2R1bGUucHJvdmlkZXIoXCJmb3JtbHlDb25maWdcIiwgZm9ybWx5Q29uZmlnKTtcblxuXHRuZ01vZHVsZS5mYWN0b3J5KFwiZm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2VzXCIsIGZvcm1seVZhbGlkYXRpb25NZXNzYWdlcyk7XG5cdG5nTW9kdWxlLmZhY3RvcnkoXCJmb3JtbHlVdGlsXCIsIGZvcm1seVV0aWwpO1xuXHRuZ01vZHVsZS5mYWN0b3J5KFwiZm9ybWx5V2FyblwiLCBmb3JtbHlXYXJuKTtcblxuXHRuZ01vZHVsZS5kaXJlY3RpdmUoXCJmb3JtbHlDdXN0b21WYWxpZGF0aW9uXCIsIGZvcm1seUN1c3RvbVZhbGlkYXRpb24pO1xuXHRuZ01vZHVsZS5kaXJlY3RpdmUoXCJmb3JtbHlGaWVsZFwiLCBmb3JtbHlGaWVsZCk7XG5cdG5nTW9kdWxlLmRpcmVjdGl2ZShcImZvcm1seUZvY3VzXCIsIGZvcm1seUZvY3VzKTtcblx0bmdNb2R1bGUuZGlyZWN0aXZlKFwiZm9ybWx5Rm9ybVwiLCBmb3JtbHlGb3JtKTtcblxuXHRuZ01vZHVsZS5ydW4oZm9ybWx5TmdNb2RlbEF0dHJzTWFuaXB1bGF0b3IpO1xuXHRuZ01vZHVsZS5ydW4oZm9ybWx5Q3VzdG9tVGFncyk7XG5cbi8qKiovIH0sXG4vKiAyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblxuXHR2YXIgYXBpQ2hlY2tGYWN0b3J5ID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oMTYpKTtcblxuXHR2YXIgYXBpQ2hlY2sgPSBhcGlDaGVja0ZhY3Rvcnkoe1xuXHQgIG91dHB1dDoge1xuXHQgICAgcHJlZml4OiBcImFuZ3VsYXItZm9ybWx5OlwiLFxuXHQgICAgZG9jc0Jhc2VVcmw6IF9fd2VicGFja19yZXF1aXJlX18oMylcblx0ICB9XG5cdH0pO1xuXG5cdGZ1bmN0aW9uIHNoYXBlUmVxdWlyZWRJZk5vdChvdGhlclByb3BzLCBwcm9wQ2hlY2tlcikge1xuXHQgIGlmICghYW5ndWxhci5pc0FycmF5KG90aGVyUHJvcHMpKSB7XG5cdCAgICBvdGhlclByb3BzID0gW290aGVyUHJvcHNdO1xuXHQgIH1cblx0ICB2YXIgdHlwZSA9IFwic3BlY2lmaWVkIGlmIHRoZXNlIGFyZSBub3Qgc3BlY2lmaWVkOiBgXCIgKyBvdGhlclByb3BzLmpvaW4oXCIsIFwiKSArIFwiYCAob3RoZXJ3aXNlIGl0J3Mgb3B0aW9uYWwpXCI7XG5cdCAgZnVuY3Rpb24gc2hhcGVSZXF1aXJlZElmTm90RGVmaW5pdGlvbihwcm9wLCBwcm9wTmFtZSwgbG9jYXRpb24sIG9iaikge1xuXHQgICAgdmFyIHByb3BFeGlzdHMgPSBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KHByb3BOYW1lKTtcblx0ICAgIHZhciBvdGhlclByb3BzRXhpc3QgPSBvdGhlclByb3BzLnNvbWUoZnVuY3Rpb24gKG90aGVyUHJvcCkge1xuXHQgICAgICByZXR1cm4gb2JqICYmIG9iai5oYXNPd25Qcm9wZXJ0eShvdGhlclByb3ApO1xuXHQgICAgfSk7XG5cdCAgICBpZiAoIW90aGVyUHJvcHNFeGlzdCAmJiAhcHJvcEV4aXN0cykge1xuXHQgICAgICByZXR1cm4gYXBpQ2hlY2sudXRpbHMuZ2V0RXJyb3IocHJvcE5hbWUsIGxvY2F0aW9uLCB0eXBlKTtcblx0ICAgIH0gZWxzZSBpZiAocHJvcEV4aXN0cykge1xuXHQgICAgICByZXR1cm4gcHJvcENoZWNrZXIocHJvcCwgcHJvcE5hbWUsIGxvY2F0aW9uLCBvYmopO1xuXHQgICAgfVxuXHQgIH1cblx0ICBzaGFwZVJlcXVpcmVkSWZOb3REZWZpbml0aW9uLnR5cGUgPSB0eXBlO1xuXHQgIHJldHVybiBhcGlDaGVjay51dGlscy5jaGVja2VySGVscGVycy5zZXR1cENoZWNrZXIoc2hhcGVSZXF1aXJlZElmTm90RGVmaW5pdGlvbik7XG5cdH1cblxuXHR2YXIgZm9ybWx5RXhwcmVzc2lvbiA9IGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2suc3RyaW5nLCBhcGlDaGVjay5mdW5jXSk7XG5cdHZhciBzcGVjaWZ5V3JhcHBlclR5cGUgPSBhcGlDaGVjay5vbmVPZlR5cGUoW2FwaUNoZWNrLm9uZU9mKFtudWxsXSksIGFwaUNoZWNrLnR5cGVPckFycmF5T2YoYXBpQ2hlY2suc3RyaW5nKV0pO1xuXG5cdHZhciBhcGlDaGVja1Byb3BlcnR5ID0gYXBpQ2hlY2sub2JqZWN0T2YoYXBpQ2hlY2suZnVuYyk7XG5cblx0dmFyIGFwaUNoZWNrSW5zdGFuY2VQcm9wZXJ0eSA9IGFwaUNoZWNrLnNoYXBlLm9ubHlJZihcImFwaUNoZWNrXCIsIGFwaUNoZWNrLmZ1bmMud2l0aFByb3BlcnRpZXMoe1xuXHQgIHdhcm46IGFwaUNoZWNrLmZ1bmMsXG5cdCAgXCJ0aHJvd1wiOiBhcGlDaGVjay5mdW5jLFxuXHQgIHNoYXBlOiBhcGlDaGVjay5mdW5jXG5cdH0pKTtcblxuXHR2YXIgYXBpQ2hlY2tGdW5jdGlvblByb3BlcnR5ID0gYXBpQ2hlY2suc2hhcGUub25seUlmKFwiYXBpQ2hlY2tcIiwgYXBpQ2hlY2sub25lT2YoW1widGhyb3dcIiwgXCJ3YXJuXCJdKSk7XG5cblx0dmFyIGZvcm1seVdyYXBwZXJUeXBlID0gYXBpQ2hlY2suc2hhcGUoe1xuXHQgIG5hbWU6IHNoYXBlUmVxdWlyZWRJZk5vdChcInR5cGVzXCIsIGFwaUNoZWNrLnN0cmluZykub3B0aW9uYWwsXG5cdCAgdGVtcGxhdGU6IGFwaUNoZWNrLnNoYXBlLmlmTm90KFwidGVtcGxhdGVVcmxcIiwgYXBpQ2hlY2suc3RyaW5nKS5vcHRpb25hbCxcblx0ICB0ZW1wbGF0ZVVybDogYXBpQ2hlY2suc2hhcGUuaWZOb3QoXCJ0ZW1wbGF0ZVwiLCBhcGlDaGVjay5zdHJpbmcpLm9wdGlvbmFsLFxuXHQgIHR5cGVzOiBhcGlDaGVjay50eXBlT3JBcnJheU9mKGFwaUNoZWNrLnN0cmluZykub3B0aW9uYWwsXG5cdCAgb3ZlcndyaXRlT2s6IGFwaUNoZWNrLmJvb2wub3B0aW9uYWwsXG5cdCAgdmFsaWRhdGVPcHRpb25zOiBhcGlDaGVjay5mdW5jLm9wdGlvbmFsLFxuXHQgIGFwaUNoZWNrOiBhcGlDaGVja1Byb3BlcnR5Lm9wdGlvbmFsLFxuXHQgIGFwaUNoZWNrSW5zdGFuY2U6IGFwaUNoZWNrSW5zdGFuY2VQcm9wZXJ0eS5vcHRpb25hbCxcblx0ICBhcGlDaGVja0Z1bmN0aW9uOiBhcGlDaGVja0Z1bmN0aW9uUHJvcGVydHkub3B0aW9uYWwsXG5cdCAgYXBpQ2hlY2tPcHRpb25zOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWxcblx0fSkuc3RyaWN0O1xuXG5cdHZhciBleHByZXNzaW9uUHJvcGVydGllcyA9IGFwaUNoZWNrLm9iamVjdE9mKGFwaUNoZWNrLm9uZU9mVHlwZShbZm9ybWx5RXhwcmVzc2lvbiwgYXBpQ2hlY2suc2hhcGUoe1xuXHQgIGV4cHJlc3Npb246IGZvcm1seUV4cHJlc3Npb24sXG5cdCAgbWVzc2FnZTogZm9ybWx5RXhwcmVzc2lvbi5vcHRpb25hbFxuXHR9KS5zdHJpY3RdKSk7XG5cblx0dmFyIG1vZGVsQ2hlY2tlciA9IGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2sub25lT2YoW1wiZm9ybVN0YXRlXCJdKSwgYXBpQ2hlY2sub2JqZWN0XSk7XG5cblx0dmFyIGZpZWxkT3B0aW9uc0FwaVNoYXBlID0ge1xuXHQgICQkaGFzaEtleTogYXBpQ2hlY2suYW55Lm9wdGlvbmFsLFxuXHQgIHR5cGU6IGFwaUNoZWNrLnNoYXBlLmlmTm90KFtcInRlbXBsYXRlXCIsIFwidGVtcGxhdGVVcmxcIl0sIGFwaUNoZWNrLnN0cmluZykub3B0aW9uYWwsXG5cdCAgdGVtcGxhdGU6IGFwaUNoZWNrLnNoYXBlLmlmTm90KFtcInR5cGVcIiwgXCJ0ZW1wbGF0ZVVybFwiXSwgYXBpQ2hlY2sub25lT2ZUeXBlKFthcGlDaGVjay5zdHJpbmcsIGFwaUNoZWNrLmZ1bmNdKSkub3B0aW9uYWwsXG5cdCAgdGVtcGxhdGVVcmw6IGFwaUNoZWNrLnNoYXBlLmlmTm90KFtcInR5cGVcIiwgXCJ0ZW1wbGF0ZVwiXSwgYXBpQ2hlY2sub25lT2ZUeXBlKFthcGlDaGVjay5zdHJpbmcsIGFwaUNoZWNrLmZ1bmNdKSkub3B0aW9uYWwsXG5cdCAga2V5OiBhcGlDaGVjay5vbmVPZlR5cGUoW2FwaUNoZWNrLnN0cmluZywgYXBpQ2hlY2subnVtYmVyXSkub3B0aW9uYWwsXG5cdCAgbW9kZWw6IG1vZGVsQ2hlY2tlci5vcHRpb25hbCxcblx0ICBjbGFzc05hbWU6IGFwaUNoZWNrLnN0cmluZy5vcHRpb25hbCxcblx0ICBpZDogYXBpQ2hlY2suc3RyaW5nLm9wdGlvbmFsLFxuXHQgIGV4cHJlc3Npb25Qcm9wZXJ0aWVzOiBleHByZXNzaW9uUHJvcGVydGllcy5vcHRpb25hbCxcblx0ICBkYXRhOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgdGVtcGxhdGVPcHRpb25zOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgd3JhcHBlcjogc3BlY2lmeVdyYXBwZXJUeXBlLm9wdGlvbmFsLFxuXHQgIG1vZGVsT3B0aW9uczogYXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgdXBkYXRlT246IGFwaUNoZWNrLnN0cmluZy5vcHRpb25hbCxcblx0ICAgIGRlYm91bmNlOiBhcGlDaGVjay5vbmVPZlR5cGUoW2FwaUNoZWNrLm9iamVjdE9mKGFwaUNoZWNrLm51bWJlciksIGFwaUNoZWNrLm51bWJlcl0pLm9wdGlvbmFsLFxuXHQgICAgYWxsb3dJbnZhbGlkOiBhcGlDaGVjay5ib29sLm9wdGlvbmFsLFxuXHQgICAgZ2V0dGVyU2V0dGVyOiBhcGlDaGVjay5ib29sLm9wdGlvbmFsLFxuXHQgICAgdGltZXpvbmU6IGFwaUNoZWNrLnN0cmluZy5vcHRpb25hbFxuXHQgIH0pLm9wdGlvbmFsLFxuXHQgIHdhdGNoZXI6IGFwaUNoZWNrLnR5cGVPckFycmF5T2YoYXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgZXhwcmVzc2lvbjogZm9ybWx5RXhwcmVzc2lvbi5vcHRpb25hbCxcblx0ICAgIGxpc3RlbmVyOiBmb3JtbHlFeHByZXNzaW9uXG5cdCAgfSkpLm9wdGlvbmFsLFxuXHQgIHZhbGlkYXRvcnM6IGFwaUNoZWNrLm9iamVjdE9mKGFwaUNoZWNrLm9uZU9mVHlwZShbZm9ybWx5RXhwcmVzc2lvbiwgYXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgZXhwcmVzc2lvbjogZm9ybWx5RXhwcmVzc2lvbixcblx0ICAgIG1lc3NhZ2U6IGZvcm1seUV4cHJlc3Npb24ub3B0aW9uYWxcblx0ICB9KS5zdHJpY3RdKSkub3B0aW9uYWwsXG5cdCAgbm9Gb3JtQ29udHJvbDogYXBpQ2hlY2suYm9vbC5vcHRpb25hbCxcblx0ICBoaWRlOiBhcGlDaGVjay5ib29sLm9wdGlvbmFsLFxuXHQgIGhpZGVFeHByZXNzaW9uOiBmb3JtbHlFeHByZXNzaW9uLm9wdGlvbmFsLFxuXHQgIG5nTW9kZWxBdHRyczogYXBpQ2hlY2sub2JqZWN0T2YoYXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgZXhwcmVzc2lvbjogYXBpQ2hlY2suc2hhcGUuaWZOb3QoW1widmFsdWVcIiwgXCJhdHRyaWJ1dGVcIiwgXCJib3VuZFwiXSwgYXBpQ2hlY2suYW55KS5vcHRpb25hbCxcblx0ICAgIHZhbHVlOiBhcGlDaGVjay5zaGFwZS5pZk5vdChcImV4cHJlc3Npb25cIiwgYXBpQ2hlY2suYW55KS5vcHRpb25hbCxcblx0ICAgIGF0dHJpYnV0ZTogYXBpQ2hlY2suc2hhcGUuaWZOb3QoXCJleHByZXNzaW9uXCIsIGFwaUNoZWNrLmFueSkub3B0aW9uYWwsXG5cdCAgICBib3VuZDogYXBpQ2hlY2suc2hhcGUuaWZOb3QoXCJleHByZXNzaW9uXCIsIGFwaUNoZWNrLmFueSkub3B0aW9uYWxcblx0ICB9KS5zdHJpY3QpLm9wdGlvbmFsLFxuXHQgIGVsZW1lbnRBdHRyaWJ1dGVzOiBhcGlDaGVjay5vYmplY3RPZihhcGlDaGVjay5zdHJpbmcpLm9wdGlvbmFsLFxuXHQgIG9wdGlvbnNUeXBlczogYXBpQ2hlY2sudHlwZU9yQXJyYXlPZihhcGlDaGVjay5zdHJpbmcpLm9wdGlvbmFsLFxuXHQgIGxpbms6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgY29udHJvbGxlcjogYXBpQ2hlY2sub25lT2ZUeXBlKFthcGlDaGVjay5zdHJpbmcsIGFwaUNoZWNrLmZ1bmMsIGFwaUNoZWNrLmFycmF5XSkub3B0aW9uYWwsXG5cdCAgdmFsaWRhdGlvbjogYXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgc2hvdzogYXBpQ2hlY2sub25lT2ZUeXBlKFthcGlDaGVjay5ib29sLCBhcGlDaGVjay5vbmVPZihbbnVsbF0pXSkub3B0aW9uYWwsXG5cdCAgICBtZXNzYWdlczogYXBpQ2hlY2sub2JqZWN0T2YoZm9ybWx5RXhwcmVzc2lvbikub3B0aW9uYWwsXG5cdCAgICBlcnJvckV4aXN0c0FuZFNob3VsZEJlVmlzaWJsZTogYXBpQ2hlY2suYm9vbC5vcHRpb25hbFxuXHQgIH0pLm9wdGlvbmFsLFxuXHQgIGZvcm1Db250cm9sOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgdmFsdWU6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgcnVuRXhwcmVzc2lvbnM6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgcmVzZXRNb2RlbDogYXBpQ2hlY2suZnVuYy5vcHRpb25hbCxcblx0ICB1cGRhdGVJbml0aWFsVmFsdWU6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgaW5pdGlhbFZhbHVlOiBhcGlDaGVjay5hbnkub3B0aW9uYWwsXG5cdCAgZGVmYXVsdFZhbHVlOiBhcGlDaGVjay5hbnkub3B0aW9uYWxcblx0fTtcblxuXHR2YXIgZm9ybWx5RmllbGRPcHRpb25zID0gYXBpQ2hlY2suc2hhcGUoZmllbGRPcHRpb25zQXBpU2hhcGUpLnN0cmljdDtcblxuXHR2YXIgZm9ybU9wdGlvbnNBcGkgPSBhcGlDaGVjay5zaGFwZSh7XG5cdCAgZm9ybVN0YXRlOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgcmVzZXRNb2RlbDogYXBpQ2hlY2suZnVuYy5vcHRpb25hbCxcblx0ICB1cGRhdGVJbml0aWFsVmFsdWU6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgcmVtb3ZlQ2hyb21lQXV0b0NvbXBsZXRlOiBhcGlDaGVjay5ib29sLm9wdGlvbmFsXG5cdH0pLnN0cmljdDtcblxuXHR2YXIgZmllbGRHcm91cCA9IGFwaUNoZWNrLnNoYXBlKHtcblx0ICAkJGhhc2hLZXk6IGFwaUNoZWNrLmFueS5vcHRpb25hbCxcblx0ICAvLyBkYW5nZXIuIE5lc3RlZCBmaWVsZCBncm91cHMgd29udCBnZXQgYXBpLWNoZWNrZWQuLi5cblx0ICBmaWVsZEdyb3VwOiBhcGlDaGVjay5hcnJheU9mKGFwaUNoZWNrLm9uZU9mVHlwZShbZm9ybWx5RmllbGRPcHRpb25zLCBhcGlDaGVjay5vYmplY3RdKSksXG5cdCAgY2xhc3NOYW1lOiBhcGlDaGVjay5zdHJpbmcub3B0aW9uYWwsXG5cdCAgb3B0aW9uczogZm9ybU9wdGlvbnNBcGkub3B0aW9uYWwsXG5cdCAgaGlkZTogYXBpQ2hlY2suYm9vbC5vcHRpb25hbCxcblx0ICBoaWRlRXhwcmVzc2lvbjogZm9ybWx5RXhwcmVzc2lvbi5vcHRpb25hbCxcblx0ICBtb2RlbDogbW9kZWxDaGVja2VyLm9wdGlvbmFsLFxuXHQgIGZvcm06IGFwaUNoZWNrLm9iamVjdC5vcHRpb25hbCxcblx0ICBlbGVtZW50QXR0cmlidXRlczogYXBpQ2hlY2sub2JqZWN0T2YoYXBpQ2hlY2suc3RyaW5nKS5vcHRpb25hbFxuXHR9KS5zdHJpY3Q7XG5cblx0dmFyIHR5cGVPcHRpb25zRGVmYXVsdE9wdGlvbnMgPSBhbmd1bGFyLmNvcHkoZmllbGRPcHRpb25zQXBpU2hhcGUpO1xuXHR0eXBlT3B0aW9uc0RlZmF1bHRPcHRpb25zLmtleSA9IGFwaUNoZWNrLnN0cmluZy5vcHRpb25hbDtcblxuXHR2YXIgZm9ybWx5VHlwZU9wdGlvbnMgPSBhcGlDaGVjay5zaGFwZSh7XG5cdCAgbmFtZTogYXBpQ2hlY2suc3RyaW5nLFxuXHQgIHRlbXBsYXRlOiBhcGlDaGVjay5zaGFwZS5pZk5vdChcInRlbXBsYXRlVXJsXCIsIGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2suc3RyaW5nLCBhcGlDaGVjay5mdW5jXSkpLm9wdGlvbmFsLFxuXHQgIHRlbXBsYXRlVXJsOiBhcGlDaGVjay5zaGFwZS5pZk5vdChcInRlbXBsYXRlXCIsIGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2suc3RyaW5nLCBhcGlDaGVjay5mdW5jXSkpLm9wdGlvbmFsLFxuXHQgIGNvbnRyb2xsZXI6IGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2suZnVuYywgYXBpQ2hlY2suc3RyaW5nLCBhcGlDaGVjay5hcnJheV0pLm9wdGlvbmFsLFxuXHQgIGxpbms6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgZGVmYXVsdE9wdGlvbnM6IGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2suZnVuYywgYXBpQ2hlY2suc2hhcGUodHlwZU9wdGlvbnNEZWZhdWx0T3B0aW9ucyldKS5vcHRpb25hbCxcblx0ICBcImV4dGVuZHNcIjogYXBpQ2hlY2suc3RyaW5nLm9wdGlvbmFsLFxuXHQgIHdyYXBwZXI6IHNwZWNpZnlXcmFwcGVyVHlwZS5vcHRpb25hbCxcblx0ICBkYXRhOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgdmFsaWRhdGVPcHRpb25zOiBhcGlDaGVjay5mdW5jLm9wdGlvbmFsLFxuXHQgIGFwaUNoZWNrOiBhcGlDaGVja1Byb3BlcnR5Lm9wdGlvbmFsLFxuXHQgIGFwaUNoZWNrSW5zdGFuY2U6IGFwaUNoZWNrSW5zdGFuY2VQcm9wZXJ0eS5vcHRpb25hbCxcblx0ICBhcGlDaGVja0Z1bmN0aW9uOiBhcGlDaGVja0Z1bmN0aW9uUHJvcGVydHkub3B0aW9uYWwsXG5cdCAgYXBpQ2hlY2tPcHRpb25zOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgb3ZlcndyaXRlT2s6IGFwaUNoZWNrLmJvb2wub3B0aW9uYWxcblx0fSkuc3RyaWN0O1xuXHRhbmd1bGFyLmV4dGVuZChhcGlDaGVjaywge1xuXHQgIGZvcm1seVR5cGVPcHRpb25zOiBmb3JtbHlUeXBlT3B0aW9ucywgZm9ybWx5RmllbGRPcHRpb25zOiBmb3JtbHlGaWVsZE9wdGlvbnMsIGZvcm1seUV4cHJlc3Npb246IGZvcm1seUV4cHJlc3Npb24sIGZvcm1seVdyYXBwZXJUeXBlOiBmb3JtbHlXcmFwcGVyVHlwZSwgZmllbGRHcm91cDogZmllbGRHcm91cCwgZm9ybU9wdGlvbnNBcGk6IGZvcm1PcHRpb25zQXBpXG5cdH0pO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gYXBpQ2hlY2s7XG5cbi8qKiovIH0sXG4vKiAzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFwiaHR0cHM6Ly9naXRodWIuY29tL2Zvcm1seS1qcy9hbmd1bGFyLWZvcm1seS9ibG9iL1wiICsgKFwiNi44LjJcIikgKyBcIi9vdGhlci9FUlJPUlNfQU5EX1dBUk5JTkdTLm1kI1wiO1xuXG4vKioqLyB9LFxuLyogNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNSkpO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZm9ybWx5VXNhYmlsaXR5O1xuXG5cdC8vIEBuZ0luamVjdFxuXHRmdW5jdGlvbiBmb3JtbHlVc2FiaWxpdHkoZm9ybWx5QXBpQ2hlY2ssIGZvcm1seUVycm9yQW5kV2FybmluZ3NVcmxQcmVmaXgpIHtcblx0ICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgYW5ndWxhci5leHRlbmQodGhpcywge1xuXHQgICAgZ2V0Rm9ybWx5RXJyb3I6IGdldEZvcm1seUVycm9yLFxuXHQgICAgZ2V0RmllbGRFcnJvcjogZ2V0RmllbGRFcnJvcixcblx0ICAgIGNoZWNrV3JhcHBlcjogY2hlY2tXcmFwcGVyLFxuXHQgICAgY2hlY2tXcmFwcGVyVGVtcGxhdGU6IGNoZWNrV3JhcHBlclRlbXBsYXRlLFxuXHQgICAgJGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICByZXR1cm4gX3RoaXM7XG5cdCAgICB9XG5cdCAgfSk7XG5cblx0ICBmdW5jdGlvbiBnZXRGaWVsZEVycm9yKGVycm9ySW5mb1NsdWcsIG1lc3NhZ2UsIGZpZWxkKSB7XG5cdCAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcblx0ICAgICAgZmllbGQgPSBtZXNzYWdlO1xuXHQgICAgICBtZXNzYWdlID0gZXJyb3JJbmZvU2x1Zztcblx0ICAgICAgZXJyb3JJbmZvU2x1ZyA9IG51bGw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gbmV3IEVycm9yKGdldEVycm9yTWVzc2FnZShlcnJvckluZm9TbHVnLCBtZXNzYWdlKSArIChcIiBGaWVsZCBkZWZpbml0aW9uOiBcIiArIGFuZ3VsYXIudG9Kc29uKGZpZWxkKSkpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldEZvcm1seUVycm9yKGVycm9ySW5mb1NsdWcsIG1lc3NhZ2UpIHtcblx0ICAgIGlmICghbWVzc2FnZSkge1xuXHQgICAgICBtZXNzYWdlID0gZXJyb3JJbmZvU2x1Zztcblx0ICAgICAgZXJyb3JJbmZvU2x1ZyA9IG51bGw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gbmV3IEVycm9yKGdldEVycm9yTWVzc2FnZShlcnJvckluZm9TbHVnLCBtZXNzYWdlKSk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKGVycm9ySW5mb1NsdWcsIG1lc3NhZ2UpIHtcblx0ICAgIHZhciB1cmwgPSBcIlwiO1xuXHQgICAgaWYgKGVycm9ySW5mb1NsdWcgIT09IG51bGwpIHtcblx0ICAgICAgdXJsID0gXCJcIiArIGZvcm1seUVycm9yQW5kV2FybmluZ3NVcmxQcmVmaXggKyBcIlwiICsgZXJyb3JJbmZvU2x1Zztcblx0ICAgIH1cblx0ICAgIHJldHVybiBcIkZvcm1seSBFcnJvcjogXCIgKyBtZXNzYWdlICsgXCIuIFwiICsgdXJsO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGNoZWNrV3JhcHBlcih3cmFwcGVyKSB7XG5cdCAgICBmb3JtbHlBcGlDaGVja1tcInRocm93XCJdKGZvcm1seUFwaUNoZWNrLmZvcm1seVdyYXBwZXJUeXBlLCB3cmFwcGVyLCB7XG5cdCAgICAgIHByZWZpeDogXCJmb3JtbHlDb25maWcuc2V0V3JhcHBlclwiLFxuXHQgICAgICB1cmxTdWZmaXg6IFwic2V0d3JhcHBlci12YWxpZGF0aW9uLWZhaWxlZFwiXG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBjaGVja1dyYXBwZXJUZW1wbGF0ZSh0ZW1wbGF0ZSwgYWRkaXRpb25hbEluZm8pIHtcblx0ICAgIHZhciBmb3JtbHlUcmFuc2NsdWRlID0gXCI8Zm9ybWx5LXRyYW5zY2x1ZGU+PC9mb3JtbHktdHJhbnNjbHVkZT5cIjtcblx0ICAgIGlmICh0ZW1wbGF0ZS5pbmRleE9mKGZvcm1seVRyYW5zY2x1ZGUpID09PSAtMSkge1xuXHQgICAgICB0aHJvdyBnZXRGb3JtbHlFcnJvcihcIlRlbXBsYXRlIHdyYXBwZXIgdGVtcGxhdGVzIG11c3QgdXNlIFxcXCJcIiArIGZvcm1seVRyYW5zY2x1ZGUgKyBcIlxcXCIgc29tZXdoZXJlIGluIHRoZW0uIFwiICsgKFwiVGhpcyBvbmUgZG9lcyBub3QgaGF2ZSBcXFwiPGZvcm1seS10cmFuc2NsdWRlPjwvZm9ybWx5LXRyYW5zY2x1ZGU+XFxcIiBpbiBpdDogXCIgKyB0ZW1wbGF0ZSkgKyBcIlxcblwiICsgKFwiQWRkaXRpb25hbCBpbmZvcm1hdGlvbjogXCIgKyBKU09OLnN0cmluZ2lmeShhZGRpdGlvbmFsSW5mbykpKTtcblx0ICAgIH1cblx0ICB9XG5cdH1cblx0Zm9ybWx5VXNhYmlsaXR5LiRpbmplY3QgPSBbXCJmb3JtbHlBcGlDaGVja1wiLCBcImZvcm1seUVycm9yQW5kV2FybmluZ3NVcmxQcmVmaXhcIl07XG5cbi8qKiovIH0sXG4vKiA1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblxuXHR2YXIgYW5ndWxhciA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KSk7XG5cblx0dmFyIHV0aWxzID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oMTgpKTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZvcm1seUNvbmZpZztcblxuXHQvLyBAbmdJbmplY3Rcblx0ZnVuY3Rpb24gZm9ybWx5Q29uZmlnKGZvcm1seVVzYWJpbGl0eVByb3ZpZGVyLCBmb3JtbHlBcGlDaGVjaykge1xuXHQgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgdmFyIHR5cGVNYXAgPSB7fTtcblx0ICB2YXIgdGVtcGxhdGVXcmFwcGVyc01hcCA9IHt9O1xuXHQgIHZhciBkZWZhdWx0V3JhcHBlck5hbWUgPSBcImRlZmF1bHRcIjtcblx0ICB2YXIgX3RoaXMgPSB0aGlzO1xuXHQgIHZhciBnZXRFcnJvciA9IGZvcm1seVVzYWJpbGl0eVByb3ZpZGVyLmdldEZvcm1seUVycm9yO1xuXG5cdCAgYW5ndWxhci5leHRlbmQodGhpcywge1xuXHQgICAgc2V0VHlwZTogc2V0VHlwZSxcblx0ICAgIGdldFR5cGU6IGdldFR5cGUsXG5cdCAgICBzZXRXcmFwcGVyOiBzZXRXcmFwcGVyLFxuXHQgICAgZ2V0V3JhcHBlcjogZ2V0V3JhcHBlcixcblx0ICAgIGdldFdyYXBwZXJCeVR5cGU6IGdldFdyYXBwZXJCeVR5cGUsXG5cdCAgICByZW1vdmVXcmFwcGVyQnlOYW1lOiByZW1vdmVXcmFwcGVyQnlOYW1lLFxuXHQgICAgcmVtb3ZlV3JhcHBlcnNGb3JUeXBlOiByZW1vdmVXcmFwcGVyc0ZvclR5cGUsXG5cdCAgICBkaXNhYmxlV2FybmluZ3M6IGZhbHNlLFxuXHQgICAgZXh0cmFzOiB7XG5cdCAgICAgIGRpc2FibGVOZ01vZGVsQXR0cnNNYW5pcHVsYXRvcjogZmFsc2UsXG5cdCAgICAgIG5nTW9kZWxBdHRyc01hbmlwdWxhdG9yUHJlZmVyVW5ib3VuZDogZmFsc2UsXG5cdCAgICAgIHJlbW92ZUNocm9tZUF1dG9Db21wbGV0ZTogZmFsc2UsXG5cdCAgICAgIGRlZmF1bHRIaWRlRGlyZWN0aXZlOiBcIm5nLWlmXCIsXG5cdCAgICAgIGdldEZpZWxkSWQ6IG51bGxcblx0ICAgIH0sXG5cdCAgICB0ZW1wbGF0ZU1hbmlwdWxhdG9yczoge1xuXHQgICAgICBwcmVXcmFwcGVyOiBbXSxcblx0ICAgICAgcG9zdFdyYXBwZXI6IFtdXG5cdCAgICB9LFxuXHQgICAgJGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICByZXR1cm4gX3RoaXMyO1xuXHQgICAgfVxuXHQgIH0pO1xuXG5cdCAgZnVuY3Rpb24gc2V0VHlwZShvcHRpb25zKSB7XG5cdCAgICBpZiAoYW5ndWxhci5pc0FycmF5KG9wdGlvbnMpKSB7XG5cdCAgICAgIGFuZ3VsYXIuZm9yRWFjaChvcHRpb25zLCBzZXRUeXBlKTtcblx0ICAgIH0gZWxzZSBpZiAoYW5ndWxhci5pc09iamVjdChvcHRpb25zKSkge1xuXHQgICAgICBjaGVja1R5cGUob3B0aW9ucyk7XG5cdCAgICAgIGlmIChvcHRpb25zW1wiZXh0ZW5kc1wiXSkge1xuXHQgICAgICAgIGV4dGVuZFR5cGVPcHRpb25zKG9wdGlvbnMpO1xuXHQgICAgICB9XG5cdCAgICAgIHR5cGVNYXBbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnM7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aHJvdyBnZXRFcnJvcihcIllvdSBtdXN0IHByb3ZpZGUgYW4gb2JqZWN0IG9yIGFycmF5IGZvciBzZXRUeXBlLiBZb3UgcHJvdmlkZWQ6IFwiICsgSlNPTi5zdHJpbmdpZnkoYXJndW1lbnRzKSk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gY2hlY2tUeXBlKG9wdGlvbnMpIHtcblx0ICAgIGZvcm1seUFwaUNoZWNrW1widGhyb3dcIl0oZm9ybWx5QXBpQ2hlY2suZm9ybWx5VHlwZU9wdGlvbnMsIG9wdGlvbnMsIHtcblx0ICAgICAgcHJlZml4OiBcImZvcm1seUNvbmZpZy5zZXRUeXBlXCIsXG5cdCAgICAgIHVybDogXCJzZXR0eXBlLXZhbGlkYXRpb24tZmFpbGVkXCJcblx0ICAgIH0pO1xuXHQgICAgaWYgKCFvcHRpb25zLm92ZXJ3cml0ZU9rKSB7XG5cdCAgICAgIGNoZWNrT3ZlcndyaXRlKG9wdGlvbnMubmFtZSwgdHlwZU1hcCwgb3B0aW9ucywgXCJ0eXBlc1wiKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIG9wdGlvbnMub3ZlcndyaXRlT2sgPSB1bmRlZmluZWQ7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZXh0ZW5kVHlwZU9wdGlvbnMob3B0aW9ucykge1xuXHQgICAgdmFyIGV4dGVuZHNUeXBlID0gZ2V0VHlwZShvcHRpb25zW1wiZXh0ZW5kc1wiXSwgdHJ1ZSwgb3B0aW9ucyk7XG5cdCAgICBleHRlbmRUeXBlQ29udHJvbGxlckZ1bmN0aW9uKG9wdGlvbnMsIGV4dGVuZHNUeXBlKTtcblx0ICAgIGV4dGVuZFR5cGVMaW5rRnVuY3Rpb24ob3B0aW9ucywgZXh0ZW5kc1R5cGUpO1xuXHQgICAgZXh0ZW5kVHlwZVZhbGlkYXRlT3B0aW9uc0Z1bmN0aW9uKG9wdGlvbnMsIGV4dGVuZHNUeXBlKTtcblx0ICAgIGV4dGVuZFR5cGVEZWZhdWx0T3B0aW9ucyhvcHRpb25zLCBleHRlbmRzVHlwZSk7XG5cdCAgICB1dGlscy5yZXZlcnNlRGVlcE1lcmdlKG9wdGlvbnMsIGV4dGVuZHNUeXBlKTtcblx0ICAgIGV4dGVuZFRlbXBsYXRlKG9wdGlvbnMsIGV4dGVuZHNUeXBlKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBleHRlbmRUZW1wbGF0ZShvcHRpb25zLCBleHRlbmRzVHlwZSkge1xuXHQgICAgaWYgKG9wdGlvbnMudGVtcGxhdGUgJiYgZXh0ZW5kc1R5cGUudGVtcGxhdGVVcmwpIHtcblx0ICAgICAgZGVsZXRlIG9wdGlvbnMudGVtcGxhdGVVcmw7XG5cdCAgICB9IGVsc2UgaWYgKG9wdGlvbnMudGVtcGxhdGVVcmwgJiYgZXh0ZW5kc1R5cGUudGVtcGxhdGUpIHtcblx0ICAgICAgZGVsZXRlIG9wdGlvbnMudGVtcGxhdGU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZXh0ZW5kVHlwZUNvbnRyb2xsZXJGdW5jdGlvbihvcHRpb25zLCBleHRlbmRzVHlwZSkge1xuXHQgICAgdmFyIGV4dGVuZHNDdHJsID0gZXh0ZW5kc1R5cGUuY29udHJvbGxlcjtcblx0ICAgIGlmICghYW5ndWxhci5pc0RlZmluZWQoZXh0ZW5kc0N0cmwpKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICAgIHZhciBvcHRpb25zQ3RybCA9IG9wdGlvbnMuY29udHJvbGxlcjtcblx0ICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChvcHRpb25zQ3RybCkpIHtcblx0ICAgICAgb3B0aW9ucy5jb250cm9sbGVyID0gZnVuY3Rpb24gKCRzY29wZSwgJGNvbnRyb2xsZXIpIHtcblx0ICAgICAgICAkY29udHJvbGxlcihleHRlbmRzQ3RybCwgeyAkc2NvcGU6ICRzY29wZSB9KTtcblx0ICAgICAgICAkY29udHJvbGxlcihvcHRpb25zQ3RybCwgeyAkc2NvcGU6ICRzY29wZSB9KTtcblx0ICAgICAgfTtcblx0ICAgICAgb3B0aW9ucy5jb250cm9sbGVyLiRpbmplY3QgPSBbXCIkc2NvcGVcIiwgXCIkY29udHJvbGxlclwiXTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIG9wdGlvbnMuY29udHJvbGxlciA9IGV4dGVuZHNDdHJsO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGV4dGVuZFR5cGVMaW5rRnVuY3Rpb24ob3B0aW9ucywgZXh0ZW5kc1R5cGUpIHtcblx0ICAgIHZhciBleHRlbmRzRm4gPSBleHRlbmRzVHlwZS5saW5rO1xuXHQgICAgaWYgKCFhbmd1bGFyLmlzRGVmaW5lZChleHRlbmRzRm4pKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICAgIHZhciBvcHRpb25zRm4gPSBvcHRpb25zLmxpbms7XG5cdCAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQob3B0aW9uc0ZuKSkge1xuXHQgICAgICBvcHRpb25zLmxpbmsgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZXh0ZW5kc0ZuLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcblx0ICAgICAgICBvcHRpb25zRm4uYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuXHQgICAgICB9O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgb3B0aW9ucy5saW5rID0gZXh0ZW5kc0ZuO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGV4dGVuZFR5cGVWYWxpZGF0ZU9wdGlvbnNGdW5jdGlvbihvcHRpb25zLCBleHRlbmRzVHlwZSkge1xuXHQgICAgdmFyIGV4dGVuZHNGbiA9IGV4dGVuZHNUeXBlLnZhbGlkYXRlT3B0aW9ucztcblx0ICAgIGlmICghYW5ndWxhci5pc0RlZmluZWQoZXh0ZW5kc0ZuKSkge1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cdCAgICB2YXIgb3B0aW9uc0ZuID0gb3B0aW9ucy52YWxpZGF0ZU9wdGlvbnM7XG5cdCAgICB2YXIgb3JpZ2luYWxEZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnMuZGVmYXVsdE9wdGlvbnM7XG5cdCAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQob3B0aW9uc0ZuKSkge1xuXHQgICAgICBvcHRpb25zLnZhbGlkYXRlT3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9uc0ZuKG9wdGlvbnMpO1xuXHQgICAgICAgIHZhciBtZXJnZWRPcHRpb25zID0gYW5ndWxhci5jb3B5KG9wdGlvbnMpO1xuXHQgICAgICAgIHZhciBkZWZhdWx0T3B0aW9ucyA9IG9yaWdpbmFsRGVmYXVsdE9wdGlvbnM7XG5cdCAgICAgICAgaWYgKGRlZmF1bHRPcHRpb25zKSB7XG5cdCAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKGRlZmF1bHRPcHRpb25zKSkge1xuXHQgICAgICAgICAgICBkZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKG1lcmdlZE9wdGlvbnMpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgdXRpbHMucmV2ZXJzZURlZXBNZXJnZShtZXJnZWRPcHRpb25zLCBkZWZhdWx0T3B0aW9ucyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV4dGVuZHNGbihtZXJnZWRPcHRpb25zKTtcblx0ICAgICAgfTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIG9wdGlvbnMudmFsaWRhdGVPcHRpb25zID0gZXh0ZW5kc0ZuO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGV4dGVuZFR5cGVEZWZhdWx0T3B0aW9ucyhvcHRpb25zLCBleHRlbmRzVHlwZSkge1xuXHQgICAgdmFyIGV4dGVuZHNETyA9IGV4dGVuZHNUeXBlLmRlZmF1bHRPcHRpb25zO1xuXHQgICAgaWYgKCFhbmd1bGFyLmlzRGVmaW5lZChleHRlbmRzRE8pKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICAgIHZhciBvcHRpb25zRE8gPSBvcHRpb25zLmRlZmF1bHRPcHRpb25zO1xuXHQgICAgdmFyIG9wdGlvbnNET0lzRm4gPSBhbmd1bGFyLmlzRnVuY3Rpb24ob3B0aW9uc0RPKTtcblx0ICAgIHZhciBleHRlbmRzRE9Jc0ZuID0gYW5ndWxhci5pc0Z1bmN0aW9uKGV4dGVuZHNETyk7XG5cdCAgICBpZiAoZXh0ZW5kc0RPSXNGbikge1xuXHQgICAgICBvcHRpb25zLmRlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdE9wdGlvbnMob3B0aW9ucykge1xuXHQgICAgICAgIHZhciBleHRlbmRzRGVmYXVsdE9wdGlvbnMgPSBleHRlbmRzRE8ob3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIG1lcmdlZERlZmF1bHRPcHRpb25zID0ge307XG5cdCAgICAgICAgdXRpbHMucmV2ZXJzZURlZXBNZXJnZShtZXJnZWREZWZhdWx0T3B0aW9ucywgb3B0aW9ucywgZXh0ZW5kc0RlZmF1bHRPcHRpb25zKTtcblx0ICAgICAgICB2YXIgZXh0ZW5kZXJPcHRpb25zRGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zRE87XG5cdCAgICAgICAgaWYgKG9wdGlvbnNET0lzRm4pIHtcblx0ICAgICAgICAgIGV4dGVuZGVyT3B0aW9uc0RlZmF1bHRPcHRpb25zID0gZXh0ZW5kZXJPcHRpb25zRGVmYXVsdE9wdGlvbnMobWVyZ2VkRGVmYXVsdE9wdGlvbnMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB1dGlscy5yZXZlcnNlRGVlcE1lcmdlKGV4dGVuZHNEZWZhdWx0T3B0aW9ucywgZXh0ZW5kZXJPcHRpb25zRGVmYXVsdE9wdGlvbnMpO1xuXHQgICAgICAgIHJldHVybiBleHRlbmRzRGVmYXVsdE9wdGlvbnM7XG5cdCAgICAgIH07XG5cdCAgICB9IGVsc2UgaWYgKG9wdGlvbnNET0lzRm4pIHtcblx0ICAgICAgb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgbmV3RGVmYXVsdE9wdGlvbnMgPSB7fTtcblx0ICAgICAgICB1dGlscy5yZXZlcnNlRGVlcE1lcmdlKG5ld0RlZmF1bHRPcHRpb25zLCBvcHRpb25zLCBleHRlbmRzRE8pO1xuXHQgICAgICAgIHJldHVybiBvcHRpb25zRE8obmV3RGVmYXVsdE9wdGlvbnMpO1xuXHQgICAgICB9O1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldFR5cGUobmFtZSwgdGhyb3dFcnJvciwgZXJyb3JDb250ZXh0KSB7XG5cdCAgICBpZiAoIW5hbWUpIHtcblx0ICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcblx0ICAgIH1cblx0ICAgIHZhciB0eXBlID0gdHlwZU1hcFtuYW1lXTtcblx0ICAgIGlmICghdHlwZSAmJiB0aHJvd0Vycm9yID09PSB0cnVlKSB7XG5cdCAgICAgIHRocm93IGdldEVycm9yKFwiVGhlcmUgaXMgbm8gdHlwZSBieSB0aGUgbmFtZSBvZiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGVycm9yQ29udGV4dCkpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIHR5cGU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gc2V0V3JhcHBlcihfeCwgX3gyKSB7XG5cdCAgICB2YXIgX2FnYWluID0gdHJ1ZTtcblxuXHQgICAgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7XG5cdCAgICAgIF9hZ2FpbiA9IGZhbHNlO1xuXHQgICAgICB2YXIgb3B0aW9ucyA9IF94LFxuXHQgICAgICAgICAgbmFtZSA9IF94MjtcblxuXHQgICAgICBpZiAoYW5ndWxhci5pc0FycmF5KG9wdGlvbnMpKSB7XG5cdCAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwKGZ1bmN0aW9uICh3cmFwcGVyT3B0aW9ucykge1xuXHQgICAgICAgICAgcmV0dXJuIHNldFdyYXBwZXIod3JhcHBlck9wdGlvbnMpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9IGVsc2UgaWYgKGFuZ3VsYXIuaXNPYmplY3Qob3B0aW9ucykpIHtcblx0ICAgICAgICBvcHRpb25zLnR5cGVzID0gZ2V0T3B0aW9uc1R5cGVzKG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMubmFtZSA9IGdldE9wdGlvbnNOYW1lKG9wdGlvbnMsIG5hbWUpO1xuXHQgICAgICAgIGNoZWNrV3JhcHBlckFQSShvcHRpb25zKTtcblx0ICAgICAgICB0ZW1wbGF0ZVdyYXBwZXJzTWFwW29wdGlvbnMubmFtZV0gPSBvcHRpb25zO1xuXHQgICAgICAgIHJldHVybiBvcHRpb25zO1xuXHQgICAgICB9IGVsc2UgaWYgKGFuZ3VsYXIuaXNTdHJpbmcob3B0aW9ucykpIHtcblx0ICAgICAgICBfeCA9IHtcblx0ICAgICAgICAgIHRlbXBsYXRlOiBvcHRpb25zLFxuXHQgICAgICAgICAgbmFtZTogbmFtZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgX2FnYWluID0gdHJ1ZTtcblx0ICAgICAgICBjb250aW51ZSBfZnVuY3Rpb247XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICBmdW5jdGlvbiBnZXRPcHRpb25zVHlwZXMob3B0aW9ucykge1xuXHQgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcob3B0aW9ucy50eXBlcykpIHtcblx0ICAgICAgcmV0dXJuIFtvcHRpb25zLnR5cGVzXTtcblx0ICAgIH1cblx0ICAgIGlmICghYW5ndWxhci5pc0RlZmluZWQob3B0aW9ucy50eXBlcykpIHtcblx0ICAgICAgcmV0dXJuIFtdO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIG9wdGlvbnMudHlwZXM7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0T3B0aW9uc05hbWUob3B0aW9ucywgbmFtZSkge1xuXHQgICAgcmV0dXJuIG9wdGlvbnMubmFtZSB8fCBuYW1lIHx8IG9wdGlvbnMudHlwZXMuam9pbihcIiBcIikgfHwgZGVmYXVsdFdyYXBwZXJOYW1lO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGNoZWNrV3JhcHBlckFQSShvcHRpb25zKSB7XG5cdCAgICBmb3JtbHlVc2FiaWxpdHlQcm92aWRlci5jaGVja1dyYXBwZXIob3B0aW9ucyk7XG5cdCAgICBpZiAob3B0aW9ucy50ZW1wbGF0ZSkge1xuXHQgICAgICBmb3JtbHlVc2FiaWxpdHlQcm92aWRlci5jaGVja1dyYXBwZXJUZW1wbGF0ZShvcHRpb25zLnRlbXBsYXRlLCBvcHRpb25zKTtcblx0ICAgIH1cblx0ICAgIGlmICghb3B0aW9ucy5vdmVyd3JpdGVPaykge1xuXHQgICAgICBjaGVja092ZXJ3cml0ZShvcHRpb25zLm5hbWUsIHRlbXBsYXRlV3JhcHBlcnNNYXAsIG9wdGlvbnMsIFwidGVtcGxhdGVXcmFwcGVyc1wiKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGRlbGV0ZSBvcHRpb25zLm92ZXJ3cml0ZU9rO1xuXHQgICAgfVxuXHQgICAgY2hlY2tXcmFwcGVyVHlwZXMob3B0aW9ucyk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gY2hlY2tXcmFwcGVyVHlwZXMob3B0aW9ucykge1xuXHQgICAgdmFyIHNob3VsZFRocm93ID0gIWFuZ3VsYXIuaXNBcnJheShvcHRpb25zLnR5cGVzKSB8fCAhb3B0aW9ucy50eXBlcy5ldmVyeShhbmd1bGFyLmlzU3RyaW5nKTtcblx0ICAgIGlmIChzaG91bGRUaHJvdykge1xuXHQgICAgICB0aHJvdyBnZXRFcnJvcihcIkF0dGVtcHRlZCB0byBjcmVhdGUgYSB0ZW1wbGF0ZSB3cmFwcGVyIHdpdGggdHlwZXMgdGhhdCBpcyBub3QgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nc1wiKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBmdW5jdGlvbiBjaGVja092ZXJ3cml0ZShwcm9wZXJ0eSwgb2JqZWN0LCBuZXdWYWx1ZSwgb2JqZWN0TmFtZSkge1xuXHQgICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0ICAgICAgd2FybihbXCJBdHRlbXB0aW5nIHRvIG92ZXJ3cml0ZSBcIiArIHByb3BlcnR5ICsgXCIgb24gXCIgKyBvYmplY3ROYW1lICsgXCIgd2hpY2ggaXMgY3VycmVudGx5XCIsIFwiXCIgKyBKU09OLnN0cmluZ2lmeShvYmplY3RbcHJvcGVydHldKSArIFwiIHdpdGggXCIgKyBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSksIFwiVG8gc3VwcmVzcyB0aGlzIHdhcm5pbmcsIHNwZWNpZnkgdGhlIHByb3BlcnR5IFxcXCJvdmVyd3JpdGVPazogdHJ1ZVxcXCJcIl0uam9pbihcIiBcIikpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldFdyYXBwZXIobmFtZSkge1xuXHQgICAgcmV0dXJuIHRlbXBsYXRlV3JhcHBlcnNNYXBbbmFtZSB8fCBkZWZhdWx0V3JhcHBlck5hbWVdO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldFdyYXBwZXJCeVR5cGUodHlwZSkge1xuXHQgICAgLyoganNoaW50IG1heGNvbXBsZXhpdHk6NiAqL1xuXHQgICAgdmFyIHdyYXBwZXJzID0gW107XG5cdCAgICBmb3IgKHZhciBuYW1lIGluIHRlbXBsYXRlV3JhcHBlcnNNYXApIHtcblx0ICAgICAgaWYgKHRlbXBsYXRlV3JhcHBlcnNNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcblx0ICAgICAgICBpZiAodGVtcGxhdGVXcmFwcGVyc01hcFtuYW1lXS50eXBlcyAmJiB0ZW1wbGF0ZVdyYXBwZXJzTWFwW25hbWVdLnR5cGVzLmluZGV4T2YodHlwZSkgIT09IC0xKSB7XG5cdCAgICAgICAgICB3cmFwcGVycy5wdXNoKHRlbXBsYXRlV3JhcHBlcnNNYXBbbmFtZV0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIHdyYXBwZXJzO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIHJlbW92ZVdyYXBwZXJCeU5hbWUobmFtZSkge1xuXHQgICAgdmFyIHdyYXBwZXIgPSB0ZW1wbGF0ZVdyYXBwZXJzTWFwW25hbWVdO1xuXHQgICAgZGVsZXRlIHRlbXBsYXRlV3JhcHBlcnNNYXBbbmFtZV07XG5cdCAgICByZXR1cm4gd3JhcHBlcjtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiByZW1vdmVXcmFwcGVyc0ZvclR5cGUodHlwZSkge1xuXHQgICAgdmFyIHdyYXBwZXJzID0gZ2V0V3JhcHBlckJ5VHlwZSh0eXBlKTtcblx0ICAgIGlmICghd3JhcHBlcnMpIHtcblx0ICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXHQgICAgaWYgKCFhbmd1bGFyLmlzQXJyYXkod3JhcHBlcnMpKSB7XG5cdCAgICAgIHJldHVybiByZW1vdmVXcmFwcGVyQnlOYW1lKHdyYXBwZXJzLm5hbWUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgd3JhcHBlcnMuZm9yRWFjaChmdW5jdGlvbiAod3JhcHBlcikge1xuXHQgICAgICAgIHJldHVybiByZW1vdmVXcmFwcGVyQnlOYW1lKHdyYXBwZXIubmFtZSk7XG5cdCAgICAgIH0pO1xuXHQgICAgICByZXR1cm4gd3JhcHBlcnM7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gd2FybigpIHtcblx0ICAgIGlmICghX3RoaXMuZGlzYWJsZVdhcm5pbmdzKSB7XG5cdCAgICAgIGNvbnNvbGUud2Fybi5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpO1xuXHQgICAgfVxuXHQgIH1cblx0fVxuXHRmb3JtbHlDb25maWcuJGluamVjdCA9IFtcImZvcm1seVVzYWJpbGl0eVByb3ZpZGVyXCIsIFwiZm9ybWx5QXBpQ2hlY2tcIl07XG5cbi8qKiovIH0sXG4vKiA2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZvcm1seVZhbGlkYXRpb25NZXNzYWdlcztcblxuXHQvLyBAbmdJbmplY3Rcblx0ZnVuY3Rpb24gZm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2VzKCkge1xuXG5cdCAgdmFyIHZhbGlkYXRpb25NZXNzYWdlcyA9IHtcblx0ICAgIGFkZFRlbXBsYXRlT3B0aW9uVmFsdWVNZXNzYWdlOiBhZGRUZW1wbGF0ZU9wdGlvblZhbHVlTWVzc2FnZSxcblx0ICAgIGFkZFN0cmluZ01lc3NhZ2U6IGFkZFN0cmluZ01lc3NhZ2UsXG5cdCAgICBtZXNzYWdlczoge31cblx0ICB9O1xuXG5cdCAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlcztcblxuXHQgIGZ1bmN0aW9uIGFkZFRlbXBsYXRlT3B0aW9uVmFsdWVNZXNzYWdlKG5hbWUsIHByb3AsIHByZWZpeCwgc3VmZml4LCBhbHRlcm5hdGUpIHtcblx0ICAgIHZhbGlkYXRpb25NZXNzYWdlcy5tZXNzYWdlc1tuYW1lXSA9IHRlbXBsYXRlT3B0aW9uVmFsdWUocHJvcCwgcHJlZml4LCBzdWZmaXgsIGFsdGVybmF0ZSk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gYWRkU3RyaW5nTWVzc2FnZShuYW1lLCBzdHJpbmcpIHtcblx0ICAgIHZhbGlkYXRpb25NZXNzYWdlcy5tZXNzYWdlc1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgcmV0dXJuIHN0cmluZztcblx0ICAgIH07XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gdGVtcGxhdGVPcHRpb25WYWx1ZShwcm9wLCBwcmVmaXgsIHN1ZmZpeCwgYWx0ZXJuYXRlKSB7XG5cdCAgICByZXR1cm4gZnVuY3Rpb24gZ2V0VmFsaWRhdGlvbk1lc3NhZ2Uodmlld1ZhbHVlLCBtb2RlbFZhbHVlLCBzY29wZSkge1xuXHQgICAgICBpZiAoc2NvcGUub3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnNbcHJvcF0pIHtcblx0ICAgICAgICByZXR1cm4gXCJcIiArIHByZWZpeCArIFwiIFwiICsgc2NvcGUub3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnNbcHJvcF0gKyBcIiBcIiArIHN1ZmZpeDtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gYWx0ZXJuYXRlO1xuXHQgICAgICB9XG5cdCAgICB9O1xuXHQgIH1cblx0fVxuXG4vKioqLyB9LFxuLyogNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIHV0aWxzID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oMTgpKTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZvcm1seVV0aWw7XG5cblx0Ly8gQG5nSW5qZWN0XG5cdGZ1bmN0aW9uIGZvcm1seVV0aWwoKSB7XG5cdCAgcmV0dXJuIHV0aWxzO1xuXHR9XG5cbi8qKiovIH0sXG4vKiA4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX3RvQ29uc3VtYWJsZUFycmF5ID0gZnVuY3Rpb24gKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmb3JtbHlXYXJuO1xuXG5cdC8vIEBuZ0luamVjdFxuXHRmdW5jdGlvbiBmb3JtbHlXYXJuKGZvcm1seUNvbmZpZywgZm9ybWx5RXJyb3JBbmRXYXJuaW5nc1VybFByZWZpeCwgJGxvZykge1xuXHQgIHJldHVybiBmdW5jdGlvbiB3YXJuKCkge1xuXHQgICAgaWYgKCFmb3JtbHlDb25maWcuZGlzYWJsZVdhcm5pbmdzKSB7XG5cdCAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgdmFyIHdhcm5JbmZvU2x1ZyA9IGFyZ3Muc2hpZnQoKTtcblx0ICAgICAgYXJncy51bnNoaWZ0KFwiRm9ybWx5IFdhcm5pbmc6XCIpO1xuXHQgICAgICBhcmdzLnB1c2goXCJcIiArIGZvcm1seUVycm9yQW5kV2FybmluZ3NVcmxQcmVmaXggKyBcIlwiICsgd2FybkluZm9TbHVnKTtcblx0ICAgICAgJGxvZy53YXJuLmFwcGx5KCRsb2csIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7XG5cdCAgICB9XG5cdCAgfTtcblx0fVxuXHRmb3JtbHlXYXJuLiRpbmplY3QgPSBbXCJmb3JtbHlDb25maWdcIiwgXCJmb3JtbHlFcnJvckFuZFdhcm5pbmdzVXJsUHJlZml4XCIsIFwiJGxvZ1wiXTtcblxuLyoqKi8gfSxcbi8qIDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZm9ybWx5Q3VzdG9tVmFsaWRhdGlvbjtcblxuXHQvLyBAbmdJbmplY3Rcblx0ZnVuY3Rpb24gZm9ybWx5Q3VzdG9tVmFsaWRhdGlvbihmb3JtbHlVdGlsLCAkcSkge1xuXHQgIHJldHVybiB7XG5cdCAgICByZXN0cmljdDogXCJBXCIsXG5cdCAgICByZXF1aXJlOiBcIm5nTW9kZWxcIixcblx0ICAgIGxpbms6IGZ1bmN0aW9uIGZvcm1seUN1c3RvbVZhbGlkYXRpb25MaW5rKHNjb3BlLCBlbCwgYXR0cnMsIGN0cmwpIHtcblx0ICAgICAgdmFyIG9wdHMgPSBzY29wZS5vcHRpb25zO1xuXHQgICAgICBpZiAob3B0cy52YWxpZGF0b3JzKSB7XG5cdCAgICAgICAgY2hlY2tWYWxpZGF0b3JzKG9wdHMudmFsaWRhdG9ycyk7XG5cdCAgICAgIH1cblx0ICAgICAgb3B0cy52YWxpZGF0aW9uLm1lc3NhZ2VzID0gb3B0cy52YWxpZGF0aW9uLm1lc3NhZ2VzIHx8IHt9O1xuXHQgICAgICBhbmd1bGFyLmZvckVhY2gob3B0cy52YWxpZGF0aW9uLm1lc3NhZ2VzLCBmdW5jdGlvbiAobWVzc2FnZSwga2V5KSB7XG5cdCAgICAgICAgb3B0cy52YWxpZGF0aW9uLm1lc3NhZ2VzW2tleV0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICByZXR1cm4gZm9ybWx5VXRpbC5mb3JtbHlFdmFsKHNjb3BlLCBtZXNzYWdlLCBjdHJsLiRtb2RlbFZhbHVlLCBjdHJsLiR2aWV3VmFsdWUpO1xuXHQgICAgICAgIH07XG5cdCAgICAgIH0pO1xuXG5cdCAgICAgIHZhciB1c2VOZXdWYWxpZGF0b3JzQXBpID0gY3RybC5oYXNPd25Qcm9wZXJ0eShcIiR2YWxpZGF0b3JzXCIpICYmICFhdHRycy5oYXNPd25Qcm9wZXJ0eShcInVzZVBhcnNlcnNcIik7XG5cdCAgICAgIGFuZ3VsYXIuZm9yRWFjaChvcHRzLnZhbGlkYXRvcnMsIGZ1bmN0aW9uIGFkZFZhbGlkYXRvclRvUGlwZWxpbmUodmFsaWRhdG9yLCBuYW1lKSB7XG5cdCAgICAgICAgdmFyIG1lc3NhZ2UgPSB2YWxpZGF0b3IubWVzc2FnZTtcblx0ICAgICAgICBpZiAobWVzc2FnZSkge1xuXHQgICAgICAgICAgb3B0cy52YWxpZGF0aW9uLm1lc3NhZ2VzW25hbWVdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gZm9ybWx5VXRpbC5mb3JtbHlFdmFsKHNjb3BlLCBtZXNzYWdlLCBjdHJsLiRtb2RlbFZhbHVlLCBjdHJsLiR2aWV3VmFsdWUpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFsaWRhdG9yID0gYW5ndWxhci5pc09iamVjdCh2YWxpZGF0b3IpID8gdmFsaWRhdG9yLmV4cHJlc3Npb24gOiB2YWxpZGF0b3I7XG5cdCAgICAgICAgdmFyIGlzUG9zc2libHlBc3luYyA9ICFhbmd1bGFyLmlzU3RyaW5nKHZhbGlkYXRvcik7XG5cdCAgICAgICAgaWYgKHVzZU5ld1ZhbGlkYXRvcnNBcGkpIHtcblx0ICAgICAgICAgIHNldHVwV2l0aFZhbGlkYXRvcnMoKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgc2V0dXBXaXRoUGFyc2VycygpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGZ1bmN0aW9uIHNldHVwV2l0aFZhbGlkYXRvcnMoKSB7XG5cdCAgICAgICAgICB2YXIgdmFsaWRhdG9yQ29sbGVjdGlvbiA9IGlzUG9zc2libHlBc3luYyA/IFwiJGFzeW5jVmFsaWRhdG9yc1wiIDogXCIkdmFsaWRhdG9yc1wiO1xuXHQgICAgICAgICAgY3RybFt2YWxpZGF0b3JDb2xsZWN0aW9uXVtuYW1lXSA9IGZ1bmN0aW9uIGV2YWxWYWxpZGl0eShtb2RlbFZhbHVlLCB2aWV3VmFsdWUpIHtcblx0ICAgICAgICAgICAgdmFyIHZhbHVlID0gZm9ybWx5VXRpbC5mb3JtbHlFdmFsKHNjb3BlLCB2YWxpZGF0b3IsIG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSk7XG5cdCAgICAgICAgICAgIGlmIChpc1Bvc3NpYmx5QXN5bmMpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlTGlrZSh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlID8gJHEud2hlbih2YWx1ZSkgOiAkcS5yZWplY3QodmFsdWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBmdW5jdGlvbiBzZXR1cFdpdGhQYXJzZXJzKCkge1xuXHQgICAgICAgICAgdmFyIGluRmxpZ2h0VmFsaWRhdG9yID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgY3RybC4kcGFyc2Vycy51bnNoaWZ0KGZ1bmN0aW9uIGV2YWxWYWxpZGl0eU9mUGFyc2VyKHZpZXdWYWx1ZSkge1xuXHQgICAgICAgICAgICB2YXIgaXNWYWxpZCA9IGZvcm1seVV0aWwuZm9ybWx5RXZhbChzY29wZSwgdmFsaWRhdG9yLCBjdHJsLiRtb2RlbFZhbHVlLCB2aWV3VmFsdWUpO1xuXHQgICAgICAgICAgICBpZiAoaXNQcm9taXNlTGlrZShpc1ZhbGlkKSkge1xuXHQgICAgICAgICAgICAgIGN0cmwuJHBlbmRpbmcgPSBjdHJsLiRwZW5kaW5nIHx8IHt9O1xuXHQgICAgICAgICAgICAgIGN0cmwuJHBlbmRpbmdbbmFtZV0gPSB0cnVlO1xuXHQgICAgICAgICAgICAgIGluRmxpZ2h0VmFsaWRhdG9yID0gaXNWYWxpZDtcblx0ICAgICAgICAgICAgICBpc1ZhbGlkLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGluRmxpZ2h0VmFsaWRhdG9yID09PSBpc1ZhbGlkKSB7XG5cdCAgICAgICAgICAgICAgICAgIGN0cmwuJHNldFZhbGlkaXR5KG5hbWUsIHRydWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGluRmxpZ2h0VmFsaWRhdG9yID09PSBpc1ZhbGlkKSB7XG5cdCAgICAgICAgICAgICAgICAgIGN0cmwuJHNldFZhbGlkaXR5KG5hbWUsIGZhbHNlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICB9KVtcImZpbmFsbHlcIl0oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGN0cmwuJHBlbmRpbmcpLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgICBkZWxldGUgY3RybC4kcGVuZGluZztcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjdHJsLiRwZW5kaW5nW25hbWVdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIGN0cmwuJHNldFZhbGlkaXR5KG5hbWUsIGlzVmFsaWQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2aWV3VmFsdWU7XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICBmdW5jdGlvbiBpc1Byb21pc2VMaWtlKG9iaikge1xuXHQgICAgcmV0dXJuIG9iaiAmJiBhbmd1bGFyLmlzRnVuY3Rpb24ob2JqLnRoZW4pO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGNoZWNrVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG5cdCAgICB2YXIgYWxsb3dlZFByb3BlcnRpZXMgPSBbXCJleHByZXNzaW9uXCIsIFwibWVzc2FnZVwiXTtcblx0ICAgIHZhciB2YWxpZGF0b3JzV2l0aEV4dHJhUHJvcHMgPSB7fTtcblx0ICAgIGFuZ3VsYXIuZm9yRWFjaCh2YWxpZGF0b3JzLCBmdW5jdGlvbiAodmFsaWRhdG9yLCBuYW1lKSB7XG5cdCAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHZhbGlkYXRvcikpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIGV4dHJhUHJvcHMgPSBbXTtcblx0ICAgICAgYW5ndWxhci5mb3JFYWNoKHZhbGlkYXRvciwgZnVuY3Rpb24gKHYsIGtleSkge1xuXHQgICAgICAgIGlmIChhbGxvd2VkUHJvcGVydGllcy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG5cdCAgICAgICAgICBleHRyYVByb3BzLnB1c2goa2V5KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgICBpZiAoZXh0cmFQcm9wcy5sZW5ndGgpIHtcblx0ICAgICAgICB2YWxpZGF0b3JzV2l0aEV4dHJhUHJvcHNbbmFtZV0gPSBleHRyYVByb3BzO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIGlmIChPYmplY3Qua2V5cyh2YWxpZGF0b3JzV2l0aEV4dHJhUHJvcHMpLmxlbmd0aCkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoW1wiVmFsaWRhdG9ycyBhcmUgb25seSBhbGxvd2VkIHRvIGJlIGZ1bmN0aW9ucyBvciBvYmplY3RzIHRoYXQgaGF2ZSBcIiArIGFsbG93ZWRQcm9wZXJ0aWVzLmpvaW4oXCIsIFwiKSArIFwiLlwiLCBcIllvdSBwcm92aWRlZCBzb21lIGV4dHJhIHByb3BlcnRpZXM6IFwiICsgSlNPTi5zdHJpbmdpZnkodmFsaWRhdG9yc1dpdGhFeHRyYVByb3BzKV0uam9pbihcIiBcIikpO1xuXHQgICAgfVxuXHQgIH1cblx0fVxuXHRmb3JtbHlDdXN0b21WYWxpZGF0aW9uLiRpbmplY3QgPSBbXCJmb3JtbHlVdGlsXCIsIFwiJHFcIl07XG5cbi8qKiovIH0sXG4vKiAxMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNSkpO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZm9ybWx5RmllbGQ7XG5cblx0LyoqXG5cdCAqIEBuZ2RvYyBkaXJlY3RpdmVcblx0ICogQG5hbWUgZm9ybWx5RmllbGRcblx0ICogQHJlc3RyaWN0IEFFXG5cdCAqL1xuXHQvLyBAbmdJbmplY3Rcblx0ZnVuY3Rpb24gZm9ybWx5RmllbGQoJGh0dHAsICRxLCAkY29tcGlsZSwgJHRlbXBsYXRlQ2FjaGUsIGZvcm1seUNvbmZpZywgZm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2VzLCBmb3JtbHlBcGlDaGVjaywgZm9ybWx5VXRpbCwgZm9ybWx5VXNhYmlsaXR5LCBmb3JtbHlXYXJuKSB7XG5cdCAgdmFyIGFycmF5aWZ5ID0gZm9ybWx5VXRpbC5hcnJheWlmeTtcblxuXHQgIEZvcm1seUZpZWxkQ29udHJvbGxlci4kaW5qZWN0ID0gW1wiJHNjb3BlXCIsIFwiJHRpbWVvdXRcIiwgXCIkcGFyc2VcIiwgXCIkY29udHJvbGxlclwiXTtcblx0ICByZXR1cm4ge1xuXHQgICAgcmVzdHJpY3Q6IFwiQUVcIixcblx0ICAgIHRyYW5zY2x1ZGU6IHRydWUsXG5cdCAgICBzY29wZToge1xuXHQgICAgICBvcHRpb25zOiBcIj1cIixcblx0ICAgICAgbW9kZWw6IFwiPVwiLFxuXHQgICAgICBmb3JtSWQ6IFwiQFwiLCAvLyBUT0RPIHJlbW92ZSBmb3JtSWQgaW4gYSBicmVha2luZyByZWxlYXNlXG5cdCAgICAgIGluZGV4OiBcIj0/XCIsXG5cdCAgICAgIGZpZWxkczogXCI9P1wiLFxuXHQgICAgICBmb3JtU3RhdGU6IFwiPT9cIixcblx0ICAgICAgZm9ybTogXCI9P1wiIC8vIFRPRE8gcmVxdWlyZSBmb3JtIGluIGEgYnJlYWtpbmcgcmVsZWFzZVxuXHQgICAgfSxcblx0ICAgIGNvbnRyb2xsZXI6IEZvcm1seUZpZWxkQ29udHJvbGxlcixcblx0ICAgIGxpbms6IGZpZWxkTGlua1xuXHQgIH07XG5cblx0ICAvLyBAbmdJbmplY3Rcblx0ICBmdW5jdGlvbiBGb3JtbHlGaWVsZENvbnRyb2xsZXIoJHNjb3BlLCAkdGltZW91dCwgJHBhcnNlLCAkY29udHJvbGxlcikge1xuXHQgICAgLyoganNoaW50IG1heHN0YXRlbWVudHM6MzEgKi9cblx0ICAgIGlmICgkc2NvcGUub3B0aW9ucy5maWVsZEdyb3VwKSB7XG5cdCAgICAgIHNldHVwRmllbGRHcm91cCgpO1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cblx0ICAgIHZhciBmaWVsZFR5cGUgPSBnZXRGaWVsZFR5cGUoJHNjb3BlLm9wdGlvbnMpO1xuXHQgICAgc2ltcGxpZnlMaWZlKCRzY29wZS5vcHRpb25zKTtcblx0ICAgIG1lcmdlRmllbGRPcHRpb25zV2l0aFR5cGVEZWZhdWx0cygkc2NvcGUub3B0aW9ucywgZmllbGRUeXBlKTtcblx0ICAgIGV4dGVuZE9wdGlvbnNXaXRoRGVmYXVsdHMoJHNjb3BlLm9wdGlvbnMsICRzY29wZS5pbmRleCk7XG5cdCAgICBjaGVja0FwaSgkc2NvcGUub3B0aW9ucyk7XG5cdCAgICAvLyBzZXQgZmllbGQgaWQgdG8gbGluayBsYWJlbHMgYW5kIGZpZWxkc1xuXG5cdCAgICAvLyBpbml0YWxpemF0aW9uXG5cdCAgICBzZXRGaWVsZElkKCk7XG5cdCAgICBzZXREZWZhdWx0VmFsdWUoKTtcblx0ICAgIHNldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgcnVuRXhwcmVzc2lvbnMoKTtcblx0ICAgIGFkZE1vZGVsV2F0Y2hlcigkc2NvcGUsICRzY29wZS5vcHRpb25zKTtcblx0ICAgIGFkZFZhbGlkYXRpb25NZXNzYWdlcygkc2NvcGUub3B0aW9ucyk7XG5cdCAgICBpbnZva2VDb250cm9sbGVycygkc2NvcGUsICRzY29wZS5vcHRpb25zLCBmaWVsZFR5cGUpO1xuXG5cdCAgICAvLyBmdW5jdGlvbiBkZWZpbml0aW9uc1xuXHQgICAgZnVuY3Rpb24gcnVuRXhwcmVzc2lvbnMoKSB7XG5cdCAgICAgIC8vIG11c3QgcnVuIG9uIG5leHQgdGljayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZSBpcyBjb3JyZWN0LlxuXHQgICAgICAkdGltZW91dChmdW5jdGlvbiBydW5FeHByZXNzaW9uc09uTmV4dFRpY2soKSB7XG5cdCAgICAgICAgdmFyIGZpZWxkID0gJHNjb3BlLm9wdGlvbnM7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHZhbHVlR2V0dGVyU2V0dGVyKCk7XG5cdCAgICAgICAgYW5ndWxhci5mb3JFYWNoKGZpZWxkLmV4cHJlc3Npb25Qcm9wZXJ0aWVzLCBmdW5jdGlvbiBydW5FeHByZXNzaW9uKGV4cHJlc3Npb24sIHByb3ApIHtcblx0ICAgICAgICAgIHZhciBzZXR0ZXIgPSAkcGFyc2UocHJvcCkuYXNzaWduO1xuXHQgICAgICAgICAgdmFyIHByb21pc2UgPSAkcS53aGVuKGZvcm1seVV0aWwuZm9ybWx5RXZhbCgkc2NvcGUsIGV4cHJlc3Npb24sIGN1cnJlbnRWYWx1ZSkpO1xuXHQgICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIHNldEZpZWxkVmFsdWUodmFsdWUpIHtcblx0ICAgICAgICAgICAgc2V0dGVyKGZpZWxkLCB2YWx1ZSk7XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIHZhbHVlR2V0dGVyU2V0dGVyKG5ld1ZhbCkge1xuXHQgICAgICBpZiAoISRzY29wZS5tb2RlbCB8fCAhJHNjb3BlLm9wdGlvbnMua2V5KSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChuZXdWYWwpKSB7XG5cdCAgICAgICAgJHNjb3BlLm1vZGVsWyRzY29wZS5vcHRpb25zLmtleV0gPSBuZXdWYWw7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuICRzY29wZS5tb2RlbFskc2NvcGUub3B0aW9ucy5rZXldO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBzaW1wbGlmeUxpZmUob3B0aW9ucykge1xuXHQgICAgICAvLyBhZGQgYSBmZXcgZW1wdHkgb2JqZWN0cyAoaWYgdGhleSBkb24ndCBhbHJlYWR5IGV4aXN0KSBzbyB5b3UgZG9uJ3QgaGF2ZSB0byB1bmRlZmluZWQgY2hlY2sgZXZlcnl3aGVyZVxuXHQgICAgICBmb3JtbHlVdGlsLnJldmVyc2VEZWVwTWVyZ2Uob3B0aW9ucywge1xuXHQgICAgICAgIGRhdGE6IHt9LFxuXHQgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge30sXG5cdCAgICAgICAgdmFsaWRhdGlvbjoge31cblx0ICAgICAgfSk7XG5cdCAgICAgIC8vIGNyZWF0ZSAkc2NvcGUudG8gc28gdGVtcGxhdGUgYXV0aG9ycyBjYW4gcmVmZXJlbmNlIHRvIGluc3RlYWQgb2YgJHNjb3BlLm9wdGlvbnMudGVtcGxhdGVPcHRpb25zXG5cdCAgICAgICRzY29wZS50byA9ICRzY29wZS5vcHRpb25zLnRlbXBsYXRlT3B0aW9ucztcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gc2V0RmllbGRJZCgpIHtcblx0ICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihmb3JtbHlDb25maWcuZXh0cmFzLmdldEZpZWxkSWQpKSB7XG5cdCAgICAgICAgJHNjb3BlLmlkID0gZm9ybWx5Q29uZmlnLmV4dHJhcy5nZXRGaWVsZElkKCRzY29wZS5vcHRpb25zLCAkc2NvcGUubW9kZWwsICRzY29wZSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFyIGZvcm1OYW1lID0gJHNjb3BlLmZvcm0gJiYgJHNjb3BlLmZvcm0uJG5hbWUgfHwgJHNjb3BlLmZvcm1JZDtcblx0ICAgICAgICAkc2NvcGUuaWQgPSBmb3JtbHlVdGlsLmdldEZpZWxkSWQoZm9ybU5hbWUsICRzY29wZS5vcHRpb25zLCAkc2NvcGUuaW5kZXgpO1xuXHQgICAgICB9XG5cdCAgICAgICRzY29wZS5vcHRpb25zLmlkID0gJHNjb3BlLmlkO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWUoKSB7XG5cdCAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZCgkc2NvcGUub3B0aW9ucy5kZWZhdWx0VmFsdWUpICYmICFhbmd1bGFyLmlzRGVmaW5lZCgkc2NvcGUubW9kZWxbJHNjb3BlLm9wdGlvbnMua2V5XSkpIHtcblx0ICAgICAgICAkc2NvcGUubW9kZWxbJHNjb3BlLm9wdGlvbnMua2V5XSA9ICRzY29wZS5vcHRpb25zLmRlZmF1bHRWYWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBzZXRJbml0aWFsVmFsdWUoKSB7XG5cdCAgICAgICRzY29wZS5vcHRpb25zLmluaXRpYWxWYWx1ZSA9ICRzY29wZS5tb2RlbCAmJiAkc2NvcGUubW9kZWxbJHNjb3BlLm9wdGlvbnMua2V5XTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gbWVyZ2VGaWVsZE9wdGlvbnNXaXRoVHlwZURlZmF1bHRzKG9wdGlvbnMsIHR5cGUpIHtcblx0ICAgICAgaWYgKHR5cGUpIHtcblx0ICAgICAgICBtZXJnZU9wdGlvbnMob3B0aW9ucywgdHlwZS5kZWZhdWx0T3B0aW9ucyk7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHByb3Blck9yZGVyID0gYXJyYXlpZnkob3B0aW9ucy5vcHRpb25zVHlwZXMpLnJldmVyc2UoKTsgLy8gc28gdGhlIHJpZ2h0IHRoaW5ncyBhcmUgb3ZlcnJpZGRlblxuXHQgICAgICBhbmd1bGFyLmZvckVhY2gocHJvcGVyT3JkZXIsIGZ1bmN0aW9uICh0eXBlTmFtZSkge1xuXHQgICAgICAgIG1lcmdlT3B0aW9ucyhvcHRpb25zLCBmb3JtbHlDb25maWcuZ2V0VHlwZSh0eXBlTmFtZSwgdHJ1ZSwgb3B0aW9ucykuZGVmYXVsdE9wdGlvbnMpO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gbWVyZ2VPcHRpb25zKG9wdGlvbnMsIGV4dHJhT3B0aW9ucykge1xuXHQgICAgICBpZiAoZXh0cmFPcHRpb25zKSB7XG5cdCAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihleHRyYU9wdGlvbnMpKSB7XG5cdCAgICAgICAgICBleHRyYU9wdGlvbnMgPSBleHRyYU9wdGlvbnMob3B0aW9ucyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvcm1seVV0aWwucmV2ZXJzZURlZXBNZXJnZShvcHRpb25zLCBleHRyYU9wdGlvbnMpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGV4dGVuZE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucywgaW5kZXgpIHtcblx0ICAgICAgdmFyIGtleSA9IG9wdGlvbnMua2V5IHx8IGluZGV4IHx8IDA7XG5cdCAgICAgIGFuZ3VsYXIuZXh0ZW5kKG9wdGlvbnMsIHtcblx0ICAgICAgICAvLyBhdHRhY2ggdGhlIGtleSBpbiBjYXNlIHRoZSBmb3JtbHktZmllbGQgZGlyZWN0aXZlIGlzIHVzZWQgZGlyZWN0bHlcblx0ICAgICAgICBrZXk6IGtleSxcblx0ICAgICAgICB2YWx1ZTogdmFsdWVHZXR0ZXJTZXR0ZXIsXG5cdCAgICAgICAgcnVuRXhwcmVzc2lvbnM6IHJ1bkV4cHJlc3Npb25zLFxuXHQgICAgICAgIHJlc2V0TW9kZWw6IHJlc2V0TW9kZWwsXG5cdCAgICAgICAgdXBkYXRlSW5pdGlhbFZhbHVlOiB1cGRhdGVJbml0aWFsVmFsdWVcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIC8vIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uc1xuXHQgICAgZnVuY3Rpb24gYWRkTW9kZWxXYXRjaGVyKHNjb3BlLCBvcHRpb25zKSB7XG5cdCAgICAgIGlmIChvcHRpb25zLm1vZGVsKSB7XG5cdCAgICAgICAgc2NvcGUuJHdhdGNoKFwib3B0aW9ucy5tb2RlbFwiLCBydW5FeHByZXNzaW9ucywgdHJ1ZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gcmVzZXRNb2RlbCgpIHtcblx0ICAgICAgJHNjb3BlLm1vZGVsWyRzY29wZS5vcHRpb25zLmtleV0gPSAkc2NvcGUub3B0aW9ucy5pbml0aWFsVmFsdWU7XG5cdCAgICAgIGlmICgkc2NvcGUub3B0aW9ucy5mb3JtQ29udHJvbCkge1xuXHQgICAgICAgICRzY29wZS5vcHRpb25zLmZvcm1Db250cm9sLiRzZXRWaWV3VmFsdWUoJHNjb3BlLm1vZGVsWyRzY29wZS5vcHRpb25zLmtleV0pO1xuXHQgICAgICAgICRzY29wZS5vcHRpb25zLmZvcm1Db250cm9sLiRyZW5kZXIoKTtcblx0ICAgICAgICAkc2NvcGUub3B0aW9ucy5mb3JtQ29udHJvbC4kc2V0VW50b3VjaGVkKCk7XG5cdCAgICAgICAgJHNjb3BlLm9wdGlvbnMuZm9ybUNvbnRyb2wuJHNldFByaXN0aW5lKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gdXBkYXRlSW5pdGlhbFZhbHVlKCkge1xuXHQgICAgICAkc2NvcGUub3B0aW9ucy5pbml0aWFsVmFsdWUgPSAkc2NvcGUubW9kZWxbJHNjb3BlLm9wdGlvbnMua2V5XTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gYWRkVmFsaWRhdGlvbk1lc3NhZ2VzKG9wdGlvbnMpIHtcblx0ICAgICAgb3B0aW9ucy52YWxpZGF0aW9uLm1lc3NhZ2VzID0gb3B0aW9ucy52YWxpZGF0aW9uLm1lc3NhZ2VzIHx8IHt9O1xuXHQgICAgICBhbmd1bGFyLmZvckVhY2goZm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2VzLm1lc3NhZ2VzLCBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbkZvck1lc3NhZ2UoZXhwcmVzc2lvbiwgbmFtZSkge1xuXHQgICAgICAgIGlmICghb3B0aW9ucy52YWxpZGF0aW9uLm1lc3NhZ2VzW25hbWVdKSB7XG5cdCAgICAgICAgICBvcHRpb25zLnZhbGlkYXRpb24ubWVzc2FnZXNbbmFtZV0gPSBmdW5jdGlvbiBldmFsdWF0ZU1lc3NhZ2Uodmlld1ZhbHVlLCBtb2RlbFZhbHVlLCBzY29wZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZm9ybWx5VXRpbC5mb3JtbHlFdmFsKHNjb3BlLCBleHByZXNzaW9uLCBtb2RlbFZhbHVlLCB2aWV3VmFsdWUpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBpbnZva2VDb250cm9sbGVycyhzY29wZSkge1xuXHQgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07XG5cdCAgICAgIHZhciB0eXBlID0gYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1syXTtcblxuXHQgICAgICBhbmd1bGFyLmZvckVhY2goW3R5cGUuY29udHJvbGxlciwgb3B0aW9ucy5jb250cm9sbGVyXSwgZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHtcblx0ICAgICAgICBpZiAoY29udHJvbGxlcikge1xuXHQgICAgICAgICAgJGNvbnRyb2xsZXIoY29udHJvbGxlciwgeyAkc2NvcGU6IHNjb3BlIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIHNldHVwRmllbGRHcm91cCgpIHtcblx0ICAgICAgJHNjb3BlLm9wdGlvbnMub3B0aW9ucyA9ICRzY29wZS5vcHRpb25zLm9wdGlvbnMgfHwge307XG5cdCAgICAgICRzY29wZS5vcHRpb25zLm9wdGlvbnMuZm9ybVN0YXRlID0gJHNjb3BlLmZvcm1TdGF0ZTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICAvLyBsaW5rIGZ1bmN0aW9uXG5cdCAgZnVuY3Rpb24gZmllbGRMaW5rKHNjb3BlLCBlbCkge1xuXHQgICAgaWYgKHNjb3BlLm9wdGlvbnMuZmllbGRHcm91cCkge1xuXHQgICAgICBzZXRGaWVsZEdyb3VwVGVtcGxhdGUoKTtcblx0ICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXG5cdCAgICBhZGRBdHRyaWJ1dGVzKCk7XG5cdCAgICBhZGRDbGFzc2VzKCk7XG5cblx0ICAgIHZhciB0eXBlID0gZ2V0RmllbGRUeXBlKHNjb3BlLm9wdGlvbnMpO1xuXHQgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICB2YXIgdGh1c2x5ID0gdGhpcztcblx0ICAgIGdldEZpZWxkVGVtcGxhdGUoc2NvcGUub3B0aW9ucykudGhlbihydW5NYW5pcHVsYXRvcnMoZm9ybWx5Q29uZmlnLnRlbXBsYXRlTWFuaXB1bGF0b3JzLnByZVdyYXBwZXIpKS50aGVuKHRyYW5zY2x1ZGVJbldyYXBwZXJzKHNjb3BlLm9wdGlvbnMpKS50aGVuKHJ1bk1hbmlwdWxhdG9ycyhmb3JtbHlDb25maWcudGVtcGxhdGVNYW5pcHVsYXRvcnMucG9zdFdyYXBwZXIpKS50aGVuKHNldEVsZW1lbnRUZW1wbGF0ZSkudGhlbih3YXRjaEZvcm1Db250cm9sKS50aGVuKGNhbGxMaW5rRnVuY3Rpb25zKVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnJvcikge1xuXHQgICAgICBmb3JtbHlXYXJuKFwidGhlcmUtd2FzLWEtcHJvYmxlbS1zZXR0aW5nLXRoZS10ZW1wbGF0ZS1mb3ItdGhpcy1maWVsZFwiLCBcIlRoZXJlIHdhcyBhIHByb2JsZW0gc2V0dGluZyB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZmllbGQgXCIsIHNjb3BlLm9wdGlvbnMsIGVycm9yKTtcblx0ICAgIH0pO1xuXG5cdCAgICBmdW5jdGlvbiBzZXRGaWVsZEdyb3VwVGVtcGxhdGUoKSB7XG5cdCAgICAgIGNoZWNrRmllbGRHcm91cEFwaShzY29wZS5vcHRpb25zKTtcblx0ICAgICAgZWwuYWRkQ2xhc3MoXCJmb3JtbHktZmllbGQtZ3JvdXBcIik7XG5cdCAgICAgIHZhciBleHRyYUF0dHJpYnV0ZXMgPSBcIlwiO1xuXHQgICAgICBpZiAoc2NvcGUub3B0aW9ucy5lbGVtZW50QXR0cmlidXRlcykge1xuXHQgICAgICAgIGV4dHJhQXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKHNjb3BlLm9wdGlvbnMuZWxlbWVudEF0dHJpYnV0ZXMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdCAgICAgICAgICByZXR1cm4gXCJcIiArIGtleSArIFwiPVxcXCJcIiArIHNjb3BlLm9wdGlvbnMuZWxlbWVudEF0dHJpYnV0ZXNba2V5XSArIFwiXFxcIlwiO1xuXHQgICAgICAgIH0pLmpvaW4oXCIgXCIpO1xuXHQgICAgICB9XG5cdCAgICAgIHNldEVsZW1lbnRUZW1wbGF0ZShcIlxcbiAgICAgICAgICA8Zm9ybWx5LWZvcm0gbW9kZWw9XFxcIm1vZGVsXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzPVxcXCJvcHRpb25zLmZpZWxkR3JvdXBcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPVxcXCJvcHRpb25zLm9wdGlvbnNcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICBmb3JtPVxcXCJvcHRpb25zLmZvcm1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiXCIgKyBzY29wZS5vcHRpb25zLmNsYXNzTmFtZSArIFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgXCIgKyBleHRyYUF0dHJpYnV0ZXMgKyBcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgaXMtZmllbGQtZ3JvdXA+XFxuICAgICAgICAgIDwvZm9ybWx5LWZvcm0+XFxuICAgICAgICBcIik7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGFkZEF0dHJpYnV0ZXMoKSB7XG5cdCAgICAgIGlmIChzY29wZS5vcHRpb25zLmVsZW1lbnRBdHRyaWJ1dGVzKSB7XG5cdCAgICAgICAgZWwuYXR0cihzY29wZS5vcHRpb25zLmVsZW1lbnRBdHRyaWJ1dGVzKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBhZGRDbGFzc2VzKCkge1xuXHQgICAgICBpZiAoc2NvcGUub3B0aW9ucy5jbGFzc05hbWUpIHtcblx0ICAgICAgICBlbC5hZGRDbGFzcyhzY29wZS5vcHRpb25zLmNsYXNzTmFtZSk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHNjb3BlLm9wdGlvbnMudHlwZSkge1xuXHQgICAgICAgIGVsLmFkZENsYXNzKFwiZm9ybWx5LWZpZWxkLVwiICsgc2NvcGUub3B0aW9ucy50eXBlKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBzZXRFbGVtZW50VGVtcGxhdGUodGVtcGxhdGVTdHJpbmcpIHtcblx0ICAgICAgZWwuaHRtbChhc0h0bWwodGVtcGxhdGVTdHJpbmcpKTtcblx0ICAgICAgJGNvbXBpbGUoZWwuY29udGVudHMoKSkoc2NvcGUpO1xuXHQgICAgICByZXR1cm4gdGVtcGxhdGVTdHJpbmc7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIHdhdGNoRm9ybUNvbnRyb2wodGVtcGxhdGVTdHJpbmcpIHtcblx0ICAgICAgdmFyIHN0b3BXYXRjaGluZ0ZpZWxkID0gYW5ndWxhci5ub29wO1xuXHQgICAgICB2YXIgc3RvcFdhdGNoaW5nU2hvd0Vycm9yID0gYW5ndWxhci5ub29wO1xuXHQgICAgICBpZiAoc2NvcGUub3B0aW9ucy5ub0Zvcm1Db250cm9sKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIHZhciB0ZW1wbGF0ZUVsID0gYW5ndWxhci5lbGVtZW50KFwiPGRpdj5cIiArIHRlbXBsYXRlU3RyaW5nICsgXCI8L2Rpdj5cIik7XG5cdCAgICAgIHZhciBuZ01vZGVsTm9kZSA9IHRlbXBsYXRlRWxbMF0ucXVlcnlTZWxlY3RvcihcIltuZy1tb2RlbF0sW2RhdGEtbmctbW9kZWxdXCIpO1xuXHQgICAgICBpZiAobmdNb2RlbE5vZGUgJiYgbmdNb2RlbE5vZGUuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSkge1xuXHQgICAgICAgIHdhdGNoRmllbGROYW1lT3JFeGlzdGVuY2UobmdNb2RlbE5vZGUuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSk7XG5cdCAgICAgIH1cblxuXHQgICAgICBmdW5jdGlvbiB3YXRjaEZpZWxkTmFtZU9yRXhpc3RlbmNlKG5hbWUpIHtcblx0ICAgICAgICB2YXIgbmFtZUV4cHJlc3Npb25SZWdleCA9IC9cXHtcXHsoLio/KX19Lztcblx0ICAgICAgICB2YXIgbmFtZUV4cHJlc3Npb24gPSBuYW1lRXhwcmVzc2lvblJlZ2V4LmV4ZWMobmFtZSk7XG5cdCAgICAgICAgaWYgKG5hbWVFeHByZXNzaW9uKSB7XG5cdCAgICAgICAgICB3YXRjaEZpZWxkTmFtZShuYW1lRXhwcmVzc2lvblsxXSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHdhdGNoRmllbGRFeGlzdGVuY2UobmFtZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gd2F0Y2hGaWVsZE5hbWUoZXhwcmVzc2lvbikge1xuXHQgICAgICAgIHNjb3BlLiR3YXRjaChleHByZXNzaW9uLCBmdW5jdGlvbiBvbmVGaWVsZE5hbWVDaGFuZ2UobmFtZSkge1xuXHQgICAgICAgICAgaWYgKG5hbWUpIHtcblx0ICAgICAgICAgICAgc3RvcFdhdGNoaW5nRmllbGQoKTtcblx0ICAgICAgICAgICAgd2F0Y2hGaWVsZEV4aXN0ZW5jZShuYW1lKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIHdhdGNoRmllbGRFeGlzdGVuY2UobmFtZSkge1xuXHQgICAgICAgIHN0b3BXYXRjaGluZ0ZpZWxkID0gc2NvcGUuJHdhdGNoKFwiZm9ybVtcXFwiXCIgKyBuYW1lICsgXCJcXFwiXVwiLCBmdW5jdGlvbiBmb3JtQ29udHJvbENoYW5nZShmb3JtQ29udHJvbCkge1xuXHQgICAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG5cdCAgICAgICAgICAgIHNjb3BlLmZjID0gZm9ybUNvbnRyb2w7IC8vIHNob3J0Y3V0IGZvciB0ZW1wbGF0ZSBhdXRob3JzXG5cdCAgICAgICAgICAgIHNjb3BlLm9wdGlvbnMuZm9ybUNvbnRyb2wgPSBmb3JtQ29udHJvbDtcblx0ICAgICAgICAgICAgc3RvcFdhdGNoaW5nU2hvd0Vycm9yKCk7XG5cdCAgICAgICAgICAgIGFkZFNob3dNZXNzYWdlc1dhdGNoZXIoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIGFkZFNob3dNZXNzYWdlc1dhdGNoZXIoKSB7XG5cdCAgICAgICAgc3RvcFdhdGNoaW5nU2hvd0Vycm9yID0gc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIHdhdGNoU2hvd1ZhbGlkYXRpb25DaGFuZ2UoKSB7XG5cdCAgICAgICAgICB2YXIgY3VzdG9tRXhwcmVzc2lvbiA9IGZvcm1seUNvbmZpZy5leHRyYXMuZXJyb3JFeGlzdHNBbmRTaG91bGRCZVZpc2libGVFeHByZXNzaW9uO1xuXHQgICAgICAgICAgdmFyIG9wdGlvbnMgPSBzY29wZS5vcHRpb25zO1xuXHQgICAgICAgICAgdmFyIGZjID0gc2NvcGUuZmM7XG5cblx0ICAgICAgICAgIGlmICghZmMuJGludmFsaWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy52YWxpZGF0aW9uLnNob3cgPT09IFwiYm9vbGVhblwiKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnZhbGlkYXRpb24uc2hvdztcblx0ICAgICAgICAgIH0gZWxzZSBpZiAoY3VzdG9tRXhwcmVzc2lvbikge1xuXHQgICAgICAgICAgICByZXR1cm4gZm9ybWx5VXRpbC5mb3JtbHlFdmFsKHNjb3BlLCBjdXN0b21FeHByZXNzaW9uLCBmYy4kbW9kZWxWYWx1ZSwgZmMuJHZpZXdWYWx1ZSk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgbm9Ub3VjaGVkQnV0RGlydHkgPSBhbmd1bGFyLmlzVW5kZWZpbmVkKGZjLiR0b3VjaGVkKSAmJiBmYy4kZGlydHk7XG5cdCAgICAgICAgICAgIHJldHVybiBzY29wZS5mYy4kdG91Y2hlZCB8fCBub1RvdWNoZWRCdXREaXJ0eTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9LCBmdW5jdGlvbiBvblNob3dWYWxpZGF0aW9uQ2hhbmdlKHNob3cpIHtcblx0ICAgICAgICAgIHNjb3BlLm9wdGlvbnMudmFsaWRhdGlvbi5lcnJvckV4aXN0c0FuZFNob3VsZEJlVmlzaWJsZSA9IHNob3c7XG5cdCAgICAgICAgICBzY29wZS5zaG93RXJyb3IgPSBzaG93OyAvLyBzaG9ydGN1dCBmb3IgdGVtcGxhdGUgYXV0aG9yc1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGNhbGxMaW5rRnVuY3Rpb25zKCkge1xuXHQgICAgICBpZiAodHlwZSAmJiB0eXBlLmxpbmspIHtcblx0ICAgICAgICB0eXBlLmxpbmsuYXBwbHkodGh1c2x5LCBhcmdzKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoc2NvcGUub3B0aW9ucy5saW5rKSB7XG5cdCAgICAgICAgc2NvcGUub3B0aW9ucy5saW5rLmFwcGx5KHRodXNseSwgYXJncyk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gcnVuTWFuaXB1bGF0b3JzKG1hbmlwdWxhdG9ycykge1xuXHQgICAgICByZXR1cm4gZnVuY3Rpb24gcnVuTWFuaXB1bGF0b3JzT25UZW1wbGF0ZSh0ZW1wbGF0ZSkge1xuXHQgICAgICAgIHZhciBjaGFpbiA9ICRxLndoZW4odGVtcGxhdGUpO1xuXHQgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChtYW5pcHVsYXRvcnMsIGZ1bmN0aW9uIChtYW5pcHVsYXRvcikge1xuXHQgICAgICAgICAgY2hhaW4gPSBjaGFpbi50aGVuKGZ1bmN0aW9uICh0ZW1wbGF0ZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gJHEud2hlbihtYW5pcHVsYXRvcih0ZW1wbGF0ZSwgc2NvcGUub3B0aW9ucywgc2NvcGUpKS50aGVuKGZ1bmN0aW9uIChuZXdUZW1wbGF0ZSkge1xuXHQgICAgICAgICAgICAgIHJldHVybiBhbmd1bGFyLmlzU3RyaW5nKG5ld1RlbXBsYXRlKSA/IG5ld1RlbXBsYXRlIDogYXNIdG1sKG5ld1RlbXBsYXRlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gY2hhaW47XG5cdCAgICAgIH07XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgLy8gc3RhdGVsZXNzIHV0aWwgZnVuY3Rpb25zXG5cdCAgZnVuY3Rpb24gYXNIdG1sKGVsKSB7XG5cdCAgICB2YXIgd3JhcHBlciA9IGFuZ3VsYXIuZWxlbWVudChcIjxhPjwvYT5cIik7XG5cdCAgICByZXR1cm4gd3JhcHBlci5hcHBlbmQoZWwpLmh0bWwoKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBnZXRGaWVsZFR5cGUob3B0aW9ucykge1xuXHQgICAgcmV0dXJuIG9wdGlvbnMudHlwZSAmJiBmb3JtbHlDb25maWcuZ2V0VHlwZShvcHRpb25zLnR5cGUpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldEZpZWxkVGVtcGxhdGUob3B0aW9ucykge1xuXHQgICAgZnVuY3Rpb24gZnJvbU9wdGlvbnNPclR5cGUoa2V5LCB0eXBlKSB7XG5cdCAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChvcHRpb25zW2tleV0pKSB7XG5cdCAgICAgICAgcmV0dXJuIG9wdGlvbnNba2V5XTtcblx0ICAgICAgfSBlbHNlIGlmICh0eXBlICYmIGFuZ3VsYXIuaXNEZWZpbmVkKHR5cGVba2V5XSkpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZVtrZXldO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHZhciB0eXBlID0gZm9ybWx5Q29uZmlnLmdldFR5cGUob3B0aW9ucy50eXBlLCB0cnVlLCBvcHRpb25zKTtcblx0ICAgIHZhciB0ZW1wbGF0ZSA9IGZyb21PcHRpb25zT3JUeXBlKFwidGVtcGxhdGVcIiwgdHlwZSk7XG5cdCAgICB2YXIgdGVtcGxhdGVVcmwgPSBmcm9tT3B0aW9uc09yVHlwZShcInRlbXBsYXRlVXJsXCIsIHR5cGUpO1xuXHQgICAgaWYgKGFuZ3VsYXIuaXNVbmRlZmluZWQodGVtcGxhdGUpICYmICF0ZW1wbGF0ZVVybCkge1xuXHQgICAgICB0aHJvdyBmb3JtbHlVc2FiaWxpdHkuZ2V0RmllbGRFcnJvcihcInR5cGUtdHlwZS1oYXMtbm8tdGVtcGxhdGVcIiwgXCJUeXBlICdcIiArIG9wdGlvbnMudHlwZSArIFwiJyBoYXMgbm90IHRlbXBsYXRlLiBPbiBlbGVtZW50OlwiLCBvcHRpb25zKTtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIGdldFRlbXBsYXRlKHRlbXBsYXRlVXJsIHx8IHRlbXBsYXRlLCBhbmd1bGFyLmlzVW5kZWZpbmVkKHRlbXBsYXRlKSwgb3B0aW9ucyk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0VGVtcGxhdGUodGVtcGxhdGUsIGlzVXJsLCBvcHRpb25zKSB7XG5cdCAgICB2YXIgdGVtcGxhdGVQcm9taXNlID0gdW5kZWZpbmVkO1xuXHQgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbih0ZW1wbGF0ZSkpIHtcblx0ICAgICAgdGVtcGxhdGVQcm9taXNlID0gJHEud2hlbih0ZW1wbGF0ZShvcHRpb25zKSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0ZW1wbGF0ZVByb21pc2UgPSAkcS53aGVuKHRlbXBsYXRlKTtcblx0ICAgIH1cblxuXHQgICAgaWYgKCFpc1VybCkge1xuXHQgICAgICByZXR1cm4gdGVtcGxhdGVQcm9taXNlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdmFyIF9yZXQgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBodHRwT3B0aW9ucyA9IHsgY2FjaGU6ICR0ZW1wbGF0ZUNhY2hlIH07XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgIHY6IHRlbXBsYXRlUHJvbWlzZS50aGVuKGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICRodHRwLmdldCh1cmwsIGh0dHBPcHRpb25zKTtcblx0ICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuXHQgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiBoYW5kbGVFcnJvckdldHRpbmdBVGVtcGxhdGUoZXJyb3IpIHtcblx0ICAgICAgICAgICAgZm9ybWx5V2FybihcInByb2JsZW0tbG9hZGluZy10ZW1wbGF0ZS1mb3ItdGVtcGxhdGV1cmxcIiwgXCJQcm9ibGVtIGxvYWRpbmcgdGVtcGxhdGUgZm9yIFwiICsgdGVtcGxhdGUsIGVycm9yKTtcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgfTtcblx0ICAgICAgfSkoKTtcblxuXHQgICAgICBpZiAodHlwZW9mIF9yZXQgPT09IFwib2JqZWN0XCIpIHtcblx0ICAgICAgICByZXR1cm4gX3JldC52O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gdHJhbnNjbHVkZUluV3JhcHBlcnMob3B0aW9ucykge1xuXHQgICAgdmFyIHdyYXBwZXIgPSBnZXRXcmFwcGVyT3B0aW9uKG9wdGlvbnMpO1xuXG5cdCAgICByZXR1cm4gZnVuY3Rpb24gdHJhbnNjbHVkZVRlbXBsYXRlKHRlbXBsYXRlKSB7XG5cdCAgICAgIGlmICghd3JhcHBlci5sZW5ndGgpIHtcblx0ICAgICAgICByZXR1cm4gJHEud2hlbih0ZW1wbGF0ZSk7XG5cdCAgICAgIH1cblxuXHQgICAgICB3cmFwcGVyLmZvckVhY2goZnVuY3Rpb24gKHdyYXBwZXIpIHtcblx0ICAgICAgICBmb3JtbHlVc2FiaWxpdHkuY2hlY2tXcmFwcGVyKHdyYXBwZXIsIG9wdGlvbnMpO1xuXHQgICAgICAgIHdyYXBwZXIudmFsaWRhdGVPcHRpb25zICYmIHdyYXBwZXIudmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuXHQgICAgICAgIHJ1bkFwaUNoZWNrKHdyYXBwZXIsIG9wdGlvbnMpO1xuXHQgICAgICB9KTtcblx0ICAgICAgdmFyIHByb21pc2VzID0gd3JhcHBlci5tYXAoZnVuY3Rpb24gKHcpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0VGVtcGxhdGUody50ZW1wbGF0ZSB8fCB3LnRlbXBsYXRlVXJsLCAhdy50ZW1wbGF0ZSk7XG5cdCAgICAgIH0pO1xuXHQgICAgICByZXR1cm4gJHEuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uICh3cmFwcGVyc1RlbXBsYXRlcykge1xuXHQgICAgICAgIHdyYXBwZXJzVGVtcGxhdGVzLmZvckVhY2goZnVuY3Rpb24gKHdyYXBwZXJUZW1wbGF0ZSwgaW5kZXgpIHtcblx0ICAgICAgICAgIGZvcm1seVVzYWJpbGl0eS5jaGVja1dyYXBwZXJUZW1wbGF0ZSh3cmFwcGVyVGVtcGxhdGUsIHdyYXBwZXJbaW5kZXhdKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB3cmFwcGVyc1RlbXBsYXRlcy5yZXZlcnNlKCk7IC8vIHdyYXBwZXIgMCBpcyB3cmFwcGVkIGluIHdyYXBwZXIgMSBhbmQgc28gb24uLi5cblx0ICAgICAgICB2YXIgdG90YWxXcmFwcGVyID0gd3JhcHBlcnNUZW1wbGF0ZXMuc2hpZnQoKTtcblx0ICAgICAgICB3cmFwcGVyc1RlbXBsYXRlcy5mb3JFYWNoKGZ1bmN0aW9uICh3cmFwcGVyVGVtcGxhdGUpIHtcblx0ICAgICAgICAgIHRvdGFsV3JhcHBlciA9IGRvVHJhbnNjbHVzaW9uKHRvdGFsV3JhcHBlciwgd3JhcHBlclRlbXBsYXRlKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gZG9UcmFuc2NsdXNpb24odG90YWxXcmFwcGVyLCB0ZW1wbGF0ZSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBkb1RyYW5zY2x1c2lvbih3cmFwcGVyLCB0ZW1wbGF0ZSkge1xuXHQgICAgdmFyIHN1cGVyV3JhcHBlciA9IGFuZ3VsYXIuZWxlbWVudChcIjxhPjwvYT5cIik7IC8vIHRoaXMgYWxsb3dzIHBlb3BsZSBub3QgaGF2ZSB0byBoYXZlIGEgc2luZ2xlIHJvb3QgaW4gd3JhcHBlcnNcblx0ICAgIHN1cGVyV3JhcHBlci5hcHBlbmQod3JhcHBlcik7XG5cdCAgICB2YXIgdHJhbnNjbHVkZUVsID0gc3VwZXJXcmFwcGVyLmZpbmQoXCJmb3JtbHktdHJhbnNjbHVkZVwiKTtcblx0ICAgIGlmICghdHJhbnNjbHVkZUVsLmxlbmd0aCkge1xuXHQgICAgICAvL3RyeSBpdCB1c2luZyBvdXIgY3VzdG9tIGZpbmQgZnVuY3Rpb25cblx0ICAgICAgdHJhbnNjbHVkZUVsID0gZm9ybWx5VXRpbC5maW5kQnlOb2RlTmFtZShzdXBlcldyYXBwZXIsIFwiZm9ybWx5LXRyYW5zY2x1ZGVcIik7XG5cdCAgICB9XG5cdCAgICB0cmFuc2NsdWRlRWwucmVwbGFjZVdpdGgodGVtcGxhdGUpO1xuXHQgICAgcmV0dXJuIHN1cGVyV3JhcHBlci5odG1sKCk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0V3JhcHBlck9wdGlvbihvcHRpb25zKSB7XG5cdCAgICB2YXIgd3JhcHBlciA9IG9wdGlvbnMud3JhcHBlcjtcblx0ICAgIC8vIGV4cGxpY2l0IG51bGwgbWVhbnMgbm8gd3JhcHBlclxuXHQgICAgaWYgKHdyYXBwZXIgPT09IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIFtdO1xuXHQgICAgfVxuXG5cdCAgICAvLyBub3RoaW5nIHNwZWNpZmllZCBtZWFucyB1c2UgdGhlIGRlZmF1bHQgd3JhcHBlciBmb3IgdGhlIHR5cGVcblx0ICAgIGlmICghd3JhcHBlcikge1xuXHQgICAgICAvLyBnZXQgYWxsIHdyYXBwZXJzIHRoYXQgc3BlY2lmeSB0aGV5IGFwcGx5IHRvIHRoaXMgdHlwZVxuXHQgICAgICB3cmFwcGVyID0gYXJyYXlpZnkoZm9ybWx5Q29uZmlnLmdldFdyYXBwZXJCeVR5cGUob3B0aW9ucy50eXBlKSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB3cmFwcGVyID0gYXJyYXlpZnkod3JhcHBlcikubWFwKGZvcm1seUNvbmZpZy5nZXRXcmFwcGVyKTtcblx0ICAgIH1cblxuXHQgICAgLy8gZ2V0IGFsbCB3cmFwcGVycyBmb3IgdGhhdCB0aGlzIHR5cGUgc3BlY2lmaWVkIHRoYXQgaXQgdXNlcy5cblx0ICAgIHZhciB0eXBlID0gZm9ybWx5Q29uZmlnLmdldFR5cGUob3B0aW9ucy50eXBlLCB0cnVlLCBvcHRpb25zKTtcblx0ICAgIGlmICh0eXBlICYmIHR5cGUud3JhcHBlcikge1xuXHQgICAgICB2YXIgdHlwZVdyYXBwZXJzID0gYXJyYXlpZnkodHlwZS53cmFwcGVyKS5tYXAoZm9ybWx5Q29uZmlnLmdldFdyYXBwZXIpO1xuXHQgICAgICB3cmFwcGVyID0gd3JhcHBlci5jb25jYXQodHlwZVdyYXBwZXJzKTtcblx0ICAgIH1cblxuXHQgICAgLy8gYWRkIHRoZSBkZWZhdWx0IHdyYXBwZXIgbGFzdFxuXHQgICAgdmFyIGRlZmF1bHRXcmFwcGVyID0gZm9ybWx5Q29uZmlnLmdldFdyYXBwZXIoKTtcblx0ICAgIGlmIChkZWZhdWx0V3JhcHBlcikge1xuXHQgICAgICB3cmFwcGVyLnB1c2goZGVmYXVsdFdyYXBwZXIpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHdyYXBwZXI7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gY2hlY2tBcGkob3B0aW9ucykge1xuXHQgICAgZm9ybWx5QXBpQ2hlY2tbXCJ0aHJvd1wiXShmb3JtbHlBcGlDaGVjay5mb3JtbHlGaWVsZE9wdGlvbnMsIG9wdGlvbnMsIHtcblx0ICAgICAgcHJlZml4OiBcImZvcm1seS1maWVsZCBkaXJlY3RpdmVcIixcblx0ICAgICAgdXJsOiBcImZvcm1seS1maWVsZC1kaXJlY3RpdmUtdmFsaWRhdGlvbi1mYWlsZWRcIlxuXHQgICAgfSk7XG5cdCAgICAvLyB2YWxpZGF0ZSB3aXRoIHRoZSB0eXBlXG5cdCAgICB2YXIgdHlwZSA9IG9wdGlvbnMudHlwZSAmJiBmb3JtbHlDb25maWcuZ2V0VHlwZShvcHRpb25zLnR5cGUpO1xuXHQgICAgaWYgKHR5cGUpIHtcblx0ICAgICAgaWYgKHR5cGUudmFsaWRhdGVPcHRpb25zKSB7XG5cdCAgICAgICAgdHlwZS52YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cdCAgICAgIH1cblx0ICAgICAgcnVuQXBpQ2hlY2sodHlwZSwgb3B0aW9ucyk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gY2hlY2tGaWVsZEdyb3VwQXBpKG9wdGlvbnMpIHtcblx0ICAgIGZvcm1seUFwaUNoZWNrW1widGhyb3dcIl0oZm9ybWx5QXBpQ2hlY2suZmllbGRHcm91cCwgb3B0aW9ucywge1xuXHQgICAgICBwcmVmaXg6IFwiZm9ybWx5LWZpZWxkIGRpcmVjdGl2ZVwiLFxuXHQgICAgICB1cmw6IFwiZm9ybWx5LWZpZWxkLWRpcmVjdGl2ZS12YWxpZGF0aW9uLWZhaWxlZFwiXG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBydW5BcGlDaGVjayhfcmVmLCBvcHRpb25zKSB7XG5cdCAgICB2YXIgYXBpQ2hlY2sgPSBfcmVmLmFwaUNoZWNrO1xuXHQgICAgdmFyIGFwaUNoZWNrSW5zdGFuY2UgPSBfcmVmLmFwaUNoZWNrSW5zdGFuY2U7XG5cdCAgICB2YXIgYXBpQ2hlY2tGdW5jdGlvbiA9IF9yZWYuYXBpQ2hlY2tGdW5jdGlvbjtcblx0ICAgIHZhciBhcGlDaGVja09wdGlvbnMgPSBfcmVmLmFwaUNoZWNrT3B0aW9ucztcblxuXHQgICAgaWYgKCFhcGlDaGVjaykge1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cdCAgICB2YXIgaW5zdGFuY2UgPSBhcGlDaGVja0luc3RhbmNlIHx8IGZvcm1seUFwaUNoZWNrO1xuXHQgICAgdmFyIGZuID0gYXBpQ2hlY2tGdW5jdGlvbiB8fCBcIndhcm5cIjtcblx0ICAgIHZhciBzaGFwZSA9IGluc3RhbmNlLnNoYXBlKGFwaUNoZWNrKTtcblx0ICAgIGluc3RhbmNlW2ZuXShzaGFwZSwgb3B0aW9ucywgYXBpQ2hlY2tPcHRpb25zIHx8IHtcblx0ICAgICAgcHJlZml4OiBcImZvcm1seS1maWVsZCBcIiArIG5hbWUsXG5cdCAgICAgIHVybDogZm9ybWx5QXBpQ2hlY2suY29uZmlnLm91dHB1dC5kb2NzQmFzZVVybCArIFwiZm9ybWx5LWZpZWxkLXR5cGUtYXBpY2hlY2stZmFpbGVkXCJcblx0ICAgIH0pO1xuXHQgIH1cblx0fVxuXHRmb3JtbHlGaWVsZC4kaW5qZWN0ID0gW1wiJGh0dHBcIiwgXCIkcVwiLCBcIiRjb21waWxlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCJmb3JtbHlDb25maWdcIiwgXCJmb3JtbHlWYWxpZGF0aW9uTWVzc2FnZXNcIiwgXCJmb3JtbHlBcGlDaGVja1wiLCBcImZvcm1seVV0aWxcIiwgXCJmb3JtbHlVc2FiaWxpdHlcIiwgXCJmb3JtbHlXYXJuXCJdO1xuXG4vKioqLyB9LFxuLyogMTEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZm9ybWx5Rm9jdXM7XG5cblx0Ly8gQG5nSW5qZWN0XG5cdGZ1bmN0aW9uIGZvcm1seUZvY3VzKCR0aW1lb3V0LCAkZG9jdW1lbnQpIHtcblx0ICAvKiBqc2hpbnQgLVcwNTIgKi9cblx0ICByZXR1cm4ge1xuXHQgICAgcmVzdHJpY3Q6IFwiQVwiLFxuXHQgICAgbGluazogZnVuY3Rpb24gZm9ybWx5Rm9jdXNMaW5rKHNjb3BlLCBlbGVtZW50LCBhdHRycykge1xuXHQgICAgICB2YXIgcHJldmlvdXNFbCA9IG51bGw7XG5cdCAgICAgIHZhciBlbCA9IGVsZW1lbnRbMF07XG5cdCAgICAgIHZhciBkb2MgPSAkZG9jdW1lbnRbMF07XG5cdCAgICAgIGF0dHJzLiRvYnNlcnZlKFwiZm9ybWx5Rm9jdXNcIiwgZnVuY3Rpb24gcmVzcG9uZFRvRm9jdXNFeHByZXNzaW9uQ2hhbmdlKHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuXHQgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24gc2V0RWxlbWVudEZvY3VzKCkge1xuXHQgICAgICAgICAgICBwcmV2aW91c0VsID0gZG9jLmFjdGl2ZUVsZW1lbnQ7XG5cdCAgICAgICAgICAgIGVsLmZvY3VzKCk7XG5cdCAgICAgICAgICB9LCB+IH5hdHRycy5mb2N1c1dhaXQpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuXHQgICAgICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ID09PSBlbCkge1xuXHQgICAgICAgICAgICBlbC5ibHVyKCk7XG5cdCAgICAgICAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShcInJlZm9jdXNcIikgJiYgcHJldmlvdXNFbCkge1xuXHQgICAgICAgICAgICAgIHByZXZpb3VzRWwuZm9jdXMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICB9XG5cdCAgfTtcblx0fVxuXHRmb3JtbHlGb2N1cy4kaW5qZWN0ID0gW1wiJHRpbWVvdXRcIiwgXCIkZG9jdW1lbnRcIl07XG5cbi8qKiovIH0sXG4vKiAxMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIF90b0NvbnN1bWFibGVBcnJheSA9IGZ1bmN0aW9uIChhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnIyW2ldID0gYXJyW2ldOyByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9O1xuXG5cdHZhciBfc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNSkpO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZm9ybWx5Rm9ybTtcblxuXHQvKipcblx0ICogQG5nZG9jIGRpcmVjdGl2ZVxuXHQgKiBAbmFtZSBmb3JtbHlGb3JtXG5cdCAqIEByZXN0cmljdCBFXG5cdCAqL1xuXHQvLyBAbmdJbmplY3Rcblx0ZnVuY3Rpb24gZm9ybWx5Rm9ybShmb3JtbHlVc2FiaWxpdHksICRwYXJzZSwgZm9ybWx5QXBpQ2hlY2ssIGZvcm1seUNvbmZpZykge1xuXHQgIHZhciBjdXJyZW50Rm9ybUlkID0gMTtcblx0ICByZXR1cm4ge1xuXHQgICAgcmVzdHJpY3Q6IFwiRVwiLFxuXHQgICAgdGVtcGxhdGU6IGZ1bmN0aW9uIGZvcm1seUZvcm1HZXRUZW1wbGF0ZShlbCwgYXR0cnMpIHtcblx0ICAgICAgLyoganNoaW50IC1XMDMzICovIC8vIHRoaXMgYmVjYXVzZSBqc2hpbnQgaXMgYnJva2VuIEkgZ3Vlc3MuLi5cblx0ICAgICAgdmFyIHJvb3RFbCA9IGdldFJvb3RFbCgpO1xuXHQgICAgICB2YXIgZmllbGRSb290RWwgPSBnZXRGaWVsZFJvb3RFbCgpO1xuXHQgICAgICB2YXIgZm9ybUlkID0gXCJmb3JtbHlfXCIgKyBjdXJyZW50Rm9ybUlkKys7XG5cdCAgICAgIHZhciBwYXJlbnRGb3JtQXR0cmlidXRlcyA9IFwiXCI7XG5cdCAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShcImlzRmllbGRHcm91cFwiKSAmJiBlbC5wYXJlbnQoKS5wYXJlbnQoKS5oYXNDbGFzcyhcImZvcm1seVwiKSkge1xuXHQgICAgICAgIHBhcmVudEZvcm1BdHRyaWJ1dGVzID0gY29weUF0dHJpYnV0ZXMoZWwucGFyZW50KCkucGFyZW50KClbMF0uYXR0cmlidXRlcyk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIFwiXFxuICAgICAgICA8XCIgKyByb290RWwgKyBcIiBjbGFzcz1cXFwiZm9ybWx5XFxcIlxcbiAgICAgICAgICAgICAgICAgbmFtZT1cXFwiXCIgKyBnZXRGb3JtTmFtZSgpICsgXCJcXFwiXFxuICAgICAgICAgICAgICAgICByb2xlPVxcXCJmb3JtXFxcIiBcIiArIHBhcmVudEZvcm1BdHRyaWJ1dGVzICsgXCI+XFxuICAgICAgICAgIDxcIiArIGZpZWxkUm9vdEVsICsgXCIgZm9ybWx5LWZpZWxkXFxuICAgICAgICAgICAgICAgbmctcmVwZWF0PVxcXCJmaWVsZCBpbiBmaWVsZHMgXCIgKyBnZXRUcmFja0J5KCkgKyBcIlxcXCJcXG4gICAgICAgICAgICAgICBcIiArIGdldEhpZGVEaXJlY3RpdmUoKSArIFwiPVxcXCIhZmllbGQuaGlkZVxcXCJcXG4gICAgICAgICAgICAgICBjbGFzcz1cXFwiZm9ybWx5LWZpZWxkXFxcIlxcbiAgICAgICAgICAgICAgIG9wdGlvbnM9XFxcImZpZWxkXFxcIlxcbiAgICAgICAgICAgICAgIG1vZGVsPVxcXCJmaWVsZC5tb2RlbCB8fCBtb2RlbFxcXCJcXG4gICAgICAgICAgICAgICBmaWVsZHM9XFxcImZpZWxkc1xcXCJcXG4gICAgICAgICAgICAgICBmb3JtPVxcXCJ0aGVGb3JtbHlGb3JtXFxcIlxcbiAgICAgICAgICAgICAgIGZvcm0taWQ9XFxcIlwiICsgZ2V0Rm9ybU5hbWUoKSArIFwiXFxcIlxcbiAgICAgICAgICAgICAgIGZvcm0tc3RhdGU9XFxcIm9wdGlvbnMuZm9ybVN0YXRlXFxcIlxcbiAgICAgICAgICAgICAgIGluZGV4PVxcXCIkaW5kZXhcXFwiPlxcbiAgICAgICAgICA8L1wiICsgZmllbGRSb290RWwgKyBcIj5cXG4gICAgICAgICAgPGRpdiBuZy10cmFuc2NsdWRlPjwvZGl2PlxcbiAgICAgICAgPC9cIiArIHJvb3RFbCArIFwiPlxcbiAgICAgIFwiO1xuXG5cdCAgICAgIGZ1bmN0aW9uIGdldFJvb3RFbCgpIHtcblx0ICAgICAgICByZXR1cm4gYXR0cnMucm9vdEVsIHx8IFwibmctZm9ybVwiO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gZ2V0RmllbGRSb290RWwoKSB7XG5cdCAgICAgICAgcmV0dXJuIGF0dHJzLmZpZWxkUm9vdEVsIHx8IFwiZGl2XCI7XG5cdCAgICAgIH1cblxuXHQgICAgICBmdW5jdGlvbiBnZXRIaWRlRGlyZWN0aXZlKCkge1xuXHQgICAgICAgIHJldHVybiBhdHRycy5oaWRlRGlyZWN0aXZlIHx8IGZvcm1seUNvbmZpZy5leHRyYXMuZGVmYXVsdEhpZGVEaXJlY3RpdmUgfHwgXCJuZy1pZlwiO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gZ2V0VHJhY2tCeSgpIHtcblx0ICAgICAgICBpZiAoIWF0dHJzLnRyYWNrQnkpIHtcblx0ICAgICAgICAgIHJldHVybiBcIlwiO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICByZXR1cm4gXCJ0cmFjayBieSBcIiArIGF0dHJzLnRyYWNrQnk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gZ2V0Rm9ybU5hbWUoKSB7XG5cdCAgICAgICAgdmFyIGZvcm1OYW1lID0gZm9ybUlkO1xuXHQgICAgICAgIHZhciBiaW5kTmFtZSA9IGF0dHJzLmJpbmROYW1lO1xuXHQgICAgICAgIGlmIChiaW5kTmFtZSkge1xuXHQgICAgICAgICAgaWYgKGFuZ3VsYXIudmVyc2lvbi5taW5vciA8IDMpIHtcblx0ICAgICAgICAgICAgdGhyb3cgZm9ybWx5VXNhYmlsaXR5LmdldEZvcm1seUVycm9yKFwiYmluZC1uYW1lIGF0dHJpYnV0ZSBvbiBmb3JtbHktZm9ybSBub3QgYWxsb3dlZCBpbiA+IGFuZ3VsYXIgMS4zXCIpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgLy8gd2UgY2FuIGRvIGEgb25lLXRpbWUgYmluZGluZyBoZXJlIGJlY2F1c2Ugd2Uga25vdyB3ZSdyZSBpbiAxLjMueCB0ZXJyaXRvcnlcblx0ICAgICAgICAgIGZvcm1OYW1lID0gXCJ7ezo6J2Zvcm1seV8nICsgXCIgKyBiaW5kTmFtZSArIFwifX1cIjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGZvcm1OYW1lO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gY29weUF0dHJpYnV0ZXMoYXR0cmlidXRlcykge1xuXHQgICAgICAgIHZhciBleGNsdWRlZCA9IFtcIm1vZGVsXCIsIFwiZm9ybVwiLCBcImZpZWxkc1wiLCBcIm9wdGlvbnNcIiwgXCJuYW1lXCIsIFwicm9sZVwiLCBcImNsYXNzXCJdO1xuXHQgICAgICAgIHZhciBhcnJheUF0dHJzID0gW107XG5cdCAgICAgICAgYW5ndWxhci5mb3JFYWNoKGF0dHJpYnV0ZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG5cdCAgICAgICAgICB2YXIgbm9kZU5hbWUgPSBfcmVmLm5vZGVOYW1lO1xuXHQgICAgICAgICAgdmFyIG5vZGVWYWx1ZSA9IF9yZWYubm9kZVZhbHVlO1xuXG5cdCAgICAgICAgICBpZiAobm9kZU5hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZXhjbHVkZWQuaW5kZXhPZihub2RlTmFtZSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIGFycmF5QXR0cnMucHVzaChcIlwiICsgdG9LZWJhYkNhc2Uobm9kZU5hbWUpICsgXCI9XFxcIlwiICsgbm9kZVZhbHVlICsgXCJcXFwiXCIpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBhcnJheUF0dHJzLmpvaW4oXCIgXCIpO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gdG9LZWJhYkNhc2Uoc3RyaW5nKSB7XG5cdCAgICAgICAgaWYgKHN0cmluZykge1xuXHQgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uICgkMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gXCItXCIgKyAkMS50b0xvd2VyQ2FzZSgpO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiBcIlwiO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlcGxhY2U6IHRydWUsXG5cdCAgICB0cmFuc2NsdWRlOiB0cnVlLFxuXHQgICAgc2NvcGU6IHtcblx0ICAgICAgZmllbGRzOiBcIj1cIixcblx0ICAgICAgbW9kZWw6IFwiPVwiLFxuXHQgICAgICBmb3JtOiBcIj0/XCIsXG5cdCAgICAgIG9wdGlvbnM6IFwiPT9cIlxuXHQgICAgfSxcblx0ICAgIGNvbnRyb2xsZXI6IC8qIEBuZ0luamVjdCAqL1tcIiRzY29wZVwiLCBcImZvcm1seVV0aWxcIiwgZnVuY3Rpb24gRm9ybWx5Rm9ybUNvbnRyb2xsZXIoJHNjb3BlLCBmb3JtbHlVdGlsKSB7XG5cdCAgICAgIHNldHVwT3B0aW9ucygpO1xuXHQgICAgICAkc2NvcGUubW9kZWwgPSAkc2NvcGUubW9kZWwgfHwge307XG5cdCAgICAgICRzY29wZS5maWVsZHMgPSAkc2NvcGUuZmllbGRzIHx8IFtdO1xuXG5cdCAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZmllbGRzLCBpbml0TW9kZWwpOyAvLyBpbml0aWFsaXplcyB0aGUgbW9kZWwgcHJvcGVydHkgaWYgc2V0IHRvICdmb3JtU3RhdGUnXG5cdCAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZmllbGRzLCBhdHRhY2hLZXkpOyAvLyBhdHRhY2hlcyBhIGtleSBiYXNlZCBvbiB0aGUgaW5kZXggaWYgYSBrZXkgaXNuJ3Qgc3BlY2lmaWVkXG5cdCAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZmllbGRzLCBzZXR1cFdhdGNoZXJzKTsgLy8gc2V0dXAgd2F0Y2hlcnMgZm9yIGFsbCBmaWVsZHNcblxuXHQgICAgICAvLyB3YXRjaCB0aGUgbW9kZWwgYW5kIGV2YWx1YXRlIHdhdGNoIGV4cHJlc3Npb25zIHRoYXQgZGVwZW5kIG9uIGl0LlxuXHQgICAgICAkc2NvcGUuJHdhdGNoKFwibW9kZWxcIiwgb25Nb2RlbE9yRm9ybVN0YXRlQ2hhbmdlLCB0cnVlKTtcblx0ICAgICAgaWYgKCRzY29wZS5vcHRpb25zLmZvcm1TdGF0ZSkge1xuXHQgICAgICAgICRzY29wZS4kd2F0Y2goXCJvcHRpb25zLmZvcm1TdGF0ZVwiLCBvbk1vZGVsT3JGb3JtU3RhdGVDaGFuZ2UsIHRydWUpO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gb25Nb2RlbE9yRm9ybVN0YXRlQ2hhbmdlKCkge1xuXHQgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZmllbGRzLCBmdW5jdGlvbiBydW5GaWVsZEV4cHJlc3Npb25Qcm9wZXJ0aWVzKGZpZWxkLCBpbmRleCkge1xuXHQgICAgICAgICAgLypqc2hpbnQgLVcwMzAgKi9cblx0ICAgICAgICAgIHZhciBtb2RlbCA9IGZpZWxkLm1vZGVsIHx8ICRzY29wZS5tb2RlbDtcblx0ICAgICAgICAgIGZpZWxkLnJ1bkV4cHJlc3Npb25zICYmIGZpZWxkLnJ1bkV4cHJlc3Npb25zKG1vZGVsKTtcblx0ICAgICAgICAgIGlmIChmaWVsZC5oaWRlRXhwcmVzc2lvbikge1xuXHQgICAgICAgICAgICAvLyBjYW4ndCB1c2UgaGlkZSB3aXRoIGV4cHJlc3Npb25Qcm9wZXJ0aWVzIHJlbGlhYmx5XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSBtb2RlbFtmaWVsZC5rZXldO1xuXHQgICAgICAgICAgICAvLyB0aGlzIG1ha2VzIGl0IGNsb3NlciB0byB3aGF0IGEgcmVndWxhciBleHByZXNzaW9uUHJvcGVydHkgd291bGQgYmVcblx0ICAgICAgICAgICAgdmFyIGV4dHJhTG9jYWxzID0ge1xuXHQgICAgICAgICAgICAgIG9wdGlvbnM6IGZpZWxkLFxuXHQgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcblx0ICAgICAgICAgICAgICBmb3JtU3RhdGU6ICRzY29wZS5vcHRpb25zLmZvcm1TdGF0ZSxcblx0ICAgICAgICAgICAgICBmb3JtSWQ6ICRzY29wZS5mb3JtSWRcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgZmllbGQuaGlkZSA9IGZvcm1seVV0aWwuZm9ybWx5RXZhbCgkc2NvcGUsIGZpZWxkLmhpZGVFeHByZXNzaW9uLCB2YWwsIHZhbCwgZXh0cmFMb2NhbHMpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gc2V0dXBPcHRpb25zKCkge1xuXHQgICAgICAgIGZvcm1seUFwaUNoZWNrW1widGhyb3dcIl0oW2Zvcm1seUFwaUNoZWNrLmZvcm1PcHRpb25zQXBpLm9wdGlvbmFsXSwgWyRzY29wZS5vcHRpb25zXSwgeyBwcmVmaXg6IFwiZm9ybWx5LWZvcm0gb3B0aW9ucyBjaGVja1wiIH0pO1xuXHQgICAgICAgICRzY29wZS5vcHRpb25zID0gJHNjb3BlLm9wdGlvbnMgfHwge307XG5cdCAgICAgICAgJHNjb3BlLm9wdGlvbnMuZm9ybVN0YXRlID0gJHNjb3BlLm9wdGlvbnMuZm9ybVN0YXRlIHx8IHt9O1xuXG5cdCAgICAgICAgYW5ndWxhci5leHRlbmQoJHNjb3BlLm9wdGlvbnMsIHtcblx0ICAgICAgICAgIHVwZGF0ZUluaXRpYWxWYWx1ZTogdXBkYXRlSW5pdGlhbFZhbHVlLFxuXHQgICAgICAgICAgcmVzZXRNb2RlbDogcmVzZXRNb2RlbFxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gdXBkYXRlSW5pdGlhbFZhbHVlKCkge1xuXHQgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZmllbGRzLCBmdW5jdGlvbiAoZmllbGQpIHtcblx0ICAgICAgICAgIGlmIChpc0ZpZWxkR3JvdXAoZmllbGQpKSB7XG5cdCAgICAgICAgICAgIGZpZWxkLm9wdGlvbnMudXBkYXRlSW5pdGlhbFZhbHVlKCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBmaWVsZC51cGRhdGVJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIHJlc2V0TW9kZWwoKSB7XG5cdCAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5maWVsZHMsIGZ1bmN0aW9uIChmaWVsZCkge1xuXHQgICAgICAgICAgaWYgKGlzRmllbGRHcm91cChmaWVsZCkpIHtcblx0ICAgICAgICAgICAgZmllbGQub3B0aW9ucy5yZXNldE1vZGVsKCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBmaWVsZC5yZXNldE1vZGVsKCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblxuXHQgICAgICBmdW5jdGlvbiBpbml0TW9kZWwoZmllbGQpIHtcblx0ICAgICAgICBpZiAoZmllbGQubW9kZWwgJiYgZmllbGQubW9kZWwgPT09IFwiZm9ybVN0YXRlXCIpIHtcblx0ICAgICAgICAgIGZpZWxkLm1vZGVsID0gJHNjb3BlLm9wdGlvbnMuZm9ybVN0YXRlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIGF0dGFjaEtleShmaWVsZCwgaW5kZXgpIHtcblx0ICAgICAgICBpZiAoIWlzRmllbGRHcm91cChmaWVsZCkpIHtcblx0ICAgICAgICAgIGZpZWxkLmtleSA9IGZpZWxkLmtleSB8fCBpbmRleCB8fCAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIHNldHVwV2F0Y2hlcnMoZmllbGQsIGluZGV4KSB7XG5cdCAgICAgICAgaWYgKGlzRmllbGRHcm91cChmaWVsZCkgfHwgIWFuZ3VsYXIuaXNEZWZpbmVkKGZpZWxkLndhdGNoZXIpKSB7XG5cdCAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciB3YXRjaGVycyA9IGZpZWxkLndhdGNoZXI7XG5cdCAgICAgICAgaWYgKCFhbmd1bGFyLmlzQXJyYXkod2F0Y2hlcnMpKSB7XG5cdCAgICAgICAgICB3YXRjaGVycyA9IFt3YXRjaGVyc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCh3YXRjaGVycywgZnVuY3Rpb24gc2V0dXBXYXRjaGVyKHdhdGNoZXIpIHtcblx0ICAgICAgICAgIGlmICghYW5ndWxhci5pc0RlZmluZWQod2F0Y2hlci5saXN0ZW5lcikpIHtcblx0ICAgICAgICAgICAgdGhyb3cgZm9ybWx5VXNhYmlsaXR5LmdldEZpZWxkRXJyb3IoXCJhbGwtZmllbGQtd2F0Y2hlcnMtbXVzdC1oYXZlLWEtbGlzdGVuZXJcIiwgXCJBbGwgZmllbGQgd2F0Y2hlcnMgbXVzdCBoYXZlIGEgbGlzdGVuZXJcIiwgZmllbGQpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgdmFyIHdhdGNoRXhwcmVzc2lvbiA9IGdldFdhdGNoRXhwcmVzc2lvbih3YXRjaGVyLCBmaWVsZCwgaW5kZXgpO1xuXHQgICAgICAgICAgdmFyIHdhdGNoTGlzdGVuZXIgPSBnZXRXYXRjaExpc3RlbmVyKHdhdGNoZXIsIGZpZWxkLCBpbmRleCk7XG5cblx0ICAgICAgICAgIHZhciB0eXBlID0gd2F0Y2hlci50eXBlIHx8IFwiJHdhdGNoXCI7XG5cdCAgICAgICAgICB3YXRjaGVyLnN0b3BXYXRjaGluZyA9ICRzY29wZVt0eXBlXSh3YXRjaEV4cHJlc3Npb24sIHdhdGNoTGlzdGVuZXIsIHdhdGNoZXIud2F0Y2hEZWVwKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIGdldFdhdGNoRXhwcmVzc2lvbih3YXRjaGVyLCBmaWVsZCwgaW5kZXgpIHtcblx0ICAgICAgICB2YXIgd2F0Y2hFeHByZXNzaW9uID0gd2F0Y2hlci5leHByZXNzaW9uIHx8IFwibW9kZWxbJ1wiICsgZmllbGQua2V5ICsgXCInXVwiO1xuXHQgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24od2F0Y2hFeHByZXNzaW9uKSkge1xuXHQgICAgICAgICAgLy8gd3JhcCB0aGUgZmllbGQncyB3YXRjaCBleHByZXNzaW9uIHNvIHdlIGNhbiBjYWxsIGl0IHdpdGggdGhlIGZpZWxkIGFzIHRoZSBmaXJzdCBhcmdcblx0ICAgICAgICAgIC8vIGFuZCB0aGUgc3RvcCBmdW5jdGlvbiBhcyB0aGUgbGFzdCBhcmcgYXMgYSBoZWxwZXJcblx0ICAgICAgICAgIHZhciBvcmlnaW5hbEV4cHJlc3Npb24gPSB3YXRjaEV4cHJlc3Npb247XG5cdCAgICAgICAgICB3YXRjaEV4cHJlc3Npb24gPSBmdW5jdGlvbiBmb3JtbHlXYXRjaEV4cHJlc3Npb24oKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gbW9kaWZ5QXJncy5hcHBseSh1bmRlZmluZWQsIFt3YXRjaGVyLCBpbmRleF0uY29uY2F0KF9zbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcblx0ICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRXhwcmVzc2lvbi5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgd2F0Y2hFeHByZXNzaW9uLmRpc3BsYXlOYW1lID0gXCJGb3JtbHkgV2F0Y2ggRXhwcmVzc2lvbiBmb3IgZmllbGQgZm9yIFwiICsgZmllbGQua2V5O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gd2F0Y2hFeHByZXNzaW9uO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gZ2V0V2F0Y2hMaXN0ZW5lcih3YXRjaGVyLCBmaWVsZCwgaW5kZXgpIHtcblx0ICAgICAgICB2YXIgd2F0Y2hMaXN0ZW5lciA9IHdhdGNoZXIubGlzdGVuZXI7XG5cdCAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbih3YXRjaExpc3RlbmVyKSkge1xuXHQgICAgICAgICAgLy8gd3JhcCB0aGUgZmllbGQncyB3YXRjaCBsaXN0ZW5lciBzbyB3ZSBjYW4gY2FsbCBpdCB3aXRoIHRoZSBmaWVsZCBhcyB0aGUgZmlyc3QgYXJnXG5cdCAgICAgICAgICAvLyBhbmQgdGhlIHN0b3AgZnVuY3Rpb24gYXMgdGhlIGxhc3QgYXJnIGFzIGEgaGVscGVyXG5cdCAgICAgICAgICB2YXIgb3JpZ2luYWxMaXN0ZW5lciA9IHdhdGNoTGlzdGVuZXI7XG5cdCAgICAgICAgICB3YXRjaExpc3RlbmVyID0gZnVuY3Rpb24gZm9ybWx5V2F0Y2hMaXN0ZW5lcigpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBtb2RpZnlBcmdzLmFwcGx5KHVuZGVmaW5lZCwgW3dhdGNoZXIsIGluZGV4XS5jb25jYXQoX3NsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuXHQgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxMaXN0ZW5lci5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgd2F0Y2hMaXN0ZW5lci5kaXNwbGF5TmFtZSA9IFwiRm9ybWx5IFdhdGNoIExpc3RlbmVyIGZvciBmaWVsZCBmb3IgXCIgKyBmaWVsZC5rZXk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB3YXRjaExpc3RlbmVyO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gbW9kaWZ5QXJncyh3YXRjaGVyLCBpbmRleCkge1xuXHQgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBvcmlnaW5hbEFyZ3MgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG5cdCAgICAgICAgICBvcmlnaW5hbEFyZ3NbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBbJHNjb3BlLmZpZWxkc1tpbmRleF1dLmNvbmNhdChvcmlnaW5hbEFyZ3MsIFt3YXRjaGVyLnN0b3BXYXRjaGluZ10pO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gaXNGaWVsZEdyb3VwKGZpZWxkKSB7XG5cdCAgICAgICAgcmV0dXJuIGZpZWxkICYmICEhZmllbGQuZmllbGRHcm91cDtcblx0ICAgICAgfVxuXHQgICAgfV0sXG5cdCAgICBsaW5rOiBmdW5jdGlvbiBsaW5rKHNjb3BlLCBlbCwgYXR0cnMpIHtcblx0ICAgICAgdmFyIGZvcm1JZCA9IGF0dHJzLm5hbWU7XG5cdCAgICAgIHNjb3BlLmZvcm1JZCA9IGZvcm1JZDtcblx0ICAgICAgc2NvcGUudGhlRm9ybWx5Rm9ybSA9IHNjb3BlW2Zvcm1JZF07XG5cdCAgICAgIGlmIChhdHRycy5mb3JtKSB7XG5cdCAgICAgICAgJHBhcnNlKGF0dHJzLmZvcm0pLmFzc2lnbihzY29wZS4kcGFyZW50LCBzY29wZVtmb3JtSWRdKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIC8vIGNocm9tZSBhdXRvY29tcGxldGUgbGFtZW5lc3Ncblx0ICAgICAgLy8gc2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NjgxNTMjYzE0XG5cdCAgICAgIC8vIOGDmijgsqDnm4rgsqDhg5opICAgKOKVr8Kw4pahwrAp4pWv77i1IOKUu+KUgeKUuyAgICAo4pee4oC44pef77ybKVxuXHQgICAgICB2YXIgZ2xvYmFsID0gZm9ybWx5Q29uZmlnLmV4dHJhcy5yZW1vdmVDaHJvbWVBdXRvQ29tcGxldGUgPT09IHRydWU7XG5cdCAgICAgIHZhciBvZmZJbnN0YW5jZSA9IHNjb3BlLm9wdGlvbnMgJiYgc2NvcGUub3B0aW9ucy5yZW1vdmVDaHJvbWVBdXRvQ29tcGxldGUgPT09IGZhbHNlO1xuXHQgICAgICB2YXIgb25JbnN0YW5jZSA9IHNjb3BlLm9wdGlvbnMgJiYgc2NvcGUub3B0aW9ucy5yZW1vdmVDaHJvbWVBdXRvQ29tcGxldGUgPT09IHRydWU7XG5cdCAgICAgIGlmIChnbG9iYWwgJiYgIW9mZkluc3RhbmNlIHx8IG9uSW5zdGFuY2UpIHtcblx0ICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cdCAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKFwiYXV0b2NvbXBsZXRlXCIsIFwiYWRkcmVzcy1sZXZlbDRcIik7XG5cdCAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsIHRydWUpO1xuXHQgICAgICAgIGVsWzBdLmFwcGVuZENoaWxkKGlucHV0KTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH07XG5cdH1cblx0Zm9ybWx5Rm9ybS4kaW5qZWN0ID0gW1wiZm9ybWx5VXNhYmlsaXR5XCIsIFwiJHBhcnNlXCIsIFwiZm9ybWx5QXBpQ2hlY2tcIiwgXCJmb3JtbHlDb25maWdcIl07XG5cbi8qKiovIH0sXG4vKiAxMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNSkpO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gYWRkRm9ybWx5TmdNb2RlbEF0dHJzTWFuaXB1bGF0b3I7XG5cblx0Ly8gQG5nSW5qZWN0XG5cdGZ1bmN0aW9uIGFkZEZvcm1seU5nTW9kZWxBdHRyc01hbmlwdWxhdG9yKGZvcm1seUNvbmZpZykge1xuXHQgIGlmIChmb3JtbHlDb25maWcuZXh0cmFzLmRpc2FibGVOZ01vZGVsQXR0cnNNYW5pcHVsYXRvcikge1xuXHQgICAgcmV0dXJuO1xuXHQgIH1cblx0ICBmb3JtbHlDb25maWcudGVtcGxhdGVNYW5pcHVsYXRvcnMucHJlV3JhcHBlci5wdXNoKG5nTW9kZWxBdHRyc01hbmlwdWxhdG9yKTtcblxuXHQgIGZ1bmN0aW9uIG5nTW9kZWxBdHRyc01hbmlwdWxhdG9yKHRlbXBsYXRlLCBvcHRpb25zLCBzY29wZSkge1xuXHQgICAgLyoganNoaW50IG1heGNvbXBsZXhpdHk6NiAqL1xuXHQgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0ICAgIHZhciBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXHQgICAgaWYgKGRhdGEuc2tpcE5nTW9kZWxBdHRyc01hbmlwdWxhdG9yID09PSB0cnVlKSB7XG5cdCAgICAgIHJldHVybiB0ZW1wbGF0ZTtcblx0ICAgIH1cblx0ICAgIGVsLmlubmVySFRNTCA9IHRlbXBsYXRlO1xuXHQgICAgdmFyIG1vZGVsTm9kZXMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW25nLW1vZGVsXSwgW2RhdGEtbmctbW9kZWxdXCIpO1xuXHQgICAgaWYgKCFtb2RlbE5vZGVzIHx8ICFtb2RlbE5vZGVzLmxlbmd0aCkge1xuXHQgICAgICByZXR1cm4gdGVtcGxhdGU7XG5cdCAgICB9XG5cblx0ICAgIGFkZElmTm90UHJlc2VudChtb2RlbE5vZGVzLCBcImlkXCIsIHNjb3BlLmlkKTtcblx0ICAgIGFkZElmTm90UHJlc2VudChtb2RlbE5vZGVzLCBcIm5hbWVcIiwgc2NvcGUuaWQpO1xuXG5cdCAgICBhZGRWYWxpZGF0aW9uKCk7XG5cdCAgICBhZGRNb2RlbE9wdGlvbnMoKTtcblx0ICAgIGFkZFRlbXBsYXRlT3B0aW9uc0F0dHJzKCk7XG5cblx0ICAgIHJldHVybiBlbC5pbm5lckhUTUw7XG5cblx0ICAgIGZ1bmN0aW9uIGFkZFZhbGlkYXRpb24oKSB7XG5cdCAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChvcHRpb25zLnZhbGlkYXRvcnMpIHx8IGFuZ3VsYXIuaXNEZWZpbmVkKG9wdGlvbnMudmFsaWRhdGlvbi5tZXNzYWdlcykpIHtcblx0ICAgICAgICBhZGRJZk5vdFByZXNlbnQobW9kZWxOb2RlcywgXCJmb3JtbHktY3VzdG9tLXZhbGlkYXRpb25cIiwgXCJcIik7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gYWRkTW9kZWxPcHRpb25zKCkge1xuXHQgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQob3B0aW9ucy5tb2RlbE9wdGlvbnMpKSB7XG5cdCAgICAgICAgYWRkSWZOb3RQcmVzZW50KG1vZGVsTm9kZXMsIFwibmctbW9kZWwtb3B0aW9uc1wiLCBcIm9wdGlvbnMubW9kZWxPcHRpb25zXCIpO1xuXHQgICAgICAgIGlmIChvcHRpb25zLm1vZGVsT3B0aW9ucy5nZXR0ZXJTZXR0ZXIpIHtcblx0ICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChtb2RlbE5vZGVzLCBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5nLW1vZGVsXCIsIFwib3B0aW9ucy52YWx1ZVwiKTtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBhZGRUZW1wbGF0ZU9wdGlvbnNBdHRycygpIHtcblx0ICAgICAgaWYgKCFvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyAmJiAhb3B0aW9ucy5leHByZXNzaW9uUHJvcGVydGllcykge1xuXHQgICAgICAgIC8vIG5vIG5lZWQgdG8gcnVuIHRoZXNlIGlmIHRoZXJlIGFyZSBubyB0ZW1wbGF0ZU9wdGlvbnMgb3IgZXhwcmVzc2lvblByb3BlcnRpZXNcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHRvID0gb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgfHwge307XG5cdCAgICAgIHZhciBlcCA9IG9wdGlvbnMuZXhwcmVzc2lvblByb3BlcnRpZXMgfHwge307XG5cblx0ICAgICAgdmFyIG5nTW9kZWxBdHRyaWJ1dGVzID0gZ2V0QnVpbHRJbkF0dHJpYnV0ZXMoKTtcblxuXHQgICAgICAvLyBleHRlbmQgd2l0aCB0aGUgdXNlcidzIHNwZWNpZmljYXRpb25zIHdpbm5pbmdcblx0ICAgICAgYW5ndWxhci5leHRlbmQobmdNb2RlbEF0dHJpYnV0ZXMsIG9wdGlvbnMubmdNb2RlbEF0dHJzKTtcblxuXHQgICAgICAvLyBGZWVsIGZyZWUgdG8gbWFrZSB0aGlzIG1vcmUgc2ltcGxlIDotKVxuXHQgICAgICBhbmd1bGFyLmZvckVhY2gobmdNb2RlbEF0dHJpYnV0ZXMsIGZ1bmN0aW9uICh2YWwsIG5hbWUpIHtcblx0ICAgICAgICAvKiBqc2hpbnQgbWF4Y29tcGxleGl0eToxNCAqL1xuXHQgICAgICAgIHZhciBhdHRyVmFsID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIHZhciBhdHRyTmFtZSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB2YXIgcmVmID0gXCJvcHRpb25zLnRlbXBsYXRlT3B0aW9uc1snXCIgKyBuYW1lICsgXCInXVwiO1xuXHQgICAgICAgIHZhciB0b1ZhbCA9IHRvW25hbWVdO1xuXHQgICAgICAgIHZhciBlcFZhbCA9IGdldEVwVmFsdWUoZXAsIG5hbWUpO1xuXG5cdCAgICAgICAgdmFyIGluVG8gPSBhbmd1bGFyLmlzRGVmaW5lZCh0b1ZhbCk7XG5cdCAgICAgICAgdmFyIGluRXAgPSBhbmd1bGFyLmlzRGVmaW5lZChlcFZhbCk7XG5cdCAgICAgICAgaWYgKHZhbC52YWx1ZSkge1xuXHQgICAgICAgICAgLy8gSSByZWFsaXplIHRoaXMgbG9va3MgYmFja3dhcmRzLCBidXQgaXQncyByaWdodCwgdHJ1c3QgbWUuLi5cblx0ICAgICAgICAgIGF0dHJOYW1lID0gdmFsLnZhbHVlO1xuXHQgICAgICAgICAgYXR0clZhbCA9IG5hbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmICh2YWwuZXhwcmVzc2lvbiAmJiBpblRvKSB7XG5cdCAgICAgICAgICBhdHRyTmFtZSA9IHZhbC5leHByZXNzaW9uO1xuXHQgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcodG9bbmFtZV0pKSB7XG5cdCAgICAgICAgICAgIGF0dHJWYWwgPSBcIiRldmFsKFwiICsgcmVmICsgXCIpXCI7XG5cdCAgICAgICAgICB9IGVsc2UgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbih0b1tuYW1lXSkpIHtcblx0ICAgICAgICAgICAgYXR0clZhbCA9IFwiXCIgKyByZWYgKyBcIihtb2RlbFtvcHRpb25zLmtleV0sIG9wdGlvbnMsIHRoaXMsICRldmVudClcIjtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm9wdGlvbnMudGVtcGxhdGVPcHRpb25zLlwiICsgbmFtZSArIFwiIG11c3QgYmUgYSBzdHJpbmcgb3IgZnVuY3Rpb246IFwiICsgSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodmFsLmJvdW5kICYmIGluRXApIHtcblx0ICAgICAgICAgIGF0dHJOYW1lID0gdmFsLmJvdW5kO1xuXHQgICAgICAgICAgYXR0clZhbCA9IHJlZjtcblx0ICAgICAgICB9IGVsc2UgaWYgKCh2YWwuYXR0cmlidXRlIHx8IHZhbC5ib29sZWFuKSAmJiBpbkVwKSB7XG5cdCAgICAgICAgICBhdHRyTmFtZSA9IHZhbC5hdHRyaWJ1dGUgfHwgdmFsLmJvb2xlYW47XG5cdCAgICAgICAgICBhdHRyVmFsID0gXCJ7e1wiICsgcmVmICsgXCJ9fVwiO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodmFsLmF0dHJpYnV0ZSAmJiBpblRvKSB7XG5cdCAgICAgICAgICBhdHRyTmFtZSA9IHZhbC5hdHRyaWJ1dGU7XG5cdCAgICAgICAgICBhdHRyVmFsID0gdG9WYWw7XG5cdCAgICAgICAgfSBlbHNlIGlmICh2YWwuYm9vbGVhbikge1xuXHQgICAgICAgICAgaWYgKGluVG8gJiYgIWluRXAgJiYgdG9WYWwpIHtcblx0ICAgICAgICAgICAgYXR0ck5hbWUgPSB2YWwuYm9vbGVhbjtcblx0ICAgICAgICAgICAgYXR0clZhbCA9IHRydWU7XG5cdCAgICAgICAgICB9IGVsc2Uge31cblx0ICAgICAgICB9IGVsc2UgaWYgKHZhbC5ib3VuZCAmJiBpblRvKSB7XG5cdCAgICAgICAgICBhdHRyTmFtZSA9IHZhbC5ib3VuZDtcblx0ICAgICAgICAgIGF0dHJWYWwgPSByZWY7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGF0dHJOYW1lKSAmJiBhbmd1bGFyLmlzRGVmaW5lZChhdHRyVmFsKSkge1xuXHQgICAgICAgICAgYWRkSWZOb3RQcmVzZW50KG1vZGVsTm9kZXMsIGF0dHJOYW1lLCBhdHRyVmFsKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIC8vIFV0aWxpdHkgZnVuY3Rpb25zXG5cdCAgZnVuY3Rpb24gZ2V0QnVpbHRJbkF0dHJpYnV0ZXMoKSB7XG5cdCAgICB2YXIgbmdNb2RlbEF0dHJpYnV0ZXMgPSB7XG5cdCAgICAgIGZvY3VzOiB7XG5cdCAgICAgICAgYXR0cmlidXRlOiBcImZvcm1seS1mb2N1c1wiXG5cdCAgICAgIH1cblx0ICAgIH07XG5cdCAgICB2YXIgYm91bmRPbmx5ID0gW107XG5cdCAgICB2YXIgYm90aEJvb2xlYW5BbmRCb3VuZCA9IFtcInJlcXVpcmVkXCIsIFwiZGlzYWJsZWRcIl07XG5cdCAgICB2YXIgYm90aEF0dHJpYnV0ZUFuZEJvdW5kID0gW1wicGF0dGVyblwiLCBcIm1pbmxlbmd0aFwiXTtcblx0ICAgIHZhciBleHByZXNzaW9uT25seSA9IFtcImNoYW5nZVwiLCBcImtleWRvd25cIiwgXCJrZXl1cFwiLCBcImtleXByZXNzXCIsIFwiY2xpY2tcIiwgXCJmb2N1c1wiLCBcImJsdXJcIl07XG5cdCAgICB2YXIgYXR0cmlidXRlT25seSA9IFtcInBsYWNlaG9sZGVyXCIsIFwibWluXCIsIFwibWF4XCIsIFwidGFiaW5kZXhcIiwgXCJ0eXBlXCJdO1xuXHQgICAgaWYgKGZvcm1seUNvbmZpZy5leHRyYXMubmdNb2RlbEF0dHJzTWFuaXB1bGF0b3JQcmVmZXJVbmJvdW5kKSB7XG5cdCAgICAgIGJvdGhBdHRyaWJ1dGVBbmRCb3VuZC5wdXNoKFwibWF4bGVuZ3RoXCIpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgYm91bmRPbmx5LnB1c2goXCJtYXhsZW5ndGhcIik7XG5cdCAgICB9XG5cblx0ICAgIGFuZ3VsYXIuZm9yRWFjaChib3VuZE9ubHksIGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgIG5nTW9kZWxBdHRyaWJ1dGVzW2l0ZW1dID0geyBib3VuZDogXCJuZy1cIiArIGl0ZW0gfTtcblx0ICAgIH0pO1xuXG5cdCAgICBhbmd1bGFyLmZvckVhY2goYm90aEJvb2xlYW5BbmRCb3VuZCwgZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgbmdNb2RlbEF0dHJpYnV0ZXNbaXRlbV0gPSB7IGJvb2xlYW46IGl0ZW0sIGJvdW5kOiBcIm5nLVwiICsgaXRlbSB9O1xuXHQgICAgfSk7XG5cblx0ICAgIGFuZ3VsYXIuZm9yRWFjaChib3RoQXR0cmlidXRlQW5kQm91bmQsIGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgIG5nTW9kZWxBdHRyaWJ1dGVzW2l0ZW1dID0geyBhdHRyaWJ1dGU6IGl0ZW0sIGJvdW5kOiBcIm5nLVwiICsgaXRlbSB9O1xuXHQgICAgfSk7XG5cblx0ICAgIGFuZ3VsYXIuZm9yRWFjaChleHByZXNzaW9uT25seSwgZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgdmFyIHByb3BOYW1lID0gXCJvblwiICsgaXRlbS5zdWJzdHIoMCwgMSkudG9VcHBlckNhc2UoKSArIGl0ZW0uc3Vic3RyKDEpO1xuXHQgICAgICBuZ01vZGVsQXR0cmlidXRlc1twcm9wTmFtZV0gPSB7IGV4cHJlc3Npb246IFwibmctXCIgKyBpdGVtIH07XG5cdCAgICB9KTtcblxuXHQgICAgYW5ndWxhci5mb3JFYWNoKGF0dHJpYnV0ZU9ubHksIGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgIG5nTW9kZWxBdHRyaWJ1dGVzW2l0ZW1dID0geyBhdHRyaWJ1dGU6IGl0ZW0gfTtcblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIG5nTW9kZWxBdHRyaWJ1dGVzO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldEVwVmFsdWUoZXAsIG5hbWUpIHtcblx0ICAgIHJldHVybiBlcFtcInRlbXBsYXRlT3B0aW9ucy5cIiArIG5hbWVdIHx8IGVwW1widGVtcGxhdGVPcHRpb25zWydcIiArIG5hbWUgKyBcIiddXCJdIHx8IGVwW1widGVtcGxhdGVPcHRpb25zW1xcXCJcIiArIG5hbWUgKyBcIlxcXCJdXCJdO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGFkZElmTm90UHJlc2VudChub2RlcywgYXR0ciwgdmFsKSB7XG5cdCAgICBhbmd1bGFyLmZvckVhY2gobm9kZXMsIGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgIGlmICghbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cikpIHtcblx0ICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB2YWwpO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblx0ICB9XG5cdH1cblx0YWRkRm9ybWx5TmdNb2RlbEF0dHJzTWFuaXB1bGF0b3IuJGluamVjdCA9IFtcImZvcm1seUNvbmZpZ1wiXTtcblxuXHQvLyBqc2hpbnQgLVcwMzVcblx0Ly8gZW1wdHkgdG8gaWxsdXN0cmF0ZSB0aGF0IGEgYm9vbGVhbiB3aWxsIG5vdCBiZSBhZGRlZCB2aWEgdmFsLmJvdW5kXG5cdC8vIGlmIHlvdSB3YW50IGl0IGFkZGVkIHZpYSB2YWwuYm91bmQsIHRoZW4gcHV0IGl0IGluIGV4cHJlc3Npb25Qcm9wZXJ0aWVzXG5cbi8qKiovIH0sXG4vKiAxNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBhZGRDdXN0b21UYWdzO1xuXG5cdC8vIEBuZ0luamVjdFxuXHRmdW5jdGlvbiBhZGRDdXN0b21UYWdzKCRkb2N1bWVudCkge1xuXHQgIGlmICgkZG9jdW1lbnQgJiYgJGRvY3VtZW50LmdldCkge1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgLy9JRTggY2hlY2sgLT5cblx0ICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDk2NDk2Ni9kZXRlY3QtaWUtdmVyc2lvbi1wcmlvci10by12OS1pbi1qYXZhc2NyaXB0LzEwOTY1MjAzIzEwOTY1MjAzXG5cdCAgICAgIHZhciBkb2N1bWVudCA9ICRkb2N1bWVudC5nZXQoMCk7XG5cdCAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHQgICAgICBkaXYuaW5uZXJIVE1MID0gXCI8IS0tW2lmIGx0IElFIDldPjxpPjwvaT48IVtlbmRpZl0tLT5cIjtcblx0ICAgICAgdmFyIGlzSWVMZXNzVGhhbjkgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLmxlbmd0aCA9PT0gMTtcblxuXHQgICAgICBpZiAoaXNJZUxlc3NUaGFuOSkge1xuXHQgICAgICAgIC8vYWRkIHRoZSBjdXN0b20gZWxlbWVudHMgdGhhdCB3ZSBuZWVkIGZvciBmb3JtbHlcblx0ICAgICAgICB2YXIgY3VzdG9tRWxlbWVudHMgPSBbXCJmb3JtbHktZmllbGRcIiwgXCJmb3JtbHktZm9ybVwiLCBcImZvcm1seS1jdXN0b20tdmFsaWRhdGlvblwiLCBcImZvcm1seS1mb2N1c1wiLCBcImZvcm1seS10cmFuc3Bvc2VcIl07XG5cdCAgICAgICAgYW5ndWxhci5mb3JFYWNoKGN1c3RvbUVsZW1lbnRzLCBmdW5jdGlvbiAoZWwpIHtcblx0ICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWwpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9KSgpO1xuXHQgIH1cblx0fVxuXHRhZGRDdXN0b21UYWdzLiRpbmplY3QgPSBbXCIkZG9jdW1lbnRcIl07XG5cbi8qKiovIH0sXG4vKiAxNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0Ly8gc29tZSB2ZXJzaW9ucyBvZiBhbmd1bGFyIGRvbid0IGV4cG9ydCB0aGUgYW5ndWxhciBtb2R1bGUgcHJvcGVybHksXG5cdC8vIHNvIHdlIGdldCBpdCBmcm9tIHdpbmRvdyBpbiB0aGlzIGNhc2UuXG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNykpO1xuXG5cdGlmICghYW5ndWxhci52ZXJzaW9uKSB7XG5cdCAgYW5ndWxhciA9IHdpbmRvdy5hbmd1bGFyO1xuXHR9XG5cdG1vZHVsZS5leHBvcnRzID0gYW5ndWxhcjtcblxuLyoqKi8gfSxcbi8qIDE2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMTZfXztcblxuLyoqKi8gfSxcbi8qIDE3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMTdfXztcblxuLyoqKi8gfSxcbi8qIDE4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblxuXHR2YXIgYW5ndWxhciA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IGZvcm1seUV2YWw6IGZvcm1seUV2YWwsIGdldEZpZWxkSWQ6IGdldEZpZWxkSWQsIHJldmVyc2VEZWVwTWVyZ2U6IHJldmVyc2VEZWVwTWVyZ2UsIGZpbmRCeU5vZGVOYW1lOiBmaW5kQnlOb2RlTmFtZSwgYXJyYXlpZnk6IGFycmF5aWZ5LCBleHRlbmRGdW5jdGlvbjogZXh0ZW5kRnVuY3Rpb24gfTtcblxuXHRmdW5jdGlvbiBmb3JtbHlFdmFsKHNjb3BlLCBleHByZXNzaW9uLCAkbW9kZWxWYWx1ZSwgJHZpZXdWYWx1ZSwgZXh0cmFMb2NhbHMpIHtcblx0ICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKGV4cHJlc3Npb24pKSB7XG5cdCAgICByZXR1cm4gZXhwcmVzc2lvbigkdmlld1ZhbHVlLCAkbW9kZWxWYWx1ZSwgc2NvcGUsIGV4dHJhTG9jYWxzKTtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIHNjb3BlLiRldmFsKGV4cHJlc3Npb24sIGFuZ3VsYXIuZXh0ZW5kKHsgJHZpZXdWYWx1ZTogJHZpZXdWYWx1ZSwgJG1vZGVsVmFsdWU6ICRtb2RlbFZhbHVlIH0sIGV4dHJhTG9jYWxzKSk7XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0RmllbGRJZChmb3JtSWQsIG9wdGlvbnMsIGluZGV4KSB7XG5cdCAgaWYgKG9wdGlvbnMuaWQpIHtcblx0ICAgIHJldHVybiBvcHRpb25zLmlkO1xuXHQgIH1cblx0ICB2YXIgdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICBpZiAoIXR5cGUgJiYgb3B0aW9ucy50ZW1wbGF0ZSkge1xuXHQgICAgdHlwZSA9IFwidGVtcGxhdGVcIjtcblx0ICB9IGVsc2UgaWYgKCF0eXBlICYmIG9wdGlvbnMudGVtcGxhdGVVcmwpIHtcblx0ICAgIHR5cGUgPSBcInRlbXBsYXRlVXJsXCI7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIFtmb3JtSWQsIHR5cGUsIG9wdGlvbnMua2V5LCBpbmRleF0uam9pbihcIl9cIik7XG5cdH1cblxuXHRmdW5jdGlvbiByZXZlcnNlRGVlcE1lcmdlKGRlc3QpIHtcblx0ICBhbmd1bGFyLmZvckVhY2goYXJndW1lbnRzLCBmdW5jdGlvbiAoc3JjLCBpbmRleCkge1xuXHQgICAgaWYgKCFpbmRleCkge1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cdCAgICBhbmd1bGFyLmZvckVhY2goc3JjLCBmdW5jdGlvbiAodmFsLCBwcm9wKSB7XG5cdCAgICAgIGlmICghYW5ndWxhci5pc0RlZmluZWQoZGVzdFtwcm9wXSkpIHtcblx0ICAgICAgICBkZXN0W3Byb3BdID0gYW5ndWxhci5jb3B5KHZhbCk7XG5cdCAgICAgIH0gZWxzZSBpZiAob2JqQW5kU2FtZVR5cGUoZGVzdFtwcm9wXSwgdmFsKSkge1xuXHQgICAgICAgIHJldmVyc2VEZWVwTWVyZ2UoZGVzdFtwcm9wXSwgdmFsKTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cdCAgfSk7XG5cdH1cblxuXHRmdW5jdGlvbiBvYmpBbmRTYW1lVHlwZShvYmoxLCBvYmoyKSB7XG5cdCAgcmV0dXJuIGFuZ3VsYXIuaXNPYmplY3Qob2JqMSkgJiYgYW5ndWxhci5pc09iamVjdChvYmoyKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqMSkgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmoyKTtcblx0fVxuXG5cdC8vcmVjdXJzZSBkb3duIGEgbm9kZSB0cmVlIHRvIGZpbmQgYSBub2RlIHdpdGggbWF0Y2hpbmcgbm9kZU5hbWUsIGZvciBjdXN0b20gdGFncyBqUXVlcnkuZmluZCBkb2Vzbid0IHdvcmsgaW4gSUU4XG5cdGZ1bmN0aW9uIGZpbmRCeU5vZGVOYW1lKGVsLCBub2RlTmFtZSkge1xuXHQgIGlmICghZWwucHJvcCkge1xuXHQgICAgLy8gbm90IGEgalF1ZXJ5IG9yIGpxTGl0ZSBvYmplY3QgLT4gd3JhcCBpdFxuXHQgICAgZWwgPSBhbmd1bGFyLmVsZW1lbnQoZWwpO1xuXHQgIH1cblxuXHQgIGlmIChlbC5wcm9wKFwibm9kZU5hbWVcIikgPT09IG5vZGVOYW1lLnRvVXBwZXJDYXNlKCkpIHtcblx0ICAgIHJldHVybiBlbDtcblx0ICB9XG5cblx0ICB2YXIgYyA9IGVsLmNoaWxkcmVuKCk7XG5cdCAgZm9yICh2YXIgaSA9IDA7IGMgJiYgaSA8IGMubGVuZ3RoOyBpKyspIHtcblx0ICAgIHZhciBub2RlID0gZmluZEJ5Tm9kZU5hbWUoY1tpXSwgbm9kZU5hbWUpO1xuXHQgICAgaWYgKG5vZGUpIHtcblx0ICAgICAgcmV0dXJuIG5vZGU7XG5cdCAgICB9XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gYXJyYXlpZnkob2JqKSB7XG5cdCAgaWYgKG9iaiAmJiAhYW5ndWxhci5pc0FycmF5KG9iaikpIHtcblx0ICAgIG9iaiA9IFtvYmpdO1xuXHQgIH0gZWxzZSBpZiAoIW9iaikge1xuXHQgICAgb2JqID0gW107XG5cdCAgfVxuXHQgIHJldHVybiBvYmo7XG5cdH1cblxuXHRmdW5jdGlvbiBleHRlbmRGdW5jdGlvbigpIHtcblx0ICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZm5zID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG5cdCAgICBmbnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG5cdCAgfVxuXG5cdCAgcmV0dXJuIGZ1bmN0aW9uIGV4dGVuZGVkRnVuY3Rpb24oKSB7XG5cdCAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgIGZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuXHQgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJncyk7XG5cdCAgICB9KTtcblx0ICB9O1xuXHR9XG5cbi8qKiovIH1cbi8qKioqKiovIF0pXG59KTtcbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYW5ndWxhci1mb3JtbHkvZGlzdC9mb3JtbHkuanNcbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==");
/***/ },
/* 4 */
/***/ function(module, exports) {
eval("module.exports = angular;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJhbmd1bGFyXCI/MTFkMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBhbmd1bGFyO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiYW5ndWxhclwiXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=");
/***/ },
/* 5 */
/***/ function(module, exports, __webpack_require__) {
eval("// angular-formly-templates-bootstrap version 4.3.2 built with ♥ by Astrism <astrisms@gmail.com>, Kent C. Dodds <kent@doddsfamily.us> (ó ì_í)=óò=(ì_í ò)\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory(__webpack_require__(3), __webpack_require__(2), __webpack_require__(4));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular-formly\", \"api-check\", \"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormlyTemplatesBootstrap\"] = factory(require(\"angular-formly\"), require(\"api-check\"), require(\"angular\"));\n\telse\n\t\troot[\"ngFormlyTemplatesBootstrap\"] = factory(root[\"ngFormly\"], root[\"apiCheck\"], root[\"angular\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_3__, __WEBPACK_EXTERNAL_MODULE_8__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(11);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addCheckboxType);\n\t\n\t function addCheckboxType(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setType({\n\t name: 'multiCheckbox',\n\t template: __webpack_require__(21),\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t options: c.arrayOf(c.object),\n\t labelProp: c.string.optional,\n\t valueProp: c.string.optional\n\t })\n\t },\n\t defaultOptions: {\n\t noFormControl: false,\n\t ngModelAttrs: {\n\t required: {\n\t attribute: '',\n\t bound: ''\n\t }\n\t }\n\t },\n\t apiCheckInstance: c,\n\t controller: /* @ngInject */[\"$scope\", function controller($scope) {\n\t var to = $scope.to;\n\t var opts = $scope.options;\n\t $scope.multiCheckbox = {\n\t checked: [],\n\t change: setModel\n\t };\n\t\n\t // initialize the checkboxes check property\n\t var modelValue = $scope.model[opts.key];\n\t if (angular.isArray(modelValue)) {\n\t (function () {\n\t var valueProp = to.valueProp || 'value';\n\t angular.forEach(to.options, function (v, index) {\n\t $scope.multiCheckbox.checked[index] = modelValue.indexOf(v[valueProp]) !== -1;\n\t });\n\t })();\n\t }\n\t\n\t function checkValidity(expressionValue) {\n\t var valid = angular.isArray($scope.model[opts.key]) && $scope.model[opts.key].length > 0 && expressionValue;\n\t\n\t $scope.fc.$setValidity('required', valid);\n\t }\n\t\n\t function setModel() {\n\t $scope.model[opts.key] = [];\n\t angular.forEach($scope.multiCheckbox.checked, function (checkbox, index) {\n\t if (checkbox) {\n\t $scope.model[opts.key].push(to.options[index][to.valueProp || 'value']);\n\t }\n\t });\n\t\n\t // Must make sure we mark as touched because only the last checkbox due to a bug in angular.\n\t $scope.fc.$setTouched();\n\t checkValidity(true);\n\t }\n\t\n\t if (opts.expressionProperties && opts.expressionProperties.required) {\n\t $scope.$watch($scope.options.expressionProperties.required, function (newValue) {\n\t checkValidity(newValue);\n\t });\n\t }\n\t\n\t if ($scope.to.required) {\n\t var unwatchFormControl = $scope.$watch('fc', function (newValue) {\n\t if (!newValue) {\n\t return;\n\t }\n\t checkValidity(true);\n\t unwatchFormControl;\n\t });\n\t }\n\t }]\n\t });\n\t }\n\t addCheckboxType.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// some versions of angular don't export the angular module properly,\n\t// so we get it from window in this case.\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(8);\n\tif (!angular.version) {\n\t angular = window.angular;\n\t}\n\tmodule.exports = angular;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addWrappers);\n\t\n\t function addWrappers(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setWrapper([{\n\t name: 'bootstrapLabel',\n\t template: __webpack_require__(17),\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t label: c.string,\n\t required: c.bool.optional\n\t })\n\t },\n\t apiCheckInstance: c\n\t }, { name: 'bootstrapHasError', template: __webpack_require__(18) }]);\n\t }\n\t addWrappers.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t __webpack_require__(10)(ngModule);\n\t __webpack_require__(1)(ngModule);\n\t __webpack_require__(12)(ngModule);\n\t __webpack_require__(9)(ngModule);\n\t __webpack_require__(13)(ngModule);\n\t __webpack_require__(14)(ngModule);\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _addons = __webpack_require__(15);\n\t\n\tvar _addons2 = _interopRequireDefault(_addons);\n\t\n\tvar _description = __webpack_require__(16);\n\t\n\tvar _description2 = _interopRequireDefault(_description);\n\t\n\texports['default'] = function (ngModule) {\n\t (0, _addons2['default'])(ngModule);\n\t (0, _description2['default'])(ngModule);\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_8__;\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addRadioType);\n\t\n\t function addRadioType(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setType({\n\t name: 'radio',\n\t template: __webpack_require__(19),\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: {\n\t noFormControl: false\n\t },\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t options: c.arrayOf(c.object),\n\t labelProp: c.string.optional,\n\t valueProp: c.string.optional\n\t })\n\t },\n\t apiCheckInstance: c\n\t });\n\t }\n\t addRadioType.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addCheckboxType);\n\t\n\t function addCheckboxType(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setType({\n\t name: 'checkbox',\n\t template: __webpack_require__(20),\n\t wrapper: ['bootstrapHasError'],\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t label: c.string\n\t })\n\t },\n\t apiCheckInstance: c\n\t });\n\t }\n\t addCheckboxType.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\tvar ngModuleName = 'formlyBootstrap';\n\tvar angular = __webpack_require__(4);\n\tvar ngModule = angular.module(ngModuleName, [__webpack_require__(2)]);\n\tngModule.constant('formlyBootstrapApiCheck', __webpack_require__(3)({\n\t output: {\n\t prefix: 'angular-formly-bootstrap'\n\t }\n\t}));\n\tngModule.constant('formlyBootstrapVersion', (\"4.3.2\"));\n\t\n\t__webpack_require__(5)(ngModule);\n\t__webpack_require__(6)(ngModule);\n\t__webpack_require__(7)(ngModule);\n\t\n\texports['default'] = ngModuleName;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addInputType);\n\t\n\t function addInputType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'input',\n\t template: '<input class=\"form-control\" ng-model=\"model[options.key]\">',\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError']\n\t });\n\t }\n\t addInputType.$inject = [\"formlyConfigProvider\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tfunction _defineProperty(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); }\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addSelectType);\n\t\n\t var template = '<select class=\"form-control\" ng-model=\"model[options.key]\"></select>';\n\t\n\t function addSelectType(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setType({\n\t name: 'select',\n\t template: template,\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: function defaultOptions(options) {\n\t /* jshint maxlen:195 */\n\t var ngOptions = options.templateOptions.ngOptions || 'option[to.valueProp || \\'value\\'] as option[to.labelProp || \\'name\\'] group by option[to.groupProp || \\'group\\'] for option in to.options';\n\t return {\n\t ngModelAttrs: _defineProperty({}, ngOptions, {\n\t value: 'ng-options'\n\t })\n\t };\n\t },\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t options: c.arrayOf(c.object),\n\t labelProp: c.string.optional,\n\t valueProp: c.string.optional,\n\t groupProp: c.string.optional\n\t })\n\t },\n\t apiCheckInstance: c\n\t });\n\t }\n\t addSelectType.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addTextareaType);\n\t\n\t function addTextareaType(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setType({\n\t name: 'textarea',\n\t template: '<textarea class=\"form-control\" ng-model=\"model[options.key]\"></textarea>',\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: {\n\t ngModelAttrs: {\n\t rows: { attribute: 'rows' },\n\t cols: { attribute: 'cols' }\n\t }\n\t },\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t rows: c.number.optional,\n\t cols: c.number.optional\n\t })\n\t },\n\t apiCheckInstance: c\n\t });\n\t }\n\t addTextareaType.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.run(addAddonsManipulator);\n\t\n\t function addAddonsManipulator(formlyConfig, formlyBootstrapApiCheck) {\n\t var addonTemplate = __webpack_require__(22);\n\t var addonChecker = formlyBootstrapApiCheck.shape({\n\t 'class': formlyBootstrapApiCheck.string.optional,\n\t text: formlyBootstrapApiCheck.string.optional,\n\t onClick: formlyBootstrapApiCheck.func.optional\n\t }).strict.optional;\n\t var api = formlyBootstrapApiCheck.shape({\n\t templateOptions: formlyBootstrapApiCheck.shape({\n\t addonLeft: addonChecker,\n\t addonRight: addonChecker\n\t })\n\t });\n\t formlyConfig.templateManipulators.preWrapper.push(function (template, options) {\n\t if (!options.templateOptions.addonLeft && !options.templateOptions.addonRight) {\n\t return template;\n\t }\n\t formlyBootstrapApiCheck.warn([api], [options]);\n\t return addonTemplate.replace('<formly-transclude></formly-transclude>', template);\n\t });\n\t }\n\t addAddonsManipulator.$inject = [\"formlyConfig\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.run(addDescriptionManipulator);\n\t\n\t function addDescriptionManipulator(formlyConfig) {\n\t formlyConfig.templateManipulators.preWrapper.push(function ariaDescribedBy(template, options, scope) {\n\t if (angular.isDefined(options.templateOptions.description)) {\n\t var el = document.createElement('div');\n\t el.appendChild(angular.element(template)[0]);\n\t el.appendChild(angular.element('<p id=\"' + scope.id + '_description\"' + 'class=\"help-block\"' + 'ng-if=\"to.description\">' + '{{to.description}}' + '</p>')[0]);\n\t var modelEls = angular.element(el.querySelectorAll('[ng-model]'));\n\t if (modelEls) {\n\t modelEls.attr('aria-describedby', scope.id + '_description');\n\t }\n\t return el.innerHTML;\n\t } else {\n\t return template;\n\t }\n\t });\n\t }\n\t addDescriptionManipulator.$inject = [\"formlyConfig\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"<div>\\n <label for=\\\"{{id}}\\\" class=\\\"control-label\\\">\\n {{to.label}}\\n {{to.required ? '*' : ''}}\\n </label>\\n <formly-transclude></formly-transclude>\\n</div>\\n\"\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"<div class=\\\"form-group\\\" ng-class=\\\"{'has-error': showError}\\\">\\n <formly-transclude></formly-transclude>\\n</div>\\n\"\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"<div class=\\\"radio-group\\\">\\n <div ng-repeat=\\\"(key, option) in to.options\\\" class=\\\"radio\\\">\\n <label>\\n <input type=\\\"radio\\\"\\n id=\\\"{{id + '_'+ $index}}\\\"\\n tabindex=\\\"0\\\"\\n ng-value=\\\"option[to.valueProp || 'value']\\\"\\n ng-model=\\\"model[options.key]\\\">\\n {{option[to.labelProp || 'name']}}\\n </label>\\n </div>\\n</div>\\n\"\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"<div class=\\\"checkbox\\\">\\n\\t<label>\\n\\t\\t<input type=\\\"checkbox\\\"\\n class=\\\"formly-field-checkbox\\\"\\n\\t\\t ng-model=\\\"model[options.key]\\\">\\n\\t\\t{{to.label}}\\n\\t\\t{{to.required ? '*' : ''}}\\n\\t</label>\\n</div>\\n\"\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"<div class=\\\"radio-group\\\">\\n <div ng-repeat=\\\"(key, option) in to.options\\\" class=\\\"checkbox\\\">\\n <label>\\n <input type=\\\"checkbox\\\"\\n id=\\\"{{id + '_'+ $index}}\\\"\\n ng-model=\\\"multiCheckbox.checked[$index]\\\"\\n ng-change=\\\"multiCheckbox.change()\\\">\\n {{option[to.labelProp || 'name']}}\\n </label>\\n </div>\\n</div>\\n\"\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"<div ng-class=\\\"{'input-group': to.addonLeft || to.addonRight}\\\">\\n <div class=\\\"input-group-addon\\\"\\n ng-if=\\\"to.addonLeft\\\"\\n ng-style=\\\"{cursor: to.addonLeft.onClick ? 'pointer' : 'inherit'}\\\"\\n ng-click=\\\"to.addonLeft.onClick(options, this)\\\">\\n <i class=\\\"{{to.addonLeft.class}}\\\" ng-if=\\\"to.addonLeft.class\\\"></i>\\n <span ng-if=\\\"to.addonLeft.text\\\">{{to.addonLeft.text}}</span>\\n </div>\\n <formly-transclude></formly-transclude>\\n <div class=\\\"input-group-addon\\\"\\n ng-if=\\\"to.addonRight\\\"\\n ng-style=\\\"{cursor: to.addonRight.onClick ? 'pointer' : 'inherit'}\\\"\\n ng-click=\\\"to.addonRight.onClick(options, this)\\\">\\n <i class=\\\"{{to.addonRight.class}}\\\" ng-if=\\\"to.addonRight.class\\\"></i>\\n <span ng-if=\\\"to.addonRight.text\\\">{{to.addonRight.text}}</span>\\n </div>\\n</div>\\n\"\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=angular-formly-templates-bootstrap.js.map//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2FuZ3VsYXItZm9ybWx5LXRlbXBsYXRlcy1ib290c3RyYXAvZGlzdC9hbmd1bGFyLWZvcm1seS10ZW1wbGF0ZXMtYm9vdHN0cmFwLmpzP2Y1YjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0EsTUFBTSxHQUFHLCtEQUErRDtBQUN4RTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRix1Q0FBdUMsdUNBQXVDLGtCQUFrQjs7QUFFaEc7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFRO0FBQ1I7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRiw0Q0FBNEMseUNBQXlDLHFFQUFxRSxFQUFFOztBQUU1SjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFRO0FBQ1I7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixvQkFBb0I7QUFDdEMsa0JBQWtCO0FBQ2xCO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLFFBQVE7QUFDUjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUlBQXVJLGdCQUFnQjtBQUN2SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBLDJDQUEyQyxJQUFJLG1DQUFtQyxVQUFVLFFBQVEsd0JBQXdCOztBQUU1SCxPQUFPO0FBQ1A7QUFDQTs7QUFFQSx5REFBeUQsdUJBQXVCOztBQUVoRixPQUFPO0FBQ1A7QUFDQTs7QUFFQSxpTEFBaUwsa0JBQWtCLG1KQUFtSixnQ0FBZ0M7O0FBRXRYLE9BQU87QUFDUDtBQUNBOztBQUVBLHFMQUFxTCxVQUFVLFFBQVEsd0JBQXdCOztBQUUvTixPQUFPO0FBQ1A7QUFDQTs7QUFFQSx1TEFBdUwsa0JBQWtCLHlIQUF5SCxnQ0FBZ0M7O0FBRWxXLE9BQU87QUFDUDtBQUNBOztBQUVBLG9DQUFvQyw2Q0FBNkMsaUdBQWlHLHFEQUFxRCxxRkFBcUYsb0JBQW9CLGtGQUFrRixtQkFBbUIsK0pBQStKLHNEQUFzRCxzRkFBc0YscUJBQXFCLG9GQUFvRixvQkFBb0I7O0FBRTcxQjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGFuZ3VsYXItZm9ybWx5LXRlbXBsYXRlcy1ib290c3RyYXAgdmVyc2lvbiA0LjMuMiBidWlsdCB3aXRoIOKZpSBieSBBc3RyaXNtIDxhc3RyaXNtc0BnbWFpbC5jb20+LCBLZW50IEMuIERvZGRzIDxrZW50QGRvZGRzZmFtaWx5LnVzPiAow7Mgw6xfw60pPcOzw7I9KMOsX8OtIMOyKVxuXG4oZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJhbmd1bGFyLWZvcm1seVwiKSwgcmVxdWlyZShcImFwaS1jaGVja1wiKSwgcmVxdWlyZShcImFuZ3VsYXJcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wiYW5ndWxhci1mb3JtbHlcIiwgXCJhcGktY2hlY2tcIiwgXCJhbmd1bGFyXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIm5nRm9ybWx5VGVtcGxhdGVzQm9vdHN0cmFwXCJdID0gZmFjdG9yeShyZXF1aXJlKFwiYW5ndWxhci1mb3JtbHlcIiksIHJlcXVpcmUoXCJhcGktY2hlY2tcIiksIHJlcXVpcmUoXCJhbmd1bGFyXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJuZ0Zvcm1seVRlbXBsYXRlc0Jvb3RzdHJhcFwiXSA9IGZhY3Rvcnkocm9vdFtcIm5nRm9ybWx5XCJdLCByb290W1wiYXBpQ2hlY2tcIl0sIHJvb3RbXCJhbmd1bGFyXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzNfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV84X18pIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cbi8qKiovIH0sXG4vKiAxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAobmdNb2R1bGUpIHtcblx0ICBuZ01vZHVsZS5jb25maWcoYWRkQ2hlY2tib3hUeXBlKTtcblx0XG5cdCAgZnVuY3Rpb24gYWRkQ2hlY2tib3hUeXBlKGZvcm1seUNvbmZpZ1Byb3ZpZGVyLCBmb3JtbHlCb290c3RyYXBBcGlDaGVjaykge1xuXHQgICAgdmFyIGMgPSBmb3JtbHlCb290c3RyYXBBcGlDaGVjaztcblx0ICAgIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoe1xuXHQgICAgICBuYW1lOiAnbXVsdGlDaGVja2JveCcsXG5cdCAgICAgIHRlbXBsYXRlOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKSxcblx0ICAgICAgd3JhcHBlcjogWydib290c3RyYXBMYWJlbCcsICdib290c3RyYXBIYXNFcnJvciddLFxuXHQgICAgICBhcGlDaGVjazoge1xuXHQgICAgICAgIHRlbXBsYXRlT3B0aW9uczogYy5zaGFwZSh7XG5cdCAgICAgICAgICBvcHRpb25zOiBjLmFycmF5T2YoYy5vYmplY3QpLFxuXHQgICAgICAgICAgbGFiZWxQcm9wOiBjLnN0cmluZy5vcHRpb25hbCxcblx0ICAgICAgICAgIHZhbHVlUHJvcDogYy5zdHJpbmcub3B0aW9uYWxcblx0ICAgICAgICB9KVxuXHQgICAgICB9LFxuXHQgICAgICBkZWZhdWx0T3B0aW9uczoge1xuXHQgICAgICAgIG5vRm9ybUNvbnRyb2w6IGZhbHNlLFxuXHQgICAgICAgIG5nTW9kZWxBdHRyczoge1xuXHQgICAgICAgICAgcmVxdWlyZWQ6IHtcblx0ICAgICAgICAgICAgYXR0cmlidXRlOiAnJyxcblx0ICAgICAgICAgICAgYm91bmQ6ICcnXG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICBhcGlDaGVja0luc3RhbmNlOiBjLFxuXHQgICAgICBjb250cm9sbGVyOiAvKiBAbmdJbmplY3QgKi9bXCIkc2NvcGVcIiwgZnVuY3Rpb24gY29udHJvbGxlcigkc2NvcGUpIHtcblx0ICAgICAgICB2YXIgdG8gPSAkc2NvcGUudG87XG5cdCAgICAgICAgdmFyIG9wdHMgPSAkc2NvcGUub3B0aW9ucztcblx0ICAgICAgICAkc2NvcGUubXVsdGlDaGVja2JveCA9IHtcblx0ICAgICAgICAgIGNoZWNrZWQ6IFtdLFxuXHQgICAgICAgICAgY2hhbmdlOiBzZXRNb2RlbFxuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIC8vIGluaXRpYWxpemUgdGhlIGNoZWNrYm94ZXMgY2hlY2sgcHJvcGVydHlcblx0ICAgICAgICB2YXIgbW9kZWxWYWx1ZSA9ICRzY29wZS5tb2RlbFtvcHRzLmtleV07XG5cdCAgICAgICAgaWYgKGFuZ3VsYXIuaXNBcnJheShtb2RlbFZhbHVlKSkge1xuXHQgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHZhbHVlUHJvcCA9IHRvLnZhbHVlUHJvcCB8fCAndmFsdWUnO1xuXHQgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2godG8ub3B0aW9ucywgZnVuY3Rpb24gKHYsIGluZGV4KSB7XG5cdCAgICAgICAgICAgICAgJHNjb3BlLm11bHRpQ2hlY2tib3guY2hlY2tlZFtpbmRleF0gPSBtb2RlbFZhbHVlLmluZGV4T2Yodlt2YWx1ZVByb3BdKSAhPT0gLTE7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgfSkoKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIGZ1bmN0aW9uIGNoZWNrVmFsaWRpdHkoZXhwcmVzc2lvblZhbHVlKSB7XG5cdCAgICAgICAgICB2YXIgdmFsaWQgPSBhbmd1bGFyLmlzQXJyYXkoJHNjb3BlLm1vZGVsW29wdHMua2V5XSkgJiYgJHNjb3BlLm1vZGVsW29wdHMua2V5XS5sZW5ndGggPiAwICYmIGV4cHJlc3Npb25WYWx1ZTtcblx0XG5cdCAgICAgICAgICAkc2NvcGUuZmMuJHNldFZhbGlkaXR5KCdyZXF1aXJlZCcsIHZhbGlkKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIGZ1bmN0aW9uIHNldE1vZGVsKCkge1xuXHQgICAgICAgICAgJHNjb3BlLm1vZGVsW29wdHMua2V5XSA9IFtdO1xuXHQgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5tdWx0aUNoZWNrYm94LmNoZWNrZWQsIGZ1bmN0aW9uIChjaGVja2JveCwgaW5kZXgpIHtcblx0ICAgICAgICAgICAgaWYgKGNoZWNrYm94KSB7XG5cdCAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsW29wdHMua2V5XS5wdXNoKHRvLm9wdGlvbnNbaW5kZXhdW3RvLnZhbHVlUHJvcCB8fCAndmFsdWUnXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pO1xuXHRcblx0ICAgICAgICAgIC8vIE11c3QgbWFrZSBzdXJlIHdlIG1hcmsgYXMgdG91Y2hlZCBiZWNhdXNlIG9ubHkgdGhlIGxhc3QgY2hlY2tib3ggZHVlIHRvIGEgYnVnIGluIGFuZ3VsYXIuXG5cdCAgICAgICAgICAkc2NvcGUuZmMuJHNldFRvdWNoZWQoKTtcblx0ICAgICAgICAgIGNoZWNrVmFsaWRpdHkodHJ1ZSk7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICBpZiAob3B0cy5leHByZXNzaW9uUHJvcGVydGllcyAmJiBvcHRzLmV4cHJlc3Npb25Qcm9wZXJ0aWVzLnJlcXVpcmVkKSB7XG5cdCAgICAgICAgICAkc2NvcGUuJHdhdGNoKCRzY29wZS5vcHRpb25zLmV4cHJlc3Npb25Qcm9wZXJ0aWVzLnJlcXVpcmVkLCBmdW5jdGlvbiAobmV3VmFsdWUpIHtcblx0ICAgICAgICAgICAgY2hlY2tWYWxpZGl0eShuZXdWYWx1ZSk7XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIGlmICgkc2NvcGUudG8ucmVxdWlyZWQpIHtcblx0ICAgICAgICAgIHZhciB1bndhdGNoRm9ybUNvbnRyb2wgPSAkc2NvcGUuJHdhdGNoKCdmYycsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuXHQgICAgICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNoZWNrVmFsaWRpdHkodHJ1ZSk7XG5cdCAgICAgICAgICAgIHVud2F0Y2hGb3JtQ29udHJvbDtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfV1cblx0ICAgIH0pO1xuXHQgIH1cblx0ICBhZGRDaGVja2JveFR5cGUuJGluamVjdCA9IFtcImZvcm1seUNvbmZpZ1Byb3ZpZGVyXCIsIFwiZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2tcIl07XG5cdH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8qKiovIH0sXG4vKiAyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fO1xuXG4vKioqLyB9LFxuLyogMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzNfXztcblxuLyoqKi8gfSxcbi8qIDQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIHNvbWUgdmVyc2lvbnMgb2YgYW5ndWxhciBkb24ndCBleHBvcnQgdGhlIGFuZ3VsYXIgbW9kdWxlIHByb3Blcmx5LFxuXHQvLyBzbyB3ZSBnZXQgaXQgZnJvbSB3aW5kb3cgaW4gdGhpcyBjYXNlLlxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHR2YXIgYW5ndWxhciA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG5cdGlmICghYW5ndWxhci52ZXJzaW9uKSB7XG5cdCAgYW5ndWxhciA9IHdpbmRvdy5hbmd1bGFyO1xuXHR9XG5cdG1vZHVsZS5leHBvcnRzID0gYW5ndWxhcjtcblxuLyoqKi8gfSxcbi8qIDUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChuZ01vZHVsZSkge1xuXHQgIG5nTW9kdWxlLmNvbmZpZyhhZGRXcmFwcGVycyk7XG5cdFxuXHQgIGZ1bmN0aW9uIGFkZFdyYXBwZXJzKGZvcm1seUNvbmZpZ1Byb3ZpZGVyLCBmb3JtbHlCb290c3RyYXBBcGlDaGVjaykge1xuXHQgICAgdmFyIGMgPSBmb3JtbHlCb290c3RyYXBBcGlDaGVjaztcblx0ICAgIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFdyYXBwZXIoW3tcblx0ICAgICAgbmFtZTogJ2Jvb3RzdHJhcExhYmVsJyxcblx0ICAgICAgdGVtcGxhdGU6IF9fd2VicGFja19yZXF1aXJlX18oMTcpLFxuXHQgICAgICBhcGlDaGVjazoge1xuXHQgICAgICAgIHRlbXBsYXRlT3B0aW9uczogYy5zaGFwZSh7XG5cdCAgICAgICAgICBsYWJlbDogYy5zdHJpbmcsXG5cdCAgICAgICAgICByZXF1aXJlZDogYy5ib29sLm9wdGlvbmFsXG5cdCAgICAgICAgfSlcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2tJbnN0YW5jZTogY1xuXHQgICAgfSwgeyBuYW1lOiAnYm9vdHN0cmFwSGFzRXJyb3InLCB0ZW1wbGF0ZTogX193ZWJwYWNrX3JlcXVpcmVfXygxOCkgfV0pO1xuXHQgIH1cblx0ICBhZGRXcmFwcGVycy4kaW5qZWN0ID0gW1wiZm9ybWx5Q29uZmlnUHJvdmlkZXJcIiwgXCJmb3JtbHlCb290c3RyYXBBcGlDaGVja1wiXTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChuZ01vZHVsZSkge1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTApKG5nTW9kdWxlKTtcblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKG5nTW9kdWxlKTtcblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKShuZ01vZHVsZSk7XG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg5KShuZ01vZHVsZSk7XG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxMykobmdNb2R1bGUpO1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTQpKG5nTW9kdWxlKTtcblx0fTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKioqLyB9LFxuLyogNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHRcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXHRcblx0dmFyIF9hZGRvbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblx0XG5cdHZhciBfYWRkb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FkZG9ucyk7XG5cdFxuXHR2YXIgX2Rlc2NyaXB0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG5cdFxuXHR2YXIgX2Rlc2NyaXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Rlc2NyaXB0aW9uKTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChuZ01vZHVsZSkge1xuXHQgICgwLCBfYWRkb25zMlsnZGVmYXVsdCddKShuZ01vZHVsZSk7XG5cdCAgKDAsIF9kZXNjcmlwdGlvbjJbJ2RlZmF1bHQnXSkobmdNb2R1bGUpO1xuXHR9O1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8qKiovIH0sXG4vKiA4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfOF9fO1xuXG4vKioqLyB9LFxuLyogOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHRcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcblx0ZXhwb3J0c1snZGVmYXVsdCddID0gZnVuY3Rpb24gKG5nTW9kdWxlKSB7XG5cdCAgbmdNb2R1bGUuY29uZmlnKGFkZFJhZGlvVHlwZSk7XG5cdFxuXHQgIGZ1bmN0aW9uIGFkZFJhZGlvVHlwZShmb3JtbHlDb25maWdQcm92aWRlciwgZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2spIHtcblx0ICAgIHZhciBjID0gZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2s7XG5cdCAgICBmb3JtbHlDb25maWdQcm92aWRlci5zZXRUeXBlKHtcblx0ICAgICAgbmFtZTogJ3JhZGlvJyxcblx0ICAgICAgdGVtcGxhdGU6IF9fd2VicGFja19yZXF1aXJlX18oMTkpLFxuXHQgICAgICB3cmFwcGVyOiBbJ2Jvb3RzdHJhcExhYmVsJywgJ2Jvb3RzdHJhcEhhc0Vycm9yJ10sXG5cdCAgICAgIGRlZmF1bHRPcHRpb25zOiB7XG5cdCAgICAgICAgbm9Gb3JtQ29udHJvbDogZmFsc2Vcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2s6IHtcblx0ICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IGMuc2hhcGUoe1xuXHQgICAgICAgICAgb3B0aW9uczogYy5hcnJheU9mKGMub2JqZWN0KSxcblx0ICAgICAgICAgIGxhYmVsUHJvcDogYy5zdHJpbmcub3B0aW9uYWwsXG5cdCAgICAgICAgICB2YWx1ZVByb3A6IGMuc3RyaW5nLm9wdGlvbmFsXG5cdCAgICAgICAgfSlcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2tJbnN0YW5jZTogY1xuXHQgICAgfSk7XG5cdCAgfVxuXHQgIGFkZFJhZGlvVHlwZS4kaW5qZWN0ID0gW1wiZm9ybWx5Q29uZmlnUHJvdmlkZXJcIiwgXCJmb3JtbHlCb290c3RyYXBBcGlDaGVja1wiXTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDEwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAobmdNb2R1bGUpIHtcblx0ICBuZ01vZHVsZS5jb25maWcoYWRkQ2hlY2tib3hUeXBlKTtcblx0XG5cdCAgZnVuY3Rpb24gYWRkQ2hlY2tib3hUeXBlKGZvcm1seUNvbmZpZ1Byb3ZpZGVyLCBmb3JtbHlCb290c3RyYXBBcGlDaGVjaykge1xuXHQgICAgdmFyIGMgPSBmb3JtbHlCb290c3RyYXBBcGlDaGVjaztcblx0ICAgIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoe1xuXHQgICAgICBuYW1lOiAnY2hlY2tib3gnLFxuXHQgICAgICB0ZW1wbGF0ZTogX193ZWJwYWNrX3JlcXVpcmVfXygyMCksXG5cdCAgICAgIHdyYXBwZXI6IFsnYm9vdHN0cmFwSGFzRXJyb3InXSxcblx0ICAgICAgYXBpQ2hlY2s6IHtcblx0ICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IGMuc2hhcGUoe1xuXHQgICAgICAgICAgbGFiZWw6IGMuc3RyaW5nXG5cdCAgICAgICAgfSlcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2tJbnN0YW5jZTogY1xuXHQgICAgfSk7XG5cdCAgfVxuXHQgIGFkZENoZWNrYm94VHlwZS4kaW5qZWN0ID0gW1wiZm9ybWx5Q29uZmlnUHJvdmlkZXJcIiwgXCJmb3JtbHlCb290c3RyYXBBcGlDaGVja1wiXTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDExICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdHZhciBuZ01vZHVsZU5hbWUgPSAnZm9ybWx5Qm9vdHN0cmFwJztcblx0dmFyIGFuZ3VsYXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgbmdNb2R1bGUgPSBhbmd1bGFyLm1vZHVsZShuZ01vZHVsZU5hbWUsIFtfX3dlYnBhY2tfcmVxdWlyZV9fKDIpXSk7XG5cdG5nTW9kdWxlLmNvbnN0YW50KCdmb3JtbHlCb290c3RyYXBBcGlDaGVjaycsIF9fd2VicGFja19yZXF1aXJlX18oMykoe1xuXHQgIG91dHB1dDoge1xuXHQgICAgcHJlZml4OiAnYW5ndWxhci1mb3JtbHktYm9vdHN0cmFwJ1xuXHQgIH1cblx0fSkpO1xuXHRuZ01vZHVsZS5jb25zdGFudCgnZm9ybWx5Qm9vdHN0cmFwVmVyc2lvbicsIChcIjQuMy4yXCIpKTtcblx0XG5cdF9fd2VicGFja19yZXF1aXJlX18oNSkobmdNb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDYpKG5nTW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg3KShuZ01vZHVsZSk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBuZ01vZHVsZU5hbWU7XG5cdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKioqLyB9LFxuLyogMTIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChuZ01vZHVsZSkge1xuXHQgIG5nTW9kdWxlLmNvbmZpZyhhZGRJbnB1dFR5cGUpO1xuXHRcblx0ICBmdW5jdGlvbiBhZGRJbnB1dFR5cGUoZm9ybWx5Q29uZmlnUHJvdmlkZXIpIHtcblx0ICAgIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoe1xuXHQgICAgICBuYW1lOiAnaW5wdXQnLFxuXHQgICAgICB0ZW1wbGF0ZTogJzxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5nLW1vZGVsPVwibW9kZWxbb3B0aW9ucy5rZXldXCI+Jyxcblx0ICAgICAgd3JhcHBlcjogWydib290c3RyYXBMYWJlbCcsICdib290c3RyYXBIYXNFcnJvciddXG5cdCAgICB9KTtcblx0ICB9XG5cdCAgYWRkSW5wdXRUeXBlLiRpbmplY3QgPSBbXCJmb3JtbHlDb25maWdQcm92aWRlclwiXTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDEzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHRmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAobmdNb2R1bGUpIHtcblx0ICBuZ01vZHVsZS5jb25maWcoYWRkU2VsZWN0VHlwZSk7XG5cdFxuXHQgIHZhciB0ZW1wbGF0ZSA9ICc8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmctbW9kZWw9XCJtb2RlbFtvcHRpb25zLmtleV1cIj48L3NlbGVjdD4nO1xuXHRcblx0ICBmdW5jdGlvbiBhZGRTZWxlY3RUeXBlKGZvcm1seUNvbmZpZ1Byb3ZpZGVyLCBmb3JtbHlCb290c3RyYXBBcGlDaGVjaykge1xuXHQgICAgdmFyIGMgPSBmb3JtbHlCb290c3RyYXBBcGlDaGVjaztcblx0ICAgIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoe1xuXHQgICAgICBuYW1lOiAnc2VsZWN0Jyxcblx0ICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuXHQgICAgICB3cmFwcGVyOiBbJ2Jvb3RzdHJhcExhYmVsJywgJ2Jvb3RzdHJhcEhhc0Vycm9yJ10sXG5cdCAgICAgIGRlZmF1bHRPcHRpb25zOiBmdW5jdGlvbiBkZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG5cdCAgICAgICAgLyoganNoaW50IG1heGxlbjoxOTUgKi9cblx0ICAgICAgICB2YXIgbmdPcHRpb25zID0gb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMubmdPcHRpb25zIHx8ICdvcHRpb25bdG8udmFsdWVQcm9wIHx8IFxcJ3ZhbHVlXFwnXSBhcyBvcHRpb25bdG8ubGFiZWxQcm9wIHx8IFxcJ25hbWVcXCddIGdyb3VwIGJ5IG9wdGlvblt0by5ncm91cFByb3AgfHwgXFwnZ3JvdXBcXCddIGZvciBvcHRpb24gaW4gdG8ub3B0aW9ucyc7XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgIG5nTW9kZWxBdHRyczogX2RlZmluZVByb3BlcnR5KHt9LCBuZ09wdGlvbnMsIHtcblx0ICAgICAgICAgICAgdmFsdWU6ICduZy1vcHRpb25zJ1xuXHQgICAgICAgICAgfSlcblx0ICAgICAgICB9O1xuXHQgICAgICB9LFxuXHQgICAgICBhcGlDaGVjazoge1xuXHQgICAgICAgIHRlbXBsYXRlT3B0aW9uczogYy5zaGFwZSh7XG5cdCAgICAgICAgICBvcHRpb25zOiBjLmFycmF5T2YoYy5vYmplY3QpLFxuXHQgICAgICAgICAgbGFiZWxQcm9wOiBjLnN0cmluZy5vcHRpb25hbCxcblx0ICAgICAgICAgIHZhbHVlUHJvcDogYy5zdHJpbmcub3B0aW9uYWwsXG5cdCAgICAgICAgICBncm91cFByb3A6IGMuc3RyaW5nLm9wdGlvbmFsXG5cdCAgICAgICAgfSlcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2tJbnN0YW5jZTogY1xuXHQgICAgfSk7XG5cdCAgfVxuXHQgIGFkZFNlbGVjdFR5cGUuJGluamVjdCA9IFtcImZvcm1seUNvbmZpZ1Byb3ZpZGVyXCIsIFwiZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2tcIl07XG5cdH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8qKiovIH0sXG4vKiAxNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHRcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcblx0ZXhwb3J0c1snZGVmYXVsdCddID0gZnVuY3Rpb24gKG5nTW9kdWxlKSB7XG5cdCAgbmdNb2R1bGUuY29uZmlnKGFkZFRleHRhcmVhVHlwZSk7XG5cdFxuXHQgIGZ1bmN0aW9uIGFkZFRleHRhcmVhVHlwZShmb3JtbHlDb25maWdQcm92aWRlciwgZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2spIHtcblx0ICAgIHZhciBjID0gZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2s7XG5cdCAgICBmb3JtbHlDb25maWdQcm92aWRlci5zZXRUeXBlKHtcblx0ICAgICAgbmFtZTogJ3RleHRhcmVhJyxcblx0ICAgICAgdGVtcGxhdGU6ICc8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuZy1tb2RlbD1cIm1vZGVsW29wdGlvbnMua2V5XVwiPjwvdGV4dGFyZWE+Jyxcblx0ICAgICAgd3JhcHBlcjogWydib290c3RyYXBMYWJlbCcsICdib290c3RyYXBIYXNFcnJvciddLFxuXHQgICAgICBkZWZhdWx0T3B0aW9uczoge1xuXHQgICAgICAgIG5nTW9kZWxBdHRyczoge1xuXHQgICAgICAgICAgcm93czogeyBhdHRyaWJ1dGU6ICdyb3dzJyB9LFxuXHQgICAgICAgICAgY29sczogeyBhdHRyaWJ1dGU6ICdjb2xzJyB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICBhcGlDaGVjazoge1xuXHQgICAgICAgIHRlbXBsYXRlT3B0aW9uczogYy5zaGFwZSh7XG5cdCAgICAgICAgICByb3dzOiBjLm51bWJlci5vcHRpb25hbCxcblx0ICAgICAgICAgIGNvbHM6IGMubnVtYmVyLm9wdGlvbmFsXG5cdCAgICAgICAgfSlcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2tJbnN0YW5jZTogY1xuXHQgICAgfSk7XG5cdCAgfVxuXHQgIGFkZFRleHRhcmVhVHlwZS4kaW5qZWN0ID0gW1wiZm9ybWx5Q29uZmlnUHJvdmlkZXJcIiwgXCJmb3JtbHlCb290c3RyYXBBcGlDaGVja1wiXTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDE1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAobmdNb2R1bGUpIHtcblx0ICBuZ01vZHVsZS5ydW4oYWRkQWRkb25zTWFuaXB1bGF0b3IpO1xuXHRcblx0ICBmdW5jdGlvbiBhZGRBZGRvbnNNYW5pcHVsYXRvcihmb3JtbHlDb25maWcsIGZvcm1seUJvb3RzdHJhcEFwaUNoZWNrKSB7XG5cdCAgICB2YXIgYWRkb25UZW1wbGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xuXHQgICAgdmFyIGFkZG9uQ2hlY2tlciA9IGZvcm1seUJvb3RzdHJhcEFwaUNoZWNrLnNoYXBlKHtcblx0ICAgICAgJ2NsYXNzJzogZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2suc3RyaW5nLm9wdGlvbmFsLFxuXHQgICAgICB0ZXh0OiBmb3JtbHlCb290c3RyYXBBcGlDaGVjay5zdHJpbmcub3B0aW9uYWwsXG5cdCAgICAgIG9uQ2xpY2s6IGZvcm1seUJvb3RzdHJhcEFwaUNoZWNrLmZ1bmMub3B0aW9uYWxcblx0ICAgIH0pLnN0cmljdC5vcHRpb25hbDtcblx0ICAgIHZhciBhcGkgPSBmb3JtbHlCb290c3RyYXBBcGlDaGVjay5zaGFwZSh7XG5cdCAgICAgIHRlbXBsYXRlT3B0aW9uczogZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgICAgIGFkZG9uTGVmdDogYWRkb25DaGVja2VyLFxuXHQgICAgICAgIGFkZG9uUmlnaHQ6IGFkZG9uQ2hlY2tlclxuXHQgICAgICB9KVxuXHQgICAgfSk7XG5cdCAgICBmb3JtbHlDb25maWcudGVtcGxhdGVNYW5pcHVsYXRvcnMucHJlV3JhcHBlci5wdXNoKGZ1bmN0aW9uICh0ZW1wbGF0ZSwgb3B0aW9ucykge1xuXHQgICAgICBpZiAoIW9wdGlvbnMudGVtcGxhdGVPcHRpb25zLmFkZG9uTGVmdCAmJiAhb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuYWRkb25SaWdodCkge1xuXHQgICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcblx0ICAgICAgfVxuXHQgICAgICBmb3JtbHlCb290c3RyYXBBcGlDaGVjay53YXJuKFthcGldLCBbb3B0aW9uc10pO1xuXHQgICAgICByZXR1cm4gYWRkb25UZW1wbGF0ZS5yZXBsYWNlKCc8Zm9ybWx5LXRyYW5zY2x1ZGU+PC9mb3JtbHktdHJhbnNjbHVkZT4nLCB0ZW1wbGF0ZSk7XG5cdCAgICB9KTtcblx0ICB9XG5cdCAgYWRkQWRkb25zTWFuaXB1bGF0b3IuJGluamVjdCA9IFtcImZvcm1seUNvbmZpZ1wiLCBcImZvcm1seUJvb3RzdHJhcEFwaUNoZWNrXCJdO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKioqLyB9LFxuLyogMTYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChuZ01vZHVsZSkge1xuXHQgIG5nTW9kdWxlLnJ1bihhZGREZXNjcmlwdGlvbk1hbmlwdWxhdG9yKTtcblx0XG5cdCAgZnVuY3Rpb24gYWRkRGVzY3JpcHRpb25NYW5pcHVsYXRvcihmb3JtbHlDb25maWcpIHtcblx0ICAgIGZvcm1seUNvbmZpZy50ZW1wbGF0ZU1hbmlwdWxhdG9ycy5wcmVXcmFwcGVyLnB1c2goZnVuY3Rpb24gYXJpYURlc2NyaWJlZEJ5KHRlbXBsYXRlLCBvcHRpb25zLCBzY29wZSkge1xuXHQgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuZGVzY3JpcHRpb24pKSB7XG5cdCAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdCAgICAgICAgZWwuYXBwZW5kQ2hpbGQoYW5ndWxhci5lbGVtZW50KHRlbXBsYXRlKVswXSk7XG5cdCAgICAgICAgZWwuYXBwZW5kQ2hpbGQoYW5ndWxhci5lbGVtZW50KCc8cCBpZD1cIicgKyBzY29wZS5pZCArICdfZGVzY3JpcHRpb25cIicgKyAnY2xhc3M9XCJoZWxwLWJsb2NrXCInICsgJ25nLWlmPVwidG8uZGVzY3JpcHRpb25cIj4nICsgJ3t7dG8uZGVzY3JpcHRpb259fScgKyAnPC9wPicpWzBdKTtcblx0ICAgICAgICB2YXIgbW9kZWxFbHMgPSBhbmd1bGFyLmVsZW1lbnQoZWwucXVlcnlTZWxlY3RvckFsbCgnW25nLW1vZGVsXScpKTtcblx0ICAgICAgICBpZiAobW9kZWxFbHMpIHtcblx0ICAgICAgICAgIG1vZGVsRWxzLmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknLCBzY29wZS5pZCArICdfZGVzY3JpcHRpb24nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGVsLmlubmVySFRNTDtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXHQgIH1cblx0ICBhZGREZXNjcmlwdGlvbk1hbmlwdWxhdG9yLiRpbmplY3QgPSBbXCJmb3JtbHlDb25maWdcIl07XG5cdH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8qKiovIH0sXG4vKiAxNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBcIjxkaXY+XFxuICA8bGFiZWwgZm9yPVxcXCJ7e2lkfX1cXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj5cXG4gICAge3t0by5sYWJlbH19XFxuICAgIHt7dG8ucmVxdWlyZWQgPyAnKicgOiAnJ319XFxuICA8L2xhYmVsPlxcbiAgPGZvcm1seS10cmFuc2NsdWRlPjwvZm9ybWx5LXRyYW5zY2x1ZGU+XFxuPC9kaXY+XFxuXCJcblxuLyoqKi8gfSxcbi8qIDE4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCIgbmctY2xhc3M9XFxcInsnaGFzLWVycm9yJzogc2hvd0Vycm9yfVxcXCI+XFxuICA8Zm9ybWx5LXRyYW5zY2x1ZGU+PC9mb3JtbHktdHJhbnNjbHVkZT5cXG48L2Rpdj5cXG5cIlxuXG4vKioqLyB9LFxuLyogMTkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJyYWRpby1ncm91cFxcXCI+XFxuICA8ZGl2IG5nLXJlcGVhdD1cXFwiKGtleSwgb3B0aW9uKSBpbiB0by5vcHRpb25zXFxcIiBjbGFzcz1cXFwicmFkaW9cXFwiPlxcbiAgICA8bGFiZWw+XFxuICAgICAgPGlucHV0IHR5cGU9XFxcInJhZGlvXFxcIlxcbiAgICAgICAgICAgICBpZD1cXFwie3tpZCArICdfJysgJGluZGV4fX1cXFwiXFxuICAgICAgICAgICAgIHRhYmluZGV4PVxcXCIwXFxcIlxcbiAgICAgICAgICAgICBuZy12YWx1ZT1cXFwib3B0aW9uW3RvLnZhbHVlUHJvcCB8fCAndmFsdWUnXVxcXCJcXG4gICAgICAgICAgICAgbmctbW9kZWw9XFxcIm1vZGVsW29wdGlvbnMua2V5XVxcXCI+XFxuICAgICAge3tvcHRpb25bdG8ubGFiZWxQcm9wIHx8ICduYW1lJ119fVxcbiAgICA8L2xhYmVsPlxcbiAgPC9kaXY+XFxuPC9kaXY+XFxuXCJcblxuLyoqKi8gfSxcbi8qIDIwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwiY2hlY2tib3hcXFwiPlxcblxcdDxsYWJlbD5cXG5cXHRcXHQ8aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiXFxuICAgICAgICAgICBjbGFzcz1cXFwiZm9ybWx5LWZpZWxkLWNoZWNrYm94XFxcIlxcblxcdFxcdCAgICAgICBuZy1tb2RlbD1cXFwibW9kZWxbb3B0aW9ucy5rZXldXFxcIj5cXG5cXHRcXHR7e3RvLmxhYmVsfX1cXG5cXHRcXHR7e3RvLnJlcXVpcmVkID8gJyonIDogJyd9fVxcblxcdDwvbGFiZWw+XFxuPC9kaXY+XFxuXCJcblxuLyoqKi8gfSxcbi8qIDIxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwicmFkaW8tZ3JvdXBcXFwiPlxcbiAgPGRpdiBuZy1yZXBlYXQ9XFxcIihrZXksIG9wdGlvbikgaW4gdG8ub3B0aW9uc1xcXCIgY2xhc3M9XFxcImNoZWNrYm94XFxcIj5cXG4gICAgPGxhYmVsPlxcbiAgICAgIDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCJcXG4gICAgICAgICAgICAgaWQ9XFxcInt7aWQgKyAnXycrICRpbmRleH19XFxcIlxcbiAgICAgICAgICAgICBuZy1tb2RlbD1cXFwibXVsdGlDaGVja2JveC5jaGVja2VkWyRpbmRleF1cXFwiXFxuICAgICAgICAgICAgIG5nLWNoYW5nZT1cXFwibXVsdGlDaGVja2JveC5jaGFuZ2UoKVxcXCI+XFxuICAgICAge3tvcHRpb25bdG8ubGFiZWxQcm9wIHx8ICduYW1lJ119fVxcbiAgICA8L2xhYmVsPlxcbiAgPC9kaXY+XFxuPC9kaXY+XFxuXCJcblxuLyoqKi8gfSxcbi8qIDIyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBuZy1jbGFzcz1cXFwieydpbnB1dC1ncm91cCc6IHRvLmFkZG9uTGVmdCB8fCB0by5hZGRvblJpZ2h0fVxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uXFxcIlxcbiAgICAgICAgIG5nLWlmPVxcXCJ0by5hZGRvbkxlZnRcXFwiXFxuICAgICAgICAgbmctc3R5bGU9XFxcIntjdXJzb3I6IHRvLmFkZG9uTGVmdC5vbkNsaWNrID8gJ3BvaW50ZXInIDogJ2luaGVyaXQnfVxcXCJcXG4gICAgICAgICBuZy1jbGljaz1cXFwidG8uYWRkb25MZWZ0Lm9uQ2xpY2sob3B0aW9ucywgdGhpcylcXFwiPlxcbiAgICAgICAgPGkgY2xhc3M9XFxcInt7dG8uYWRkb25MZWZ0LmNsYXNzfX1cXFwiIG5nLWlmPVxcXCJ0by5hZGRvbkxlZnQuY2xhc3NcXFwiPjwvaT5cXG4gICAgICAgIDxzcGFuIG5nLWlmPVxcXCJ0by5hZGRvbkxlZnQudGV4dFxcXCI+e3t0by5hZGRvbkxlZnQudGV4dH19PC9zcGFuPlxcbiAgICA8L2Rpdj5cXG4gICAgPGZvcm1seS10cmFuc2NsdWRlPjwvZm9ybWx5LXRyYW5zY2x1ZGU+XFxuICAgIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uXFxcIlxcbiAgICAgICAgIG5nLWlmPVxcXCJ0by5hZGRvblJpZ2h0XFxcIlxcbiAgICAgICAgIG5nLXN0eWxlPVxcXCJ7Y3Vyc29yOiB0by5hZGRvblJpZ2h0Lm9uQ2xpY2sgPyAncG9pbnRlcicgOiAnaW5oZXJpdCd9XFxcIlxcbiAgICAgICAgIG5nLWNsaWNrPVxcXCJ0by5hZGRvblJpZ2h0Lm9uQ2xpY2sob3B0aW9ucywgdGhpcylcXFwiPlxcbiAgICAgICAgPGkgY2xhc3M9XFxcInt7dG8uYWRkb25SaWdodC5jbGFzc319XFxcIiBuZy1pZj1cXFwidG8uYWRkb25SaWdodC5jbGFzc1xcXCI+PC9pPlxcbiAgICAgICAgPHNwYW4gbmctaWY9XFxcInRvLmFkZG9uUmlnaHQudGV4dFxcXCI+e3t0by5hZGRvblJpZ2h0LnRleHR9fTwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuPC9kaXY+XFxuXCJcblxuLyoqKi8gfVxuLyoqKioqKi8gXSlcbn0pO1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW5ndWxhci1mb3JtbHktdGVtcGxhdGVzLWJvb3RzdHJhcC5qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYW5ndWxhci1mb3JtbHktdGVtcGxhdGVzLWJvb3RzdHJhcC9kaXN0L2FuZ3VsYXItZm9ybWx5LXRlbXBsYXRlcy1ib290c3RyYXAuanNcbi8vIG1vZHVsZSBpZCA9IDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==");
/***/ },
/* 6 */
/***/ function(module, exports, __webpack_require__) {
eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _edaEasyFormViewerMain = __webpack_require__(7);\n\nvar _edaEasyFormViewerMain2 = _interopRequireDefault(_edaEasyFormViewerMain);\n\nvar _edaEasyFormViewerCore = __webpack_require__(12);\n\nvar _edaEasyFormViewerCore2 = _interopRequireDefault(_edaEasyFormViewerCore);\n\nvar _edaEasyFormViewerModelTranslator = __webpack_require__(13);\n\nvar _edaEasyFormViewerModelTranslator2 = _interopRequireDefault(_edaEasyFormViewerModelTranslator);\n\nvar _edaEasyFormViewer = __webpack_require__(16);\n\nvar _edaEasyFormViewer2 = _interopRequireDefault(_edaEasyFormViewer);\n\nvar _easyFormConfig = __webpack_require__(18);\n\nvar _easyFormConfig2 = _interopRequireDefault(_easyFormConfig);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DEP_TO_INJECT_IN_MAIN = [_edaEasyFormViewerMain2.default.name, _edaEasyFormViewerCore2.default.name, _edaEasyFormViewerModelTranslator2.default.name];\n\nvar EASY_FORM_VIEWER_VERSION_NAME = 'easyFormViewerVersion';\nvar EASY_FORM_VIEWER_VERSION_VALUE = _easyFormConfig2.default.formviewer.version;\nvar MAIN_MODULE_NAME = 'eda.easyFormViewer';\n\nvar mainModule = angular.module(MAIN_MODULE_NAME, DEP_TO_INJECT_IN_MAIN).config(_edaEasyFormViewer2.default).value(EASY_FORM_VIEWER_VERSION_NAME, EASY_FORM_VIEWER_VERSION_VALUE);\n\nexports.default = mainModule;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvbWFpbi5qcz83Y2Y3Il0sIm5hbWVzIjpbIkRFUF9UT19JTkpFQ1RfSU5fTUFJTiIsIm5hbWUiLCJFQVNZX0ZPUk1fVklFV0VSX1ZFUlNJT05fTkFNRSIsIkVBU1lfRk9STV9WSUVXRVJfVkVSU0lPTl9WQUxVRSIsImZvcm12aWV3ZXIiLCJ2ZXJzaW9uIiwiTUFJTl9NT0RVTEVfTkFNRSIsIm1haW5Nb2R1bGUiLCJhbmd1bGFyIiwibW9kdWxlIiwiY29uZmlnIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLHdCQUF3QixDQUM1QixnQ0FBd0JDLElBREksRUFFNUIsZ0NBQXdCQSxJQUZJLEVBRzVCLDJDQUFtQ0EsSUFIUCxDQUE5Qjs7QUFNQSxJQUFNQyxnQ0FBa0MsdUJBQXhDO0FBQ0EsSUFBTUMsaUNBQWtDLHlCQUFlQyxVQUFmLENBQTBCQyxPQUFsRTtBQUNBLElBQU1DLG1CQUFrQyxvQkFBeEM7O0FBRUEsSUFBTUMsYUFBYUMsUUFDQUMsTUFEQSxDQUNPSCxnQkFEUCxFQUN5Qk4scUJBRHpCLEVBRUFVLE1BRkEsOEJBR0FDLEtBSEEsQ0FHTVQsNkJBSE4sRUFHcUNDLDhCQUhyQyxDQUFuQjs7a0JBS2VJLFUiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlZGFGb3JtVmlld2VyTWFpbk1vZHVsZSAgICAgICAgICAgICBmcm9tICcuL2NvbXBvbmVudHMvbWFpbi9lZGEuZWFzeUZvcm1WaWV3ZXIubWFpbi5tb2R1bGUnO1xuaW1wb3J0IGVkYUZvcm1WaWV3ZXJDb3JlTW9kdWxlICAgICAgICAgICAgZnJvbSAnLi9jb21wb25lbnRzL2NvcmUvZWRhLmVhc3lGb3JtVmlld2VyLmNvcmUubW9kdWxlJztcbmltcG9ydCBlZGFGb3JtVmlld2VyTW9kZWxUcmFuc2xhdG9yTW9kdWxlICBmcm9tICcuL2NvbXBvbmVudHMvbW9kZWxzVHJhbnNsYXRvci9lZGEuZWFzeUZvcm1WaWV3ZXIubW9kZWxUcmFuc2xhdG9yLm1vZHVsZSc7XG5pbXBvcnQgZWRhRWFzeUZvcm1WaWV3ZXJDb25maWcgICAgICAgICAgICBmcm9tICcuL2NvbmZpZy9lZGEuZWFzeUZvcm1WaWV3ZXIuY29uZmlnJztcbmltcG9ydCBlYXN5Rm9ybUNvbmZpZyAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2Vhc3lGb3JtQ29uZmlnLmpzb24nO1xuXG5jb25zdCBERVBfVE9fSU5KRUNUX0lOX01BSU4gPSBbXG4gIGVkYUZvcm1WaWV3ZXJNYWluTW9kdWxlLm5hbWUsXG4gIGVkYUZvcm1WaWV3ZXJDb3JlTW9kdWxlLm5hbWUsXG4gIGVkYUZvcm1WaWV3ZXJNb2RlbFRyYW5zbGF0b3JNb2R1bGUubmFtZVxuXTtcblxuY29uc3QgRUFTWV9GT1JNX1ZJRVdFUl9WRVJTSU9OX05BTUUgICA9ICdlYXN5Rm9ybVZpZXdlclZlcnNpb24nO1xuY29uc3QgRUFTWV9GT1JNX1ZJRVdFUl9WRVJTSU9OX1ZBTFVFICA9IGVhc3lGb3JtQ29uZmlnLmZvcm12aWV3ZXIudmVyc2lvbjtcbmNvbnN0IE1BSU5fTU9EVUxFX05BTUUgICAgICAgICAgICAgICAgPSAnZWRhLmVhc3lGb3JtVmlld2VyJztcblxuY29uc3QgbWFpbk1vZHVsZSA9IGFuZ3VsYXJcbiAgICAgICAgICAgICAgICAgIC5tb2R1bGUoTUFJTl9NT0RVTEVfTkFNRSwgREVQX1RPX0lOSkVDVF9JTl9NQUlOKVxuICAgICAgICAgICAgICAgICAgLmNvbmZpZyhlZGFFYXN5Rm9ybVZpZXdlckNvbmZpZylcbiAgICAgICAgICAgICAgICAgIC52YWx1ZShFQVNZX0ZPUk1fVklFV0VSX1ZFUlNJT05fTkFNRSwgRUFTWV9GT1JNX1ZJRVdFUl9WRVJTSU9OX1ZBTFVFKTtcblxuZXhwb3J0IGRlZmF1bHQgbWFpbk1vZHVsZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZm9ybXZpZXdlci9tYWluLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==");
/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {
eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _edaEasyFormViewerMain = __webpack_require__(8);\n\nvar _edaEasyFormViewerMain2 = _interopRequireDefault(_edaEasyFormViewerMain);\n\nvar _edaEasyFormViewerMain3 = __webpack_require__(11);\n\nvar _edaEasyFormViewerMain4 = _interopRequireDefault(_edaEasyFormViewerMain3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* global angular */\nvar FORM_VIEWER_MAIN_MODULE_NAME = 'edaFormViewerMainModule';\n\nexports.default = angular.module(FORM_VIEWER_MAIN_MODULE_NAME, []).directive(_edaEasyFormViewerMain.EASY_FORM_VIEWER_DIRECTIVE_NAME, _edaEasyFormViewerMain2.default).controller(_edaEasyFormViewerMain3.EASY_FORM_VIEWER_CONTROLLER, _edaEasyFormViewerMain4.default);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29tcG9uZW50cy9tYWluL2VkYS5lYXN5Rm9ybVZpZXdlci5tYWluLm1vZHVsZS5qcz80ZDY1Il0sIm5hbWVzIjpbIkZPUk1fVklFV0VSX01BSU5fTU9EVUxFX05BTUUiLCJhbmd1bGFyIiwibW9kdWxlIiwiZGlyZWN0aXZlIiwiY29udHJvbGxlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0E7Ozs7QUFJQTs7Ozs7O0FBTEE7QUFTQSxJQUFNQSwrQkFBK0IseUJBQXJDOztrQkFFZUMsUUFDTkMsTUFETSxDQUNDRiw0QkFERCxFQUMrQixFQUQvQixFQUVORyxTQUZNLDBGQUdOQyxVQUhNLHNGIiwiZmlsZSI6IjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgYW5ndWxhciAqL1xuaW1wb3J0IGVkYUZvcm1WaWV3ZXJEaXJlY3RpdmUsIHtcblx0RUFTWV9GT1JNX1ZJRVdFUl9ESVJFQ1RJVkVfTkFNRVxufVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmcm9tICcuL2VkYS5lYXN5Rm9ybVZpZXdlci5tYWluLmRpcmVjdGl2ZSc7XG5cbmltcG9ydCBlZGFFYXN5Rm9ybVZpZXdlckNvbnRyb2xsZXIsIHtcblx0RUFTWV9GT1JNX1ZJRVdFUl9DT05UUk9MTEVSXG59XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb20gJy4vZWRhLmVhc3lGb3JtVmlld2VyLm1haW4uY29udHJvbGxlcic7XG5cbmNvbnN0IEZPUk1fVklFV0VSX01BSU5fTU9EVUxFX05BTUUgPSAnZWRhRm9ybVZpZXdlck1haW5Nb2R1bGUnO1xuXG5leHBvcnQgZGVmYXVsdCBhbmd1bGFyXG5cdFx0XHRcdFx0XHRcdFx0Lm1vZHVsZShGT1JNX1ZJRVdFUl9NQUlOX01PRFVMRV9OQU1FLCBbXSlcblx0XHRcdFx0XHRcdFx0XHQuZGlyZWN0aXZlKEVBU1lfRk9STV9WSUVXRVJfRElSRUNUSVZFX05BTUUsIGVkYUZvcm1WaWV3ZXJEaXJlY3RpdmUpXG5cdFx0XHRcdFx0XHRcdFx0LmNvbnRyb2xsZXIoRUFTWV9GT1JNX1ZJRVdFUl9DT05UUk9MTEVSLCBlZGFFYXN5Rm9ybVZpZXdlckNvbnRyb2xsZXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9mb3Jtdmlld2VyL2NvbXBvbmVudHMvbWFpbi9lZGEuZWFzeUZvcm1WaWV3ZXIubWFpbi5tb2R1bGUuanMiXSwic291cmNlUm9vdCI6IiJ9");
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {
eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.EASY_FORM_VIEWER_DIRECTIVE_NAME = undefined;\n\nvar _edaEasyFormViewerMainTemplate = __webpack_require__(9);\n\nvar _edaEasyFormViewerMainTemplate2 = _interopRequireDefault(_edaEasyFormViewerMainTemplate);\n\nvar _edaEasyFormViewerMainDirective = __webpack_require__(10);\n\nvar _edaEasyFormViewerMain = __webpack_require__(11);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar EASY_FORM_VIEWER_DIRECTIVE_NAME = 'edaEasyFormViewer'; /* global angular */\n\n\nfunction edaFormViewerDirective($modelsTranslator) {\n\tvar directive = {\n\t\trestrict: 'E',\n\t\tscope: {\n\t\t\tedaEasyFormViewerDataModel: '=?',\n\t\t\tedaEasyFormViewerEasyFormGeneratorFieldsModel: '=?',\n\t\t\tedaEasyFormViewerSubmitButtonText: '@?',\n\t\t\tedaEasyFormViewerCancelButtonText: '@?',\n\t\t\tedaEasyFormViewerSubmitFormEvent: '&?',\n\t\t\tedaEasyFormViewerCancelFormEvent: '&?'\n\t\t},\n\t\treplace: false,\n\t\tcontroller: _edaEasyFormViewerMain.EASY_FORM_VIEWER_CONTROLLER,\n\t\tcontrollerAs: _edaEasyFormViewerMain.EASY_FORM_VIEWER_CONTROLLERAS,\n\t\ttemplate: _edaEasyFormViewerMainTemplate2.default,\n\t\tlink: linkFct\n\t};\n\treturn directive;\n\n\tfunction linkFct(scope) {\n\t\tscope.vm.model = {};\n\t\tscope.vm.fields = loadFieldsModel();\n\t\tscope.vm.submitText = scope.edaEasyFormViewerSubmitButtonText || 'Submit';\n\t\tscope.vm.cancelText = scope.edaEasyFormViewerCancelButtonText || 'Cancel';\n\n\t\tscope.$watch(fieldsModelToWatch, fieldsModelWatcher, true);\n\t\tscope.$watch(dataModelToWatch, dataModelWatcher, true);\n\t\tscope.$watch(submitBtnTextToWatch, submitBtnTextWatcher);\n\t\tscope.$watch(cancelBtnTextToWatch, cancelBtnTextWatcher);\n\t\tscope.$watch(submitEventToWatch, submitEventWatcher);\n\t\tscope.$watch(cancelEventToWatch, cancelEventWatcher);\n\n\t\tfunction dataModelToWatch() {\n\t\t\treturn scope.vm.model;\n\t\t}\n\n\t\tfunction fieldsModelToWatch() {\n\t\t\treturn scope.edaEasyFormViewerEasyFormGeneratorFieldsModel;\n\t\t}\n\n\t\tfunction submitBtnTextToWatch() {\n\t\t\treturn scope.edaEasyFormViewerSubmitButtonText;\n\t\t}\n\n\t\tfunction cancelBtnTextToWatch() {\n\t\t\treturn scope.edaEasyFormViewerCancelButtonText;\n\t\t}\n\n\t\tfunction submitEventToWatch() {\n\t\t\treturn scope.vm.hasJustSumitted;\n\t\t}\n\n\t\tfunction cancelEventToWatch() {\n\t\t\treturn scope.vm.hasJustCancelled;\n\t\t}\n\n\t\tfunction fieldsModelWatcher(newFieldsModel) {\n\t\t\tscope.vm.fields = loadExistingConfigurationModel(newFieldsModel);\n\t\t}\n\n\t\tfunction submitBtnTextWatcher(newSubmitBtntext, oldSubmitBtntext) {\n\t\t\tif (newSubmitBtntext !== oldSubmitBtntext) {\n\t\t\t\tscope.vm.submitText = newSubmitBtntext || 'Submit';\n\t\t\t}\n\t\t}\n\n\t\tfunction cancelBtnTextWatcher(newCancelBtntext, oldCancelBtntext) {\n\t\t\tif (newCancelBtntext !== oldCancelBtntext) {\n\t\t\t\tscope.vm.cancelText = newCancelBtntext || 'Submit';\n\t\t\t}\n\t\t}\n\n\t\tfunction dataModelWatcher(newDataModel) {\n\t\t\tscope.edaEasyFormViewerDataModel = newDataModel;\n\t\t}\n\n\t\tfunction submitEventWatcher(newSubmitEvent) {\n\t\t\tif (newSubmitEvent === true) {\n\t\t\t\tif (angular.isFunction(scope.edaEasyFormViewerSubmitFormEvent)) {\n\t\t\t\t\tvar _dataModelSubmitted = scope.vm.model;\n\t\t\t\t\tscope.edaEasyFormViewerSubmitFormEvent({ dataModelSubmitted: _dataModelSubmitted });\n\t\t\t\t}\n\t\t\t}\n\t\t\tscope.vm.hasJustSumitted = false;\n\t\t}\n\n\t\tfunction cancelEventWatcher(newCancelEvent) {\n\t\t\tif (newCancelEvent === true) {\n\t\t\t\tif (angular.isFunction(scope.edaEasyFormViewerCancelFormEvent)) {\n\t\t\t\t\tscope.edaEasyFormViewerCancelFormEvent();\n\t\t\t\t}\n\t\t\t}\n\t\t\tscope.vm.hasJustCancelled = false;\n\t\t}\n\n\t\t/**\n \t* TODO : check if formly or easy form generato fields model\n \t*\n \t* by default or if both -> easy for generator is chosen\n \t*/\n\t\tfunction loadFieldsModel() {\n\t\t\tvar initialFieldsModel = angular.isArray(scope.edaEasyFormViewerEasyFormGeneratorFieldsModel) ?\n\t\t\t//translate easy form generator to formly fields model\n\t\t\tloadExistingConfigurationModel(scope.edaEasyFormViewerEasyFormGeneratorFieldsModel) : {};\n\n\t\t\treturn initialFieldsModel;\n\t\t}\n\n\t\tfunction loadExistingConfigurationModel(loadedFieldModel) {\n\n\t\t\tif (angular.isArray(loadedFieldModel)) {\n\t\t\t\tvar configlines = (0, _edaEasyFormViewerMainDirective.returnAttributeConfigurationLinesIfNotEmpty)(loadedFieldModel);\n\t\t\t\tvar formlyFieldsModel = [];\n\n\t\t\t\tscope.configurationLoaded = {};\n\n\t\t\t\t$modelsTranslator.bindConfigurationLines(scope.configurationLoaded, configlines);\n\t\t\t\t/**\n \t* rebind special control properties :\n \t*\n \t* formly expression properties\n \t* Validators\n \t* Validation\n \t*/\n\t\t\t\t$modelsTranslator.refreshControlFormlyExpressionProperties(scope.configurationLoaded);\n\t\t\t\t$modelsTranslator.refreshControlFormlyValidators(scope.configurationLoaded);\n\t\t\t\t$modelsTranslator.refreshControlFormlyValidation(scope.configurationLoaded);\n\n\t\t\t\t//apply configuration model\n\t\t\t\tscope.configuration = angular.copy(scope.configurationLoaded);\n\n\t\t\t\t//apply formly model\n\t\t\t\t$modelsTranslator.applyConfigurationToformlyModel(scope.configurationLoaded, formlyFieldsModel, scope.vm.model);\n\n\t\t\t\treturn formlyFieldsModel;\n\t\t\t}\n\t\t}\n\t}\n}\n\nedaFormViewerDirective.$inject = ['$modelsTranslator'];\nexports.default = edaFormViewerDirective;\nexports.EASY_FORM_VIEWER_DIRECTIVE_NAME = EASY_FORM_VIEWER_DIRECTIVE_NAME;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29tcG9uZW50cy9tYWluL2VkYS5lYXN5Rm9ybVZpZXdlci5tYWluLmRpcmVjdGl2ZS5qcz9jNmY2Il0sIm5hbWVzIjpbIkVBU1lfRk9STV9WSUVXRVJfRElSRUNUSVZFX05BTUUiLCJlZGFGb3JtVmlld2VyRGlyZWN0aXZlIiwiJG1vZGVsc1RyYW5zbGF0b3IiLCJkaXJlY3RpdmUiLCJyZXN0cmljdCIsInNjb3BlIiwiZWRhRWFzeUZvcm1WaWV3ZXJEYXRhTW9kZWwiLCJlZGFFYXN5Rm9ybVZpZXdlckVhc3lGb3JtR2VuZXJhdG9yRmllbGRzTW9kZWwiLCJlZGFFYXN5Rm9ybVZpZXdlclN1Ym1pdEJ1dHRvblRleHQiLCJlZGFFYXN5Rm9ybVZpZXdlckNhbmNlbEJ1dHRvblRleHQiLCJlZGFFYXN5Rm9ybVZpZXdlclN1Ym1pdEZvcm1FdmVudCIsImVkYUVhc3lGb3JtVmlld2VyQ2FuY2VsRm9ybUV2ZW50IiwicmVwbGFjZSIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyQXMiLCJ0ZW1wbGF0ZSIsImxpbmsiLCJsaW5rRmN0Iiwidm0iLCJtb2RlbCIsImZpZWxkcyIsImxvYWRGaWVsZHNNb2RlbCIsInN1Ym1pdFRleHQiLCJjYW5jZWxUZXh0IiwiJHdhdGNoIiwiZmllbGRzTW9kZWxUb1dhdGNoIiwiZmllbGRzTW9kZWxXYXRjaGVyIiwiZGF0YU1vZGVsVG9XYXRjaCIsImRhdGFNb2RlbFdhdGNoZXIiLCJzdWJtaXRCdG5UZXh0VG9XYXRjaCIsInN1Ym1pdEJ0blRleHRXYXRjaGVyIiwiY2FuY2VsQnRuVGV4dFRvV2F0Y2giLCJjYW5jZWxCdG5UZXh0V2F0Y2hlciIsInN1Ym1pdEV2ZW50VG9XYXRjaCIsInN1Ym1pdEV2ZW50V2F0Y2hlciIsImNhbmNlbEV2ZW50VG9XYXRjaCIsImNhbmNlbEV2ZW50V2F0Y2hlciIsImhhc0p1c3RTdW1pdHRlZCIsImhhc0p1c3RDYW5jZWxsZWQiLCJuZXdGaWVsZHNNb2RlbCIsImxvYWRFeGlzdGluZ0NvbmZpZ3VyYXRpb25Nb2RlbCIsIm5ld1N1Ym1pdEJ0bnRleHQiLCJvbGRTdWJtaXRCdG50ZXh0IiwibmV3Q2FuY2VsQnRudGV4dCIsIm9sZENhbmNlbEJ0bnRleHQiLCJuZXdEYXRhTW9kZWwiLCJuZXdTdWJtaXRFdmVudCIsImFuZ3VsYXIiLCJpc0Z1bmN0aW9uIiwiX2RhdGFNb2RlbFN1Ym1pdHRlZCIsImRhdGFNb2RlbFN1Ym1pdHRlZCIsIm5ld0NhbmNlbEV2ZW50IiwiaW5pdGlhbEZpZWxkc01vZGVsIiwiaXNBcnJheSIsImxvYWRlZEZpZWxkTW9kZWwiLCJjb25maWdsaW5lcyIsImZvcm1seUZpZWxkc01vZGVsIiwiY29uZmlndXJhdGlvbkxvYWRlZCIsImJpbmRDb25maWd1cmF0aW9uTGluZXMiLCJyZWZyZXNoQ29udHJvbEZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzIiwicmVmcmVzaENvbnRyb2xGb3JtbHlWYWxpZGF0b3JzIiwicmVmcmVzaENvbnRyb2xGb3JtbHlWYWxpZGF0aW9uIiwiY29uZmlndXJhdGlvbiIsImNvcHkiLCJhcHBseUNvbmZpZ3VyYXRpb25Ub2Zvcm1seU1vZGVsIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7O0FBRUE7O0FBSUE7Ozs7QUFLQSxJQUFNQSxrQ0FBa0MsbUJBQXhDLEMsQ0FaQTs7O0FBY0EsU0FBU0Msc0JBQVQsQ0FBZ0NDLGlCQUFoQyxFQUFrRDtBQUNoRCxLQUFJQyxZQUFZO0FBQ2ZDLFlBQVksR0FERztBQUVmQyxTQUFVO0FBQ1RDLCtCQUF1QyxJQUQ5QjtBQUVUQyxrREFBZ0QsSUFGdkM7QUFHVEMsc0NBQTBDLElBSGpDO0FBSVRDLHNDQUEwQyxJQUpqQztBQUtUQyxxQ0FBMEMsSUFMakM7QUFNVEMscUNBQXlDO0FBTmhDLEdBRks7QUFVZkMsV0FBYSxLQVZFO0FBV2ZDLGdFQVhlO0FBWWZDLG9FQVplO0FBYWZDLG1EQWJlO0FBY2ZDLFFBQVlDO0FBZEcsRUFBaEI7QUFnQkQsUUFBT2Qs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c0NvbnRlbnQiOlsiLyogZ2xvYmFsIGFuZ3VsYXIgKi9cbmltcG9ydCBlYXN5Rm9ybVZpZXdlclRlbXBsYXRlIFx0XHRcdFx0ZnJvbSAnLi9lZGEuZWFzeUZvcm1WaWV3ZXIubWFpbi50ZW1wbGF0ZS5odG1sJztcblxuaW1wb3J0IHtcblx0cmV0dXJuQXR0cmlidXRlQ29uZmlndXJhdGlvbkxpbmVzSWZOb3RFbXB0eVxuXHR9XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJvbSAnLi9lZGEuZWFzeUZvcm1WaWV3ZXIubWFpbi5kaXJlY3RpdmUuaGVscGVycyc7XG5cbmltcG9ydCAge1xuXHRFQVNZX0ZPUk1fVklFV0VSX0NPTlRST0xMRVIsXG5cdEVBU1lfRk9STV9WSUVXRVJfQ09OVFJPTExFUkFTXG59IFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb20gJy4vZWRhLmVhc3lGb3JtVmlld2VyLm1haW4uY29udHJvbGxlcic7XG5cbmNvbnN0IEVBU1lfRk9STV9WSUVXRVJfRElSRUNUSVZFX05BTUUgPSAnZWRhRWFzeUZvcm1WaWV3ZXInO1xuXG5mdW5jdGlvbiBlZGFGb3JtVmlld2VyRGlyZWN0aXZlKCRtb2RlbHNUcmFuc2xhdG9yKXtcblx0XHR2YXIgZGlyZWN0aXZlID0ge1xuXHRcdFx0cmVzdHJpY3QgXHQ6ICdFJyxcblx0XHRcdHNjb3BlIFx0XHQ6IHtcblx0XHRcdFx0ZWRhRWFzeUZvcm1WaWV3ZXJEYXRhTW9kZWwgXHRcdFx0XHRcdFx0XHRcdFx0XHQ6ICc9PycsXG5cdFx0XHRcdGVkYUVhc3lGb3JtVmlld2VyRWFzeUZvcm1HZW5lcmF0b3JGaWVsZHNNb2RlbCA6ICc9PycsXG5cdFx0XHRcdGVkYUVhc3lGb3JtVmlld2VyU3VibWl0QnV0dG9uVGV4dCBcdFx0XHRcdFx0XHQ6ICdAPycsXG5cdFx0XHRcdGVkYUVhc3lGb3JtVmlld2VyQ2FuY2VsQnV0dG9uVGV4dCBcdFx0XHRcdFx0XHQ6ICdAPycsXG5cdFx0XHRcdGVkYUVhc3lGb3JtVmlld2VyU3VibWl0Rm9ybUV2ZW50ICBcdFx0XHRcdFx0XHQ6ICcmPycsXG5cdFx0XHRcdGVkYUVhc3lGb3JtVmlld2VyQ2FuY2VsRm9ybUV2ZW50XHRcdFx0XHRcdFx0XHQ6ICcmPydcblx0XHRcdH0sXG5cdFx0XHRyZXBsYWNlIFx0XHRcdDogZmFsc2UsXG5cdFx0XHRjb250cm9sbGVyXHRcdDogRUFTWV9GT1JNX1ZJRVdFUl9DT05UUk9MTEVSLFxuXHRcdFx0Y29udHJvbGxlckFzIFx0OiBFQVNZX0ZPUk1fVklFV0VSX0NPTlRST0xMRVJBUyxcblx0XHRcdHRlbXBsYXRlIFx0XHRcdDogZWFzeUZvcm1WaWV3ZXJUZW1wbGF0ZSxcblx0XHRcdGxpbmsgXHRcdFx0XHRcdDogbGlua0ZjdFxuXHRcdH07XG5cdHJldHVybiBkaXJlY3RpdmU7XG5cblxuXHRmdW5jdGlvbiBsaW5rRmN0KHNjb3BlKSB7XG5cdFx0c2NvcGUudm0ubW9kZWwgXHRcdFx0XHQ9IHt9O1xuXHRcdHNjb3BlLnZtLmZpZWxkcyBcdFx0XHQ9IGxvYWRGaWVsZHNNb2RlbCgpO1xuXHRcdHNjb3BlLnZtLnN1Ym1pdFRleHQgXHQ9IHNjb3BlLmVkYUVhc3lGb3JtVmlld2VyU3VibWl0QnV0dG9uVGV4dCB8fCAnU3VibWl0Jztcblx0XHRzY29wZS52bS5jYW5jZWxUZXh0IFx0PSBzY29wZS5lZGFFYXN5Rm9ybVZpZXdlckNhbmNlbEJ1dHRvblRleHQgfHwgJ0NhbmNlbCc7XG5cblx0XHRzY29wZS4kd2F0Y2goZmllbGRzTW9kZWxUb1dhdGNoLCBcdFx0ZmllbGRzTW9kZWxXYXRjaGVyLCBcdHRydWUpO1xuXHRcdHNjb3BlLiR3YXRjaChkYXRhTW9kZWxUb1dhdGNoLFx0XHRcdGRhdGFNb2RlbFdhdGNoZXIsXHRcdFx0dHJ1ZSk7XG5cdFx0c2NvcGUuJHdhdGNoKHN1Ym1pdEJ0blRleHRUb1dhdGNoLCBcdHN1Ym1pdEJ0blRleHRXYXRjaGVyKTtcblx0XHRzY29wZS4kd2F0Y2goY2FuY2VsQnRuVGV4dFRvV2F0Y2gsIFx0Y2FuY2VsQnRuVGV4dFdhdGNoZXIpO1xuXHRcdHNjb3BlLiR3YXRjaChzdWJtaXRFdmVudFRvV2F0Y2gsIFx0XHRzdWJtaXRFdmVudFdhdGNoZXIpO1xuXHRcdHNjb3BlLiR3YXRjaChjYW5jZWxFdmVudFRvV2F0Y2gsIFx0XHRjYW5jZWxFdmVudFdhdGNoZXIpO1xuXG5cdFx0ZnVuY3Rpb24gZGF0YU1vZGVsVG9XYXRjaCgpe1xuXHRcdFx0cmV0dXJuIHNjb3BlLnZtLm1vZGVsO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZpZWxkc01vZGVsVG9XYXRjaCgpe1xuXHRcdFx0cmV0dXJuIHNjb3BlLmVkYUVhc3lGb3JtVmlld2VyRWFzeUZvcm1HZW5lcmF0b3JGaWVsZHNNb2RlbDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzdWJtaXRCdG5UZXh0VG9XYXRjaCgpe1xuXHRcdFx0cmV0dXJuIHNjb3BlLmVkYUVhc3lGb3JtVmlld2VyU3VibWl0QnV0dG9uVGV4dDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjYW5jZWxCdG5UZXh0VG9XYXRjaCgpe1xuXHRcdFx0cmV0dXJuIHNjb3BlLmVkYUVhc3lGb3JtVmlld2VyQ2FuY2VsQnV0dG9uVGV4dDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzdWJtaXRFdmVudFRvV2F0Y2goKXtcblx0XHRcdHJldHVybiBzY29wZS52bS5oYXNKdXN0U3VtaXR0ZWQ7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY2FuY2VsRXZlbnRUb1dhdGNoKCl7XG5cdFx0XHRyZXR1cm4gc2NvcGUudm0uaGFzSnVzdENhbmNlbGxlZDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmaWVsZHNNb2RlbFdhdGNoZXIobmV3RmllbGRzTW9kZWwpe1xuXHRcdFx0c2NvcGUudm0uZmllbGRzID0gbG9hZEV4aXN0aW5nQ29uZmlndXJhdGlvbk1vZGVsKG5ld0ZpZWxkc01vZGVsKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzdWJtaXRCdG5UZXh0V2F0Y2hlcihuZXdTdWJtaXRCdG50ZXh0LCBvbGRTdWJtaXRCdG50ZXh0KXtcblx0XHRcdGlmIChuZXdTdWJtaXRCdG50ZXh0ICE9PSBvbGRTdWJtaXRCdG50ZXh0KSB7XG5cdFx0XHRcdHNjb3BlLnZtLnN1Ym1pdFRleHQgXHQ9IG5ld1N1Ym1pdEJ0bnRleHQgfHwgJ1N1Ym1pdCc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY2FuY2VsQnRuVGV4dFdhdGNoZXIobmV3Q2FuY2VsQnRudGV4dCwgb2xkQ2FuY2VsQnRudGV4dCl7XG5cdFx0XHRpZiAobmV3Q2FuY2VsQnRudGV4dCAhPT0gb2xkQ2FuY2VsQnRudGV4dCkge1xuXHRcdFx0XHRzY29wZS52bS5jYW5jZWxUZXh0IFx0PSBuZXdDYW5jZWxCdG50ZXh0IHx8ICdTdWJtaXQnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRhdGFNb2RlbFdhdGNoZXIobmV3RGF0YU1vZGVsKXtcblx0XHRcdHNjb3BlLmVkYUVhc3lGb3JtVmlld2VyRGF0YU1vZGVsID0gbmV3RGF0YU1vZGVsO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHN1Ym1pdEV2ZW50V2F0Y2hlcihuZXdTdWJtaXRFdmVudCl7XG5cdFx0XHRpZiAobmV3U3VibWl0RXZlbnQgPT09IHRydWUpIHtcblx0XHRcdFx0XHRpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKHNjb3BlLmVkYUVhc3lGb3JtVmlld2VyU3VibWl0Rm9ybUV2ZW50KSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgX2RhdGFNb2RlbFN1Ym1pdHRlZCA9IHNjb3BlLnZtLm1vZGVsIDtcblx0XHRcdFx0XHRcdHNjb3BlLmVkYUVhc3lGb3JtVmlld2VyU3VibWl0Rm9ybUV2ZW50KHsgZGF0YU1vZGVsU3VibWl0dGVkIDogX2RhdGFNb2RlbFN1Ym1pdHRlZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRzY29wZS52bS5oYXNKdXN0U3VtaXR0ZWQgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjYW5jZWxFdmVudFdhdGNoZXIobmV3Q2FuY2VsRXZlbnQpe1xuXHRcdFx0aWYgKG5ld0NhbmNlbEV2ZW50ID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0aWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihzY29wZS5lZGFFYXN5Rm9ybVZpZXdlckNhbmNlbEZvcm1FdmVudCkpIHtcblx0XHRcdFx0XHRcdHNjb3BlLmVkYUVhc3lGb3JtVmlld2VyQ2FuY2VsRm9ybUV2ZW50KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0c2NvcGUudm0uaGFzSnVzdENhbmNlbGxlZCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdFx0KiBUT0RPIDogY2hlY2sgaWYgZm9ybWx5IG9yIGVhc3kgZm9ybSBnZW5lcmF0byBmaWVsZHMgbW9kZWxcblx0XHRcdCpcblx0XHRcdCogYnkgZGVmYXVsdCBvciBpZiBib3RoIC0+IGVhc3kgZm9yIGdlbmVyYXRvciBpcyBjaG9zZW5cblx0XHRcdCovXG5cdFx0ZnVuY3Rpb24gbG9hZEZpZWxkc01vZGVsKCl7XG5cdFx0XHR2YXIgaW5pdGlhbEZpZWxkc01vZGVsID0gYW5ndWxhclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuaXNBcnJheShzY29wZS5lZGFFYXN5Rm9ybVZpZXdlckVhc3lGb3JtR2VuZXJhdG9yRmllbGRzTW9kZWwpID9cblx0XHRcdFx0Ly90cmFuc2xhdGUgZWFzeSBmb3JtIGdlbmVyYXRvciB0byBmb3JtbHkgZmllbGRzIG1vZGVsXG5cdFx0XHRcdGxvYWRFeGlzdGluZ0NvbmZpZ3VyYXRpb25Nb2RlbChzY29wZS5lZGFFYXN5Rm9ybVZpZXdlckVhc3lGb3JtR2VuZXJhdG9yRmllbGRzTW9kZWwpXG5cdFx0XHRcdDoge307XG5cblx0XHRcdHJldHVybiBpbml0aWFsRmllbGRzTW9kZWw7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gbG9hZEV4aXN0aW5nQ29uZmlndXJhdGlvbk1vZGVsKGxvYWRlZEZpZWxkTW9kZWwpe1xuXG5cdFx0XHRpZihhbmd1bGFyLmlzQXJyYXkobG9hZGVkRmllbGRNb2RlbCkpe1xuXHRcdFx0XHRjb25zdCBjb25maWdsaW5lcyAgICAgICAgICAgPSByZXR1cm5BdHRyaWJ1dGVDb25maWd1cmF0aW9uTGluZXNJZk5vdEVtcHR5KGxvYWRlZEZpZWxkTW9kZWwpO1xuXHRcdFx0XHRjb25zdCBmb3JtbHlGaWVsZHNNb2RlbCBcdFx0PSBbXTtcblxuXHRcdFx0XHRzY29wZS5jb25maWd1cmF0aW9uTG9hZGVkID0ge307XG5cblx0XHRcdFx0JG1vZGVsc1RyYW5zbGF0b3IuYmluZENvbmZpZ3VyYXRpb25MaW5lcyhzY29wZS5jb25maWd1cmF0aW9uTG9hZGVkLGNvbmZpZ2xpbmVzKTtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0KiByZWJpbmQgc3BlY2lhbCBjb250cm9sIHByb3BlcnRpZXMgOlxuXHRcdFx0XHRcdCpcblx0XHRcdFx0XHQqIGZvcm1seSBleHByZXNzaW9uIHByb3BlcnRpZXNcblx0XHRcdFx0XHQqIFZhbGlkYXRvcnNcblx0XHRcdFx0XHQqIFZhbGlkYXRpb25cblx0XHRcdFx0XHQqL1xuXHRcdFx0XHQkbW9kZWxzVHJhbnNsYXRvci5yZWZyZXNoQ29udHJvbEZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzKHNjb3BlLmNvbmZpZ3VyYXRpb25Mb2FkZWQpO1xuXHRcdFx0XHQkbW9kZWxzVHJhbnNsYXRvci5yZWZyZXNoQ29udHJvbEZvcm1seVZhbGlkYXRvcnMoc2NvcGUuY29uZmlndXJhdGlvbkxvYWRlZCk7XG5cdFx0XHRcdCRtb2RlbHNUcmFuc2xhdG9yLnJlZnJlc2hDb250cm9sRm9ybWx5VmFsaWRhdGlvbihzY29wZS5jb25maWd1cmF0aW9uTG9hZGVkKTtcblxuXHRcdFx0XHQvL2FwcGx5IGNvbmZpZ3VyYXRpb24gbW9kZWxcblx0XHRcdFx0c2NvcGUuY29uZmlndXJhdGlvbiA9IGFuZ3VsYXIuY29weShzY29wZS5jb25maWd1cmF0aW9uTG9hZGVkKTtcblxuXHRcdFx0XHQvL2FwcGx5IGZvcm1seSBtb2RlbFxuXHRcdFx0XHQkbW9kZWxzVHJhbnNsYXRvci5hcHBseUNvbmZpZ3VyYXRpb25Ub2Zvcm1seU1vZGVsKHNjb3BlLmNvbmZpZ3VyYXRpb25Mb2FkZWQsIGZvcm1seUZpZWxkc01vZGVsLCBzY29wZS52bS5tb2RlbCk7XG5cblx0XHRcdFx0cmV0dXJuICBmb3JtbHlGaWVsZHNNb2RlbDtcblx0XHRcdH1cblxuXHRcdH1cblxuXG5cblxuXHR9XG5cblxufVxuXG5lZGFGb3JtVmlld2VyRGlyZWN0aXZlLiRpbmplY3QgPSBbXG5cdCckbW9kZWxzVHJhbnNsYXRvcidcbl07XG5leHBvcnQgZGVmYXVsdCBlZGFGb3JtVmlld2VyRGlyZWN0aXZlO1xuZXhwb3J0IHtFQVNZX0ZPUk1fVklFV0VSX0RJUkVDVElWRV9OQU1FfTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZm9ybXZpZXdlci9jb21wb25lbnRzL21haW4vZWRhLmVhc3lGb3JtVmlld2VyLm1haW4uZGlyZWN0aXZlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==");
/***/ },
/* 9 */
/***/ function(module, exports) {
eval("module.exports = \"<div class=\\\"easyFormViewer\\\">\\n\\t\\n\\t<form \\tng-submit=\\\"vm.onSubmit()\\\"\\n\\t\\t\\t\\t\\tname=\\\"vm.form\\\"> \\n\\t\\t<formly-form \\tmodel=\\\"vm.model\\\" \\n\\t\\t\\t\\t\\t\\t\\t\\t\\tfields=\\\"vm.fields\\\" \\n\\t\\t\\t\\t\\t\\t\\t\\t\\tform=\\\"vm.form\\\"> \\n\\t\\t\\t\\n\\t\\t\\t<div class=\\\"pull-right\\\">\\n\\t\\t\\t\\t<button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" \\n\\t\\t\\t\\t\\t\\t\\t\\tng-disabled=\\\"vm.form.$invalid\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\tng-click=\\\"vm.edaSubmitThisDataModel();\\\">{{vm.submitText}}</button>\\n\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary\\\" \\n\\t\\t\\t\\t\\t\\t\\t\\tng-click=\\\"vm.edaCancelEvent();\\\">{{vm.cancelText}}</button>\\t\\t\\t\\t\\n\\t\\t\\t</div>\\t\\t\\t\\t\\t\\t\\n\\n\\t\\t</formly-form> \\n\\t</form>\\n\\n</div>\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29tcG9uZW50cy9tYWluL2VkYS5lYXN5Rm9ybVZpZXdlci5tYWluLnRlbXBsYXRlLmh0bWw/MTRmMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpY0FBaWMsS0FBSyxlQUFlLHNIQUFzSCxLQUFLLGVBQWUiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJlYXN5Rm9ybVZpZXdlclxcXCI+XFxuXFx0XFxuXFx0PGZvcm0gXFx0bmctc3VibWl0PVxcXCJ2bS5vblN1Ym1pdCgpXFxcIlxcblxcdFxcdFxcdFxcdFxcdG5hbWU9XFxcInZtLmZvcm1cXFwiPiBcXG5cXHRcXHQ8Zm9ybWx5LWZvcm0gXFx0bW9kZWw9XFxcInZtLm1vZGVsXFxcIiBcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRmaWVsZHM9XFxcInZtLmZpZWxkc1xcXCIgXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Zm9ybT1cXFwidm0uZm9ybVxcXCI+IFxcblxcdFxcdFxcdFxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInB1bGwtcmlnaHRcXFwiPlxcblxcdFxcdFxcdFxcdDxidXR0b24gdHlwZT1cXFwic3VibWl0XFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIiBcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZy1kaXNhYmxlZD1cXFwidm0uZm9ybS4kaW52YWxpZFxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZy1jbGljaz1cXFwidm0uZWRhU3VibWl0VGhpc0RhdGFNb2RlbCgpO1xcXCI+e3t2bS5zdWJtaXRUZXh0fX08L2J1dHRvbj5cXG5cXHRcXHRcXHRcXHQ8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCIgXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bmctY2xpY2s9XFxcInZtLmVkYUNhbmNlbEV2ZW50KCk7XFxcIj57e3ZtLmNhbmNlbFRleHR9fTwvYnV0dG9uPlxcdFxcdFxcdFxcdFxcblxcdFxcdFxcdDwvZGl2PlxcdFxcdFxcdFxcdFxcdFxcdFxcblxcblxcdFxcdDwvZm9ybWx5LWZvcm0+IFxcblxcdDwvZm9ybT5cXG5cXG48L2Rpdj5cIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2FwcC9mb3Jtdmlld2VyL2NvbXBvbmVudHMvbWFpbi9lZGEuZWFzeUZvcm1WaWV3ZXIubWFpbi50ZW1wbGF0ZS5odG1sXG4vLyBtb2R1bGUgaWQgPSA5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=");
/***/ },
/* 10 */
/***/ function(module, exports) {
eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n/* global angular */\n\nvar EMPTY_FIELD_MODEL = [{\n\t'line': 1,\n\t'activeColumn': 1,\n\t'columns': [{\n\t\t'numColumn': 1,\n\t\t'exist': true,\n\t\t'control': {\n\t\t\t'type': 'none',\n\t\t\t'key': 'none'\n\t\t}\n\t}]\n}];\n\n/**\n\t* empty fields model : to display at least an empty line\n\t* otherwise would look like ugly empty line like it were a bug\n\t*/\nvar emptyEdaFieldsModel = function emptyEdaFieldsModel() {\n\treturn angular.copy(EMPTY_FIELD_MODEL);\n};\n\nvar returnAttributeDataModelIfNotEmpty = function returnAttributeDataModelIfNotEmpty(edaEasyFormGeneratorModel) {\n\tvar dataModelToReturn = angular.isArray(edaEasyFormGeneratorModel.dataModel) ? edaEasyFormGeneratorModel.dataModel.length > 0 ? edaEasyFormGeneratorModel.dataModel : [] : [];\n\treturn dataModelToReturn;\n};\n\nvar returnAttributeConfigurationLinesIfNotEmpty = function returnAttributeConfigurationLinesIfNotEmpty(loadedFieldModel) {\n\tvar edaEasyFormGeneratorModelToReturn = angular.isArray(loadedFieldModel) ? loadedFieldModel.length > 0 ? loadedFieldModel : emptyEdaFieldsModel() : emptyEdaFieldsModel();\n\treturn edaEasyFormGeneratorModelToReturn;\n};\n\nexports.emptyEdaFieldsModel = emptyEdaFieldsModel;\nexports.returnAttributeDataModelIfNotEmpty = returnAttributeDataModelIfNotEmpty;\nexports.returnAttributeConfigurationLinesIfNotEmpty = returnAttributeConfigurationLinesIfNotEmpty;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29tcG9uZW50cy9tYWluL2VkYS5lYXN5Rm9ybVZpZXdlci5tYWluLmRpcmVjdGl2ZS5oZWxwZXJzLmpzPzBjNGEiXSwibmFtZXMiOlsiRU1QVFlfRklFTERfTU9ERUwiLCJlbXB0eUVkYUZpZWxkc01vZGVsIiwiYW5ndWxhciIsImNvcHkiLCJyZXR1cm5BdHRyaWJ1dGVEYXRhTW9kZWxJZk5vdEVtcHR5IiwiZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbCIsImRhdGFNb2RlbFRvUmV0dXJuIiwiaXNBcnJheSIsImRhdGFNb2RlbCIsImxlbmd0aCIsInJldHVybkF0dHJpYnV0ZUNvbmZpZ3VyYXRpb25MaW5lc0lmTm90RW1wdHkiLCJsb2FkZWRGaWVsZE1vZGVsIiwiZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbFRvUmV0dXJuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUVBLElBQU1BLG9CQUFvQixDQUN6QjtBQUNDLFNBQVEsQ0FEVDtBQUVDLGlCQUFnQixDQUZqQjtBQUdDLFlBQVcsQ0FDVjtBQUNDLGVBQWEsQ0FEZDtBQUVDLFdBQVMsSUFGVjtBQUdDLGFBQVc7QUFDVixXQUFRLE1BREU7QUFFVixVQUFPO0FBRkc7QUFIWixFQURVO0FBSFosQ0FEeUIsQ0FBMUI7O0FBaUJBOzs7O0FBSUEsSUFBTUMsc0JBQXNCLFNBQXRCQSxtQkFBc0IsR0FBSTtBQUMvQixRQUFPQyxRQUFRQyxJQUFSLENBQWFILGlCQUFiLENBQVA7QUFDQSxDQUZEOztBQU1BLElBQU1JLHFDQUFxQyxTQUFyQ0Esa0NBQXFDLENBQUNDLHlCQUFELEVBQTZCO0FBQ3ZFLEtBQUlDLG9CQUNGSixRQUFRSyxPQUFSLENBQWdCRiwwQkFBMEJHLFNBQTFDLElBQ0VILDBCQUEwQkcsU0FBMUIsQ0FBb0NDLE1BQXBDLEdBQTZDLENBQTdDLEdBQ0FKLDBCQUEwQkcsU0FEMUIsR0FFRSxFQUhKLEdBS0UsRUFOSjtBQVFDLFFBQU9GLGlCQUFQO0FBQ0QsQ0FWRDs7QUFhQSxJQUFNSSw4Q0FBOEMsU0FBOUNBLDJDQUE4QyxDQUFDQyxnQkFBRCxFQUFvQjtBQUN2RSxLQUFJQyxvQ0FDRlYsUUFBUUssT0FBUixDQUFnQkksZ0JBQWhCLElBQ0VBLGlCQUFpQkYsTUFBakIsR0FBMEIsQ0FBMUIsR0FDQ0UsZ0JBREQsR0FFRVYscUJBSEosR0FLRUEscUJBTko7QUFRQyxRQUFPVyxpQ0FBUDtBQUNELENBVkQ7O1FBY0NYLG1CLEdBQUFBLG1CO1FBQ0FHLGtDLEdBQUFBLGtDO1FBQ0FNLDJDLEdBQUFBLDJDIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGFuZ3VsYXIgKi9cblxuY29uc3QgRU1QVFlfRklFTERfTU9ERUwgPSBbXG5cdHtcblx0XHQnbGluZSc6IDEsXG5cdFx0J2FjdGl2ZUNvbHVtbic6IDEsXG5cdFx0J2NvbHVtbnMnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdCdudW1Db2x1bW4nOiAxLFxuXHRcdFx0XHQnZXhpc3QnOiB0cnVlLFxuXHRcdFx0XHQnY29udHJvbCc6IHtcblx0XHRcdFx0XHQndHlwZSc6ICdub25lJyxcblx0XHRcdFx0XHQna2V5JzogJ25vbmUnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH1cbl07XG5cbi8qKlxuXHQqIGVtcHR5IGZpZWxkcyBtb2RlbCA6IHRvIGRpc3BsYXkgYXQgbGVhc3QgYW4gZW1wdHkgbGluZVxuXHQqIG90aGVyd2lzZSB3b3VsZCBsb29rIGxpa2UgdWdseSBlbXB0eSBsaW5lIGxpa2UgaXQgd2VyZSBhIGJ1Z1xuXHQqL1xuY29uc3QgZW1wdHlFZGFGaWVsZHNNb2RlbCA9ICgpPT57XG5cdHJldHVybiBhbmd1bGFyLmNvcHkoRU1QVFlfRklFTERfTU9ERUwpO1xufTtcblxuXG5cbmNvbnN0IHJldHVybkF0dHJpYnV0ZURhdGFNb2RlbElmTm90RW1wdHkgPSAoZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbCk9Pntcblx0bGV0IGRhdGFNb2RlbFRvUmV0dXJuID0gKFxuXHRcdFx0YW5ndWxhci5pc0FycmF5KGVkYUVhc3lGb3JtR2VuZXJhdG9yTW9kZWwuZGF0YU1vZGVsKSAgID8gICggXG5cdFx0XHRcdFx0ZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbC5kYXRhTW9kZWwubGVuZ3RoID4gMCA/IFxuXHRcdFx0XHRcdGVkYUVhc3lGb3JtR2VuZXJhdG9yTW9kZWwuZGF0YU1vZGVsIFxuXHRcdFx0XHRcdDogW11cblx0XHRcdFx0XHQpIFxuXHRcdFx0OiBbXVxuXHQpO1xuXHRcdHJldHVybiBkYXRhTW9kZWxUb1JldHVybjsgIFxufTtcblxuXG5jb25zdCByZXR1cm5BdHRyaWJ1dGVDb25maWd1cmF0aW9uTGluZXNJZk5vdEVtcHR5ID0gKGxvYWRlZEZpZWxkTW9kZWwpPT57XG5cdGxldCBlZGFFYXN5Rm9ybUdlbmVyYXRvck1vZGVsVG9SZXR1cm4gPSAoXG5cdFx0XHRhbmd1bGFyLmlzQXJyYXkobG9hZGVkRmllbGRNb2RlbCkgPyAgKCBcblx0XHRcdFx0XHRsb2FkZWRGaWVsZE1vZGVsLmxlbmd0aCA+IDAgPyBcblx0XHRcdFx0XHRcdGxvYWRlZEZpZWxkTW9kZWwgXG5cdFx0XHRcdFx0OiBlbXB0eUVkYUZpZWxkc01vZGVsKClcblx0XHRcdFx0XHQpIFxuXHRcdFx0OiBlbXB0eUVkYUZpZWxkc01vZGVsKClcblx0KTtcblx0XHRyZXR1cm4gZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbFRvUmV0dXJuOyAgXG59OyBcblxuXG5leHBvcnQge1xuXHRlbXB0eUVkYUZpZWxkc01vZGVsLFxuXHRyZXR1cm5BdHRyaWJ1dGVEYXRhTW9kZWxJZk5vdEVtcHR5LFxuXHRyZXR1cm5BdHRyaWJ1dGVDb25maWd1cmF0aW9uTGluZXNJZk5vdEVtcHR5XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9mb3Jtdmlld2VyL2NvbXBvbmVudHMvbWFpbi9lZGEuZWFzeUZvcm1WaWV3ZXIubWFpbi5kaXJlY3RpdmUuaGVscGVycy5qcyJdLCJzb3VyY2VSb290IjoiIn0=");
/***/ },
/* 11 */
/***/ function(module, exports) {
eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EASY_FORM_VIEWER_CONTROLLER = 'edaEasyFormViewerCtrl';\nvar EASY_FORM_VIEWER_CONTROLLERAS = 'vm';\n\nvar edaEasyFormViewerController = function () {\n\tfunction edaEasyFormViewerController() {\n\t\t_classCallCheck(this, edaEasyFormViewerController);\n\n\t\tthis.init();\n\t}\n\n\t_createClass(edaEasyFormViewerController, [{\n\t\tkey: 'init',\n\t\tvalue: function init() {\n\t\t\tthis.model = {};\n\t\t\tthis.fields = {};\n\t\t\tthis.hasJustSumitted = false;\n\t\t\tthis.hasJustCancelled = false;\n\t\t}\n\t}, {\n\t\tkey: 'edaSubmitThisDataModel',\n\t\tvalue: function edaSubmitThisDataModel() {\n\t\t\tthis.hasJustSumitted = true;\n\t\t}\n\t}, {\n\t\tkey: 'edaCancelEvent',\n\t\tvalue: function edaCancelEvent() {\n\t\t\tthis.hasJustCancelled = true;\n\t\t}\n\t}]);\n\n\treturn edaEasyFormViewerController;\n}();\n\nedaEasyFormViewerController.$inject = [];\n\nexports.default = edaEasyFormViewerController;\nexports.EASY_FORM_VIEWER_CONTROLLER = EASY_FORM_VIEWER_CONTROLLER;\nexports.EASY_FORM_VIEWER_CONTROLLERAS = EASY_FORM_VIEWER_CONTROLLERAS;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29tcG9uZW50cy9tYWluL2VkYS5lYXN5Rm9ybVZpZXdlci5tYWluLmNvbnRyb2xsZXIuanM/ZTc1MSJdLCJuYW1lcyI6WyJFQVNZX0ZPUk1fVklFV0VSX0NPTlRST0xMRVIiLCJFQVNZX0ZPUk1fVklFV0VSX0NPTlRST0xMRVJBUyIsImVkYUVhc3lGb3JtVmlld2VyQ29udHJvbGxlciIsImluaXQiLCJtb2RlbCIsImZpZWxkcyIsImhhc0p1c3RTdW1pdHRlZCIsImhhc0p1c3RDYW5jZWxsZWQiLCIkaW5qZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsSUFBTUEsOEJBQStCLHVCQUFyQztBQUNBLElBQU1DLGdDQUFnQyxJQUF0Qzs7SUFFTUMsMkI7QUFFTCx3Q0FBYTtBQUFBOztBQUNaLE9BQUtDLElBQUw7QUFDQTs7Ozt5QkFFSztBQUNMLFFBQUtDLEtBQUwsR0FBbUIsRUFBbkI7QUFDQSxRQUFLQyxNQUFMLEdBQW1CLEVBQW5CO0FBQ0EsUUFBS0MsZUFBTCxHQUF3QixLQUF4QjtBQUNBLFFBQUtDLGdCQUFMLEdBQXdCLEtBQXhCO0FBQ0E7OzsyQ0FFdUI7QUFDdkIsUUFBS0QsZUFBTCxHQUF1QixJQUF2QjtBQUNBOzs7bUNBRWU7QUFDZixRQUFLQyxnQkFBTCxHQUF3QixJQUF4QjtBQUNBOzs7Ozs7QUFJRkwsNEJBQTRCTSxPQUE1QixHQUFzQyxFQUF0Qzs7a0JBRWVOLDJCO1FBR2RGLDJCLEdBQUFBLDJCO1FBQ0FDLDZCLEdBQUFBLDZCIiwiZmlsZSI6IjExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgRUFTWV9GT1JNX1ZJRVdFUl9DT05UUk9MTEVSIFx0PSAnZWRhRWFzeUZvcm1WaWV3ZXJDdHJsJztcbmNvbnN0IEVBU1lfRk9STV9WSUVXRVJfQ09OVFJPTExFUkFTXHQ9ICd2bSc7XG5cbmNsYXNzIGVkYUVhc3lGb3JtVmlld2VyQ29udHJvbGxlcntcblx0XG5cdGNvbnN0cnVjdG9yKCl7XG5cdFx0dGhpcy5pbml0KCk7XG5cdH1cblx0XG5cdGluaXQoKXtcblx0XHR0aGlzLm1vZGVsIFx0XHRcdFx0XHRcdD0ge307XG5cdFx0dGhpcy5maWVsZHMgXHRcdFx0XHRcdD0ge307XG5cdFx0dGhpcy5oYXNKdXN0U3VtaXR0ZWQgXHQ9IGZhbHNlO1xuXHRcdHRoaXMuaGFzSnVzdENhbmNlbGxlZCA9IGZhbHNlO1xuXHR9XG5cdFxuXHRlZGFTdWJtaXRUaGlzRGF0YU1vZGVsKCl7XG5cdFx0dGhpcy5oYXNKdXN0U3VtaXR0ZWQgPSB0cnVlO1xuXHR9XG5cdFxuXHRlZGFDYW5jZWxFdmVudCgpe1xuXHRcdHRoaXMuaGFzSnVzdENhbmNlbGxlZCA9IHRydWU7XG5cdH1cdFxuXHRcbn1cblxuZWRhRWFzeUZvcm1WaWV3ZXJDb250cm9sbGVyLiRpbmplY3QgPSBbXTtcblxuZXhwb3J0IGRlZmF1bHQgZWRhRWFzeUZvcm1WaWV3ZXJDb250cm9sbGVyO1xuXG5leHBvcnQge1xuXHRFQVNZX0ZPUk1fVklFV0VSX0NPTlRST0xMRVIsXG5cdEVBU1lfRk9STV9WSUVXRVJfQ09OVFJPTExFUkFTXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZm9ybXZpZXdlci9jb21wb25lbnRzL21haW4vZWRhLmVhc3lGb3JtVmlld2VyLm1haW4uY29udHJvbGxlci5qcyJdLCJzb3VyY2VSb290IjoiIn0=");
/***/ },
/* 12 */
/***/ function(module, exports) {
eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nvar CORE_MODULES = ['textAngular', 'formly', 'ngAnimate', 'formlyBootstrap', 'ui.bootstrap', 'nya.bootstrap.select'];\n\nvar FORMVIEWER_CORE_MODULE_NAME = 'edaEasyFormViewerCore.module';\n\nexports.default = angular.module(FORMVIEWER_CORE_MODULE_NAME, CORE_MODULES);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29tcG9uZW50cy9jb3JlL2VkYS5lYXN5Rm9ybVZpZXdlci5jb3JlLm1vZHVsZS5qcz8zYjQzIl0sIm5hbWVzIjpbIkNPUkVfTU9EVUxFUyIsIkZPUk1WSUVXRVJfQ09SRV9NT0RVTEVfTkFNRSIsImFuZ3VsYXIiLCJtb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBTUEsZUFBZSxDQUNwQixhQURvQixFQUVwQixRQUZvQixFQUdwQixXQUhvQixFQUlwQixpQkFKb0IsRUFLcEIsY0FMb0IsRUFNcEIsc0JBTm9CLENBQXJCOztBQVNBLElBQU1DLDhCQUE4Qiw4QkFBcEM7O2tCQUVlQyxRQUNOQyxNQURNLENBQ0NGLDJCQURELEVBQzhCRCxZQUQ5QixDIiwiZmlsZSI6IjEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgQ09SRV9NT0RVTEVTID0gW1xuXHQndGV4dEFuZ3VsYXInLCAgXG5cdCdmb3JtbHknLCAgXG5cdCduZ0FuaW1hdGUnLFxuXHQnZm9ybWx5Qm9vdHN0cmFwJywgXG5cdCd1aS5ib290c3RyYXAnLCBcblx0J255YS5ib290c3RyYXAuc2VsZWN0JyBcbl07XG5cbmNvbnN0IEZPUk1WSUVXRVJfQ09SRV9NT0RVTEVfTkFNRSA9ICdlZGFFYXN5Rm9ybVZpZXdlckNvcmUubW9kdWxlJztcblxuZXhwb3J0IGRlZmF1bHQgYW5ndWxhclxuXHRcdFx0XHRcdFx0XHRcdC5tb2R1bGUoRk9STVZJRVdFUl9DT1JFX01PRFVMRV9OQU1FLCBDT1JFX01PRFVMRVMpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9mb3Jtdmlld2VyL2NvbXBvbmVudHMvY29yZS9lZGEuZWFzeUZvcm1WaWV3ZXIuY29yZS5tb2R1bGUuanMiXSwic291cmNlUm9vdCI6IiJ9");
/***/ },
/* 13 */
/***/ function(module, exports, __webpack_require__) {
eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _edaEasyFormViewerModelTranslator = __webpack_require__(14);\n\nvar _edaEasyFormViewerModelTranslator2 = _interopRequireDefault(_edaEasyFormViewerModelTranslator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar FORM_VIEWER_MODEL_TRANSLATOR_MODULE_NAME = 'edaFormViewerModelTranslatorModule'; /* global angular */\nexports.default = angular.module(FORM_VIEWER_MODEL_TRANSLATOR_MODULE_NAME, []).service(_edaEasyFormViewerModelTranslator.MODEL_TRANSLATOR_SERVICE, _edaEasyFormViewerModelTranslator2.default);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29tcG9uZW50cy9tb2RlbHNUcmFuc2xhdG9yL2VkYS5lYXN5Rm9ybVZpZXdlci5tb2RlbFRyYW5zbGF0b3IubW9kdWxlLmpzPzc2ZWQiXSwibmFtZXMiOlsiRk9STV9WSUVXRVJfTU9ERUxfVFJBTlNMQVRPUl9NT0RVTEVfTkFNRSIsImFuZ3VsYXIiLCJtb2R1bGUiLCJzZXJ2aWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQTs7Ozs7O0FBTUEsSUFBTUEsMkNBQTJDLG9DQUFqRCxDLENBUEE7a0JBU2VDLFFBQ05DLE1BRE0sQ0FDQ0Ysd0NBREQsRUFDMkMsRUFEM0MsRUFFTkcsT0FGTSx3RyIsImZpbGUiOiIxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBhbmd1bGFyICovXG5pbXBvcnQgJG1vZGVsc1RyYW5zbGF0b3IsIHtcblx0TU9ERUxfVFJBTlNMQVRPUl9TRVJWSUNFXG59XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb20gJy4vZWRhLmVhc3lGb3JtVmlld2VyLm1vZGVsVHJhbnNsYXRvci5zZXJ2aWNlJztcblxuXG5cbmNvbnN0IEZPUk1fVklFV0VSX01PREVMX1RSQU5TTEFUT1JfTU9EVUxFX05BTUUgPSAnZWRhRm9ybVZpZXdlck1vZGVsVHJhbnNsYXRvck1vZHVsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGFuZ3VsYXJcblx0XHRcdFx0XHRcdFx0XHQubW9kdWxlKEZPUk1fVklFV0VSX01PREVMX1RSQU5TTEFUT1JfTU9EVUxFX05BTUUsIFtdKVxuXHRcdFx0XHRcdFx0XHRcdC5zZXJ2aWNlKE1PREVMX1RSQU5TTEFUT1JfU0VSVklDRSwgJG1vZGVsc1RyYW5zbGF0b3IpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZm9ybXZpZXdlci9jb21wb25lbnRzL21vZGVsc1RyYW5zbGF0b3IvZWRhLmVhc3lGb3JtVmlld2VyLm1vZGVsVHJhbnNsYXRvci5tb2R1bGUuanMiXSwic291cmNlUm9vdCI6IiJ9");
/***/ },
/* 14 */
/***/ function(module, exports, __webpack_require__) {
eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.MODEL_TRANSLATOR_SERVICE = undefined;\n\nvar _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global angular */\n\n\nvar _edaEasyFormViewerModelTranslatorService = __webpack_require__(15);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MODEL_TRANSLATOR_SERVICE = '$modelsTranslator';\n\nvar $modelsTranslator = function () {\n\tfunction $modelsTranslator() {\n\t\t_classCallCheck(this, $modelsTranslator);\n\t}\n\n\t_createClass($modelsTranslator, [{\n\t\tkey: 'initNyaSelect',\n\t\tvalue: function initNyaSelect(nyaSelectObj) {\n\t\t\treturn (0, _edaEasyFormViewerModelTranslatorService.resetNyaSelect)(nyaSelectObj);\n\t\t}\n\n\t\t/**\n \t* get all controls definition (nyaSelectObj)\n \t* \n \t* needed to bind these properties :\n \t* \n \t* formlyExpressionProperties: {}, \n \t* formlyValidators: {},\n \t* formlyValidation \t\t\n \t*/\n\n\t}, {\n\t\tkey: 'getControlsDefinition',\n\t\tvalue: function getControlsDefinition() {\n\t\t\tvar controls = {};\n\t\t\t(0, _edaEasyFormViewerModelTranslatorService.resetNyaSelect)(controls);\n\t\t\treturn controls;\n\t\t}\n\n\t\t/**\n \t* loading forms will not be able to retrieve formlyExpressionProperties\n \t* -> here does the job\n \t*/\n\n\t}, {\n\t\tkey: 'refreshControlFormlyExpressionProperties',\n\t\tvalue: function refreshControlFormlyExpressionProperties(configurationModel) {\n\t\t\tvar _this = this;\n\n\t\t\tif (angular.isObject(configurationModel)) {\n\t\t\t\t//iterates lines\n\t\t\t\tangular.forEach(configurationModel.lines, function (line) {\n\t\t\t\t\tangular.forEach(line.columns, function (column) {\n\t\t\t\t\t\tvar _controlsDefinition = _this.getControlsDefinition();\n\t\t\t\t\t\tangular.forEach(_controlsDefinition.controls, function (aControl) {\n\t\t\t\t\t\t\tif (column.control.type === aControl.formlyType && column.control.subtype === aControl.formlySubtype) {\n\t\t\t\t\t\t\t\t//----> update control formlyExpressionProperties property\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tcolumn.control.formlyExpressionProperties = aControl.formlyExpressionProperties;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n \t* loading forms will not be able to retrieve formlyValidators\n \t* -> here does the job\n \t*/\n\n\t}, {\n\t\tkey: 'refreshControlFormlyValidators',\n\t\tvalue: function refreshControlFormlyValidators(configurationModel) {\n\t\t\tvar _this2 = this;\n\n\t\t\tif (angular.isObject(configurationModel)) {\n\t\t\t\t//iterates lines\n\t\t\t\tangular.forEach(configurationModel.lines, function (line) {\n\t\t\t\t\tangular.forEach(line.columns, function (column) {\n\t\t\t\t\t\tvar _controlsDefinition = _this2.getControlsDefinition();\n\t\t\t\t\t\tangular.forEach(_controlsDefinition.controls, function (aControl) {\n\t\t\t\t\t\t\tif (column.control.type === aControl.formlyType && column.control.subtype === aControl.formlySubtype) {\n\t\t\t\t\t\t\t\t//----> update control formlyValidators property\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tcolumn.control.formlyValidators = aControl.formlyValidators;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n \t* loading forms will not be able to retrieve formlyValidation\n \t* -> here does the job\n \t*/\n\n\t}, {\n\t\tkey: 'refreshControlFormlyValidation',\n\t\tvalue: function refreshControlFormlyValidation(configurationModel) {\n\t\t\tvar _this3 = this;\n\n\t\t\tif (angular.isObject(configurationModel)) {\n\t\t\t\t//iterates lines\n\t\t\t\tangular.forEach(configurationModel.lines, function (line) {\n\t\t\t\t\tangular.forEach(line.columns, function (column) {\n\t\t\t\t\t\tvar _controlsDefinition = _this3.getControlsDefinition();\n\t\t\t\t\t\tangular.forEach(_controlsDefinition.controls, function (aControl) {\n\t\t\t\t\t\t\tif (column.control.type === aControl.formlyType && column.control.subtype === aControl.formlySubtype) {\n\t\t\t\t\t\t\t\t//----> update control formlyValidation property\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tcolumn.control.formlyValidation = aControl.formlyValidation;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// initConfigurationEditFromScratch(configurationModel) {\n\t\t// \tconfigurationModel = angular.copy(getConfigurationModelInit());\n\t\t// }\t\n\n\n\t}, {\n\t\tkey: 'bindConfigurationLines',\n\t\tvalue: function bindConfigurationLines(configurationModel, lines) {\n\t\t\tif (angular.isArray(lines)) {\n\t\t\t\tvar configurationModelResult = (0, _edaEasyFormViewerModelTranslatorService.getEmptyConfigModelResult)();\n\t\t\t\tconfigurationModelResult.lines = [].concat(lines);\n\t\t\t\tangular.copy(configurationModelResult, configurationModel);\n\t\t\t\treturn (0, _edaEasyFormViewerModelTranslatorService.getMessageObject)('configuration model is bound', 'lines are bound to configuration model.');\n\t\t\t} else {\n\t\t\t\treturn (0, _edaEasyFormViewerModelTranslatorService.getErrorObject)('lines is not an array', 'Checks lines type, it is not an array.');\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'applyConfigurationToformlyModel',\n\t\tvalue: function applyConfigurationToformlyModel(configurationModel, formlyModel, formlyDataModel) {\n\t\t\t(0, _edaEasyFormViewerModelTranslatorService.resetFormlyModel)(formlyModel);\n\t\t\t(0, _edaEasyFormViewerModelTranslatorService.resetDataModel)(formlyDataModel);\n\t\t\t/**\n \t* manage header here line0 \n \t*/\n\t\t\tvar lineNumber = configurationModel.lines.length;\n\t\t\tfor (var i = 0; i < lineNumber; i++) {\n\t\t\t\t//1 column line control\n\t\t\t\tif (configurationModel.lines[i].columns.length === 1) {\n\t\t\t\t\t//test if template control = header\n\t\t\t\t\tif (configurationModel.lines[i].columns[0].control.type === 'header') {\n\t\t\t\t\t\t(0, _edaEasyFormViewerModelTranslatorService.addOneColumnHeader)(formlyModel, configurationModel, i);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(0, _edaEasyFormViewerModelTranslatorService.addOneColumnControl)(formlyModel, configurationModel, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (configurationModel.lines[i].columns.length === 2) {\n\t\t\t\t\t(0, _edaEasyFormViewerModelTranslatorService.addTwoColumnControl)(formlyModel, configurationModel, i);\n\t\t\t\t}\n\t\t\t\tif (configurationModel.lines[i].columns.length === 3) {\n\t\t\t\t\t(0, _edaEasyFormViewerModelTranslatorService.addThreeColumnControl)(formlyModel, configurationModel, i);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn $modelsTranslator;\n}();\n\n$modelsTranslator.$inject = [];\n\nexports.default = $modelsTranslator;\nexports.MODEL_TRANSLATOR_SERVICE = MODEL_TRANSLATOR_SERVICE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29tcG9uZW50cy9tb2RlbHNUcmFuc2xhdG9yL2VkYS5lYXN5Rm9ybVZpZXdlci5tb2RlbFRyYW5zbGF0b3Iuc2VydmljZS5qcz85YjI5Il0sIm5hbWVzIjpbIk1PREVMX1RSQU5TTEFUT1JfU0VSVklDRSIsIiRtb2RlbHNUcmFuc2xhdG9yIiwibnlhU2VsZWN0T2JqIiwiY29udHJvbHMiLCJjb25maWd1cmF0aW9uTW9kZWwiLCJhbmd1bGFyIiwiaXNPYmplY3QiLCJmb3JFYWNoIiwibGluZXMiLCJsaW5lIiwiY29sdW1ucyIsImNvbHVtbiIsIl9jb250cm9sc0RlZmluaXRpb24iLCJnZXRDb250cm9sc0RlZmluaXRpb24iLCJhQ29udHJvbCIsImNvbnRyb2wiLCJ0eXBlIiwiZm9ybWx5VHlwZSIsInN1YnR5cGUiLCJmb3JtbHlTdWJ0eXBlIiwiZm9ybWx5RXhwcmVzc2lvblByb3BlcnRpZXMiLCJmb3JtbHlWYWxpZGF0b3JzIiwiZm9ybWx5VmFsaWRhdGlvbiIsImlzQXJyYXkiLCJjb25maWd1cmF0aW9uTW9kZWxSZXN1bHQiLCJjb25jYXQiLCJjb3B5IiwiZm9ybWx5TW9kZWwiLCJmb3JtbHlEYXRhTW9kZWwiLCJsaW5lTnVtYmVyIiwibGVuZ3RoIiwiaSIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7cWpCQUFBOzs7QUFDQTs7OztBQWNBLElBQU1BLDJCQUEyQixtQkFBakM7O0lBSU1DLGlCO0FBRUwsOEJBQWE7QUFBQTtBQUVaOzs7O2dDQUdhQyxZLEVBQWE7QUFDMUIsVUFBTyw2REFBZUEsWUFBZixDQUFQO0FBQ0E7O0FBRUQ7Ozs7Ozs7Ozs7OzswQ0FTdUI7QUFDdEIsT0FBSUMsV0FBVyxFQUFmO0FBQ0EsZ0VBQWVBLFFBQWY7QUFDQSxVQUFPQSxRQUFQO0FBQ0E7O0FBRUQ7Ozs7Ozs7MkRBSXlDQyxrQixFQUFtQjtBQUFBOztBQUMzRCxPQUFJQyxRQUFRQyxRQUFSLENBQWlCRixr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c2V0TnlhU2VsZWN0LFxuXHQvLyBnZXRDb25maWd1cmF0aW9uTW9kZWxJbml0LFxuXHRnZXRFbXB0eUNvbmZpZ01vZGVsUmVzdWx0LFxuXHRyZXNldERhdGFNb2RlbCxcblx0Z2V0RXJyb3JPYmplY3QsXG5cdGdldE1lc3NhZ2VPYmplY3QsXG5cdHJlc2V0Rm9ybWx5TW9kZWwsXG5cdGFkZE9uZUNvbHVtbkhlYWRlcixcblx0YWRkT25lQ29sdW1uQ29udHJvbCxcblx0YWRkVHdvQ29sdW1uQ29udHJvbCxcblx0YWRkVGhyZWVDb2x1bW5Db250cm9sXG59XHRcdGZyb20gJy4vZWRhLmVhc3lGb3JtVmlld2VyLm1vZGVsVHJhbnNsYXRvci5zZXJ2aWNlLmhlbHBlcnMnO1xuXG5jb25zdCBNT0RFTF9UUkFOU0xBVE9SX1NFUlZJQ0UgPSAnJG1vZGVsc1RyYW5zbGF0b3InO1xuXG5cblxuY2xhc3MgJG1vZGVsc1RyYW5zbGF0b3J7XG5cdFxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdFxuXHR9XG5cdFxuXHRcblx0aW5pdE55YVNlbGVjdChueWFTZWxlY3RPYmope1xuXHRcdHJldHVybiByZXNldE55YVNlbGVjdChueWFTZWxlY3RPYmopO1xuXHR9XHRcblx0XG5cdC8qKlxuXHRcdCogZ2V0IGFsbCBjb250cm9scyBkZWZpbml0aW9uIChueWFTZWxlY3RPYmopXG5cdFx0KiBcblx0XHQqIG5lZWRlZCB0byBiaW5kIHRoZXNlIHByb3BlcnRpZXMgOlxuXHRcdCogXG5cdFx0KiBmb3JtbHlFeHByZXNzaW9uUHJvcGVydGllczoge30sIFxuXHRcdCogZm9ybWx5VmFsaWRhdG9yczoge30sXG5cdFx0KiBmb3JtbHlWYWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICBcdFx0XG5cdFx0Ki9cdFxuXHRnZXRDb250cm9sc0RlZmluaXRpb24oKXtcblx0XHRsZXQgY29udHJvbHMgPSB7fTtcblx0XHRyZXNldE55YVNlbGVjdChjb250cm9scyk7XHRcblx0XHRyZXR1cm4gY29udHJvbHM7XG5cdH1cdFxuXHRcblx0LyoqXG5cdFx0KiBsb2FkaW5nIGZvcm1zIHdpbGwgbm90IGJlIGFibGUgdG8gcmV0cmlldmUgZm9ybWx5RXhwcmVzc2lvblByb3BlcnRpZXNcblx0XHQqIC0+IGhlcmUgZG9lcyB0aGUgam9iXG5cdFx0Ki9cblx0cmVmcmVzaENvbnRyb2xGb3JtbHlFeHByZXNzaW9uUHJvcGVydGllcyhjb25maWd1cmF0aW9uTW9kZWwpe1xuXHRcdGlmIChhbmd1bGFyLmlzT2JqZWN0KGNvbmZpZ3VyYXRpb25Nb2RlbCkpIHtcblx0XHRcdC8vaXRlcmF0ZXMgbGluZXNcblx0XHRcdGFuZ3VsYXIuZm9yRWFjaChjb25maWd1cmF0aW9uTW9kZWwubGluZXMsIChsaW5lKSA9PiB7XG5cdFx0XHRcdGFuZ3VsYXIuZm9yRWFjaChsaW5lLmNvbHVtbnMsIChjb2x1bW4pID0+IHtcblx0XHRcdFx0XHRsZXQgX2NvbnRyb2xzRGVmaW5pdGlvbiA9IHRoaXMuZ2V0Q29udHJvbHNEZWZpbml0aW9uKCk7XG5cdFx0XHRcdFx0YW5ndWxhci5mb3JFYWNoKF9jb250cm9sc0RlZmluaXRpb24uY29udHJvbHMsIChhQ29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGNvbHVtbi5jb250cm9sLnR5cGUgPT09IGFDb250cm9sLmZvcm1seVR5cGUgJiZcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW4uY29udHJvbC5zdWJ0eXBlID09PSBhQ29udHJvbC5mb3JtbHlTdWJ0eXBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8tLS0tPiB1cGRhdGUgY29udHJvbCBmb3JtbHlFeHByZXNzaW9uUHJvcGVydGllcyBwcm9wZXJ0eVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW4uY29udHJvbC5mb3JtbHlFeHByZXNzaW9uUHJvcGVydGllcyA9IGFDb250cm9sLmZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzO1x0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1x0XHRcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XHRcblx0fVx0XG5cdFxuXHRcblx0LyoqXG5cdFx0KiBsb2FkaW5nIGZvcm1zIHdpbGwgbm90IGJlIGFibGUgdG8gcmV0cmlldmUgZm9ybWx5VmFsaWRhdG9yc1xuXHRcdCogLT4gaGVyZSBkb2VzIHRoZSBqb2Jcblx0XHQqL1x0XHRcdFxuXHRyZWZyZXNoQ29udHJvbEZvcm1seVZhbGlkYXRvcnMoY29uZmlndXJhdGlvbk1vZGVsKXtcblx0XHRpZiAoYW5ndWxhci5pc09iamVjdChjb25maWd1cmF0aW9uTW9kZWwpKSB7XG5cdFx0XHQvL2l0ZXJhdGVzIGxpbmVzXG5cdFx0XHRhbmd1bGFyLmZvckVhY2goY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzLCAobGluZSkgPT4ge1xuXHRcdFx0XHRhbmd1bGFyLmZvckVhY2gobGluZS5jb2x1bW5zLCAoY29sdW1uKSA9PiB7XG5cdFx0XHRcdFx0bGV0IF9jb250cm9sc0RlZmluaXRpb24gPSB0aGlzLmdldENvbnRyb2xzRGVmaW5pdGlvbigpO1xuXHRcdFx0XHRcdGFuZ3VsYXIuZm9yRWFjaChfY29udHJvbHNEZWZpbml0aW9uLmNvbnRyb2xzLCAoYUNvbnRyb2wpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjb2x1bW4uY29udHJvbC50eXBlID09PSBhQ29udHJvbC5mb3JtbHlUeXBlICYmXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uLmNvbnRyb2wuc3VidHlwZSA9PT0gYUNvbnRyb2wuZm9ybWx5U3VidHlwZSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vLS0tLT4gdXBkYXRlIGNvbnRyb2wgZm9ybWx5VmFsaWRhdG9ycyBwcm9wZXJ0eVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW4uY29udHJvbC5mb3JtbHlWYWxpZGF0b3JzID0gYUNvbnRyb2wuZm9ybWx5VmFsaWRhdG9ycztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcdFx0XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVx0XHRcdFx0XG5cdH1cdFx0XG5cdFxuXHRcblx0LyoqXG5cdFx0KiBsb2FkaW5nIGZvcm1zIHdpbGwgbm90IGJlIGFibGUgdG8gcmV0cmlldmUgZm9ybWx5VmFsaWRhdGlvblxuXHRcdCogLT4gaGVyZSBkb2VzIHRoZSBqb2Jcblx0XHQqL1x0XHRcdFxuXHRyZWZyZXNoQ29udHJvbEZvcm1seVZhbGlkYXRpb24oY29uZmlndXJhdGlvbk1vZGVsKXtcblx0XHRpZiAoYW5ndWxhci5pc09iamVjdChjb25maWd1cmF0aW9uTW9kZWwpKSB7XG5cdFx0XHQvL2l0ZXJhdGVzIGxpbmVzXG5cdFx0XHRhbmd1bGFyLmZvckVhY2goY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzLCAobGluZSkgPT4ge1xuXHRcdFx0XHRhbmd1bGFyLmZvckVhY2gobGluZS5jb2x1bW5zLCAoY29sdW1uKSA9PiB7XG5cdFx0XHRcdFx0bGV0IF9jb250cm9sc0RlZmluaXRpb24gPSB0aGlzLmdldENvbnRyb2xzRGVmaW5pdGlvbigpO1xuXHRcdFx0XHRcdGFuZ3VsYXIuZm9yRWFjaChfY29udHJvbHNEZWZpbml0aW9uLmNvbnRyb2xzLCAoYUNvbnRyb2wpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjb2x1bW4uY29udHJvbC50eXBlID09PSBhQ29udHJvbC5mb3JtbHlUeXBlICYmXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uLmNvbnRyb2wuc3VidHlwZSA9PT0gYUNvbnRyb2wuZm9ybWx5U3VidHlwZSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vLS0tLT4gdXBkYXRlIGNvbnRyb2wgZm9ybWx5VmFsaWRhdGlvbiBwcm9wZXJ0eVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW4uY29udHJvbC5mb3JtbHlWYWxpZGF0aW9uID0gYUNvbnRyb2wuZm9ybWx5VmFsaWRhdGlvbjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcdFx0XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVx0XHRcdFx0XHRcblx0fVxuXHRcblx0XG5cdC8vIGluaXRDb25maWd1cmF0aW9uRWRpdEZyb21TY3JhdGNoKGNvbmZpZ3VyYXRpb25Nb2RlbCkge1xuXHQvLyBcdGNvbmZpZ3VyYXRpb25Nb2RlbCA9IGFuZ3VsYXIuY29weShnZXRDb25maWd1cmF0aW9uTW9kZWxJbml0KCkpO1xuXHQvLyB9XHRcblx0XG5cdFxuXHRiaW5kQ29uZmlndXJhdGlvbkxpbmVzKGNvbmZpZ3VyYXRpb25Nb2RlbCwgbGluZXMpe1xuXHRcdGlmKGFuZ3VsYXIuaXNBcnJheShsaW5lcykpe1x0XG5cdFx0XHRsZXQgY29uZmlndXJhdGlvbk1vZGVsUmVzdWx0IFx0XHQ9IGdldEVtcHR5Q29uZmlnTW9kZWxSZXN1bHQoKTtcblx0XHRcdGNvbmZpZ3VyYXRpb25Nb2RlbFJlc3VsdC5saW5lc1x0PSBbXS5jb25jYXQobGluZXMpOyAgXG5cdFx0XHRhbmd1bGFyLmNvcHkoY29uZmlndXJhdGlvbk1vZGVsUmVzdWx0LCBjb25maWd1cmF0aW9uTW9kZWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdFx0XHRyZXR1cm4gZ2V0TWVzc2FnZU9iamVjdChgY29uZmlndXJhdGlvbiBtb2RlbCBpcyBib3VuZGAsYGxpbmVzIGFyZSBib3VuZCB0byBjb25maWd1cmF0aW9uIG1vZGVsLmApO1xuXHRcdH1lbHNle1xuXHRcdFx0cmV0dXJuIGdldEVycm9yT2JqZWN0KGBsaW5lcyBpcyBub3QgYW4gYXJyYXlgLCBgQ2hlY2tzIGxpbmVzIHR5cGUsIGl0IGlzIG5vdCBhbiBhcnJheS5gKTtcblx0XHR9XG5cdH1cdFxuXHRcblxuXHRhcHBseUNvbmZpZ3VyYXRpb25Ub2Zvcm1seU1vZGVsKGNvbmZpZ3VyYXRpb25Nb2RlbCwgZm9ybWx5TW9kZWwsIGZvcm1seURhdGFNb2RlbCl7XG5cdFx0cmVzZXRGb3JtbHlNb2RlbChmb3JtbHlNb2RlbCk7XG5cdFx0cmVzZXREYXRhTW9kZWwoZm9ybWx5RGF0YU1vZGVsKTtcblx0XHQvKipcblx0XHRcdCogbWFuYWdlIGhlYWRlciBoZXJlIGxpbmUwIFxuXHRcdFx0Ki9cblx0XHR2YXIgbGluZU51bWJlciA9IGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lcy5sZW5ndGg7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lTnVtYmVyOyBpKyspIHtcblx0XHRcdFx0Ly8xIGNvbHVtbiBsaW5lIGNvbnRyb2xcblx0XHRcdFx0aWYgKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tpXS5jb2x1bW5zLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdC8vdGVzdCBpZiB0ZW1wbGF0ZSBjb250cm9sID0gaGVhZGVyXG5cdFx0XHRcdFx0aWYgKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tpXS5jb2x1bW5zWzBdLmNvbnRyb2wudHlwZSA9PT0gJ2hlYWRlcicpIHtcblx0XHRcdFx0XHRcdGFkZE9uZUNvbHVtbkhlYWRlcihmb3JtbHlNb2RlbCwgY29uZmlndXJhdGlvbk1vZGVsLCBpKTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdGFkZE9uZUNvbHVtbkNvbnRyb2woZm9ybWx5TW9kZWwsIGNvbmZpZ3VyYXRpb25Nb2RlbCwgaSk7ICBcblx0XHRcdFx0XHR9ICAgICAgICAgIFxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbaV0uY29sdW1ucy5sZW5ndGggPT09IDIpIHtcblx0XHRcdFx0XHRhZGRUd29Db2x1bW5Db250cm9sKGZvcm1seU1vZGVsLCBjb25maWd1cmF0aW9uTW9kZWwsaSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tpXS5jb2x1bW5zLmxlbmd0aCA9PT0gMykge1xuXHRcdFx0XHRcdGFkZFRocmVlQ29sdW1uQ29udHJvbChmb3JtbHlNb2RlbCwgY29uZmlndXJhdGlvbk1vZGVsLGkpO1xuXHRcdFx0XHR9XG5cdFx0fVxuXHR9XHRcblx0XG5cdFx0XG5cdFxufVxuXG4kbW9kZWxzVHJhbnNsYXRvci4kaW5qZWN0ID0gW107XG5cbmV4cG9ydCBkZWZhdWx0ICRtb2RlbHNUcmFuc2xhdG9yO1xuXG5leHBvcnQge01PREVMX1RSQU5TTEFUT1JfU0VSVklDRX07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29tcG9uZW50cy9tb2RlbHNUcmFuc2xhdG9yL2VkYS5lYXN5Rm9ybVZpZXdlci5tb2RlbFRyYW5zbGF0b3Iuc2VydmljZS5qcyJdLCJzb3VyY2VSb290IjoiIn0=");
/***/ },
/* 15 */
/***/ function(module, exports) {
eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n/* global angular */\n\nvar resetNyaSelect = function resetNyaSelect(nyaSelectObj) {\n\n\tvar newNyaSelectObj = {\n\t\tcontrols: [{\n\t\t\tid: 'empty',\n\t\t\tname: 'no control',\n\t\t\tsubtitle: 'no control',\n\t\t\tgroup: 'Blank',\n\t\t\tformlyType: 'blank',\n\t\t\tformlySubtype: '',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {}\n\t\t}, {\n\t\t\tid: 'Header',\n\t\t\tname: 'Header',\n\t\t\tsubtitle: 'no control',\n\t\t\tgroup: 'Decoration',\n\t\t\tformlyType: 'header',\n\t\t\tformlySubtype: '',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {}\n\t\t}, {\n\t\t\tid: 'Subtitle',\n\t\t\tname: 'Subtitle',\n\t\t\tsubtitle: 'no control',\n\t\t\tgroup: 'Decoration',\n\t\t\tformlyType: 'subTitle',\n\t\t\tformlySubtype: '',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {}\n\t\t}, {\n\t\t\tid: 'TextInput',\n\t\t\tname: 'Text input',\n\t\t\tsubtitle: 'Text input',\n\t\t\tgroup: 'input',\n\t\t\tformlyType: 'input',\n\t\t\tformlySubtype: '',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {\n\t\t\t\tmessages: {\n\t\t\t\t\trequired: function required(viewValue, modelValue, scope) {\n\t\t\t\t\t\t//return a required validation message :\n\t\t\t\t\t\t//-> '<label as name> is required '\n\t\t\t\t\t\t//-> or if not exists or empty just 'this field is required'\n\t\t\t\t\t\tvar defaultReturnMsg = 'this Text input field is required';\n\t\t\t\t\t\tvar returnMsg = typeof scope.to.label !== 'undefined' ? scope.to.label !== '' ? scope.to.label + ' is required' : defaultReturnMsg : defaultReturnMsg;\n\t\t\t\t\t\treturn returnMsg;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tid: 'Password',\n\t\t\tname: 'Password',\n\t\t\tsubtitle: 'Password',\n\t\t\tgroup: 'input',\n\t\t\tformlyType: 'input',\n\t\t\tformlySubtype: 'password',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {\n\t\t\t\tmessages: {\n\t\t\t\t\trequired: function required(viewValue, modelValue, scope) {\n\t\t\t\t\t\t//return a required validation message :\n\t\t\t\t\t\t//-> '<label as name> is required '\n\t\t\t\t\t\t//-> or if not exists or empty just 'this field is required'\n\t\t\t\t\t\tvar defaultReturnMsg = 'this Password field is required';\n\t\t\t\t\t\tvar returnMsg = typeof scope.to.label !== 'undefined' ? scope.to.label !== '' ? scope.to.label + ' is required' : defaultReturnMsg : defaultReturnMsg;\n\t\t\t\t\t\treturn returnMsg;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tid: 'Email',\n\t\t\tname: 'Email',\n\t\t\tsubtitle: 'Email',\n\t\t\tgroup: 'input',\n\t\t\tformlyType: 'input',\n\t\t\tformlySubtype: 'email',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\n\t\t\tformlyValidators: {\n\t\t\t\temailShape: {\n\t\t\t\t\texpression: function expression(viewValue, modelValue) {\n\t\t\t\t\t\tvar value = modelValue || viewValue;\n\t\t\t\t\t\treturn (/^[a-z]+[a-z0-9._]+@[a-z]+\\.[a-z.]{2,5}$/.test(value)\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t\tmessage: '$viewValue + \\' is not a valid email\\''\n\t\t\t\t}\n\t\t\t},\n\t\t\tformlyValidation: {\n\t\t\t\tmessages: {\n\t\t\t\t\trequired: function required(viewValue, modelValue, scope) {\n\t\t\t\t\t\t//return a required validation message :\n\t\t\t\t\t\t//-> '<label as name> is required '\n\t\t\t\t\t\t//-> or if not exists or empty just 'this field is required'\n\t\t\t\t\t\tvar defaultReturnMsg = 'this Email field is required';\n\t\t\t\t\t\tvar returnMsg = typeof scope.to.label !== 'undefined' ? scope.to.label !== '' ? scope.to.label + ' is required' : defaultReturnMsg : defaultReturnMsg;\n\t\t\t\t\t\t//check if validation is really dued to require validation\n\t\t\t\t\t\t//and not another validation like emailShape validator\n\t\t\t\t\t\tif (scope.to.required) return returnMsg;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tid: 'Date',\n\t\t\tname: 'Date',\n\t\t\tsubtitle: 'Date',\n\t\t\tgroup: 'input',\n\t\t\tformlyType: 'datepicker',\n\t\t\tformlySubtype: '',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tdatepickerOptions: { format: 'dd-MMMM-yyyy' },\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {\n\t\t\t\tmessages: {\n\t\t\t\t\trequired: function required(viewValue, modelValue, scope) {\n\t\t\t\t\t\t//return a required validation message :\n\t\t\t\t\t\t//-> '<label as name> is required '\n\t\t\t\t\t\t//-> or if not exists or empty just 'this field is required'\n\t\t\t\t\t\tvar defaultReturnMsg = 'this Date field is required';\n\t\t\t\t\t\tvar returnMsg = typeof scope.to.label !== 'undefined' ? scope.to.label !== '' ? scope.to.label + ' is required' : defaultReturnMsg : defaultReturnMsg;\n\t\t\t\t\t\treturn returnMsg;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tid: 'Texarea',\n\t\t\tname: 'Textarea',\n\t\t\tsubtitle: 'Textarea',\n\t\t\tgroup: 'Textarea',\n\t\t\tformlyType: 'textarea',\n\t\t\tformlySubtype: '',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {\n\t\t\t\tmessages: {\n\t\t\t\t\trequired: function required(viewValue, modelValue, scope) {\n\t\t\t\t\t\t//return a required validation message :\n\t\t\t\t\t\t//-> '<label as name> is required '\n\t\t\t\t\t\t//-> or if not exists or empty just 'this field is required'\n\t\t\t\t\t\tvar defaultReturnMsg = 'this Textarea field is required';\n\t\t\t\t\t\tvar returnMsg = typeof scope.to.label !== 'undefined' ? scope.to.label !== '' ? scope.to.label + ' is required' : defaultReturnMsg : defaultReturnMsg;\n\t\t\t\t\t\treturn returnMsg;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tid: 'RichTextEditor',\n\t\t\tname: 'RichTextEditor',\n\t\t\tsubtitle: 'RichTextEditor',\n\t\t\tgroup: 'Textarea',\n\t\t\tformlyType: 'richEditor',\n\t\t\tformlySubtype: '',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {\n\t\t\t\tmessages: {\n\t\t\t\t\trequired: function required(viewValue, modelValue, scope) {\n\t\t\t\t\t\t//return a required validation message :\n\t\t\t\t\t\t//-> '<label as name> is required '\n\t\t\t\t\t\t//-> or if not exists or empty just 'this field is required'\n\t\t\t\t\t\tvar defaultReturnMsg = 'this RichTextEditor field is required';\n\t\t\t\t\t\tvar returnMsg = typeof scope.to.label !== 'undefined' ? scope.to.label !== '' ? scope.to.label + ' is required' : defaultReturnMsg : defaultReturnMsg;\n\t\t\t\t\t\treturn returnMsg;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tid: 'Radio',\n\t\t\tname: 'Radio',\n\t\t\tsubtitle: 'Radio',\n\t\t\toptions: [],\n\t\t\tgroup: 'Radio',\n\t\t\tformlyType: 'radio',\n\t\t\tformlySubtype: '',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {\n\t\t\t\tmessages: {\n\t\t\t\t\trequired: function required(viewValue, modelValue, scope) {\n\t\t\t\t\t\t//return a required validation message :\n\t\t\t\t\t\t//-> '<label as name> is required '\n\t\t\t\t\t\t//-> or if not exists or empty just 'this field is required'\n\t\t\t\t\t\tvar defaultReturnMsg = 'this Password field is required';\n\t\t\t\t\t\tvar returnMsg = typeof scope.to.label !== 'undefined' ? scope.to.label !== '' ? scope.to.label + ' is required' : defaultReturnMsg : defaultReturnMsg;\n\t\t\t\t\t\treturn returnMsg;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tid: 'Checkbox',\n\t\t\tname: 'Checkbox',\n\t\t\tsubtitle: 'Checkbox',\n\t\t\tgroup: 'Checkbox',\n\t\t\tformlyType: 'checkbox',\n\t\t\tformlySubtype: '',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {\n\t\t\t\tmessages: {\n\t\t\t\t\trequired: function required(viewValue, modelValue, scope) {\n\t\t\t\t\t\t//return a required validation message :\n\t\t\t\t\t\t//-> '<label as name> is required '\n\t\t\t\t\t\t//-> or if not exists or empty just 'this field is required'\n\t\t\t\t\t\tvar defaultReturnMsg = 'this Checkbox field is required';\n\t\t\t\t\t\tvar returnMsg = typeof scope.to.label !== 'undefined' ? scope.to.label !== '' ? scope.to.label + ' is required' : defaultReturnMsg : defaultReturnMsg;\n\t\t\t\t\t\treturn returnMsg;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tid: 'BasicSelect',\n\t\t\tname: 'Basic select',\n\t\t\tsubtitle: 'Basic select',\n\t\t\toptions: [],\n\t\t\tgroup: 'Select',\n\t\t\tformlyType: 'basicSelect',\n\t\t\tformlySubtype: '',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {\n\t\t\t\tmessages: {\n\t\t\t\t\trequired: function required(viewValue, modelValue, scope) {\n\t\t\t\t\t\t//return a required validation message :\n\t\t\t\t\t\t//-> '<label as name> is required '\n\t\t\t\t\t\t//-> or if not exists or empty just 'this field is required'\n\t\t\t\t\t\tvar defaultReturnMsg = 'this Basic select field is required';\n\t\t\t\t\t\tvar returnMsg = typeof scope.to.label !== 'undefined' ? scope.to.label !== '' ? scope.to.label + ' is required' : defaultReturnMsg : defaultReturnMsg;\n\t\t\t\t\t\treturn returnMsg;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, {\n\t\t\tid: 'GroupedSelect',\n\t\t\tname: 'Grouped Select',\n\t\t\tsubtitle: 'Grouped Select',\n\t\t\toptions: [],\n\t\t\tgroup: 'Select',\n\t\t\tformlyType: 'groupedSelect',\n\t\t\tformlySubtype: '',\n\t\t\tformlyLabel: '',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyOptions: [],\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {\n\t\t\t\tmessages: {\n\t\t\t\t\trequired: function required(viewValue, modelValue, scope) {\n\t\t\t\t\t\t//return a required validation message :\n\t\t\t\t\t\t//-> '<label as name> is required '\n\t\t\t\t\t\t//-> or if not exists or empty just 'this field is required'\n\t\t\t\t\t\tvar defaultReturnMsg = 'this Grouped Select field is required';\n\t\t\t\t\t\tvar returnMsg = typeof scope.to.label !== 'undefined' ? scope.to.label !== '' ? scope.to.label + ' is required' : defaultReturnMsg : defaultReturnMsg;\n\t\t\t\t\t\treturn returnMsg;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}],\n\t\tselectedControl: 'none',\n\t\ttemporyConfig: {\n\t\t\tselectedControl: 'none',\n\t\t\tformlyLabel: 'label',\n\t\t\tformlyRequired: false,\n\t\t\tformlyDesciption: '',\n\t\t\tformlyPlaceholder: '',\n\t\t\tformlyOptions: [],\n\t\t\t//expressions/validation fields\n\t\t\tformlyExpressionProperties: {},\n\t\t\tformlyValidators: {},\n\t\t\tformlyValidation: {}\n\t\t}\n\n\t};\n\n\t//reset\n\tangular.copy(newNyaSelectObj, nyaSelectObj);\n\treturn true;\n};\n\n/**\n\t* equivalent to formFielManage service in easy form generator\n\t*/\nvar getConfigurationModelInit = function getConfigurationModelInit() {\n\tvar configurationModelInit = {\n\t\tactiveLine: 1,\n\t\tlistConfigStep: ['init', 'first', 'second', 'third'],\n\t\tstepIndicators: [true, false, false, false],\n\t\tconfigStepCounter: 0,\n\t\tsubmitButtonText: 'submit',\n\t\tcancelButtonText: 'cancel',\n\t\tlines: [{\n\t\t\tline: 1,\n\t\t\tactiveColumn: 1,\n\t\t\tcolumns: [{\n\t\t\t\tnumColumn: 1,\n\t\t\t\texist: true,\n\t\t\t\tcontrol: {\n\t\t\t\t\ttype: 'none',\n\t\t\t\t\tkey: 'none'\n\t\t\t\t\t// templateOptions: {\n\t\t\t\t\t// label: 'none',\n\t\t\t\t\t// placeholder: 'none',\n\t\t\t\t\t// required: false,\n\t\t\t\t\t// description: 'Descriptive text'\n\t\t\t\t\t// }\n\t\t\t\t}\n\t\t\t}]\n\t\t}]\n\t};\n\treturn configurationModelInit;\n};\n\nvar getEmptyConfigModelResult = function getEmptyConfigModelResult() {\n\tvar configurationModelResult = {\n\t\tactiveLine: 1,\n\t\tlistConfigStep: ['init', 'first', 'second', 'third'],\n\t\tstepIndicators: [true, false, false, false],\n\t\tconfigStepCounter: 0,\n\t\tsubmitButtonText: 'submit',\n\t\tcancelButtonText: 'cancel',\n\t\tlines: []\n\t};\n\treturn angular.copy(configurationModelResult);\n};\n\nvar resetDataModel = function resetDataModel(obj) {\n\tvar emptyDataModel = {};\n\tangular.copy(emptyDataModel, obj);\n\treturn true;\n};\n\nvar getErrorObject = function getErrorObject(errorTitle, errorMessage) {\n\tvar messageObj = {\n\t\tnoError: false,\n\t\ttitle: '',\n\t\tMessage: ''\n\t};\n\tmessageObj.noError = false;\n\tmessageObj.title = errorTitle;\n\tmessageObj.Message = errorMessage;\n\treturn messageObj;\n};\n\nvar getMessageObject = function getMessageObject(messageTitle, messageBody) {\n\tvar messageObj = {\n\t\tnoError: false,\n\t\ttitle: '',\n\t\tMessage: ''\n\t};\n\tmessageObj.noError = true;\n\tmessageObj.title = messageTitle;\n\tmessageObj.Message = messageBody;\n\treturn messageObj;\n};\n\nvar resetFormlyModel = function resetFormlyModel(formlyModel) {\n\tvar resetformly = [];\n\tangular.copy(resetformly, formlyModel);\n};\n\nvar extractTemplateOptionDescription = function extractTemplateOptionDescription(obj) {\n\treturn typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.description !== 'undefined' ? obj.templateOptions.description : '' : '';\n};\n\nvar extractTemplateOptionPlaceholder = function extractTemplateOptionPlaceholder(obj) {\n\treturn typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.placeholder !== 'undefined' ? obj.templateOptions.placeholder : '' : '';\n};\n\nvar extractTemplateOptionType = function extractTemplateOptionType(obj) {\n\treturn typeof obj.subtype !== 'undefined' ? obj.subtype : '';\n};\n\n// const isTemplateOptionDefined = (obj) => typeof obj.templateOptions !== 'undefined' ? true : false;\n\nvar extractTemplateOptionLabel = function extractTemplateOptionLabel(obj) {\n\treturn typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.label !== 'undefined' ? obj.templateOptions.label : '' : '';\n};\n\nvar extractTemplateOptionDatepickerOptions = function extractTemplateOptionDatepickerOptions(obj) {\n\treturn typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.datepickerOptions !== 'undefined' ? angular.copy(obj.templateOptions.datepickerOptions) : '' : '';\n};\n\nvar extractFormlyExpressionProperties = function extractFormlyExpressionProperties(obj) {\n\treturn typeof obj.formlyExpressionProperties !== 'undefined' ? angular.copy(obj.formlyExpressionProperties) : {};\n};\n\nvar extractFormlyValidators = function extractFormlyValidators(obj) {\n\treturn typeof obj.formlyValidators !== 'undefined' ? angular.copy(obj.formlyValidators) : {};\n};\n\nvar extractFormlyValidation = function extractFormlyValidation(obj) {\n\treturn typeof obj.formlyValidation !== 'undefined' ? angular.copy(obj.formlyValidation) : {};\n};\n\nvar extractTemplateOptionRequired = function extractTemplateOptionRequired(obj) {\n\treturn typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.required !== 'undefined' ? obj.templateOptions.required : '' : '';\n};\n\nvar extractTemplateOptionOptions = function extractTemplateOptionOptions(obj) {\n\treturn typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.options !== 'undefined' ? obj.templateOptions.options : '' : '';\n};\n\nvar addDatepickerOptionsProperty = function addDatepickerOptionsProperty(fieldToPush, configurationModel, lineIndex) {\n\treturn fieldToPush.templateOptions.datepickerOptions = extractTemplateOptionDatepickerOptions(configurationModel.lines[lineIndex].columns[0].control);\n};\n\nvar addOneColumnHeader = function addOneColumnHeader(formlyModel, configurationModel, lineIndex) {\n\t/**\n \t* text header is stored in \"description\" in templateOtion model\n \t*/\n\tvar headerTemplateCol0 = '<div class=\"row\"><div class=\"col-xs-12 col-sm-12 col-md-12 col-lg-12\"><h2 class=\"text-center\">' + extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[0].control) + '<h2></div></div><hr/>';\n\tformlyModel.push({\n\t\ttemplate: typeof configurationModel.lines[lineIndex].columns[0].control.type !== 'undefined' ? configurationModel.lines[lineIndex].columns[0].control.type === 'header' ? headerTemplateCol0 : '<div></div>' : '<div></div>'\n\t});\n};\n\nvar addOneColumnControl = function addOneColumnControl(formlyModel, configurationModel, lineIndex) {\n\tvar fieldToPush = {\n\t\tclassName: 'col-xs-12',\n\t\ttype: typeof configurationModel.lines[lineIndex].columns[0].control.type !== 'undefined' ? configurationModel.lines[lineIndex].columns[0].control.type === 'none' ? 'blank' : configurationModel.lines[lineIndex].columns[0].control.type : 'blank',\n\t\tkey: typeof configurationModel.lines[lineIndex].columns[0].control.key !== 'undefined' ? configurationModel.lines[lineIndex].columns[0].control.key : 'blank' + Date.now(),\n\t\ttemplateOptions: {\n\t\t\ttype: extractTemplateOptionType(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\tlabel: extractTemplateOptionLabel(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\trequired: extractTemplateOptionRequired(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\tplaceholder: extractTemplateOptionPlaceholder(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\tdescription: extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\toptions: extractTemplateOptionOptions(configurationModel.lines[lineIndex].columns[0].control)\n\t\t},\n\t\texpressionProperties: extractFormlyExpressionProperties(configurationModel.lines[lineIndex].columns[0].control),\n\t\tvalidators: extractFormlyValidators(configurationModel.lines[lineIndex].columns[0].control),\n\t\tvalidation: extractFormlyValidation(configurationModel.lines[lineIndex].columns[0].control)\n\t};\n\t//////////////////////////////////////////////\n\t//datepicker additionnal particular property\n\t//////////////////////////////////////////////\n\tif (configurationModel.lines[lineIndex].columns[0].control.type === 'datepicker') addDatepickerOptionsProperty(fieldToPush, configurationModel, lineIndex);\n\n\tformlyModel.push(fieldToPush);\n};\n\nvar addTwoColumnControl = function addTwoColumnControl(formlyModel, configurationModel, lineIndex) {\n\n\t//text header is stored in \"description\" in templateOtion model\n\tvar headerTemplateCol0 = {\n\t\tclassName: 'col-xs-6',\n\t\ttemplate: '<div class=\"row\"><div class=\"\"><h2 class=\"text-center\">' + extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[0].control) + '<h2><hr/></div></div>'\n\t};\n\n\tvar headerTemplateCol1 = {\n\t\tclassName: 'col-xs-6',\n\t\ttemplate: '<div class=\"row\"><div class=\"\"><h2 class=\"text-center\">' + extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[1].control) + '<h2><hr/></div></div>'\n\t};\n\n\tvar controlCol0 = {\n\t\tclassName: 'col-xs-6',\n\t\ttype: typeof configurationModel.lines[lineIndex].columns[0].control.type !== 'undefined' ? configurationModel.lines[lineIndex].columns[0].control.type === 'none' ? 'blank' : configurationModel.lines[lineIndex].columns[0].control.type : 'blank',\n\t\tkey: typeof configurationModel.lines[lineIndex].columns[0].control.key !== 'undefined' ? configurationModel.lines[lineIndex].columns[0].control.key : 'blank' + Date.now(),\n\t\ttemplateOptions: {\n\t\t\ttype: extractTemplateOptionType(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\tlabel: extractTemplateOptionLabel(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\trequired: extractTemplateOptionRequired(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\tplaceholder: extractTemplateOptionPlaceholder(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\tdescription: extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\toptions: extractTemplateOptionOptions(configurationModel.lines[lineIndex].columns[0].control)\n\t\t},\n\t\texpressionProperties: extractFormlyExpressionProperties(configurationModel.lines[lineIndex].columns[0].control),\n\t\tvalidators: extractFormlyValidators(configurationModel.lines[lineIndex].columns[0].control),\n\t\tvalidation: extractFormlyValidation(configurationModel.lines[lineIndex].columns[0].control)\n\t};\n\t//////////////////////////////////////////////\n\t//datepicker additionnal particular property\n\t//////////////////////////////////////////////\n\tif (configurationModel.lines[lineIndex].columns[0].control.type === 'datepicker') addDatepickerOptionsProperty(controlCol0, configurationModel, lineIndex);\n\n\tvar controlCol1 = {\n\t\tclassName: 'col-xs-6',\n\t\ttype: typeof configurationModel.lines[lineIndex].columns[1].control.type !== 'undefined' ? configurationModel.lines[lineIndex].columns[1].control.type === 'none' ? 'blank' : configurationModel.lines[lineIndex].columns[1].control.type : 'blank',\n\t\tkey: typeof configurationModel.lines[lineIndex].columns[1].control.key !== 'undefined' ? configurationModel.lines[lineIndex].columns[1].control.key : 'blank' + Date.now(),\n\t\ttemplateOptions: {\n\t\t\ttype: extractTemplateOptionType(configurationModel.lines[lineIndex].columns[1].control),\n\t\t\tlabel: extractTemplateOptionLabel(configurationModel.lines[lineIndex].columns[1].control),\n\t\t\trequired: extractTemplateOptionRequired(configurationModel.lines[lineIndex].columns[1].control),\n\t\t\tplaceholder: extractTemplateOptionPlaceholder(configurationModel.lines[lineIndex].columns[1].control),\n\t\t\tdescription: extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[1].control),\n\t\t\toptions: extractTemplateOptionOptions(configurationModel.lines[lineIndex].columns[1].control)\n\t\t},\n\t\texpressionProperties: extractFormlyExpressionProperties(configurationModel.lines[lineIndex].columns[1].control),\n\t\tvalidators: extractFormlyValidators(configurationModel.lines[lineIndex].columns[1].control),\n\t\tvalidation: extractFormlyValidation(configurationModel.lines[lineIndex].columns[1].control)\n\t};\n\n\t//////////////////////////////////////////////\n\t//datepicker additionnal particular property\n\t//////////////////////////////////////////////\n\tif (configurationModel.lines[lineIndex].columns[1].control.type === 'datepicker') addDatepickerOptionsProperty(controlCol1, configurationModel, lineIndex);\n\n\tvar FieldGroup = [];\n\n\tif (configurationModel.lines[lineIndex].columns[0].control.type === 'header') {\n\t\tFieldGroup.push(headerTemplateCol0);\n\t} else {\n\t\tFieldGroup.push(controlCol0);\n\t}\n\n\tif (configurationModel.lines[lineIndex].columns[1].control.type === 'header') {\n\t\tFieldGroup.push(headerTemplateCol1);\n\t} else {\n\t\tFieldGroup.push(controlCol1);\n\t}\n\n\tformlyModel.push({\n\t\tclassName: 'row',\n\t\tfieldGroup: FieldGroup\n\t});\n};\n\nvar addThreeColumnControl = function addThreeColumnControl(formlyModel, configurationModel, lineIndex) {\n\t//text header is stored in \"description\" in templateOtion model\n\tvar headerTemplateCol0 = {\n\t\tclassName: 'col-xs-4',\n\t\ttemplate: '<div class=\"row\"><div class=\"\"><h2 class=\"text-center\">' + extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[0].control) + '<h2><hr/></div></div>'\n\t};\n\n\tvar headerTemplateCol1 = {\n\t\tclassName: 'col-xs-4',\n\t\ttemplate: '<div class=\"row\"><div class=\"\"><h2 class=\"text-center\">' + extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[1].control) + '<h2><hr/></div></div>'\n\t};\n\n\tvar headerTemplateCol2 = {\n\t\tclassName: 'col-xs-4',\n\t\ttemplate: '<div class=\"row\"><div class=\"\"><h2 class=\"text-center\">' + extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[2].control) + '<h2><hr/></div></div>'\n\t};\n\n\tvar controlCol0 = {\n\t\tclassName: 'col-xs-4',\n\t\ttype: typeof configurationModel.lines[lineIndex].columns[0].control.type !== 'undefined' ? configurationModel.lines[lineIndex].columns[0].control.type === 'none' ? 'blank' : configurationModel.lines[lineIndex].columns[0].control.type : 'blank',\n\t\tkey: typeof configurationModel.lines[lineIndex].columns[0].control.key !== 'undefined' ? configurationModel.lines[lineIndex].columns[0].control.key : 'blank' + Date.now(),\n\t\ttemplateOptions: {\n\t\t\ttype: extractTemplateOptionType(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\tlabel: extractTemplateOptionLabel(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\trequired: extractTemplateOptionRequired(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\tplaceholder: extractTemplateOptionPlaceholder(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\tdescription: extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[0].control),\n\t\t\toptions: extractTemplateOptionOptions(configurationModel.lines[lineIndex].columns[0].control)\n\t\t},\n\t\texpressionProperties: extractFormlyExpressionProperties(configurationModel.lines[lineIndex].columns[0].control),\n\t\tvalidators: extractFormlyValidators(configurationModel.lines[lineIndex].columns[0].control),\n\t\tvalidation: extractFormlyValidation(configurationModel.lines[lineIndex].columns[0].control)\n\t};\n\t//////////////////////////////////////////////\n\t//datepicker additionnal particular property\n\t//////////////////////////////////////////////\n\tif (configurationModel.lines[lineIndex].columns[0].control.type === 'datepicker') addDatepickerOptionsProperty(controlCol0, configurationModel, lineIndex);\n\n\tvar controlCol1 = {\n\t\tclassName: 'col-xs-4',\n\t\ttype: typeof configurationModel.lines[lineIndex].columns[1].control.type !== 'undefined' ? configurationModel.lines[lineIndex].columns[1].control.type === 'none' ? 'blank' : configurationModel.lines[lineIndex].columns[1].control.type : 'blank',\n\t\tkey: typeof configurationModel.lines[lineIndex].columns[1].control.key !== 'undefined' ? configurationModel.lines[lineIndex].columns[1].control.key : 'blank' + Date.now(),\n\t\ttemplateOptions: {\n\t\t\ttype: extractTemplateOptionType(configurationModel.lines[lineIndex].columns[1].control),\n\t\t\tlabel: extractTemplateOptionLabel(configurationModel.lines[lineIndex].columns[1].control),\n\t\t\trequired: extractTemplateOptionRequired(configurationModel.lines[lineIndex].columns[1].control),\n\t\t\tplaceholder: extractTemplateOptionPlaceholder(configurationModel.lines[lineIndex].columns[1].control),\n\t\t\tdescription: extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[1].control),\n\t\t\toptions: extractTemplateOptionOptions(configurationModel.lines[lineIndex].columns[1].control)\n\t\t},\n\t\texpressionProperties: extractFormlyExpressionProperties(configurationModel.lines[lineIndex].columns[1].control),\n\t\tvalidators: extractFormlyValidators(configurationModel.lines[lineIndex].columns[1].control),\n\t\tvalidation: extractFormlyValidation(configurationModel.lines[lineIndex].columns[1].control)\n\t};\n\t//////////////////////////////////////////////\n\t//datepicker additionnal particular property\n\t//////////////////////////////////////////////\n\tif (configurationModel.lines[lineIndex].columns[1].control.type === 'datepicker') addDatepickerOptionsProperty(controlCol1, configurationModel, lineIndex);\n\n\tvar controlCol2 = {\n\t\tclassName: 'col-xs-4',\n\t\ttype: typeof configurationModel.lines[lineIndex].columns[2].control.type !== 'undefined' ? configurationModel.lines[lineIndex].columns[2].control.type === 'none' ? 'blank' : configurationModel.lines[lineIndex].columns[2].control.type : 'blank',\n\t\tkey: typeof configurationModel.lines[lineIndex].columns[2].control.key !== 'undefined' ? configurationModel.lines[lineIndex].columns[2].control.key : 'blank' + Date.now(),\n\t\ttemplateOptions: {\n\t\t\ttype: extractTemplateOptionType(configurationModel.lines[lineIndex].columns[2].control),\n\t\t\tlabel: extractTemplateOptionLabel(configurationModel.lines[lineIndex].columns[2].control),\n\t\t\trequired: extractTemplateOptionRequired(configurationModel.lines[lineIndex].columns[2].control),\n\t\t\tplaceholder: extractTemplateOptionPlaceholder(configurationModel.lines[lineIndex].columns[2].control),\n\t\t\tdescription: extractTemplateOptionDescription(configurationModel.lines[lineIndex].columns[2].control),\n\t\t\toptions: extractTemplateOptionOptions(configurationModel.lines[lineIndex].columns[2].control)\n\t\t},\n\t\texpressionProperties: extractFormlyExpressionProperties(configurationModel.lines[lineIndex].columns[2].control),\n\t\tvalidators: extractFormlyValidators(configurationModel.lines[lineIndex].columns[2].control),\n\t\tvalidation: extractFormlyValidation(configurationModel.lines[lineIndex].columns[2].control)\n\t};\n\t//////////////////////////////////////////////\n\t//datepicker additionnal particular property\n\t//////////////////////////////////////////////\n\tif (configurationModel.lines[lineIndex].columns[2].control.type === 'datepicker') addDatepickerOptionsProperty(controlCol2, configurationModel, lineIndex);\n\n\tvar FieldGroup = [];\n\n\tif (configurationModel.lines[lineIndex].columns[0].control.type === 'header') {\n\t\tFieldGroup.push(headerTemplateCol0);\n\t} else {\n\t\tFieldGroup.push(controlCol0);\n\t}\n\n\tif (configurationModel.lines[lineIndex].columns[1].control.type === 'header') {\n\t\tFieldGroup.push(headerTemplateCol1);\n\t} else {\n\t\tFieldGroup.push(controlCol1);\n\t}\n\n\tif (configurationModel.lines[lineIndex].columns[2].control.type === 'header') {\n\t\tFieldGroup.push(headerTemplateCol2);\n\t} else {\n\t\tFieldGroup.push(controlCol2);\n\t}\n\n\tformlyModel.push({\n\t\tclassName: 'row',\n\t\tfieldGroup: FieldGroup\n\t});\n};\n\nexports.resetNyaSelect = resetNyaSelect;\nexports.getConfigurationModelInit = getConfigurationModelInit;\nexports.getEmptyConfigModelResult = getEmptyConfigModelResult;\nexports.resetDataModel = resetDataModel;\nexports.getErrorObject = getErrorObject;\nexports.getMessageObject = getMessageObject;\nexports.resetFormlyModel = resetFormlyModel;\nexports.addOneColumnHeader = addOneColumnHeader;\nexports.addOneColumnControl = addOneColumnControl;\nexports.addTwoColumnControl = addTwoColumnControl;\nexports.addThreeColumnControl = addThreeColumnControl;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29tcG9uZW50cy9tb2RlbHNUcmFuc2xhdG9yL2VkYS5lYXN5Rm9ybVZpZXdlci5tb2RlbFRyYW5zbGF0b3Iuc2VydmljZS5oZWxwZXJzLmpzPzQxMjQiXSwibmFtZXMiOlsicmVzZXROeWFTZWxlY3QiLCJueWFTZWxlY3RPYmoiLCJuZXdOeWFTZWxlY3RPYmoiLCJjb250cm9scyIsImlkIiwibmFtZSIsInN1YnRpdGxlIiwiZ3JvdXAiLCJmb3JtbHlUeXBlIiwiZm9ybWx5U3VidHlwZSIsImZvcm1seUxhYmVsIiwiZm9ybWx5UmVxdWlyZWQiLCJmb3JtbHlEZXNjaXB0aW9uIiwiZm9ybWx5T3B0aW9ucyIsImZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzIiwiZm9ybWx5VmFsaWRhdG9ycyIsImZvcm1seVZhbGlkYXRpb24iLCJtZXNzYWdlcyIsInJlcXVpcmVkIiwidmlld1ZhbHVlIiwibW9kZWxWYWx1ZSIsInNjb3BlIiwiZGVmYXVsdFJldHVybk1zZyIsInJldHVybk1zZyIsInRvIiwibGFiZWwiLCJlbWFpbFNoYXBlIiwiZXhwcmVzc2lvbiIsInZhbHVlIiwidGVzdCIsIm1lc3NhZ2UiLCJkYXRlcGlja2VyT3B0aW9ucyIsImZvcm1hdCIsIm9wdGlvbnMiLCJzZWxlY3RlZENvbnRyb2wiLCJ0ZW1wb3J5Q29uZmlnIiwiZm9ybWx5UGxhY2Vob2xkZXIiLCJhbmd1bGFyIiwiY29weSIsImdldENvbmZpZ3VyYXRpb25Nb2RlbEluaXQiLCJjb25maWd1cmF0aW9uTW9kZWxJbml0IiwiYWN0aXZlTGluZSIsImxpc3RDb25maWdTdGVwIiwic3RlcEluZGljYXRvcnMiLCJjb25maWdTdGVwQ291bnRlciIsInN1Ym1pdEJ1dHRvblRleHQiLCJjYW5jZWxCdXR0b25UZXh0IiwibGluZXMiLCJsaW5lIiwiYWN0aXZlQ29sdW1uIiwiY29sdW1ucyIsIm51bUNvbHVtbiIsImV4aXN0IiwiY29udHJvbCIsInR5cGUiLCJrZXkiLCJnZXRFbXB0eUNvbmZpZ01vZGVsUmVzdWx0IiwiY29uZmlndXJhdGlvbk1vZGVsUmVzdWx0IiwicmVzZXREYXRhTW9kZWwiLCJvYmoiLCJlbXB0eURhdGFNb2RlbCIsImdldEVycm9yT2JqZWN0IiwiZXJyb3JUaXRsZSIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2VPYmoiLCJub0Vycm9yIiwidGl0bGUiLCJNZXNzYWdlIiwiZ2V0TWVzc2FnZU9iamVjdCIsIm1lc3NhZ2VUaXRsZSIsIm1lc3NhZ2VCb2R5IiwicmVzZXRGb3JtbHlNb2RlbCIsImZvcm1seU1vZGVsIiwicmVzZXRmb3JtbHkiLCJleHRyYWN0VGVtcGxhdGVPcHRpb25EZXNjcmlwdGlvbiIsInRlbXBsYXRlT3B0aW9ucyIsImRlc2NyaXB0aW9uIiwiZXh0cmFjdFRlbXBsYXRlT3B0aW9uUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciIsImV4dHJhY3RUZW1wbGF0ZU9wdGlvblR5cGUiLCJzdWJ0eXBlIiwiZXh0cmFjdFRlbXBsYXRlT3B0aW9uTGFiZWwiLCJleHRyYWN0VGVtcGxhdGVPcHRpb25EYXRlcGlja2VyT3B0aW9ucyIsImV4dHJhY3RGb3JtbHlFeHByZXNzaW9uUHJvcGVydGllcyIsImV4dHJhY3RGb3JtbHlWYWxpZGF0b3JzIiwiZXh0cmFjdEZvcm1seVZhbGlkYXRpb24iLCJleHRyYWN0VGVtcGxhdGVPcHRpb25SZXF1aXJlZCIsImV4dHJhY3RUZW1wbGF0ZU9wdGlvbk9wdGlvbnMiLCJhZGREYXRlcGlja2VyT3B0aW9uc1Byb3BlcnR5IiwiZmllbGRUb1B1c2giLCJjb25maWd1cmF0aW9uTW9kZWwiLCJsaW5lSW5kZXgiLCJhZGRPbmVDb2x1bW5IZWFkZXIiLCJoZWFkZXJUZW1wbGF0ZUNvbDAiLCJwdXNoIiwidGVtcGxhdGUiLCJhZGRPbmVDb2x1bW5Db250cm9sIiwiY2xhc3NOYW1lIiwiRGF0ZSIsIm5vdyIsImV4cHJlc3Npb25Qcm9wZXJ0aWVzIiwidmFsaWRhdG9ycyIsInZhbGlkYXRpb24iLCJhZGRUd29Db2x1bW5Db250cm9sIiwiaGVhZGVyVGVtcGxhdGVDb2wxIiwiY29udHJvbENvbDAiLCJjb250cm9sQ29sMSIsIkZpZWxkR3JvdXAiLCJmaWVsZEdyb3VwIiwiYWRkVGhyZWVDb2x1bW5Db250cm9sIiwiaGVhZGVyVGVtcGxhdGVDb2wyIiwiY29udHJvbENvbDIiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBRUEsSUFBTUEsaUJBQWlCLFNBQWpCQSxjQUFpQixDQUFDQyxZQUFELEVBQWtCOztBQUV4QyxLQUFJQyxrQkFBa0I7QUFDckJDLFlBQVcsQ0FDVjtBQUNDQyxPQUFZLE9BRGI7QUFFQ0MsU0FBYSxZQUZkO0FBR0NDLGFBQWUsWUFIaEI7QUFJQ0MsVUFBYyxPQUpmO0FBS0NDLGVBQWdCLE9BTGpCO0FBTUNDLGtCQUFrQixFQU5uQjtBQU9DQyxnQkFBaUIsRUFQbEI7QUFRQ0MsbUJBQWtCLEtBUm5CO0FBU0NDLHFCQUFtQixFQVRwQjtBQVVDQyxrQkFBa0IsRUFWbkI7QUFXQ0MsK0JBQTRCLEVBWDdCO0FBWUNDLHFCQUFtQixFQVpwQjtBQWFDQyxxQkFBbUI7QUFicEIsR0FEVSxFQWlCVjtBQUNDWixPQUFZLFFBRGI7QUFFQ0MsU0FBYSxRQUZkO0FBR0NDLGFBQWUsWUFIaEI7QUFJQ0MsVUFBYyxZQUpmO0FBS0NDLGVBQWdCLFFBTGpCO0FBTUNDLGtCQUFrQixFQU5uQjtBQU9DQyxnQkFBaUIsRUFQbEI7QUFRQ0MsbUJBQWtCLEtBUm5CO0FBU0NDLHFCQUFtQixFQVRwQjtBQVVDQyxrQkFBa0IsRUFWbkI7QUFXQ0MsK0JBQTRCLEVBWDdCO0FBWUNDLHFCQUFtQixFQVpwQjtBQWFDQyxxQkFBbUI7QUFicEIsR0FqQlUsRUFpQ1Y7QUFDQ1osT0FBWSxVQURiO0FBRUNDLFNBQWEsVUFGZDtBQUdDQyxhQUFlLFlBSGhCO0FBSUNDLFVBQWMsWUFKZjtBQUtDQyxlQUFnQixVQUxqQjtBQU1DQyxrQkFBa0IsRUFObkI7QUFPQ0MsZ0JBQWlCLEVBUGxCO0FBUUNDLG1CQUFrQixLQVJuQjtBQVNDQyxx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O0FBS0EsQ0ExR0Q7O1FBaUhDM0csYyxHQUFBQSxjO1FBQ0F1Qyx5QixHQUFBQSx5QjtRQUNBaUIseUIsR0FBQUEseUI7UUFDQUUsYyxHQUFBQSxjO1FBQ0FHLGMsR0FBQUEsYztRQUNBTyxnQixHQUFBQSxnQjtRQUNBRyxnQixHQUFBQSxnQjtRQUNBcUIsa0IsR0FBQUEsa0I7UUFDQUksbUIsR0FBQUEsbUI7UUFDQU8sbUIsR0FBQUEsbUI7UUFDQU0scUIsR0FBQUEscUIiLCJmaWxlIjoiMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgYW5ndWxhciAqL1xuXG5jb25zdCByZXNldE55YVNlbGVjdCA9IChueWFTZWxlY3RPYmopID0+IHtcblxuXHRsZXQgbmV3TnlhU2VsZWN0T2JqID0ge1xuXHRcdGNvbnRyb2xzIDogW1xuXHRcdFx0e1xuXHRcdFx0XHRpZFx0XHRcdFx0XHRcdFx0XHQ6ICdlbXB0eScsXG5cdFx0XHRcdG5hbWVcdFx0XHRcdFx0XHRcdDogJ25vIGNvbnRyb2wnLFxuXHRcdFx0XHRzdWJ0aXRsZVx0XHRcdFx0XHQ6ICdubyBjb250cm9sJyxcblx0XHRcdFx0Z3JvdXBcdFx0XHRcdFx0XHRcdDogJ0JsYW5rJyxcblx0XHRcdFx0Zm9ybWx5VHlwZVx0XHRcdFx0OiAnYmxhbmsnLFxuXHRcdFx0XHRmb3JtbHlTdWJ0eXBlXHRcdFx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5TGFiZWxcdFx0XHRcdDogJycsXG5cdFx0XHRcdGZvcm1seVJlcXVpcmVkXHRcdDogZmFsc2UsXG5cdFx0XHRcdGZvcm1seURlc2NpcHRpb25cdDogJycsXG5cdFx0XHRcdGZvcm1seU9wdGlvbnNcdFx0XHQ6IFtdICxcblx0XHRcdFx0Zm9ybWx5RXhwcmVzc2lvblByb3BlcnRpZXM6IHt9LFxuXHRcdFx0XHRmb3JtbHlWYWxpZGF0b3JzXHQ6IHt9LFxuXHRcdFx0XHRmb3JtbHlWYWxpZGF0aW9uXHQ6IHt9XG5cdFx0XHR9LFxuXG5cdFx0XHR7XG5cdFx0XHRcdGlkXHRcdFx0XHRcdFx0XHRcdDogJ0hlYWRlcicsXG5cdFx0XHRcdG5hbWVcdFx0XHRcdFx0XHRcdDogJ0hlYWRlcicsXG5cdFx0XHRcdHN1YnRpdGxlXHRcdFx0XHRcdDogJ25vIGNvbnRyb2wnLFxuXHRcdFx0XHRncm91cFx0XHRcdFx0XHRcdFx0OiAnRGVjb3JhdGlvbicsXG5cdFx0XHRcdGZvcm1seVR5cGVcdFx0XHRcdDogJ2hlYWRlcicsXG5cdFx0XHRcdGZvcm1seVN1YnR5cGVcdFx0XHQ6ICcnLFxuXHRcdFx0XHRmb3JtbHlMYWJlbFx0XHRcdFx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5UmVxdWlyZWRcdFx0OiBmYWxzZSxcblx0XHRcdFx0Zm9ybWx5RGVzY2lwdGlvblx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5T3B0aW9uc1x0XHRcdDogW10gLFxuXHRcdFx0XHRmb3JtbHlFeHByZXNzaW9uUHJvcGVydGllczoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRvcnNcdDoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRpb25cdDoge31cblx0XHRcdH0sXG5cblx0XHRcdHtcblx0XHRcdFx0aWRcdFx0XHRcdFx0XHRcdFx0OiAnU3VidGl0bGUnLFxuXHRcdFx0XHRuYW1lXHRcdFx0XHRcdFx0XHQ6ICdTdWJ0aXRsZScsXG5cdFx0XHRcdHN1YnRpdGxlXHRcdFx0XHRcdDogJ25vIGNvbnRyb2wnLFxuXHRcdFx0XHRncm91cFx0XHRcdFx0XHRcdFx0OiAnRGVjb3JhdGlvbicsXG5cdFx0XHRcdGZvcm1seVR5cGVcdFx0XHRcdDogJ3N1YlRpdGxlJyxcblx0XHRcdFx0Zm9ybWx5U3VidHlwZVx0XHRcdDogJycsXG5cdFx0XHRcdGZvcm1seUxhYmVsXHRcdFx0XHQ6ICcnLFxuXHRcdFx0XHRmb3JtbHlSZXF1aXJlZFx0XHQ6IGZhbHNlLFxuXHRcdFx0XHRmb3JtbHlEZXNjaXB0aW9uXHQ6ICcnLFxuXHRcdFx0XHRmb3JtbHlPcHRpb25zXHRcdFx0OiBbXSAsXG5cdFx0XHRcdGZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0Zm9ybWx5VmFsaWRhdG9yc1x0OiB7fSxcblx0XHRcdFx0Zm9ybWx5VmFsaWRhdGlvblx0OiB7fVxuXHRcdFx0fSxcblxuXHRcdFx0e1xuXHRcdFx0XHRpZFx0XHRcdFx0XHRcdFx0XHQ6ICdUZXh0SW5wdXQnLFxuXHRcdFx0XHRuYW1lXHRcdFx0XHRcdFx0XHQ6ICdUZXh0IGlucHV0Jyxcblx0XHRcdFx0c3VidGl0bGVcdFx0XHRcdFx0OiAnVGV4dCBpbnB1dCcsXG5cdFx0XHRcdGdyb3VwXHRcdFx0XHRcdFx0XHQ6ICdpbnB1dCcsXG5cdFx0XHRcdGZvcm1seVR5cGVcdFx0XHRcdDogJ2lucHV0Jyxcblx0XHRcdFx0Zm9ybWx5U3VidHlwZVx0XHRcdDogJycsXG5cdFx0XHRcdGZvcm1seUxhYmVsXHRcdFx0XHQ6ICcnLFxuXHRcdFx0XHRmb3JtbHlSZXF1aXJlZFx0XHQ6IGZhbHNlLFxuXHRcdFx0XHRmb3JtbHlEZXNjaXB0aW9uXHQ6ICcnLFxuXHRcdFx0XHRmb3JtbHlPcHRpb25zXHRcdFx0OiBbXSAsXG5cdFx0XHRcdGZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0Zm9ybWx5VmFsaWRhdG9yc1x0OiB7fSxcblx0XHRcdFx0Zm9ybWx5VmFsaWRhdGlvblx0OiB7XG5cdFx0XHRcdFx0bWVzc2FnZXM6IHtcblx0XHRcdFx0XHRcdHJlcXVpcmVkOiBmdW5jdGlvbih2aWV3VmFsdWUsIG1vZGVsVmFsdWUsIHNjb3BlKSB7XG5cdFx0XHRcdFx0XHRcdC8vcmV0dXJuIGEgcmVxdWlyZWQgdmFsaWRhdGlvbiBtZXNzYWdlIDpcblx0XHRcdFx0XHRcdFx0Ly8tPiAnPGxhYmVsIGFzIG5hbWU+IGlzIHJlcXVpcmVkICdcblx0XHRcdFx0XHRcdFx0Ly8tPiBvciBpZiBub3QgZXhpc3RzIG9yIGVtcHR5IGp1c3QgJ3RoaXMgZmllbGQgaXMgcmVxdWlyZWQnXG5cdFx0XHRcdFx0XHRcdHZhciBkZWZhdWx0UmV0dXJuTXNnIFx0PSAndGhpcyBUZXh0IGlucHV0IGZpZWxkIGlzIHJlcXVpcmVkJztcblx0XHRcdFx0XHRcdFx0dmFyIHJldHVybk1zZyBcdFx0XHRcdD0gKHR5cGVvZiBzY29wZS50by5sYWJlbCAhPT0gJ3VuZGVmaW5lZCcpID8gKChzY29wZS50by5sYWJlbCAhPT0gJycpID8gc2NvcGUudG8ubGFiZWwgKyAnIGlzIHJlcXVpcmVkJyA6IGRlZmF1bHRSZXR1cm5Nc2cpIDogZGVmYXVsdFJldHVybk1zZztcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJldHVybk1zZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdHtcblx0XHRcdFx0aWRcdFx0XHRcdFx0XHRcdFx0OiAnUGFzc3dvcmQnLFxuXHRcdFx0XHRuYW1lXHRcdFx0XHRcdFx0XHQ6ICdQYXNzd29yZCcsXG5cdFx0XHRcdHN1YnRpdGxlXHRcdFx0XHRcdDogJ1Bhc3N3b3JkJyxcblx0XHRcdFx0Z3JvdXBcdFx0XHRcdFx0XHRcdDogJ2lucHV0Jyxcblx0XHRcdFx0Zm9ybWx5VHlwZVx0XHRcdFx0OiAnaW5wdXQnLFxuXHRcdFx0XHRmb3JtbHlTdWJ0eXBlXHRcdFx0OiAncGFzc3dvcmQnLFxuXHRcdFx0XHRmb3JtbHlMYWJlbFx0XHRcdFx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5UmVxdWlyZWRcdFx0OiBmYWxzZSxcblx0XHRcdFx0Zm9ybWx5RGVzY2lwdGlvblx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5T3B0aW9uc1x0XHRcdDogW10gLFxuXHRcdFx0XHRmb3JtbHlFeHByZXNzaW9uUHJvcGVydGllczoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRvcnNcdDoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRpb25cdDoge1xuXHRcdFx0XHRcdG1lc3NhZ2VzOiB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlZDogZnVuY3Rpb24odmlld1ZhbHVlLCBtb2RlbFZhbHVlLCBzY29wZSkge1xuXHRcdFx0XHRcdFx0XHQvL3JldHVybiBhIHJlcXVpcmVkIHZhbGlkYXRpb24gbWVzc2FnZSA6XG5cdFx0XHRcdFx0XHRcdC8vLT4gJzxsYWJlbCBhcyBuYW1lPiBpcyByZXF1aXJlZCAnXG5cdFx0XHRcdFx0XHRcdC8vLT4gb3IgaWYgbm90IGV4aXN0cyBvciBlbXB0eSBqdXN0ICd0aGlzIGZpZWxkIGlzIHJlcXVpcmVkJ1xuXHRcdFx0XHRcdFx0XHR2YXIgZGVmYXVsdFJldHVybk1zZyBcdD0gJ3RoaXMgUGFzc3dvcmQgZmllbGQgaXMgcmVxdWlyZWQnO1xuXHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuTXNnIFx0XHRcdFx0PSAodHlwZW9mIHNjb3BlLnRvLmxhYmVsICE9PSAndW5kZWZpbmVkJykgPyAoKHNjb3BlLnRvLmxhYmVsICE9PSAnJykgPyBzY29wZS50by5sYWJlbCArICcgaXMgcmVxdWlyZWQnIDogZGVmYXVsdFJldHVybk1zZykgOiBkZWZhdWx0UmV0dXJuTXNnO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmV0dXJuTXNnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdH0sXG5cblx0XHRcdHtcblx0XHRcdFx0aWQgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6ICdFbWFpbCcsXG5cdFx0XHRcdG5hbWUgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiAnRW1haWwnLFxuXHRcdFx0XHRzdWJ0aXRsZSBcdFx0XHRcdFx0XHRcdFx0XHRcdDogJ0VtYWlsJyxcblx0XHRcdFx0Z3JvdXAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogJ2lucHV0Jyxcblx0XHRcdFx0Zm9ybWx5VHlwZVx0XHRcdFx0XHRcdFx0XHRcdDogJ2lucHV0Jyxcblx0XHRcdFx0Zm9ybWx5U3VidHlwZSBcdFx0XHRcdFx0XHRcdDogJ2VtYWlsJyxcblx0XHRcdFx0Zm9ybWx5TGFiZWwgXHRcdFx0XHRcdFx0XHRcdDogJycsXG5cdFx0XHRcdGZvcm1seVJlcXVpcmVkIFx0XHRcdFx0XHRcdFx0OiBmYWxzZSxcblx0XHRcdFx0Zm9ybWx5RGVzY2lwdGlvbiBcdFx0XHRcdFx0XHQ6ICcnLFxuXHRcdFx0XHRmb3JtbHlPcHRpb25zIFx0XHRcdFx0XHRcdFx0OiBbXSxcblx0XHRcdFx0Zm9ybWx5RXhwcmVzc2lvblByb3BlcnRpZXMgXHQ6IHt9LFxuXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRvcnMgXHRcdFx0XHRcdFx0OiB7XG5cdFx0XHRcdFx0ZW1haWxTaGFwZSA6IHtcblx0XHRcdFx0XHRcdGV4cHJlc3Npb24gOiBmdW5jdGlvbih2aWV3VmFsdWUsIG1vZGVsVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gbW9kZWxWYWx1ZSB8fCB2aWV3VmFsdWU7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAvXlthLXpdK1thLXowLTkuX10rQFthLXpdK1xcLlthLXouXXsyLDV9JC8udGVzdCh2YWx1ZSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bWVzc2FnZVx0XHQ6ICckdmlld1ZhbHVlICsgXFwnIGlzIG5vdCBhIHZhbGlkIGVtYWlsXFwnJ1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Zm9ybWx5VmFsaWRhdGlvbjoge1xuXHRcdFx0XHRcdG1lc3NhZ2VzOiB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlZDogZnVuY3Rpb24odmlld1ZhbHVlLCBtb2RlbFZhbHVlLCBzY29wZSkge1xuXHRcdFx0XHRcdFx0XHQvL3JldHVybiBhIHJlcXVpcmVkIHZhbGlkYXRpb24gbWVzc2FnZSA6XG5cdFx0XHRcdFx0XHRcdC8vLT4gJzxsYWJlbCBhcyBuYW1lPiBpcyByZXF1aXJlZCAnXG5cdFx0XHRcdFx0XHRcdC8vLT4gb3IgaWYgbm90IGV4aXN0cyBvciBlbXB0eSBqdXN0ICd0aGlzIGZpZWxkIGlzIHJlcXVpcmVkJ1xuXHRcdFx0XHRcdFx0XHR2YXIgZGVmYXVsdFJldHVybk1zZyBcdD0gJ3RoaXMgRW1haWwgZmllbGQgaXMgcmVxdWlyZWQnO1xuXHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuTXNnIFx0XHRcdFx0PSAodHlwZW9mIHNjb3BlLnRvLmxhYmVsICE9PSAndW5kZWZpbmVkJykgPyAoKHNjb3BlLnRvLmxhYmVsICE9PSAnJykgPyBzY29wZS50by5sYWJlbCArICcgaXMgcmVxdWlyZWQnIDogZGVmYXVsdFJldHVybk1zZykgOiBkZWZhdWx0UmV0dXJuTXNnO1xuXHRcdFx0XHRcdFx0XHQvL2NoZWNrIGlmIHZhbGlkYXRpb24gaXMgcmVhbGx5IGR1ZWQgdG8gcmVxdWlyZSB2YWxpZGF0aW9uXG5cdFx0XHRcdFx0XHRcdC8vYW5kIG5vdCBhbm90aGVyIHZhbGlkYXRpb24gbGlrZSBlbWFpbFNoYXBlIHZhbGlkYXRvclxuXHRcdFx0XHRcdFx0XHRpZiAoc2NvcGUudG8ucmVxdWlyZWQpIHJldHVybiByZXR1cm5Nc2c7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHR7XG5cdFx0XHRcdGlkXHRcdFx0XHRcdFx0XHRcdDogJ0RhdGUnLFxuXHRcdFx0XHRuYW1lXHRcdFx0XHRcdFx0XHQ6ICdEYXRlJyxcblx0XHRcdFx0c3VidGl0bGVcdFx0XHRcdFx0OiAnRGF0ZScsXG5cdFx0XHRcdGdyb3VwXHRcdFx0XHRcdFx0XHQ6ICdpbnB1dCcsXG5cdFx0XHRcdGZvcm1seVR5cGVcdFx0XHRcdDogJ2RhdGVwaWNrZXInLFxuXHRcdFx0XHRmb3JtbHlTdWJ0eXBlXHRcdFx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5TGFiZWxcdFx0XHRcdDogJycsXG5cdFx0XHRcdGZvcm1seVJlcXVpcmVkXHRcdDogZmFsc2UsXG5cdFx0XHRcdGZvcm1seURlc2NpcHRpb25cdDogJycsXG5cdFx0XHRcdGZvcm1seU9wdGlvbnNcdFx0XHQ6IFtdLFxuXHRcdFx0XHRkYXRlcGlja2VyT3B0aW9uc1x0OiB7Zm9ybWF0IDogJ2RkLU1NTU0teXl5eSd9LFxuXHRcdFx0XHRmb3JtbHlFeHByZXNzaW9uUHJvcGVydGllczoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRvcnNcdDoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRpb25cdDoge1xuXHRcdFx0XHRcdG1lc3NhZ2VzOiB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlZDogZnVuY3Rpb24odmlld1ZhbHVlLCBtb2RlbFZhbHVlLCBzY29wZSkge1xuXHRcdFx0XHRcdFx0XHQvL3JldHVybiBhIHJlcXVpcmVkIHZhbGlkYXRpb24gbWVzc2FnZSA6XG5cdFx0XHRcdFx0XHRcdC8vLT4gJzxsYWJlbCBhcyBuYW1lPiBpcyByZXF1aXJlZCAnXG5cdFx0XHRcdFx0XHRcdC8vLT4gb3IgaWYgbm90IGV4aXN0cyBvciBlbXB0eSBqdXN0ICd0aGlzIGZpZWxkIGlzIHJlcXVpcmVkJ1xuXHRcdFx0XHRcdFx0XHR2YXIgZGVmYXVsdFJldHVybk1zZyBcdD0gJ3RoaXMgRGF0ZSBmaWVsZCBpcyByZXF1aXJlZCc7XG5cdFx0XHRcdFx0XHRcdHZhciByZXR1cm5Nc2cgXHRcdFx0XHQ9ICh0eXBlb2Ygc2NvcGUudG8ubGFiZWwgIT09ICd1bmRlZmluZWQnKSA/ICgoc2NvcGUudG8ubGFiZWwgIT09ICcnKSA/IHNjb3BlLnRvLmxhYmVsICsgJyBpcyByZXF1aXJlZCcgOiBkZWZhdWx0UmV0dXJuTXNnKSA6IGRlZmF1bHRSZXR1cm5Nc2c7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXR1cm5Nc2c7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHR7XG5cdFx0XHRcdGlkXHRcdFx0XHRcdFx0XHRcdDogJ1RleGFyZWEnLFxuXHRcdFx0XHRuYW1lXHRcdFx0XHRcdFx0XHQ6ICdUZXh0YXJlYScsXG5cdFx0XHRcdHN1YnRpdGxlXHRcdFx0XHRcdDogJ1RleHRhcmVhJyxcblx0XHRcdFx0Z3JvdXBcdFx0XHRcdFx0XHRcdDogJ1RleHRhcmVhJyxcblx0XHRcdFx0Zm9ybWx5VHlwZVx0XHRcdFx0OiAndGV4dGFyZWEnLFxuXHRcdFx0XHRmb3JtbHlTdWJ0eXBlXHRcdFx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5TGFiZWxcdFx0XHRcdDogJycsXG5cdFx0XHRcdGZvcm1seVJlcXVpcmVkXHRcdDogZmFsc2UsXG5cdFx0XHRcdGZvcm1seURlc2NpcHRpb25cdDogJycsXG5cdFx0XHRcdGZvcm1seU9wdGlvbnNcdFx0XHQ6IFtdLFxuXHRcdFx0XHRmb3JtbHlFeHByZXNzaW9uUHJvcGVydGllczoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRvcnNcdDoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRpb25cdDoge1xuXHRcdFx0XHRcdG1lc3NhZ2VzXHQ6IHtcblx0XHRcdFx0XHRcdHJlcXVpcmVkOiBmdW5jdGlvbih2aWV3VmFsdWUsIG1vZGVsVmFsdWUsIHNjb3BlKSB7XG5cdFx0XHRcdFx0XHRcdC8vcmV0dXJuIGEgcmVxdWlyZWQgdmFsaWRhdGlvbiBtZXNzYWdlIDpcblx0XHRcdFx0XHRcdFx0Ly8tPiAnPGxhYmVsIGFzIG5hbWU+IGlzIHJlcXVpcmVkICdcblx0XHRcdFx0XHRcdFx0Ly8tPiBvciBpZiBub3QgZXhpc3RzIG9yIGVtcHR5IGp1c3QgJ3RoaXMgZmllbGQgaXMgcmVxdWlyZWQnXG5cdFx0XHRcdFx0XHRcdHZhciBkZWZhdWx0UmV0dXJuTXNnIFx0PSAndGhpcyBUZXh0YXJlYSBmaWVsZCBpcyByZXF1aXJlZCc7XG5cdFx0XHRcdFx0XHRcdHZhciByZXR1cm5Nc2cgXHRcdFx0XHQ9ICh0eXBlb2Ygc2NvcGUudG8ubGFiZWwgIT09ICd1bmRlZmluZWQnKSA/ICgoc2NvcGUudG8ubGFiZWwgIT09ICcnKSA/IHNjb3BlLnRvLmxhYmVsICsgJyBpcyByZXF1aXJlZCcgOiBkZWZhdWx0UmV0dXJuTXNnKSA6IGRlZmF1bHRSZXR1cm5Nc2c7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXR1cm5Nc2c7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHR7XG5cdFx0XHRcdGlkXHRcdFx0XHRcdFx0XHRcdDogJ1JpY2hUZXh0RWRpdG9yJyxcblx0XHRcdFx0bmFtZVx0XHRcdFx0XHRcdFx0OiAnUmljaFRleHRFZGl0b3InLFxuXHRcdFx0XHRzdWJ0aXRsZVx0XHRcdFx0XHQ6ICdSaWNoVGV4dEVkaXRvcicsXG5cdFx0XHRcdGdyb3VwXHRcdFx0XHRcdFx0XHQ6ICdUZXh0YXJlYScsXG5cdFx0XHRcdGZvcm1seVR5cGVcdFx0XHRcdDogJ3JpY2hFZGl0b3InLFxuXHRcdFx0XHRmb3JtbHlTdWJ0eXBlXHRcdFx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5TGFiZWxcdFx0XHRcdDogJycsXG5cdFx0XHRcdGZvcm1seVJlcXVpcmVkXHRcdDogZmFsc2UsXG5cdFx0XHRcdGZvcm1seURlc2NpcHRpb25cdDogJycsXG5cdFx0XHRcdGZvcm1seU9wdGlvbnNcdFx0XHQ6IFtdLFxuXHRcdFx0XHRmb3JtbHlFeHByZXNzaW9uUHJvcGVydGllczoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRvcnMgXHRcdFx0XHRcdDoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRpb25cdDoge1xuXHRcdFx0XHRcdG1lc3NhZ2VzOiB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlZDogZnVuY3Rpb24odmlld1ZhbHVlLCBtb2RlbFZhbHVlLCBzY29wZSkge1xuXHRcdFx0XHRcdFx0XHQvL3JldHVybiBhIHJlcXVpcmVkIHZhbGlkYXRpb24gbWVzc2FnZSA6XG5cdFx0XHRcdFx0XHRcdC8vLT4gJzxsYWJlbCBhcyBuYW1lPiBpcyByZXF1aXJlZCAnXG5cdFx0XHRcdFx0XHRcdC8vLT4gb3IgaWYgbm90IGV4aXN0cyBvciBlbXB0eSBqdXN0ICd0aGlzIGZpZWxkIGlzIHJlcXVpcmVkJ1xuXHRcdFx0XHRcdFx0XHR2YXIgZGVmYXVsdFJldHVybk1zZ1x0PSAndGhpcyBSaWNoVGV4dEVkaXRvciBmaWVsZCBpcyByZXF1aXJlZCc7XG5cdFx0XHRcdFx0XHRcdHZhciByZXR1cm5Nc2cgXHRcdFx0XHQ9ICh0eXBlb2Ygc2NvcGUudG8ubGFiZWwgIT09ICd1bmRlZmluZWQnKSA/ICgoc2NvcGUudG8ubGFiZWwgIT09ICcnKSA/IHNjb3BlLnRvLmxhYmVsICsgJyBpcyByZXF1aXJlZCcgOiBkZWZhdWx0UmV0dXJuTXNnKSA6IGRlZmF1bHRSZXR1cm5Nc2c7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXR1cm5Nc2c7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHR7XG5cdFx0XHRcdGlkXHRcdFx0XHRcdFx0XHRcdDogJ1JhZGlvJyxcblx0XHRcdFx0bmFtZVx0XHRcdFx0XHRcdFx0OiAnUmFkaW8nLFxuXHRcdFx0XHRzdWJ0aXRsZVx0XHRcdFx0XHQ6ICdSYWRpbycsXG5cdFx0XHRcdG9wdGlvbnNcdFx0XHRcdFx0XHQ6IFtdLFxuXHRcdFx0XHRncm91cFx0XHRcdFx0XHRcdFx0OiAnUmFkaW8nLFxuXHRcdFx0XHRmb3JtbHlUeXBlXHRcdFx0XHQ6ICdyYWRpbycsXG5cdFx0XHRcdGZvcm1seVN1YnR5cGVcdFx0XHQ6ICcnLFxuXHRcdFx0XHRmb3JtbHlMYWJlbFx0XHRcdFx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5UmVxdWlyZWRcdFx0OiBmYWxzZSxcblx0XHRcdFx0Zm9ybWx5RGVzY2lwdGlvblx0OiAnJyAsXG5cdFx0XHRcdGZvcm1seU9wdGlvbnNcdFx0XHQ6IFtdLFxuXHRcdFx0XHRmb3JtbHlFeHByZXNzaW9uUHJvcGVydGllczoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRvcnNcdDoge30sXG5cdFx0XHRcdGZvcm1seVZhbGlkYXRpb25cdDoge1xuXHRcdFx0XHRcdG1lc3NhZ2VzOiB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlZDogZnVuY3Rpb24odmlld1ZhbHVlLCBtb2RlbFZhbHVlLCBzY29wZSkge1xuXHRcdFx0XHRcdFx0XHQvL3JldHVybiBhIHJlcXVpcmVkIHZhbGlkYXRpb24gbWVzc2FnZSA6XG5cdFx0XHRcdFx0XHRcdC8vLT4gJzxsYWJlbCBhcyBuYW1lPiBpcyByZXF1aXJlZCAnXG5cdFx0XHRcdFx0XHRcdC8vLT4gb3IgaWYgbm90IGV4aXN0cyBvciBlbXB0eSBqdXN0ICd0aGlzIGZpZWxkIGlzIHJlcXVpcmVkJ1xuXHRcdFx0XHRcdFx0XHR2YXIgZGVmYXVsdFJldHVybk1zZyBcdD0gJ3RoaXMgUGFzc3dvcmQgZmllbGQgaXMgcmVxdWlyZWQnO1xuXHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuTXNnIFx0XHRcdFx0PSAodHlwZW9mIHNjb3BlLnRvLmxhYmVsICE9PSAndW5kZWZpbmVkJykgPyAoKHNjb3BlLnRvLmxhYmVsICE9PSAnJykgPyBzY29wZS50by5sYWJlbCArICcgaXMgcmVxdWlyZWQnIDogZGVmYXVsdFJldHVybk1zZykgOiBkZWZhdWx0UmV0dXJuTXNnO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmV0dXJuTXNnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0e1xuXHRcdFx0XHRpZFx0XHRcdFx0XHRcdFx0XHQ6ICdDaGVja2JveCcsXG5cdFx0XHRcdG5hbWVcdFx0XHRcdFx0XHRcdDogJ0NoZWNrYm94Jyxcblx0XHRcdFx0c3VidGl0bGVcdFx0XHRcdFx0OiAnQ2hlY2tib3gnLFxuXHRcdFx0XHRncm91cFx0XHRcdFx0XHRcdFx0OiAnQ2hlY2tib3gnLFxuXHRcdFx0XHRmb3JtbHlUeXBlXHRcdFx0XHQ6ICdjaGVja2JveCcsXG5cdFx0XHRcdGZvcm1seVN1YnR5cGVcdFx0XHQ6ICcnLFxuXHRcdFx0XHRmb3JtbHlMYWJlbFx0XHRcdFx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5UmVxdWlyZWRcdFx0OiBmYWxzZSxcblx0XHRcdFx0Zm9ybWx5RGVzY2lwdGlvblx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5T3B0aW9uc1x0XHRcdDogW10sXG5cdFx0XHRcdGZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0Zm9ybWx5VmFsaWRhdG9yc1x0OiB7fSxcblx0XHRcdFx0Zm9ybWx5VmFsaWRhdGlvblx0OiB7XG5cdFx0XHRcdFx0bWVzc2FnZXM6IHtcblx0XHRcdFx0XHRcdHJlcXVpcmVkOiBmdW5jdGlvbih2aWV3VmFsdWUsIG1vZGVsVmFsdWUsIHNjb3BlKSB7XG5cdFx0XHRcdFx0XHRcdC8vcmV0dXJuIGEgcmVxdWlyZWQgdmFsaWRhdGlvbiBtZXNzYWdlIDpcblx0XHRcdFx0XHRcdFx0Ly8tPiAnPGxhYmVsIGFzIG5hbWU+IGlzIHJlcXVpcmVkICdcblx0XHRcdFx0XHRcdFx0Ly8tPiBvciBpZiBub3QgZXhpc3RzIG9yIGVtcHR5IGp1c3QgJ3RoaXMgZmllbGQgaXMgcmVxdWlyZWQnXG5cdFx0XHRcdFx0XHRcdHZhciBkZWZhdWx0UmV0dXJuTXNnIFx0PSAndGhpcyBDaGVja2JveCBmaWVsZCBpcyByZXF1aXJlZCc7XG5cdFx0XHRcdFx0XHRcdHZhciByZXR1cm5Nc2cgXHRcdFx0XHQ9ICh0eXBlb2Ygc2NvcGUudG8ubGFiZWwgIT09ICd1bmRlZmluZWQnKSA/ICgoc2NvcGUudG8ubGFiZWwgIT09ICcnKSA/IHNjb3BlLnRvLmxhYmVsICsgJyBpcyByZXF1aXJlZCcgOiBkZWZhdWx0UmV0dXJuTXNnKSA6IGRlZmF1bHRSZXR1cm5Nc2c7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXR1cm5Nc2c7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHR7XG5cdFx0XHRcdGlkXHRcdFx0XHRcdFx0XHRcdDogJ0Jhc2ljU2VsZWN0Jyxcblx0XHRcdFx0bmFtZVx0XHRcdFx0XHRcdFx0OiAnQmFzaWMgc2VsZWN0Jyxcblx0XHRcdFx0c3VidGl0bGVcdFx0XHRcdFx0OiAnQmFzaWMgc2VsZWN0Jyxcblx0XHRcdFx0b3B0aW9uc1x0XHRcdFx0XHRcdDogW10sXG5cdFx0XHRcdGdyb3VwXHRcdFx0XHRcdFx0XHQ6ICdTZWxlY3QnLFxuXHRcdFx0XHRmb3JtbHlUeXBlXHRcdFx0XHQ6ICdiYXNpY1NlbGVjdCcsXG5cdFx0XHRcdGZvcm1seVN1YnR5cGVcdFx0XHQ6ICcnLFxuXHRcdFx0XHRmb3JtbHlMYWJlbFx0XHRcdFx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5UmVxdWlyZWRcdFx0OiBmYWxzZSxcblx0XHRcdFx0Zm9ybWx5RGVzY2lwdGlvblx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5T3B0aW9uc1x0XHRcdDogW10sXG5cdFx0XHRcdGZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0Zm9ybWx5VmFsaWRhdG9yc1x0OiB7fSxcblx0XHRcdFx0Zm9ybWx5VmFsaWRhdGlvblx0OiB7XG5cdFx0XHRcdFx0bWVzc2FnZXM6IHtcblx0XHRcdFx0XHRcdHJlcXVpcmVkOiBmdW5jdGlvbih2aWV3VmFsdWUsIG1vZGVsVmFsdWUsIHNjb3BlKSB7XG5cdFx0XHRcdFx0XHRcdC8vcmV0dXJuIGEgcmVxdWlyZWQgdmFsaWRhdGlvbiBtZXNzYWdlIDpcblx0XHRcdFx0XHRcdFx0Ly8tPiAnPGxhYmVsIGFzIG5hbWU+IGlzIHJlcXVpcmVkICdcblx0XHRcdFx0XHRcdFx0Ly8tPiBvciBpZiBub3QgZXhpc3RzIG9yIGVtcHR5IGp1c3QgJ3RoaXMgZmllbGQgaXMgcmVxdWlyZWQnXG5cdFx0XHRcdFx0XHRcdHZhciBkZWZhdWx0UmV0dXJuTXNnIFx0PSAndGhpcyBCYXNpYyBzZWxlY3QgZmllbGQgaXMgcmVxdWlyZWQnO1xuXHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuTXNnIFx0XHRcdFx0PSAodHlwZW9mIHNjb3BlLnRvLmxhYmVsICE9PSAndW5kZWZpbmVkJykgPyAoKHNjb3BlLnRvLmxhYmVsICE9PSAnJykgPyBzY29wZS50by5sYWJlbCArICcgaXMgcmVxdWlyZWQnIDogZGVmYXVsdFJldHVybk1zZykgOiBkZWZhdWx0UmV0dXJuTXNnO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmV0dXJuTXNnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0e1xuXHRcdFx0XHRpZFx0XHRcdFx0XHRcdFx0XHQ6ICdHcm91cGVkU2VsZWN0Jyxcblx0XHRcdFx0bmFtZVx0XHRcdFx0XHRcdFx0OiAnR3JvdXBlZCBTZWxlY3QnLFxuXHRcdFx0XHRzdWJ0aXRsZVx0XHRcdFx0XHQ6ICdHcm91cGVkIFNlbGVjdCcsXG5cdFx0XHRcdG9wdGlvbnNcdFx0XHRcdFx0XHQ6IFtdLFxuXHRcdFx0XHRncm91cFx0XHRcdFx0XHRcdFx0OiAnU2VsZWN0Jyxcblx0XHRcdFx0Zm9ybWx5VHlwZVx0XHRcdFx0OiAnZ3JvdXBlZFNlbGVjdCcsXG5cdFx0XHRcdGZvcm1seVN1YnR5cGVcdFx0XHQ6ICcnLFxuXHRcdFx0XHRmb3JtbHlMYWJlbFx0XHRcdFx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5UmVxdWlyZWRcdFx0OiBmYWxzZSxcblx0XHRcdFx0Zm9ybWx5RGVzY2lwdGlvblx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5T3B0aW9uc1x0XHRcdDogW10sXG5cdFx0XHRcdGZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0Zm9ybWx5VmFsaWRhdG9yc1x0OiB7fSxcblx0XHRcdFx0Zm9ybWx5VmFsaWRhdGlvblx0OiB7XG5cdFx0XHRcdFx0bWVzc2FnZXNcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0cmVxdWlyZWRcdDogZnVuY3Rpb24odmlld1ZhbHVlLCBtb2RlbFZhbHVlLCBzY29wZSkge1xuXHRcdFx0XHRcdFx0XHQvL3JldHVybiBhIHJlcXVpcmVkIHZhbGlkYXRpb24gbWVzc2FnZSA6XG5cdFx0XHRcdFx0XHRcdC8vLT4gJzxsYWJlbCBhcyBuYW1lPiBpcyByZXF1aXJlZCAnXG5cdFx0XHRcdFx0XHRcdC8vLT4gb3IgaWYgbm90IGV4aXN0cyBvciBlbXB0eSBqdXN0ICd0aGlzIGZpZWxkIGlzIHJlcXVpcmVkJ1xuXHRcdFx0XHRcdFx0XHR2YXIgZGVmYXVsdFJldHVybk1zZyBcdD0gJ3RoaXMgR3JvdXBlZCBTZWxlY3QgZmllbGQgaXMgcmVxdWlyZWQnO1xuXHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuTXNnIFx0XHRcdFx0PSAodHlwZW9mIHNjb3BlLnRvLmxhYmVsICE9PSAndW5kZWZpbmVkJykgPyAoKHNjb3BlLnRvLmxhYmVsICE9PSAnJykgPyBzY29wZS50by5sYWJlbCArICcgaXMgcmVxdWlyZWQnIDogZGVmYXVsdFJldHVybk1zZykgOiBkZWZhdWx0UmV0dXJuTXNnO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmV0dXJuTXNnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHRcdHNlbGVjdGVkQ29udHJvbCA6ICdub25lJyAsXG5cdFx0XHR0ZW1wb3J5Q29uZmlnIFx0OiB7XG5cdFx0XHRcdHNlbGVjdGVkQ29udHJvbFx0XHQ6ICdub25lJyxcblx0XHRcdFx0Zm9ybWx5TGFiZWxcdFx0XHRcdDogJ2xhYmVsJyxcblx0XHRcdFx0Zm9ybWx5UmVxdWlyZWRcdFx0OiBmYWxzZSxcblx0XHRcdFx0Zm9ybWx5RGVzY2lwdGlvblx0OiAnJyxcblx0XHRcdFx0Zm9ybWx5UGxhY2Vob2xkZXJcdDogJycsXG5cdFx0XHRcdGZvcm1seU9wdGlvbnMgXHRcdDogW10sXG5cdFx0XHRcdC8vZXhwcmVzc2lvbnMvdmFsaWRhdGlvbiBmaWVsZHNcblx0XHRcdFx0Zm9ybWx5RXhwcmVzc2lvblByb3BlcnRpZXM6IHt9LFxuXHRcdFx0XHRmb3JtbHlWYWxpZGF0b3JzXHQ6IHt9LFxuXHRcdFx0XHRmb3JtbHlWYWxpZGF0aW9uXHQ6IHt9XG5cdFx0XHR9XG5cblx0fTtcblxuXHQvL3Jlc2V0XG5cdGFuZ3VsYXIuY29weShuZXdOeWFTZWxlY3RPYmosIG55YVNlbGVjdE9iaik7XG5cdHJldHVybiB0cnVlO1xufTtcblxuLyoqXG5cdCogZXF1aXZhbGVudCB0byBmb3JtRmllbE1hbmFnZSBzZXJ2aWNlIGluIGVhc3kgZm9ybSBnZW5lcmF0b3Jcblx0Ki9cbmNvbnN0IGdldENvbmZpZ3VyYXRpb25Nb2RlbEluaXQgPSAoKSA9PiB7XG5cdGxldCBjb25maWd1cmF0aW9uTW9kZWxJbml0ID0ge1xuXHRcdGFjdGl2ZUxpbmU6IDEsXG5cdFx0bGlzdENvbmZpZ1N0ZXA6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaW5pdCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2ZpcnN0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2Vjb25kJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndGhpcmQnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0c3RlcEluZGljYXRvcnM6ICBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRjb25maWdTdGVwQ291bnRlciA6IDAsXG5cdFx0c3VibWl0QnV0dG9uVGV4dCAgOiAnc3VibWl0Jyxcblx0XHRjYW5jZWxCdXR0b25UZXh0ICA6ICdjYW5jZWwnLFxuXHRcdGxpbmVzOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGxpbmU6MSxcblx0XHRcdFx0XHRcdFx0YWN0aXZlQ29sdW1uIDogMSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudW1Db2x1bW46IDEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV4aXN0OnRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2w6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTonbm9uZScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleTogJ25vbmUnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHRlbXBsYXRlT3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnbm9uZScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdub25lJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdEZXNjcmlwdGl2ZSB0ZXh0J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRdXG5cdH07XG5cdHJldHVybiBjb25maWd1cmF0aW9uTW9kZWxJbml0O1xufTtcblxuY29uc3QgZ2V0RW1wdHlDb25maWdNb2RlbFJlc3VsdCA9ICgpID0+IHtcblx0bGV0IGNvbmZpZ3VyYXRpb25Nb2RlbFJlc3VsdCA9IHtcblx0XHRhY3RpdmVMaW5lOiAxLFxuXHRcdGxpc3RDb25maWdTdGVwOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2luaXQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdmaXJzdCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3NlY29uZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3RoaXJkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRdLFxuXHRcdHN0ZXBJbmRpY2F0b3JzOiAgW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0Y29uZmlnU3RlcENvdW50ZXI6IDAsXG5cdFx0c3VibWl0QnV0dG9uVGV4dCA6ICdzdWJtaXQnLFxuXHRcdGNhbmNlbEJ1dHRvblRleHQ6ICdjYW5jZWwnLFxuXHRcdGxpbmVzOiBbXVxuXHR9O1xuXHRyZXR1cm4gYW5ndWxhci5jb3B5KGNvbmZpZ3VyYXRpb25Nb2RlbFJlc3VsdCk7XG59O1xuXG5cblxuY29uc3QgcmVzZXREYXRhTW9kZWwgPSAob2JqKSA9PiB7XG5cdGxldCBlbXB0eURhdGFNb2RlbCA9IHt9O1xuXHRhbmd1bGFyLmNvcHkoZW1wdHlEYXRhTW9kZWwsIG9iaik7XG5cdHJldHVybiB0cnVlO1xufTtcblxuXG5jb25zdCBnZXRFcnJvck9iamVjdCA9IChlcnJvclRpdGxlLCBlcnJvck1lc3NhZ2UpID0+IHtcblx0bGV0IG1lc3NhZ2VPYmogPSB7XG5cdFx0bm9FcnJvciA6IGZhbHNlLFxuXHRcdHRpdGxlXHRcdDogJycsXG5cdFx0TWVzc2FnZVx0OiAnJ1xuXHR9O1xuXHRtZXNzYWdlT2JqLm5vRXJyb3JcdD0gZmFsc2U7XG5cdG1lc3NhZ2VPYmoudGl0bGUgXHRcdD0gZXJyb3JUaXRsZTtcblx0bWVzc2FnZU9iai5NZXNzYWdlIFx0PSBlcnJvck1lc3NhZ2U7XG5cdHJldHVybiBtZXNzYWdlT2JqO1xufTtcblxuY29uc3QgZ2V0TWVzc2FnZU9iamVjdCA9IChtZXNzYWdlVGl0bGUsIG1lc3NhZ2VCb2R5KSA9PiB7XG5cdGxldCBtZXNzYWdlT2JqID0ge1xuXHRcdG5vRXJyb3IgXHQ6IGZhbHNlLFxuXHRcdHRpdGxlXHRcdFx0OiAnJyxcblx0XHRNZXNzYWdlXHRcdDogJydcblx0fTtcblx0bWVzc2FnZU9iai5ub0Vycm9yXHQ9IHRydWU7XG5cdG1lc3NhZ2VPYmoudGl0bGUgXHRcdD0gbWVzc2FnZVRpdGxlO1xuXHRtZXNzYWdlT2JqLk1lc3NhZ2UgXHQ9IG1lc3NhZ2VCb2R5O1xuXHRyZXR1cm4gbWVzc2FnZU9iajtcbn07XG5cbmNvbnN0IHJlc2V0Rm9ybWx5TW9kZWwgPSAoZm9ybWx5TW9kZWwpID0+IHtcblx0dmFyIHJlc2V0Zm9ybWx5ID0gW107XG5cdGFuZ3VsYXIuY29weShyZXNldGZvcm1seSwgZm9ybWx5TW9kZWwpO1xufTtcblxuY29uc3QgZXh0cmFjdFRlbXBsYXRlT3B0aW9uRGVzY3JpcHRpb24gPSAob2JqKSA9PiB0eXBlb2Ygb2JqLnRlbXBsYXRlT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyAodHlwZW9mIG9iai50ZW1wbGF0ZU9wdGlvbnMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnPyBvYmoudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uOiAnJykgOiAnJztcblxuY29uc3QgZXh0cmFjdFRlbXBsYXRlT3B0aW9uUGxhY2Vob2xkZXIgPSAob2JqKSA9PiB0eXBlb2Ygb2JqLnRlbXBsYXRlT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyAodHlwZW9mIG9iai50ZW1wbGF0ZU9wdGlvbnMucGxhY2Vob2xkZXIgIT09ICd1bmRlZmluZWQnPyBvYmoudGVtcGxhdGVPcHRpb25zLnBsYWNlaG9sZGVyOiAnJykgOiAnJztcblxuY29uc3QgZXh0cmFjdFRlbXBsYXRlT3B0aW9uVHlwZSA9IChvYmopID0+IHR5cGVvZiBvYmouc3VidHlwZSAhPT0gJ3VuZGVmaW5lZCc/IG9iai5zdWJ0eXBlOiAnJztcblxuLy8gY29uc3QgaXNUZW1wbGF0ZU9wdGlvbkRlZmluZWQgPSAob2JqKSA9PiB0eXBlb2Ygb2JqLnRlbXBsYXRlT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogZmFsc2U7XG5cbmNvbnN0IGV4dHJhY3RUZW1wbGF0ZU9wdGlvbkxhYmVsID0gKG9iaikgPT4gdHlwZW9mIG9iai50ZW1wbGF0ZU9wdGlvbnMgIT09ICd1bmRlZmluZWQnID8gKHR5cGVvZiBvYmoudGVtcGxhdGVPcHRpb25zLmxhYmVsICE9PSAndW5kZWZpbmVkJz8gb2JqLnRlbXBsYXRlT3B0aW9ucy5sYWJlbDogJycpIDogJyc7XG5cbmNvbnN0IGV4dHJhY3RUZW1wbGF0ZU9wdGlvbkRhdGVwaWNrZXJPcHRpb25zID0gKG9iaikgPT4gdHlwZW9mIG9iai50ZW1wbGF0ZU9wdGlvbnMgIT09ICd1bmRlZmluZWQnID8gKHR5cGVvZiBvYmoudGVtcGxhdGVPcHRpb25zLmRhdGVwaWNrZXJPcHRpb25zICE9PSAndW5kZWZpbmVkJz8gYW5ndWxhci5jb3B5KG9iai50ZW1wbGF0ZU9wdGlvbnMuZGF0ZXBpY2tlck9wdGlvbnMpIDogJycpIDogJyc7XG5cbmNvbnN0IGV4dHJhY3RGb3JtbHlFeHByZXNzaW9uUHJvcGVydGllcyA9IChvYmopID0+IHR5cGVvZiBvYmouZm9ybWx5RXhwcmVzc2lvblByb3BlcnRpZXMgIT09ICd1bmRlZmluZWQnID8gYW5ndWxhci5jb3B5KG9iai5mb3JtbHlFeHByZXNzaW9uUHJvcGVydGllcykgOiB7fTtcblxuY29uc3QgZXh0cmFjdEZvcm1seVZhbGlkYXRvcnMgPSAob2JqKSA9PiB0eXBlb2Ygb2JqLmZvcm1seVZhbGlkYXRvcnMgIT09ICd1bmRlZmluZWQnID8gYW5ndWxhci5jb3B5KG9iai5mb3JtbHlWYWxpZGF0b3JzKToge307XG5cbmNvbnN0IGV4dHJhY3RGb3JtbHlWYWxpZGF0aW9uID0gKG9iaikgPT4gdHlwZW9mIG9iai5mb3JtbHlWYWxpZGF0aW9uICE9PSAndW5kZWZpbmVkJyA/ICBhbmd1bGFyLmNvcHkob2JqLmZvcm1seVZhbGlkYXRpb24pIDoge307XG5cbmNvbnN0IGV4dHJhY3RUZW1wbGF0ZU9wdGlvblJlcXVpcmVkID0gKG9iaikgPT4gdHlwZW9mIG9iai50ZW1wbGF0ZU9wdGlvbnMgIT09ICd1bmRlZmluZWQnID8gKHR5cGVvZiBvYmoudGVtcGxhdGVPcHRpb25zLnJlcXVpcmVkICE9PSAndW5kZWZpbmVkJz8gb2JqLnRlbXBsYXRlT3B0aW9ucy5yZXF1aXJlZDogJycpIDogJyc7XG5cbmNvbnN0IGV4dHJhY3RUZW1wbGF0ZU9wdGlvbk9wdGlvbnMgPSAob2JqKSA9PiB0eXBlb2Ygb2JqLnRlbXBsYXRlT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyAodHlwZW9mIG9iai50ZW1wbGF0ZU9wdGlvbnMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCc/IG9iai50ZW1wbGF0ZU9wdGlvbnMub3B0aW9uczogJycpIDogJyc7XG5cbmNvbnN0IGFkZERhdGVwaWNrZXJPcHRpb25zUHJvcGVydHkgPSAoZmllbGRUb1B1c2gsIGNvbmZpZ3VyYXRpb25Nb2RlbCxsaW5lSW5kZXgpID0+IGZpZWxkVG9QdXNoLnRlbXBsYXRlT3B0aW9ucy5kYXRlcGlja2VyT3B0aW9ucyA9IGV4dHJhY3RUZW1wbGF0ZU9wdGlvbkRhdGVwaWNrZXJPcHRpb25zKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbCk7XG5cblxuY29uc3QgYWRkT25lQ29sdW1uSGVhZGVyID0gKGZvcm1seU1vZGVsLCBjb25maWd1cmF0aW9uTW9kZWwsbGluZUluZGV4KSA9PiB7XG5cdC8qKlxuXHRcdCogdGV4dCBoZWFkZXIgaXMgc3RvcmVkIGluIFwiZGVzY3JpcHRpb25cIiBpbiB0ZW1wbGF0ZU90aW9uIG1vZGVsXG5cdFx0Ki9cblx0bGV0IGhlYWRlclRlbXBsYXRlQ29sMCA9IGA8ZGl2IGNsYXNzPVwicm93XCI+PGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiPjxoMiBjbGFzcz1cInRleHQtY2VudGVyXCI+JHtleHRyYWN0VGVtcGxhdGVPcHRpb25EZXNjcmlwdGlvbihjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpfTxoMj48L2Rpdj48L2Rpdj48aHIvPmA7XG5cdGZvcm1seU1vZGVsLnB1c2goXG5cdFx0e1xuXHRcdFx0dGVtcGxhdGU6IHR5cGVvZiBjb25maWd1cmF0aW9uTW9kZWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmxpbmVzW2xpbmVJbmRleF1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbHVtbnNbMF1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbnRyb2xcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnR5cGUgIT09ICd1bmRlZmluZWQnID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sLnR5cGUgPT09ICdoZWFkZXInID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlclRlbXBsYXRlQ29sMFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiAnPGRpdj48L2Rpdj4nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogJzxkaXY+PC9kaXY+J1xuXHRcdH1cblx0KTtcbn07XG5cblxuY29uc3QgYWRkT25lQ29sdW1uQ29udHJvbCA9IChmb3JtbHlNb2RlbCwgY29uZmlndXJhdGlvbk1vZGVsLGxpbmVJbmRleCkgPT4ge1xuXHRsZXQgZmllbGRUb1B1c2ggPSB7XG5cdFx0Y2xhc3NOYW1lXHQ6ICdjb2wteHMtMTInLFxuXHRcdHR5cGVcdDogdHlwZW9mIGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbC50eXBlICE9PSAndW5kZWZpbmVkJyA/IChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wudHlwZSA9PT0gJ25vbmUnID8gJ2JsYW5rJzogY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sLnR5cGUpOiAnYmxhbmsnLFxuXHRcdGtleVx0XHQ6IHR5cGVvZiBjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wua2V5ICE9PSAndW5kZWZpbmVkJyA/ICBjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wua2V5IDogJ2JsYW5rJyArIERhdGUubm93KCksXG5cdFx0dGVtcGxhdGVPcHRpb25zOiB7XG5cdFx0XHR0eXBlICAgICAgICAgICAgICAgICAgOiBleHRyYWN0VGVtcGxhdGVPcHRpb25UeXBlKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbCksXG5cdFx0XHRsYWJlbCAgICAgICAgICAgICAgICAgOiBleHRyYWN0VGVtcGxhdGVPcHRpb25MYWJlbChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpLFxuXHRcdFx0cmVxdWlyZWQgICAgICAgICAgICAgIDogZXh0cmFjdFRlbXBsYXRlT3B0aW9uUmVxdWlyZWQoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sKSxcblx0XHRcdHBsYWNlaG9sZGVyICAgICAgICAgICA6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvblBsYWNlaG9sZGVyKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbCksXG5cdFx0XHRkZXNjcmlwdGlvbiAgICAgICAgICAgOiBleHRyYWN0VGVtcGxhdGVPcHRpb25EZXNjcmlwdGlvbihjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpLFxuXHRcdFx0b3B0aW9ucyAgICAgICAgICAgICAgIDogZXh0cmFjdFRlbXBsYXRlT3B0aW9uT3B0aW9ucyhjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpXG5cdFx0fSxcblx0XHRleHByZXNzaW9uUHJvcGVydGllcyAgOiBleHRyYWN0Rm9ybWx5RXhwcmVzc2lvblByb3BlcnRpZXMoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sKSxcblx0XHR2YWxpZGF0b3JzICAgICAgICAgICAgOiBleHRyYWN0Rm9ybWx5VmFsaWRhdG9ycyhjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpLFxuXHRcdHZhbGlkYXRpb24gICAgICAgICAgICA6IGV4dHJhY3RGb3JtbHlWYWxpZGF0aW9uKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbClcblx0fTtcblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvL2RhdGVwaWNrZXIgYWRkaXRpb25uYWwgcGFydGljdWxhciBwcm9wZXJ0eVxuXHQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdGlmIChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wudHlwZSA9PT0gJ2RhdGVwaWNrZXInKSBhZGREYXRlcGlja2VyT3B0aW9uc1Byb3BlcnR5KGZpZWxkVG9QdXNoLCBjb25maWd1cmF0aW9uTW9kZWwsbGluZUluZGV4KTtcblxuXHRmb3JtbHlNb2RlbC5wdXNoKGZpZWxkVG9QdXNoKTtcbn07XG5cblxuXG5jb25zdCBhZGRUd29Db2x1bW5Db250cm9sID0gKGZvcm1seU1vZGVsLCBjb25maWd1cmF0aW9uTW9kZWwsbGluZUluZGV4KSA9PiB7XG5cblx0Ly90ZXh0IGhlYWRlciBpcyBzdG9yZWQgaW4gXCJkZXNjcmlwdGlvblwiIGluIHRlbXBsYXRlT3Rpb24gbW9kZWxcblx0bGV0IGhlYWRlclRlbXBsYXRlQ29sMCA9IHtcblx0XHRjbGFzc05hbWU6ICdjb2wteHMtNicsXG5cdFx0dGVtcGxhdGUgOiBgPGRpdiBjbGFzcz1cInJvd1wiPjxkaXYgY2xhc3M9XCJcIj48aDIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPiR7ZXh0cmFjdFRlbXBsYXRlT3B0aW9uRGVzY3JpcHRpb24oY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sKX08aDI+PGhyLz48L2Rpdj48L2Rpdj5gXG5cdH07XG5cblx0bGV0IGhlYWRlclRlbXBsYXRlQ29sMSA9IHtcblx0XHRjbGFzc05hbWU6ICdjb2wteHMtNicsXG5cdFx0dGVtcGxhdGUgOiBgPGRpdiBjbGFzcz1cInJvd1wiPjxkaXYgY2xhc3M9XCJcIj48aDIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPiR7ZXh0cmFjdFRlbXBsYXRlT3B0aW9uRGVzY3JpcHRpb24oY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sKX08aDI+PGhyLz48L2Rpdj48L2Rpdj5gXG5cdH07XG5cblx0bGV0IGNvbnRyb2xDb2wwID0ge1xuXHRcdGNsYXNzTmFtZVx0OiAnY29sLXhzLTYnLFxuXHRcdHR5cGVcdFx0XHQ6IHR5cGVvZiBjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wudHlwZSAhPT0gJ3VuZGVmaW5lZCcgPyAoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sLnR5cGUgPT09ICdub25lJyA/ICdibGFuayc6IGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbC50eXBlKTogJ2JsYW5rJyxcblx0XHRrZXlcdFx0XHRcdDogdHlwZW9mIGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbC5rZXkgIT09ICd1bmRlZmluZWQnID8gIGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbC5rZXkgOiAnYmxhbmsnICsgRGF0ZS5ub3coKSxcblx0XHR0ZW1wbGF0ZU9wdGlvbnM6IHtcblx0XHRcdFx0dHlwZVx0XHRcdFx0OiBleHRyYWN0VGVtcGxhdGVPcHRpb25UeXBlKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbCksXG5cdFx0XHRcdGxhYmVsXHRcdFx0XHQ6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvbkxhYmVsKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbCksXG5cdFx0XHRcdHJlcXVpcmVkIFx0XHQ6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvblJlcXVpcmVkKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbCksXG5cdFx0XHRcdHBsYWNlaG9sZGVyIDogZXh0cmFjdFRlbXBsYXRlT3B0aW9uUGxhY2Vob2xkZXIoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sKSxcblx0XHRcdFx0ZGVzY3JpcHRpb24gOiBleHRyYWN0VGVtcGxhdGVPcHRpb25EZXNjcmlwdGlvbihjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpLFxuXHRcdFx0XHRvcHRpb25zIFx0XHQ6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvbk9wdGlvbnMoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sKVxuXHRcdH0sXG5cdFx0XHRcdGV4cHJlc3Npb25Qcm9wZXJ0aWVzIDogZXh0cmFjdEZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbCksXG5cdFx0XHRcdHZhbGlkYXRvcnMgOiBleHRyYWN0Rm9ybWx5VmFsaWRhdG9ycyhjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpLFxuXHRcdFx0XHR2YWxpZGF0aW9uIDogZXh0cmFjdEZvcm1seVZhbGlkYXRpb24oY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sKVxuXHRcdH07XG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly9kYXRlcGlja2VyIGFkZGl0aW9ubmFsIHBhcnRpY3VsYXIgcHJvcGVydHlcblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRpZiAoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sLnR5cGUgPT09ICdkYXRlcGlja2VyJykgYWRkRGF0ZXBpY2tlck9wdGlvbnNQcm9wZXJ0eShjb250cm9sQ29sMCwgY29uZmlndXJhdGlvbk1vZGVsLGxpbmVJbmRleCk7XG5cblx0bGV0IGNvbnRyb2xDb2wxID0gIHtcblx0XHRjbGFzc05hbWVcdDogJ2NvbC14cy02Jyxcblx0XHR0eXBlXHRcdFx0OiB0eXBlb2YgY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sLnR5cGUgIT09ICd1bmRlZmluZWQnID8gIChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzFdLmNvbnRyb2wudHlwZSA9PT0gJ25vbmUnID8gJ2JsYW5rJzogY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sLnR5cGUpIDogJ2JsYW5rJyxcblx0XHRrZXlcdFx0XHRcdDogdHlwZW9mIGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMV0uY29udHJvbC5rZXkgIT09ICd1bmRlZmluZWQnID8gIGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMV0uY29udHJvbC5rZXkgOiAnYmxhbmsnICsgRGF0ZS5ub3coKSxcblx0XHR0ZW1wbGF0ZU9wdGlvbnM6IHtcblx0XHRcdFx0dHlwZVx0XHRcdFx0OiBleHRyYWN0VGVtcGxhdGVPcHRpb25UeXBlKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMV0uY29udHJvbCksXG5cdFx0XHRcdGxhYmVsXHRcdFx0XHQ6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvbkxhYmVsKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMV0uY29udHJvbCksXG5cdFx0XHRcdHJlcXVpcmVkIFx0XHQ6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvblJlcXVpcmVkKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMV0uY29udHJvbCksXG5cdFx0XHRcdHBsYWNlaG9sZGVyIDogZXh0cmFjdFRlbXBsYXRlT3B0aW9uUGxhY2Vob2xkZXIoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sKSxcblx0XHRcdFx0ZGVzY3JpcHRpb24gOiBleHRyYWN0VGVtcGxhdGVPcHRpb25EZXNjcmlwdGlvbihjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzFdLmNvbnRyb2wpLFxuXHRcdFx0XHRvcHRpb25zIFx0XHQ6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvbk9wdGlvbnMoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sKVxuXHRcdH0sXG5cdFx0XHRcdGV4cHJlc3Npb25Qcm9wZXJ0aWVzIDogZXh0cmFjdEZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMV0uY29udHJvbCksXG5cdFx0XHRcdHZhbGlkYXRvcnMgOiBleHRyYWN0Rm9ybWx5VmFsaWRhdG9ycyhjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzFdLmNvbnRyb2wpLFxuXHRcdFx0XHR2YWxpZGF0aW9uIDogZXh0cmFjdEZvcm1seVZhbGlkYXRpb24oY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sKVxuXHRcdH07XG5cblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvL2RhdGVwaWNrZXIgYWRkaXRpb25uYWwgcGFydGljdWxhciBwcm9wZXJ0eVxuXHQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdGlmIChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzFdLmNvbnRyb2wudHlwZSA9PT0gJ2RhdGVwaWNrZXInKSBhZGREYXRlcGlja2VyT3B0aW9uc1Byb3BlcnR5KGNvbnRyb2xDb2wxLCBjb25maWd1cmF0aW9uTW9kZWwsbGluZUluZGV4KTtcblxuXHRsZXQgRmllbGRHcm91cCA9IFtdO1xuXG5cdGlmIChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wudHlwZSA9PT0gJ2hlYWRlcicpIHtcblx0XHRGaWVsZEdyb3VwLnB1c2goaGVhZGVyVGVtcGxhdGVDb2wwKTtcblx0fWVsc2V7XG5cdFx0RmllbGRHcm91cC5wdXNoKGNvbnRyb2xDb2wwKTtcblx0fVxuXG5cdGlmIChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzFdLmNvbnRyb2wudHlwZSA9PT0gJ2hlYWRlcicpIHtcblx0XHRGaWVsZEdyb3VwLnB1c2goaGVhZGVyVGVtcGxhdGVDb2wxKTtcblx0fWVsc2V7XG5cdFx0RmllbGRHcm91cC5wdXNoKGNvbnRyb2xDb2wxKTtcblx0fVxuXG5cdGZvcm1seU1vZGVsLnB1c2goe1xuXHRcdGNsYXNzTmFtZVx0OiAncm93Jyxcblx0XHRmaWVsZEdyb3VwOiBGaWVsZEdyb3VwXG5cdH0pO1xuXG59O1xuXG5cbmNvbnN0IGFkZFRocmVlQ29sdW1uQ29udHJvbCA9IChmb3JtbHlNb2RlbCwgY29uZmlndXJhdGlvbk1vZGVsLGxpbmVJbmRleCkgPT4ge1xuXHQvL3RleHQgaGVhZGVyIGlzIHN0b3JlZCBpbiBcImRlc2NyaXB0aW9uXCIgaW4gdGVtcGxhdGVPdGlvbiBtb2RlbFxuXHRsZXQgaGVhZGVyVGVtcGxhdGVDb2wwID0gIHtcblx0XHRjbGFzc05hbWVcdDogJ2NvbC14cy00Jyxcblx0XHR0ZW1wbGF0ZSBcdDogYDxkaXYgY2xhc3M9XCJyb3dcIj48ZGl2IGNsYXNzPVwiXCI+PGgyIGNsYXNzPVwidGV4dC1jZW50ZXJcIj4ke2V4dHJhY3RUZW1wbGF0ZU9wdGlvbkRlc2NyaXB0aW9uKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbCl9PGgyPjxoci8+PC9kaXY+PC9kaXY+YFxuXHR9O1xuXG5cdGxldCBoZWFkZXJUZW1wbGF0ZUNvbDEgPSAge1xuXHRcdGNsYXNzTmFtZVx0OiAnY29sLXhzLTQnLFxuXHRcdHRlbXBsYXRlXHQ6IGA8ZGl2IGNsYXNzPVwicm93XCI+PGRpdiBjbGFzcz1cIlwiPjxoMiBjbGFzcz1cInRleHQtY2VudGVyXCI+JHtleHRyYWN0VGVtcGxhdGVPcHRpb25EZXNjcmlwdGlvbihjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzFdLmNvbnRyb2wpfTxoMj48aHIvPjwvZGl2PjwvZGl2PmBcblx0fTtcblxuXHRsZXQgaGVhZGVyVGVtcGxhdGVDb2wyID0gIHtcblx0XHRjbGFzc05hbWVcdDogJ2NvbC14cy00Jyxcblx0XHR0ZW1wbGF0ZVx0OiBgPGRpdiBjbGFzcz1cInJvd1wiPjxkaXYgY2xhc3M9XCJcIj48aDIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPiR7ZXh0cmFjdFRlbXBsYXRlT3B0aW9uRGVzY3JpcHRpb24oY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1syXS5jb250cm9sKX08aDI+PGhyLz48L2Rpdj48L2Rpdj5gXG5cdH07XG5cblx0dmFyIGNvbnRyb2xDb2wwID0gICAgIHtcblx0XHRcdGNsYXNzTmFtZVx0OiAnY29sLXhzLTQnLFxuXHRcdFx0dHlwZVx0XHRcdDogdHlwZW9mIGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbC50eXBlICE9PSAndW5kZWZpbmVkJyA/IChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wudHlwZSA9PT0gJ25vbmUnID8gJ2JsYW5rJzogY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sLnR5cGUpOiAnYmxhbmsnLFxuXHRcdFx0a2V5XHRcdFx0XHQ6IHR5cGVvZiBjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wua2V5ICE9PSAndW5kZWZpbmVkJyA/ICBjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wua2V5IDogJ2JsYW5rJyArIERhdGUubm93KCksXG5cdFx0XHR0ZW1wbGF0ZU9wdGlvbnM6IHtcblx0XHRcdFx0XHR0eXBlXHRcdFx0XHQ6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvblR5cGUoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sKSxcblx0XHRcdFx0XHRsYWJlbFx0XHRcdFx0OiBleHRyYWN0VGVtcGxhdGVPcHRpb25MYWJlbChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpLFxuXHRcdFx0XHRcdHJlcXVpcmVkIFx0XHQ6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvblJlcXVpcmVkKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbCksXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXIgOiBleHRyYWN0VGVtcGxhdGVPcHRpb25QbGFjZWhvbGRlcihjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uIDogZXh0cmFjdFRlbXBsYXRlT3B0aW9uRGVzY3JpcHRpb24oY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sKSxcblx0XHRcdFx0XHRvcHRpb25zIFx0XHQ6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvbk9wdGlvbnMoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1swXS5jb250cm9sKVxuXHRcdFx0fSxcblx0XHRcdFx0XHRleHByZXNzaW9uUHJvcGVydGllcyA6IGV4dHJhY3RGb3JtbHlFeHByZXNzaW9uUHJvcGVydGllcyhjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpLFxuXHRcdFx0XHRcdHZhbGlkYXRvcnMgOiBleHRyYWN0Rm9ybWx5VmFsaWRhdG9ycyhjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpLFxuXHRcdFx0XHRcdHZhbGlkYXRpb24gOiBleHRyYWN0Rm9ybWx5VmFsaWRhdGlvbihjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wpXG5cdFx0fTtcblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvL2RhdGVwaWNrZXIgYWRkaXRpb25uYWwgcGFydGljdWxhciBwcm9wZXJ0eVxuXHQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdGlmIChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzBdLmNvbnRyb2wudHlwZSA9PT0gJ2RhdGVwaWNrZXInKSBhZGREYXRlcGlja2VyT3B0aW9uc1Byb3BlcnR5KGNvbnRyb2xDb2wwLCBjb25maWd1cmF0aW9uTW9kZWwsbGluZUluZGV4KTtcblxuXHRsZXQgY29udHJvbENvbDEgPSAge1xuXHRcdFx0Y2xhc3NOYW1lXHQ6ICdjb2wteHMtNCcsXG5cdFx0XHR0eXBlXHRcdFx0OiB0eXBlb2YgY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sLnR5cGUgIT09ICd1bmRlZmluZWQnID8gIChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzFdLmNvbnRyb2wudHlwZSA9PT0gJ25vbmUnID8gJ2JsYW5rJzogY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sLnR5cGUpIDogJ2JsYW5rJyxcblx0XHRcdGtleVx0XHRcdFx0OiB0eXBlb2YgY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sLmtleSAhPT0gJ3VuZGVmaW5lZCcgPyAgY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sLmtleSA6ICdibGFuaycgKyBEYXRlLm5vdygpLFxuXHRcdFx0dGVtcGxhdGVPcHRpb25zOiB7XG5cdFx0XHRcdFx0dHlwZVx0XHRcdFx0OiBleHRyYWN0VGVtcGxhdGVPcHRpb25UeXBlKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMV0uY29udHJvbCksXG5cdFx0XHRcdFx0bGFiZWxcdFx0XHRcdDogZXh0cmFjdFRlbXBsYXRlT3B0aW9uTGFiZWwoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sKSxcblx0XHRcdFx0XHRyZXF1aXJlZCBcdFx0OiBleHRyYWN0VGVtcGxhdGVPcHRpb25SZXF1aXJlZChjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzFdLmNvbnRyb2wpLFxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyIDogZXh0cmFjdFRlbXBsYXRlT3B0aW9uUGxhY2Vob2xkZXIoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbiA6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvbkRlc2NyaXB0aW9uKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMV0uY29udHJvbCksXG5cdFx0XHRcdFx0b3B0aW9ucyBcdFx0OiBleHRyYWN0VGVtcGxhdGVPcHRpb25PcHRpb25zKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMV0uY29udHJvbClcblx0XHRcdH0sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblByb3BlcnRpZXMgOiBleHRyYWN0Rm9ybWx5RXhwcmVzc2lvblByb3BlcnRpZXMoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sKSxcblx0XHRcdFx0XHR2YWxpZGF0b3JzIDogZXh0cmFjdEZvcm1seVZhbGlkYXRvcnMoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sKSxcblx0XHRcdFx0XHR2YWxpZGF0aW9uIDogZXh0cmFjdEZvcm1seVZhbGlkYXRpb24oY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sKVxuXHRcdH07XG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly9kYXRlcGlja2VyIGFkZGl0aW9ubmFsIHBhcnRpY3VsYXIgcHJvcGVydHlcblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRpZiAoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1sxXS5jb250cm9sLnR5cGUgPT09ICdkYXRlcGlja2VyJykgYWRkRGF0ZXBpY2tlck9wdGlvbnNQcm9wZXJ0eShjb250cm9sQ29sMSwgY29uZmlndXJhdGlvbk1vZGVsLGxpbmVJbmRleCk7XG5cblx0bGV0IGNvbnRyb2xDb2wyID0gIHtcblx0XHRcdGNsYXNzTmFtZVx0OiAnY29sLXhzLTQnLFxuXHRcdFx0dHlwZVx0XHRcdDogdHlwZW9mIGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMl0uY29udHJvbC50eXBlICE9PSAndW5kZWZpbmVkJyA/ICAoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1syXS5jb250cm9sLnR5cGUgPT09ICdub25lJyA/ICdibGFuayc6IGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMl0uY29udHJvbC50eXBlKSA6ICdibGFuaycsXG5cdFx0XHRrZXlcdFx0XHRcdDogdHlwZW9mIGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMl0uY29udHJvbC5rZXkgIT09ICd1bmRlZmluZWQnID8gIGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMl0uY29udHJvbC5rZXkgOiAnYmxhbmsnICsgRGF0ZS5ub3coKSxcblx0XHRcdHRlbXBsYXRlT3B0aW9uczoge1xuXHRcdFx0XHRcdHR5cGVcdFx0XHRcdDogZXh0cmFjdFRlbXBsYXRlT3B0aW9uVHlwZShjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzJdLmNvbnRyb2wpLFxuXHRcdFx0XHRcdGxhYmVsXHRcdFx0XHQ6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvbkxhYmVsKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMl0uY29udHJvbCksXG5cdFx0XHRcdFx0cmVxdWlyZWQgXHRcdDogZXh0cmFjdFRlbXBsYXRlT3B0aW9uUmVxdWlyZWQoY29uZmlndXJhdGlvbk1vZGVsLmxpbmVzW2xpbmVJbmRleF0uY29sdW1uc1syXS5jb250cm9sKSxcblx0XHRcdFx0XHRwbGFjZWhvbGRlciA6IGV4dHJhY3RUZW1wbGF0ZU9wdGlvblBsYWNlaG9sZGVyKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMl0uY29udHJvbCksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb24gOiBleHRyYWN0VGVtcGxhdGVPcHRpb25EZXNjcmlwdGlvbihjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzJdLmNvbnRyb2wpLFxuXHRcdFx0XHRcdG9wdGlvbnMgXHRcdDogZXh0cmFjdFRlbXBsYXRlT3B0aW9uT3B0aW9ucyhjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zWzJdLmNvbnRyb2wpXG5cdFx0XHR9LFxuXHRcdFx0XHRcdGV4cHJlc3Npb25Qcm9wZXJ0aWVzIDogZXh0cmFjdEZvcm1seUV4cHJlc3Npb25Qcm9wZXJ0aWVzKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMl0uY29udHJvbCksXG5cdFx0XHRcdFx0dmFsaWRhdG9ycyA6IGV4dHJhY3RGb3JtbHlWYWxpZGF0b3JzKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMl0uY29udHJvbCksXG5cdFx0XHRcdFx0dmFsaWRhdGlvbiA6IGV4dHJhY3RGb3JtbHlWYWxpZGF0aW9uKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMl0uY29udHJvbClcblx0XHR9O1xuXHQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdC8vZGF0ZXBpY2tlciBhZGRpdGlvbm5hbCBwYXJ0aWN1bGFyIHByb3BlcnR5XG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0aWYgKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMl0uY29udHJvbC50eXBlID09PSAnZGF0ZXBpY2tlcicpIGFkZERhdGVwaWNrZXJPcHRpb25zUHJvcGVydHkoY29udHJvbENvbDIsIGNvbmZpZ3VyYXRpb25Nb2RlbCxsaW5lSW5kZXgpO1xuXG5cdGxldCBGaWVsZEdyb3VwID0gW107XG5cblx0aWYgKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMF0uY29udHJvbC50eXBlID09PSAnaGVhZGVyJykge1xuXHRcdEZpZWxkR3JvdXAucHVzaChoZWFkZXJUZW1wbGF0ZUNvbDApO1xuXHR9ZWxzZXtcblx0XHRGaWVsZEdyb3VwLnB1c2goY29udHJvbENvbDApO1xuXHR9XG5cblx0aWYgKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMV0uY29udHJvbC50eXBlID09PSAnaGVhZGVyJykge1xuXHRcdEZpZWxkR3JvdXAucHVzaChoZWFkZXJUZW1wbGF0ZUNvbDEpO1xuXHR9ZWxzZXtcblx0XHRGaWVsZEdyb3VwLnB1c2goY29udHJvbENvbDEpO1xuXHR9XG5cblx0aWYgKGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnNbMl0uY29udHJvbC50eXBlID09PSAnaGVhZGVyJykge1xuXHRcdEZpZWxkR3JvdXAucHVzaChoZWFkZXJUZW1wbGF0ZUNvbDIpO1xuXHR9ZWxzZXtcblx0XHRGaWVsZEdyb3VwLnB1c2goY29udHJvbENvbDIpO1xuXHR9XG5cblxuXHRmb3JtbHlNb2RlbC5wdXNoKHtcblx0XHRcdFx0Y2xhc3NOYW1lOiAncm93Jyxcblx0XHRcdFx0ZmllbGRHcm91cDogRmllbGRHcm91cFxuXHR9KTtcblxufTtcblxuXG5cblxuXG5leHBvcnQge1xuXHRyZXNldE55YVNlbGVjdCxcblx0Z2V0Q29uZmlndXJhdGlvbk1vZGVsSW5pdCxcblx0Z2V0RW1wdHlDb25maWdNb2RlbFJlc3VsdCxcblx0cmVzZXREYXRhTW9kZWwsXG5cdGdldEVycm9yT2JqZWN0LFxuXHRnZXRNZXNzYWdlT2JqZWN0LFxuXHRyZXNldEZvcm1seU1vZGVsLFxuXHRhZGRPbmVDb2x1bW5IZWFkZXIsXG5cdGFkZE9uZUNvbHVtbkNvbnRyb2wsXG5cdGFkZFR3b0NvbHVtbkNvbnRyb2wsXG5cdGFkZFRocmVlQ29sdW1uQ29udHJvbFxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZm9ybXZpZXdlci9jb21wb25lbnRzL21vZGVsc1RyYW5zbGF0b3IvZWRhLmVhc3lGb3JtVmlld2VyLm1vZGVsVHJhbnNsYXRvci5zZXJ2aWNlLmhlbHBlcnMuanMiXSwic291cmNlUm9vdCI6IiJ9");
/***/ },
/* 16 */
/***/ function(module, exports, __webpack_require__) {
eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _edaEasyFormViewerFormly = __webpack_require__(17);\n\nfunction edaEasyFormViewerConfig(formlyConfigProvider) {\n\n formlyConfigProvider.setType({\n name: 'richEditor',\n template: _edaEasyFormViewerFormly.richTextTemplate,\n wrapper: ['bootstrapLabel', 'bootstrapHasError']\n });\n\n formlyConfigProvider.setType({\n name: 'blank',\n template: _edaEasyFormViewerFormly.blankTemplate\n });\n\n formlyConfigProvider.setType({\n name: 'subTitle',\n template: _edaEasyFormViewerFormly.subTitleTemplate\n });\n\n formlyConfigProvider.setType({\n name: 'basicSelect',\n template: _edaEasyFormViewerFormly.basicSelectTemplate,\n wrapper: ['bootstrapLabel', 'bootstrapHasError']\n });\n\n formlyConfigProvider.setType({\n name: 'groupedSelect',\n template: _edaEasyFormViewerFormly.groupedSelectTemplate,\n wrapper: ['bootstrapLabel', 'bootstrapHasError']\n });\n\n ////////////////////////////\n // angular UI date picker\n ////////////////////////////\n // thx Kent C. Dodds\n\n var attributes = ['date-disabled', 'custom-class', 'show-weeks', 'starting-day', 'init-date', 'min-mode', 'max-mode', 'format-day', 'format-month', 'format-year', 'format-day-header', 'format-day-title', 'format-month-title', 'year-range', 'shortcut-propagation', 'datepicker-popup', 'show-button-bar', 'current-text', 'clear-text', 'close-text', 'close-on-date-selection', 'datepicker-append-to-body'];\n\n var bindings = ['datepicker-mode', 'min-date', 'max-date'];\n\n var ngModelAttrs = {};\n\n angular.forEach(attributes, function (attr) {\n ngModelAttrs[camelize(attr)] = { attribute: attr };\n });\n\n angular.forEach(bindings, function (binding) {\n ngModelAttrs[camelize(binding)] = { bound: binding };\n });\n\n formlyConfigProvider.setType({\n name: 'datepicker',\n template: _edaEasyFormViewerFormly.datepickerTemplate,\n defaultOptions: {\n ngModelAttrs: ngModelAttrs,\n templateOptions: {\n datepickerOptions: {\n format: 'dd/MM/yyyy',\n initDate: new Date(),\n showWeeks: false\n }\n }\n },\n wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n controller: ['$scope', function ($scope) {\n // console.info('ui calendar init');\n $scope.datepicker = {};\n\n // make sure the initial value is of type DATE!\n var currentModelVal = $scope.model[$scope.options.key];\n if (typeof currentModelVal == 'string') {\n $scope.model[$scope.options.key] = new Date(currentModelVal);\n }\n\n $scope.datepicker.opened = false;\n $scope.datepicker.open = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n // console.info('ui calendar open event');\n $scope.datepicker.opened = !$scope.datepicker.opened;\n };\n }]\n\n });\n\n /**\n * wrappers to show validation errors\n * without having to rewrite formly types\n */\n formlyConfigProvider.setWrapper([{\n template: _edaEasyFormViewerFormly.validationTemplate\n }]);\n\n function camelize(string) {\n string = string.replace(/[\\-_\\s]+(.)?/g, function (match, chr) {\n return chr ? chr.toUpperCase() : '';\n });\n // Ensure 1st char is always lowercase\n return string.replace(/^([A-Z])/, function (match, chr) {\n return chr ? chr.toLowerCase() : '';\n });\n }\n}\n\nedaEasyFormViewerConfig.$inject = ['formlyConfigProvider'];\n\nexports.default = edaEasyFormViewerConfig;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29uZmlnL2VkYS5lYXN5Rm9ybVZpZXdlci5jb25maWcuanM/ZjI2NCJdLCJuYW1lcyI6WyJlZGFFYXN5Rm9ybVZpZXdlckNvbmZpZyIsImZvcm1seUNvbmZpZ1Byb3ZpZGVyIiwic2V0VHlwZSIsIm5hbWUiLCJ0ZW1wbGF0ZSIsIndyYXBwZXIiLCJhdHRyaWJ1dGVzIiwiYmluZGluZ3MiLCJuZ01vZGVsQXR0cnMiLCJhbmd1bGFyIiwiZm9yRWFjaCIsImF0dHIiLCJjYW1lbGl6ZSIsImF0dHJpYnV0ZSIsImJpbmRpbmciLCJib3VuZCIsImRlZmF1bHRPcHRpb25zIiwidGVtcGxhdGVPcHRpb25zIiwiZGF0ZXBpY2tlck9wdGlvbnMiLCJmb3JtYXQiLCJpbml0RGF0ZSIsIkRhdGUiLCJzaG93V2Vla3MiLCJjb250cm9sbGVyIiwiJHNjb3BlIiwiZGF0ZXBpY2tlciIsImN1cnJlbnRNb2RlbFZhbCIsIm1vZGVsIiwib3B0aW9ucyIsImtleSIsIm9wZW5lZCIsIm9wZW4iLCIkZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsInNldFdyYXBwZXIiLCJzdHJpbmciLCJyZXBsYWNlIiwibWF0Y2giLCJjaHIiLCJ0b1VwcGVyQ2FzZSIsInRvTG93ZXJDYXNlIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBV0EsU0FBU0EsdUJBQVQsQ0FBaUNDLG9CQUFqQyxFQUF1RDs7QUFFckRBLHVCQUFxQkMsT0FBckIsQ0FDRTtBQUNFQyxVQUFVLFlBRFo7QUFFRUMsdURBRkY7QUFHRUMsYUFBVSxDQUFDLGdCQUFELEVBQW1CLG1CQUFuQjtBQUhaLEdBREY7O0FBUUFKLHVCQUFxQkMsT0FBckIsQ0FDRTtBQUNFQyxVQUFVLE9BRFo7QUFFRUM7QUFGRixHQURGOztBQU9BSCx1QkFBcUJDLE9BQXJCLENBQ0U7QUFDRUMsVUFBVSxVQURaO0FBRUVDO0FBRkYsR0FERjs7QUFP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QUFOLEdBQTBCLEVBQWpDO0FBQ0QsS0FGUSxDQUFUO0FBR0E7QUFDQSxXQUFPSixPQUFPQyxPQUFQLENBQWUsVUFBZixFQUEyQixVQUFTQyxLQUFULEVBQWdCQyxHQUFoQixFQUFxQjtBQUNyRCxhQUFPQSxNQUFNQSxJQUFJRSxXQUFKLEVBQU4sR0FBMEIsRUFBakM7QUFDRCxLQUZNLENBQVA7QUFHRDtBQUdGOztBQUVEekMsd0JBQXdCMEMsT0FBeEIsR0FBa0MsQ0FBQyxzQkFBRCxDQUFsQzs7a0JBRWUxQyx1QiIsImZpbGUiOiIxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHJpY2hUZXh0VGVtcGxhdGUsXG4gIGJsYW5rVGVtcGxhdGUsXG4gIHN1YlRpdGxlVGVtcGxhdGUsXG4gIGJhc2ljU2VsZWN0VGVtcGxhdGUsXG4gIGdyb3VwZWRTZWxlY3RUZW1wbGF0ZSxcbiAgZGF0ZXBpY2tlclRlbXBsYXRlLFxuICB2YWxpZGF0aW9uVGVtcGxhdGVcbn0gICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4vZWRhLmVhc3lGb3JtVmlld2VyLmZvcm1seS50ZW1wbGF0ZSc7XG5cblxuZnVuY3Rpb24gZWRhRWFzeUZvcm1WaWV3ZXJDb25maWcoZm9ybWx5Q29uZmlnUHJvdmlkZXIpIHtcblxuICBmb3JtbHlDb25maWdQcm92aWRlci5zZXRUeXBlKFxuICAgIHtcbiAgICAgIG5hbWUgICAgOiAncmljaEVkaXRvcicsXG4gICAgICB0ZW1wbGF0ZTogcmljaFRleHRUZW1wbGF0ZSxcbiAgICAgIHdyYXBwZXIgOiBbJ2Jvb3RzdHJhcExhYmVsJywgJ2Jvb3RzdHJhcEhhc0Vycm9yJ11cbiAgICB9XG4gICk7XG5cbiAgZm9ybWx5Q29uZmlnUHJvdmlkZXIuc2V0VHlwZShcbiAgICB7XG4gICAgICBuYW1lICAgIDogJ2JsYW5rJyxcbiAgICAgIHRlbXBsYXRlOiBibGFua1RlbXBsYXRlXG4gICAgfVxuICApO1xuXG4gIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoXG4gICAge1xuICAgICAgbmFtZSAgICA6ICdzdWJUaXRsZScsXG4gICAgICB0ZW1wbGF0ZTogc3ViVGl0bGVUZW1wbGF0ZVxuICAgIH1cbiAgKTtcblxuICBmb3JtbHlDb25maWdQcm92aWRlci5zZXRUeXBlKFxuICAgIHtcbiAgICAgIG5hbWUgICAgICA6ICdiYXNpY1NlbGVjdCcsXG4gICAgICB0ZW1wbGF0ZSAgOiBiYXNpY1NlbGVjdFRlbXBsYXRlLFxuICAgICAgd3JhcHBlciAgIDogWydib290c3RyYXBMYWJlbCcsICdib290c3RyYXBIYXNFcnJvciddXG4gICAgfVxuICApO1xuXG4gIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoXG4gICAge1xuICAgICAgbmFtZSAgICAgIDogJ2dyb3VwZWRTZWxlY3QnLFxuICAgICAgdGVtcGxhdGUgIDogZ3JvdXBlZFNlbGVjdFRlbXBsYXRlLFxuICAgICAgd3JhcHBlciAgIDogWydib290c3RyYXBMYWJlbCcsICdib290c3RyYXBIYXNFcnJvciddXG4gICAgfVxuICApO1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gYW5ndWxhciBVSSBkYXRlIHBpY2tlclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIHRoeCBLZW50IEMuIERvZGRzXG5cbiAgY29uc3QgYXR0cmlidXRlcyA9IFtcbiAgICAgJ2RhdGUtZGlzYWJsZWQnLFxuICAgICAnY3VzdG9tLWNsYXNzJyxcbiAgICAgJ3Nob3ctd2Vla3MnLFxuICAgICAnc3RhcnRpbmctZGF5JyxcbiAgICAgJ2luaXQtZGF0ZScsXG4gICAgICdtaW4tbW9kZScsXG4gICAgICdtYXgtbW9kZScsXG4gICAgICdmb3JtYXQtZGF5JyxcbiAgICAgJ2Zvcm1hdC1tb250aCcsXG4gICAgICdmb3JtYXQteWVhcicsXG4gICAgICdmb3JtYXQtZGF5LWhlYWRlcicsXG4gICAgICdmb3JtYXQtZGF5LXRpdGxlJyxcbiAgICAgJ2Zvcm1hdC1tb250aC10aXRsZScsXG4gICAgICd5ZWFyLXJhbmdlJyxcbiAgICAgJ3Nob3J0Y3V0LXByb3BhZ2F0aW9uJyxcbiAgICAgJ2RhdGVwaWNrZXItcG9wdXAnLFxuICAgICAnc2hvdy1idXR0b24tYmFyJyxcbiAgICAgJ2N1cnJlbnQtdGV4dCcsXG4gICAgICdjbGVhci10ZXh0JyxcbiAgICAgJ2Nsb3NlLXRleHQnLFxuICAgICAnY2xvc2Utb24tZGF0ZS1zZWxlY3Rpb24nLFxuICAgICAnZGF0ZXBpY2tlci1hcHBlbmQtdG8tYm9keSdcbiAgIF07XG5cbiAgY29uc3QgYmluZGluZ3MgPSBbXG4gICAgJ2RhdGVwaWNrZXItbW9kZScsXG4gICAgJ21pbi1kYXRlJyxcbiAgICAnbWF4LWRhdGUnXG4gIF07XG5cbiAgbGV0IG5nTW9kZWxBdHRycyA9IHt9O1xuXG4gIGFuZ3VsYXIuZm9yRWFjaChhdHRyaWJ1dGVzLCAoYXR0cikgPT4ge1xuICAgIG5nTW9kZWxBdHRyc1tjYW1lbGl6ZShhdHRyKV0gPSB7YXR0cmlidXRlOiBhdHRyfTtcbiAgfSk7XG5cbiAgYW5ndWxhci5mb3JFYWNoKGJpbmRpbmdzLCAoYmluZGluZykgPT4ge1xuICAgIG5nTW9kZWxBdHRyc1tjYW1lbGl6ZShiaW5kaW5nKV0gPSB7Ym91bmQ6IGJpbmRpbmd9O1xuICB9KTtcblxuICBmb3JtbHlDb25maWdQcm92aWRlci5zZXRUeXBlKHtcbiAgICBuYW1lIFx0XHRcdDogJ2RhdGVwaWNrZXInLFxuICAgIHRlbXBsYXRlIFx0OiBkYXRlcGlja2VyVGVtcGxhdGUsXG4gICAgZGVmYXVsdE9wdGlvbnM6IHtcbiAgICAgIG5nTW9kZWxBdHRycyBcdFx0OiBuZ01vZGVsQXR0cnMsXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICBkYXRlcGlja2VyT3B0aW9uczoge1xuICAgICAgICAgICAgICBmb3JtYXQ6ICdkZC9NTS95eXl5JyxcbiAgICAgICAgICAgICAgaW5pdERhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIHNob3dXZWVrczogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB3cmFwcGVyIFx0OiBbJ2Jvb3RzdHJhcExhYmVsJywgJ2Jvb3RzdHJhcEhhc0Vycm9yJ10sXG4gICAgY29udHJvbGxlcjogWyckc2NvcGUnLCAoJHNjb3BlKSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oJ3VpIGNhbGVuZGFyIGluaXQnKTtcbiAgICAgICRzY29wZS5kYXRlcGlja2VyICAgICAgICAgPSB7fTtcblxuICAgICAgLy8gbWFrZSBzdXJlIHRoZSBpbml0aWFsIHZhbHVlIGlzIG9mIHR5cGUgREFURSFcbiAgICAgIHZhciBjdXJyZW50TW9kZWxWYWwgPSAkc2NvcGUubW9kZWxbJHNjb3BlLm9wdGlvbnMua2V5XTtcbiAgICAgIGlmICh0eXBlb2YgKGN1cnJlbnRNb2RlbFZhbCkgPT0gJ3N0cmluZycpe1xuICAgICAgICAkc2NvcGUubW9kZWxbJHNjb3BlLm9wdGlvbnMua2V5XSA9IG5ldyBEYXRlKGN1cnJlbnRNb2RlbFZhbCk7XG4gICAgICB9XG5cbiAgICAgICRzY29wZS5kYXRlcGlja2VyLm9wZW5lZCAgPSBmYWxzZTtcbiAgICAgICRzY29wZS5kYXRlcGlja2VyLm9wZW4gICAgPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIC8vIGNvbnNvbGUuaW5mbygndWkgY2FsZW5kYXIgb3BlbiBldmVudCcpO1xuICAgICAgICAkc2NvcGUuZGF0ZXBpY2tlci5vcGVuZWQgPSAhJHNjb3BlLmRhdGVwaWNrZXIub3BlbmVkO1xuICAgICAgfTtcbiAgICB9XVxuXG4gIH0pO1xuXG5cblxuXG5cbiAgLyoqXG4gICAgKiB3cmFwcGVycyB0byBzaG93IHZhbGlkYXRpb24gZXJyb3JzXG4gICAgKiB3aXRob3V0IGhhdmluZyB0byByZXdyaXRlIGZvcm1seSB0eXBlc1xuICAgICovXG4gIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFdyYXBwZXIoW1xuICAgICAge1xuICAgICAgICB0ZW1wbGF0ZTogdmFsaWRhdGlvblRlbXBsYXRlXG4gICAgICB9XG4gICAgXSk7XG5cbiAgZnVuY3Rpb24gY2FtZWxpemUoc3RyaW5nKSB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1tcXC1fXFxzXSsoLik/L2csIGZ1bmN0aW9uKG1hdGNoLCBjaHIpIHtcbiAgICAgIHJldHVybiBjaHIgPyBjaHIudG9VcHBlckNhc2UoKSA6ICcnO1xuICAgIH0pO1xuICAgIC8vIEVuc3VyZSAxc3QgY2hhciBpcyBhbHdheXMgbG93ZXJjYXNlXG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9eKFtBLVpdKS8sIGZ1bmN0aW9uKG1hdGNoLCBjaHIpIHtcbiAgICAgIHJldHVybiBjaHIgPyBjaHIudG9Mb3dlckNhc2UoKSA6ICcnO1xuICAgIH0pO1xuICB9XG5cblxufVxuXG5lZGFFYXN5Rm9ybVZpZXdlckNvbmZpZy4kaW5qZWN0ID0gWydmb3JtbHlDb25maWdQcm92aWRlciddO1xuXG5leHBvcnQgZGVmYXVsdCBlZGFFYXN5Rm9ybVZpZXdlckNvbmZpZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZm9ybXZpZXdlci9jb25maWcvZWRhLmVhc3lGb3JtVmlld2VyLmNvbmZpZy5qcyJdLCJzb3VyY2VSb290IjoiIn0=");
/***/ },
/* 17 */
/***/ function(module, exports) {
eval("\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar richTextTemplate = \"\\n\\t<text-angular name=\\\"{{id}}\\\"\\n\\t\\tclass=\\\"richTextAngular\\\"\\n\\t\\tng-model=\\\"model[options.key || index]\\\">\\n\\t</text-angular>\";\n\nvar blankTemplate = \"<div></div>\";\n\nvar subTitleTemplate = \"\\n\\t<div class=\\\"row\\\">\\n\\t\\t<div class=\\\"\\\">\\n\\t\\t\\t<h4 class=\\\"text-center\\\">\\n\\t\\t\\t{{options.templateOptions.placeholder}}\\n\\t\\t\\t<h4><hr/>\\n\\t\\t</div>\\n\\t</div>\";\n\nvar basicSelectTemplate = \"\\n<ol\\n\\tclass=\\\"nya-bs-select col-sm-12 col-xs-12 col-md-12 col-lg12\\\"\\n\\tng-model=\\\"model[options.key || index]\\\"\\n\\tid=\\\"{{id}}\\\"\\n\\tdisabled=\\\"options.templateOptions.options.length === 0\\\">\\n\\t<li class=\\\"nya-bs-option\\\" nya-bs-option=\\\"option in options.templateOptions.options\\\">\\n\\t\\t<a>{{option.name}}</a>\\n\\t</li>\\n</ol>\";\n\nvar groupedSelectTemplate = \"\\n\\t<ol class=\\\"nya-bs-select col-sm-12 col-xs-12 col-md-12 col-lg12\\\"\\n\\t\\tng-model=\\\"model[options.key || index]\\\"\\n\\t\\tdata-live-search=\\\"true\\\"\\n\\t\\tdisabled=\\\"options.templateOptions.options.length === 0\\\">\\n\\t\\t<li nya-bs-option=\\\"option in options.templateOptions.options group by option.group\\\">\\n\\t\\t\\t<span class=\\\"dropdown-header\\\">{{$group}}</span>\\n\\t\\t\\t<a>\\n\\t\\t\\t\\t<span>{{option.name}}</span>\\n\\t\\t\\t\\t<span class=\\\"glyphicon glyphicon-ok check-mark\\\"></span>\\n\\t\\t\\t</a>\\n\\t\\t</li>\\n\\t</ol>\";\n\nvar datepickerTemplate = \"\\n <p class=\\\"input-group\\\">\\n <span class=\\\"input-group-btn\\\">\\n <button\\n type=\\\"button\\\"\\n class=\\\"btn btn-default\\\"\\n ng-click=\\\"formlyDatePicker.open($event)\\\">\\n <i class=\\\"glyphicon glyphicon-calendar\\\"></i>\\n </button>\\n </span>\\n <input type=\\\"text\\\"\\n id=\\\"{{::id}}\\\"\\n name=\\\"{{::id}}\\\"\\n ng-model=\\\"model[options.key]\\\"\\n class=\\\"form-control\\\"\\n ng-click=\\\"datepicker.open($event)\\\"\\n uib-datepicker-popup=\\\"{{to.datepickerOptions.format}}\\\"\\n is-open=\\\"datepicker.opened\\\"\\n datepicker-options=\\\"to.datepickerOptions\\\"\\n />\\n </p>\\n \";\n\nvar validationTemplate = \"\\n\\t<div class=\\\"formly-template-wrapper form-group\\\"\\n\\t\\t\\t\\t\\t\\tng-class=\\\"{'has-error': options.validation.errorExistsAndShouldBeVisible}\\\">\\n\\t\\t\\t\\t<formly-transclude></formly-transclude>\\n\\t\\t\\t\\t<div class=\\\"validation\\\"\\n\\t\\t\\t\\t\\t\\t\\tng-if=\\\"options.validation.errorExistsAndShouldBeVisible\\\"\\n\\t\\t\\t\\t\\t\\t\\tng-messages=\\\"options.formControl.$error\\\">\\n\\t\\t\\t\\t\\t<div ng-messages-include=\\\"validation.html\\\"></div>\\n\\t\\t\\t\\t\\t<div ng-message=\\\"{{::name}}\\\" ng-repeat=\\\"(name, message) in ::options.validation.messages\\\">\\n\\t\\t\\t\\t\\t\\t{{message(options.formControl.$viewValue, options.formControl.$modelValue, this)}}\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\";\n\nexports.richTextTemplate = richTextTemplate;\nexports.blankTemplate = blankTemplate;\nexports.subTitleTemplate = subTitleTemplate;\nexports.basicSelectTemplate = basicSelectTemplate;\nexports.groupedSelectTemplate = groupedSelectTemplate;\nexports.datepickerTemplate = datepickerTemplate;\nexports.validationTemplate = validationTemplate;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29uZmlnL2VkYS5lYXN5Rm9ybVZpZXdlci5mb3JtbHkudGVtcGxhdGUuanM/NDk2ZCJdLCJuYW1lcyI6WyJyaWNoVGV4dFRlbXBsYXRlIiwiYmxhbmtUZW1wbGF0ZSIsInN1YlRpdGxlVGVtcGxhdGUiLCJiYXNpY1NlbGVjdFRlbXBsYXRlIiwiZ3JvdXBlZFNlbGVjdFRlbXBsYXRlIiwiZGF0ZXBpY2tlclRlbXBsYXRlIiwidmFsaWRhdGlvblRlbXBsYXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFNQSx1SkFBTjs7QUFPQSxJQUFNQyw2QkFBTjs7QUFHQSxJQUFNQywwTEFBTjs7QUFTQSxJQUFNQyxrV0FBTjs7QUFXQSxJQUFNQyx1aEJBQU47O0FBY0EsSUFBTUMsb3RCQUFOOztBQXVCQSxJQUFNQyx5ckJBQU47O1FBZUNOLGdCLEdBQUFBLGdCO1FBQ0FDLGEsR0FBQUEsYTtRQUNBQyxnQixHQUFBQSxnQjtRQUNBQyxtQixHQUFBQSxtQjtRQUNBQyxxQixHQUFBQSxxQjtRQUNBQyxrQixHQUFBQSxrQjtRQUNBQyxrQixHQUFBQSxrQiIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuY29uc3QgcmljaFRleHRUZW1wbGF0ZSA9IGBcblx0PHRleHQtYW5ndWxhciBuYW1lPVwie3tpZH19XCJcblx0XHRjbGFzcz1cInJpY2hUZXh0QW5ndWxhclwiXG5cdFx0bmctbW9kZWw9XCJtb2RlbFtvcHRpb25zLmtleSB8fCBpbmRleF1cIj5cblx0PC90ZXh0LWFuZ3VsYXI+YDtcblxuXG5jb25zdCBibGFua1RlbXBsYXRlID0gYDxkaXY+PC9kaXY+YDtcblxuXG5jb25zdCBzdWJUaXRsZVRlbXBsYXRlID0gYFxuXHQ8ZGl2IGNsYXNzPVwicm93XCI+XG5cdFx0PGRpdiBjbGFzcz1cIlwiPlxuXHRcdFx0PGg0IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cblx0XHRcdHt7b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMucGxhY2Vob2xkZXJ9fVxuXHRcdFx0PGg0Pjxoci8+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PmA7XG5cbmNvbnN0IGJhc2ljU2VsZWN0VGVtcGxhdGUgPSBgXG48b2xcblx0Y2xhc3M9XCJueWEtYnMtc2VsZWN0IGNvbC1zbS0xMiBjb2wteHMtMTIgY29sLW1kLTEyIGNvbC1sZzEyXCJcblx0bmctbW9kZWw9XCJtb2RlbFtvcHRpb25zLmtleSB8fCBpbmRleF1cIlxuXHRpZD1cInt7aWR9fVwiXG5cdGRpc2FibGVkPVwib3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMub3B0aW9ucy5sZW5ndGggPT09IDBcIj5cblx0PGxpIGNsYXNzPVwibnlhLWJzLW9wdGlvblwiIG55YS1icy1vcHRpb249XCJvcHRpb24gaW4gb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMub3B0aW9uc1wiPlxuXHRcdDxhPnt7b3B0aW9uLm5hbWV9fTwvYT5cblx0PC9saT5cbjwvb2w+YDtcblxuY29uc3QgZ3JvdXBlZFNlbGVjdFRlbXBsYXRlID0gYFxuXHQ8b2wgY2xhc3M9XCJueWEtYnMtc2VsZWN0IGNvbC1zbS0xMiBjb2wteHMtMTIgY29sLW1kLTEyIGNvbC1sZzEyXCJcblx0XHRuZy1tb2RlbD1cIm1vZGVsW29wdGlvbnMua2V5IHx8IGluZGV4XVwiXG5cdFx0ZGF0YS1saXZlLXNlYXJjaD1cInRydWVcIlxuXHRcdGRpc2FibGVkPVwib3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMub3B0aW9ucy5sZW5ndGggPT09IDBcIj5cblx0XHQ8bGkgbnlhLWJzLW9wdGlvbj1cIm9wdGlvbiBpbiAgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMub3B0aW9ucyBncm91cCBieSBvcHRpb24uZ3JvdXBcIj5cblx0XHRcdDxzcGFuIGNsYXNzPVwiZHJvcGRvd24taGVhZGVyXCI+e3skZ3JvdXB9fTwvc3Bhbj5cblx0XHRcdDxhPlxuXHRcdFx0XHQ8c3Bhbj57e29wdGlvbi5uYW1lfX08L3NwYW4+XG5cdFx0XHRcdDxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi1vayBjaGVjay1tYXJrXCI+PC9zcGFuPlxuXHRcdFx0PC9hPlxuXHRcdDwvbGk+XG5cdDwvb2w+YDtcblxuY29uc3QgZGF0ZXBpY2tlclRlbXBsYXRlID0gYFxuICA8cCBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICBuZy1jbGljaz1cImZvcm1seURhdGVQaWNrZXIub3BlbigkZXZlbnQpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLWNhbGVuZGFyXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L3NwYW4+XG4gICAgPGlucHV0ICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBpZD1cInt7OjppZH19XCJcbiAgICAgICAgICAgIG5hbWU9XCJ7ezo6aWR9fVwiXG4gICAgICAgICAgICBuZy1tb2RlbD1cIm1vZGVsW29wdGlvbnMua2V5XVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBuZy1jbGljaz1cImRhdGVwaWNrZXIub3BlbigkZXZlbnQpXCJcbiAgICAgICAgICAgIHVpYi1kYXRlcGlja2VyLXBvcHVwPVwie3t0by5kYXRlcGlja2VyT3B0aW9ucy5mb3JtYXR9fVwiXG4gICAgICAgICAgICBpcy1vcGVuPVwiZGF0ZXBpY2tlci5vcGVuZWRcIlxuICAgICAgICAgICAgZGF0ZXBpY2tlci1vcHRpb25zPVwidG8uZGF0ZXBpY2tlck9wdGlvbnNcIlxuICAgIC8+XG4gIDwvcD5cbiAgYDtcblxuY29uc3QgdmFsaWRhdGlvblRlbXBsYXRlID0gYFxuXHQ8ZGl2IGNsYXNzPVwiZm9ybWx5LXRlbXBsYXRlLXdyYXBwZXIgZm9ybS1ncm91cFwiXG5cdFx0XHRcdFx0XHRuZy1jbGFzcz1cIntcXCdoYXMtZXJyb3JcXCc6IG9wdGlvbnMudmFsaWRhdGlvbi5lcnJvckV4aXN0c0FuZFNob3VsZEJlVmlzaWJsZX1cIj5cblx0XHRcdFx0PGZvcm1seS10cmFuc2NsdWRlPjwvZm9ybWx5LXRyYW5zY2x1ZGU+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJ2YWxpZGF0aW9uXCJcblx0XHRcdFx0XHRcdFx0bmctaWY9XCJvcHRpb25zLnZhbGlkYXRpb24uZXJyb3JFeGlzdHNBbmRTaG91bGRCZVZpc2libGVcIlxuXHRcdFx0XHRcdFx0XHRuZy1tZXNzYWdlcz1cIm9wdGlvbnMuZm9ybUNvbnRyb2wuJGVycm9yXCI+XG5cdFx0XHRcdFx0PGRpdiBuZy1tZXNzYWdlcy1pbmNsdWRlPVwidmFsaWRhdGlvbi5odG1sXCI+PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBuZy1tZXNzYWdlPVwie3s6Om5hbWV9fVwiIG5nLXJlcGVhdD1cIihuYW1lLCBtZXNzYWdlKSBpbiA6Om9wdGlvbnMudmFsaWRhdGlvbi5tZXNzYWdlc1wiPlxuXHRcdFx0XHRcdFx0e3ttZXNzYWdlKG9wdGlvbnMuZm9ybUNvbnRyb2wuJHZpZXdWYWx1ZSwgb3B0aW9ucy5mb3JtQ29udHJvbC4kbW9kZWxWYWx1ZSwgdGhpcyl9fVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PmA7XG5cbmV4cG9ydCB7XG5cdHJpY2hUZXh0VGVtcGxhdGUsXG5cdGJsYW5rVGVtcGxhdGUsXG5cdHN1YlRpdGxlVGVtcGxhdGUsXG5cdGJhc2ljU2VsZWN0VGVtcGxhdGUsXG5cdGdyb3VwZWRTZWxlY3RUZW1wbGF0ZSxcblx0ZGF0ZXBpY2tlclRlbXBsYXRlLFxuXHR2YWxpZGF0aW9uVGVtcGxhdGVcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2Zvcm12aWV3ZXIvY29uZmlnL2VkYS5lYXN5Rm9ybVZpZXdlci5mb3JtbHkudGVtcGxhdGUuanMiXSwic291cmNlUm9vdCI6IiJ9");
/***/ },
/* 18 */
/***/ function(module, exports) {
eval("module.exports = {\n\t\"stepway\": {\n\t\t\"version\": \"2.0.0\"\n\t},\n\t\"dragdropway\": {\n\t\t\"version\": \"2.0.0\"\n\t},\n\t\"formviewer\": {\n\t\t\"version\": \"2.0.0\"\n\t}\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Vhc3lGb3JtQ29uZmlnLmpzb24/MzFjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge1xuXHRcInN0ZXB3YXlcIjoge1xuXHRcdFwidmVyc2lvblwiOiBcIjIuMC4wXCJcblx0fSxcblx0XCJkcmFnZHJvcHdheVwiOiB7XG5cdFx0XCJ2ZXJzaW9uXCI6IFwiMi4wLjBcIlxuXHR9LFxuXHRcImZvcm12aWV3ZXJcIjoge1xuXHRcdFwidmVyc2lvblwiOiBcIjIuMC4wXCJcblx0fVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hcHAvZWFzeUZvcm1Db25maWcuanNvblxuLy8gbW9kdWxlIGlkID0gMThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==");
/***/ },
/* 19 */
/***/ function(module, exports, __webpack_require__) {
eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(20);\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = __webpack_require__(22)(content, {});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(false) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\"!!./../../../../node_modules/css-loader/index.js!./../../../../node_modules/postcss-loader/index.js!./../../../../node_modules/sass-loader/index.js!./formviewer.scss\", function() {\n\t\t\tvar newContent = require(\"!!./../../../../node_modules/css-loader/index.js!./../../../../node_modules/postcss-loader/index.js!./../../../../node_modules/sass-loader/index.js!./formviewer.scss\");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvc3R5bGUvZm9ybXZpZXdlci5zY3NzP2ViZDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBeUY7QUFDekY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxnQ0FBZ0MsVUFBVSxFQUFFO0FBQzVDIiwiZmlsZSI6IjE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvaW5kZXguanMhLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvaW5kZXguanMhLi9mb3Jtdmlld2VyLnNjc3NcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9hZGRTdHlsZXMuanNcIikoY29udGVudCwge30pO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG5cdC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG5cdGlmKCFjb250ZW50LmxvY2Fscykge1xuXHRcdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2luZGV4LmpzIS4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2luZGV4LmpzIS4vZm9ybXZpZXdlci5zY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2luZGV4LmpzIS4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2luZGV4LmpzIS4vZm9ybXZpZXdlci5zY3NzXCIpO1xuXHRcdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cdFx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdFx0fSk7XG5cdH1cblx0Ly8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hcHAvZm9ybXZpZXdlci9zdHlsZS9mb3Jtdmlld2VyLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDE5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=");
/***/ },
/* 20 */
/***/ function(module, exports, __webpack_require__) {
eval("exports = module.exports = __webpack_require__(21)();\n// imports\n\n\n// module\nexports.push([module.id, \"/*=========================================================\\n fonts const\\n===========================================================*/\\n.ta-hidden-input {\\n width: 1px;\\n height: 1px;\\n border: none;\\n margin: 0;\\n padding: 0;\\n position: absolute;\\n top: -10000px;\\n left: -10000px;\\n opacity: 0;\\n overflow: hidden; }\\n\\n.ta-root.focussed > .ta-scroll-window.form-control {\\n border-color: #66afe9;\\n outline: 0;\\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\\n\\n.ta-editor.ta-html, .ta-scroll-window.form-control {\\n min-height: 300px;\\n height: auto;\\n overflow: auto;\\n font-family: inherit;\\n font-size: 100%; }\\n\\n.ta-scroll-window.form-control {\\n position: relative;\\n padding: 0; }\\n\\n.ta-scroll-window > .ta-bind {\\n height: auto;\\n min-height: 300px;\\n padding: 6px 12px; }\\n\\n.ta-editor:focus {\\n -webkit-user-select: text;\\n -moz-user-select: text;\\n -ms-user-select: text;\\n user-select: text; }\\n\\n.ta-resizer-handle-overlay {\\n z-index: 100;\\n position: absolute;\\n display: none; }\\n\\n.ta-resizer-handle-overlay > .ta-resizer-handle-info {\\n position: absolute;\\n bottom: 16px;\\n right: 16px;\\n border: 1px solid #000;\\n background-color: #FFF;\\n padding: 0 4px;\\n opacity: .7; }\\n\\n.ta-resizer-handle-overlay > .ta-resizer-handle-background {\\n position: absolute;\\n bottom: 5px;\\n right: 5px;\\n left: 5px;\\n top: 5px;\\n border: 1px solid #000;\\n background-color: rgba(0, 0, 0, 0.2); }\\n\\n.ta-resizer-handle-overlay > .ta-resizer-handle-corner {\\n width: 10px;\\n height: 10px;\\n position: absolute; }\\n\\n.ta-resizer-handle-overlay > .ta-resizer-handle-corner-tl {\\n top: 0;\\n left: 0;\\n border-left: 1px solid #000;\\n border-top: 1px solid #000; }\\n\\n.ta-resizer-handle-overlay > .ta-resizer-handle-corner-tr {\\n top: 0;\\n right: 0;\\n border-right: 1px solid #000;\\n border-top: 1px solid #000; }\\n\\n.ta-resizer-handle-overlay > .ta-resizer-handle-corner-bl {\\n bottom: 0;\\n left: 0;\\n border-left: 1px solid #000;\\n border-bottom: 1px solid #000; }\\n\\n.ta-resizer-handle-overlay > .ta-resizer-handle-corner-br {\\n bottom: 0;\\n right: 0;\\n border: 1px solid #000;\\n cursor: se-resize;\\n background-color: #fff; }\\n\\n.popover {\\n position: absolute;\\n top: 0;\\n left: 0;\\n z-index: 1060;\\n display: none;\\n max-width: 276px;\\n padding: 1px;\\n font-size: 14px;\\n font-weight: 400;\\n line-height: 1.42857143;\\n text-align: left;\\n white-space: normal;\\n background-color: #fff;\\n background-clip: padding-box;\\n border: 1px solid #ccc;\\n border: 1px solid rgba(0, 0, 0, 0.2);\\n border-radius: 6px;\\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); }\\n\\n.popover.top {\\n margin-top: -10px; }\\n\\n.popover.bottom {\\n margin-top: 10px; }\\n\\n.popover-title {\\n padding: 8px 14px;\\n margin: 0;\\n font-size: 14px;\\n background-color: #f7f7f7;\\n border-bottom: 1px solid #ebebeb;\\n border-radius: 5px 5px 0 0; }\\n\\n.popover-content {\\n padding: 9px 14px; }\\n\\n.popover > .arrow, .popover > .arrow:after {\\n position: absolute;\\n display: block;\\n width: 0;\\n height: 0;\\n border-color: transparent;\\n border-style: solid; }\\n\\n.popover > .arrow {\\n border-width: 11px; }\\n\\n.popover > .arrow:after {\\n content: \\\"\\\";\\n border-width: 10px; }\\n\\n.popover.top > .arrow {\\n bottom: -11px;\\n left: 50%;\\n margin-left: -11px;\\n border-top-color: #999;\\n border-top-color: rgba(0, 0, 0, 0.25);\\n border-bottom-width: 0; }\\n\\n.popover.top > .arrow:after {\\n bottom: 1px;\\n margin-left: -10px;\\n content: \\\" \\\";\\n border-top-color: #fff;\\n border-bottom-width: 0; }\\n\\n.popover.bottom > .arrow {\\n top: -11px;\\n left: 50%;\\n margin-left: -11px;\\n border-top-width: 0;\\n border-bottom-color: #999;\\n border-bottom-color: rgba(0, 0, 0, 0.25); }\\n\\n.popover.bottom > .arrow:after {\\n top: 1px;\\n margin-left: -10px;\\n content: \\\" \\\";\\n border-top-width: 0;\\n border-bottom-color: #fff; }\\n\\nbody {\\n margin: 20px;\\n font-family: \\\"Roboto\\\", \\\"Helvetica Neue\\\", Helvetica, Arial, sans-serif; }\\n\\n.ta-scroll-window {\\n margin-bottom: 16px; }\\n\\n/**\\n * formly fields css\\n */\\n.formly-field {\\n margin-bottom: 20px; }\\n\\n.validation {\\n position: absolute;\\n font-size: .8em;\\n color: #a94442; }\\n\\n.formly-template-wrapper {\\n position: relative; }\\n\\n.error-messages {\\n position: relative; }\\n\\n.error-messages, .message, .validation {\\n opacity: 1;\\n transition: .3s linear all; }\\n\\n.message {\\n font-size: .8em;\\n position: absolute;\\n width: 100%;\\n color: #a94442;\\n margin-top: 2px; }\\n\\n.error-messages.ng-enter.ng-enter-active,\\n.message.ng-enter.ng-enter-active,\\n.validation.ng-enter.ng-enter-active {\\n opacity: 1; }\\n\\n.error-messages.ng-enter,\\n.message.ng-enter,\\n.validation.ng-enter {\\n opacity: 0; }\\n\\n.error-messages.ng-leave,\\n.message.ng-leave,\\n.validation.ng-leave {\\n opacity: 1; }\\n\\n.error-messages.ng-leave-active,\\n.message.ng-leave-active,\\n.validation.ng-leave-active {\\n opacity: 0; }\\n\", \"\"]);\n\n// exports\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Zvcm12aWV3ZXIvc3R5bGUvZm9ybXZpZXdlci5zY3NzPzZmOGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7O0FBR0E7QUFDQSx5TEFBeUwsZUFBZSxnQkFBZ0IsaUJBQWlCLGNBQWMsZUFBZSx1QkFBdUIsa0JBQWtCLG1CQUFtQixlQUFlLHFCQUFxQixFQUFFLHdEQUF3RCwwQkFBMEIsZUFBZSx1RkFBdUYsRUFBRSx3REFBd0Qsc0JBQXNCLGlCQUFpQixtQkFBbUIseUJBQXlCLG9CQUFvQixFQUFFLG9DQUFvQyx1QkFBdUIsZUFBZSxFQUFFLGtDQUFrQyxpQkFBaUIsc0JBQXNCLHNCQUFzQixFQUFFLHNCQUFzQiw4QkFBOEIsOEJBQThCLDhCQUE4Qiw4QkFBOEIsRUFBRSxnQ0FBZ0MsaUJBQWlCLHVCQUF1QixrQkFBa0IsRUFBRSwwREFBMEQsdUJBQXVCLGlCQUFpQixnQkFBZ0IsMkJBQTJCLDJCQUEyQixtQkFBbUIsZ0JBQWdCLEVBQUUsZ0VBQWdFLHVCQUF1QixnQkFBZ0IsZUFBZSxjQUFjLGFBQWEsMkJBQTJCLHlDQUF5QyxFQUFFLDREQUE0RCxnQkFBZ0IsaUJBQWlCLHVCQUF1QixFQUFFLCtEQUErRCxXQUFXLFlBQVksZ0NBQWdDLCtCQUErQixFQUFFLCtEQUErRCxXQUFXLGFBQWEsaUNBQWlDLCtCQUErQixFQUFFLCtEQUErRCxjQUFjLFlBQVksZ0NBQWdDLGtDQUFrQyxFQUFFLCtEQUErRCxjQUFjLGFBQWEsMkJBQTJCLHNCQUFzQiwyQkFBMkIsRUFBRSxjQUFjLHVCQUF1QixXQUFXLFlBQVksa0JBQWtCLGtCQUFrQixxQkFBcUIsaUJBQWlCLG9CQUFvQixxQkFBcUIsNEJBQTRCLHFCQUFxQix3QkFBd0IsMkJBQTJCLGlDQUFpQywyQkFBMkIseUNBQXlDLHVCQUF1Qiw4Q0FBOEMsRUFBRSxrQkFBa0Isc0JBQXNCLEVBQUUscUJBQXFCLHFCQUFxQixFQUFFLG9CQUFvQixzQkFBc0IsY0FBYyxvQkFBb0IsOEJBQThCLHFDQUFxQywrQkFBK0IsRUFBRSxzQkFBc0Isc0JBQXNCLEVBQUUsZ0RBQWdELHVCQUF1QixtQkFBbUIsYUFBYSxjQUFjLDhCQUE4Qix3QkFBd0IsRUFBRSx1QkFBdUIsdUJBQXVCLEVBQUUsNkJBQTZCLGtCQUFrQix1QkFBdUIsRUFBRSwyQkFBMkIsa0JBQWtCLGNBQWMsdUJBQXVCLDJCQUEyQiwwQ0FBMEMsMkJBQTJCLEVBQUUsaUNBQWlDLGdCQUFnQix1QkFBdUIsbUJBQW1CLDJCQUEyQiwyQkFBMkIsRUFBRSw4QkFBOEIsZUFBZSxjQUFjLHVCQUF1Qix3QkFBd0IsOEJBQThCLDZDQUE2QyxFQUFFLG9DQUFvQyxhQUFhLHVCQUF1QixtQkFBbUIsd0JBQXdCLDhCQUE4QixFQUFFLFVBQVUsaUJBQWlCLDhFQUE4RSxFQUFFLHVCQUF1Qix3QkFBd0IsRUFBRSxtREFBbUQsd0JBQXdCLEVBQUUsaUJBQWlCLHVCQUF1QixvQkFBb0IsbUJBQW1CLEVBQUUsOEJBQThCLHVCQUF1QixFQUFFLHFCQUFxQix1QkFBdUIsRUFBRSw0Q0FBNEMsZUFBZSwrQkFBK0IsRUFBRSxjQUFjLG9CQUFvQix1QkFBdUIsZ0JBQWdCLG1CQUFtQixvQkFBb0IsRUFBRSx5SEFBeUgsZUFBZSxFQUFFLHlFQUF5RSxlQUFlLEVBQUUseUVBQXlFLGVBQWUsRUFBRSw4RkFBOEYsZUFBZSxFQUFFOztBQUU5NkoiLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuICAgIGZvbnRzIGNvbnN0XFxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xcbi50YS1oaWRkZW4taW5wdXQge1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTEwMDAwcHg7XFxuICBsZWZ0OiAtMTAwMDBweDtcXG4gIG9wYWNpdHk6IDA7XFxuICBvdmVyZmxvdzogaGlkZGVuOyB9XFxuXFxuLnRhLXJvb3QuZm9jdXNzZWQgPiAudGEtc2Nyb2xsLXdpbmRvdy5mb3JtLWNvbnRyb2wge1xcbiAgYm9yZGVyLWNvbG9yOiAjNjZhZmU5O1xcbiAgb3V0bGluZTogMDtcXG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDhweCByZ2JhKDEwMiwgMTc1LCAyMzMsIDAuNik7IH1cXG5cXG4udGEtZWRpdG9yLnRhLWh0bWwsIC50YS1zY3JvbGwtd2luZG93LmZvcm0tY29udHJvbCB7XFxuICBtaW4taGVpZ2h0OiAzMDBweDtcXG4gIGhlaWdodDogYXV0bztcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXNpemU6IDEwMCU7IH1cXG5cXG4udGEtc2Nyb2xsLXdpbmRvdy5mb3JtLWNvbnRyb2wge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogMDsgfVxcblxcbi50YS1zY3JvbGwtd2luZG93ID4gLnRhLWJpbmQge1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgbWluLWhlaWdodDogMzAwcHg7XFxuICBwYWRkaW5nOiA2cHggMTJweDsgfVxcblxcbi50YS1lZGl0b3I6Zm9jdXMge1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IHRleHQ7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiB0ZXh0O1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogdGV4dDsgfVxcblxcbi50YS1yZXNpemVyLWhhbmRsZS1vdmVybGF5IHtcXG4gIHotaW5kZXg6IDEwMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGRpc3BsYXk6IG5vbmU7IH1cXG5cXG4udGEtcmVzaXplci1oYW5kbGUtb3ZlcmxheSA+IC50YS1yZXNpemVyLWhhbmRsZS1pbmZvIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMTZweDtcXG4gIHJpZ2h0OiAxNnB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNGRkY7XFxuICBwYWRkaW5nOiAwIDRweDtcXG4gIG9wYWNpdHk6IC43OyB9XFxuXFxuLnRhLXJlc2l6ZXItaGFuZGxlLW92ZXJsYXkgPiAudGEtcmVzaXplci1oYW5kbGUtYmFja2dyb3VuZCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDVweDtcXG4gIHJpZ2h0OiA1cHg7XFxuICBsZWZ0OiA1cHg7XFxuICB0b3A6IDVweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7IH1cXG5cXG4udGEtcmVzaXplci1oYW5kbGUtb3ZlcmxheSA+IC50YS1yZXNpemVyLWhhbmRsZS1jb3JuZXIge1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7IH1cXG5cXG4udGEtcmVzaXplci1oYW5kbGUtb3ZlcmxheSA+IC50YS1yZXNpemVyLWhhbmRsZS1jb3JuZXItdGwge1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzAwMDtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjMDAwOyB9XFxuXFxuLnRhLXJlc2l6ZXItaGFuZGxlLW92ZXJsYXkgPiAudGEtcmVzaXplci1oYW5kbGUtY29ybmVyLXRyIHtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzAwMDtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjMDAwOyB9XFxuXFxuLnRhLXJlc2l6ZXItaGFuZGxlLW92ZXJsYXkgPiAudGEtcmVzaXplci1oYW5kbGUtY29ybmVyLWJsIHtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICMwMDA7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzAwMDsgfVxcblxcbi50YS1yZXNpemVyLWhhbmRsZS1vdmVybGF5ID4gLnRhLXJlc2l6ZXItaGFuZGxlLWNvcm5lci1iciB7XFxuICBib3R0b206IDA7XFxuICByaWdodDogMDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XFxuICBjdXJzb3I6IHNlLXJlc2l6ZTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cXG5cXG4ucG9wb3ZlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogMTA2MDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtYXgtd2lkdGg6IDI3NnB4O1xcbiAgcGFkZGluZzogMXB4O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMik7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTsgfVxcblxcbi5wb3BvdmVyLnRvcCB7XFxuICBtYXJnaW4tdG9wOiAtMTBweDsgfVxcblxcbi5wb3BvdmVyLmJvdHRvbSB7XFxuICBtYXJnaW4tdG9wOiAxMHB4OyB9XFxuXFxuLnBvcG92ZXItdGl0bGUge1xcbiAgcGFkZGluZzogOHB4IDE0cHg7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlYmViZWI7XFxuICBib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDsgfVxcblxcbi5wb3BvdmVyLWNvbnRlbnQge1xcbiAgcGFkZGluZzogOXB4IDE0cHg7IH1cXG5cXG4ucG9wb3ZlciA+IC5hcnJvdywgLnBvcG92ZXIgPiAuYXJyb3c6YWZ0ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkOyB9XFxuXFxuLnBvcG92ZXIgPiAuYXJyb3cge1xcbiAgYm9yZGVyLXdpZHRoOiAxMXB4OyB9XFxuXFxuLnBvcG92ZXIgPiAuYXJyb3c6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBib3JkZXItd2lkdGg6IDEwcHg7IH1cXG5cXG4ucG9wb3Zlci50b3AgPiAuYXJyb3cge1xcbiAgYm90dG9tOiAtMTFweDtcXG4gIGxlZnQ6IDUwJTtcXG4gIG1hcmdpbi1sZWZ0OiAtMTFweDtcXG4gIGJvcmRlci10b3AtY29sb3I6ICM5OTk7XFxuICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDsgfVxcblxcbi5wb3BvdmVyLnRvcCA+IC5hcnJvdzphZnRlciB7XFxuICBib3R0b206IDFweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTBweDtcXG4gIGNvbnRlbnQ6IFxcXCIgXFxcIjtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmY7XFxuICBib3JkZXItYm90dG9tLXdpZHRoOiAwOyB9XFxuXFxuLnBvcG92ZXIuYm90dG9tID4gLmFycm93IHtcXG4gIHRvcDogLTExcHg7XFxuICBsZWZ0OiA1MCU7XFxuICBtYXJnaW4tbGVmdDogLTExcHg7XFxuICBib3JkZXItdG9wLXdpZHRoOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzk5OTtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7IH1cXG5cXG4ucG9wb3Zlci5ib3R0b20gPiAuYXJyb3c6YWZ0ZXIge1xcbiAgdG9wOiAxcHg7XFxuICBtYXJnaW4tbGVmdDogLTEwcHg7XFxuICBjb250ZW50OiBcXFwiIFxcXCI7XFxuICBib3JkZXItdG9wLXdpZHRoOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsgfVxcblxcbmJvZHkge1xcbiAgbWFyZ2luOiAyMHB4O1xcbiAgZm9udC1mYW1pbHk6IFxcXCJSb2JvdG9cXFwiLCBcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyB9XFxuXFxuLnRhLXNjcm9sbC13aW5kb3cge1xcbiAgbWFyZ2luLWJvdHRvbTogMTZweDsgfVxcblxcbi8qKlxcbiAqIGZvcm1seSBmaWVsZHMgY3NzXFxuICovXFxuLmZvcm1seS1maWVsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAyMHB4OyB9XFxuXFxuLnZhbGlkYXRpb24ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZm9udC1zaXplOiAuOGVtO1xcbiAgY29sb3I6ICNhOTQ0NDI7IH1cXG5cXG4uZm9ybWx5LXRlbXBsYXRlLXdyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XFxuXFxuLmVycm9yLW1lc3NhZ2VzIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxcblxcbi5lcnJvci1tZXNzYWdlcywgLm1lc3NhZ2UsIC52YWxpZGF0aW9uIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2l0aW9uOiAuM3MgbGluZWFyIGFsbDsgfVxcblxcbi5tZXNzYWdlIHtcXG4gIGZvbnQtc2l6ZTogLjhlbTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgY29sb3I6ICNhOTQ0NDI7XFxuICBtYXJnaW4tdG9wOiAycHg7IH1cXG5cXG4uZXJyb3ItbWVzc2FnZXMubmctZW50ZXIubmctZW50ZXItYWN0aXZlLFxcbi5tZXNzYWdlLm5nLWVudGVyLm5nLWVudGVyLWFjdGl2ZSxcXG4udmFsaWRhdGlvbi5uZy1lbnRlci5uZy1lbnRlci1hY3RpdmUge1xcbiAgb3BhY2l0eTogMTsgfVxcblxcbi5lcnJvci1tZXNzYWdlcy5uZy1lbnRlcixcXG4ubWVzc2FnZS5uZy1lbnRlcixcXG4udmFsaWRhdGlvbi5uZy1lbnRlciB7XFxuICBvcGFjaXR5OiAwOyB9XFxuXFxuLmVycm9yLW1lc3NhZ2VzLm5nLWxlYXZlLFxcbi5tZXNzYWdlLm5nLWxlYXZlLFxcbi52YWxpZGF0aW9uLm5nLWxlYXZlIHtcXG4gIG9wYWNpdHk6IDE7IH1cXG5cXG4uZXJyb3ItbWVzc2FnZXMubmctbGVhdmUtYWN0aXZlLFxcbi5tZXNzYWdlLm5nLWxlYXZlLWFjdGl2ZSxcXG4udmFsaWRhdGlvbi5uZy1sZWF2ZS1hY3RpdmUge1xcbiAgb3BhY2l0eTogMDsgfVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jc3MtbG9hZGVyIS4vfi9wb3N0Y3NzLWxvYWRlciEuL34vc2Fzcy1sb2FkZXIhLi9zcmMvYXBwL2Zvcm12aWV3ZXIvc3R5bGUvZm9ybXZpZXdlci5zY3NzXG4vLyBtb2R1bGUgaWQgPSAyMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9");
/***/ },
/* 21 */
/***/ function(module, exports) {
eval("/*\r\n\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\tAuthor Tobias Koppers @sokra\r\n*/\r\n// css base code, injected by the css-loader\r\nmodule.exports = function() {\r\n\tvar list = [];\r\n\r\n\t// return the list of modules as css string\r\n\tlist.toString = function toString() {\r\n\t\tvar result = [];\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar item = this[i];\r\n\t\t\tif(item[2]) {\r\n\t\t\t\tresult.push(\"@media \" + item[2] + \"{\" + item[1] + \"}\");\r\n\t\t\t} else {\r\n\t\t\t\tresult.push(item[1]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result.join(\"\");\r\n\t};\r\n\r\n\t// import a list of modules into the list\r\n\tlist.i = function(modules, mediaQuery) {\r\n\t\tif(typeof modules === \"string\")\r\n\t\t\tmodules = [[null, modules, \"\"]];\r\n\t\tvar alreadyImportedModules = {};\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar id = this[i][0];\r\n\t\t\tif(typeof id === \"number\")\r\n\t\t\t\talreadyImportedModules[id] = true;\r\n\t\t}\r\n\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\tvar item = modules[i];\r\n\t\t\t// skip already imported module\r\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\r\n\t\t\t// when a module is imported multiple times with different media queries.\r\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\r\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\r\n\t\t\t\tif(mediaQuery && !item[2]) {\r\n\t\t\t\t\titem[2] = mediaQuery;\r\n\t\t\t\t} else if(mediaQuery) {\r\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\r\n\t\t\t\t}\r\n\t\t\t\tlist.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn list;\r\n};\r\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzP2RhMDQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0Esd0NBQXdDLGdCQUFnQjtBQUN4RCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcclxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXHJcbiovXHJcbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcblx0dmFyIGxpc3QgPSBbXTtcclxuXHJcblx0Ly8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xyXG5cdGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcclxuXHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHZhciBpdGVtID0gdGhpc1tpXTtcclxuXHRcdFx0aWYoaXRlbVsyXSkge1xyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKFwiQG1lZGlhIFwiICsgaXRlbVsyXSArIFwie1wiICsgaXRlbVsxXSArIFwifVwiKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtWzFdKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdC5qb2luKFwiXCIpO1xyXG5cdH07XHJcblxyXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XHJcblx0bGlzdC5pID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xyXG5cdFx0aWYodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpXHJcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcclxuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XHJcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xyXG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXHJcblx0XHRcdFx0YWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0Zm9yKGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR2YXIgaXRlbSA9IG1vZHVsZXNbaV07XHJcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcclxuXHRcdFx0Ly8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5hdGlvbnNcclxuXHRcdFx0Ly8gIHdoZW4gYSBtb2R1bGUgaXMgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgbWVkaWEgcXVlcmllcy5cclxuXHRcdFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcclxuXHRcdFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcclxuXHRcdFx0XHRpZihtZWRpYVF1ZXJ5ICYmICFpdGVtWzJdKSB7XHJcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcclxuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFRdWVyeSkge1xyXG5cdFx0XHRcdFx0aXRlbVsyXSA9IFwiKFwiICsgaXRlbVsyXSArIFwiKSBhbmQgKFwiICsgbWVkaWFRdWVyeSArIFwiKVwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRsaXN0LnB1c2goaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cdHJldHVybiBsaXN0O1xyXG59O1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcbi8vIG1vZHVsZSBpZCA9IDIxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=");
/***/ },
/* 22 */
/***/ function(module, exports, __webpack_require__) {
eval("/*\r\n\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\tAuthor Tobias Koppers @sokra\r\n*/\r\nvar stylesInDom = {},\r\n\tmemoize = function(fn) {\r\n\t\tvar memo;\r\n\t\treturn function () {\r\n\t\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\r\n\t\t\treturn memo;\r\n\t\t};\r\n\t},\r\n\tisOldIE = memoize(function() {\r\n\t\treturn /msie [6-9]\\b/.test(window.navigator.userAgent.toLowerCase());\r\n\t}),\r\n\tgetHeadElement = memoize(function () {\r\n\t\treturn document.head || document.getElementsByTagName(\"head\")[0];\r\n\t}),\r\n\tsingletonElement = null,\r\n\tsingletonCounter = 0,\r\n\tstyleElementsInsertedAtTop = [];\r\n\r\nmodule.exports = function(list, options) {\r\n\tif(false) {\r\n\t\tif(typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\r\n\t}\r\n\r\n\toptions = options || {};\r\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\r\n\t// tags it will allow on a page\r\n\tif (typeof options.singleton === \"undefined\") options.singleton = isOldIE();\r\n\r\n\t// By default, add <style> tags to the bottom of <head>.\r\n\tif (typeof options.insertAt === \"undefined\") options.insertAt = \"bottom\";\r\n\r\n\tvar styles = listToStyles(list);\r\n\taddStylesToDom(styles, options);\r\n\r\n\treturn function update(newList) {\r\n\t\tvar mayRemove = [];\r\n\t\tfor(var i = 0; i < styles.length; i++) {\r\n\t\t\tvar item = styles[i];\r\n\t\t\tvar domStyle = stylesInDom[item.id];\r\n\t\t\tdomStyle.refs--;\r\n\t\t\tmayRemove.push(domStyle);\r\n\t\t}\r\n\t\tif(newList) {\r\n\t\t\tvar newStyles = listToStyles(newList);\r\n\t\t\taddStylesToDom(newStyles, options);\r\n\t\t}\r\n\t\tfor(var i = 0; i < mayRemove.length; i++) {\r\n\t\t\tvar domStyle = mayRemove[i];\r\n\t\t\tif(domStyle.refs === 0) {\r\n\t\t\t\tfor(var j = 0; j < domStyle.parts.length; j++)\r\n\t\t\t\t\tdomStyle.parts[j]();\r\n\t\t\t\tdelete stylesInDom[domStyle.id];\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction addStylesToDom(styles, options) {\r\n\tfor(var i = 0; i < styles.length; i++) {\r\n\t\tvar item = styles[i];\r\n\t\tvar domStyle = stylesInDom[item.id];\r\n\t\tif(domStyle) {\r\n\t\t\tdomStyle.refs++;\r\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\r\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\r\n\t\t\t}\r\n\t\t\tfor(; j < item.parts.length; j++) {\r\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar parts = [];\r\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\r\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\r\n\t\t\t}\r\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction listToStyles(list) {\r\n\tvar styles = [];\r\n\tvar newStyles = {};\r\n\tfor(var i = 0; i < list.length; i++) {\r\n\t\tvar item = list[i];\r\n\t\tvar id = item[0];\r\n\t\tvar css = item[1];\r\n\t\tvar media = item[2];\r\n\t\tvar sourceMap = item[3];\r\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\r\n\t\tif(!newStyles[id])\r\n\t\t\tstyles.push(newStyles[id] = {id: id, parts: [part]});\r\n\t\telse\r\n\t\t\tnewStyles[id].parts.push(part);\r\n\t}\r\n\treturn styles;\r\n}\r\n\r\nfunction insertStyleElement(options, styleElement) {\r\n\tvar head = getHeadElement();\r\n\tvar lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];\r\n\tif (options.insertAt === \"top\") {\r\n\t\tif(!lastStyleElementInsertedAtTop) {\r\n\t\t\thead.insertBefore(styleElement, head.firstChild);\r\n\t\t} else if(lastStyleElementInsertedAtTop.nextSibling) {\r\n\t\t\thead.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);\r\n\t\t} else {\r\n\t\t\thead.appendChild(styleElement);\r\n\t\t}\r\n\t\tstyleElementsInsertedAtTop.push(styleElement);\r\n\t} else if (options.insertAt === \"bottom\") {\r\n\t\thead.appendChild(styleElement);\r\n\t} else {\r\n\t\tthrow new Error(\"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\");\r\n\t}\r\n}\r\n\r\nfunction removeStyleElement(styleElement) {\r\n\tstyleElement.parentNode.removeChild(styleElement);\r\n\tvar idx = styleElementsInsertedAtTop.indexOf(styleElement);\r\n\tif(idx >= 0) {\r\n\t\tstyleElementsInsertedAtTop.splice(idx, 1);\r\n\t}\r\n}\r\n\r\nfunction createStyleElement(options) {\r\n\tvar styleElement = document.createElement(\"style\");\r\n\tstyleElement.type = \"text/css\";\r\n\tinsertStyleElement(options, styleElement);\r\n\treturn styleElement;\r\n}\r\n\r\nfunction createLinkElement(options) {\r\n\tvar linkElement = document.createElement(\"link\");\r\n\tlinkElement.rel = \"stylesheet\";\r\n\tinsertStyleElement(options, linkElement);\r\n\treturn linkElement;\r\n}\r\n\r\nfunction addStyle(obj, options) {\r\n\tvar styleElement, update, remove;\r\n\r\n\tif (options.singleton) {\r\n\t\tvar styleIndex = singletonCounter++;\r\n\t\tstyleElement = singletonElement || (singletonElement = createStyleElement(options));\r\n\t\tupdate = applyToSingletonTag.bind(null, styleElement, styleIndex, false);\r\n\t\tremove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);\r\n\t} else if(obj.sourceMap &&\r\n\t\ttypeof URL === \"function\" &&\r\n\t\ttypeof URL.createObjectURL === \"function\" &&\r\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\r\n\t\ttypeof Blob === \"function\" &&\r\n\t\ttypeof btoa === \"function\") {\r\n\t\tstyleElement = createLinkElement(options);\r\n\t\tupdate = updateLink.bind(null, styleElement);\r\n\t\tremove = function() {\r\n\t\t\tremoveStyleElement(styleElement);\r\n\t\t\tif(styleElement.href)\r\n\t\t\t\tURL.revokeObjectURL(styleElement.href);\r\n\t\t};\r\n\t} else {\r\n\t\tstyleElement = createStyleElement(options);\r\n\t\tupdate = applyToTag.bind(null, styleElement);\r\n\t\tremove = function() {\r\n\t\t\tremoveStyleElement(styleElement);\r\n\t\t};\r\n\t}\r\n\r\n\tupdate(obj);\r\n\r\n\treturn function updateStyle(newObj) {\r\n\t\tif(newObj) {\r\n\t\t\tif(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)\r\n\t\t\t\treturn;\r\n\t\t\tupdate(obj = newObj);\r\n\t\t} else {\r\n\t\t\tremove();\r\n\t\t}\r\n\t};\r\n}\r\n\r\nvar replaceText = (function () {\r\n\tvar textStore = [];\r\n\r\n\treturn function (index, replacement) {\r\n\t\ttextStore[index] = replacement;\r\n\t\treturn textStore.filter(Boolean).join('\\n');\r\n\t};\r\n})();\r\n\r\nfunction applyToSingletonTag(styleElement, index, remove, obj) {\r\n\tvar css = remove ? \"\" : obj.css;\r\n\r\n\tif (styleElement.styleSheet) {\r\n\t\tstyleElement.styleSheet.cssText = replaceText(index, css);\r\n\t} else {\r\n\t\tvar cssNode = document.createTextNode(css);\r\n\t\tvar childNodes = styleElement.childNodes;\r\n\t\tif (childNodes[index]) styleElement.removeChild(childNodes[index]);\r\n\t\tif (childNodes.length) {\r\n\t\t\tstyleElement.insertBefore(cssNode, childNodes[index]);\r\n\t\t} else {\r\n\t\t\tstyleElement.appendChild(cssNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction applyToTag(styleElement, obj) {\r\n\tvar css = obj.css;\r\n\tvar media = obj.media;\r\n\r\n\tif(media) {\r\n\t\tstyleElement.setAttribute(\"media\", media)\r\n\t}\r\n\r\n\tif(styleElement.styleSheet) {\r\n\t\tstyleElement.styleSheet.cssText = css;\r\n\t} else {\r\n\t\twhile(styleElement.firstChild) {\r\n\t\t\tstyleElement.removeChild(styleElement.firstChild);\r\n\t\t}\r\n\t\tstyleElement.appendChild(document.createTextNode(css));\r\n\t}\r\n}\r\n\r\nfunction updateLink(linkElement, obj) {\r\n\tvar css = obj.css;\r\n\tvar sourceMap = obj.sourceMap;\r\n\r\n\tif(sourceMap) {\r\n\t\t// http://stackoverflow.com/a/26603875\r\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\r\n\t}\r\n\r\n\tvar blob = new Blob([css], { type: \"text/css\" });\r\n\r\n\tvar oldSrc = linkElement.href;\r\n\r\n\tlinkElement.href = URL.createObjectURL(blob);\r\n\r\n\tif(oldSrc)\r\n\t\tURL.revokeObjectURL(oldSrc);\r\n}\r\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3N0eWxlLWxvYWRlci9hZGRTdHlsZXMuanM/Yjk4MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBO0FBQ0Esa0JBQWtCLDJCQUEyQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwyQkFBMkI7QUFDNUM7QUFDQTtBQUNBLFFBQVEsdUJBQXVCO0FBQy9CO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxpQkFBaUIsdUJBQXVCO0FBQ3hDO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxnQ0FBZ0Msc0JBQXNCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7O0FBRUEsNkJBQTZCLG1CQUFtQjs7QUFFaEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBIiwiZmlsZSI6IjIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxyXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcclxuKi9cclxudmFyIHN0eWxlc0luRG9tID0ge30sXHJcblx0bWVtb2l6ZSA9IGZ1bmN0aW9uKGZuKSB7XHJcblx0XHR2YXIgbWVtbztcclxuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcblx0XHRcdHJldHVybiBtZW1vO1xyXG5cdFx0fTtcclxuXHR9LFxyXG5cdGlzT2xkSUUgPSBtZW1vaXplKGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIC9tc2llIFs2LTldXFxiLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpO1xyXG5cdH0pLFxyXG5cdGdldEhlYWRFbGVtZW50ID0gbWVtb2l6ZShmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF07XHJcblx0fSksXHJcblx0c2luZ2xldG9uRWxlbWVudCA9IG51bGwsXHJcblx0c2luZ2xldG9uQ291bnRlciA9IDAsXHJcblx0c3R5bGVFbGVtZW50c0luc2VydGVkQXRUb3AgPSBbXTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGlzdCwgb3B0aW9ucykge1xyXG5cdGlmKHR5cGVvZiBERUJVRyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBERUJVRykge1xyXG5cdFx0aWYodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XHJcblx0fVxyXG5cclxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHQvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cclxuXHQvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXHJcblx0aWYgKHR5cGVvZiBvcHRpb25zLnNpbmdsZXRvbiA9PT0gXCJ1bmRlZmluZWRcIikgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XHJcblxyXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIGJvdHRvbSBvZiA8aGVhZD4uXHJcblx0aWYgKHR5cGVvZiBvcHRpb25zLmluc2VydEF0ID09PSBcInVuZGVmaW5lZFwiKSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcclxuXHJcblx0dmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhsaXN0KTtcclxuXHRhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xyXG5cclxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcclxuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcclxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XHJcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xyXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XHJcblx0XHRcdG1heVJlbW92ZS5wdXNoKGRvbVN0eWxlKTtcclxuXHRcdH1cclxuXHRcdGlmKG5ld0xpc3QpIHtcclxuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0KTtcclxuXHRcdFx0YWRkU3R5bGVzVG9Eb20obmV3U3R5bGVzLCBvcHRpb25zKTtcclxuXHRcdH1cclxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFyIGRvbVN0eWxlID0gbWF5UmVtb3ZlW2ldO1xyXG5cdFx0XHRpZihkb21TdHlsZS5yZWZzID09PSAwKSB7XHJcblx0XHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKVxyXG5cdFx0XHRcdFx0ZG9tU3R5bGUucGFydHNbal0oKTtcclxuXHRcdFx0XHRkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20oc3R5bGVzLCBvcHRpb25zKSB7XHJcblx0Zm9yKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XHJcblx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcclxuXHRcdGlmKGRvbVN0eWxlKSB7XHJcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcclxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0ZG9tU3R5bGUucGFydHNbal0oaXRlbS5wYXJ0c1tqXSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dmFyIHBhcnRzID0gW107XHJcblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0cGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XHJcblx0XHRcdH1cclxuXHRcdFx0c3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7aWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0c307XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBsaXN0VG9TdHlsZXMobGlzdCkge1xyXG5cdHZhciBzdHlsZXMgPSBbXTtcclxuXHR2YXIgbmV3U3R5bGVzID0ge307XHJcblx0Zm9yKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcclxuXHRcdHZhciBpZCA9IGl0ZW1bMF07XHJcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcclxuXHRcdHZhciBtZWRpYSA9IGl0ZW1bMl07XHJcblx0XHR2YXIgc291cmNlTWFwID0gaXRlbVszXTtcclxuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcclxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKVxyXG5cdFx0XHRzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2gocGFydCk7XHJcblx0fVxyXG5cdHJldHVybiBzdHlsZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBzdHlsZUVsZW1lbnQpIHtcclxuXHR2YXIgaGVhZCA9IGdldEhlYWRFbGVtZW50KCk7XHJcblx0dmFyIGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wID0gc3R5bGVFbGVtZW50c0luc2VydGVkQXRUb3Bbc3R5bGVFbGVtZW50c0luc2VydGVkQXRUb3AubGVuZ3RoIC0gMV07XHJcblx0aWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwidG9wXCIpIHtcclxuXHRcdGlmKCFsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCkge1xyXG5cdFx0XHRoZWFkLmluc2VydEJlZm9yZShzdHlsZUVsZW1lbnQsIGhlYWQuZmlyc3RDaGlsZCk7XHJcblx0XHR9IGVsc2UgaWYobGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpIHtcclxuXHRcdFx0aGVhZC5pbnNlcnRCZWZvcmUoc3R5bGVFbGVtZW50LCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRoZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XHJcblx0XHR9XHJcblx0XHRzdHlsZUVsZW1lbnRzSW5zZXJ0ZWRBdFRvcC5wdXNoKHN0eWxlRWxlbWVudCk7XHJcblx0fSBlbHNlIGlmIChvcHRpb25zLmluc2VydEF0ID09PSBcImJvdHRvbVwiKSB7XHJcblx0XHRoZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAnaW5zZXJ0QXQnLiBNdXN0IGJlICd0b3AnIG9yICdib3R0b20nLlwiKTtcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcclxuXHRzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xyXG5cdHZhciBpZHggPSBzdHlsZUVsZW1lbnRzSW5zZXJ0ZWRBdFRvcC5pbmRleE9mKHN0eWxlRWxlbWVudCk7XHJcblx0aWYoaWR4ID49IDApIHtcclxuXHRcdHN0eWxlRWxlbWVudHNJbnNlcnRlZEF0VG9wLnNwbGljZShpZHgsIDEpO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcclxuXHR2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xyXG5cdHN0eWxlRWxlbWVudC50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xyXG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBzdHlsZUVsZW1lbnQpO1xyXG5cdHJldHVybiBzdHlsZUVsZW1lbnQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUxpbmtFbGVtZW50KG9wdGlvbnMpIHtcclxuXHR2YXIgbGlua0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcclxuXHRsaW5rRWxlbWVudC5yZWwgPSBcInN0eWxlc2hlZXRcIjtcclxuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGlua0VsZW1lbnQpO1xyXG5cdHJldHVybiBsaW5rRWxlbWVudDtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkU3R5bGUob2JqLCBvcHRpb25zKSB7XHJcblx0dmFyIHN0eWxlRWxlbWVudCwgdXBkYXRlLCByZW1vdmU7XHJcblxyXG5cdGlmIChvcHRpb25zLnNpbmdsZXRvbikge1xyXG5cdFx0dmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XHJcblx0XHRzdHlsZUVsZW1lbnQgPSBzaW5nbGV0b25FbGVtZW50IHx8IChzaW5nbGV0b25FbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcclxuXHRcdHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIGZhbHNlKTtcclxuXHRcdHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIHRydWUpO1xyXG5cdH0gZWxzZSBpZihvYmouc291cmNlTWFwICYmXHJcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcclxuXHRcdHR5cGVvZiBVUkwuY3JlYXRlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcclxuXHRcdHR5cGVvZiBVUkwucmV2b2tlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcclxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcclxuXHRcdHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcclxuXHRcdHN0eWxlRWxlbWVudCA9IGNyZWF0ZUxpbmtFbGVtZW50KG9wdGlvbnMpO1xyXG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCk7XHJcblx0XHRyZW1vdmUgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XHJcblx0XHRcdGlmKHN0eWxlRWxlbWVudC5ocmVmKVxyXG5cdFx0XHRcdFVSTC5yZXZva2VPYmplY3RVUkwoc3R5bGVFbGVtZW50LmhyZWYpO1xyXG5cdFx0fTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0c3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpO1xyXG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCk7XHJcblx0XHRyZW1vdmUgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0dXBkYXRlKG9iaik7XHJcblxyXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZShuZXdPYmopIHtcclxuXHRcdGlmKG5ld09iaikge1xyXG5cdFx0XHRpZihuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApXHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJlbW92ZSgpO1xyXG5cdFx0fVxyXG5cdH07XHJcbn1cclxuXHJcbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XHJcblx0dmFyIHRleHRTdG9yZSA9IFtdO1xyXG5cclxuXHRyZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xyXG5cdFx0dGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xyXG5cdFx0cmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XHJcblx0fTtcclxufSkoKTtcclxuXHJcbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcoc3R5bGVFbGVtZW50LCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcclxuXHR2YXIgY3NzID0gcmVtb3ZlID8gXCJcIiA6IG9iai5jc3M7XHJcblxyXG5cdGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xyXG5cdFx0c3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHR2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcyk7XHJcblx0XHR2YXIgY2hpbGROb2RlcyA9IHN0eWxlRWxlbWVudC5jaGlsZE5vZGVzO1xyXG5cdFx0aWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xyXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XHJcblx0XHRcdHN0eWxlRWxlbWVudC5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0c3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGNzc05vZGUpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gYXBwbHlUb1RhZyhzdHlsZUVsZW1lbnQsIG9iaikge1xyXG5cdHZhciBjc3MgPSBvYmouY3NzO1xyXG5cdHZhciBtZWRpYSA9IG9iai5tZWRpYTtcclxuXHJcblx0aWYobWVkaWEpIHtcclxuXHRcdHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBtZWRpYSlcclxuXHR9XHJcblxyXG5cdGlmKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XHJcblx0XHRzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xyXG5cdH0gZWxzZSB7XHJcblx0XHR3aGlsZShzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xyXG5cdFx0XHRzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xyXG5cdFx0fVxyXG5cdFx0c3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlTGluayhsaW5rRWxlbWVudCwgb2JqKSB7XHJcblx0dmFyIGNzcyA9IG9iai5jc3M7XHJcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XHJcblxyXG5cdGlmKHNvdXJjZU1hcCkge1xyXG5cdFx0Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcclxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcclxuXHR9XHJcblxyXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xyXG5cclxuXHR2YXIgb2xkU3JjID0gbGlua0VsZW1lbnQuaHJlZjtcclxuXHJcblx0bGlua0VsZW1lbnQuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG5cdGlmKG9sZFNyYylcclxuXHRcdFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcclxufVxyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vc3R5bGUtbG9hZGVyL2FkZFN0eWxlcy5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==");
/***/ }
/******/ ]);