@openmrs/esm-app-shell 5.7.3-pre.2204 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/.turbo/turbo-build.log +26 -27
  2. package/dist/{26899ff36bf93ae8.js → 11ef1677bd02878e.js} +1 -1
  3. package/dist/11ef1677bd02878e.js.map +1 -0
  4. package/dist/4194e33ddef375c6.js +1 -0
  5. package/dist/4194e33ddef375c6.js.map +1 -0
  6. package/dist/index.html +1 -1
  7. package/dist/{openmrs.19b9d6bc475163da.js → openmrs.001f63bcda32eab8.js} +1 -1
  8. package/dist/{openmrs.19b9d6bc475163da.js.map → openmrs.001f63bcda32eab8.js.map} +1 -1
  9. package/dist/service-worker.js +1 -1
  10. package/lib/{7f2129c5e313067c.js → 2cb8f3de59c57b02.js} +1 -1
  11. package/lib/{cf73b779034e747a.js → 6266cdf365a86b25.js} +4 -4
  12. package/lib/esm-implementer-tools-app/271.js +1 -0
  13. package/lib/esm-implementer-tools-app/289.js +1 -0
  14. package/lib/esm-implementer-tools-app/289.js.map +1 -0
  15. package/lib/esm-implementer-tools-app/319.js +1 -0
  16. package/lib/esm-implementer-tools-app/336.js +2 -0
  17. package/lib/{esm-help-menu-app/662.js.LICENSE.txt → esm-implementer-tools-app/336.js.LICENSE.txt} +0 -6
  18. package/lib/esm-implementer-tools-app/336.js.map +1 -0
  19. package/lib/esm-implementer-tools-app/36.js +1 -0
  20. package/lib/esm-implementer-tools-app/36.js.map +1 -0
  21. package/lib/esm-implementer-tools-app/426.js +1 -0
  22. package/lib/esm-implementer-tools-app/426.js.map +1 -0
  23. package/lib/esm-implementer-tools-app/441.js +2 -0
  24. package/lib/esm-implementer-tools-app/441.js.map +1 -0
  25. package/lib/esm-implementer-tools-app/448.js +1 -0
  26. package/lib/esm-implementer-tools-app/448.js.map +1 -0
  27. package/lib/esm-implementer-tools-app/460.js +1 -0
  28. package/lib/esm-implementer-tools-app/491.js +1 -0
  29. package/lib/esm-implementer-tools-app/491.js.map +1 -0
  30. package/lib/esm-implementer-tools-app/574.js +1 -0
  31. package/lib/esm-implementer-tools-app/587.js +1 -0
  32. package/lib/esm-implementer-tools-app/587.js.map +1 -0
  33. package/lib/esm-implementer-tools-app/625.js +1 -0
  34. package/lib/esm-implementer-tools-app/642.js +1 -0
  35. package/lib/{esm-help-menu-app → esm-implementer-tools-app}/642.js.map +1 -1
  36. package/lib/esm-implementer-tools-app/644.js +1 -0
  37. package/lib/esm-implementer-tools-app/657.js +1 -0
  38. package/lib/{esm-help-menu-app → esm-implementer-tools-app}/657.js.map +1 -1
  39. package/lib/esm-implementer-tools-app/667.js +2 -0
  40. package/lib/esm-implementer-tools-app/667.js.LICENSE.txt +38 -0
  41. package/lib/esm-implementer-tools-app/667.js.map +1 -0
  42. package/lib/esm-implementer-tools-app/735.js +2 -0
  43. package/lib/{esm-help-menu-app → esm-implementer-tools-app}/735.js.map +1 -1
  44. package/lib/esm-implementer-tools-app/757.js +1 -0
  45. package/lib/esm-implementer-tools-app/788.js +2 -0
  46. package/lib/{esm-help-menu-app → esm-implementer-tools-app}/788.js.map +1 -1
  47. package/lib/esm-implementer-tools-app/807.js +1 -0
  48. package/lib/esm-implementer-tools-app/833.js +1 -0
  49. package/lib/esm-implementer-tools-app/845.js +1 -0
  50. package/lib/esm-implementer-tools-app/845.js.map +1 -0
  51. package/lib/esm-implementer-tools-app/859.js +1 -0
  52. package/lib/esm-implementer-tools-app/859.js.map +1 -0
  53. package/lib/esm-implementer-tools-app/873.js +2 -0
  54. package/lib/esm-implementer-tools-app/873.js.LICENSE.txt +19 -0
  55. package/lib/esm-implementer-tools-app/873.js.map +1 -0
  56. package/lib/esm-implementer-tools-app/889.js +2 -0
  57. package/lib/esm-implementer-tools-app/889.js.map +1 -0
  58. package/lib/esm-implementer-tools-app/main.js +1 -0
  59. package/lib/esm-implementer-tools-app/main.js.map +1 -0
  60. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js +1 -0
  61. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.buildmanifest.json +759 -0
  62. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.map +1 -0
  63. package/lib/esm-implementer-tools-app/routes.json +1 -0
  64. package/lib/esm-login-app/889.js +1 -1
  65. package/lib/esm-login-app/889.js.map +1 -1
  66. package/lib/esm-login-app/main.js +1 -1
  67. package/lib/esm-login-app/main.js.map +1 -1
  68. package/lib/esm-login-app/openmrs-esm-login-app.js +1 -1
  69. package/lib/esm-login-app/openmrs-esm-login-app.js.buildmanifest.json +9 -9
  70. package/lib/esm-login-app/openmrs-esm-login-app.js.map +1 -1
  71. package/lib/esm-login-app/routes.json +1 -1
  72. package/lib/esm-offline-tools-app/889.js +1 -1
  73. package/lib/esm-offline-tools-app/889.js.map +1 -1
  74. package/lib/esm-offline-tools-app/main.js +1 -1
  75. package/lib/esm-offline-tools-app/main.js.map +1 -1
  76. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js +1 -1
  77. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json +9 -9
  78. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.map +1 -1
  79. package/lib/esm-offline-tools-app/routes.json +1 -1
  80. package/lib/esm-primary-navigation-app/889.js +1 -1
  81. package/lib/esm-primary-navigation-app/889.js.map +1 -1
  82. package/lib/esm-primary-navigation-app/main.js +1 -1
  83. package/lib/esm-primary-navigation-app/main.js.map +1 -1
  84. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js +1 -1
  85. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json +9 -9
  86. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.map +1 -1
  87. package/lib/esm-primary-navigation-app/routes.json +1 -1
  88. package/lib/index.html +2 -2
  89. package/lib/openmrs.js +9 -9
  90. package/lib/service-worker.js +1 -1
  91. package/package.json +4 -5
  92. package/src/locale.ts +4 -3
  93. package/dist/26899ff36bf93ae8.js.map +0 -1
  94. package/dist/815a283bfffb5a1a.js +0 -1
  95. package/dist/815a283bfffb5a1a.js.map +0 -1
  96. package/lib/esm-help-menu-app/167.js +0 -2
  97. package/lib/esm-help-menu-app/167.js.map +0 -1
  98. package/lib/esm-help-menu-app/248.js +0 -1
  99. package/lib/esm-help-menu-app/248.js.map +0 -1
  100. package/lib/esm-help-menu-app/611.js +0 -1
  101. package/lib/esm-help-menu-app/611.js.map +0 -1
  102. package/lib/esm-help-menu-app/642.js +0 -1
  103. package/lib/esm-help-menu-app/657.js +0 -1
  104. package/lib/esm-help-menu-app/662.js +0 -2
  105. package/lib/esm-help-menu-app/662.js.map +0 -1
  106. package/lib/esm-help-menu-app/735.js +0 -2
  107. package/lib/esm-help-menu-app/788.js +0 -2
  108. package/lib/esm-help-menu-app/889.js +0 -2
  109. package/lib/esm-help-menu-app/889.js.map +0 -1
  110. package/lib/esm-help-menu-app/958.js +0 -1
  111. package/lib/esm-help-menu-app/958.js.map +0 -1
  112. package/lib/esm-help-menu-app/main.js +0 -1
  113. package/lib/esm-help-menu-app/main.js.map +0 -1
  114. package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js +0 -1
  115. package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js.buildmanifest.json +0 -360
  116. package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js.map +0 -1
  117. package/lib/esm-help-menu-app/routes.json +0 -1
  118. /package/lib/{esm-help-menu-app/167.js.LICENSE.txt → esm-implementer-tools-app/441.js.LICENSE.txt} +0 -0
  119. /package/lib/{esm-help-menu-app → esm-implementer-tools-app}/735.js.LICENSE.txt +0 -0
  120. /package/lib/{esm-help-menu-app → esm-implementer-tools-app}/788.js.LICENSE.txt +0 -0
  121. /package/lib/{esm-help-menu-app → esm-implementer-tools-app}/889.js.LICENSE.txt +0 -0
@@ -525,7 +525,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
525
525
  \*********************************************************************/
526
526
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
527
527
 
528
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clearConfigErrors: () => (/* binding */ clearConfigErrors),\n/* harmony export */ defineConfigSchema: () => (/* binding */ defineConfigSchema),\n/* harmony export */ defineExtensionConfigSchema: () => (/* binding */ defineExtensionConfigSchema),\n/* harmony export */ getConfig: () => (/* binding */ getConfig),\n/* harmony export */ getTranslationOverrides: () => (/* binding */ getTranslationOverrides),\n/* harmony export */ processConfig: () => (/* binding */ processConfig),\n/* harmony export */ provide: () => (/* binding */ provide),\n/* harmony export */ registerModuleWithConfigSystem: () => (/* binding */ registerModuleWithConfigSystem),\n/* harmony export */ registerTranslationNamespace: () => (/* binding */ registerTranslationNamespace)\n/* harmony export */ });\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/equals.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/mergeDeepRight.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/omit.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/clone.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/reduce.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ \"../../framework/esm-config/src/types.ts\");\n/* harmony import */ var _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../validators/type-validators */ \"../../framework/esm-config/src/validators/type-validators.ts\");\n/* harmony import */ var _validators_validator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../validators/validator */ \"../../framework/esm-config/src/validators/validator.ts\");\n/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./state */ \"../../framework/esm-config/src/module-config/state.ts\");\n/** @module @category Config */ function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _array_without_holes(arr) {\n if (Array.isArray(arr)) return _array_like_to_array(arr);\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _non_iterable_spread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _to_consumable_array(arr) {\n return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\n\n\n\n\n\n/**\n * Store setup\n *\n *\n * Set up stores and subscriptions so that inputs get processed appropriately.\n *\n * There are *input* stores and *output* stores. The *input* stores\n * are configInternalStore, temporaryConfigStore, and configExtensionStore. The\n * output stores are set in the `compute...` functions. They are the module\n * config stores, the extension slot config stores (by module), the extension\n * config stores, and the implementer tools config store.\n *\n * This code sets up the subscriptions so that when an input store changes,\n * the correct set of output stores are updated.\n *\n * All `compute...` functions except `computeExtensionConfigs` are pure\n * (or are supposed to be), other than the fact that they all `setState`\n * store values at the end. `computeExtensionConfigs` calls `getGlobalStore`,\n * which creates stores.\n */ computeModuleConfig(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe(function(configState) {\n return computeModuleConfig(configState, _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeModuleConfig(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState);\n});\ncomputeImplementerToolsConfig(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe(function(configState) {\n return computeImplementerToolsConfig(configState, _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeImplementerToolsConfig(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState);\n});\ncomputeExtensionSlotConfigs(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe(function(configState) {\n return computeExtensionSlotConfigs(configState, _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeExtensionSlotConfigs(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState);\n});\ncomputeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe(function(configState) {\n computeExtensionConfigs(configState, _state__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.subscribe(function(extensionState) {\n computeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), extensionState, _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe(function(tempConfigState) {\n computeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), tempConfigState);\n});\nfunction computeModuleConfig(state, tempState) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(state.schemas)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var moduleName = _step.value;\n // At this point the schema could be either just the implicit schema or the actually\n // defined schema. We run with just the implicit schema because we want to populate\n // the config store with the translation overrides as soon as possible. In fact, the\n // translation system will throw for Suspense until the translation overrides are\n // available, which as of this writing blocks the schema definition from occurring\n // for modules loaded based on their extensions.\n var moduleStore = (0,_state__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n if (state.moduleLoaded[moduleName]) {\n var config = getConfigForModule(moduleName, state, tempState);\n moduleStore.setState({\n translationOverridesLoaded: true,\n loaded: true,\n config: config\n });\n } else {\n var config1 = getConfigForModuleImplicitSchema(moduleName, state, tempState);\n moduleStore.setState({\n translationOverridesLoaded: true,\n loaded: false,\n config: config1\n });\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction computeExtensionSlotConfigs(state, tempState) {\n var slotConfigs = getExtensionSlotConfigs(state, tempState);\n var newSlotStoreEntries = Object.fromEntries(Object.entries(slotConfigs).map(function(param) {\n var _param = _sliced_to_array(param, 2), slotName = _param[0], config = _param[1];\n return [\n slotName,\n {\n loaded: true,\n config: config\n }\n ];\n }));\n var slotStore = (0,_state__WEBPACK_IMPORTED_MODULE_3__.getExtensionSlotsConfigStore)();\n var oldState = slotStore.getState();\n var newState = {\n slots: _object_spread({}, oldState.slots, newSlotStoreEntries)\n };\n if (!(0,ramda__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(oldState, newState)) {\n slotStore.setState(newState);\n }\n}\nfunction computeImplementerToolsConfig(state, tempConfigState) {\n var config = getImplementerToolsConfig(state, tempConfigState);\n _state__WEBPACK_IMPORTED_MODULE_3__.implementerToolsConfigStore.setState({\n config: config\n });\n}\nfunction computeExtensionConfigs(configState, extensionState, tempConfigState) {\n var configs = {};\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n // We assume that the module schema has already been defined, since the extension\n // it contains is mounted.\n for(var _iterator = extensionState.mountedExtensions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var extension = _step.value;\n var config = computeExtensionConfig(extension.slotModuleName, extension.extensionModuleName, extension.slotName, extension.extensionId, configState, tempConfigState);\n configs[extension.slotName] = _object_spread_props(_object_spread({}, configs[extension.slotName]), _define_property({}, extension.extensionId, {\n config: config,\n loaded: true\n }));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n (0,_state__WEBPACK_IMPORTED_MODULE_3__.getExtensionsConfigStore)().setState({\n configs: configs\n });\n}\n/*\n * API\n *\n */ /**\n * This defines a configuration schema for a module. The schema tells the\n * configuration system how the module can be configured. It specifies\n * what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param moduleName Name of the module the schema is being defined for. Generally\n * should be the one in which the `defineConfigSchema` call takes place.\n * @param schema The config schema for the module\n */ function defineConfigSchema(moduleName, schema) {\n validateConfigSchema(moduleName, schema);\n var enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(schema, implicitConfigSchema);\n _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, moduleName, enhancedSchema)),\n moduleLoaded: _object_spread_props(_object_spread({}, state.moduleLoaded), _define_property({}, moduleName, true))\n });\n });\n}\n/**\n * This alerts the configuration system that a module exists. This allows config to be\n * processed, while still allowing the extension system to know whether the module has\n * actually had its front bundle executed yet.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param moduleName\n */ function registerModuleWithConfigSystem(moduleName) {\n var state = _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState();\n _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState({\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, moduleName, implicitConfigSchema))\n });\n}\n/**\n * This allows the config system to support translation overrides for namespaces that\n * do not correspond to modules.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param namespace\n */ function registerTranslationNamespace(namespace) {\n var state = _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState();\n _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState({\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, namespace, translationOverridesSchema))\n });\n}\n/**\n * This defines a configuration schema for an extension. When a schema is defined\n * for an extension, that extension will receive the configuration corresponding\n * to that schema, rather than the configuration corresponding to the module\n * in which it is defined.\n *\n * The schema tells the configuration system how the module can be configured.\n * It specifies what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param extensionName Name of the extension the schema is being defined for.\n * Should match the `name` of one of the `extensions` entries being returned\n * by `setupOpenMRS`.\n * @param schema The config schema for the extension\n */ function defineExtensionConfigSchema(extensionName, schema) {\n validateConfigSchema(extensionName, schema);\n var enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(schema, implicitConfigSchema);\n var state = _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState();\n if (state.schemas[extensionName]) {\n console.error(\"Config schema for extension \".concat(extensionName, \" already exists. If there are multiple extensions with this same name, one will probably crash.\"));\n }\n _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState({\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, extensionName, enhancedSchema))\n });\n}\nfunction provide(config) {\n var sourceName = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : \"provided\";\n _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n providedConfigs: _to_consumable_array(state.providedConfigs).concat([\n {\n source: sourceName,\n config: config\n }\n ])\n });\n });\n}\n/**\n * A promise-based way to access the config as soon as it is fully loaded.\n * If it is already loaded, resolves the config in its present state.\n *\n * This is a useful function if you need to get the config in the course\n * of the execution of a function.\n *\n * @param moduleName The name of the module for which to look up the config\n */ function getConfig(moduleName) {\n return new Promise(function(resolve) {\n var update = function update(state) {\n if (state.loaded && state.config) {\n var config = (0,ramda__WEBPACK_IMPORTED_MODULE_6__[\"default\"])([\n \"Display conditions\",\n \"Translation overrides\"\n ], state.config);\n resolve(config);\n unsubscribe && unsubscribe();\n }\n };\n var store = (0,_state__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n update(store.getState());\n var unsubscribe = store.subscribe(update);\n });\n}\n/** @internal */ function getTranslationOverrides(moduleName) {\n return new Promise(function(resolve) {\n var update = function update(state) {\n if (state.translationOverridesLoaded && state.config) {\n var _state_config_Translationoverrides;\n var translationOverrides = (_state_config_Translationoverrides = state.config[\"Translation overrides\"]) !== null && _state_config_Translationoverrides !== void 0 ? _state_config_Translationoverrides : {};\n resolve(translationOverrides);\n unsubscribe && unsubscribe();\n }\n };\n var store = (0,_state__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n update(store.getState());\n var unsubscribe = store.subscribe(update);\n });\n}\n/**\n * Validate and interpolate defaults for `providedConfig` according to `schema`\n *\n * @param schema a configuration schema\n * @param providedConfig an object of config values (without the top-level module name)\n * @param keyPathContext a dot-deparated string which helps the user figure out where\n * the provided config came from\n * @internal\n */ function processConfig(schema, providedConfig, keyPathContext) {\n validateStructure(schema, providedConfig, keyPathContext);\n var config = setDefaults(schema, providedConfig);\n runAllValidatorsInConfigTree(schema, config, keyPathContext);\n return config;\n}\n/*\n * Helper functions\n *\n */ /**\n * Returns the configuration for an extension. This configuration is specific\n * to the slot in which it is mounted, and its ID within that slot.\n *\n * The schema for that configuration is the extension schema. If no extension\n * schema has been provided, the schema used is the schema of the module in\n * which the extension is defined.\n *\n * @param slotModuleName The name of the module which defines the extension slot\n * @param extensionModuleName The name of the module which defines the extension (and therefore the config schema)\n * @param slotName The name of the extension slot where the extension is mounted\n * @param extensionId The ID of the extension in its slot\n */ function computeExtensionConfig(slotModuleName, extensionModuleName, slotName, extensionId, configState, tempConfigState) {\n var _slotModuleConfig_extensionSlots, _slotModuleConfig_extensionSlots_slotName, _slotModuleConfig_extensionSlots_slotName_configure;\n var extensionName = getExtensionNameFromId(extensionId);\n var extensionConfigSchema = configState.schemas[extensionName];\n var nameOfSchemaSource = extensionConfigSchema ? extensionName : extensionModuleName;\n var providedConfigs = getProvidedConfigs(configState, tempConfigState);\n var slotModuleConfig = mergeConfigsFor(slotModuleName, providedConfigs);\n var _slotModuleConfig_extensionSlots_slotName_configure_extensionId;\n var configOverride = (_slotModuleConfig_extensionSlots_slotName_configure_extensionId = slotModuleConfig === null || slotModuleConfig === void 0 ? void 0 : (_slotModuleConfig_extensionSlots = slotModuleConfig.extensionSlots) === null || _slotModuleConfig_extensionSlots === void 0 ? void 0 : (_slotModuleConfig_extensionSlots_slotName = _slotModuleConfig_extensionSlots[slotName]) === null || _slotModuleConfig_extensionSlots_slotName === void 0 ? void 0 : (_slotModuleConfig_extensionSlots_slotName_configure = _slotModuleConfig_extensionSlots_slotName.configure) === null || _slotModuleConfig_extensionSlots_slotName_configure === void 0 ? void 0 : _slotModuleConfig_extensionSlots_slotName_configure[extensionId]) !== null && _slotModuleConfig_extensionSlots_slotName_configure_extensionId !== void 0 ? _slotModuleConfig_extensionSlots_slotName_configure_extensionId : {};\n var extensionConfig = mergeConfigsFor(nameOfSchemaSource, providedConfigs);\n var combinedConfig = mergeConfigs([\n extensionConfig,\n configOverride\n ]);\n var schema = extensionConfigSchema !== null && extensionConfigSchema !== void 0 ? extensionConfigSchema : configState.schemas[extensionModuleName];\n validateStructure(schema, combinedConfig, nameOfSchemaSource);\n var config = setDefaults(schema, combinedConfig);\n runAllValidatorsInConfigTree(schema, config, nameOfSchemaSource);\n delete config.extensionSlots;\n return config;\n}\nfunction getImplementerToolsConfig(configState, tempConfigState) {\n var result = getSchemaWithValuesAndSources((0,ramda__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(configState.schemas));\n var configsAndSources = _to_consumable_array(configState.providedConfigs.map(function(c) {\n return [\n c.config,\n c.source\n ];\n })).concat([\n [\n tempConfigState.config,\n \"temporary config\"\n ]\n ]);\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = configsAndSources[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _step_value = _sliced_to_array(_step.value, 2), config = _step_value[0], source = _step_value[1];\n result = mergeConfigs([\n result,\n createValuesAndSourcesTree(config, source)\n ]);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return result;\n}\nfunction getSchemaWithValuesAndSources(schema) {\n if (schema.hasOwnProperty(\"_default\")) {\n return _object_spread_props(_object_spread({}, schema), {\n _value: schema._default,\n _source: \"default\"\n });\n } else if (isOrdinaryObject(schema)) {\n return Object.keys(schema).reduce(function(obj, key) {\n obj[key] = getSchemaWithValuesAndSources(schema[key]);\n return obj;\n }, {});\n } else {\n // at this point, the schema is bad and an error will have been logged during schema validation\n return {};\n }\n}\nfunction createValuesAndSourcesTree(config, source) {\n if (isOrdinaryObject(config)) {\n return Object.keys(config).reduce(function(obj, key) {\n obj[key] = createValuesAndSourcesTree(config[key], source);\n return obj;\n }, {});\n } else {\n return {\n _value: config,\n _source: source\n };\n }\n}\nfunction getExtensionSlotConfigs(configState, tempConfigState) {\n var allConfigs = mergeConfigs(getProvidedConfigs(configState, tempConfigState));\n var slotConfigPerModule = Object.keys(allConfigs).reduce(function(obj, key) {\n var _allConfigs_key;\n if ((_allConfigs_key = allConfigs[key]) === null || _allConfigs_key === void 0 ? void 0 : _allConfigs_key.extensionSlots) {\n var _allConfigs_key1;\n obj[key] = (_allConfigs_key1 = allConfigs[key]) === null || _allConfigs_key1 === void 0 ? void 0 : _allConfigs_key1.extensionSlots;\n }\n return obj;\n }, {});\n validateAllExtensionSlotConfigs(slotConfigPerModule);\n var slotConfigs = Object.keys(slotConfigPerModule).reduce(function(obj, key) {\n obj = _object_spread({}, obj, slotConfigPerModule[key]);\n return obj;\n }, {});\n return slotConfigs;\n}\nfunction validateAllExtensionSlotConfigs(slotConfigPerModule) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.entries(slotConfigPerModule)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _step_value = _sliced_to_array(_step.value, 2), moduleName = _step_value[0], configBySlotName = _step_value[1];\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;\n try {\n for(var _iterator1 = Object.entries(configBySlotName)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){\n var _step_value1 = _sliced_to_array(_step1.value, 2), slotName = _step_value1[0], config = _step_value1[1];\n validateExtensionSlotConfig(config, moduleName, slotName);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally{\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction validateExtensionSlotConfig(config, moduleName, slotName) {\n var keyPath = \"\".concat(moduleName, \".extensionSlots.\").concat(slotName);\n var errorPrefix = \"Extension slot config '\".concat(keyPath, \"'\");\n var invalidKeys = Object.keys(config).filter(function(k) {\n return ![\n \"add\",\n \"remove\",\n \"order\",\n \"configure\"\n ].includes(k);\n });\n if (invalidKeys.length) {\n logError(keyPath, errorPrefix + \"' contains invalid keys '\".concat(invalidKeys.join(\"', '\"), \"'\"));\n }\n if (config.add) {\n if (!Array.isArray(config.add) || !config.add.every(function(n) {\n return typeof n === \"string\";\n })) {\n logError(keyPath, errorPrefix + \".add' is invalid. Must be an array of strings (extension IDs)\");\n }\n }\n if (config.remove) {\n if (!Array.isArray(config.remove) || !config.remove.every(function(n) {\n return typeof n === \"string\";\n })) {\n logError(keyPath, errorPrefix + \".remove' is invalid. Must be an array of strings (extension IDs)\");\n }\n }\n if (config.order) {\n if (!Array.isArray(config.order) || !config.order.every(function(n) {\n return typeof n === \"string\";\n })) {\n logError(keyPath, errorPrefix + \".order' is invalid. Must be an array of strings (extension IDs)\");\n }\n }\n if (config.configure) {\n if (!isOrdinaryObject(config.configure)) {\n logError(keyPath, errorPrefix + \".configure' is invalid. Must be an object with extension IDs for keys\");\n }\n }\n}\nfunction getProvidedConfigs(configState, tempConfigState) {\n return _to_consumable_array(configState.providedConfigs.map(function(c) {\n return c.config;\n })).concat([\n tempConfigState.config\n ]);\n}\n/**\n * Validates the config schema for a module. Since problems identified here are programming errors\n * that hopefully will be caught during development, this function logs errors to the console directly;\n * it's fine if we spam the user with these errors.\n */ function validateConfigSchema(moduleName, schema) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\n var updateMessage = \"Please verify that you are running the latest version and, if so, alert the maintainer.\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n var _loop = function() {\n var key = _step.value;\n var thisKeyPath = keyPath + (keyPath && \".\") + key;\n var schemaPart = schema[key];\n if (thisKeyPath === \"Display conditions\") {\n console.error(\"\".concat(moduleName, ' declares a configuration option called \"Display conditions\"; the \"Display conditions\" option is a reserved name. ').concat(updateMessage));\n }\n if (thisKeyPath === \"Translation overrides\") {\n console.error(\"\".concat(moduleName, ' declares a configuration option called \"Translation overrides\"; the \"Translation overrides\" option is a reserved name. ').concat(updateMessage));\n }\n if (!isOrdinaryObject(schemaPart)) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage));\n return \"continue\";\n }\n if (!schemaPart.hasOwnProperty(\"_default\")) {\n // recurse for nested config keys\n validateConfigSchema(moduleName, schemaPart, thisKeyPath);\n }\n var elements = schemaPart._elements;\n if (hasObjectSchema(elements)) {\n validateConfigSchema(moduleName, elements, thisKeyPath + \"._elements\");\n }\n if (schemaPart._validators) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = schemaPart._validators[Symbol.iterator](), _step1; !(_iteratorNormalCompletion = (_step1 = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _$validator = _step1.value;\n if (typeof _$validator !== \"function\") {\n console.error(\"\".concat(moduleName, \" has invalid validator for key '\").concat(thisKeyPath, \"' \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: validators must be functions that return either \" + \"undefined or an error string. Received \".concat(_$validator, \".\"));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n var valueType = schemaPart._type;\n if (valueType && !Object.values(_types__WEBPACK_IMPORTED_MODULE_0__.Type).includes(valueType)) {\n console.error(\"\".concat(moduleName, \" has invalid type for key '\").concat(thisKeyPath, \"' \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: the allowed types are \".concat(Object.values(_types__WEBPACK_IMPORTED_MODULE_0__.Type).join(\", \"), \". \") + \"Received '\".concat(valueType, \"'\"));\n }\n if (Object.keys(schemaPart).every(function(k) {\n return [\n \"_description\",\n \"_validators\",\n \"_elements\",\n \"_type\"\n ].includes(k);\n }) && !keyPath.includes(\"._elements\")) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: all config elements must have a default. \" + \"Received \".concat(JSON.stringify(schemaPart)));\n }\n if (elements && valueType && ![\n _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object\n ].includes(valueType)) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: the 'elements' key only works with '_type' equal to 'Array' or 'Object'. \" + \"Received \".concat(JSON.stringify(valueType)));\n }\n };\n for(var _iterator = Object.keys(schema).filter(function(k) {\n return !k.startsWith(\"_\");\n })[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction getConfigForModule(moduleName, configState, tempConfigState) {\n var schema = configState.schemas[moduleName];\n var inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n validateStructure(schema, inputConfig, moduleName);\n var config = setDefaults(schema, inputConfig);\n runAllValidatorsInConfigTree(schema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction getConfigForModuleImplicitSchema(moduleName, configState, tempConfigState) {\n var inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n var config = setDefaults(implicitConfigSchema, inputConfig);\n runAllValidatorsInConfigTree(implicitConfigSchema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction mergeConfigsFor(moduleName, allConfigs) {\n var allConfigsForModule = allConfigs.map(function(param) {\n var c = param[moduleName];\n return c;\n }).filter(function(c) {\n return !!c;\n });\n return mergeConfigs(allConfigsForModule);\n}\nfunction mergeConfigs(configs) {\n var mergeDeepAll = (0,ramda__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n return mergeDeepAll({}, configs);\n}\n/**\n * Recursively check the provided config tree to make sure that all\n * of the provided properties exist in the schema, and that types are\n * correct. Does not run validators yet, since those will be run on\n * the config with the defaults filled in.\n */ function validateStructure(schema, config) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n // validate each constituent element\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n var thisKeyPath = keyPath + \".\" + key;\n var schemaPart = schema[key];\n if (!schema.hasOwnProperty(key)) {\n if (!(key === \"extensionSlots\" && keyPath !== \"\")) {\n logError(thisKeyPath, \"Unknown config key '\".concat(thisKeyPath, \"' provided. Ignoring.\"));\n }\n continue;\n }\n validateBranchStructure(schemaPart, value, thisKeyPath);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction validateBranchStructure(schemaPart, value, keyPath) {\n checkType(keyPath, schemaPart._type, value);\n if (isOrdinaryObject(value)) {\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n // validate as freeform object\n validateFreeformObjectStructure(schemaPart, value, keyPath);\n } else if (!(schemaPart.hasOwnProperty(\"_default\") || schemaPart.hasOwnProperty(\"_type\"))) {\n // validate as normal nested config\n validateStructure(schemaPart, value, keyPath);\n }\n } else {\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array) {\n validateArrayStructure(schemaPart, value, keyPath);\n }\n }\n}\nfunction validateFreeformObjectStructure(freeformObjectSchema, config, keyPath) {\n if (freeformObjectSchema._elements) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n validateStructure(freeformObjectSchema._elements, value, \"\".concat(keyPath, \".\").concat(key));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n}\nfunction validateArrayStructure(arraySchema, value, keyPath) {\n var validatedAsArray = checkType(keyPath, _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array, value);\n if (!validatedAsArray) {\n return;\n }\n // if there is an array element object schema, verify that elements match it\n if (hasObjectSchema(arraySchema._elements)) {\n for(var i = 0; i < value.length; i++){\n validateBranchStructure(arraySchema._elements, value[i], \"\".concat(keyPath, \"[\").concat(i, \"]\"));\n }\n }\n for(var i1 = 0; i1 < value.length; i1++){\n var _arraySchema__elements;\n checkType(\"\".concat(keyPath, \"[\").concat(i1, \"]\"), (_arraySchema__elements = arraySchema._elements) === null || _arraySchema__elements === void 0 ? void 0 : _arraySchema__elements._type, value[i1]);\n }\n}\n/**\n * Run all the validators in the config tree. This should be run\n * on the config object after it has been filled in with all the defaults, since\n * higher-level validators may refer to default values.\n */ function runAllValidatorsInConfigTree(schema, config) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\n // If `!schema`, there should have been a structural validation error printed already.\n if (schema) {\n if (config !== schema._default) {\n runValidators(keyPath, schema._validators, config);\n }\n if (isOrdinaryObject(config)) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n var thisKeyPath = keyPath + \".\" + key;\n var schemaPart = schema[key];\n if (schema._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object && schema._elements) {\n runAllValidatorsInConfigTree(schema._elements, value, thisKeyPath);\n } else {\n runAllValidatorsInConfigTree(schemaPart, value, thisKeyPath);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } else if (Array.isArray(config) && schema._elements) {\n for(var i = 0; i < config.length; i++){\n runAllValidatorsInConfigTree(schema._elements, config[i], \"\".concat(keyPath, \"[\").concat(i, \"]\"));\n }\n }\n }\n}\n/**\n * Run type validation for the value, logging any errors.\n * @returns true if validation passes, false otherwise\n */ function checkType(keyPath, _type, value) {\n if (_type) {\n var _$validator = {\n Array: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isArray,\n Boolean: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isBoolean,\n ConceptUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n Number: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isNumber,\n Object: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isObject,\n String: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isString,\n UUID: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PersonAttributeTypeUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PatientIdentifierTypeUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid\n };\n return runValidators(keyPath, [\n _$validator[_type]\n ], value);\n }\n return true;\n}\n/**\n * Runs validators, logging errors.\n * @returns true if all pass, false otherwise.\n */ function runValidators(keyPath, validators, value) {\n var returnValue = true;\n if (validators) {\n try {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = validators[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _$validator = _step.value;\n var validatorResult = _$validator(value);\n if (typeof validatorResult === \"string\") {\n var message = typeof value === \"object\" ? \"Invalid configuration for \".concat(keyPath, \": \").concat(validatorResult) : \"Invalid configuration value \".concat(value, \" for \").concat(keyPath, \": \").concat(validatorResult);\n logError(keyPath, message);\n returnValue = false;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } catch (e) {\n console.error('Skipping invalid validator at \"'.concat(keyPath, '\". Encountered error\\n\t').concat(e));\n }\n }\n return returnValue;\n}\n// Recursively fill in the config with values from the schema.\nvar setDefaults = function(schema, inputConfig) {\n var config = (0,ramda__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(inputConfig);\n if (!schema) {\n return config;\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n var _loop = function() {\n var key = _step.value;\n var configPart = config[key];\n var schemaPart = schema[key];\n // The `schemaPart &&` clause of this `if` statement will only fail\n // if the schema is very invalid. It is there to prevent the app from\n // crashing completely, though it will produce unexpected behavior.\n // If this happens, there should be legible errors in the console from\n // the schema validator.\n if (schemaPart && (schemaPart.hasOwnProperty(\"_type\") || schemaPart.hasOwnProperty(\"_default\"))) {\n // We assume that schemaPart defines a config value, since it has\n // a property `_type` or `_default`.\n if (!config.hasOwnProperty(key)) {\n config[key] = schemaPart[\"_default\"];\n }\n // We also check if it is an object or array with object elements, in which case we recurse\n var elements = schemaPart._elements;\n if (configPart && hasObjectSchema(elements)) {\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array && Array.isArray(configPart)) {\n var configWithDefaults = configPart.map(function(conf) {\n return setDefaults(elements, conf);\n });\n config[key] = configWithDefaults;\n } else if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(configPart)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion = (_step1 = _iterator.next()).done); _iteratorNormalCompletion = true){\n var objectKey = _step1.value;\n configPart[objectKey] = setDefaults(elements, configPart[objectKey]);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }\n } else if (isOrdinaryObject(schemaPart)) {\n // Since schemaPart has no property \"_type\", if it's an ordinary object\n // (unlike, importantly, the validators array), we assume it is a parent config property.\n // We recurse to config[key] and schema[key]. Default config[key] to {}.\n var selectedConfigPart = configPart !== null && configPart !== void 0 ? configPart : {};\n // There will have been a validation error already if configPart is not a plain object.\n if (isOrdinaryObject(selectedConfigPart)) {\n config[key] = setDefaults(schemaPart, selectedConfigPart);\n }\n }\n };\n for(var _iterator = Object.keys(schema)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return config;\n};\nfunction hasObjectSchema(elementsSchema) {\n return !!elementsSchema && Object.keys(elementsSchema).filter(function(e) {\n return ![\n \"_default\",\n \"_validators\"\n ].includes(e);\n }).length > 0;\n}\nfunction isOrdinaryObject(value) {\n return typeof value === \"object\" && !Array.isArray(value) && value !== null;\n}\n/** Keep track of which validation errors we have displayed. Each one should only be displayed once. */ var displayedValidationMessages = new Set();\nfunction logError(keyPath, message) {\n var key = \"\".concat(keyPath, \":::\").concat(message);\n if (!displayedValidationMessages.has(key)) {\n console.error(message);\n displayedValidationMessages.add(key);\n }\n}\n/**\n * Normally, configuration errors are only displayed once. This function clears the list of\n * displayed errors, so that they will be displayed again.\n *\n * @internal\n */ function clearConfigErrors(keyPath) {\n if (keyPath) {\n displayedValidationMessages.forEach(function(key) {\n if (key.startsWith(keyPath)) {\n displayedValidationMessages.delete(key);\n }\n });\n } else {\n displayedValidationMessages.clear();\n }\n}\n/**\n * Copied over from esm-extensions. It rightly belongs to that module, but esm-config\n * cannot depend on esm-extensions.\n */ function getExtensionNameFromId(extensionId) {\n var _extensionId_split = _sliced_to_array(extensionId.split(\"#\"), 1), extensionName = _extensionId_split[0];\n return extensionName;\n}\n/**\n * The translation overrides schema is used in the implicit schema given to every module;\n * plus any additional translation namespaces (at time of writing, this is just 'core').\n */ var translationOverridesSchema = {\n \"Translation overrides\": {\n _description: \"Per-language overrides for frontend translations should be keyed by language code and each language dictionary contains the translation key and the display value\",\n _type: _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object,\n _default: {},\n _validators: [\n (0,_validators_validator__WEBPACK_IMPORTED_MODULE_2__.validator)(function(o) {\n return Object.keys(o).every(function(k) {\n return /^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k);\n });\n }, function(o) {\n var badKeys = Object.keys(o).filter(function(k) {\n return !/^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k);\n });\n return \"The 'Translation overrides' object should have language codes for keys. Language codes must be in the form of a two-to-three letter language code optionally followed by a hyphen and a two-to-three letter country code. The following keys do not conform: \".concat(badKeys.join(\", \"), \".\");\n })\n ]\n }\n};\n/**\n * The implicitConfigSchema is implicitly included in every configuration schema\n */ var implicitConfigSchema = _object_spread({\n \"Display conditions\": {\n privileges: {\n _description: \"The privilege(s) the user must have to use this extension\",\n _type: _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _default: []\n }\n }\n}, translationOverridesSchema);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvc3JjL21vZHVsZS1jb25maWcvbW9kdWxlLWNvbmZpZy50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2QkFBNkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ3VDO0FBRXBDO0FBQ3lFO0FBQ3JEO0FBVW5DO0FBSWpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBbUJDLEdBQ0RvQixvQkFBb0JQLHVEQUFtQkEsQ0FBQ1EsUUFBUSxJQUFJSCx3REFBb0JBLENBQUNHLFFBQVE7QUFDakZSLHVEQUFtQkEsQ0FBQ1MsU0FBUyxDQUFDLFNBQUNDO1dBQWdCSCxvQkFBb0JHLGFBQWFMLHdEQUFvQkEsQ0FBQ0csUUFBUTs7QUFDN0dILHdEQUFvQkEsQ0FBQ0ksU0FBUyxDQUFDLFNBQUNFO1dBQzlCSixvQkFBb0JQLHVEQUFtQkEsQ0FBQ1EsUUFBUSxJQUFJRzs7QUFHdERDLDhCQUE4QlosdURBQW1CQSxDQUFDUSxRQUFRLElBQUlILHdEQUFvQkEsQ0FBQ0csUUFBUTtBQUMzRlIsdURBQW1CQSxDQUFDUyxTQUFTLENBQUMsU0FBQ0M7V0FDN0JFLDhCQUE4QkYsYUFBYUwsd0RBQW9CQSxDQUFDRyxRQUFROztBQUUxRUgsd0RBQW9CQSxDQUFDSSxTQUFTLENBQUMsU0FBQ0U7V0FDOUJDLDhCQUE4QlosdURBQW1CQSxDQUFDUSxRQUFRLElBQUlHOztBQUdoRUUsNEJBQTRCYix1REFBbUJBLENBQUNRLFFBQVEsSUFBSUgsd0RBQW9CQSxDQUFDRyxRQUFRO0FBQ3pGUix1REFBbUJBLENBQUNTLFNBQVMsQ0FBQyxTQUFDQztXQUM3QkcsNEJBQTRCSCxhQUFhTCx3REFBb0JBLENBQUNHLFFBQVE7O0FBRXhFSCx3REFBb0JBLENBQUNJLFNBQVMsQ0FBQyxTQUFD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dUJBQXVCakMsV0FBbUIsRUFBRTtJQUNuRCxJQUF3QkEsc0NBQUFBLFlBQVkrSCxLQUFLLENBQUMsVUFBbkNwSCxnQkFBaUJYO0lBQ3hCLE9BQU9XO0FBQ1Q7QUFFQTs7O0NBR0MsR0FDRCxJQUFNRiw2QkFBMkM7SUFDL0MseUJBQXlCO1FBQ3ZCdUgsY0FDRTtRQUNGNUMsT0FBTzVJLHdDQUFJQSxDQUFDMEIsTUFBTTtRQUNsQmlGLFVBQVUsQ0FBQztRQUNYK0IsYUFBYTtZQUNYbkksZ0VBQVNBLENBQ1AsU0FBQ2tMO3VCQUFNL0osT0FBT0MsSUFBSSxDQUFDOEosR0FBR3pELEtBQUssQ0FBQyxTQUFDUDsyQkFBTSw2QkFBNkJpRSxJQUFJLENBQUNqRTs7ZUFDckUsU0FBQ2dFLEdBQU07Z0JBQ0wsSUFBTUUsVUFBVWpLLE9BQU9DLElBQUksQ0FBQzhKLEdBQUdqRSxNQUFNLENBQUMsU0FBQ0M7MkJBQU0sQ0FBQyw2QkFBNkJpRSxJQUFJLENBQUNqRTs7Z0JBQ2hGLE9BQU8sZ1FBRUwsT0FGcVFrRSxRQUFROUQsSUFBSSxDQUNqUixPQUNBO1lBQ0o7U0FFSDtJQUNIO0FBQ0Y7QUFFQTs7Q0FFQyxHQUNELElBQU1oRSx1QkFBcUM7SUFDekMsc0JBQXNCO1FBQ3BCK0gsWUFBWTtZQUNWSixjQUFjO1lBQ2Q1QyxPQUFPNUksd0NBQUlBLENBQUMrSCxLQUFLO1lBQ2pCcEIsVUFBVSxFQUFFO1FBQ2Q7SUFDRjtHQUNHMUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tY29uZmlnL3NyYy9tb2R1bGUtY29uZmlnL21vZHVsZS1jb25maWcudHM/N2NhMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQG1vZHVsZSBAY2F0ZWdvcnkgQ29uZmlnICovXG5pbXBvcnQgeyBjbG9uZSwgcmVkdWNlLCBtZXJnZURlZXBSaWdodCwgZXF1YWxzLCBvbWl0IH0gZnJvbSAncmFtZGEnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcsIENvbmZpZ09iamVjdCwgQ29uZmlnU2NoZW1hLCBFeHRlbnNpb25TbG90Q29uZmlnLCBFeHRlbnNpb25TbG90Q29uZmlnT2JqZWN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzQm9vbGVhbiwgaXNVdWlkLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vdmFsaWRhdG9ycy90eXBlLXZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycy92YWxpZGF0b3InO1xuaW1wb3J0IHR5cGUgeyBDb25maWdFeHRlbnNpb25TdG9yZSwgQ29uZmlnSW50ZXJuYWxTdG9yZSwgQ29uZmlnU3RvcmUgfSBmcm9tICcuL3N0YXRlJztcbmltcG9ydCB7XG4gIGNvbmZpZ0ludGVybmFsU3RvcmUsXG4gIGNvbmZpZ0V4dGVuc2lvblN0b3JlLFxuICBnZXRDb25maWdTdG9yZSxcbiAgZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlLFxuICBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUsXG4gIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLFxuICBnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlLFxufSBmcm9tICcuL3N0YXRlJztcbmltcG9ydCB0eXBlIHt9IGZyb20gJ0BvcGVubXJzL2VzbS1nbG9iYWxzJztcbmltcG9ydCB7IHR5cGUgVGVtcG9yYXJ5Q29uZmlnU3RvcmUgfSBmcm9tICcuLic7XG5cbi8qKlxuICogU3RvcmUgc2V0dXBcbiAqXG4gKlxuICogU2V0IHVwIHN0b3JlcyBhbmQgc3Vic2NyaXB0aW9ucyBzbyB0aGF0IGlucHV0cyBnZXQgcHJvY2Vzc2VkIGFwcHJvcHJpYXRlbHkuXG4gKlxuICogVGhlcmUgYXJlICppbnB1dCogc3RvcmVzIGFuZCAqb3V0cHV0KiBzdG9yZXMuIFRoZSAqaW5wdXQqIHN0b3Jlc1xuICogYXJlIGNvbmZpZ0ludGVybmFsU3RvcmUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLCBhbmQgY29uZmlnRXh0ZW5zaW9uU3RvcmUuIFRoZVxuICogb3V0cHV0IHN0b3JlcyBhcmUgc2V0IGluIHRoZSBgY29tcHV0ZS4uLmAgZnVuY3Rpb25zLiBUaGV5IGFyZSB0aGUgbW9kdWxlXG4gKiBjb25maWcgc3RvcmVzLCB0aGUgZXh0ZW5zaW9uIHNsb3QgY29uZmlnIHN0b3JlcyAoYnkgbW9kdWxlKSwgdGhlIGV4dGVuc2lvblxuICogY29uZmlnIHN0b3JlcywgYW5kIHRoZSBpbXBsZW1lbnRlciB0b29scyBjb25maWcgc3RvcmUuXG4gKlxuICogVGhpcyBjb2RlIHNldHMgdXAgdGhlIHN1YnNjcmlwdGlvbnMgc28gdGhhdCB3aGVuIGFuIGlucHV0IHN0b3JlIGNoYW5nZXMsXG4gKiB0aGUgY29ycmVjdCBzZXQgb2Ygb3V0cHV0IHN0b3JlcyBhcmUgdXBkYXRlZC5cbiAqXG4gKiBBbGwgYGNvbXB1dGUuLi5gIGZ1bmN0aW9ucyBleGNlcHQgYGNvbXB1dGVFeHRlbnNpb25Db25maWdzYCBhcmUgcHVyZVxuICogKG9yIGFyZSBzdXBwb3NlZCB0byBiZSksIG90aGVyIHRoYW4gdGhlIGZhY3QgdGhhdCB0aGV5IGFsbCBgc2V0U3RhdGVgXG4gKiBzdG9yZSB2YWx1ZXMgYXQgdGhlIGVuZC4gYGNvbXB1dGVFeHRlbnNpb25Db25maWdzYCBjYWxscyBgZ2V0R2xvYmFsU3RvcmVgLFxuICogd2hpY2ggY3JlYXRlcyBzdG9yZXMuXG4gKi9cbmNvbXB1dGVNb2R1bGVDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSkgPT4gY29tcHV0ZU1vZHVsZUNvbmZpZyhjb25maWdTdGF0ZSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUuZ2V0U3RhdGUoKSkpO1xudGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKCh0ZW1wQ29uZmlnU3RhdGUpID0+XG4gIGNvbXB1dGVNb2R1bGVDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wQ29uZmlnU3RhdGUpLFxuKTtcblxuY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSkgPT5cbiAgY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoY29uZmlnU3RhdGUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpLFxuKTtcbnRlbXBvcmFyeUNvbmZpZ1N0b3JlLnN1YnNjcmliZSgodGVtcENvbmZpZ1N0YXRlKSA9PlxuICBjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBDb25maWdTdGF0ZSksXG4pO1xuXG5jb21wdXRlRXh0ZW5zaW9uU2xvdENvbmZpZ3MoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSkgPT5cbiAgY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKSxcbik7XG50ZW1wb3JhcnlDb25maWdTdG9yZS5zdWJzY3JpYmUoKHRlbXBDb25maWdTdGF0ZSkgPT5cbiAgY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzKGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKSwgdGVtcENvbmZpZ1N0YXRlKSxcbik7XG5cbmNvbXB1dGVFeHRlbnNpb25Db25maWdzKFxuICBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksXG4gIGNvbmZpZ0V4dGVuc2lvblN0b3JlLmdldFN0YXRlKCksXG4gIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCksXG4pO1xuY29uZmlnSW50ZXJuYWxTdG9yZS5zdWJzY3JpYmUoKGNvbmZpZ1N0YXRlKSA9PiB7XG4gIGNvbXB1dGVFeHRlbnNpb25Db25maWdzKGNvbmZpZ1N0YXRlLCBjb25maWdFeHRlbnNpb25TdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbn0pO1xuY29uZmlnRXh0ZW5zaW9uU3RvcmUuc3Vic2NyaWJlKChleHRlbnNpb25TdGF0ZSkgPT4ge1xuICBjb21wdXRlRXh0ZW5zaW9uQ29uZmlncyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIGV4dGVuc2lvblN0YXRlLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbn0pO1xudGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKCh0ZW1wQ29uZmlnU3RhdGUpID0+IHtcbiAgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCBjb25maWdFeHRlbnNpb25TdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wQ29uZmlnU3RhdGUpO1xufSk7XG5cbmZ1bmN0aW9uIGNvbXB1dGVNb2R1bGVDb25maWcoc3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsIHRlbXBTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUpIHtcbiAgZm9yIChsZXQgbW9kdWxlTmFtZSBvZiBPYmplY3Qua2V5cyhzdGF0ZS5zY2hlbWFzKSkge1xuICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHNjaGVtYSBjb3VsZCBiZSBlaXRoZXIganVzdCB0aGUgaW1wbGljaXQgc2NoZW1hIG9yIHRoZSBhY3R1YWxseVxuICAgIC8vIGRlZmluZWQgc2NoZW1hLiBXZSBydW4gd2l0aCBqdXN0IHRoZSBpbXBsaWNpdCBzY2hlbWEgYmVjYXVzZSB3ZSB3YW50IHRvIHBvcHVsYXRlXG4gICAgLy8gdGhlIGNvbmZpZyBzdG9yZSB3aXRoIHRoZSB0cmFuc2xhdGlvbiBvdmVycmlkZXMgYXMgc29vbiBhcyBwb3NzaWJsZS4gSW4gZmFjdCwgdGhlXG4gICAgLy8gdHJhbnNsYXRpb24gc3lzdGVtIHdpbGwgdGhyb3cgZm9yIFN1c3BlbnNlIHVudGlsIHRoZSB0cmFuc2xhdGlvbiBvdmVycmlkZXMgYXJlXG4gICAgLy8gYXZhaWxhYmxlLCB3aGljaCBhcyBvZiB0aGlzIHdyaXRpbmcgYmxvY2tzIHRoZSBzY2hlbWEgZGVmaW5pdGlvbiBmcm9tIG9jY3VycmluZ1xuICAgIC8vIGZvciBtb2R1bGVzIGxvYWRlZCBiYXNlZCBvbiB0aGVpciBleHRlbnNpb25zLlxuICAgIGNvbnN0IG1vZHVsZVN0b3JlID0gZ2V0Q29uZmlnU3RvcmUobW9kdWxlTmFtZSk7XG4gICAgaWYgKHN0YXRlLm1vZHVsZUxvYWRlZFttb2R1bGVOYW1lXSkge1xuICAgICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRm9yTW9kdWxlKG1vZHVsZU5hbWUsIHN0YXRlLCB0ZW1wU3RhdGUpO1xuICAgICAgbW9kdWxlU3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICB0cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZDogdHJ1ZSxcbiAgICAgICAgbG9hZGVkOiB0cnVlLFxuICAgICAgICBjb25maWcsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRm9yTW9kdWxlSW1wbGljaXRTY2hlbWEobW9kdWxlTmFtZSwgc3RhdGUsIHRlbXBTdGF0ZSk7XG4gICAgICBtb2R1bGVTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgIHRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkOiB0cnVlLFxuICAgICAgICBsb2FkZWQ6IGZhbHNlLFxuICAgICAgICBjb25maWcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzKHN0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLCB0ZW1wU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlKSB7XG4gIGNvbnN0IHNsb3RDb25maWdzID0gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ3Moc3RhdGUsIHRlbXBTdGF0ZSk7XG4gIGNvbnN0IG5ld1Nsb3RTdG9yZUVudHJpZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoc2xvdENvbmZpZ3MpLm1hcCgoW3Nsb3ROYW1lLCBjb25maWddKSA9PiBbc2xvdE5hbWUsIHsgbG9hZGVkOiB0cnVlLCBjb25maWcgfV0pLFxuICApO1xuICBjb25zdCBzbG90U3RvcmUgPSBnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlKCk7XG4gIGNvbnN0IG9sZFN0YXRlID0gc2xvdFN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IG5ld1N0YXRlID0geyBzbG90czogeyAuLi5vbGRTdGF0ZS5zbG90cywgLi4ubmV3U2xvdFN0b3JlRW50cmllcyB9IH07XG4gIGlmICghZXF1YWxzKG9sZFN0YXRlLCBuZXdTdGF0ZSkpIHtcbiAgICBzbG90U3RvcmUuc2V0U3RhdGUobmV3U3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnKHN0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLCB0ZW1wQ29uZmlnU3RhdGU6IFRlbXBvcmFyeUNvbmZpZ1N0b3JlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldEltcGxlbWVudGVyVG9vbHNDb25maWcoc3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gIGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zZXRTdGF0ZSh7IGNvbmZpZyB9KTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoXG4gIGNvbmZpZ1N0YXRlOiBDb25maWdJbnRlcm5hbFN0b3JlLFxuICBleHRlbnNpb25TdGF0ZTogQ29uZmlnRXh0ZW5zaW9uU3RvcmUsXG4gIHRlbXBDb25maWdTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUsXG4pIHtcbiAgY29uc3QgY29uZmlncyA9IHt9O1xuICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgbW9kdWxlIHNjaGVtYSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQsIHNpbmNlIHRoZSBleHRlbnNpb25cbiAgLy8gaXQgY29udGFpbnMgaXMgbW91bnRlZC5cbiAgZm9yIChsZXQgZXh0ZW5zaW9uIG9mIGV4dGVuc2lvblN0YXRlLm1vdW50ZWRFeHRlbnNpb25zKSB7XG4gICAgY29uc3QgY29uZmlnID0gY29tcHV0ZUV4dGVuc2lvbkNvbmZpZyhcbiAgICAgIGV4dGVuc2lvbi5zbG90TW9kdWxlTmFtZSxcbiAgICAgIGV4dGVuc2lvbi5leHRlbnNpb25Nb2R1bGVOYW1lLFxuICAgICAgZXh0ZW5zaW9uLnNsb3ROYW1lLFxuICAgICAgZXh0ZW5zaW9uLmV4dGVuc2lvbklkLFxuICAgICAgY29uZmlnU3RhdGUsXG4gICAgICB0ZW1wQ29uZmlnU3RhdGUsXG4gICAgKTtcbiAgICBjb25maWdzW2V4dGVuc2lvbi5zbG90TmFtZV0gPSB7XG4gICAgICAuLi5jb25maWdzW2V4dGVuc2lvbi5zbG90TmFtZV0sXG4gICAgICBbZXh0ZW5zaW9uLmV4dGVuc2lvbklkXTogeyBjb25maWcsIGxvYWRlZDogdHJ1ZSB9LFxuICAgIH07XG4gIH1cbiAgZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlKCkuc2V0U3RhdGUoeyBjb25maWdzIH0pO1xufVxuXG4vKlxuICogQVBJXG4gKlxuICovXG5cbi8qKlxuICogVGhpcyBkZWZpbmVzIGEgY29uZmlndXJhdGlvbiBzY2hlbWEgZm9yIGEgbW9kdWxlLiBUaGUgc2NoZW1hIHRlbGxzIHRoZVxuICogY29uZmlndXJhdGlvbiBzeXN0ZW0gaG93IHRoZSBtb2R1bGUgY2FuIGJlIGNvbmZpZ3VyZWQuIEl0IHNwZWNpZmllc1xuICogd2hhdCBtYWtlcyBjb25maWd1cmF0aW9uIHZhbGlkIG9yIGludmFsaWQuXG4gKlxuICogU2VlIFtDb25maWd1cmF0aW9uIFN5c3RlbV0oaHR0cHM6Ly9vMy1kb2NzLm9wZW5tcnMub3JnL2RvY3MvY29uZmlndXJhdGlvbi1zeXN0ZW0pXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkZWZpbmluZyBhIGNvbmZpZyBzY2hlbWEuXG4gKlxuICogQHBhcmFtIG1vZHVsZU5hbWUgTmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBzY2hlbWEgaXMgYmVpbmcgZGVmaW5lZCBmb3IuIEdlbmVyYWxseVxuICogICBzaG91bGQgYmUgdGhlIG9uZSBpbiB3aGljaCB0aGUgYGRlZmluZUNvbmZpZ1NjaGVtYWAgY2FsbCB0YWtlcyBwbGFjZS5cbiAqIEBwYXJhbSBzY2hlbWEgVGhlIGNvbmZpZyBzY2hlbWEgZm9yIHRoZSBtb2R1bGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbmZpZ1NjaGVtYShtb2R1bGVOYW1lOiBzdHJpbmcsIHNjaGVtYTogQ29uZmlnU2NoZW1hKSB7XG4gIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYSk7XG4gIGNvbnN0IGVuaGFuY2VkU2NoZW1hID0gbWVyZ2VEZWVwUmlnaHQoc2NoZW1hLCBpbXBsaWNpdENvbmZpZ1NjaGVtYSkgYXMgQ29uZmlnU2NoZW1hO1xuXG4gIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoKHN0YXRlKSA9PiAoe1xuICAgIC4uLnN0YXRlLFxuICAgIHNjaGVtYXM6IHsgLi4uc3RhdGUuc2NoZW1hcywgW21vZHVsZU5hbWVdOiBlbmhhbmNlZFNjaGVtYSB9LFxuICAgIG1vZHVsZUxvYWRlZDogeyAuLi5zdGF0ZS5tb2R1bGVMb2FkZWQsIFttb2R1bGVOYW1lXTogdHJ1ZSB9LFxuICB9KSk7XG59XG5cbi8qKlxuICogVGhpcyBhbGVydHMgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHRoYXQgYSBtb2R1bGUgZXhpc3RzLiBUaGlzIGFsbG93cyBjb25maWcgdG8gYmVcbiAqIHByb2Nlc3NlZCwgd2hpbGUgc3RpbGwgYWxsb3dpbmcgdGhlIGV4dGVuc2lvbiBzeXN0ZW0gdG8ga25vdyB3aGV0aGVyIHRoZSBtb2R1bGUgaGFzXG4gKiBhY3R1YWxseSBoYWQgaXRzIGZyb250IGJ1bmRsZSBleGVjdXRlZCB5ZXQuXG4gKlxuICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIGVzbS1hcHAtc2hlbGwuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0gbW9kdWxlTmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNb2R1bGVXaXRoQ29uZmlnU3lzdGVtKG1vZHVsZU5hbWU6IHN0cmluZykge1xuICBjb25zdCBzdGF0ZSA9IGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSh7XG4gICAgc2NoZW1hczogeyAuLi5zdGF0ZS5zY2hlbWFzLCBbbW9kdWxlTmFtZV06IGltcGxpY2l0Q29uZmlnU2NoZW1hIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFRoaXMgYWxsb3dzIHRoZSBjb25maWcgc3lzdGVtIHRvIHN1cHBvcnQgdHJhbnNsYXRpb24gb3ZlcnJpZGVzIGZvciBuYW1lc3BhY2VzIHRoYXRcbiAqIGRvIG5vdCBjb3JyZXNwb25kIHRvIG1vZHVsZXMuXG4gKlxuICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIGVzbS1hcHAtc2hlbGwuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0gbmFtZXNwYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRyYW5zbGF0aW9uTmFtZXNwYWNlKG5hbWVzcGFjZTogc3RyaW5nKSB7XG4gIGNvbnN0IHN0YXRlID0gY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKHtcbiAgICBzY2hlbWFzOiB7IC4uLnN0YXRlLnNjaGVtYXMsIFtuYW1lc3BhY2VdOiB0cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYSB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGRlZmluZXMgYSBjb25maWd1cmF0aW9uIHNjaGVtYSBmb3IgYW4gZXh0ZW5zaW9uLiBXaGVuIGEgc2NoZW1hIGlzIGRlZmluZWRcbiAqIGZvciBhbiBleHRlbnNpb24sIHRoYXQgZXh0ZW5zaW9uIHdpbGwgcmVjZWl2ZSB0aGUgY29uZmlndXJhdGlvbiBjb3JyZXNwb25kaW5nXG4gKiB0byB0aGF0IHNjaGVtYSwgcmF0aGVyIHRoYW4gdGhlIGNvbmZpZ3VyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgbW9kdWxlXG4gKiBpbiB3aGljaCBpdCBpcyBkZWZpbmVkLlxuICpcbiAqIFRoZSBzY2hlbWEgdGVsbHMgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGhvdyB0aGUgbW9kdWxlIGNhbiBiZSBjb25maWd1cmVkLlxuICogSXQgc3BlY2lmaWVzIHdoYXQgbWFrZXMgY29uZmlndXJhdGlvbiB2YWxpZCBvciBpbnZhbGlkLlxuICpcbiAqIFNlZSBbQ29uZmlndXJhdGlvbiBTeXN0ZW1dKGh0dHBzOi8vbzMtZG9jcy5vcGVubXJzLm9yZy9kb2NzL2NvbmZpZ3VyYXRpb24tc3lzdGVtKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGVmaW5pbmcgYSBjb25maWcgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb25OYW1lIE5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGUgc2NoZW1hIGlzIGJlaW5nIGRlZmluZWQgZm9yLlxuICogICBTaG91bGQgbWF0Y2ggdGhlIGBuYW1lYCBvZiBvbmUgb2YgdGhlIGBleHRlbnNpb25zYCBlbnRyaWVzIGJlaW5nIHJldHVybmVkXG4gKiAgIGJ5IGBzZXR1cE9wZW5NUlNgLlxuICogQHBhcmFtIHNjaGVtYSBUaGUgY29uZmlnIHNjaGVtYSBmb3IgdGhlIGV4dGVuc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXh0ZW5zaW9uQ29uZmlnU2NoZW1hKGV4dGVuc2lvbk5hbWU6IHN0cmluZywgc2NoZW1hOiBDb25maWdTY2hlbWEpIHtcbiAgdmFsaWRhdGVDb25maWdTY2hlbWEoZXh0ZW5zaW9uTmFtZSwgc2NoZW1hKTtcbiAgY29uc3QgZW5oYW5jZWRTY2hlbWEgPSBtZXJnZURlZXBSaWdodChzY2hlbWEsIGltcGxpY2l0Q29uZmlnU2NoZW1hKSBhcyBDb25maWdTY2hlbWE7XG5cbiAgY29uc3Qgc3RhdGUgPSBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCk7XG4gIGlmIChzdGF0ZS5zY2hlbWFzW2V4dGVuc2lvbk5hbWVdKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBDb25maWcgc2NoZW1hIGZvciBleHRlbnNpb24gJHtleHRlbnNpb25OYW1lfSBhbHJlYWR5IGV4aXN0cy4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGV4dGVuc2lvbnMgd2l0aCB0aGlzIHNhbWUgbmFtZSwgb25lIHdpbGwgcHJvYmFibHkgY3Jhc2guYCxcbiAgICApO1xuICB9XG5cbiAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSh7XG4gICAgc2NoZW1hczogeyAuLi5zdGF0ZS5zY2hlbWFzLCBbZXh0ZW5zaW9uTmFtZV06IGVuaGFuY2VkU2NoZW1hIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZShjb25maWc6IENvbmZpZywgc291cmNlTmFtZSA9ICdwcm92aWRlZCcpIHtcbiAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgLi4uc3RhdGUsXG4gICAgcHJvdmlkZWRDb25maWdzOiBbLi4uc3RhdGUucHJvdmlkZWRDb25maWdzLCB7IHNvdXJjZTogc291cmNlTmFtZSwgY29uZmlnIH1dLFxuICB9KSk7XG59XG5cbi8qKlxuICogQSBwcm9taXNlLWJhc2VkIHdheSB0byBhY2Nlc3MgdGhlIGNvbmZpZyBhcyBzb29uIGFzIGl0IGlzIGZ1bGx5IGxvYWRlZC5cbiAqIElmIGl0IGlzIGFscmVhZHkgbG9hZGVkLCByZXNvbHZlcyB0aGUgY29uZmlnIGluIGl0cyBwcmVzZW50IHN0YXRlLlxuICpcbiAqIFRoaXMgaXMgYSB1c2VmdWwgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZ2V0IHRoZSBjb25maWcgaW4gdGhlIGNvdXJzZVxuICogb2YgdGhlIGV4ZWN1dGlvbiBvZiBhIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBtb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgZm9yIHdoaWNoIHRvIGxvb2sgdXAgdGhlIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnPFQgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+Pihtb2R1bGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgc3RvcmUgPSBnZXRDb25maWdTdG9yZShtb2R1bGVOYW1lKTtcbiAgICBmdW5jdGlvbiB1cGRhdGUoc3RhdGU6IENvbmZpZ1N0b3JlKSB7XG4gICAgICBpZiAoc3RhdGUubG9hZGVkICYmIHN0YXRlLmNvbmZpZykge1xuICAgICAgICBjb25zdCBjb25maWcgPSBvbWl0KFsnRGlzcGxheSBjb25kaXRpb25zJywgJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcyddLCBzdGF0ZS5jb25maWcpO1xuICAgICAgICByZXNvbHZlKGNvbmZpZyBhcyBUKTtcbiAgICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlKHN0b3JlLmdldFN0YXRlKCkpO1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHVwZGF0ZSk7XG4gIH0pO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNsYXRpb25PdmVycmlkZXMobW9kdWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxPYmplY3Q+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPE9iamVjdD4oKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzdG9yZSA9IGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpO1xuICAgIGZ1bmN0aW9uIHVwZGF0ZShzdGF0ZTogQ29uZmlnU3RvcmUpIHtcbiAgICAgIGlmIChzdGF0ZS50cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZCAmJiBzdGF0ZS5jb25maWcpIHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25PdmVycmlkZXMgPSBzdGF0ZS5jb25maWdbJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcyddID8/IHt9O1xuICAgICAgICByZXNvbHZlKHRyYW5zbGF0aW9uT3ZlcnJpZGVzKTtcbiAgICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlKHN0b3JlLmdldFN0YXRlKCkpO1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHVwZGF0ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGFuZCBpbnRlcnBvbGF0ZSBkZWZhdWx0cyBmb3IgYHByb3ZpZGVkQ29uZmlnYCBhY2NvcmRpbmcgdG8gYHNjaGVtYWBcbiAqXG4gKiBAcGFyYW0gc2NoZW1hICBhIGNvbmZpZ3VyYXRpb24gc2NoZW1hXG4gKiBAcGFyYW0gcHJvdmlkZWRDb25maWcgIGFuIG9iamVjdCBvZiBjb25maWcgdmFsdWVzICh3aXRob3V0IHRoZSB0b3AtbGV2ZWwgbW9kdWxlIG5hbWUpXG4gKiBAcGFyYW0ga2V5UGF0aENvbnRleHQgIGEgZG90LWRlcGFyYXRlZCBzdHJpbmcgd2hpY2ggaGVscHMgdGhlIHVzZXIgZmlndXJlIG91dCB3aGVyZVxuICogICAgIHRoZSBwcm92aWRlZCBjb25maWcgY2FtZSBmcm9tXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb25maWcoc2NoZW1hOiBDb25maWdTY2hlbWEsIHByb3ZpZGVkQ29uZmlnOiBDb25maWdPYmplY3QsIGtleVBhdGhDb250ZXh0OiBzdHJpbmcpIHtcbiAgdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hLCBwcm92aWRlZENvbmZpZywga2V5UGF0aENvbnRleHQpO1xuICBjb25zdCBjb25maWcgPSBzZXREZWZhdWx0cyhzY2hlbWEsIHByb3ZpZGVkQ29uZmlnKTtcbiAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWEsIGNvbmZpZywga2V5UGF0aENvbnRleHQpO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKlxuICogSGVscGVyIGZ1bmN0aW9uc1xuICpcbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFuIGV4dGVuc2lvbi4gVGhpcyBjb25maWd1cmF0aW9uIGlzIHNwZWNpZmljXG4gKiB0byB0aGUgc2xvdCBpbiB3aGljaCBpdCBpcyBtb3VudGVkLCBhbmQgaXRzIElEIHdpdGhpbiB0aGF0IHNsb3QuXG4gKlxuICogVGhlIHNjaGVtYSBmb3IgdGhhdCBjb25maWd1cmF0aW9uIGlzIHRoZSBleHRlbnNpb24gc2NoZW1hLiBJZiBubyBleHRlbnNpb25cbiAqIHNjaGVtYSBoYXMgYmVlbiBwcm92aWRlZCwgdGhlIHNjaGVtYSB1c2VkIGlzIHRoZSBzY2hlbWEgb2YgdGhlIG1vZHVsZSBpblxuICogd2hpY2ggdGhlIGV4dGVuc2lvbiBpcyBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSBzbG90TW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdoaWNoIGRlZmluZXMgdGhlIGV4dGVuc2lvbiBzbG90XG4gKiBAcGFyYW0gZXh0ZW5zaW9uTW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdoaWNoIGRlZmluZXMgdGhlIGV4dGVuc2lvbiAoYW5kIHRoZXJlZm9yZSB0aGUgY29uZmlnIHNjaGVtYSlcbiAqIEBwYXJhbSBzbG90TmFtZSBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHNsb3Qgd2hlcmUgdGhlIGV4dGVuc2lvbiBpcyBtb3VudGVkXG4gKiBAcGFyYW0gZXh0ZW5zaW9uSWQgVGhlIElEIG9mIHRoZSBleHRlbnNpb24gaW4gaXRzIHNsb3RcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUV4dGVuc2lvbkNvbmZpZyhcbiAgc2xvdE1vZHVsZU5hbWU6IHN0cmluZyxcbiAgZXh0ZW5zaW9uTW9kdWxlTmFtZTogc3RyaW5nLFxuICBzbG90TmFtZTogc3RyaW5nLFxuICBleHRlbnNpb25JZDogc3RyaW5nLFxuICBjb25maWdTdGF0ZTogQ29uZmlnSW50ZXJuYWxTdG9yZSxcbiAgdGVtcENvbmZpZ1N0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSxcbikge1xuICBjb25zdCBleHRlbnNpb25OYW1lID0gZ2V0RXh0ZW5zaW9uTmFtZUZyb21JZChleHRlbnNpb25JZCk7XG4gIGNvbnN0IGV4dGVuc2lvbkNvbmZpZ1NjaGVtYSA9IGNvbmZpZ1N0YXRlLnNjaGVtYXNbZXh0ZW5zaW9uTmFtZV07XG4gIGNvbnN0IG5hbWVPZlNjaGVtYVNvdXJjZSA9IGV4dGVuc2lvbkNvbmZpZ1NjaGVtYSA/IGV4dGVuc2lvbk5hbWUgOiBleHRlbnNpb25Nb2R1bGVOYW1lO1xuICBjb25zdCBwcm92aWRlZENvbmZpZ3MgPSBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gIGNvbnN0IHNsb3RNb2R1bGVDb25maWcgPSBtZXJnZUNvbmZpZ3NGb3Ioc2xvdE1vZHVsZU5hbWUsIHByb3ZpZGVkQ29uZmlncyk7XG4gIGNvbnN0IGNvbmZpZ092ZXJyaWRlID0gc2xvdE1vZHVsZUNvbmZpZz8uZXh0ZW5zaW9uU2xvdHM/LltzbG90TmFtZV0/LmNvbmZpZ3VyZT8uW2V4dGVuc2lvbklkXSA/PyB7fTtcbiAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnID0gbWVyZ2VDb25maWdzRm9yKG5hbWVPZlNjaGVtYVNvdXJjZSwgcHJvdmlkZWRDb25maWdzKTtcbiAgY29uc3QgY29tYmluZWRDb25maWcgPSBtZXJnZUNvbmZpZ3MoW2V4dGVuc2lvbkNvbmZpZywgY29uZmlnT3ZlcnJpZGVdKTtcbiAgY29uc3Qgc2NoZW1hID0gZXh0ZW5zaW9uQ29uZmlnU2NoZW1hID8/IGNvbmZpZ1N0YXRlLnNjaGVtYXNbZXh0ZW5zaW9uTW9kdWxlTmFtZV07XG4gIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYSwgY29tYmluZWRDb25maWcsIG5hbWVPZlNjaGVtYVNvdXJjZSk7XG4gIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKHNjaGVtYSwgY29tYmluZWRDb25maWcpO1xuICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBuYW1lT2ZTY2hlbWFTb3VyY2UpO1xuICBkZWxldGUgY29uZmlnLmV4dGVuc2lvblNsb3RzO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG5mdW5jdGlvbiBnZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnKFxuICBjb25maWdTdGF0ZTogQ29uZmlnSW50ZXJuYWxTdG9yZSxcbiAgdGVtcENvbmZpZ1N0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSxcbik6IFJlY29yZDxzdHJpbmcsIENvbmZpZz4ge1xuICBsZXQgcmVzdWx0ID0gZ2V0U2NoZW1hV2l0aFZhbHVlc0FuZFNvdXJjZXMoY2xvbmUoY29uZmlnU3RhdGUuc2NoZW1hcykpO1xuICBjb25zdCBjb25maWdzQW5kU291cmNlcyA9IFtcbiAgICAuLi5jb25maWdTdGF0ZS5wcm92aWRlZENvbmZpZ3MubWFwKChjKSA9PiBbYy5jb25maWcsIGMuc291cmNlXSksXG4gICAgW3RlbXBDb25maWdTdGF0ZS5jb25maWcsICd0ZW1wb3JhcnkgY29uZmlnJ10sXG4gIF0gYXMgQXJyYXk8W0NvbmZpZywgc3RyaW5nXT47XG4gIGZvciAobGV0IFtjb25maWcsIHNvdXJjZV0gb2YgY29uZmlnc0FuZFNvdXJjZXMpIHtcbiAgICByZXN1bHQgPSBtZXJnZUNvbmZpZ3MoW3Jlc3VsdCwgY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUoY29uZmlnLCBzb3VyY2UpXSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0U2NoZW1hV2l0aFZhbHVlc0FuZFNvdXJjZXMoc2NoZW1hKSB7XG4gIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ19kZWZhdWx0JykpIHtcbiAgICByZXR1cm4geyAuLi5zY2hlbWEsIF92YWx1ZTogc2NoZW1hLl9kZWZhdWx0LCBfc291cmNlOiAnZGVmYXVsdCcgfTtcbiAgfSBlbHNlIGlmIChpc09yZGluYXJ5T2JqZWN0KHNjaGVtYSkpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc2NoZW1hKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICBvYmpba2V5XSA9IGdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzKHNjaGVtYVtrZXldKTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30pO1xuICB9IGVsc2Uge1xuICAgIC8vIGF0IHRoaXMgcG9pbnQsIHRoZSBzY2hlbWEgaXMgYmFkIGFuZCBhbiBlcnJvciB3aWxsIGhhdmUgYmVlbiBsb2dnZWQgZHVyaW5nIHNjaGVtYSB2YWxpZGF0aW9uXG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlKGNvbmZpZzogQ29uZmlnT2JqZWN0LCBzb3VyY2U6IHN0cmluZykge1xuICBpZiAoaXNPcmRpbmFyeU9iamVjdChjb25maWcpKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgb2JqW2tleV0gPSBjcmVhdGVWYWx1ZXNBbmRTb3VyY2VzVHJlZShjb25maWdba2V5XSwgc291cmNlKTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IF92YWx1ZTogY29uZmlnLCBfc291cmNlOiBzb3VyY2UgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFeHRlbnNpb25TbG90Q29uZmlncyhcbiAgY29uZmlnU3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsXG4gIHRlbXBDb25maWdTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUsXG4pOiBSZWNvcmQ8c3RyaW5nLCBFeHRlbnNpb25TbG90Q29uZmlnT2JqZWN0PiB7XG4gIGNvbnN0IGFsbENvbmZpZ3MgPSBtZXJnZUNvbmZpZ3MoZ2V0UHJvdmlkZWRDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpKTtcbiAgY29uc3Qgc2xvdENvbmZpZ1Blck1vZHVsZTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRXh0ZW5zaW9uU2xvdENvbmZpZz4+ID0gT2JqZWN0LmtleXMoYWxsQ29uZmlncykucmVkdWNlKFxuICAgIChvYmosIGtleSkgPT4ge1xuICAgICAgaWYgKGFsbENvbmZpZ3Nba2V5XT8uZXh0ZW5zaW9uU2xvdHMpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhbGxDb25maWdzW2tleV0/LmV4dGVuc2lvblNsb3RzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIHt9LFxuICApO1xuICB2YWxpZGF0ZUFsbEV4dGVuc2lvblNsb3RDb25maWdzKHNsb3RDb25maWdQZXJNb2R1bGUpO1xuICBjb25zdCBzbG90Q29uZmlncyA9IE9iamVjdC5rZXlzKHNsb3RDb25maWdQZXJNb2R1bGUpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICBvYmogPSB7IC4uLm9iaiwgLi4uc2xvdENvbmZpZ1Blck1vZHVsZVtrZXldIH07XG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xuICByZXR1cm4gc2xvdENvbmZpZ3M7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQWxsRXh0ZW5zaW9uU2xvdENvbmZpZ3Moc2xvdENvbmZpZ1Blck1vZHVsZTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRXh0ZW5zaW9uU2xvdENvbmZpZz4+KSB7XG4gIGZvciAobGV0IFttb2R1bGVOYW1lLCBjb25maWdCeVNsb3ROYW1lXSBvZiBPYmplY3QuZW50cmllcyhzbG90Q29uZmlnUGVyTW9kdWxlKSkge1xuICAgIGZvciAobGV0IFtzbG90TmFtZSwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWdCeVNsb3ROYW1lKSkge1xuICAgICAgdmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnKGNvbmZpZywgbW9kdWxlTmFtZSwgc2xvdE5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4dGVuc2lvblNsb3RDb25maWcoY29uZmlnOiBFeHRlbnNpb25TbG90Q29uZmlnLCBtb2R1bGVOYW1lOiBzdHJpbmcsIHNsb3ROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qga2V5UGF0aCA9IGAke21vZHVsZU5hbWV9LmV4dGVuc2lvblNsb3RzLiR7c2xvdE5hbWV9YDtcbiAgY29uc3QgZXJyb3JQcmVmaXggPSBgRXh0ZW5zaW9uIHNsb3QgY29uZmlnICcke2tleVBhdGh9J2A7XG4gIGNvbnN0IGludmFsaWRLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKS5maWx0ZXIoKGspID0+ICFbJ2FkZCcsICdyZW1vdmUnLCAnb3JkZXInLCAnY29uZmlndXJlJ10uaW5jbHVkZXMoaykpO1xuICBpZiAoaW52YWxpZEtleXMubGVuZ3RoKSB7XG4gICAgbG9nRXJyb3Ioa2V5UGF0aCwgZXJyb3JQcmVmaXggKyBgJyBjb250YWlucyBpbnZhbGlkIGtleXMgJyR7aW52YWxpZEtleXMuam9pbihcIicsICdcIil9J2ApO1xuICB9XG4gIGlmIChjb25maWcuYWRkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5hZGQpIHx8ICFjb25maWcuYWRkLmV2ZXJ5KChuKSA9PiB0eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAuYWRkJyBpcyBpbnZhbGlkLiBNdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MgKGV4dGVuc2lvbiBJRHMpYCk7XG4gICAgfVxuICB9XG4gIGlmIChjb25maWcucmVtb3ZlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5yZW1vdmUpIHx8ICFjb25maWcucmVtb3ZlLmV2ZXJ5KChuKSA9PiB0eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAucmVtb3ZlJyBpcyBpbnZhbGlkLiBNdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MgKGV4dGVuc2lvbiBJRHMpYCk7XG4gICAgfVxuICB9XG4gIGlmIChjb25maWcub3JkZXIpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLm9yZGVyKSB8fCAhY29uZmlnLm9yZGVyLmV2ZXJ5KChuKSA9PiB0eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAub3JkZXInIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbmZpZy5jb25maWd1cmUpIHtcbiAgICBpZiAoIWlzT3JkaW5hcnlPYmplY3QoY29uZmlnLmNvbmZpZ3VyZSkpIHtcbiAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYC5jb25maWd1cmUnIGlzIGludmFsaWQuIE11c3QgYmUgYW4gb2JqZWN0IHdpdGggZXh0ZW5zaW9uIElEcyBmb3Iga2V5c2ApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsIHRlbXBDb25maWdTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUpOiBBcnJheTxDb25maWc+IHtcbiAgcmV0dXJuIFsuLi5jb25maWdTdGF0ZS5wcm92aWRlZENvbmZpZ3MubWFwKChjKSA9PiBjLmNvbmZpZyksIHRlbXBDb25maWdTdGF0ZS5jb25maWddO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgY29uZmlnIHNjaGVtYSBmb3IgYSBtb2R1bGUuIFNpbmNlIHByb2JsZW1zIGlkZW50aWZpZWQgaGVyZSBhcmUgcHJvZ3JhbW1pbmcgZXJyb3JzXG4gKiB0aGF0IGhvcGVmdWxseSB3aWxsIGJlIGNhdWdodCBkdXJpbmcgZGV2ZWxvcG1lbnQsIHRoaXMgZnVuY3Rpb24gbG9ncyBlcnJvcnMgdG8gdGhlIGNvbnNvbGUgZGlyZWN0bHk7XG4gKiBpdCdzIGZpbmUgaWYgd2Ugc3BhbSB0aGUgdXNlciB3aXRoIHRoZXNlIGVycm9ycy5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb25maWdTY2hlbWEobW9kdWxlTmFtZTogc3RyaW5nLCBzY2hlbWE6IENvbmZpZ1NjaGVtYSwga2V5UGF0aCA9ICcnKSB7XG4gIGNvbnN0IHVwZGF0ZU1lc3NhZ2UgPSBgUGxlYXNlIHZlcmlmeSB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgbGF0ZXN0IHZlcnNpb24gYW5kLCBpZiBzbywgYWxlcnQgdGhlIG1haW50YWluZXIuYDtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpLmZpbHRlcigoaykgPT4gIWsuc3RhcnRzV2l0aCgnXycpKSkge1xuICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArIChrZXlQYXRoICYmICcuJykgKyBrZXk7XG4gICAgY29uc3Qgc2NoZW1hUGFydCA9IHNjaGVtYVtrZXldIGFzIENvbmZpZ1NjaGVtYTtcblxuICAgIGlmICh0aGlzS2V5UGF0aCA9PT0gJ0Rpc3BsYXkgY29uZGl0aW9ucycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGAke21vZHVsZU5hbWV9IGRlY2xhcmVzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gY2FsbGVkIFwiRGlzcGxheSBjb25kaXRpb25zXCI7IHRoZSBcIkRpc3BsYXkgY29uZGl0aW9uc1wiIG9wdGlvbiBpcyBhIHJlc2VydmVkIG5hbWUuICR7dXBkYXRlTWVzc2FnZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpc0tleVBhdGggPT09ICdUcmFuc2xhdGlvbiBvdmVycmlkZXMnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgJHttb2R1bGVOYW1lfSBkZWNsYXJlcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbGxlZCBcIlRyYW5zbGF0aW9uIG92ZXJyaWRlc1wiOyB0aGUgXCJUcmFuc2xhdGlvbiBvdmVycmlkZXNcIiBvcHRpb24gaXMgYSByZXNlcnZlZCBuYW1lLiAke3VwZGF0ZU1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc09yZGluYXJ5T2JqZWN0KHNjaGVtYVBhcnQpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfWApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpKSB7XG4gICAgICAvLyByZWN1cnNlIGZvciBuZXN0ZWQgY29uZmlnIGtleXNcbiAgICAgIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYVBhcnQsIHRoaXNLZXlQYXRoKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50cyA9IHNjaGVtYVBhcnQuX2VsZW1lbnRzO1xuICAgIGlmIChoYXNPYmplY3RTY2hlbWEoZWxlbWVudHMpKSB7XG4gICAgICB2YWxpZGF0ZUNvbmZpZ1NjaGVtYShtb2R1bGVOYW1lLCBlbGVtZW50cywgdGhpc0tleVBhdGggKyAnLl9lbGVtZW50cycpO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWFQYXJ0Ll92YWxpZGF0b3JzKSB7XG4gICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2Ygc2NoZW1hUGFydC5fdmFsaWRhdG9ycykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgJHttb2R1bGVOYW1lfSBoYXMgaW52YWxpZCB2YWxpZGF0b3IgZm9yIGtleSAnJHt0aGlzS2V5UGF0aH0nICR7dXBkYXRlTWVzc2FnZX0uYCArXG4gICAgICAgICAgICAgIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHZhbGlkYXRvcnMgbXVzdCBiZSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gZWl0aGVyIGAgK1xuICAgICAgICAgICAgICBgdW5kZWZpbmVkIG9yIGFuIGVycm9yIHN0cmluZy4gUmVjZWl2ZWQgJHt2YWxpZGF0b3J9LmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHNjaGVtYVBhcnQuX3R5cGU7XG4gICAgaWYgKHZhbHVlVHlwZSAmJiAhT2JqZWN0LnZhbHVlcyhUeXBlKS5pbmNsdWRlcyh2YWx1ZVR5cGUpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgJHttb2R1bGVOYW1lfSBoYXMgaW52YWxpZCB0eXBlIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9JyAke3VwZGF0ZU1lc3NhZ2V9LmAgK1xuICAgICAgICAgIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHRoZSBhbGxvd2VkIHR5cGVzIGFyZSAke09iamVjdC52YWx1ZXMoVHlwZSkuam9pbignLCAnKX0uIGAgK1xuICAgICAgICAgIGBSZWNlaXZlZCAnJHt2YWx1ZVR5cGV9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIE9iamVjdC5rZXlzKHNjaGVtYVBhcnQpLmV2ZXJ5KChrKSA9PiBbJ19kZXNjcmlwdGlvbicsICdfdmFsaWRhdG9ycycsICdfZWxlbWVudHMnLCAnX3R5cGUnXS5pbmNsdWRlcyhrKSkgJiZcbiAgICAgICFrZXlQYXRoLmluY2x1ZGVzKCcuX2VsZW1lbnRzJylcbiAgICApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfS5gICtcbiAgICAgICAgICBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiBhbGwgY29uZmlnIGVsZW1lbnRzIG11c3QgaGF2ZSBhIGRlZmF1bHQuIGAgK1xuICAgICAgICAgIGBSZWNlaXZlZCAke0pTT04uc3RyaW5naWZ5KHNjaGVtYVBhcnQpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50cyAmJiB2YWx1ZVR5cGUgJiYgIVtUeXBlLkFycmF5LCBUeXBlLk9iamVjdF0uaW5jbHVkZXModmFsdWVUeXBlKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYCR7bW9kdWxlTmFtZX0gaGFzIGJhZCBjb25maWcgc2NoZW1hIGRlZmluaXRpb24gZm9yIGtleSAnJHt0aGlzS2V5UGF0aH0nLiAke3VwZGF0ZU1lc3NhZ2V9LmAgK1xuICAgICAgICAgIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHRoZSAnZWxlbWVudHMnIGtleSBvbmx5IHdvcmtzIHdpdGggJ190eXBlJyBlcXVhbCB0byAnQXJyYXknIG9yICdPYmplY3QnLiBgICtcbiAgICAgICAgICBgUmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZVR5cGUpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDb25maWdGb3JNb2R1bGUoXG4gIG1vZHVsZU5hbWU6IHN0cmluZyxcbiAgY29uZmlnU3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsXG4gIHRlbXBDb25maWdTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUsXG4pOiBDb25maWdPYmplY3Qge1xuICBjb25zdCBzY2hlbWEgPSBjb25maWdTdGF0ZS5zY2hlbWFzW21vZHVsZU5hbWVdO1xuICBjb25zdCBpbnB1dENvbmZpZyA9IG1lcmdlQ29uZmlnc0Zvcihtb2R1bGVOYW1lLCBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkpO1xuICB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIGlucHV0Q29uZmlnLCBtb2R1bGVOYW1lKTtcbiAgY29uc3QgY29uZmlnID0gc2V0RGVmYXVsdHMoc2NoZW1hLCBpbnB1dENvbmZpZyk7XG4gIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLCBjb25maWcsIG1vZHVsZU5hbWUpO1xuICBkZWxldGUgY29uZmlnLmV4dGVuc2lvblNsb3RzO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG5mdW5jdGlvbiBnZXRDb25maWdGb3JNb2R1bGVJbXBsaWNpdFNjaGVtYShcbiAgbW9kdWxlTmFtZTogc3RyaW5nLFxuICBjb25maWdTdGF0ZTogQ29uZmlnSW50ZXJuYWxTdG9yZSxcbiAgdGVtcENvbmZpZ1N0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSxcbik6IENvbmZpZ09iamVjdCB7XG4gIGNvbnN0IGlucHV0Q29uZmlnID0gbWVyZ2VDb25maWdzRm9yKG1vZHVsZU5hbWUsIGdldFByb3ZpZGVkQ29uZmlncyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSk7XG4gIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKGltcGxpY2l0Q29uZmlnU2NoZW1hLCBpbnB1dENvbmZpZyk7XG4gIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoaW1wbGljaXRDb25maWdTY2hlbWEsIGNvbmZpZywgbW9kdWxlTmFtZSk7XG4gIGRlbGV0ZSBjb25maWcuZXh0ZW5zaW9uU2xvdHM7XG4gIHJldHVybiBjb25maWc7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQ29uZmlnc0Zvcihtb2R1bGVOYW1lOiBzdHJpbmcsIGFsbENvbmZpZ3M6IEFycmF5PENvbmZpZz4pOiBDb25maWdPYmplY3Qge1xuICBjb25zdCBhbGxDb25maWdzRm9yTW9kdWxlID0gYWxsQ29uZmlncy5tYXAoKHsgW21vZHVsZU5hbWVdOiBjIH0pID0+IGMpLmZpbHRlcigoYykgPT4gISFjKTtcblxuICByZXR1cm4gbWVyZ2VDb25maWdzKGFsbENvbmZpZ3NGb3JNb2R1bGUpO1xufVxuXG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3MoY29uZmlnczogQXJyYXk8Q29uZmlnPikge1xuICBjb25zdCBtZXJnZURlZXBBbGwgPSByZWR1Y2UobWVyZ2VEZWVwUmlnaHQpO1xuICByZXR1cm4gbWVyZ2VEZWVwQWxsKHt9LCBjb25maWdzKSBhcyBDb25maWc7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgY2hlY2sgdGhlIHByb3ZpZGVkIGNvbmZpZyB0cmVlIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbFxuICogb2YgdGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgZXhpc3QgaW4gdGhlIHNjaGVtYSwgYW5kIHRoYXQgdHlwZXMgYXJlXG4gKiBjb3JyZWN0LiBEb2VzIG5vdCBydW4gdmFsaWRhdG9ycyB5ZXQsIHNpbmNlIHRob3NlIHdpbGwgYmUgcnVuIG9uXG4gKiB0aGUgY29uZmlnIHdpdGggdGhlIGRlZmF1bHRzIGZpbGxlZCBpbi5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hOiBDb25maWdTY2hlbWEsIGNvbmZpZzogQ29uZmlnT2JqZWN0LCBrZXlQYXRoID0gJycpIHtcbiAgLy8gdmFsaWRhdGUgZWFjaCBjb25zdGl0dWVudCBlbGVtZW50XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArICcuJyArIGtleTtcbiAgICBjb25zdCBzY2hlbWFQYXJ0ID0gc2NoZW1hW2tleV0gYXMgQ29uZmlnU2NoZW1hO1xuXG4gICAgaWYgKCFzY2hlbWEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYgKCEoa2V5ID09PSAnZXh0ZW5zaW9uU2xvdHMnICYmIGtleVBhdGggIT09ICcnKSkge1xuICAgICAgICBsb2dFcnJvcih0aGlzS2V5UGF0aCwgYFVua25vd24gY29uZmlnIGtleSAnJHt0aGlzS2V5UGF0aH0nIHByb3ZpZGVkLiBJZ25vcmluZy5gKTtcbiAgICAgIH1cblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIHRoaXNLZXlQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUJyYW5jaFN0cnVjdHVyZShzY2hlbWFQYXJ0OiBDb25maWdTY2hlbWEsIHZhbHVlOiBhbnksIGtleVBhdGg6IHN0cmluZykge1xuICBjaGVja1R5cGUoa2V5UGF0aCwgc2NoZW1hUGFydC5fdHlwZSwgdmFsdWUpO1xuXG4gIGlmIChpc09yZGluYXJ5T2JqZWN0KHZhbHVlKSkge1xuICAgIGlmIChzY2hlbWFQYXJ0Ll90eXBlID09PSBUeXBlLk9iamVjdCkge1xuICAgICAgLy8gdmFsaWRhdGUgYXMgZnJlZWZvcm0gb2JqZWN0XG4gICAgICB2YWxpZGF0ZUZyZWVmb3JtT2JqZWN0U3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKTtcbiAgICB9IGVsc2UgaWYgKCEoc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSB8fCBzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfdHlwZScpKSkge1xuICAgICAgLy8gdmFsaWRhdGUgYXMgbm9ybWFsIG5lc3RlZCBjb25maWdcbiAgICAgIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNjaGVtYVBhcnQuX3R5cGUgPT09IFR5cGUuQXJyYXkpIHtcbiAgICAgIHZhbGlkYXRlQXJyYXlTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIGtleVBhdGgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZyZWVmb3JtT2JqZWN0U3RydWN0dXJlKGZyZWVmb3JtT2JqZWN0U2NoZW1hOiBDb25maWdTY2hlbWEsIGNvbmZpZzogQ29uZmlnT2JqZWN0LCBrZXlQYXRoOiBzdHJpbmcpIHtcbiAgaWYgKGZyZWVmb3JtT2JqZWN0U2NoZW1hLl9lbGVtZW50cykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICB2YWxpZGF0ZVN0cnVjdHVyZShmcmVlZm9ybU9iamVjdFNjaGVtYS5fZWxlbWVudHMsIHZhbHVlLCBgJHtrZXlQYXRofS4ke2tleX1gKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBcnJheVN0cnVjdHVyZShhcnJheVNjaGVtYTogQ29uZmlnU2NoZW1hLCB2YWx1ZTogQ29uZmlnT2JqZWN0LCBrZXlQYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgdmFsaWRhdGVkQXNBcnJheSA9IGNoZWNrVHlwZShrZXlQYXRoLCBUeXBlLkFycmF5LCB2YWx1ZSk7XG4gIGlmICghdmFsaWRhdGVkQXNBcnJheSkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBpZiB0aGVyZSBpcyBhbiBhcnJheSBlbGVtZW50IG9iamVjdCBzY2hlbWEsIHZlcmlmeSB0aGF0IGVsZW1lbnRzIG1hdGNoIGl0XG4gIGlmIChoYXNPYmplY3RTY2hlbWEoYXJyYXlTY2hlbWEuX2VsZW1lbnRzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbGlkYXRlQnJhbmNoU3RydWN0dXJlKGFycmF5U2NoZW1hLl9lbGVtZW50cywgdmFsdWVbaV0sIGAke2tleVBhdGh9WyR7aX1dYCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIGNoZWNrVHlwZShgJHtrZXlQYXRofVske2l9XWAsIGFycmF5U2NoZW1hLl9lbGVtZW50cz8uX3R5cGUsIHZhbHVlW2ldKTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1biBhbGwgdGhlIHZhbGlkYXRvcnMgaW4gdGhlIGNvbmZpZyB0cmVlLiBUaGlzIHNob3VsZCBiZSBydW5cbiAqIG9uIHRoZSBjb25maWcgb2JqZWN0IGFmdGVyIGl0IGhhcyBiZWVuIGZpbGxlZCBpbiB3aXRoIGFsbCB0aGUgZGVmYXVsdHMsIHNpbmNlXG4gKiBoaWdoZXItbGV2ZWwgdmFsaWRhdG9ycyBtYXkgcmVmZXIgdG8gZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hOiBDb25maWdTY2hlbWEsIGNvbmZpZzogQ29uZmlnT2JqZWN0LCBrZXlQYXRoID0gJycpIHtcbiAgLy8gSWYgYCFzY2hlbWFgLCB0aGVyZSBzaG91bGQgaGF2ZSBiZWVuIGEgc3RydWN0dXJhbCB2YWxpZGF0aW9uIGVycm9yIHByaW50ZWQgYWxyZWFkeS5cbiAgaWYgKHNjaGVtYSkge1xuICAgIGlmIChjb25maWcgIT09IHNjaGVtYS5fZGVmYXVsdCkge1xuICAgICAgcnVuVmFsaWRhdG9ycyhrZXlQYXRoLCBzY2hlbWEuX3ZhbGlkYXRvcnMsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgaWYgKGlzT3JkaW5hcnlPYmplY3QoY29uZmlnKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgICAgICBjb25zdCB0aGlzS2V5UGF0aCA9IGtleVBhdGggKyAnLicgKyBrZXk7XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XSBhcyBDb25maWdTY2hlbWE7XG4gICAgICAgIGlmIChzY2hlbWEuX3R5cGUgPT09IFR5cGUuT2JqZWN0ICYmIHNjaGVtYS5fZWxlbWVudHMpIHtcbiAgICAgICAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYS5fZWxlbWVudHMsIHZhbHVlLCB0aGlzS2V5UGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWFQYXJ0LCB2YWx1ZSwgdGhpc0tleVBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZykgJiYgc2NoZW1hLl9lbGVtZW50cykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWEuX2VsZW1lbnRzLCBjb25maWdbaV0sIGAke2tleVBhdGh9WyR7aX1dYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUnVuIHR5cGUgdmFsaWRhdGlvbiBmb3IgdGhlIHZhbHVlLCBsb2dnaW5nIGFueSBlcnJvcnMuXG4gKiBAcmV0dXJucyB0cnVlIGlmIHZhbGlkYXRpb24gcGFzc2VzLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gY2hlY2tUeXBlKGtleVBhdGg6IHN0cmluZywgX3R5cGU6IFR5cGUgfCB1bmRlZmluZWQsIHZhbHVlOiBhbnkpIHtcbiAgaWYgKF90eXBlKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4gPSB7XG4gICAgICBBcnJheTogaXNBcnJheSxcbiAgICAgIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgICAgIENvbmNlcHRVdWlkOiBpc1V1aWQsXG4gICAgICBOdW1iZXI6IGlzTnVtYmVyLFxuICAgICAgT2JqZWN0OiBpc09iamVjdCxcbiAgICAgIFN0cmluZzogaXNTdHJpbmcsXG4gICAgICBVVUlEOiBpc1V1aWQsXG4gICAgICBQZXJzb25BdHRyaWJ1dGVUeXBlVXVpZDogaXNVdWlkLFxuICAgICAgUGF0aWVudElkZW50aWZpZXJUeXBlVXVpZDogaXNVdWlkLFxuICAgIH07XG4gICAgcmV0dXJuIHJ1blZhbGlkYXRvcnMoa2V5UGF0aCwgW3ZhbGlkYXRvcltfdHlwZV1dLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUnVucyB2YWxpZGF0b3JzLCBsb2dnaW5nIGVycm9ycy5cbiAqIEByZXR1cm5zIHRydWUgaWYgYWxsIHBhc3MsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gcnVuVmFsaWRhdG9ycyhrZXlQYXRoOiBzdHJpbmcsIHZhbGlkYXRvcnM6IEFycmF5PEZ1bmN0aW9uPiB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSkge1xuICBsZXQgcmV0dXJuVmFsdWUgPSB0cnVlO1xuICBpZiAodmFsaWRhdG9ycykge1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9ycykge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JSZXN1bHQgPSB2YWxpZGF0b3IodmFsdWUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yUmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gZm9yICR7a2V5UGF0aH06ICR7dmFsaWRhdG9yUmVzdWx0fWBcbiAgICAgICAgICAgICAgOiBgSW52YWxpZCBjb25maWd1cmF0aW9uIHZhbHVlICR7dmFsdWV9IGZvciAke2tleVBhdGh9OiAke3ZhbGlkYXRvclJlc3VsdH1gO1xuICAgICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIG1lc3NhZ2UpO1xuICAgICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBTa2lwcGluZyBpbnZhbGlkIHZhbGlkYXRvciBhdCBcIiR7a2V5UGF0aH1cIi4gRW5jb3VudGVyZWQgZXJyb3JcXG5cXHQke2V9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuLy8gUmVjdXJzaXZlbHkgZmlsbCBpbiB0aGUgY29uZmlnIHdpdGggdmFsdWVzIGZyb20gdGhlIHNjaGVtYS5cbmNvbnN0IHNldERlZmF1bHRzID0gKHNjaGVtYTogQ29uZmlnU2NoZW1hLCBpbnB1dENvbmZpZzogQ29uZmlnKSA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGNsb25lKGlucHV0Q29uZmlnKTtcblxuICBpZiAoIXNjaGVtYSkge1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKSB7XG4gICAgY29uc3QgY29uZmlnUGFydCA9IGNvbmZpZ1trZXldO1xuICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XSBhcyBDb25maWdTY2hlbWE7XG5cbiAgICAvLyBUaGUgYHNjaGVtYVBhcnQgJiZgIGNsYXVzZSBvZiB0aGlzIGBpZmAgc3RhdGVtZW50IHdpbGwgb25seSBmYWlsXG4gICAgLy8gaWYgdGhlIHNjaGVtYSBpcyB2ZXJ5IGludmFsaWQuIEl0IGlzIHRoZXJlIHRvIHByZXZlbnQgdGhlIGFwcCBmcm9tXG4gICAgLy8gY3Jhc2hpbmcgY29tcGxldGVseSwgdGhvdWdoIGl0IHdpbGwgcHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuICAgIC8vIElmIHRoaXMgaGFwcGVucywgdGhlcmUgc2hvdWxkIGJlIGxlZ2libGUgZXJyb3JzIGluIHRoZSBjb25zb2xlIGZyb21cbiAgICAvLyB0aGUgc2NoZW1hIHZhbGlkYXRvci5cbiAgICBpZiAoc2NoZW1hUGFydCAmJiAoc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX3R5cGUnKSB8fCBzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpKSkge1xuICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgc2NoZW1hUGFydCBkZWZpbmVzIGEgY29uZmlnIHZhbHVlLCBzaW5jZSBpdCBoYXNcbiAgICAgIC8vIGEgcHJvcGVydHkgYF90eXBlYCBvciBgX2RlZmF1bHRgLlxuICAgICAgaWYgKCFjb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAoY29uZmlnW2tleV0gYXMgYW55KSA9IHNjaGVtYVBhcnRbJ19kZWZhdWx0J107XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIGFsc28gY2hlY2sgaWYgaXQgaXMgYW4gb2JqZWN0IG9yIGFycmF5IHdpdGggb2JqZWN0IGVsZW1lbnRzLCBpbiB3aGljaCBjYXNlIHdlIHJlY3Vyc2VcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gc2NoZW1hUGFydC5fZWxlbWVudHM7XG5cbiAgICAgIGlmIChjb25maWdQYXJ0ICYmIGhhc09iamVjdFNjaGVtYShlbGVtZW50cykpIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhcnQuX3R5cGUgPT09IFR5cGUuQXJyYXkgJiYgQXJyYXkuaXNBcnJheShjb25maWdQYXJ0KSkge1xuICAgICAgICAgIGNvbnN0IGNvbmZpZ1dpdGhEZWZhdWx0cyA9IGNvbmZpZ1BhcnQubWFwKChjb25mOiBDb25maWcpID0+IHNldERlZmF1bHRzKGVsZW1lbnRzLCBjb25mKSk7XG4gICAgICAgICAgY29uZmlnW2tleV0gPSBjb25maWdXaXRoRGVmYXVsdHM7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hUGFydC5fdHlwZSA9PT0gVHlwZS5PYmplY3QpIHtcbiAgICAgICAgICBmb3IgKGxldCBvYmplY3RLZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnUGFydCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ1BhcnRbb2JqZWN0S2V5XSA9IHNldERlZmF1bHRzKGVsZW1lbnRzLCBjb25maWdQYXJ0W29iamVjdEtleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPcmRpbmFyeU9iamVjdChzY2hlbWFQYXJ0KSkge1xuICAgICAgLy8gU2luY2Ugc2NoZW1hUGFydCBoYXMgbm8gcHJvcGVydHkgXCJfdHlwZVwiLCBpZiBpdCdzIGFuIG9yZGluYXJ5IG9iamVjdFxuICAgICAgLy8gKHVubGlrZSwgaW1wb3J0YW50bHksIHRoZSB2YWxpZGF0b3JzIGFycmF5KSwgd2UgYXNzdW1lIGl0IGlzIGEgcGFyZW50IGNvbmZpZyBwcm9wZXJ0eS5cbiAgICAgIC8vIFdlIHJlY3Vyc2UgdG8gY29uZmlnW2tleV0gYW5kIHNjaGVtYVtrZXldLiBEZWZhdWx0IGNvbmZpZ1trZXldIHRvIHt9LlxuICAgICAgY29uc3Qgc2VsZWN0ZWRDb25maWdQYXJ0ID0gY29uZmlnUGFydCA/PyB7fTtcblxuICAgICAgLy8gVGhlcmUgd2lsbCBoYXZlIGJlZW4gYSB2YWxpZGF0aW9uIGVycm9yIGFscmVhZHkgaWYgY29uZmlnUGFydCBpcyBub3QgYSBwbGFpbiBvYmplY3QuXG4gICAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChzZWxlY3RlZENvbmZpZ1BhcnQpKSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gc2V0RGVmYXVsdHMoc2NoZW1hUGFydCwgc2VsZWN0ZWRDb25maWdQYXJ0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufTtcblxuZnVuY3Rpb24gaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzU2NoZW1hOiBPYmplY3QgfCB1bmRlZmluZWQpOiBlbGVtZW50c1NjaGVtYSBpcyBDb25maWdTY2hlbWEge1xuICByZXR1cm4gKFxuICAgICEhZWxlbWVudHNTY2hlbWEgJiYgT2JqZWN0LmtleXMoZWxlbWVudHNTY2hlbWEpLmZpbHRlcigoZSkgPT4gIVsnX2RlZmF1bHQnLCAnX3ZhbGlkYXRvcnMnXS5pbmNsdWRlcyhlKSkubGVuZ3RoID4gMFxuICApO1xufVxuXG5mdW5jdGlvbiBpc09yZGluYXJ5T2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuLyoqIEtlZXAgdHJhY2sgb2Ygd2hpY2ggdmFsaWRhdGlvbiBlcnJvcnMgd2UgaGF2ZSBkaXNwbGF5ZWQuIEVhY2ggb25lIHNob3VsZCBvbmx5IGJlIGRpc3BsYXllZCBvbmNlLiAqL1xuY29uc3QgZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yKGtleVBhdGg6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gIGNvbnN0IGtleSA9IGAke2tleVBhdGh9Ojo6JHttZXNzYWdlfWA7XG4gIGlmICghZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzLmhhcyhrZXkpKSB7XG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICBkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMuYWRkKGtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxseSwgY29uZmlndXJhdGlvbiBlcnJvcnMgYXJlIG9ubHkgZGlzcGxheWVkIG9uY2UuIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBsaXN0IG9mXG4gKiBkaXNwbGF5ZWQgZXJyb3JzLCBzbyB0aGF0IHRoZXkgd2lsbCBiZSBkaXNwbGF5ZWQgYWdhaW4uXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNvbmZpZ0Vycm9ycyhrZXlQYXRoPzogc3RyaW5nKSB7XG4gIGlmIChrZXlQYXRoKSB7XG4gICAgZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGtleVBhdGgpKSB7XG4gICAgICAgIGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcy5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMuY2xlYXIoKTtcbiAgfVxufVxuXG4vKipcbiAqIENvcGllZCBvdmVyIGZyb20gZXNtLWV4dGVuc2lvbnMuIEl0IHJpZ2h0bHkgYmVsb25ncyB0byB0aGF0IG1vZHVsZSwgYnV0IGVzbS1jb25maWdcbiAqIGNhbm5vdCBkZXBlbmQgb24gZXNtLWV4dGVuc2lvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbk5hbWVGcm9tSWQoZXh0ZW5zaW9uSWQ6IHN0cmluZykge1xuICBjb25zdCBbZXh0ZW5zaW9uTmFtZV0gPSBleHRlbnNpb25JZC5zcGxpdCgnIycpO1xuICByZXR1cm4gZXh0ZW5zaW9uTmFtZTtcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNsYXRpb24gb3ZlcnJpZGVzIHNjaGVtYSBpcyB1c2VkIGluIHRoZSBpbXBsaWNpdCBzY2hlbWEgZ2l2ZW4gdG8gZXZlcnkgbW9kdWxlO1xuICogcGx1cyBhbnkgYWRkaXRpb25hbCB0cmFuc2xhdGlvbiBuYW1lc3BhY2VzIChhdCB0aW1lIG9mIHdyaXRpbmcsIHRoaXMgaXMganVzdCAnY29yZScpLlxuICovXG5jb25zdCB0cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYTogQ29uZmlnU2NoZW1hID0ge1xuICAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJzoge1xuICAgIF9kZXNjcmlwdGlvbjpcbiAgICAgICdQZXItbGFuZ3VhZ2Ugb3ZlcnJpZGVzIGZvciBmcm9udGVuZCB0cmFuc2xhdGlvbnMgc2hvdWxkIGJlIGtleWVkIGJ5IGxhbmd1YWdlIGNvZGUgYW5kIGVhY2ggbGFuZ3VhZ2UgZGljdGlvbmFyeSBjb250YWlucyB0aGUgdHJhbnNsYXRpb24ga2V5IGFuZCB0aGUgZGlzcGxheSB2YWx1ZScsXG4gICAgX3R5cGU6IFR5cGUuT2JqZWN0LFxuICAgIF9kZWZhdWx0OiB7fSxcbiAgICBfdmFsaWRhdG9yczogW1xuICAgICAgdmFsaWRhdG9yKFxuICAgICAgICAobykgPT4gT2JqZWN0LmtleXMobykuZXZlcnkoKGspID0+IC9eW2Etel17MiwzfSgtW0EtWl17MiwzfSk/JC8udGVzdChrKSksXG4gICAgICAgIChvKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFkS2V5cyA9IE9iamVjdC5rZXlzKG8pLmZpbHRlcigoaykgPT4gIS9eW2Etel17MiwzfSgtW0EtWl17MiwzfSk/JC8udGVzdChrKSk7XG4gICAgICAgICAgcmV0dXJuIGBUaGUgJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcycgb2JqZWN0IHNob3VsZCBoYXZlIGxhbmd1YWdlIGNvZGVzIGZvciBrZXlzLiBMYW5ndWFnZSBjb2RlcyBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgdHdvLXRvLXRocmVlIGxldHRlciBsYW5ndWFnZSBjb2RlIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBoeXBoZW4gYW5kIGEgdHdvLXRvLXRocmVlIGxldHRlciBjb3VudHJ5IGNvZGUuIFRoZSBmb2xsb3dpbmcga2V5cyBkbyBub3QgY29uZm9ybTogJHtiYWRLZXlzLmpvaW4oXG4gICAgICAgICAgICAnLCAnLFxuICAgICAgICAgICl9LmA7XG4gICAgICAgIH0sXG4gICAgICApLFxuICAgIF0sXG4gIH0sXG59O1xuXG4vKipcbiAqIFRoZSBpbXBsaWNpdENvbmZpZ1NjaGVtYSBpcyBpbXBsaWNpdGx5IGluY2x1ZGVkIGluIGV2ZXJ5IGNvbmZpZ3VyYXRpb24gc2NoZW1hXG4gKi9cbmNvbnN0IGltcGxpY2l0Q29uZmlnU2NoZW1hOiBDb25maWdTY2hlbWEgPSB7XG4gICdEaXNwbGF5IGNvbmRpdGlvbnMnOiB7XG4gICAgcHJpdmlsZWdlczoge1xuICAgICAgX2Rlc2NyaXB0aW9uOiAnVGhlIHByaXZpbGVnZShzKSB0aGUgdXNlciBtdXN0IGhhdmUgdG8gdXNlIHRoaXMgZXh0ZW5zaW9uJyxcbiAgICAgIF90eXBlOiBUeXBlLkFycmF5LFxuICAgICAgX2RlZmF1bHQ6IFtdLFxuICAgIH0sXG4gIH0sXG4gIC4uLnRyYW5zbGF0aW9uT3ZlcnJpZGVzU2NoZW1hLFxufTtcbiJdLCJuYW1lcyI6WyJjbG9uZSIsInJlZHVjZSIsIm1lcmdlRGVlcFJpZ2h0IiwiZXF1YWxzIiwib21pdCIsIlR5cGUiLCJpc0FycmF5IiwiaXNCb29sZWFuIiwiaXNVdWlkIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzU3RyaW5nIiwidmFsaWRhdG9yIiwiY29uZmlnSW50ZXJuYWxTdG9yZSIsImNvbmZpZ0V4dGVuc2lvblN0b3JlIiwiZ2V0Q29uZmlnU3RvcmUiLCJnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUiLCJpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUiLCJ0ZW1wb3JhcnlDb25maWdTdG9yZSIsImdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUiLCJjb21wdXRlTW9kdWxlQ29uZmlnIiwiZ2V0U3RhdGUiLCJzdWJzY3JpYmUiLCJjb25maWdTdGF0ZSIsInRlbXBDb25maWdTdGF0ZSIsImNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnIiwiY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzIiwiY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MiLCJleHRlbnNpb25TdGF0ZSIsInN0YXRlIiwidGVtcFN0YXRlIiwiT2JqZWN0Iiwia2V5cyIsInNjaGVtYXMiLCJtb2R1bGVOYW1lIiwibW9kdWxlU3RvcmUiLCJtb2R1bGVMb2FkZWQiLCJjb25maWciLCJnZXRDb25maWdGb3JNb2R1bGUiLCJzZXRTdGF0ZSIsInRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkIiwibG9hZGVkIiwiZ2V0Q29uZmlnRm9yTW9kdWxlSW1wbGljaXRTY2hlbWEiLCJzbG90Q29uZmlncyIsImdldEV4dGVuc2lvblNsb3RDb25maWdzIiwibmV3U2xvdFN0b3JlRW50cmllcyIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsIm1hcCIsInNsb3ROYW1lIiwic2xvdFN0b3JlIiwib2xkU3RhdGUiLCJuZXdTdGF0ZSIsInNsb3RzIiwiZ2V0SW1wbGVtZW50ZXJUb29sc0NvbmZpZyIsImNvbmZpZ3MiLCJtb3VudGVkRXh0ZW5zaW9ucyIsImV4dGVuc2lvbiIsImNvbXB1dGVFeHRlbnNpb25Db25maWciLCJzbG90TW9kdWxlTmFtZSIsImV4dGVuc2lvbk1vZHVsZU5hbWUiLCJleHRlbnNpb25JZCIsImRlZmluZUNvbmZpZ1NjaGVtYSIsInNjaGVtYSIsInZhbGlkYXRlQ29uZmlnU2NoZW1hIiwiZW5oYW5jZWRTY2hlbWEiLCJpbXBsaWNpdENvbmZpZ1NjaGVtYSIsInJlZ2lzdGVyTW9kdWxlV2l0aENvbmZpZ1N5c3RlbSIsInJlZ2lzdGVyVHJhbnNsYXRpb25OYW1lc3BhY2UiLCJuYW1lc3BhY2UiLCJ0cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYSIsImRlZmluZUV4dGVuc2lvbkNvbmZpZ1NjaGVtYSIsImV4dGVuc2lvbk5hbWUiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm92aWRlIiwic291cmNlTmFtZSIsInByb3ZpZGVkQ29uZmlncyIsInNvdXJjZSIsImdldENvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwidXBkYXRlIiwidW5zdWJzY3JpYmUiLCJzdG9yZSIsImdldFRyYW5zbGF0aW9uT3ZlcnJpZGVzIiwidHJhbnNsYXRpb25PdmVycmlkZXMiLCJwcm9jZXNzQ29uZmlnIiwicHJvdmlkZWRDb25maWciLCJrZXlQYXRoQ29udGV4dCIsInZhbGlkYXRlU3RydWN0dXJlIiwic2V0RGVmYXVsdHMiLCJydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlIiwic2xvdE1vZHVsZUNvbmZpZyIsImdldEV4dGVuc2lvbk5hbWVGcm9tSWQiLCJleHRlbnNpb25Db25maWdTY2hlbWEiLCJuYW1lT2ZTY2hlbWFTb3VyY2UiLCJnZXRQcm92aWRlZENvbmZpZ3MiLCJtZXJnZUNvbmZpZ3NGb3IiLCJjb25maWdPdmVycmlkZSIsImV4dGVuc2lvblNsb3RzIiwiY29uZmlndXJlIiwiZXh0ZW5zaW9uQ29uZmlnIiwiY29tYmluZWRDb25maWciLCJtZXJnZUNvbmZpZ3MiLCJyZXN1bHQiLCJnZXRTY2hlbWFXaXRoVmFsdWVzQW5kU291cmNlcyIsImNvbmZpZ3NBbmRTb3VyY2VzIiwiYyIsImNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlIiwiaGFzT3duUHJvcGVydHkiLCJfdmFsdWUiLCJfZGVmYXVsdCIsIl9zb3VyY2UiLCJpc09yZGluYXJ5T2JqZWN0Iiwib2JqIiwia2V5IiwiYWxsQ29uZmlncyIsInNsb3RDb25maWdQZXJNb2R1bGUiLCJ2YWxpZGF0ZUFsbEV4dGVuc2lvblNsb3RDb25maWdzIiwiY29uZmlnQnlTbG90TmFtZSIsInZhbGlkYXRlRXh0ZW5zaW9uU2xvdENvbmZpZyIsImtleVBhdGgiLCJlcnJvclByZWZpeCIsImludmFsaWRLZXlzIiwiZmlsdGVyIiwiayIsImluY2x1ZGVzIiwibGVuZ3RoIiwibG9nRXJyb3IiLCJqb2luIiwiYWRkIiwiQXJyYXkiLCJldmVyeSIsIm4iLCJyZW1vdmUiLCJvcmRlciIsInVwZGF0ZU1lc3NhZ2UiLCJ0aGlzS2V5UGF0aCIsInNjaGVtYVBhcnQiLCJlbGVtZW50cyIsIl9lbGVtZW50cyIsImhhc09iamVjdFNjaGVtYSIsIl92YWxpZGF0b3JzIiwidmFsdWVUeXBlIiwiX3R5cGUiLCJ2YWx1ZXMiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRzV2l0aCIsImlucHV0Q29uZmlnIiwiYWxsQ29uZmlnc0Zvck1vZHVsZSIsIm1lcmdlRGVlcEFsbCIsInZhbHVlIiwidmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUiLCJjaGVja1R5cGUiLCJ2YWxpZGF0ZUZyZWVmb3JtT2JqZWN0U3RydWN0dXJlIiwidmFsaWRhdGVBcnJheVN0cnVjdHVyZSIsImZyZWVmb3JtT2JqZWN0U2NoZW1hIiwiYXJyYXlTY2hlbWEiLCJ2YWxpZGF0ZWRBc0FycmF5IiwiaSIsInJ1blZhbGlkYXRvcnMiLCJCb29sZWFuIiwiQ29uY2VwdFV1aWQiLCJOdW1iZXIiLCJTdHJpbmciLCJVVUlEIiwiUGVyc29uQXR0cmlidXRlVHlwZVV1aWQiLCJQYXRpZW50SWRlbnRpZmllclR5cGVVdWlkIiwidmFsaWRhdG9ycyIsInJldHVyblZhbHVlIiwidmFsaWRhdG9yUmVzdWx0IiwibWVzc2FnZSIsImUiLCJjb25maWdQYXJ0IiwiY29uZmlnV2l0aERlZmF1bHRzIiwiY29uZiIsIm9iamVjdEtleSIsInNlbGVjdGVkQ29uZmlnUGFydCIsImVsZW1lbnRzU2NoZW1hIiwiZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzIiwiU2V0IiwiaGFzIiwiY2xlYXJDb25maWdFcnJvcnMiLCJmb3JFYWNoIiwiZGVsZXRlIiwiY2xlYXIiLCJzcGxpdCIsIl9kZXNjcmlwdGlvbiIsIm8iLCJ0ZXN0IiwiYmFkS2V5cyIsInByaXZpbGVnZXMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-config/src/module-config/module-config.ts\n");
528
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clearConfigErrors: () => (/* binding */ clearConfigErrors),\n/* harmony export */ defineConfigSchema: () => (/* binding */ defineConfigSchema),\n/* harmony export */ defineExtensionConfigSchema: () => (/* binding */ defineExtensionConfigSchema),\n/* harmony export */ getConfig: () => (/* binding */ getConfig),\n/* harmony export */ getTranslationOverrides: () => (/* binding */ getTranslationOverrides),\n/* harmony export */ processConfig: () => (/* binding */ processConfig),\n/* harmony export */ provide: () => (/* binding */ provide),\n/* harmony export */ registerModuleWithConfigSystem: () => (/* binding */ registerModuleWithConfigSystem),\n/* harmony export */ registerTranslationNamespace: () => (/* binding */ registerTranslationNamespace)\n/* harmony export */ });\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/equals.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/mergeDeepRight.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/omit.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/clone.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/reduce.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ \"../../framework/esm-config/src/types.ts\");\n/* harmony import */ var _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../validators/type-validators */ \"../../framework/esm-config/src/validators/type-validators.ts\");\n/* harmony import */ var _validators_validator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../validators/validator */ \"../../framework/esm-config/src/validators/validator.ts\");\n/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./state */ \"../../framework/esm-config/src/module-config/state.ts\");\n/** @module @category Config */ function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _array_without_holes(arr) {\n if (Array.isArray(arr)) return _array_like_to_array(arr);\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _non_iterable_spread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _to_consumable_array(arr) {\n return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\n\n\n\n\n\n/**\n * Store setup\n *\n *\n * Set up stores and subscriptions so that inputs get processed appropriately.\n *\n * There are *input* stores and *output* stores. The *input* stores\n * are configInternalStore, temporaryConfigStore, and configExtensionStore. The\n * output stores are set in the `compute...` functions. They are the module\n * config stores, the extension slot config stores (by module), the extension\n * config stores, and the implementer tools config store.\n *\n * This code sets up the subscriptions so that when an input store changes,\n * the correct set of output stores are updated.\n *\n * All `compute...` functions except `computeExtensionConfigs` are pure\n * (or are supposed to be), other than the fact that they all `setState`\n * store values at the end. `computeExtensionConfigs` calls `getGlobalStore`,\n * which creates stores.\n */ computeModuleConfig(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe(function(configState) {\n return computeModuleConfig(configState, _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeModuleConfig(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState);\n});\ncomputeImplementerToolsConfig(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe(function(configState) {\n return computeImplementerToolsConfig(configState, _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeImplementerToolsConfig(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState);\n});\ncomputeExtensionSlotConfigs(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe(function(configState) {\n return computeExtensionSlotConfigs(configState, _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe(function(tempConfigState) {\n return computeExtensionSlotConfigs(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState);\n});\ncomputeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe(function(configState) {\n computeExtensionConfigs(configState, _state__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.subscribe(function(extensionState) {\n computeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), extensionState, _state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe(function(tempConfigState) {\n computeExtensionConfigs(_state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), tempConfigState);\n});\nfunction computeModuleConfig(state, tempState) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(state.schemas)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var moduleName = _step.value;\n // At this point the schema could be either just the implicit schema or the actually\n // defined schema. We run with just the implicit schema because we want to populate\n // the config store with the translation overrides as soon as possible. In fact, the\n // translation system will throw for Suspense until the translation overrides are\n // available, which as of this writing blocks the schema definition from occurring\n // for modules loaded based on their extensions.\n var moduleStore = (0,_state__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n if (state.moduleLoaded[moduleName]) {\n var config = getConfigForModule(moduleName, state, tempState);\n moduleStore.setState({\n translationOverridesLoaded: true,\n loaded: true,\n config: config\n });\n } else {\n var config1 = getConfigForModuleImplicitSchema(moduleName, state, tempState);\n moduleStore.setState({\n translationOverridesLoaded: true,\n loaded: false,\n config: config1\n });\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction computeExtensionSlotConfigs(state, tempState) {\n var slotConfigs = getExtensionSlotConfigs(state, tempState);\n var newSlotStoreEntries = Object.fromEntries(Object.entries(slotConfigs).map(function(param) {\n var _param = _sliced_to_array(param, 2), slotName = _param[0], config = _param[1];\n return [\n slotName,\n {\n loaded: true,\n config: config\n }\n ];\n }));\n var slotStore = (0,_state__WEBPACK_IMPORTED_MODULE_3__.getExtensionSlotsConfigStore)();\n var oldState = slotStore.getState();\n var newState = {\n slots: _object_spread({}, oldState.slots, newSlotStoreEntries)\n };\n if (!(0,ramda__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(oldState, newState)) {\n slotStore.setState(newState);\n }\n}\nfunction computeImplementerToolsConfig(state, tempConfigState) {\n var config = getImplementerToolsConfig(state, tempConfigState);\n _state__WEBPACK_IMPORTED_MODULE_3__.implementerToolsConfigStore.setState({\n config: config\n });\n}\nfunction computeExtensionConfigs(configState, extensionState, tempConfigState) {\n var configs = {};\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n // We assume that the module schema has already been defined, since the extension\n // it contains is mounted.\n for(var _iterator = extensionState.mountedExtensions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var extension = _step.value;\n var config = computeExtensionConfig(extension.slotModuleName, extension.extensionModuleName, extension.slotName, extension.extensionId, configState, tempConfigState);\n configs[extension.slotName] = _object_spread_props(_object_spread({}, configs[extension.slotName]), _define_property({}, extension.extensionId, {\n config: config,\n loaded: true\n }));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n (0,_state__WEBPACK_IMPORTED_MODULE_3__.getExtensionsConfigStore)().setState({\n configs: configs\n });\n}\n/*\n * API\n *\n */ /**\n * This defines a configuration schema for a module. The schema tells the\n * configuration system how the module can be configured. It specifies\n * what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param moduleName Name of the module the schema is being defined for. Generally\n * should be the one in which the `defineConfigSchema` call takes place.\n * @param schema The config schema for the module\n */ function defineConfigSchema(moduleName, schema) {\n validateConfigSchema(moduleName, schema);\n var enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(schema, implicitConfigSchema);\n _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, moduleName, enhancedSchema)),\n moduleLoaded: _object_spread_props(_object_spread({}, state.moduleLoaded), _define_property({}, moduleName, true))\n });\n });\n}\n/**\n * This alerts the configuration system that a module exists. This allows config to be\n * processed, while still allowing the extension system to know whether the module has\n * actually had its front bundle executed yet.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param moduleName\n */ function registerModuleWithConfigSystem(moduleName) {\n var state = _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState();\n _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState({\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, moduleName, implicitConfigSchema))\n });\n}\n/**\n * This allows the config system to support translation overrides for namespaces that\n * do not correspond to modules.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param namespace\n */ function registerTranslationNamespace(namespace) {\n var state = _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState();\n _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState({\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, namespace, translationOverridesSchema))\n });\n}\n/**\n * This defines a configuration schema for an extension. When a schema is defined\n * for an extension, that extension will receive the configuration corresponding\n * to that schema, rather than the configuration corresponding to the module\n * in which it is defined.\n *\n * The schema tells the configuration system how the module can be configured.\n * It specifies what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param extensionName Name of the extension the schema is being defined for.\n * Should match the `name` of one of the `extensions` entries being returned\n * by `setupOpenMRS`.\n * @param schema The config schema for the extension\n */ function defineExtensionConfigSchema(extensionName, schema) {\n validateConfigSchema(extensionName, schema);\n var enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(schema, implicitConfigSchema);\n var state = _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState();\n if (state.schemas[extensionName]) {\n console.error(\"Config schema for extension \".concat(extensionName, \" already exists. If there are multiple extensions with this same name, one will probably crash.\"));\n }\n _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState({\n schemas: _object_spread_props(_object_spread({}, state.schemas), _define_property({}, extensionName, enhancedSchema))\n });\n}\nfunction provide(config) {\n var sourceName = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : \"provided\";\n _state__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n providedConfigs: _to_consumable_array(state.providedConfigs).concat([\n {\n source: sourceName,\n config: config\n }\n ])\n });\n });\n}\n/**\n * A promise-based way to access the config as soon as it is fully loaded.\n * If it is already loaded, resolves the config in its present state.\n *\n * This is a useful function if you need to get the config in the course\n * of the execution of a function.\n *\n * @param moduleName The name of the module for which to look up the config\n */ function getConfig(moduleName) {\n return new Promise(function(resolve) {\n var update = function update(state) {\n if (state.loaded && state.config) {\n var config = (0,ramda__WEBPACK_IMPORTED_MODULE_6__[\"default\"])([\n \"Display conditions\",\n \"Translation overrides\"\n ], state.config);\n resolve(config);\n unsubscribe && unsubscribe();\n }\n };\n var store = (0,_state__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n update(store.getState());\n var unsubscribe = store.subscribe(update);\n });\n}\n/** @internal */ function getTranslationOverrides(moduleName, slotName, extensionId) {\n var promises = [\n new Promise(function(resolve) {\n var update = function update(state) {\n if (state.translationOverridesLoaded && state.config) {\n var _state_config_Translationoverrides;\n var translationOverrides = (_state_config_Translationoverrides = state.config[\"Translation overrides\"]) !== null && _state_config_Translationoverrides !== void 0 ? _state_config_Translationoverrides : {};\n resolve(translationOverrides);\n unsubscribe && unsubscribe();\n }\n };\n var configStore = (0,_state__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n update(configStore.getState());\n var unsubscribe = configStore.subscribe(update);\n })\n ];\n if (slotName && extensionId) {\n promises.push(new Promise(function(resolve) {\n var update = function update(state) {\n if (state.loaded && state.config) {\n var _state_config_Translationoverrides;\n var translationOverrides = (_state_config_Translationoverrides = state.config[\"Translation overrides\"]) !== null && _state_config_Translationoverrides !== void 0 ? _state_config_Translationoverrides : {};\n resolve(translationOverrides);\n unsubscribe && unsubscribe();\n }\n };\n var configStore = (0,_state__WEBPACK_IMPORTED_MODULE_3__.getExtensionConfig)(slotName, extensionId);\n update(configStore.getState());\n var unsubscribe = configStore.subscribe(update);\n }));\n }\n return Promise.all(promises).then(function(results) {\n return results.reduce(function(prev, current) {\n return (0,ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(prev, current);\n }, {});\n });\n}\n/**\n * Validate and interpolate defaults for `providedConfig` according to `schema`\n *\n * @param schema a configuration schema\n * @param providedConfig an object of config values (without the top-level module name)\n * @param keyPathContext a dot-deparated string which helps the user figure out where\n * the provided config came from\n * @internal\n */ function processConfig(schema, providedConfig, keyPathContext) {\n validateStructure(schema, providedConfig, keyPathContext);\n var config = setDefaults(schema, providedConfig);\n runAllValidatorsInConfigTree(schema, config, keyPathContext);\n return config;\n}\n/*\n * Helper functions\n *\n */ /**\n * Returns the configuration for an extension. This configuration is specific\n * to the slot in which it is mounted, and its ID within that slot.\n *\n * The schema for that configuration is the extension schema. If no extension\n * schema has been provided, the schema used is the schema of the module in\n * which the extension is defined.\n *\n * @param slotModuleName The name of the module which defines the extension slot\n * @param extensionModuleName The name of the module which defines the extension (and therefore the config schema)\n * @param slotName The name of the extension slot where the extension is mounted\n * @param extensionId The ID of the extension in its slot\n */ function computeExtensionConfig(slotModuleName, extensionModuleName, slotName, extensionId, configState, tempConfigState) {\n var _slotModuleConfig_extensionSlots, _slotModuleConfig_extensionSlots_slotName, _slotModuleConfig_extensionSlots_slotName_configure;\n var extensionName = getExtensionNameFromId(extensionId);\n var extensionConfigSchema = configState.schemas[extensionName];\n var nameOfSchemaSource = extensionConfigSchema ? extensionName : extensionModuleName;\n var providedConfigs = getProvidedConfigs(configState, tempConfigState);\n var slotModuleConfig = mergeConfigsFor(slotModuleName, providedConfigs);\n var _slotModuleConfig_extensionSlots_slotName_configure_extensionId;\n var configOverride = (_slotModuleConfig_extensionSlots_slotName_configure_extensionId = slotModuleConfig === null || slotModuleConfig === void 0 ? void 0 : (_slotModuleConfig_extensionSlots = slotModuleConfig.extensionSlots) === null || _slotModuleConfig_extensionSlots === void 0 ? void 0 : (_slotModuleConfig_extensionSlots_slotName = _slotModuleConfig_extensionSlots[slotName]) === null || _slotModuleConfig_extensionSlots_slotName === void 0 ? void 0 : (_slotModuleConfig_extensionSlots_slotName_configure = _slotModuleConfig_extensionSlots_slotName.configure) === null || _slotModuleConfig_extensionSlots_slotName_configure === void 0 ? void 0 : _slotModuleConfig_extensionSlots_slotName_configure[extensionId]) !== null && _slotModuleConfig_extensionSlots_slotName_configure_extensionId !== void 0 ? _slotModuleConfig_extensionSlots_slotName_configure_extensionId : {};\n var extensionConfig = mergeConfigsFor(nameOfSchemaSource, providedConfigs);\n var combinedConfig = mergeConfigs([\n extensionConfig,\n configOverride\n ]);\n var schema = extensionConfigSchema !== null && extensionConfigSchema !== void 0 ? extensionConfigSchema : configState.schemas[extensionModuleName];\n validateStructure(schema, combinedConfig, nameOfSchemaSource);\n var config = setDefaults(schema, combinedConfig);\n runAllValidatorsInConfigTree(schema, config, nameOfSchemaSource);\n delete config.extensionSlots;\n return config;\n}\nfunction getImplementerToolsConfig(configState, tempConfigState) {\n var result = getSchemaWithValuesAndSources((0,ramda__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(configState.schemas));\n var configsAndSources = _to_consumable_array(configState.providedConfigs.map(function(c) {\n return [\n c.config,\n c.source\n ];\n })).concat([\n [\n tempConfigState.config,\n \"temporary config\"\n ]\n ]);\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = configsAndSources[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _step_value = _sliced_to_array(_step.value, 2), config = _step_value[0], source = _step_value[1];\n result = mergeConfigs([\n result,\n createValuesAndSourcesTree(config, source)\n ]);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return result;\n}\nfunction getSchemaWithValuesAndSources(schema) {\n if (schema.hasOwnProperty(\"_default\")) {\n return _object_spread_props(_object_spread({}, schema), {\n _value: schema._default,\n _source: \"default\"\n });\n } else if (isOrdinaryObject(schema)) {\n return Object.keys(schema).reduce(function(obj, key) {\n obj[key] = getSchemaWithValuesAndSources(schema[key]);\n return obj;\n }, {});\n } else {\n // at this point, the schema is bad and an error will have been logged during schema validation\n return {};\n }\n}\nfunction createValuesAndSourcesTree(config, source) {\n if (isOrdinaryObject(config)) {\n return Object.keys(config).reduce(function(obj, key) {\n obj[key] = createValuesAndSourcesTree(config[key], source);\n return obj;\n }, {});\n } else {\n return {\n _value: config,\n _source: source\n };\n }\n}\nfunction getExtensionSlotConfigs(configState, tempConfigState) {\n var allConfigs = mergeConfigs(getProvidedConfigs(configState, tempConfigState));\n var slotConfigPerModule = Object.keys(allConfigs).reduce(function(obj, key) {\n var _allConfigs_key;\n if ((_allConfigs_key = allConfigs[key]) === null || _allConfigs_key === void 0 ? void 0 : _allConfigs_key.extensionSlots) {\n var _allConfigs_key1;\n obj[key] = (_allConfigs_key1 = allConfigs[key]) === null || _allConfigs_key1 === void 0 ? void 0 : _allConfigs_key1.extensionSlots;\n }\n return obj;\n }, {});\n validateAllExtensionSlotConfigs(slotConfigPerModule);\n var slotConfigs = Object.keys(slotConfigPerModule).reduce(function(obj, key) {\n obj = _object_spread({}, obj, slotConfigPerModule[key]);\n return obj;\n }, {});\n return slotConfigs;\n}\nfunction validateAllExtensionSlotConfigs(slotConfigPerModule) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.entries(slotConfigPerModule)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _step_value = _sliced_to_array(_step.value, 2), moduleName = _step_value[0], configBySlotName = _step_value[1];\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;\n try {\n for(var _iterator1 = Object.entries(configBySlotName)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){\n var _step_value1 = _sliced_to_array(_step1.value, 2), slotName = _step_value1[0], config = _step_value1[1];\n validateExtensionSlotConfig(config, moduleName, slotName);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally{\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction validateExtensionSlotConfig(config, moduleName, slotName) {\n var keyPath = \"\".concat(moduleName, \".extensionSlots.\").concat(slotName);\n var errorPrefix = \"Extension slot config '\".concat(keyPath, \"'\");\n var invalidKeys = Object.keys(config).filter(function(k) {\n return ![\n \"add\",\n \"remove\",\n \"order\",\n \"configure\"\n ].includes(k);\n });\n if (invalidKeys.length) {\n logError(keyPath, errorPrefix + \"' contains invalid keys '\".concat(invalidKeys.join(\"', '\"), \"'\"));\n }\n if (config.add) {\n if (!Array.isArray(config.add) || !config.add.every(function(n) {\n return typeof n === \"string\";\n })) {\n logError(keyPath, errorPrefix + \".add' is invalid. Must be an array of strings (extension IDs)\");\n }\n }\n if (config.remove) {\n if (!Array.isArray(config.remove) || !config.remove.every(function(n) {\n return typeof n === \"string\";\n })) {\n logError(keyPath, errorPrefix + \".remove' is invalid. Must be an array of strings (extension IDs)\");\n }\n }\n if (config.order) {\n if (!Array.isArray(config.order) || !config.order.every(function(n) {\n return typeof n === \"string\";\n })) {\n logError(keyPath, errorPrefix + \".order' is invalid. Must be an array of strings (extension IDs)\");\n }\n }\n if (config.configure) {\n if (!isOrdinaryObject(config.configure)) {\n logError(keyPath, errorPrefix + \".configure' is invalid. Must be an object with extension IDs for keys\");\n }\n }\n}\nfunction getProvidedConfigs(configState, tempConfigState) {\n return _to_consumable_array(configState.providedConfigs.map(function(c) {\n return c.config;\n })).concat([\n tempConfigState.config\n ]);\n}\n/**\n * Validates the config schema for a module. Since problems identified here are programming errors\n * that hopefully will be caught during development, this function logs errors to the console directly;\n * it's fine if we spam the user with these errors.\n */ function validateConfigSchema(moduleName, schema) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\n var updateMessage = \"Please verify that you are running the latest version and, if so, alert the maintainer.\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n var _loop = function() {\n var key = _step.value;\n var thisKeyPath = keyPath + (keyPath && \".\") + key;\n var schemaPart = schema[key];\n if (thisKeyPath === \"Display conditions\") {\n console.error(\"\".concat(moduleName, ' declares a configuration option called \"Display conditions\"; the \"Display conditions\" option is a reserved name. ').concat(updateMessage));\n }\n if (thisKeyPath === \"Translation overrides\") {\n console.error(\"\".concat(moduleName, ' declares a configuration option called \"Translation overrides\"; the \"Translation overrides\" option is a reserved name. ').concat(updateMessage));\n }\n if (!isOrdinaryObject(schemaPart)) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage));\n return \"continue\";\n }\n if (!schemaPart.hasOwnProperty(\"_default\")) {\n // recurse for nested config keys\n validateConfigSchema(moduleName, schemaPart, thisKeyPath);\n }\n var elements = schemaPart._elements;\n if (hasObjectSchema(elements)) {\n validateConfigSchema(moduleName, elements, thisKeyPath + \"._elements\");\n }\n if (schemaPart._validators) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = schemaPart._validators[Symbol.iterator](), _step1; !(_iteratorNormalCompletion = (_step1 = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _$validator = _step1.value;\n if (typeof _$validator !== \"function\") {\n console.error(\"\".concat(moduleName, \" has invalid validator for key '\").concat(thisKeyPath, \"' \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: validators must be functions that return either \" + \"undefined or an error string. Received \".concat(_$validator, \".\"));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n var valueType = schemaPart._type;\n if (valueType && !Object.values(_types__WEBPACK_IMPORTED_MODULE_0__.Type).includes(valueType)) {\n console.error(\"\".concat(moduleName, \" has invalid type for key '\").concat(thisKeyPath, \"' \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: the allowed types are \".concat(Object.values(_types__WEBPACK_IMPORTED_MODULE_0__.Type).join(\", \"), \". \") + \"Received '\".concat(valueType, \"'\"));\n }\n if (Object.keys(schemaPart).every(function(k) {\n return [\n \"_description\",\n \"_validators\",\n \"_elements\",\n \"_type\"\n ].includes(k);\n }) && !keyPath.includes(\"._elements\")) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: all config elements must have a default. \" + \"Received \".concat(JSON.stringify(schemaPart)));\n }\n if (elements && valueType && ![\n _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object\n ].includes(valueType)) {\n console.error(\"\".concat(moduleName, \" has bad config schema definition for key '\").concat(thisKeyPath, \"'. \").concat(updateMessage, \".\") + \"\\n\\nIf you're the maintainer: the 'elements' key only works with '_type' equal to 'Array' or 'Object'. \" + \"Received \".concat(JSON.stringify(valueType)));\n }\n };\n for(var _iterator = Object.keys(schema).filter(function(k) {\n return !k.startsWith(\"_\");\n })[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction getConfigForModule(moduleName, configState, tempConfigState) {\n var schema = configState.schemas[moduleName];\n var inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n validateStructure(schema, inputConfig, moduleName);\n var config = setDefaults(schema, inputConfig);\n runAllValidatorsInConfigTree(schema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction getConfigForModuleImplicitSchema(moduleName, configState, tempConfigState) {\n var inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n var config = setDefaults(implicitConfigSchema, inputConfig);\n runAllValidatorsInConfigTree(implicitConfigSchema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction mergeConfigsFor(moduleName, allConfigs) {\n var allConfigsForModule = allConfigs.map(function(param) {\n var c = param[moduleName];\n return c;\n }).filter(function(c) {\n return !!c;\n });\n return mergeConfigs(allConfigsForModule);\n}\nfunction mergeConfigs(configs) {\n var mergeDeepAll = (0,ramda__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n return mergeDeepAll({}, configs);\n}\n/**\n * Recursively check the provided config tree to make sure that all\n * of the provided properties exist in the schema, and that types are\n * correct. Does not run validators yet, since those will be run on\n * the config with the defaults filled in.\n */ function validateStructure(schema, config) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n // validate each constituent element\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n var thisKeyPath = keyPath + \".\" + key;\n var schemaPart = schema[key];\n if (!schema.hasOwnProperty(key)) {\n if (!(key === \"extensionSlots\" && keyPath !== \"\")) {\n logError(thisKeyPath, \"Unknown config key '\".concat(thisKeyPath, \"' provided. Ignoring.\"));\n }\n continue;\n }\n validateBranchStructure(schemaPart, value, thisKeyPath);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction validateBranchStructure(schemaPart, value, keyPath) {\n checkType(keyPath, schemaPart._type, value);\n if (isOrdinaryObject(value)) {\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n // validate as freeform object\n validateFreeformObjectStructure(schemaPart, value, keyPath);\n } else if (!(schemaPart.hasOwnProperty(\"_default\") || schemaPart.hasOwnProperty(\"_type\"))) {\n // validate as normal nested config\n validateStructure(schemaPart, value, keyPath);\n }\n } else {\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array) {\n validateArrayStructure(schemaPart, value, keyPath);\n }\n }\n}\nfunction validateFreeformObjectStructure(freeformObjectSchema, config, keyPath) {\n if (freeformObjectSchema._elements) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n validateStructure(freeformObjectSchema._elements, value, \"\".concat(keyPath, \".\").concat(key));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n}\nfunction validateArrayStructure(arraySchema, value, keyPath) {\n var validatedAsArray = checkType(keyPath, _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array, value);\n if (!validatedAsArray) {\n return;\n }\n // if there is an array element object schema, verify that elements match it\n if (hasObjectSchema(arraySchema._elements)) {\n for(var i = 0; i < value.length; i++){\n validateBranchStructure(arraySchema._elements, value[i], \"\".concat(keyPath, \"[\").concat(i, \"]\"));\n }\n }\n for(var i1 = 0; i1 < value.length; i1++){\n var _arraySchema__elements;\n checkType(\"\".concat(keyPath, \"[\").concat(i1, \"]\"), (_arraySchema__elements = arraySchema._elements) === null || _arraySchema__elements === void 0 ? void 0 : _arraySchema__elements._type, value[i1]);\n }\n}\n/**\n * Run all the validators in the config tree. This should be run\n * on the config object after it has been filled in with all the defaults, since\n * higher-level validators may refer to default values.\n */ function runAllValidatorsInConfigTree(schema, config) {\n var keyPath = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : \"\";\n // If `!schema`, there should have been a structural validation error printed already.\n if (schema) {\n if (config !== schema._default) {\n runValidators(keyPath, schema._validators, config);\n }\n if (isOrdinaryObject(config)) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(config)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n var value = config[key];\n var thisKeyPath = keyPath + \".\" + key;\n var schemaPart = schema[key];\n if (schema._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object && schema._elements) {\n runAllValidatorsInConfigTree(schema._elements, value, thisKeyPath);\n } else {\n runAllValidatorsInConfigTree(schemaPart, value, thisKeyPath);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } else if (Array.isArray(config) && schema._elements) {\n for(var i = 0; i < config.length; i++){\n runAllValidatorsInConfigTree(schema._elements, config[i], \"\".concat(keyPath, \"[\").concat(i, \"]\"));\n }\n }\n }\n}\n/**\n * Run type validation for the value, logging any errors.\n * @returns true if validation passes, false otherwise\n */ function checkType(keyPath, _type, value) {\n if (_type) {\n var _$validator = {\n Array: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isArray,\n Boolean: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isBoolean,\n ConceptUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n Number: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isNumber,\n Object: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isObject,\n String: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isString,\n UUID: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PersonAttributeTypeUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PatientIdentifierTypeUuid: _validators_type_validators__WEBPACK_IMPORTED_MODULE_1__.isUuid\n };\n return runValidators(keyPath, [\n _$validator[_type]\n ], value);\n }\n return true;\n}\n/**\n * Runs validators, logging errors.\n * @returns true if all pass, false otherwise.\n */ function runValidators(keyPath, validators, value) {\n var returnValue = true;\n if (validators) {\n try {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = validators[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _$validator = _step.value;\n var validatorResult = _$validator(value);\n if (typeof validatorResult === \"string\") {\n var message = typeof value === \"object\" ? \"Invalid configuration for \".concat(keyPath, \": \").concat(validatorResult) : \"Invalid configuration value \".concat(value, \" for \").concat(keyPath, \": \").concat(validatorResult);\n logError(keyPath, message);\n returnValue = false;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } catch (e) {\n console.error('Skipping invalid validator at \"'.concat(keyPath, '\". Encountered error\\n\t').concat(e));\n }\n }\n return returnValue;\n}\n// Recursively fill in the config with values from the schema.\nvar setDefaults = function(schema, inputConfig) {\n var config = (0,ramda__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(inputConfig);\n if (!schema) {\n return config;\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n var _loop = function() {\n var key = _step.value;\n var configPart = config[key];\n var schemaPart = schema[key];\n // The `schemaPart &&` clause of this `if` statement will only fail\n // if the schema is very invalid. It is there to prevent the app from\n // crashing completely, though it will produce unexpected behavior.\n // If this happens, there should be legible errors in the console from\n // the schema validator.\n if (schemaPart && (schemaPart.hasOwnProperty(\"_type\") || schemaPart.hasOwnProperty(\"_default\"))) {\n // We assume that schemaPart defines a config value, since it has\n // a property `_type` or `_default`.\n if (!config.hasOwnProperty(key)) {\n config[key] = schemaPart[\"_default\"];\n }\n // We also check if it is an object or array with object elements, in which case we recurse\n var elements = schemaPart._elements;\n if (configPart && hasObjectSchema(elements)) {\n if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array && Array.isArray(configPart)) {\n var configWithDefaults = configPart.map(function(conf) {\n return setDefaults(elements, conf);\n });\n config[key] = configWithDefaults;\n } else if (schemaPart._type === _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(configPart)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion = (_step1 = _iterator.next()).done); _iteratorNormalCompletion = true){\n var objectKey = _step1.value;\n configPart[objectKey] = setDefaults(elements, configPart[objectKey]);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }\n } else if (isOrdinaryObject(schemaPart)) {\n // Since schemaPart has no property \"_type\", if it's an ordinary object\n // (unlike, importantly, the validators array), we assume it is a parent config property.\n // We recurse to config[key] and schema[key]. Default config[key] to {}.\n var selectedConfigPart = configPart !== null && configPart !== void 0 ? configPart : {};\n // There will have been a validation error already if configPart is not a plain object.\n if (isOrdinaryObject(selectedConfigPart)) {\n config[key] = setDefaults(schemaPart, selectedConfigPart);\n }\n }\n };\n for(var _iterator = Object.keys(schema)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return config;\n};\nfunction hasObjectSchema(elementsSchema) {\n return !!elementsSchema && Object.keys(elementsSchema).filter(function(e) {\n return ![\n \"_default\",\n \"_validators\"\n ].includes(e);\n }).length > 0;\n}\nfunction isOrdinaryObject(value) {\n return typeof value === \"object\" && !Array.isArray(value) && value !== null;\n}\n/** Keep track of which validation errors we have displayed. Each one should only be displayed once. */ var displayedValidationMessages = new Set();\nfunction logError(keyPath, message) {\n var key = \"\".concat(keyPath, \":::\").concat(message);\n if (!displayedValidationMessages.has(key)) {\n console.error(message);\n displayedValidationMessages.add(key);\n }\n}\n/**\n * Normally, configuration errors are only displayed once. This function clears the list of\n * displayed errors, so that they will be displayed again.\n *\n * @internal\n */ function clearConfigErrors(keyPath) {\n if (keyPath) {\n displayedValidationMessages.forEach(function(key) {\n if (key.startsWith(keyPath)) {\n displayedValidationMessages.delete(key);\n }\n });\n } else {\n displayedValidationMessages.clear();\n }\n}\n/**\n * Copied over from esm-extensions. It rightly belongs to that module, but esm-config\n * cannot depend on esm-extensions.\n */ function getExtensionNameFromId(extensionId) {\n var _extensionId_split = _sliced_to_array(extensionId.split(\"#\"), 1), extensionName = _extensionId_split[0];\n return extensionName;\n}\n/**\n * The translation overrides schema is used in the implicit schema given to every module;\n * plus any additional translation namespaces (at time of writing, this is just 'core').\n */ var translationOverridesSchema = {\n \"Translation overrides\": {\n _description: \"Per-language overrides for frontend translations should be keyed by language code and each language dictionary contains the translation key and the display value\",\n _type: _types__WEBPACK_IMPORTED_MODULE_0__.Type.Object,\n _default: {},\n _validators: [\n (0,_validators_validator__WEBPACK_IMPORTED_MODULE_2__.validator)(function(o) {\n return Object.keys(o).every(function(k) {\n return /^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k);\n });\n }, function(o) {\n var badKeys = Object.keys(o).filter(function(k) {\n return !/^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k);\n });\n return \"The 'Translation overrides' object should have language codes for keys. Language codes must be in the form of a two-to-three letter language code optionally followed by a hyphen and a two-to-three letter country code. The following keys do not conform: \".concat(badKeys.join(\", \"), \".\");\n })\n ]\n }\n};\n/**\n * The implicitConfigSchema is implicitly included in every configuration schema\n */ var implicitConfigSchema = _object_spread({\n \"Display conditions\": {\n privileges: {\n _description: \"The privilege(s) the user must have to use this extension\",\n _type: _types__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _default: []\n }\n }\n}, translationOverridesSchema);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvc3JjL21vZHVsZS1jb25maWcvbW9kdWxlLWNvbmZpZy50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2QkFBNkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ3VDO0FBRXBDO0FBQ3lFO0FBQ3JEO0FBV25DO0FBSWpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBbUJDLEdBQ0RxQixvQkFBb0JSLHVEQUFtQkEsQ0FBQ1MsUUFBUSxJQUFJSCx3REFBb0JBLENBQUNHLFFBQVE7QUFDakZULHVEQUFtQkEsQ0FBQ1UsU0FBUyxDQUFDLFNBQUNDO1dBQWdCSCxvQkFBb0JHLGFBQWFMLHdEQUFvQkEsQ0FBQ0csUUFBUTs7QUFDN0dILHdEQUFvQkEsQ0FBQ0ksU0FBUyxDQUFDLFNBQUNFO1dBQzlCSixvQkFBb0JSLHVEQUFtQkEsQ0FBQ1MsUUFBUSxJQUFJRzs7QUFHdERDLDhCQUE4QmIsdURBQW1CQSxDQUFDUyxRQUFRLElBQUlILHdEQUFvQkEsQ0FBQ0csUUFBUTtBQUMzRlQsdURBQW1CQSxDQUFDVSxTQUFTLENBQUMsU0FBQ0M7V0FDN0JFLDhCQUE4QkYsYUFBYUwsd0RBQW9CQSxDQUFDRyxRQUFROztBQUUxRUgsd0RBQW9CQSxDQUFDSSxTQUFTLENBQUMsU0FBQ0U7V0FDOUJDLDhCQUE4QmIsdURBQW1CQSxDQUFDUyxRQUFRLElBQUlHOztBQUdoRUUsNEJBQTRCZCx1REFBbUJBLENBQUNTLFFBQVEsSUFBSUgsd0RBQW9CQSxDQUFDRyxRQUFRO0FBQ3pGVCx1REFBbUJBLENBQUNVLFNBQVMsQ0FBQyxTQUFDQztXQUM3QkcsNEJBQTRCSCxhQUFhTCx3REFBb0JBLENBQUNHLFFBQVE7O0FBRXhFSCx3REFBb0JBLENBQUNJLFNBQVMsQ0FBQyxTQUFD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RSxTQUFDZ0UsR0FBTTtnQkFDTCxJQUFNRSxVQUFVekssT0FBT0MsSUFBSSxDQUFDc0ssR0FBR2pFLE1BQU0sQ0FBQyxTQUFDQzsyQkFBTSxDQUFDLDZCQUE2QmlFLElBQUksQ0FBQ2pFOztnQkFDaEYsT0FBTyxnUUFFTCxPQUZxUWtFLFFBQVE5RCxJQUFJLENBQ2pSLE9BQ0E7WUFDSjtTQUVIO0lBQ0g7QUFDRjtBQUVBOztDQUVDLEdBQ0QsSUFBTXhFLHVCQUFxQztJQUN6QyxzQkFBc0I7UUFDcEJ1SSxZQUFZO1lBQ1ZKLGNBQWM7WUFDZDVDLE9BQU9ySix3Q0FBSUEsQ0FBQ3dJLEtBQUs7WUFDakJwQixVQUFVLEVBQUU7UUFDZDtJQUNGO0dBQ0dsRCIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvc3JjL21vZHVsZS1jb25maWcvbW9kdWxlLWNvbmZpZy50cz83Y2ExIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBDb25maWcgKi9cbmltcG9ydCB7IGNsb25lLCByZWR1Y2UsIG1lcmdlRGVlcFJpZ2h0LCBlcXVhbHMsIG9taXQgfSBmcm9tICdyYW1kYSc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZywgQ29uZmlnT2JqZWN0LCBDb25maWdTY2hlbWEsIEV4dGVuc2lvblNsb3RDb25maWcsIEV4dGVuc2lvblNsb3RDb25maWdPYmplY3QgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNCb29sZWFuLCBpc1V1aWQsIGlzTnVtYmVyLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICcuLi92YWxpZGF0b3JzL3R5cGUtdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tICcuLi92YWxpZGF0b3JzL3ZhbGlkYXRvcic7XG5pbXBvcnQgeyB0eXBlIENvbmZpZ0V4dGVuc2lvblN0b3JlLCB0eXBlIENvbmZpZ0ludGVybmFsU3RvcmUsIHR5cGUgQ29uZmlnU3RvcmUgfSBmcm9tICcuL3N0YXRlJztcbmltcG9ydCB7XG4gIGNvbmZpZ0ludGVybmFsU3RvcmUsXG4gIGNvbmZpZ0V4dGVuc2lvblN0b3JlLFxuICBnZXRDb25maWdTdG9yZSxcbiAgZ2V0RXh0ZW5zaW9uQ29uZmlnLFxuICBnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUsXG4gIGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSxcbiAgdGVtcG9yYXJ5Q29uZmlnU3RvcmUsXG4gIGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUsXG59IGZyb20gJy4vc3RhdGUnO1xuaW1wb3J0IHR5cGUge30gZnJvbSAnQG9wZW5tcnMvZXNtLWdsb2JhbHMnO1xuaW1wb3J0IHsgdHlwZSBUZW1wb3JhcnlDb25maWdTdG9yZSB9IGZyb20gJy4uJztcblxuLyoqXG4gKiBTdG9yZSBzZXR1cFxuICpcbiAqXG4gKiBTZXQgdXAgc3RvcmVzIGFuZCBzdWJzY3JpcHRpb25zIHNvIHRoYXQgaW5wdXRzIGdldCBwcm9jZXNzZWQgYXBwcm9wcmlhdGVseS5cbiAqXG4gKiBUaGVyZSBhcmUgKmlucHV0KiBzdG9yZXMgYW5kICpvdXRwdXQqIHN0b3Jlcy4gVGhlICppbnB1dCogc3RvcmVzXG4gKiBhcmUgY29uZmlnSW50ZXJuYWxTdG9yZSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUsIGFuZCBjb25maWdFeHRlbnNpb25TdG9yZS4gVGhlXG4gKiBvdXRwdXQgc3RvcmVzIGFyZSBzZXQgaW4gdGhlIGBjb21wdXRlLi4uYCBmdW5jdGlvbnMuIFRoZXkgYXJlIHRoZSBtb2R1bGVcbiAqIGNvbmZpZyBzdG9yZXMsIHRoZSBleHRlbnNpb24gc2xvdCBjb25maWcgc3RvcmVzIChieSBtb2R1bGUpLCB0aGUgZXh0ZW5zaW9uXG4gKiBjb25maWcgc3RvcmVzLCBhbmQgdGhlIGltcGxlbWVudGVyIHRvb2xzIGNvbmZpZyBzdG9yZS5cbiAqXG4gKiBUaGlzIGNvZGUgc2V0cyB1cCB0aGUgc3Vic2NyaXB0aW9ucyBzbyB0aGF0IHdoZW4gYW4gaW5wdXQgc3RvcmUgY2hhbmdlcyxcbiAqIHRoZSBjb3JyZWN0IHNldCBvZiBvdXRwdXQgc3RvcmVzIGFyZSB1cGRhdGVkLlxuICpcbiAqIEFsbCBgY29tcHV0ZS4uLmAgZnVuY3Rpb25zIGV4Y2VwdCBgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3NgIGFyZSBwdXJlXG4gKiAob3IgYXJlIHN1cHBvc2VkIHRvIGJlKSwgb3RoZXIgdGhhbiB0aGUgZmFjdCB0aGF0IHRoZXkgYWxsIGBzZXRTdGF0ZWBcbiAqIHN0b3JlIHZhbHVlcyBhdCB0aGUgZW5kLiBgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3NgIGNhbGxzIGBnZXRHbG9iYWxTdG9yZWAsXG4gKiB3aGljaCBjcmVhdGVzIHN0b3Jlcy5cbiAqL1xuY29tcHV0ZU1vZHVsZUNvbmZpZyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xuY29uZmlnSW50ZXJuYWxTdG9yZS5zdWJzY3JpYmUoKGNvbmZpZ1N0YXRlKSA9PiBjb21wdXRlTW9kdWxlQ29uZmlnKGNvbmZpZ1N0YXRlLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKSk7XG50ZW1wb3JhcnlDb25maWdTdG9yZS5zdWJzY3JpYmUoKHRlbXBDb25maWdTdGF0ZSkgPT5cbiAgY29tcHV0ZU1vZHVsZUNvbmZpZyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBDb25maWdTdGF0ZSksXG4pO1xuXG5jb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xuY29uZmlnSW50ZXJuYWxTdG9yZS5zdWJzY3JpYmUoKGNvbmZpZ1N0YXRlKSA9PlxuICBjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyhjb25maWdTdGF0ZSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUuZ2V0U3RhdGUoKSksXG4pO1xudGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKCh0ZW1wQ29uZmlnU3RhdGUpID0+XG4gIGNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnKGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKSwgdGVtcENvbmZpZ1N0YXRlKSxcbik7XG5cbmNvbXB1dGVFeHRlbnNpb25TbG90Q29uZmlncyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xuY29uZmlnSW50ZXJuYWxTdG9yZS5zdWJzY3JpYmUoKGNvbmZpZ1N0YXRlKSA9PlxuICBjb21wdXRlRXh0ZW5zaW9uU2xvdENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpLFxuKTtcbnRlbXBvcmFyeUNvbmZpZ1N0b3JlLnN1YnNjcmliZSgodGVtcENvbmZpZ1N0YXRlKSA9PlxuICBjb21wdXRlRXh0ZW5zaW9uU2xvdENvbmZpZ3MoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wQ29uZmlnU3RhdGUpLFxuKTtcblxuY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoXG4gIGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKSxcbiAgY29uZmlnRXh0ZW5zaW9uU3RvcmUuZ2V0U3RhdGUoKSxcbiAgdGVtcG9yYXJ5Q29uZmlnU3RvcmUuZ2V0U3RhdGUoKSxcbik7XG5jb25maWdJbnRlcm5hbFN0b3JlLnN1YnNjcmliZSgoY29uZmlnU3RhdGUpID0+IHtcbiAgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoY29uZmlnU3RhdGUsIGNvbmZpZ0V4dGVuc2lvblN0b3JlLmdldFN0YXRlKCksIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xufSk7XG5jb25maWdFeHRlbnNpb25TdG9yZS5zdWJzY3JpYmUoKGV4dGVuc2lvblN0YXRlKSA9PiB7XG4gIGNvbXB1dGVFeHRlbnNpb25Db25maWdzKGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKSwgZXh0ZW5zaW9uU3RhdGUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xufSk7XG50ZW1wb3JhcnlDb25maWdTdG9yZS5zdWJzY3JpYmUoKHRlbXBDb25maWdTdGF0ZSkgPT4ge1xuICBjb21wdXRlRXh0ZW5zaW9uQ29uZmlncyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIGNvbmZpZ0V4dGVuc2lvblN0b3JlLmdldFN0YXRlKCksIHRlbXBDb25maWdTdGF0ZSk7XG59KTtcblxuZnVuY3Rpb24gY29tcHV0ZU1vZHVsZUNvbmZpZyhzdGF0ZTogQ29uZmlnSW50ZXJuYWxTdG9yZSwgdGVtcFN0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSkge1xuICBmb3IgKGxldCBtb2R1bGVOYW1lIG9mIE9iamVjdC5rZXlzKHN0YXRlLnNjaGVtYXMpKSB7XG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgc2NoZW1hIGNvdWxkIGJlIGVpdGhlciBqdXN0IHRoZSBpbXBsaWNpdCBzY2hlbWEgb3IgdGhlIGFjdHVhbGx5XG4gICAgLy8gZGVmaW5lZCBzY2hlbWEuIFdlIHJ1biB3aXRoIGp1c3QgdGhlIGltcGxpY2l0IHNjaGVtYSBiZWNhdXNlIHdlIHdhbnQgdG8gcG9wdWxhdGVcbiAgICAvLyB0aGUgY29uZmlnIHN0b3JlIHdpdGggdGhlIHRyYW5zbGF0aW9uIG92ZXJyaWRlcyBhcyBzb29uIGFzIHBvc3NpYmxlLiBJbiBmYWN0LCB0aGVcbiAgICAvLyB0cmFuc2xhdGlvbiBzeXN0ZW0gd2lsbCB0aHJvdyBmb3IgU3VzcGVuc2UgdW50aWwgdGhlIHRyYW5zbGF0aW9uIG92ZXJyaWRlcyBhcmVcbiAgICAvLyBhdmFpbGFibGUsIHdoaWNoIGFzIG9mIHRoaXMgd3JpdGluZyBibG9ja3MgdGhlIHNjaGVtYSBkZWZpbml0aW9uIGZyb20gb2NjdXJyaW5nXG4gICAgLy8gZm9yIG1vZHVsZXMgbG9hZGVkIGJhc2VkIG9uIHRoZWlyIGV4dGVuc2lvbnMuXG4gICAgY29uc3QgbW9kdWxlU3RvcmUgPSBnZXRDb25maWdTdG9yZShtb2R1bGVOYW1lKTtcbiAgICBpZiAoc3RhdGUubW9kdWxlTG9hZGVkW21vZHVsZU5hbWVdKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGb3JNb2R1bGUobW9kdWxlTmFtZSwgc3RhdGUsIHRlbXBTdGF0ZSk7XG4gICAgICBtb2R1bGVTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgIHRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkOiB0cnVlLFxuICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGb3JNb2R1bGVJbXBsaWNpdFNjaGVtYShtb2R1bGVOYW1lLCBzdGF0ZSwgdGVtcFN0YXRlKTtcbiAgICAgIG1vZHVsZVN0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgdHJhbnNsYXRpb25PdmVycmlkZXNMb2FkZWQ6IHRydWUsXG4gICAgICAgIGxvYWRlZDogZmFsc2UsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlRXh0ZW5zaW9uU2xvdENvbmZpZ3Moc3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsIHRlbXBTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUpIHtcbiAgY29uc3Qgc2xvdENvbmZpZ3MgPSBnZXRFeHRlbnNpb25TbG90Q29uZmlncyhzdGF0ZSwgdGVtcFN0YXRlKTtcbiAgY29uc3QgbmV3U2xvdFN0b3JlRW50cmllcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhzbG90Q29uZmlncykubWFwKChbc2xvdE5hbWUsIGNvbmZpZ10pID0+IFtzbG90TmFtZSwgeyBsb2FkZWQ6IHRydWUsIGNvbmZpZyB9XSksXG4gICk7XG4gIGNvbnN0IHNsb3RTdG9yZSA9IGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUoKTtcbiAgY29uc3Qgb2xkU3RhdGUgPSBzbG90U3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3QgbmV3U3RhdGUgPSB7IHNsb3RzOiB7IC4uLm9sZFN0YXRlLnNsb3RzLCAuLi5uZXdTbG90U3RvcmVFbnRyaWVzIH0gfTtcbiAgaWYgKCFlcXVhbHMob2xkU3RhdGUsIG5ld1N0YXRlKSkge1xuICAgIHNsb3RTdG9yZS5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoc3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsIHRlbXBDb25maWdTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUpIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0SW1wbGVtZW50ZXJUb29sc0NvbmZpZyhzdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKTtcbiAgaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlLnNldFN0YXRlKHsgY29uZmlnIH0pO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRXh0ZW5zaW9uQ29uZmlncyhcbiAgY29uZmlnU3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsXG4gIGV4dGVuc2lvblN0YXRlOiBDb25maWdFeHRlbnNpb25TdG9yZSxcbiAgdGVtcENvbmZpZ1N0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSxcbikge1xuICBjb25zdCBjb25maWdzID0ge307XG4gIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBtb2R1bGUgc2NoZW1hIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCwgc2luY2UgdGhlIGV4dGVuc2lvblxuICAvLyBpdCBjb250YWlucyBpcyBtb3VudGVkLlxuICBmb3IgKGxldCBleHRlbnNpb24gb2YgZXh0ZW5zaW9uU3RhdGUubW91bnRlZEV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBjb25maWcgPSBjb21wdXRlRXh0ZW5zaW9uQ29uZmlnKFxuICAgICAgZXh0ZW5zaW9uLnNsb3RNb2R1bGVOYW1lLFxuICAgICAgZXh0ZW5zaW9uLmV4dGVuc2lvbk1vZHVsZU5hbWUsXG4gICAgICBleHRlbnNpb24uc2xvdE5hbWUsXG4gICAgICBleHRlbnNpb24uZXh0ZW5zaW9uSWQsXG4gICAgICBjb25maWdTdGF0ZSxcbiAgICAgIHRlbXBDb25maWdTdGF0ZSxcbiAgICApO1xuXG4gICAgY29uZmlnc1tleHRlbnNpb24uc2xvdE5hbWVdID0ge1xuICAgICAgLi4uY29uZmlnc1tleHRlbnNpb24uc2xvdE5hbWVdLFxuICAgICAgW2V4dGVuc2lvbi5leHRlbnNpb25JZF06IHsgY29uZmlnLCBsb2FkZWQ6IHRydWUgfSxcbiAgICB9O1xuICB9XG4gIGdldEV4dGVuc2lvbnNDb25maWdTdG9yZSgpLnNldFN0YXRlKHsgY29uZmlncyB9KTtcbn1cblxuLypcbiAqIEFQSVxuICpcbiAqL1xuXG4vKipcbiAqIFRoaXMgZGVmaW5lcyBhIGNvbmZpZ3VyYXRpb24gc2NoZW1hIGZvciBhIG1vZHVsZS4gVGhlIHNjaGVtYSB0ZWxscyB0aGVcbiAqIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGhvdyB0aGUgbW9kdWxlIGNhbiBiZSBjb25maWd1cmVkLiBJdCBzcGVjaWZpZXNcbiAqIHdoYXQgbWFrZXMgY29uZmlndXJhdGlvbiB2YWxpZCBvciBpbnZhbGlkLlxuICpcbiAqIFNlZSBbQ29uZmlndXJhdGlvbiBTeXN0ZW1dKGh0dHBzOi8vbzMtZG9jcy5vcGVubXJzLm9yZy9kb2NzL2NvbmZpZ3VyYXRpb24tc3lzdGVtKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGVmaW5pbmcgYSBjb25maWcgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSBtb2R1bGVOYW1lIE5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgc2NoZW1hIGlzIGJlaW5nIGRlZmluZWQgZm9yLiBHZW5lcmFsbHlcbiAqICAgc2hvdWxkIGJlIHRoZSBvbmUgaW4gd2hpY2ggdGhlIGBkZWZpbmVDb25maWdTY2hlbWFgIGNhbGwgdGFrZXMgcGxhY2UuXG4gKiBAcGFyYW0gc2NoZW1hIFRoZSBjb25maWcgc2NoZW1hIGZvciB0aGUgbW9kdWxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWdTY2hlbWEobW9kdWxlTmFtZTogc3RyaW5nLCBzY2hlbWE6IENvbmZpZ1NjaGVtYSkge1xuICB2YWxpZGF0ZUNvbmZpZ1NjaGVtYShtb2R1bGVOYW1lLCBzY2hlbWEpO1xuICBjb25zdCBlbmhhbmNlZFNjaGVtYSA9IG1lcmdlRGVlcFJpZ2h0KHNjaGVtYSwgaW1wbGljaXRDb25maWdTY2hlbWEpIGFzIENvbmZpZ1NjaGVtYTtcblxuICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKChzdGF0ZSkgPT4gKHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzY2hlbWFzOiB7IC4uLnN0YXRlLnNjaGVtYXMsIFttb2R1bGVOYW1lXTogZW5oYW5jZWRTY2hlbWEgfSxcbiAgICBtb2R1bGVMb2FkZWQ6IHsgLi4uc3RhdGUubW9kdWxlTG9hZGVkLCBbbW9kdWxlTmFtZV06IHRydWUgfSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIFRoaXMgYWxlcnRzIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSB0aGF0IGEgbW9kdWxlIGV4aXN0cy4gVGhpcyBhbGxvd3MgY29uZmlnIHRvIGJlXG4gKiBwcm9jZXNzZWQsIHdoaWxlIHN0aWxsIGFsbG93aW5nIHRoZSBleHRlbnNpb24gc3lzdGVtIHRvIGtub3cgd2hldGhlciB0aGUgbW9kdWxlIGhhc1xuICogYWN0dWFsbHkgaGFkIGl0cyBmcm9udCBidW5kbGUgZXhlY3V0ZWQgeWV0LlxuICpcbiAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBlc20tYXBwLXNoZWxsLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIG1vZHVsZU5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTW9kdWxlV2l0aENvbmZpZ1N5c3RlbShtb2R1bGVOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3Qgc3RhdGUgPSBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoe1xuICAgIHNjaGVtYXM6IHsgLi4uc3RhdGUuc2NoZW1hcywgW21vZHVsZU5hbWVdOiBpbXBsaWNpdENvbmZpZ1NjaGVtYSB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGFsbG93cyB0aGUgY29uZmlnIHN5c3RlbSB0byBzdXBwb3J0IHRyYW5zbGF0aW9uIG92ZXJyaWRlcyBmb3IgbmFtZXNwYWNlcyB0aGF0XG4gKiBkbyBub3QgY29ycmVzcG9uZCB0byBtb2R1bGVzLlxuICpcbiAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBlc20tYXBwLXNoZWxsLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIG5hbWVzcGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUcmFuc2xhdGlvbk5hbWVzcGFjZShuYW1lc3BhY2U6IHN0cmluZykge1xuICBjb25zdCBzdGF0ZSA9IGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSh7XG4gICAgc2NoZW1hczogeyAuLi5zdGF0ZS5zY2hlbWFzLCBbbmFtZXNwYWNlXTogdHJhbnNsYXRpb25PdmVycmlkZXNTY2hlbWEgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogVGhpcyBkZWZpbmVzIGEgY29uZmlndXJhdGlvbiBzY2hlbWEgZm9yIGFuIGV4dGVuc2lvbi4gV2hlbiBhIHNjaGVtYSBpcyBkZWZpbmVkXG4gKiBmb3IgYW4gZXh0ZW5zaW9uLCB0aGF0IGV4dGVuc2lvbiB3aWxsIHJlY2VpdmUgdGhlIGNvbmZpZ3VyYXRpb24gY29ycmVzcG9uZGluZ1xuICogdG8gdGhhdCBzY2hlbWEsIHJhdGhlciB0aGFuIHRoZSBjb25maWd1cmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZHVsZVxuICogaW4gd2hpY2ggaXQgaXMgZGVmaW5lZC5cbiAqXG4gKiBUaGUgc2NoZW1hIHRlbGxzIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBob3cgdGhlIG1vZHVsZSBjYW4gYmUgY29uZmlndXJlZC5cbiAqIEl0IHNwZWNpZmllcyB3aGF0IG1ha2VzIGNvbmZpZ3VyYXRpb24gdmFsaWQgb3IgaW52YWxpZC5cbiAqXG4gKiBTZWUgW0NvbmZpZ3VyYXRpb24gU3lzdGVtXShodHRwczovL28zLWRvY3Mub3Blbm1ycy5vcmcvZG9jcy9jb25maWd1cmF0aW9uLXN5c3RlbSlcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlZmluaW5nIGEgY29uZmlnIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0gZXh0ZW5zaW9uTmFtZSBOYW1lIG9mIHRoZSBleHRlbnNpb24gdGhlIHNjaGVtYSBpcyBiZWluZyBkZWZpbmVkIGZvci5cbiAqICAgU2hvdWxkIG1hdGNoIHRoZSBgbmFtZWAgb2Ygb25lIG9mIHRoZSBgZXh0ZW5zaW9uc2AgZW50cmllcyBiZWluZyByZXR1cm5lZFxuICogICBieSBgc2V0dXBPcGVuTVJTYC5cbiAqIEBwYXJhbSBzY2hlbWEgVGhlIGNvbmZpZyBzY2hlbWEgZm9yIHRoZSBleHRlbnNpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUV4dGVuc2lvbkNvbmZpZ1NjaGVtYShleHRlbnNpb25OYW1lOiBzdHJpbmcsIHNjaGVtYTogQ29uZmlnU2NoZW1hKSB7XG4gIHZhbGlkYXRlQ29uZmlnU2NoZW1hKGV4dGVuc2lvbk5hbWUsIHNjaGVtYSk7XG4gIGNvbnN0IGVuaGFuY2VkU2NoZW1hID0gbWVyZ2VEZWVwUmlnaHQoc2NoZW1hLCBpbXBsaWNpdENvbmZpZ1NjaGVtYSkgYXMgQ29uZmlnU2NoZW1hO1xuXG4gIGNvbnN0IHN0YXRlID0gY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpO1xuICBpZiAoc3RhdGUuc2NoZW1hc1tleHRlbnNpb25OYW1lXSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgQ29uZmlnIHNjaGVtYSBmb3IgZXh0ZW5zaW9uICR7ZXh0ZW5zaW9uTmFtZX0gYWxyZWFkeSBleGlzdHMuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBleHRlbnNpb25zIHdpdGggdGhpcyBzYW1lIG5hbWUsIG9uZSB3aWxsIHByb2JhYmx5IGNyYXNoLmAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoe1xuICAgIHNjaGVtYXM6IHsgLi4uc3RhdGUuc2NoZW1hcywgW2V4dGVuc2lvbk5hbWVdOiBlbmhhbmNlZFNjaGVtYSB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGUoY29uZmlnOiBDb25maWcsIHNvdXJjZU5hbWUgPSAncHJvdmlkZWQnKSB7XG4gIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoKHN0YXRlKSA9PiAoe1xuICAgIC4uLnN0YXRlLFxuICAgIHByb3ZpZGVkQ29uZmlnczogWy4uLnN0YXRlLnByb3ZpZGVkQ29uZmlncywgeyBzb3VyY2U6IHNvdXJjZU5hbWUsIGNvbmZpZyB9XSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIEEgcHJvbWlzZS1iYXNlZCB3YXkgdG8gYWNjZXNzIHRoZSBjb25maWcgYXMgc29vbiBhcyBpdCBpcyBmdWxseSBsb2FkZWQuXG4gKiBJZiBpdCBpcyBhbHJlYWR5IGxvYWRlZCwgcmVzb2x2ZXMgdGhlIGNvbmZpZyBpbiBpdHMgcHJlc2VudCBzdGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGEgdXNlZnVsIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGdldCB0aGUgY29uZmlnIGluIHRoZSBjb3Vyc2VcbiAqIG9mIHRoZSBleGVjdXRpb24gb2YgYSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIGZvciB3aGljaCB0byBsb29rIHVwIHRoZSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZzxUID0gUmVjb3JkPHN0cmluZywgYW55Pj4obW9kdWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHN0b3JlID0gZ2V0Q29uZmlnU3RvcmUobW9kdWxlTmFtZSk7XG4gICAgZnVuY3Rpb24gdXBkYXRlKHN0YXRlOiBDb25maWdTdG9yZSkge1xuICAgICAgaWYgKHN0YXRlLmxvYWRlZCAmJiBzdGF0ZS5jb25maWcpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gb21pdChbJ0Rpc3BsYXkgY29uZGl0aW9ucycsICdUcmFuc2xhdGlvbiBvdmVycmlkZXMnXSwgc3RhdGUuY29uZmlnKTtcbiAgICAgICAgcmVzb2x2ZShjb25maWcgYXMgVCk7XG4gICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZShzdG9yZS5nZXRTdGF0ZSgpKTtcbiAgICBjb25zdCB1bnN1YnNjcmliZSA9IHN0b3JlLnN1YnNjcmliZSh1cGRhdGUpO1xuICB9KTtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9uT3ZlcnJpZGVzKFxuICBtb2R1bGVOYW1lOiBzdHJpbmcsXG4gIHNsb3ROYW1lPzogc3RyaW5nLFxuICBleHRlbnNpb25JZD86IHN0cmluZyxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4+IHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgbmV3IFByb21pc2U8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBjb25maWdTdG9yZSA9IGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpO1xuICAgICAgZnVuY3Rpb24gdXBkYXRlKHN0YXRlOiBSZXR1cm5UeXBlPCh0eXBlb2YgY29uZmlnU3RvcmUpWydnZXRTdGF0ZSddPikge1xuICAgICAgICBpZiAoc3RhdGUudHJhbnNsYXRpb25PdmVycmlkZXNMb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25PdmVycmlkZXMgPSBzdGF0ZS5jb25maWdbJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcyddID8/IHt9O1xuICAgICAgICAgIHJlc29sdmUodHJhbnNsYXRpb25PdmVycmlkZXMpO1xuICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHVwZGF0ZShjb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gY29uZmlnU3RvcmUuc3Vic2NyaWJlKHVwZGF0ZSk7XG4gICAgfSksXG4gIF07XG5cbiAgaWYgKHNsb3ROYW1lICYmIGV4dGVuc2lvbklkKSB7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIG5ldyBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+PigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCBjb25maWdTdG9yZSA9IGdldEV4dGVuc2lvbkNvbmZpZyhzbG90TmFtZSwgZXh0ZW5zaW9uSWQpO1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGUoc3RhdGU6IFJldHVyblR5cGU8KHR5cGVvZiBjb25maWdTdG9yZSlbJ2dldFN0YXRlJ10+KSB7XG4gICAgICAgICAgaWYgKHN0YXRlLmxvYWRlZCAmJiBzdGF0ZS5jb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uT3ZlcnJpZGVzID0gc3RhdGUuY29uZmlnWydUcmFuc2xhdGlvbiBvdmVycmlkZXMnXSA/PyB7fTtcbiAgICAgICAgICAgIHJlc29sdmUodHJhbnNsYXRpb25PdmVycmlkZXMpO1xuICAgICAgICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlKGNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IGNvbmZpZ1N0b3JlLnN1YnNjcmliZSh1cGRhdGUpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigocmVzdWx0cykgPT4gcmVzdWx0cy5yZWR1Y2UoKHByZXYsIGN1cnJlbnQpID0+IG1lcmdlRGVlcFJpZ2h0KHByZXYsIGN1cnJlbnQpLCB7fSkpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGFuZCBpbnRlcnBvbGF0ZSBkZWZhdWx0cyBmb3IgYHByb3ZpZGVkQ29uZmlnYCBhY2NvcmRpbmcgdG8gYHNjaGVtYWBcbiAqXG4gKiBAcGFyYW0gc2NoZW1hICBhIGNvbmZpZ3VyYXRpb24gc2NoZW1hXG4gKiBAcGFyYW0gcHJvdmlkZWRDb25maWcgIGFuIG9iamVjdCBvZiBjb25maWcgdmFsdWVzICh3aXRob3V0IHRoZSB0b3AtbGV2ZWwgbW9kdWxlIG5hbWUpXG4gKiBAcGFyYW0ga2V5UGF0aENvbnRleHQgIGEgZG90LWRlcGFyYXRlZCBzdHJpbmcgd2hpY2ggaGVscHMgdGhlIHVzZXIgZmlndXJlIG91dCB3aGVyZVxuICogICAgIHRoZSBwcm92aWRlZCBjb25maWcgY2FtZSBmcm9tXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb25maWcoc2NoZW1hOiBDb25maWdTY2hlbWEsIHByb3ZpZGVkQ29uZmlnOiBDb25maWdPYmplY3QsIGtleVBhdGhDb250ZXh0OiBzdHJpbmcpIHtcbiAgdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hLCBwcm92aWRlZENvbmZpZywga2V5UGF0aENvbnRleHQpO1xuICBjb25zdCBjb25maWcgPSBzZXREZWZhdWx0cyhzY2hlbWEsIHByb3ZpZGVkQ29uZmlnKTtcbiAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWEsIGNvbmZpZywga2V5UGF0aENvbnRleHQpO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKlxuICogSGVscGVyIGZ1bmN0aW9uc1xuICpcbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFuIGV4dGVuc2lvbi4gVGhpcyBjb25maWd1cmF0aW9uIGlzIHNwZWNpZmljXG4gKiB0byB0aGUgc2xvdCBpbiB3aGljaCBpdCBpcyBtb3VudGVkLCBhbmQgaXRzIElEIHdpdGhpbiB0aGF0IHNsb3QuXG4gKlxuICogVGhlIHNjaGVtYSBmb3IgdGhhdCBjb25maWd1cmF0aW9uIGlzIHRoZSBleHRlbnNpb24gc2NoZW1hLiBJZiBubyBleHRlbnNpb25cbiAqIHNjaGVtYSBoYXMgYmVlbiBwcm92aWRlZCwgdGhlIHNjaGVtYSB1c2VkIGlzIHRoZSBzY2hlbWEgb2YgdGhlIG1vZHVsZSBpblxuICogd2hpY2ggdGhlIGV4dGVuc2lvbiBpcyBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSBzbG90TW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdoaWNoIGRlZmluZXMgdGhlIGV4dGVuc2lvbiBzbG90XG4gKiBAcGFyYW0gZXh0ZW5zaW9uTW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdoaWNoIGRlZmluZXMgdGhlIGV4dGVuc2lvbiAoYW5kIHRoZXJlZm9yZSB0aGUgY29uZmlnIHNjaGVtYSlcbiAqIEBwYXJhbSBzbG90TmFtZSBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHNsb3Qgd2hlcmUgdGhlIGV4dGVuc2lvbiBpcyBtb3VudGVkXG4gKiBAcGFyYW0gZXh0ZW5zaW9uSWQgVGhlIElEIG9mIHRoZSBleHRlbnNpb24gaW4gaXRzIHNsb3RcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUV4dGVuc2lvbkNvbmZpZyhcbiAgc2xvdE1vZHVsZU5hbWU6IHN0cmluZyxcbiAgZXh0ZW5zaW9uTW9kdWxlTmFtZTogc3RyaW5nLFxuICBzbG90TmFtZTogc3RyaW5nLFxuICBleHRlbnNpb25JZDogc3RyaW5nLFxuICBjb25maWdTdGF0ZTogQ29uZmlnSW50ZXJuYWxTdG9yZSxcbiAgdGVtcENvbmZpZ1N0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSxcbikge1xuICBjb25zdCBleHRlbnNpb25OYW1lID0gZ2V0RXh0ZW5zaW9uTmFtZUZyb21JZChleHRlbnNpb25JZCk7XG4gIGNvbnN0IGV4dGVuc2lvbkNvbmZpZ1NjaGVtYSA9IGNvbmZpZ1N0YXRlLnNjaGVtYXNbZXh0ZW5zaW9uTmFtZV07XG4gIGNvbnN0IG5hbWVPZlNjaGVtYVNvdXJjZSA9IGV4dGVuc2lvbkNvbmZpZ1NjaGVtYSA/IGV4dGVuc2lvbk5hbWUgOiBleHRlbnNpb25Nb2R1bGVOYW1lO1xuICBjb25zdCBwcm92aWRlZENvbmZpZ3MgPSBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gIGNvbnN0IHNsb3RNb2R1bGVDb25maWcgPSBtZXJnZUNvbmZpZ3NGb3Ioc2xvdE1vZHVsZU5hbWUsIHByb3ZpZGVkQ29uZmlncyk7XG4gIGNvbnN0IGNvbmZpZ092ZXJyaWRlID0gc2xvdE1vZHVsZUNvbmZpZz8uZXh0ZW5zaW9uU2xvdHM/LltzbG90TmFtZV0/LmNvbmZpZ3VyZT8uW2V4dGVuc2lvbklkXSA/PyB7fTtcbiAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnID0gbWVyZ2VDb25maWdzRm9yKG5hbWVPZlNjaGVtYVNvdXJjZSwgcHJvdmlkZWRDb25maWdzKTtcbiAgY29uc3QgY29tYmluZWRDb25maWcgPSBtZXJnZUNvbmZpZ3MoW2V4dGVuc2lvbkNvbmZpZywgY29uZmlnT3ZlcnJpZGVdKTtcbiAgY29uc3Qgc2NoZW1hID0gZXh0ZW5zaW9uQ29uZmlnU2NoZW1hID8/IGNvbmZpZ1N0YXRlLnNjaGVtYXNbZXh0ZW5zaW9uTW9kdWxlTmFtZV07XG4gIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYSwgY29tYmluZWRDb25maWcsIG5hbWVPZlNjaGVtYVNvdXJjZSk7XG4gIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKHNjaGVtYSwgY29tYmluZWRDb25maWcpO1xuICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBuYW1lT2ZTY2hlbWFTb3VyY2UpO1xuICBkZWxldGUgY29uZmlnLmV4dGVuc2lvblNsb3RzO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG5mdW5jdGlvbiBnZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnKFxuICBjb25maWdTdGF0ZTogQ29uZmlnSW50ZXJuYWxTdG9yZSxcbiAgdGVtcENvbmZpZ1N0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSxcbik6IFJlY29yZDxzdHJpbmcsIENvbmZpZz4ge1xuICBsZXQgcmVzdWx0ID0gZ2V0U2NoZW1hV2l0aFZhbHVlc0FuZFNvdXJjZXMoY2xvbmUoY29uZmlnU3RhdGUuc2NoZW1hcykpO1xuICBjb25zdCBjb25maWdzQW5kU291cmNlcyA9IFtcbiAgICAuLi5jb25maWdTdGF0ZS5wcm92aWRlZENvbmZpZ3MubWFwKChjKSA9PiBbYy5jb25maWcsIGMuc291cmNlXSksXG4gICAgW3RlbXBDb25maWdTdGF0ZS5jb25maWcsICd0ZW1wb3JhcnkgY29uZmlnJ10sXG4gIF0gYXMgQXJyYXk8W0NvbmZpZywgc3RyaW5nXT47XG4gIGZvciAobGV0IFtjb25maWcsIHNvdXJjZV0gb2YgY29uZmlnc0FuZFNvdXJjZXMpIHtcbiAgICByZXN1bHQgPSBtZXJnZUNvbmZpZ3MoW3Jlc3VsdCwgY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUoY29uZmlnLCBzb3VyY2UpXSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0U2NoZW1hV2l0aFZhbHVlc0FuZFNvdXJjZXMoc2NoZW1hKSB7XG4gIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ19kZWZhdWx0JykpIHtcbiAgICByZXR1cm4geyAuLi5zY2hlbWEsIF92YWx1ZTogc2NoZW1hLl9kZWZhdWx0LCBfc291cmNlOiAnZGVmYXVsdCcgfTtcbiAgfSBlbHNlIGlmIChpc09yZGluYXJ5T2JqZWN0KHNjaGVtYSkpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc2NoZW1hKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICBvYmpba2V5XSA9IGdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzKHNjaGVtYVtrZXldKTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30pO1xuICB9IGVsc2Uge1xuICAgIC8vIGF0IHRoaXMgcG9pbnQsIHRoZSBzY2hlbWEgaXMgYmFkIGFuZCBhbiBlcnJvciB3aWxsIGhhdmUgYmVlbiBsb2dnZWQgZHVyaW5nIHNjaGVtYSB2YWxpZGF0aW9uXG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlKGNvbmZpZzogQ29uZmlnT2JqZWN0LCBzb3VyY2U6IHN0cmluZykge1xuICBpZiAoaXNPcmRpbmFyeU9iamVjdChjb25maWcpKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgb2JqW2tleV0gPSBjcmVhdGVWYWx1ZXNBbmRTb3VyY2VzVHJlZShjb25maWdba2V5XSwgc291cmNlKTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IF92YWx1ZTogY29uZmlnLCBfc291cmNlOiBzb3VyY2UgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFeHRlbnNpb25TbG90Q29uZmlncyhcbiAgY29uZmlnU3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsXG4gIHRlbXBDb25maWdTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUsXG4pOiBSZWNvcmQ8c3RyaW5nLCBFeHRlbnNpb25TbG90Q29uZmlnT2JqZWN0PiB7XG4gIGNvbnN0IGFsbENvbmZpZ3MgPSBtZXJnZUNvbmZpZ3MoZ2V0UHJvdmlkZWRDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpKTtcbiAgY29uc3Qgc2xvdENvbmZpZ1Blck1vZHVsZTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRXh0ZW5zaW9uU2xvdENvbmZpZz4+ID0gT2JqZWN0LmtleXMoYWxsQ29uZmlncykucmVkdWNlKFxuICAgIChvYmosIGtleSkgPT4ge1xuICAgICAgaWYgKGFsbENvbmZpZ3Nba2V5XT8uZXh0ZW5zaW9uU2xvdHMpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhbGxDb25maWdzW2tleV0/LmV4dGVuc2lvblNsb3RzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIHt9LFxuICApO1xuICB2YWxpZGF0ZUFsbEV4dGVuc2lvblNsb3RDb25maWdzKHNsb3RDb25maWdQZXJNb2R1bGUpO1xuICBjb25zdCBzbG90Q29uZmlncyA9IE9iamVjdC5rZXlzKHNsb3RDb25maWdQZXJNb2R1bGUpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICBvYmogPSB7IC4uLm9iaiwgLi4uc2xvdENvbmZpZ1Blck1vZHVsZVtrZXldIH07XG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xuICByZXR1cm4gc2xvdENvbmZpZ3M7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQWxsRXh0ZW5zaW9uU2xvdENvbmZpZ3Moc2xvdENvbmZpZ1Blck1vZHVsZTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRXh0ZW5zaW9uU2xvdENvbmZpZz4+KSB7XG4gIGZvciAobGV0IFttb2R1bGVOYW1lLCBjb25maWdCeVNsb3ROYW1lXSBvZiBPYmplY3QuZW50cmllcyhzbG90Q29uZmlnUGVyTW9kdWxlKSkge1xuICAgIGZvciAobGV0IFtzbG90TmFtZSwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWdCeVNsb3ROYW1lKSkge1xuICAgICAgdmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnKGNvbmZpZywgbW9kdWxlTmFtZSwgc2xvdE5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4dGVuc2lvblNsb3RDb25maWcoY29uZmlnOiBFeHRlbnNpb25TbG90Q29uZmlnLCBtb2R1bGVOYW1lOiBzdHJpbmcsIHNsb3ROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qga2V5UGF0aCA9IGAke21vZHVsZU5hbWV9LmV4dGVuc2lvblNsb3RzLiR7c2xvdE5hbWV9YDtcbiAgY29uc3QgZXJyb3JQcmVmaXggPSBgRXh0ZW5zaW9uIHNsb3QgY29uZmlnICcke2tleVBhdGh9J2A7XG4gIGNvbnN0IGludmFsaWRLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKS5maWx0ZXIoKGspID0+ICFbJ2FkZCcsICdyZW1vdmUnLCAnb3JkZXInLCAnY29uZmlndXJlJ10uaW5jbHVkZXMoaykpO1xuICBpZiAoaW52YWxpZEtleXMubGVuZ3RoKSB7XG4gICAgbG9nRXJyb3Ioa2V5UGF0aCwgZXJyb3JQcmVmaXggKyBgJyBjb250YWlucyBpbnZhbGlkIGtleXMgJyR7aW52YWxpZEtleXMuam9pbihcIicsICdcIil9J2ApO1xuICB9XG4gIGlmIChjb25maWcuYWRkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5hZGQpIHx8ICFjb25maWcuYWRkLmV2ZXJ5KChuKSA9PiB0eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAuYWRkJyBpcyBpbnZhbGlkLiBNdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MgKGV4dGVuc2lvbiBJRHMpYCk7XG4gICAgfVxuICB9XG4gIGlmIChjb25maWcucmVtb3ZlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5yZW1vdmUpIHx8ICFjb25maWcucmVtb3ZlLmV2ZXJ5KChuKSA9PiB0eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAucmVtb3ZlJyBpcyBpbnZhbGlkLiBNdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MgKGV4dGVuc2lvbiBJRHMpYCk7XG4gICAgfVxuICB9XG4gIGlmIChjb25maWcub3JkZXIpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLm9yZGVyKSB8fCAhY29uZmlnLm9yZGVyLmV2ZXJ5KChuKSA9PiB0eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAub3JkZXInIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbmZpZy5jb25maWd1cmUpIHtcbiAgICBpZiAoIWlzT3JkaW5hcnlPYmplY3QoY29uZmlnLmNvbmZpZ3VyZSkpIHtcbiAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYC5jb25maWd1cmUnIGlzIGludmFsaWQuIE11c3QgYmUgYW4gb2JqZWN0IHdpdGggZXh0ZW5zaW9uIElEcyBmb3Iga2V5c2ApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsIHRlbXBDb25maWdTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUpOiBBcnJheTxDb25maWc+IHtcbiAgcmV0dXJuIFsuLi5jb25maWdTdGF0ZS5wcm92aWRlZENvbmZpZ3MubWFwKChjKSA9PiBjLmNvbmZpZyksIHRlbXBDb25maWdTdGF0ZS5jb25maWddO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgY29uZmlnIHNjaGVtYSBmb3IgYSBtb2R1bGUuIFNpbmNlIHByb2JsZW1zIGlkZW50aWZpZWQgaGVyZSBhcmUgcHJvZ3JhbW1pbmcgZXJyb3JzXG4gKiB0aGF0IGhvcGVmdWxseSB3aWxsIGJlIGNhdWdodCBkdXJpbmcgZGV2ZWxvcG1lbnQsIHRoaXMgZnVuY3Rpb24gbG9ncyBlcnJvcnMgdG8gdGhlIGNvbnNvbGUgZGlyZWN0bHk7XG4gKiBpdCdzIGZpbmUgaWYgd2Ugc3BhbSB0aGUgdXNlciB3aXRoIHRoZXNlIGVycm9ycy5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb25maWdTY2hlbWEobW9kdWxlTmFtZTogc3RyaW5nLCBzY2hlbWE6IENvbmZpZ1NjaGVtYSwga2V5UGF0aCA9ICcnKSB7XG4gIGNvbnN0IHVwZGF0ZU1lc3NhZ2UgPSBgUGxlYXNlIHZlcmlmeSB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgbGF0ZXN0IHZlcnNpb24gYW5kLCBpZiBzbywgYWxlcnQgdGhlIG1haW50YWluZXIuYDtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpLmZpbHRlcigoaykgPT4gIWsuc3RhcnRzV2l0aCgnXycpKSkge1xuICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArIChrZXlQYXRoICYmICcuJykgKyBrZXk7XG4gICAgY29uc3Qgc2NoZW1hUGFydCA9IHNjaGVtYVtrZXldIGFzIENvbmZpZ1NjaGVtYTtcblxuICAgIGlmICh0aGlzS2V5UGF0aCA9PT0gJ0Rpc3BsYXkgY29uZGl0aW9ucycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGAke21vZHVsZU5hbWV9IGRlY2xhcmVzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gY2FsbGVkIFwiRGlzcGxheSBjb25kaXRpb25zXCI7IHRoZSBcIkRpc3BsYXkgY29uZGl0aW9uc1wiIG9wdGlvbiBpcyBhIHJlc2VydmVkIG5hbWUuICR7dXBkYXRlTWVzc2FnZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpc0tleVBhdGggPT09ICdUcmFuc2xhdGlvbiBvdmVycmlkZXMnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgJHttb2R1bGVOYW1lfSBkZWNsYXJlcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbGxlZCBcIlRyYW5zbGF0aW9uIG92ZXJyaWRlc1wiOyB0aGUgXCJUcmFuc2xhdGlvbiBvdmVycmlkZXNcIiBvcHRpb24gaXMgYSByZXNlcnZlZCBuYW1lLiAke3VwZGF0ZU1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc09yZGluYXJ5T2JqZWN0KHNjaGVtYVBhcnQpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfWApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpKSB7XG4gICAgICAvLyByZWN1cnNlIGZvciBuZXN0ZWQgY29uZmlnIGtleXNcbiAgICAgIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYVBhcnQsIHRoaXNLZXlQYXRoKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50cyA9IHNjaGVtYVBhcnQuX2VsZW1lbnRzO1xuICAgIGlmIChoYXNPYmplY3RTY2hlbWEoZWxlbWVudHMpKSB7XG4gICAgICB2YWxpZGF0ZUNvbmZpZ1NjaGVtYShtb2R1bGVOYW1lLCBlbGVtZW50cywgdGhpc0tleVBhdGggKyAnLl9lbGVtZW50cycpO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWFQYXJ0Ll92YWxpZGF0b3JzKSB7XG4gICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2Ygc2NoZW1hUGFydC5fdmFsaWRhdG9ycykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgJHttb2R1bGVOYW1lfSBoYXMgaW52YWxpZCB2YWxpZGF0b3IgZm9yIGtleSAnJHt0aGlzS2V5UGF0aH0nICR7dXBkYXRlTWVzc2FnZX0uYCArXG4gICAgICAgICAgICAgIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHZhbGlkYXRvcnMgbXVzdCBiZSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gZWl0aGVyIGAgK1xuICAgICAgICAgICAgICBgdW5kZWZpbmVkIG9yIGFuIGVycm9yIHN0cmluZy4gUmVjZWl2ZWQgJHt2YWxpZGF0b3J9LmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHNjaGVtYVBhcnQuX3R5cGU7XG4gICAgaWYgKHZhbHVlVHlwZSAmJiAhT2JqZWN0LnZhbHVlcyhUeXBlKS5pbmNsdWRlcyh2YWx1ZVR5cGUpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgJHttb2R1bGVOYW1lfSBoYXMgaW52YWxpZCB0eXBlIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9JyAke3VwZGF0ZU1lc3NhZ2V9LmAgK1xuICAgICAgICAgIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHRoZSBhbGxvd2VkIHR5cGVzIGFyZSAke09iamVjdC52YWx1ZXMoVHlwZSkuam9pbignLCAnKX0uIGAgK1xuICAgICAgICAgIGBSZWNlaXZlZCAnJHt2YWx1ZVR5cGV9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIE9iamVjdC5rZXlzKHNjaGVtYVBhcnQpLmV2ZXJ5KChrKSA9PiBbJ19kZXNjcmlwdGlvbicsICdfdmFsaWRhdG9ycycsICdfZWxlbWVudHMnLCAnX3R5cGUnXS5pbmNsdWRlcyhrKSkgJiZcbiAgICAgICFrZXlQYXRoLmluY2x1ZGVzKCcuX2VsZW1lbnRzJylcbiAgICApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfS5gICtcbiAgICAgICAgICBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiBhbGwgY29uZmlnIGVsZW1lbnRzIG11c3QgaGF2ZSBhIGRlZmF1bHQuIGAgK1xuICAgICAgICAgIGBSZWNlaXZlZCAke0pTT04uc3RyaW5naWZ5KHNjaGVtYVBhcnQpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50cyAmJiB2YWx1ZVR5cGUgJiYgIVtUeXBlLkFycmF5LCBUeXBlLk9iamVjdF0uaW5jbHVkZXModmFsdWVUeXBlKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYCR7bW9kdWxlTmFtZX0gaGFzIGJhZCBjb25maWcgc2NoZW1hIGRlZmluaXRpb24gZm9yIGtleSAnJHt0aGlzS2V5UGF0aH0nLiAke3VwZGF0ZU1lc3NhZ2V9LmAgK1xuICAgICAgICAgIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHRoZSAnZWxlbWVudHMnIGtleSBvbmx5IHdvcmtzIHdpdGggJ190eXBlJyBlcXVhbCB0byAnQXJyYXknIG9yICdPYmplY3QnLiBgICtcbiAgICAgICAgICBgUmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZVR5cGUpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDb25maWdGb3JNb2R1bGUoXG4gIG1vZHVsZU5hbWU6IHN0cmluZyxcbiAgY29uZmlnU3RhdGU6IENvbmZpZ0ludGVybmFsU3RvcmUsXG4gIHRlbXBDb25maWdTdGF0ZTogVGVtcG9yYXJ5Q29uZmlnU3RvcmUsXG4pOiBDb25maWdPYmplY3Qge1xuICBjb25zdCBzY2hlbWEgPSBjb25maWdTdGF0ZS5zY2hlbWFzW21vZHVsZU5hbWVdO1xuICBjb25zdCBpbnB1dENvbmZpZyA9IG1lcmdlQ29uZmlnc0Zvcihtb2R1bGVOYW1lLCBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkpO1xuICB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIGlucHV0Q29uZmlnLCBtb2R1bGVOYW1lKTtcbiAgY29uc3QgY29uZmlnID0gc2V0RGVmYXVsdHMoc2NoZW1hLCBpbnB1dENvbmZpZyk7XG4gIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLCBjb25maWcsIG1vZHVsZU5hbWUpO1xuICBkZWxldGUgY29uZmlnLmV4dGVuc2lvblNsb3RzO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG5mdW5jdGlvbiBnZXRDb25maWdGb3JNb2R1bGVJbXBsaWNpdFNjaGVtYShcbiAgbW9kdWxlTmFtZTogc3RyaW5nLFxuICBjb25maWdTdGF0ZTogQ29uZmlnSW50ZXJuYWxTdG9yZSxcbiAgdGVtcENvbmZpZ1N0YXRlOiBUZW1wb3JhcnlDb25maWdTdG9yZSxcbik6IENvbmZpZ09iamVjdCB7XG4gIGNvbnN0IGlucHV0Q29uZmlnID0gbWVyZ2VDb25maWdzRm9yKG1vZHVsZU5hbWUsIGdldFByb3ZpZGVkQ29uZmlncyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSk7XG4gIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKGltcGxpY2l0Q29uZmlnU2NoZW1hLCBpbnB1dENvbmZpZyk7XG4gIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoaW1wbGljaXRDb25maWdTY2hlbWEsIGNvbmZpZywgbW9kdWxlTmFtZSk7XG4gIGRlbGV0ZSBjb25maWcuZXh0ZW5zaW9uU2xvdHM7XG4gIHJldHVybiBjb25maWc7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQ29uZmlnc0Zvcihtb2R1bGVOYW1lOiBzdHJpbmcsIGFsbENvbmZpZ3M6IEFycmF5PENvbmZpZz4pOiBDb25maWdPYmplY3Qge1xuICBjb25zdCBhbGxDb25maWdzRm9yTW9kdWxlID0gYWxsQ29uZmlncy5tYXAoKHsgW21vZHVsZU5hbWVdOiBjIH0pID0+IGMpLmZpbHRlcigoYykgPT4gISFjKTtcblxuICByZXR1cm4gbWVyZ2VDb25maWdzKGFsbENvbmZpZ3NGb3JNb2R1bGUpO1xufVxuXG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3MoY29uZmlnczogQXJyYXk8Q29uZmlnPikge1xuICBjb25zdCBtZXJnZURlZXBBbGwgPSByZWR1Y2UobWVyZ2VEZWVwUmlnaHQpO1xuICByZXR1cm4gbWVyZ2VEZWVwQWxsKHt9LCBjb25maWdzKSBhcyBDb25maWc7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgY2hlY2sgdGhlIHByb3ZpZGVkIGNvbmZpZyB0cmVlIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbFxuICogb2YgdGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgZXhpc3QgaW4gdGhlIHNjaGVtYSwgYW5kIHRoYXQgdHlwZXMgYXJlXG4gKiBjb3JyZWN0LiBEb2VzIG5vdCBydW4gdmFsaWRhdG9ycyB5ZXQsIHNpbmNlIHRob3NlIHdpbGwgYmUgcnVuIG9uXG4gKiB0aGUgY29uZmlnIHdpdGggdGhlIGRlZmF1bHRzIGZpbGxlZCBpbi5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hOiBDb25maWdTY2hlbWEsIGNvbmZpZzogQ29uZmlnT2JqZWN0LCBrZXlQYXRoID0gJycpIHtcbiAgLy8gdmFsaWRhdGUgZWFjaCBjb25zdGl0dWVudCBlbGVtZW50XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArICcuJyArIGtleTtcbiAgICBjb25zdCBzY2hlbWFQYXJ0ID0gc2NoZW1hW2tleV0gYXMgQ29uZmlnU2NoZW1hO1xuXG4gICAgaWYgKCFzY2hlbWEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYgKCEoa2V5ID09PSAnZXh0ZW5zaW9uU2xvdHMnICYmIGtleVBhdGggIT09ICcnKSkge1xuICAgICAgICBsb2dFcnJvcih0aGlzS2V5UGF0aCwgYFVua25vd24gY29uZmlnIGtleSAnJHt0aGlzS2V5UGF0aH0nIHByb3ZpZGVkLiBJZ25vcmluZy5gKTtcbiAgICAgIH1cblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIHRoaXNLZXlQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUJyYW5jaFN0cnVjdHVyZShzY2hlbWFQYXJ0OiBDb25maWdTY2hlbWEsIHZhbHVlOiBhbnksIGtleVBhdGg6IHN0cmluZykge1xuICBjaGVja1R5cGUoa2V5UGF0aCwgc2NoZW1hUGFydC5fdHlwZSwgdmFsdWUpO1xuXG4gIGlmIChpc09yZGluYXJ5T2JqZWN0KHZhbHVlKSkge1xuICAgIGlmIChzY2hlbWFQYXJ0Ll90eXBlID09PSBUeXBlLk9iamVjdCkge1xuICAgICAgLy8gdmFsaWRhdGUgYXMgZnJlZWZvcm0gb2JqZWN0XG4gICAgICB2YWxpZGF0ZUZyZWVmb3JtT2JqZWN0U3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKTtcbiAgICB9IGVsc2UgaWYgKCEoc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSB8fCBzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfdHlwZScpKSkge1xuICAgICAgLy8gdmFsaWRhdGUgYXMgbm9ybWFsIG5lc3RlZCBjb25maWdcbiAgICAgIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNjaGVtYVBhcnQuX3R5cGUgPT09IFR5cGUuQXJyYXkpIHtcbiAgICAgIHZhbGlkYXRlQXJyYXlTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIGtleVBhdGgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZyZWVmb3JtT2JqZWN0U3RydWN0dXJlKGZyZWVmb3JtT2JqZWN0U2NoZW1hOiBDb25maWdTY2hlbWEsIGNvbmZpZzogQ29uZmlnT2JqZWN0LCBrZXlQYXRoOiBzdHJpbmcpIHtcbiAgaWYgKGZyZWVmb3JtT2JqZWN0U2NoZW1hLl9lbGVtZW50cykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICB2YWxpZGF0ZVN0cnVjdHVyZShmcmVlZm9ybU9iamVjdFNjaGVtYS5fZWxlbWVudHMsIHZhbHVlLCBgJHtrZXlQYXRofS4ke2tleX1gKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBcnJheVN0cnVjdHVyZShhcnJheVNjaGVtYTogQ29uZmlnU2NoZW1hLCB2YWx1ZTogQ29uZmlnT2JqZWN0LCBrZXlQYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgdmFsaWRhdGVkQXNBcnJheSA9IGNoZWNrVHlwZShrZXlQYXRoLCBUeXBlLkFycmF5LCB2YWx1ZSk7XG4gIGlmICghdmFsaWRhdGVkQXNBcnJheSkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBpZiB0aGVyZSBpcyBhbiBhcnJheSBlbGVtZW50IG9iamVjdCBzY2hlbWEsIHZlcmlmeSB0aGF0IGVsZW1lbnRzIG1hdGNoIGl0XG4gIGlmIChoYXNPYmplY3RTY2hlbWEoYXJyYXlTY2hlbWEuX2VsZW1lbnRzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbGlkYXRlQnJhbmNoU3RydWN0dXJlKGFycmF5U2NoZW1hLl9lbGVtZW50cywgdmFsdWVbaV0sIGAke2tleVBhdGh9WyR7aX1dYCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIGNoZWNrVHlwZShgJHtrZXlQYXRofVske2l9XWAsIGFycmF5U2NoZW1hLl9lbGVtZW50cz8uX3R5cGUsIHZhbHVlW2ldKTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1biBhbGwgdGhlIHZhbGlkYXRvcnMgaW4gdGhlIGNvbmZpZyB0cmVlLiBUaGlzIHNob3VsZCBiZSBydW5cbiAqIG9uIHRoZSBjb25maWcgb2JqZWN0IGFmdGVyIGl0IGhhcyBiZWVuIGZpbGxlZCBpbiB3aXRoIGFsbCB0aGUgZGVmYXVsdHMsIHNpbmNlXG4gKiBoaWdoZXItbGV2ZWwgdmFsaWRhdG9ycyBtYXkgcmVmZXIgdG8gZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hOiBDb25maWdTY2hlbWEsIGNvbmZpZzogQ29uZmlnT2JqZWN0LCBrZXlQYXRoID0gJycpIHtcbiAgLy8gSWYgYCFzY2hlbWFgLCB0aGVyZSBzaG91bGQgaGF2ZSBiZWVuIGEgc3RydWN0dXJhbCB2YWxpZGF0aW9uIGVycm9yIHByaW50ZWQgYWxyZWFkeS5cbiAgaWYgKHNjaGVtYSkge1xuICAgIGlmIChjb25maWcgIT09IHNjaGVtYS5fZGVmYXVsdCkge1xuICAgICAgcnVuVmFsaWRhdG9ycyhrZXlQYXRoLCBzY2hlbWEuX3ZhbGlkYXRvcnMsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgaWYgKGlzT3JkaW5hcnlPYmplY3QoY29uZmlnKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgICAgICBjb25zdCB0aGlzS2V5UGF0aCA9IGtleVBhdGggKyAnLicgKyBrZXk7XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XSBhcyBDb25maWdTY2hlbWE7XG4gICAgICAgIGlmIChzY2hlbWEuX3R5cGUgPT09IFR5cGUuT2JqZWN0ICYmIHNjaGVtYS5fZWxlbWVudHMpIHtcbiAgICAgICAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYS5fZWxlbWVudHMsIHZhbHVlLCB0aGlzS2V5UGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWFQYXJ0LCB2YWx1ZSwgdGhpc0tleVBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZykgJiYgc2NoZW1hLl9lbGVtZW50cykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWEuX2VsZW1lbnRzLCBjb25maWdbaV0sIGAke2tleVBhdGh9WyR7aX1dYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUnVuIHR5cGUgdmFsaWRhdGlvbiBmb3IgdGhlIHZhbHVlLCBsb2dnaW5nIGFueSBlcnJvcnMuXG4gKiBAcmV0dXJucyB0cnVlIGlmIHZhbGlkYXRpb24gcGFzc2VzLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gY2hlY2tUeXBlKGtleVBhdGg6IHN0cmluZywgX3R5cGU6IFR5cGUgfCB1bmRlZmluZWQsIHZhbHVlOiBhbnkpIHtcbiAgaWYgKF90eXBlKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4gPSB7XG4gICAgICBBcnJheTogaXNBcnJheSxcbiAgICAgIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgICAgIENvbmNlcHRVdWlkOiBpc1V1aWQsXG4gICAgICBOdW1iZXI6IGlzTnVtYmVyLFxuICAgICAgT2JqZWN0OiBpc09iamVjdCxcbiAgICAgIFN0cmluZzogaXNTdHJpbmcsXG4gICAgICBVVUlEOiBpc1V1aWQsXG4gICAgICBQZXJzb25BdHRyaWJ1dGVUeXBlVXVpZDogaXNVdWlkLFxuICAgICAgUGF0aWVudElkZW50aWZpZXJUeXBlVXVpZDogaXNVdWlkLFxuICAgIH07XG4gICAgcmV0dXJuIHJ1blZhbGlkYXRvcnMoa2V5UGF0aCwgW3ZhbGlkYXRvcltfdHlwZV1dLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUnVucyB2YWxpZGF0b3JzLCBsb2dnaW5nIGVycm9ycy5cbiAqIEByZXR1cm5zIHRydWUgaWYgYWxsIHBhc3MsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gcnVuVmFsaWRhdG9ycyhrZXlQYXRoOiBzdHJpbmcsIHZhbGlkYXRvcnM6IEFycmF5PEZ1bmN0aW9uPiB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSkge1xuICBsZXQgcmV0dXJuVmFsdWUgPSB0cnVlO1xuICBpZiAodmFsaWRhdG9ycykge1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9ycykge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JSZXN1bHQgPSB2YWxpZGF0b3IodmFsdWUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yUmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gZm9yICR7a2V5UGF0aH06ICR7dmFsaWRhdG9yUmVzdWx0fWBcbiAgICAgICAgICAgICAgOiBgSW52YWxpZCBjb25maWd1cmF0aW9uIHZhbHVlICR7dmFsdWV9IGZvciAke2tleVBhdGh9OiAke3ZhbGlkYXRvclJlc3VsdH1gO1xuICAgICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIG1lc3NhZ2UpO1xuICAgICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBTa2lwcGluZyBpbnZhbGlkIHZhbGlkYXRvciBhdCBcIiR7a2V5UGF0aH1cIi4gRW5jb3VudGVyZWQgZXJyb3JcXG5cXHQke2V9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuLy8gUmVjdXJzaXZlbHkgZmlsbCBpbiB0aGUgY29uZmlnIHdpdGggdmFsdWVzIGZyb20gdGhlIHNjaGVtYS5cbmNvbnN0IHNldERlZmF1bHRzID0gKHNjaGVtYTogQ29uZmlnU2NoZW1hLCBpbnB1dENvbmZpZzogQ29uZmlnKSA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGNsb25lKGlucHV0Q29uZmlnKTtcblxuICBpZiAoIXNjaGVtYSkge1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKSB7XG4gICAgY29uc3QgY29uZmlnUGFydCA9IGNvbmZpZ1trZXldO1xuICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XSBhcyBDb25maWdTY2hlbWE7XG5cbiAgICAvLyBUaGUgYHNjaGVtYVBhcnQgJiZgIGNsYXVzZSBvZiB0aGlzIGBpZmAgc3RhdGVtZW50IHdpbGwgb25seSBmYWlsXG4gICAgLy8gaWYgdGhlIHNjaGVtYSBpcyB2ZXJ5IGludmFsaWQuIEl0IGlzIHRoZXJlIHRvIHByZXZlbnQgdGhlIGFwcCBmcm9tXG4gICAgLy8gY3Jhc2hpbmcgY29tcGxldGVseSwgdGhvdWdoIGl0IHdpbGwgcHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuICAgIC8vIElmIHRoaXMgaGFwcGVucywgdGhlcmUgc2hvdWxkIGJlIGxlZ2libGUgZXJyb3JzIGluIHRoZSBjb25zb2xlIGZyb21cbiAgICAvLyB0aGUgc2NoZW1hIHZhbGlkYXRvci5cbiAgICBpZiAoc2NoZW1hUGFydCAmJiAoc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX3R5cGUnKSB8fCBzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpKSkge1xuICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgc2NoZW1hUGFydCBkZWZpbmVzIGEgY29uZmlnIHZhbHVlLCBzaW5jZSBpdCBoYXNcbiAgICAgIC8vIGEgcHJvcGVydHkgYF90eXBlYCBvciBgX2RlZmF1bHRgLlxuICAgICAgaWYgKCFjb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAoY29uZmlnW2tleV0gYXMgYW55KSA9IHNjaGVtYVBhcnRbJ19kZWZhdWx0J107XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIGFsc28gY2hlY2sgaWYgaXQgaXMgYW4gb2JqZWN0IG9yIGFycmF5IHdpdGggb2JqZWN0IGVsZW1lbnRzLCBpbiB3aGljaCBjYXNlIHdlIHJlY3Vyc2VcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gc2NoZW1hUGFydC5fZWxlbWVudHM7XG5cbiAgICAgIGlmIChjb25maWdQYXJ0ICYmIGhhc09iamVjdFNjaGVtYShlbGVtZW50cykpIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhcnQuX3R5cGUgPT09IFR5cGUuQXJyYXkgJiYgQXJyYXkuaXNBcnJheShjb25maWdQYXJ0KSkge1xuICAgICAgICAgIGNvbnN0IGNvbmZpZ1dpdGhEZWZhdWx0cyA9IGNvbmZpZ1BhcnQubWFwKChjb25mOiBDb25maWcpID0+IHNldERlZmF1bHRzKGVsZW1lbnRzLCBjb25mKSk7XG4gICAgICAgICAgY29uZmlnW2tleV0gPSBjb25maWdXaXRoRGVmYXVsdHM7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hUGFydC5fdHlwZSA9PT0gVHlwZS5PYmplY3QpIHtcbiAgICAgICAgICBmb3IgKGxldCBvYmplY3RLZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnUGFydCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ1BhcnRbb2JqZWN0S2V5XSA9IHNldERlZmF1bHRzKGVsZW1lbnRzLCBjb25maWdQYXJ0W29iamVjdEtleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPcmRpbmFyeU9iamVjdChzY2hlbWFQYXJ0KSkge1xuICAgICAgLy8gU2luY2Ugc2NoZW1hUGFydCBoYXMgbm8gcHJvcGVydHkgXCJfdHlwZVwiLCBpZiBpdCdzIGFuIG9yZGluYXJ5IG9iamVjdFxuICAgICAgLy8gKHVubGlrZSwgaW1wb3J0YW50bHksIHRoZSB2YWxpZGF0b3JzIGFycmF5KSwgd2UgYXNzdW1lIGl0IGlzIGEgcGFyZW50IGNvbmZpZyBwcm9wZXJ0eS5cbiAgICAgIC8vIFdlIHJlY3Vyc2UgdG8gY29uZmlnW2tleV0gYW5kIHNjaGVtYVtrZXldLiBEZWZhdWx0IGNvbmZpZ1trZXldIHRvIHt9LlxuICAgICAgY29uc3Qgc2VsZWN0ZWRDb25maWdQYXJ0ID0gY29uZmlnUGFydCA/PyB7fTtcblxuICAgICAgLy8gVGhlcmUgd2lsbCBoYXZlIGJlZW4gYSB2YWxpZGF0aW9uIGVycm9yIGFscmVhZHkgaWYgY29uZmlnUGFydCBpcyBub3QgYSBwbGFpbiBvYmplY3QuXG4gICAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChzZWxlY3RlZENvbmZpZ1BhcnQpKSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gc2V0RGVmYXVsdHMoc2NoZW1hUGFydCwgc2VsZWN0ZWRDb25maWdQYXJ0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufTtcblxuZnVuY3Rpb24gaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzU2NoZW1hOiBPYmplY3QgfCB1bmRlZmluZWQpOiBlbGVtZW50c1NjaGVtYSBpcyBDb25maWdTY2hlbWEge1xuICByZXR1cm4gKFxuICAgICEhZWxlbWVudHNTY2hlbWEgJiYgT2JqZWN0LmtleXMoZWxlbWVudHNTY2hlbWEpLmZpbHRlcigoZSkgPT4gIVsnX2RlZmF1bHQnLCAnX3ZhbGlkYXRvcnMnXS5pbmNsdWRlcyhlKSkubGVuZ3RoID4gMFxuICApO1xufVxuXG5mdW5jdGlvbiBpc09yZGluYXJ5T2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuLyoqIEtlZXAgdHJhY2sgb2Ygd2hpY2ggdmFsaWRhdGlvbiBlcnJvcnMgd2UgaGF2ZSBkaXNwbGF5ZWQuIEVhY2ggb25lIHNob3VsZCBvbmx5IGJlIGRpc3BsYXllZCBvbmNlLiAqL1xuY29uc3QgZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yKGtleVBhdGg6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gIGNvbnN0IGtleSA9IGAke2tleVBhdGh9Ojo6JHttZXNzYWdlfWA7XG4gIGlmICghZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzLmhhcyhrZXkpKSB7XG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICBkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMuYWRkKGtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxseSwgY29uZmlndXJhdGlvbiBlcnJvcnMgYXJlIG9ubHkgZGlzcGxheWVkIG9uY2UuIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBsaXN0IG9mXG4gKiBkaXNwbGF5ZWQgZXJyb3JzLCBzbyB0aGF0IHRoZXkgd2lsbCBiZSBkaXNwbGF5ZWQgYWdhaW4uXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNvbmZpZ0Vycm9ycyhrZXlQYXRoPzogc3RyaW5nKSB7XG4gIGlmIChrZXlQYXRoKSB7XG4gICAgZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGtleVBhdGgpKSB7XG4gICAgICAgIGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcy5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMuY2xlYXIoKTtcbiAgfVxufVxuXG4vKipcbiAqIENvcGllZCBvdmVyIGZyb20gZXNtLWV4dGVuc2lvbnMuIEl0IHJpZ2h0bHkgYmVsb25ncyB0byB0aGF0IG1vZHVsZSwgYnV0IGVzbS1jb25maWdcbiAqIGNhbm5vdCBkZXBlbmQgb24gZXNtLWV4dGVuc2lvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbk5hbWVGcm9tSWQoZXh0ZW5zaW9uSWQ6IHN0cmluZykge1xuICBjb25zdCBbZXh0ZW5zaW9uTmFtZV0gPSBleHRlbnNpb25JZC5zcGxpdCgnIycpO1xuICByZXR1cm4gZXh0ZW5zaW9uTmFtZTtcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNsYXRpb24gb3ZlcnJpZGVzIHNjaGVtYSBpcyB1c2VkIGluIHRoZSBpbXBsaWNpdCBzY2hlbWEgZ2l2ZW4gdG8gZXZlcnkgbW9kdWxlO1xuICogcGx1cyBhbnkgYWRkaXRpb25hbCB0cmFuc2xhdGlvbiBuYW1lc3BhY2VzIChhdCB0aW1lIG9mIHdyaXRpbmcsIHRoaXMgaXMganVzdCAnY29yZScpLlxuICovXG5jb25zdCB0cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYTogQ29uZmlnU2NoZW1hID0ge1xuICAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJzoge1xuICAgIF9kZXNjcmlwdGlvbjpcbiAgICAgICdQZXItbGFuZ3VhZ2Ugb3ZlcnJpZGVzIGZvciBmcm9udGVuZCB0cmFuc2xhdGlvbnMgc2hvdWxkIGJlIGtleWVkIGJ5IGxhbmd1YWdlIGNvZGUgYW5kIGVhY2ggbGFuZ3VhZ2UgZGljdGlvbmFyeSBjb250YWlucyB0aGUgdHJhbnNsYXRpb24ga2V5IGFuZCB0aGUgZGlzcGxheSB2YWx1ZScsXG4gICAgX3R5cGU6IFR5cGUuT2JqZWN0LFxuICAgIF9kZWZhdWx0OiB7fSxcbiAgICBfdmFsaWRhdG9yczogW1xuICAgICAgdmFsaWRhdG9yKFxuICAgICAgICAobykgPT4gT2JqZWN0LmtleXMobykuZXZlcnkoKGspID0+IC9eW2Etel17MiwzfSgtW0EtWl17MiwzfSk/JC8udGVzdChrKSksXG4gICAgICAgIChvKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFkS2V5cyA9IE9iamVjdC5rZXlzKG8pLmZpbHRlcigoaykgPT4gIS9eW2Etel17MiwzfSgtW0EtWl17MiwzfSk/JC8udGVzdChrKSk7XG4gICAgICAgICAgcmV0dXJuIGBUaGUgJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcycgb2JqZWN0IHNob3VsZCBoYXZlIGxhbmd1YWdlIGNvZGVzIGZvciBrZXlzLiBMYW5ndWFnZSBjb2RlcyBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgdHdvLXRvLXRocmVlIGxldHRlciBsYW5ndWFnZSBjb2RlIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBoeXBoZW4gYW5kIGEgdHdvLXRvLXRocmVlIGxldHRlciBjb3VudHJ5IGNvZGUuIFRoZSBmb2xsb3dpbmcga2V5cyBkbyBub3QgY29uZm9ybTogJHtiYWRLZXlzLmpvaW4oXG4gICAgICAgICAgICAnLCAnLFxuICAgICAgICAgICl9LmA7XG4gICAgICAgIH0sXG4gICAgICApLFxuICAgIF0sXG4gIH0sXG59O1xuXG4vKipcbiAqIFRoZSBpbXBsaWNpdENvbmZpZ1NjaGVtYSBpcyBpbXBsaWNpdGx5IGluY2x1ZGVkIGluIGV2ZXJ5IGNvbmZpZ3VyYXRpb24gc2NoZW1hXG4gKi9cbmNvbnN0IGltcGxpY2l0Q29uZmlnU2NoZW1hOiBDb25maWdTY2hlbWEgPSB7XG4gICdEaXNwbGF5IGNvbmRpdGlvbnMnOiB7XG4gICAgcHJpdmlsZWdlczoge1xuICAgICAgX2Rlc2NyaXB0aW9uOiAnVGhlIHByaXZpbGVnZShzKSB0aGUgdXNlciBtdXN0IGhhdmUgdG8gdXNlIHRoaXMgZXh0ZW5zaW9uJyxcbiAgICAgIF90eXBlOiBUeXBlLkFycmF5LFxuICAgICAgX2RlZmF1bHQ6IFtdLFxuICAgIH0sXG4gIH0sXG4gIC4uLnRyYW5zbGF0aW9uT3ZlcnJpZGVzU2NoZW1hLFxufTtcbiJdLCJuYW1lcyI6WyJjbG9uZSIsInJlZHVjZSIsIm1lcmdlRGVlcFJpZ2h0IiwiZXF1YWxzIiwib21pdCIsIlR5cGUiLCJpc0FycmF5IiwiaXNCb29sZWFuIiwiaXNVdWlkIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzU3RyaW5nIiwidmFsaWRhdG9yIiwiY29uZmlnSW50ZXJuYWxTdG9yZSIsImNvbmZpZ0V4dGVuc2lvblN0b3JlIiwiZ2V0Q29uZmlnU3RvcmUiLCJnZXRFeHRlbnNpb25Db25maWciLCJnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUiLCJpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUiLCJ0ZW1wb3JhcnlDb25maWdTdG9yZSIsImdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUiLCJjb21wdXRlTW9kdWxlQ29uZmlnIiwiZ2V0U3RhdGUiLCJzdWJzY3JpYmUiLCJjb25maWdTdGF0ZSIsInRlbXBDb25maWdTdGF0ZSIsImNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnIiwiY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzIiwiY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MiLCJleHRlbnNpb25TdGF0ZSIsInN0YXRlIiwidGVtcFN0YXRlIiwiT2JqZWN0Iiwia2V5cyIsInNjaGVtYXMiLCJtb2R1bGVOYW1lIiwibW9kdWxlU3RvcmUiLCJtb2R1bGVMb2FkZWQiLCJjb25maWciLCJnZXRDb25maWdGb3JNb2R1bGUiLCJzZXRTdGF0ZSIsInRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkIiwibG9hZGVkIiwiZ2V0Q29uZmlnRm9yTW9kdWxlSW1wbGljaXRTY2hlbWEiLCJzbG90Q29uZmlncyIsImdldEV4dGVuc2lvblNsb3RDb25maWdzIiwibmV3U2xvdFN0b3JlRW50cmllcyIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsIm1hcCIsInNsb3ROYW1lIiwic2xvdFN0b3JlIiwib2xkU3RhdGUiLCJuZXdTdGF0ZSIsInNsb3RzIiwiZ2V0SW1wbGVtZW50ZXJUb29sc0NvbmZpZyIsImNvbmZpZ3MiLCJtb3VudGVkRXh0ZW5zaW9ucyIsImV4dGVuc2lvbiIsImNvbXB1dGVFeHRlbnNpb25Db25maWciLCJzbG90TW9kdWxlTmFtZSIsImV4dGVuc2lvbk1vZHVsZU5hbWUiLCJleHRlbnNpb25JZCIsImRlZmluZUNvbmZpZ1NjaGVtYSIsInNjaGVtYSIsInZhbGlkYXRlQ29uZmlnU2NoZW1hIiwiZW5oYW5jZWRTY2hlbWEiLCJpbXBsaWNpdENvbmZpZ1NjaGVtYSIsInJlZ2lzdGVyTW9kdWxlV2l0aENvbmZpZ1N5c3RlbSIsInJlZ2lzdGVyVHJhbnNsYXRpb25OYW1lc3BhY2UiLCJuYW1lc3BhY2UiLCJ0cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYSIsImRlZmluZUV4dGVuc2lvbkNvbmZpZ1NjaGVtYSIsImV4dGVuc2lvbk5hbWUiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm92aWRlIiwic291cmNlTmFtZSIsInByb3ZpZGVkQ29uZmlncyIsInNvdXJjZSIsImdldENvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwidXBkYXRlIiwidW5zdWJzY3JpYmUiLCJzdG9yZSIsImdldFRyYW5zbGF0aW9uT3ZlcnJpZGVzIiwicHJvbWlzZXMiLCJ0cmFuc2xhdGlvbk92ZXJyaWRlcyIsImNvbmZpZ1N0b3JlIiwicHVzaCIsImFsbCIsInRoZW4iLCJyZXN1bHRzIiwicHJldiIsImN1cnJlbnQiLCJwcm9jZXNzQ29uZmlnIiwicHJvdmlkZWRDb25maWciLCJrZXlQYXRoQ29udGV4dCIsInZhbGlkYXRlU3RydWN0dXJlIiwic2V0RGVmYXVsdHMiLCJydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlIiwic2xvdE1vZHVsZUNvbmZpZyIsImdldEV4dGVuc2lvbk5hbWVGcm9tSWQiLCJleHRlbnNpb25Db25maWdTY2hlbWEiLCJuYW1lT2ZTY2hlbWFTb3VyY2UiLCJnZXRQcm92aWRlZENvbmZpZ3MiLCJtZXJnZUNvbmZpZ3NGb3IiLCJjb25maWdPdmVycmlkZSIsImV4dGVuc2lvblNsb3RzIiwiY29uZmlndXJlIiwiZXh0ZW5zaW9uQ29uZmlnIiwiY29tYmluZWRDb25maWciLCJtZXJnZUNvbmZpZ3MiLCJyZXN1bHQiLCJnZXRTY2hlbWFXaXRoVmFsdWVzQW5kU291cmNlcyIsImNvbmZpZ3NBbmRTb3VyY2VzIiwiYyIsImNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlIiwiaGFzT3duUHJvcGVydHkiLCJfdmFsdWUiLCJfZGVmYXVsdCIsIl9zb3VyY2UiLCJpc09yZGluYXJ5T2JqZWN0Iiwib2JqIiwia2V5IiwiYWxsQ29uZmlncyIsInNsb3RDb25maWdQZXJNb2R1bGUiLCJ2YWxpZGF0ZUFsbEV4dGVuc2lvblNsb3RDb25maWdzIiwiY29uZmlnQnlTbG90TmFtZSIsInZhbGlkYXRlRXh0ZW5zaW9uU2xvdENvbmZpZyIsImtleVBhdGgiLCJlcnJvclByZWZpeCIsImludmFsaWRLZXlzIiwiZmlsdGVyIiwiayIsImluY2x1ZGVzIiwibGVuZ3RoIiwibG9nRXJyb3IiLCJqb2luIiwiYWRkIiwiQXJyYXkiLCJldmVyeSIsIm4iLCJyZW1vdmUiLCJvcmRlciIsInVwZGF0ZU1lc3NhZ2UiLCJ0aGlzS2V5UGF0aCIsInNjaGVtYVBhcnQiLCJlbGVtZW50cyIsIl9lbGVtZW50cyIsImhhc09iamVjdFNjaGVtYSIsIl92YWxpZGF0b3JzIiwidmFsdWVUeXBlIiwiX3R5cGUiLCJ2YWx1ZXMiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRzV2l0aCIsImlucHV0Q29uZmlnIiwiYWxsQ29uZmlnc0Zvck1vZHVsZSIsIm1lcmdlRGVlcEFsbCIsInZhbHVlIiwidmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUiLCJjaGVja1R5cGUiLCJ2YWxpZGF0ZUZyZWVmb3JtT2JqZWN0U3RydWN0dXJlIiwidmFsaWRhdGVBcnJheVN0cnVjdHVyZSIsImZyZWVmb3JtT2JqZWN0U2NoZW1hIiwiYXJyYXlTY2hlbWEiLCJ2YWxpZGF0ZWRBc0FycmF5IiwiaSIsInJ1blZhbGlkYXRvcnMiLCJCb29sZWFuIiwiQ29uY2VwdFV1aWQiLCJOdW1iZXIiLCJTdHJpbmciLCJVVUlEIiwiUGVyc29uQXR0cmlidXRlVHlwZVV1aWQiLCJQYXRpZW50SWRlbnRpZmllclR5cGVVdWlkIiwidmFsaWRhdG9ycyIsInJldHVyblZhbHVlIiwidmFsaWRhdG9yUmVzdWx0IiwibWVzc2FnZSIsImUiLCJjb25maWdQYXJ0IiwiY29uZmlnV2l0aERlZmF1bHRzIiwiY29uZiIsIm9iamVjdEtleSIsInNlbGVjdGVkQ29uZmlnUGFydCIsImVsZW1lbnRzU2NoZW1hIiwiZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzIiwiU2V0IiwiaGFzIiwiY2xlYXJDb25maWdFcnJvcnMiLCJmb3JFYWNoIiwiZGVsZXRlIiwiY2xlYXIiLCJzcGxpdCIsIl9kZXNjcmlwdGlvbiIsIm8iLCJ0ZXN0IiwiYmFkS2V5cyIsInByaXZpbGVnZXMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-config/src/module-config/module-config.ts\n");
529
529
 
530
530
  /***/ }),
531
531
 
@@ -535,7 +535,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
535
535
  \*************************************************************/
536
536
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
537
537
 
538
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ configExtensionStore: () => (/* binding */ configExtensionStore),\n/* harmony export */ configInternalStore: () => (/* binding */ configInternalStore),\n/* harmony export */ getConfigStore: () => (/* binding */ getConfigStore),\n/* harmony export */ getExtensionConfig: () => (/* binding */ getExtensionConfig),\n/* harmony export */ getExtensionConfigFromStore: () => (/* binding */ getExtensionConfigFromStore),\n/* harmony export */ getExtensionSlotConfig: () => (/* binding */ getExtensionSlotConfig),\n/* harmony export */ getExtensionSlotConfigFromStore: () => (/* binding */ getExtensionSlotConfigFromStore),\n/* harmony export */ getExtensionSlotsConfigStore: () => (/* binding */ getExtensionSlotsConfigStore),\n/* harmony export */ getExtensionsConfigStore: () => (/* binding */ getExtensionsConfigStore),\n/* harmony export */ implementerToolsConfigStore: () => (/* binding */ implementerToolsConfigStore),\n/* harmony export */ temporaryConfigStore: () => (/* binding */ temporaryConfigStore)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-state */ \"../../framework/esm-state/src/index.ts\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/omit.js\");\n/** @module @category Config */ \n\nvar configInternalStoreInitialValue = {\n providedConfigs: [],\n schemas: {},\n moduleLoaded: {}\n};\n/**\n * @internal\n */ var configInternalStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)(\"config-internal\", configInternalStoreInitialValue);\n/** @internal */ var temporaryConfigStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)(\"temporary-config\", {\n config: getTemporaryConfig()\n});\ntemporaryConfigStore.subscribe(function(state) {\n setTemporaryConfig(state.config);\n});\nfunction setTemporaryConfig(value) {\n localStorage.setItem(\"openmrs:temporaryConfig\", JSON.stringify(value));\n}\nfunction getTemporaryConfig() {\n try {\n return JSON.parse(localStorage.getItem(\"openmrs:temporaryConfig\") || \"{}\");\n } catch (e) {\n return {};\n }\n}\n/** @internal */ var configExtensionStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)(\"config-store-of-extension-state\", {\n mountedExtensions: []\n});\nfunction initializeConfigStore() {\n return {\n config: null,\n loaded: false,\n translationOverridesLoaded: false\n };\n}\n/** @internal */ function getConfigStore(moduleName) {\n // We use a store for each module's config, named `config-${moduleName}`\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(\"config-module-\".concat(moduleName), initializeConfigStore());\n}\n/** @internal */ function getExtensionSlotsConfigStore() {\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(\"config-extension-slots\", {\n slots: {}\n });\n}\n/** @internal */ function getExtensionSlotConfig(slotName) {\n return getExtensionSlotConfigFromStore(getExtensionSlotsConfigStore().getState(), slotName);\n}\n/** @internal */ function getExtensionSlotConfigFromStore(state, slotName) {\n var slotConfig = state.slots[slotName];\n return slotConfig !== null && slotConfig !== void 0 ? slotConfig : {\n loaded: false,\n config: {}\n };\n}\n/**\n * One store for all the extensions\n * @internal\n */ function getExtensionsConfigStore() {\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(\"config-extensions\", {\n configs: {}\n });\n}\n/** @internal */ function getExtensionConfig(slotName, extensionId) {\n var extensionConfig = Object.assign({}, getExtensionConfigFromStore(getExtensionsConfigStore().getState(), slotName, extensionId));\n extensionConfig.config = (0,ramda__WEBPACK_IMPORTED_MODULE_1__[\"default\"])([\n \"Display conditions\",\n \"Translation overrides\"\n ], extensionConfig.config);\n return extensionConfig;\n}\n/** @internal */ function getExtensionConfigFromStore(state, slotName, extensionId) {\n var _state_configs_slotName;\n var extensionConfig = (_state_configs_slotName = state.configs[slotName]) === null || _state_configs_slotName === void 0 ? void 0 : _state_configs_slotName[extensionId];\n return extensionConfig !== null && extensionConfig !== void 0 ? extensionConfig : {\n loaded: false,\n config: null\n };\n}\n/** @internal */ var implementerToolsConfigStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)(\"config-implementer-tools\", {\n config: {}\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvc3JjL21vZHVsZS1jb25maWcvc3RhdGUudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE2QixHQUMwQztBQUMxQztBQXFCN0IsSUFBTUcsa0NBQWtDO0lBQ3RDQyxpQkFBaUIsRUFBRTtJQUNuQkMsU0FBUyxDQUFDO0lBQ1ZDLGNBQWMsQ0FBQztBQUNqQjtBQUVBOztDQUVDLEdBQ00sSUFBTUMsc0JBQXNCUCxxRUFBaUJBLENBQ2xELG1CQUNBRyxpQ0FDQTtBQVdGLGNBQWMsR0FDUCxJQUFNSyx1QkFBdUJSLHFFQUFpQkEsQ0FBdUIsb0JBQW9CO0lBQzlGUyxRQUFRQztBQUNWLEdBQUc7QUFFSEYscUJBQXFCRyxTQUFTLENBQUMsU0FBQ0MsT0FBVTtJQUN4Q0MsbUJBQW1CRCxNQUFNSCxNQUFNO0FBQ2pDO0FBRUEsU0FBU0ksbUJBQW1CQyxLQUFhLEVBQUU7SUFDekNDLGFBQWFDLE9BQU8sQ0FBQywyQkFBMkJDLEtBQUtDLFNBQVMsQ0FBQ0o7QUFDakU7QUFFQSxTQUFTSixxQkFBNkI7SUFDcEMsSUFBSTtRQUNGLE9BQU9PLEtBQUtFLEtBQUssQ0FBQ0osYUFBYUssT0FBTyxDQUFDLDhCQUE4QjtJQUN2RSxFQUFFLE9BQU9DLEdBQUc7UUFDVixPQUFPLENBQUM7SUFDVjtBQUNGO0FBcUJBLGNBQWMsR0FDUCxJQUFNQyx1QkFBdUJ0QixxRUFBaUJBLENBQXVCLG1DQUFtQztJQUM3R3VCLG1CQUFtQixFQUFFO0FBQ3ZCLEdBQUc7QUFjSCxTQUFTQyx3QkFBd0I7SUFDL0IsT0FBTztRQUNMZixRQUFRLElBQUk7UUFDWmdCLFFBQVEsS0FBSztRQUNiQyw0QkFBNEIsS0FBSztJQUNuQztBQUNGO0FBRUEsY0FBYyxHQUNQLFNBQVNDLGVBQWVDLFVBQWtCLEVBQUU7SUFDakQsd0VBQXdFO0lBQ3hFLE9BQU8zQixrRUFBY0EsQ0FBYyxpQkFBNEIsT0FBWDJCLGFBQWNKO0FBQ3BFLENBQUM7QUFlRCxjQUFjLEdBQ1AsU0FBU0ssK0JBQStCO0lBQzdDLE9BQU81QixrRUFBY0EsQ0FBNkIsMEJBQXlCO1FBQ3pFNkIsT0FBTyxDQUFDO0lBQ1Y7QUFDRixDQUFDO0FBRUQsY0FBYyxHQUNQLFNBQVNDLHVCQUF1QkMsUUFBZ0IsRUFBRTtJQUN2RCxPQUFPQyxnQ0FBZ0NKLCtCQUErQkssUUFBUSxJQUFJRjtBQUNwRixDQUFDO0FBRUQsY0FBYyxHQUNQLFNBQVNDLGdDQUFnQ3JCLEtBQWdDLEVBQUVvQixRQUFnQixFQUFFO0lBQ2xHLElBQU1HLGFBQWF2QixNQUFNa0IsS0FBSyxDQUFDRSxTQUFTO0lBQ3hDLE9BQU9HLHVCQUFBQSx3QkFBQUEsYUFBYztRQUFFVixRQUFRLEtBQUs7UUFBRWhCLFFBQVEsQ0FBQztJQUFFLENBQUM7QUFDcEQsQ0FBQztBQVdEOzs7Q0FHQyxHQUNNLFNBQVMyQiwyQkFBMkI7SUFDekMsT0FBT25DLGtFQUFjQSxDQUF5QixxQkFBb0I7UUFDaEVvQyxTQUFTLENBQUM7SUFDWjtBQUNGLENBQUM7QUFFRCxjQUFjLEdBQ1AsU0FBU0MsbUJBQW1CTixRQUFnQixFQUFFTyxXQUFtQixFQUFFO0lBQ3hFLElBQU1DLGtCQUFrQkMsT0FBT0MsTUFBTSxDQUNuQyxDQUFDLEdBQ0RDLDRCQUE0QlAsMkJBQTJCRixRQUFRLElBQUlGLFVBQVVPO0lBRS9FQyxnQkFBZ0IvQixNQUFNLEdBQUdQLGlEQUFJQSxDQUFDO1FBQUM7UUFBc0I7S0FBd0IsRUFBRXNDLGdCQUFnQi9CLE1BQU07SUFDckcsT0FBTytCO0FBQ1QsQ0FBQztBQUVELGNBQWMsR0FDUCxTQUFTRyw0QkFBNEIvQixLQUE0QixFQUFFb0IsUUFBZ0IsRUFBRU8sV0FBbUIsRUFBRTtRQUN2RjNCO0lBQXhCLElBQU00QixrQkFBa0I1QixDQUFBQSwwQkFBQUEsTUFBTXlCLE9BQU8sQ0FBQ0wsU0FBUyxjQUF2QnBCLHFDQUFBQSxLQUFBQSxJQUFBQSx1QkFBeUIsQ0FBQzJCLFlBQVk7SUFDOUQsT0FBT0MsNEJBQUFBLDZCQUFBQSxrQkFBbUI7UUFBRWYsUUFBUSxLQUFLO1FBQUVoQixRQUFRLElBQUk7SUFBQyxDQUFDO0FBQzNELENBQUM7QUFVRCxjQUFjLEdBQ1AsSUFBTW1DLDhCQUE4QjVDLHFFQUFpQkEsQ0FBOEIsNEJBQTRCO0lBQ3BIUyxRQUFRLENBQUM7QUFDWCxHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9zcmMvbW9kdWxlLWNvbmZpZy9zdGF0ZS50cz8zMzMyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBDb25maWcgKi9cbmltcG9ydCB7IGNyZWF0ZUdsb2JhbFN0b3JlLCBnZXRHbG9iYWxTdG9yZSB9IGZyb20gJ0BvcGVubXJzL2VzbS1zdGF0ZSc7XG5pbXBvcnQgeyBvbWl0IH0gZnJvbSAncmFtZGEnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcsIENvbmZpZ09iamVjdCwgQ29uZmlnU2NoZW1hLCBFeHRlbnNpb25TbG90Q29uZmlnT2JqZWN0LCBQcm92aWRlZENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBzdG9yZVxuICogICBBIHN0b3JlIG9mIHRoZSBpbnB1dHMgYW5kIGludGVybmFsIHN0YXRlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdJbnRlcm5hbFN0b3JlIHtcbiAgLyoqIENvbmZpZ3MgYWRkZWQgdXNpbmcgdGhlIGBwcm92aWRlYCBmdW5jdGlvbiAqL1xuICBwcm92aWRlZENvbmZpZ3M6IEFycmF5PFByb3ZpZGVkQ29uZmlnPjtcbiAgLyoqIEFuIG9iamVjdCB3aXRoIG1vZHVsZSBuYW1lcyBmb3Iga2V5cyBhbmQgc2NoZW1hcyBmb3IgdmFsdWVzICovXG4gIHNjaGVtYXM6IFJlY29yZDxzdHJpbmcsIENvbmZpZ1NjaGVtYT47XG4gIC8qKlxuICAgKiBCZWZvcmUgbW9kdWxlcyBhcmUgbG9hZGVkLCB0aGV5IGdldCBpbXBsaWNpdCBzY2hlbWFzIGFkZGVkIHRvIGBzY2hlbWFzYC4gVGhlcmVmb3JlXG4gICAqIHdlIG5lZWQgdG8gdHJhY2sgc2VwYXJhdGVseSB3aGV0aGVyIHRoZXkgaGF2ZSBhY3R1YWxseSBiZWVuIGxvYWRlZCAodGhhdCBpcyxcbiAgICogd2hldGhlciB0aGUgc2NoZW1hIGhhcyBhY3R1YWxseSBiZWVuIGRlZmluZWQpLlxuICAgKi9cbiAgbW9kdWxlTG9hZGVkOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbn1cblxuY29uc3QgY29uZmlnSW50ZXJuYWxTdG9yZUluaXRpYWxWYWx1ZSA9IHtcbiAgcHJvdmlkZWRDb25maWdzOiBbXSxcbiAgc2NoZW1hczoge30sXG4gIG1vZHVsZUxvYWRlZDoge30sXG59O1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgY29uZmlnSW50ZXJuYWxTdG9yZSA9IGNyZWF0ZUdsb2JhbFN0b3JlPENvbmZpZ0ludGVybmFsU3RvcmU+KFxuICAnY29uZmlnLWludGVybmFsJyxcbiAgY29uZmlnSW50ZXJuYWxTdG9yZUluaXRpYWxWYWx1ZSxcbik7XG5cbi8qKlxuICogVGVtcG9yYXJ5IGNvbmZpZ1xuICogICBMb2NhbFN0b3JhZ2UtYmFzZWQgY29uZmlnIHVzZWQgYnkgdGhlIGltcGxlbWVudGVyIHRvb2xzXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wb3JhcnlDb25maWdTdG9yZSB7XG4gIGNvbmZpZzogQ29uZmlnO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgdGVtcG9yYXJ5Q29uZmlnU3RvcmUgPSBjcmVhdGVHbG9iYWxTdG9yZTxUZW1wb3JhcnlDb25maWdTdG9yZT4oJ3RlbXBvcmFyeS1jb25maWcnLCB7XG4gIGNvbmZpZzogZ2V0VGVtcG9yYXJ5Q29uZmlnKCksXG59KTtcblxudGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICBzZXRUZW1wb3JhcnlDb25maWcoc3RhdGUuY29uZmlnKTtcbn0pO1xuXG5mdW5jdGlvbiBzZXRUZW1wb3JhcnlDb25maWcodmFsdWU6IENvbmZpZykge1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnb3Blbm1yczp0ZW1wb3JhcnlDb25maWcnLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBnZXRUZW1wb3JhcnlDb25maWcoKTogQ29uZmlnIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnb3Blbm1yczp0ZW1wb3JhcnlDb25maWcnKSB8fCAne30nKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmZpZy1zaWRlIGV4dGVuc2lvbiBzdG9yZVxuICogICBKdXN0IHdoYXQgZXNtLWNvbmZpZyBuZWVkcyB0byBrbm93IGFib3V0IGV4dGVuc2lvbiBzdGF0ZS4gVGhpc1xuICogICBpcyB0byBhdm9pZCBoYXZpbmcgZXNtLWNvbmZpZyBkZXBlbmQgb24gZXNtLWV4dGVuc2lvbnMsIHdoaWNoIHdvdWxkXG4gKiAgIGNyZWF0ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdFeHRlbnNpb25TdG9yZSB7XG4gIG1vdW50ZWRFeHRlbnNpb25zOiBBcnJheTxDb25maWdFeHRlbnNpb25TdG9yZUVsZW1lbnQ+O1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ0V4dGVuc2lvblN0b3JlRWxlbWVudCB7XG4gIHNsb3RNb2R1bGVOYW1lOiBzdHJpbmc7XG4gIGV4dGVuc2lvbk1vZHVsZU5hbWU6IHN0cmluZztcbiAgc2xvdE5hbWU6IHN0cmluZztcbiAgZXh0ZW5zaW9uSWQ6IHN0cmluZztcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGNvbmZpZ0V4dGVuc2lvblN0b3JlID0gY3JlYXRlR2xvYmFsU3RvcmU8Q29uZmlnRXh0ZW5zaW9uU3RvcmU+KCdjb25maWctc3RvcmUtb2YtZXh0ZW5zaW9uLXN0YXRlJywge1xuICBtb3VudGVkRXh0ZW5zaW9uczogW10sXG59KTtcblxuLyoqXG4gKiBPdXRwdXQgY29uZmlnc1xuICpcbiAqIEVhY2ggbW9kdWxlIGhhcyBpdHMgb3duIHN0b3JlcyBmb3IgaXRzIGNvbmZpZyBhbmQgaXRzIGV4dGVuc2lvbiBzbG90cycgY29uZmlncy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ1N0b3JlIHtcbiAgY29uZmlnOiBDb25maWdPYmplY3QgfCBudWxsO1xuICBsb2FkZWQ6IGJvb2xlYW47XG4gIHRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplQ29uZmlnU3RvcmUoKSB7XG4gIHJldHVybiB7XG4gICAgY29uZmlnOiBudWxsLFxuICAgIGxvYWRlZDogZmFsc2UsXG4gICAgdHJhbnNsYXRpb25PdmVycmlkZXNMb2FkZWQ6IGZhbHNlLFxuICB9O1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnU3RvcmUobW9kdWxlTmFtZTogc3RyaW5nKSB7XG4gIC8vIFdlIHVzZSBhIHN0b3JlIGZvciBlYWNoIG1vZHVsZSdzIGNvbmZpZywgbmFtZWQgYGNvbmZpZy0ke21vZHVsZU5hbWV9YFxuICByZXR1cm4gZ2V0R2xvYmFsU3RvcmU8Q29uZmlnU3RvcmU+KGBjb25maWctbW9kdWxlLSR7bW9kdWxlTmFtZX1gLCBpbml0aWFsaXplQ29uZmlnU3RvcmUoKSk7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSBzcGVjaWZpYyBleHRlbnNpb24gc2xvdHNcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUge1xuICBzbG90czoge1xuICAgIFtzbG90TmFtZTogc3RyaW5nXToge1xuICAgICAgY29uZmlnOiBFeHRlbnNpb25TbG90Q29uZmlnT2JqZWN0O1xuICAgICAgbG9hZGVkOiBib29sZWFuO1xuICAgIH07XG4gIH07XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlKCkge1xuICByZXR1cm4gZ2V0R2xvYmFsU3RvcmU8RXh0ZW5zaW9uU2xvdHNDb25maWdTdG9yZT4oYGNvbmZpZy1leHRlbnNpb24tc2xvdHNgLCB7XG4gICAgc2xvdHM6IHt9LFxuICB9KTtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvblNsb3RDb25maWcoc2xvdE5hbWU6IHN0cmluZykge1xuICByZXR1cm4gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ0Zyb21TdG9yZShnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlKCkuZ2V0U3RhdGUoKSwgc2xvdE5hbWUpO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ0Zyb21TdG9yZShzdGF0ZTogRXh0ZW5zaW9uU2xvdHNDb25maWdTdG9yZSwgc2xvdE5hbWU6IHN0cmluZykge1xuICBjb25zdCBzbG90Q29uZmlnID0gc3RhdGUuc2xvdHNbc2xvdE5hbWVdO1xuICByZXR1cm4gc2xvdENvbmZpZyA/PyB7IGxvYWRlZDogZmFsc2UsIGNvbmZpZzoge30gfTtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25zQ29uZmlnU3RvcmUge1xuICBjb25maWdzOiB7XG4gICAgW3Nsb3ROYW1lOiBzdHJpbmddOiB7XG4gICAgICBbZXh0ZW5zaW9uSWQ6IHN0cmluZ106IENvbmZpZ1N0b3JlO1xuICAgIH07XG4gIH07XG59XG5cbi8qKlxuICogT25lIHN0b3JlIGZvciBhbGwgdGhlIGV4dGVuc2lvbnNcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlKCkge1xuICByZXR1cm4gZ2V0R2xvYmFsU3RvcmU8RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlPihgY29uZmlnLWV4dGVuc2lvbnNgLCB7XG4gICAgY29uZmlnczoge30sXG4gIH0pO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29uZmlnKHNsb3ROYW1lOiBzdHJpbmcsIGV4dGVuc2lvbklkOiBzdHJpbmcpIHtcbiAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICB7fSxcbiAgICBnZXRFeHRlbnNpb25Db25maWdGcm9tU3RvcmUoZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlKCkuZ2V0U3RhdGUoKSwgc2xvdE5hbWUsIGV4dGVuc2lvbklkKSxcbiAgKTtcbiAgZXh0ZW5zaW9uQ29uZmlnLmNvbmZpZyA9IG9taXQoWydEaXNwbGF5IGNvbmRpdGlvbnMnLCAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJ10sIGV4dGVuc2lvbkNvbmZpZy5jb25maWcpO1xuICByZXR1cm4gZXh0ZW5zaW9uQ29uZmlnO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29uZmlnRnJvbVN0b3JlKHN0YXRlOiBFeHRlbnNpb25zQ29uZmlnU3RvcmUsIHNsb3ROYW1lOiBzdHJpbmcsIGV4dGVuc2lvbklkOiBzdHJpbmcpIHtcbiAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnID0gc3RhdGUuY29uZmlnc1tzbG90TmFtZV0/LltleHRlbnNpb25JZF07XG4gIHJldHVybiBleHRlbnNpb25Db25maWcgPz8geyBsb2FkZWQ6IGZhbHNlLCBjb25maWc6IG51bGwgfTtcbn1cblxuLyoqXG4gKiBBIHN0b3JlIG9mIHRoZSBpbXBsZW1lbnRlciB0b29scyBvdXRwdXQgY29uZmlnXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUge1xuICBjb25maWc6IENvbmZpZztcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSA9IGNyZWF0ZUdsb2JhbFN0b3JlPEltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZT4oJ2NvbmZpZy1pbXBsZW1lbnRlci10b29scycsIHtcbiAgY29uZmlnOiB7fSxcbn0pO1xuIl0sIm5hbWVzIjpbImNyZWF0ZUdsb2JhbFN0b3JlIiwiZ2V0R2xvYmFsU3RvcmUiLCJvbWl0IiwiY29uZmlnSW50ZXJuYWxTdG9yZUluaXRpYWxWYWx1ZSIsInByb3ZpZGVkQ29uZmlncyIsInNjaGVtYXMiLCJtb2R1bGVMb2FkZWQiLCJjb25maWdJbnRlcm5hbFN0b3JlIiwidGVtcG9yYXJ5Q29uZmlnU3RvcmUiLCJjb25maWciLCJnZXRUZW1wb3JhcnlDb25maWciLCJzdWJzY3JpYmUiLCJzdGF0ZSIsInNldFRlbXBvcmFyeUNvbmZpZyIsInZhbHVlIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYXJzZSIsImdldEl0ZW0iLCJlIiwiY29uZmlnRXh0ZW5zaW9uU3RvcmUiLCJtb3VudGVkRXh0ZW5zaW9ucyIsImluaXRpYWxpemVDb25maWdTdG9yZSIsImxvYWRlZCIsInRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkIiwiZ2V0Q29uZmlnU3RvcmUiLCJtb2R1bGVOYW1lIiwiZ2V0RXh0ZW5zaW9uU2xvdHNDb25maWdTdG9yZSIsInNsb3RzIiwiZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZyIsInNsb3ROYW1lIiwiZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ0Zyb21TdG9yZSIsImdldFN0YXRlIiwic2xvdENvbmZpZyIsImdldEV4dGVuc2lvbnNDb25maWdTdG9yZSIsImNvbmZpZ3MiLCJnZXRFeHRlbnNpb25Db25maWciLCJleHRlbnNpb25JZCIsImV4dGVuc2lvbkNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsImdldEV4dGVuc2lvbkNvbmZpZ0Zyb21TdG9yZSIsImltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-config/src/module-config/state.ts\n");
538
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ configExtensionStore: () => (/* binding */ configExtensionStore),\n/* harmony export */ configInternalStore: () => (/* binding */ configInternalStore),\n/* harmony export */ getConfigStore: () => (/* binding */ getConfigStore),\n/* harmony export */ getExtensionConfig: () => (/* binding */ getExtensionConfig),\n/* harmony export */ getExtensionConfigFromStore: () => (/* binding */ getExtensionConfigFromStore),\n/* harmony export */ getExtensionSlotConfig: () => (/* binding */ getExtensionSlotConfig),\n/* harmony export */ getExtensionSlotConfigFromStore: () => (/* binding */ getExtensionSlotConfigFromStore),\n/* harmony export */ getExtensionSlotsConfigStore: () => (/* binding */ getExtensionSlotsConfigStore),\n/* harmony export */ getExtensionsConfigStore: () => (/* binding */ getExtensionsConfigStore),\n/* harmony export */ implementerToolsConfigStore: () => (/* binding */ implementerToolsConfigStore),\n/* harmony export */ temporaryConfigStore: () => (/* binding */ temporaryConfigStore)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-state */ \"../../framework/esm-state/src/index.ts\");\n/* harmony import */ var _openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @openmrs/esm-utils */ \"../../framework/esm-utils/src/shallowEqual.ts\");\n/** @module @category Config */ \n\nvar configInternalStoreInitialValue = {\n providedConfigs: [],\n schemas: {},\n moduleLoaded: {}\n};\n/**\n * @internal\n */ var configInternalStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)(\"config-internal\", configInternalStoreInitialValue);\n/** @internal */ var temporaryConfigStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)(\"temporary-config\", {\n config: getTemporaryConfig()\n});\ntemporaryConfigStore.subscribe(function(state) {\n setTemporaryConfig(state.config);\n});\nfunction setTemporaryConfig(value) {\n localStorage.setItem(\"openmrs:temporaryConfig\", JSON.stringify(value));\n}\nfunction getTemporaryConfig() {\n try {\n return JSON.parse(localStorage.getItem(\"openmrs:temporaryConfig\") || \"{}\");\n } catch (e) {\n return {};\n }\n}\n/** @internal */ var configExtensionStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)(\"config-store-of-extension-state\", {\n mountedExtensions: []\n});\nfunction initializeConfigStore() {\n return {\n config: null,\n loaded: false,\n translationOverridesLoaded: false\n };\n}\n/** @internal */ function getConfigStore(moduleName) {\n // We use a store for each module's config, named `config-${moduleName}`\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(\"config-module-\".concat(moduleName), initializeConfigStore());\n}\n/** @internal */ function getExtensionSlotsConfigStore() {\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(\"config-extension-slots\", {\n slots: {}\n });\n}\n/** @internal */ function getExtensionSlotConfig(slotName) {\n return getExtensionSlotConfigFromStore(getExtensionSlotsConfigStore().getState(), slotName);\n}\n/** @internal */ function getExtensionSlotConfigFromStore(state, slotName) {\n var slotConfig = state.slots[slotName];\n return slotConfig !== null && slotConfig !== void 0 ? slotConfig : {\n loaded: false,\n config: {}\n };\n}\n/**\n * One store for all the extensions\n * @internal\n */ function getExtensionsConfigStore() {\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(\"config-extensions\", {\n configs: {}\n });\n}\n/** @internal */ function getExtensionConfig(slotName, extensionId) {\n if (typeof slotName !== \"string\" || typeof extensionId !== \"string\" || slotName === \"__proto__\" || extensionId === \"__proto__\" || slotName === \"constructor\" || extensionId === \"constructor\" || slotName === \"prototype\" || extensionId === \"prototype\") {\n throw new Error(\"Attempted to call `getExtensionConfig()` with invalid argument\");\n }\n var extensionConfigStore = getExtensionsConfigStore();\n var selector = function(configStore) {\n var _configStore_configs_slotName;\n return (_configStore_configs_slotName = configStore.configs[slotName]) === null || _configStore_configs_slotName === void 0 ? void 0 : _configStore_configs_slotName[extensionId];\n };\n return {\n getState: function getState() {\n var _selector;\n return (_selector = selector(extensionConfigStore.getState())) !== null && _selector !== void 0 ? _selector : {\n loaded: false,\n config: null\n };\n },\n setState: function setState(partial) {\n var replace = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n extensionConfigStore.setState(function(state) {\n if (!state.configs[slotName]) {\n state.configs[slotName] = {};\n }\n var newState = typeof partial === \"function\" ? partial(state.configs.slotName[extensionId]) : partial;\n if (replace) {\n state.configs[slotName][extensionId] = Object.assign({}, newState);\n } else {\n state.configs[slotName][extensionId] = Object.assign({}, state.configs[slotName][extensionId], newState);\n }\n return state;\n });\n },\n subscribe: function subscribe(listener) {\n return extensionConfigStore.subscribe(function(state, prevState) {\n var newState = selector(state);\n var oldState = selector(prevState);\n if (!(0,_openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_1__.shallowEqual)(newState, oldState)) {\n listener(newState, oldState);\n }\n });\n },\n destroy: function destroy() {\n /* this is a no-op */ }\n };\n}\n/** @internal */ function getExtensionConfigFromStore(state, slotName, extensionId) {\n var _state_configs_slotName;\n var extensionConfig = (_state_configs_slotName = state.configs[slotName]) === null || _state_configs_slotName === void 0 ? void 0 : _state_configs_slotName[extensionId];\n return extensionConfig !== null && extensionConfig !== void 0 ? extensionConfig : {\n loaded: false,\n config: null\n };\n}\n/** @internal */ var implementerToolsConfigStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)(\"config-implementer-tools\", {\n config: {}\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvc3JjL21vZHVsZS1jb25maWcvc3RhdGUudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE2QixHQUMwQztBQUNyQjtBQXNCbEQsSUFBTUcsa0NBQWtDO0lBQ3RDQyxpQkFBaUIsRUFBRTtJQUNuQkMsU0FBUyxDQUFDO0lBQ1ZDLGNBQWMsQ0FBQztBQUNqQjtBQUVBOztDQUVDLEdBQ00sSUFBTUMsc0JBQXNCUCxxRUFBaUJBLENBQ2xELG1CQUNBRyxpQ0FDQTtBQVdGLGNBQWMsR0FDUCxJQUFNSyx1QkFBdUJSLHFFQUFpQkEsQ0FBdUIsb0JBQW9CO0lBQzlGUyxRQUFRQztBQUNWLEdBQUc7QUFFSEYscUJBQXFCRyxTQUFTLENBQUMsU0FBQ0MsT0FBVTtJQUN4Q0MsbUJBQW1CRCxNQUFNSCxNQUFNO0FBQ2pDO0FBRUEsU0FBU0ksbUJBQW1CQyxLQUFhLEVBQUU7SUFDekNDLGFBQWFDLE9BQU8sQ0FBQywyQkFBMkJDLEtBQUtDLFNBQVMsQ0FBQ0o7QUFDakU7QUFFQSxTQUFTSixxQkFBNkI7SUFDcEMsSUFBSTtRQUNGLE9BQU9PLEtBQUtFLEtBQUssQ0FBQ0osYUFBYUssT0FBTyxDQUFDLDhCQUE4QjtJQUN2RSxFQUFFLE9BQU9DLEdBQUc7UUFDVixPQUFPLENBQUM7SUFDVjtBQUNGO0FBcUJBLGNBQWMsR0FDUCxJQUFNQyx1QkFBdUJ0QixxRUFBaUJBLENBQXVCLG1DQUFtQztJQUM3R3VCLG1CQUFtQixFQUFFO0FBQ3ZCLEdBQUc7QUFjSCxTQUFTQyx3QkFBd0I7SUFDL0IsT0FBTztRQUNMZixRQUFRLElBQUk7UUFDWmdCLFFBQVEsS0FBSztRQUNiQyw0QkFBNEIsS0FBSztJQUNuQztBQUNGO0FBRUEsY0FBYyxHQUNQLFNBQVNDLGVBQWVDLFVBQWtCLEVBQUU7SUFDakQsd0VBQXdFO0lBQ3hFLE9BQU8zQixrRUFBY0EsQ0FBYyxpQkFBNEIsT0FBWDJCLGFBQWNKO0FBQ3BFLENBQUM7QUFlRCxj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Q1AsU0FBU0MsNEJBQTRCMUMsS0FBNEIsRUFBRW9CLFFBQWdCLEVBQUVPLFdBQW1CLEVBQUU7UUFDdkYzQjtJQUF4QixJQUFNMkMsa0JBQWtCM0MsQ0FBQUEsMEJBQUFBLE1BQU15QixPQUFPLENBQUNMLFNBQVMsY0FBdkJwQixxQ0FBQUEsS0FBQUEsSUFBQUEsdUJBQXlCLENBQUMyQixZQUFZO0lBQzlELE9BQU9nQiw0QkFBQUEsNkJBQUFBLGtCQUFtQjtRQUFFOUIsUUFBUSxLQUFLO1FBQUVoQixRQUFRLElBQUk7SUFBQyxDQUFDO0FBQzNELENBQUM7QUFVRCxjQUFjLEdBQ1AsSUFBTStDLDhCQUE4QnhELHFFQUFpQkEsQ0FBOEIsNEJBQTRCO0lBQ3BIUyxRQUFRLENBQUM7QUFDWCxHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9zcmMvbW9kdWxlLWNvbmZpZy9zdGF0ZS50cz8zMzMyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBDb25maWcgKi9cbmltcG9ydCB7IGNyZWF0ZUdsb2JhbFN0b3JlLCBnZXRHbG9iYWxTdG9yZSB9IGZyb20gJ0BvcGVubXJzL2VzbS1zdGF0ZSc7XG5pbXBvcnQgeyBzaGFsbG93RXF1YWwgfSBmcm9tICdAb3Blbm1ycy9lc20tdXRpbHMnO1xuaW1wb3J0IHsgdHlwZSBTdG9yZUFwaSB9IGZyb20gJ3p1c3RhbmQnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcsIENvbmZpZ09iamVjdCwgQ29uZmlnU2NoZW1hLCBFeHRlbnNpb25TbG90Q29uZmlnT2JqZWN0LCBQcm92aWRlZENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBzdG9yZVxuICogICBBIHN0b3JlIG9mIHRoZSBpbnB1dHMgYW5kIGludGVybmFsIHN0YXRlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdJbnRlcm5hbFN0b3JlIHtcbiAgLyoqIENvbmZpZ3MgYWRkZWQgdXNpbmcgdGhlIGBwcm92aWRlYCBmdW5jdGlvbiAqL1xuICBwcm92aWRlZENvbmZpZ3M6IEFycmF5PFByb3ZpZGVkQ29uZmlnPjtcbiAgLyoqIEFuIG9iamVjdCB3aXRoIG1vZHVsZSBuYW1lcyBmb3Iga2V5cyBhbmQgc2NoZW1hcyBmb3IgdmFsdWVzICovXG4gIHNjaGVtYXM6IFJlY29yZDxzdHJpbmcsIENvbmZpZ1NjaGVtYT47XG4gIC8qKlxuICAgKiBCZWZvcmUgbW9kdWxlcyBhcmUgbG9hZGVkLCB0aGV5IGdldCBpbXBsaWNpdCBzY2hlbWFzIGFkZGVkIHRvIGBzY2hlbWFzYC4gVGhlcmVmb3JlXG4gICAqIHdlIG5lZWQgdG8gdHJhY2sgc2VwYXJhdGVseSB3aGV0aGVyIHRoZXkgaGF2ZSBhY3R1YWxseSBiZWVuIGxvYWRlZCAodGhhdCBpcyxcbiAgICogd2hldGhlciB0aGUgc2NoZW1hIGhhcyBhY3R1YWxseSBiZWVuIGRlZmluZWQpLlxuICAgKi9cbiAgbW9kdWxlTG9hZGVkOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbn1cblxuY29uc3QgY29uZmlnSW50ZXJuYWxTdG9yZUluaXRpYWxWYWx1ZSA9IHtcbiAgcHJvdmlkZWRDb25maWdzOiBbXSxcbiAgc2NoZW1hczoge30sXG4gIG1vZHVsZUxvYWRlZDoge30sXG59O1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgY29uZmlnSW50ZXJuYWxTdG9yZSA9IGNyZWF0ZUdsb2JhbFN0b3JlPENvbmZpZ0ludGVybmFsU3RvcmU+KFxuICAnY29uZmlnLWludGVybmFsJyxcbiAgY29uZmlnSW50ZXJuYWxTdG9yZUluaXRpYWxWYWx1ZSxcbik7XG5cbi8qKlxuICogVGVtcG9yYXJ5IGNvbmZpZ1xuICogICBMb2NhbFN0b3JhZ2UtYmFzZWQgY29uZmlnIHVzZWQgYnkgdGhlIGltcGxlbWVudGVyIHRvb2xzXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wb3JhcnlDb25maWdTdG9yZSB7XG4gIGNvbmZpZzogQ29uZmlnO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgdGVtcG9yYXJ5Q29uZmlnU3RvcmUgPSBjcmVhdGVHbG9iYWxTdG9yZTxUZW1wb3JhcnlDb25maWdTdG9yZT4oJ3RlbXBvcmFyeS1jb25maWcnLCB7XG4gIGNvbmZpZzogZ2V0VGVtcG9yYXJ5Q29uZmlnKCksXG59KTtcblxudGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICBzZXRUZW1wb3JhcnlDb25maWcoc3RhdGUuY29uZmlnKTtcbn0pO1xuXG5mdW5jdGlvbiBzZXRUZW1wb3JhcnlDb25maWcodmFsdWU6IENvbmZpZykge1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnb3Blbm1yczp0ZW1wb3JhcnlDb25maWcnLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBnZXRUZW1wb3JhcnlDb25maWcoKTogQ29uZmlnIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnb3Blbm1yczp0ZW1wb3JhcnlDb25maWcnKSB8fCAne30nKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmZpZy1zaWRlIGV4dGVuc2lvbiBzdG9yZVxuICogICBKdXN0IHdoYXQgZXNtLWNvbmZpZyBuZWVkcyB0byBrbm93IGFib3V0IGV4dGVuc2lvbiBzdGF0ZS4gVGhpc1xuICogICBpcyB0byBhdm9pZCBoYXZpbmcgZXNtLWNvbmZpZyBkZXBlbmQgb24gZXNtLWV4dGVuc2lvbnMsIHdoaWNoIHdvdWxkXG4gKiAgIGNyZWF0ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdFeHRlbnNpb25TdG9yZSB7XG4gIG1vdW50ZWRFeHRlbnNpb25zOiBBcnJheTxDb25maWdFeHRlbnNpb25TdG9yZUVsZW1lbnQ+O1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ0V4dGVuc2lvblN0b3JlRWxlbWVudCB7XG4gIHNsb3RNb2R1bGVOYW1lOiBzdHJpbmc7XG4gIGV4dGVuc2lvbk1vZHVsZU5hbWU6IHN0cmluZztcbiAgc2xvdE5hbWU6IHN0cmluZztcbiAgZXh0ZW5zaW9uSWQ6IHN0cmluZztcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IGNvbmZpZ0V4dGVuc2lvblN0b3JlID0gY3JlYXRlR2xvYmFsU3RvcmU8Q29uZmlnRXh0ZW5zaW9uU3RvcmU+KCdjb25maWctc3RvcmUtb2YtZXh0ZW5zaW9uLXN0YXRlJywge1xuICBtb3VudGVkRXh0ZW5zaW9uczogW10sXG59KTtcblxuLyoqXG4gKiBPdXRwdXQgY29uZmlnc1xuICpcbiAqIEVhY2ggbW9kdWxlIGhhcyBpdHMgb3duIHN0b3JlcyBmb3IgaXRzIGNvbmZpZyBhbmQgaXRzIGV4dGVuc2lvbiBzbG90cycgY29uZmlncy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ1N0b3JlIHtcbiAgY29uZmlnOiBDb25maWdPYmplY3QgfCBudWxsO1xuICBsb2FkZWQ6IGJvb2xlYW47XG4gIHRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplQ29uZmlnU3RvcmUoKSB7XG4gIHJldHVybiB7XG4gICAgY29uZmlnOiBudWxsLFxuICAgIGxvYWRlZDogZmFsc2UsXG4gICAgdHJhbnNsYXRpb25PdmVycmlkZXNMb2FkZWQ6IGZhbHNlLFxuICB9O1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnU3RvcmUobW9kdWxlTmFtZTogc3RyaW5nKSB7XG4gIC8vIFdlIHVzZSBhIHN0b3JlIGZvciBlYWNoIG1vZHVsZSdzIGNvbmZpZywgbmFtZWQgYGNvbmZpZy0ke21vZHVsZU5hbWV9YFxuICByZXR1cm4gZ2V0R2xvYmFsU3RvcmU8Q29uZmlnU3RvcmU+KGBjb25maWctbW9kdWxlLSR7bW9kdWxlTmFtZX1gLCBpbml0aWFsaXplQ29uZmlnU3RvcmUoKSk7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSBzcGVjaWZpYyBleHRlbnNpb24gc2xvdHNcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUge1xuICBzbG90czoge1xuICAgIFtzbG90TmFtZTogc3RyaW5nXToge1xuICAgICAgY29uZmlnOiBFeHRlbnNpb25TbG90Q29uZmlnT2JqZWN0O1xuICAgICAgbG9hZGVkOiBib29sZWFuO1xuICAgIH07XG4gIH07XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlKCkge1xuICByZXR1cm4gZ2V0R2xvYmFsU3RvcmU8RXh0ZW5zaW9uU2xvdHNDb25maWdTdG9yZT4oYGNvbmZpZy1leHRlbnNpb24tc2xvdHNgLCB7XG4gICAgc2xvdHM6IHt9LFxuICB9KTtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvblNsb3RDb25maWcoc2xvdE5hbWU6IHN0cmluZykge1xuICByZXR1cm4gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ0Zyb21TdG9yZShnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlKCkuZ2V0U3RhdGUoKSwgc2xvdE5hbWUpO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ0Zyb21TdG9yZShzdGF0ZTogRXh0ZW5zaW9uU2xvdHNDb25maWdTdG9yZSwgc2xvdE5hbWU6IHN0cmluZykge1xuICBjb25zdCBzbG90Q29uZmlnID0gc3RhdGUuc2xvdHNbc2xvdE5hbWVdO1xuICByZXR1cm4gc2xvdENvbmZpZyA/PyB7IGxvYWRlZDogZmFsc2UsIGNvbmZpZzoge30gfTtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25zQ29uZmlnU3RvcmUge1xuICBjb25maWdzOiB7XG4gICAgW3Nsb3ROYW1lOiBzdHJpbmddOiB7XG4gICAgICBbZXh0ZW5zaW9uSWQ6IHN0cmluZ106IENvbmZpZ1N0b3JlO1xuICAgIH07XG4gIH07XG59XG5cbi8qKlxuICogT25lIHN0b3JlIGZvciBhbGwgdGhlIGV4dGVuc2lvbnNcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlKCkge1xuICByZXR1cm4gZ2V0R2xvYmFsU3RvcmU8RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlPihgY29uZmlnLWV4dGVuc2lvbnNgLCB7XG4gICAgY29uZmlnczoge30sXG4gIH0pO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29uZmlnKFxuICBzbG90TmFtZTogc3RyaW5nLFxuICBleHRlbnNpb25JZDogc3RyaW5nLFxuKTogU3RvcmVBcGk8T21pdDxDb25maWdTdG9yZSwgJ3RyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkJz4+IHtcbiAgaWYgKFxuICAgIHR5cGVvZiBzbG90TmFtZSAhPT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2YgZXh0ZW5zaW9uSWQgIT09ICdzdHJpbmcnIHx8XG4gICAgc2xvdE5hbWUgPT09ICdfX3Byb3RvX18nIHx8XG4gICAgZXh0ZW5zaW9uSWQgPT09ICdfX3Byb3RvX18nIHx8XG4gICAgc2xvdE5hbWUgPT09ICdjb25zdHJ1Y3RvcicgfHxcbiAgICBleHRlbnNpb25JZCA9PT0gJ2NvbnN0cnVjdG9yJyB8fFxuICAgIHNsb3ROYW1lID09PSAncHJvdG90eXBlJyB8fFxuICAgIGV4dGVuc2lvbklkID09PSAncHJvdG90eXBlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBjYWxsIGBnZXRFeHRlbnNpb25Db25maWcoKWAgd2l0aCBpbnZhbGlkIGFyZ3VtZW50Jyk7XG4gIH1cblxuICBjb25zdCBleHRlbnNpb25Db25maWdTdG9yZSA9IGdldEV4dGVuc2lvbnNDb25maWdTdG9yZSgpO1xuICBjb25zdCBzZWxlY3RvciA9IChjb25maWdTdG9yZTogRXh0ZW5zaW9uc0NvbmZpZ1N0b3JlKSA9PiBjb25maWdTdG9yZS5jb25maWdzW3Nsb3ROYW1lXT8uW2V4dGVuc2lvbklkXTtcblxuICByZXR1cm4ge1xuICAgIGdldFN0YXRlKCkge1xuICAgICAgcmV0dXJuIHNlbGVjdG9yKGV4dGVuc2lvbkNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpID8/IHsgbG9hZGVkOiBmYWxzZSwgY29uZmlnOiBudWxsIH07XG4gICAgfSxcbiAgICBzZXRTdGF0ZShcbiAgICAgIHBhcnRpYWw6IENvbmZpZ1N0b3JlIHwgUGFydGlhbDxDb25maWdTdG9yZT4gfCAoKHN0YXRlOiBDb25maWdTdG9yZSkgPT4gQ29uZmlnU3RvcmUgfCBQYXJ0aWFsPENvbmZpZ1N0b3JlPiksXG4gICAgICByZXBsYWNlOiBib29sZWFuID0gZmFsc2UsXG4gICAgKSB7XG4gICAgICBleHRlbnNpb25Db25maWdTdG9yZS5zZXRTdGF0ZSgoc3RhdGUpID0+IHtcbiAgICAgICAgaWYgKCFzdGF0ZS5jb25maWdzW3Nsb3ROYW1lXSkge1xuICAgICAgICAgIHN0YXRlLmNvbmZpZ3Nbc2xvdE5hbWVdID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHR5cGVvZiBwYXJ0aWFsID09PSAnZnVuY3Rpb24nID8gcGFydGlhbChzdGF0ZS5jb25maWdzLnNsb3ROYW1lW2V4dGVuc2lvbklkXSkgOiBwYXJ0aWFsO1xuICAgICAgICBpZiAocmVwbGFjZSkge1xuICAgICAgICAgIHN0YXRlLmNvbmZpZ3Nbc2xvdE5hbWVdW2V4dGVuc2lvbklkXSA9IE9iamVjdC5hc3NpZ24oe30sIG5ld1N0YXRlKSBhcyBDb25maWdTdG9yZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5jb25maWdzW3Nsb3ROYW1lXVtleHRlbnNpb25JZF0gPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jb25maWdzW3Nsb3ROYW1lXVtleHRlbnNpb25JZF0sIG5ld1N0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gZXh0ZW5zaW9uQ29uZmlnU3RvcmUuc3Vic2NyaWJlKChzdGF0ZSwgcHJldlN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0gc2VsZWN0b3Ioc3RhdGUpO1xuICAgICAgICBjb25zdCBvbGRTdGF0ZSA9IHNlbGVjdG9yKHByZXZTdGF0ZSk7XG5cbiAgICAgICAgaWYgKCFzaGFsbG93RXF1YWwobmV3U3RhdGUsIG9sZFN0YXRlKSkge1xuICAgICAgICAgIGxpc3RlbmVyKG5ld1N0YXRlLCBvbGRTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVzdHJveSgpIHtcbiAgICAgIC8qIHRoaXMgaXMgYSBuby1vcCAqL1xuICAgIH0sXG4gIH07XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25Db25maWdGcm9tU3RvcmUoc3RhdGU6IEV4dGVuc2lvbnNDb25maWdTdG9yZSwgc2xvdE5hbWU6IHN0cmluZywgZXh0ZW5zaW9uSWQ6IHN0cmluZykge1xuICBjb25zdCBleHRlbnNpb25Db25maWcgPSBzdGF0ZS5jb25maWdzW3Nsb3ROYW1lXT8uW2V4dGVuc2lvbklkXTtcbiAgcmV0dXJuIGV4dGVuc2lvbkNvbmZpZyA/PyB7IGxvYWRlZDogZmFsc2UsIGNvbmZpZzogbnVsbCB9O1xufVxuXG4vKipcbiAqIEEgc3RvcmUgb2YgdGhlIGltcGxlbWVudGVyIHRvb2xzIG91dHB1dCBjb25maWdcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSB7XG4gIGNvbmZpZzogQ29uZmlnO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlID0gY3JlYXRlR2xvYmFsU3RvcmU8SW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlPignY29uZmlnLWltcGxlbWVudGVyLXRvb2xzJywge1xuICBjb25maWc6IHt9LFxufSk7XG4iXSwibmFtZXMiOlsiY3JlYXRlR2xvYmFsU3RvcmUiLCJnZXRHbG9iYWxTdG9yZSIsInNoYWxsb3dFcXVhbCIsImNvbmZpZ0ludGVybmFsU3RvcmVJbml0aWFsVmFsdWUiLCJwcm92aWRlZENvbmZpZ3MiLCJzY2hlbWFzIiwibW9kdWxlTG9hZGVkIiwiY29uZmlnSW50ZXJuYWxTdG9yZSIsInRlbXBvcmFyeUNvbmZpZ1N0b3JlIiwiY29uZmlnIiwiZ2V0VGVtcG9yYXJ5Q29uZmlnIiwic3Vic2NyaWJlIiwic3RhdGUiLCJzZXRUZW1wb3JhcnlDb25maWciLCJ2YWx1ZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwicGFyc2UiLCJnZXRJdGVtIiwiZSIsImNvbmZpZ0V4dGVuc2lvblN0b3JlIiwibW91bnRlZEV4dGVuc2lvbnMiLCJpbml0aWFsaXplQ29uZmlnU3RvcmUiLCJsb2FkZWQiLCJ0cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZCIsImdldENvbmZpZ1N0b3JlIiwibW9kdWxlTmFtZSIsImdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUiLCJzbG90cyIsImdldEV4dGVuc2lvblNsb3RDb25maWciLCJzbG90TmFtZSIsImdldEV4dGVuc2lvblNsb3RDb25maWdGcm9tU3RvcmUiLCJnZXRTdGF0ZSIsInNsb3RDb25maWciLCJnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUiLCJjb25maWdzIiwiZ2V0RXh0ZW5zaW9uQ29uZmlnIiwiZXh0ZW5zaW9uSWQiLCJFcnJvciIsImV4dGVuc2lvbkNvbmZpZ1N0b3JlIiwic2VsZWN0b3IiLCJjb25maWdTdG9yZSIsInNldFN0YXRlIiwicGFydGlhbCIsInJlcGxhY2UiLCJuZXdTdGF0ZSIsIk9iamVjdCIsImFzc2lnbiIsImxpc3RlbmVyIiwicHJldlN0YXRlIiwib2xkU3RhdGUiLCJkZXN0cm95IiwiZ2V0RXh0ZW5zaW9uQ29uZmlnRnJvbVN0b3JlIiwiZXh0ZW5zaW9uQ29uZmlnIiwiaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-config/src/module-config/state.ts\n");
539
539
 
540
540
  /***/ }),
541
541
 
@@ -585,7 +585,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
585
585
  \**************************************************/
586
586
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
587
587
 
588
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ contextStore: () => (/* binding */ contextStore),\n/* harmony export */ getContext: () => (/* binding */ getContext),\n/* harmony export */ registerContext: () => (/* binding */ registerContext),\n/* harmony export */ subscribeToContext: () => (/* binding */ subscribeToContext),\n/* harmony export */ unregisterContext: () => (/* binding */ unregisterContext),\n/* harmony export */ updateContext: () => (/* binding */ updateContext)\n/* harmony export */ });\n/* harmony import */ var zustand_vanilla__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zustand/vanilla */ \"../../../node_modules/zustand/esm/vanilla.mjs\");\n/* harmony import */ var _openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-state */ \"../../framework/esm-state/src/index.ts\");\n/** @module @category Context */ \n\n\n/**\n * @internal\n *\n * The application context store, using immer to potentially simplify updates\n */ var contextStore = (0,zustand_vanilla__WEBPACK_IMPORTED_MODULE_1__.createStore)()(function() {\n return {};\n});\n(0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.registerGlobalStore)(\"openmrs-app-context\", contextStore);\nvar nothing = Object();\n/**\n * Used by callers to register a new namespace in the application context. Attempting to register\n * an already-registered namespace will display a warning and make no modifications to the state.\n *\n * @param namespace the namespace to register\n * @param initialValue the initial value of the namespace\n */ function registerContext(namespace) {\n var initialValue = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : nothing;\n contextStore.setState(function(state) {\n if (namespace in state) {\n throw new Error(\"Attempted to re-register namespace \".concat(namespace, \" in the app context. Each namespace must be unregistered before the name can be registered again.\"));\n }\n return Object.assign({}, state, {\n namespace: initialValue === nothing ? {} : initialValue\n });\n });\n}\n/**\n * Used by caller to unregister a namespace in the application context. Unregistering a namespace\n * will remove the namespace and all associated data.\n */ function unregisterContext(namespace) {\n contextStore.setState(function(state) {\n if (namespace in state) {\n delete state[namespace];\n }\n return state;\n });\n}\n/**\n * Returns an _immutable_ version of the state of the namespace as it is currently\n *\n * @typeParam T The type of the value stored in the namespace\n * @typeParam U The return type of this hook which is mostly relevant when using a selector\n * @param namespace The namespace to load properties from\n * @param selector An optional function which extracts the relevant part of the state\n */ function getContext(namespace) {\n var selector = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function(state) {\n return state;\n };\n var state = contextStore.getState();\n if (namespace in state) {\n return Object.freeze(Object.assign({}, selector ? selector(state[namespace]) : state[namespace]));\n }\n return null;\n}\n/**\n * Updates a namespace in the global context. If the namespace does not exist, it is registered.\n */ function updateContext(namespace, update) {\n contextStore.setState(function(state) {\n if (!(namespace in state)) {\n state[namespace] = {};\n }\n state[namespace] = update(state[namespace]);\n return Object.assign({}, state);\n });\n}\n/**\n * Subscribes to updates of a given namespace. Note that the returned object is immutable.\n *\n * @param namespace the namespace to subscribe to\n * @param callback a function invoked with the current context whenever\n * @returns A function to unsubscribe from the context\n */ function subscribeToContext(namespace, callback) {\n var previous = getContext(namespace);\n // set initial value\n callback(Object.freeze(Object.assign({}, previous)));\n return contextStore.subscribe(function(state) {\n var current = namespace in state ? state[namespace] : null;\n if (current !== previous) {\n previous = current;\n callback(Object.freeze(Object.assign({}, current)));\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb250ZXh0L3NyYy9jb250ZXh0LnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsOEJBQThCLEdBQzlCO0FBRThDO0FBQ1c7QUFNekQ7Ozs7Q0FJQyxHQUNNLElBQU1FLGVBQWVGLDREQUFXQSxHQUFzQjtXQUFPLENBQUM7R0FBSTtBQUV6RUMsdUVBQW1CQSxDQUFvQix1QkFBdUJDO0FBRTlELElBQU1DLFVBQVVDO0FBRWhCOzs7Ozs7Q0FNQyxHQUNNLFNBQVNDLGdCQUFtQ0MsU0FBaUIsRUFBNkI7UUFBM0JDLGVBQUFBLGlFQUFrQkosT0FBTztJQUM3RkQsYUFBYU0sUUFBUSxDQUFDLFNBQUNDLE9BQVU7UUFDL0IsSUFBSUgsYUFBYUcsT0FBTztZQUN0QixNQUFNLElBQUlDLE1BQ1Isc0NBQWdELE9BQVZKLFdBQVUsc0dBQ2hEO1FBQ0osQ0FBQztRQUVELE9BQU9GLE9BQU9PLE1BQU0sQ0FBQyxDQUFDLEdBQUdGLE9BQU87WUFBRUgsV0FBV0MsaUJBQWlCSixVQUFVLENBQUMsSUFBSUksWUFBWTtRQUFDO0lBQzVGO0FBQ0YsQ0FBQztBQUVEOzs7Q0FHQyxHQUNNLFNBQVNLLGtCQUFrQk4sU0FBaUIsRUFBRTtJQUNuREosYUFBYU0sUUFBUSxDQUFDLFNBQUNDLE9BQVU7UUFDL0IsSUFBSUgsYUFBYUcsT0FBTztZQUN0QixPQUFPQSxLQUFLLENBQUNILFVBQVU7UUFDekIsQ0FBQztRQUNELE9BQU9HO0lBQ1Q7QUFDRixDQUFDO0FBR0Q7Ozs7Ozs7Q0FPQyxHQUNNLFNBQVNJLFdBQ2RQLFNBQWlCLEVBRUc7UUFEcEJRLFdBQUFBLGlFQUFzQyxTQUFDTDtlQUFVQTtLQUFxQjtJQUV0RSxJQUFNQSxRQUFRUCxhQUFhYSxRQUFRO0lBQ25DLElBQUlULGFBQWFHLE9BQU87UUFDdEIsT0FBT0wsT0FBT1ksTUFBTSxDQUFDWixPQUFPTyxNQUFNLENBQUMsQ0FBQyxHQUFJRyxXQUFXQSxTQUFTTCxLQUFLLENBQUNILFVBQVUsSUFBU0csS0FBSyxDQUFDSCxVQUFVO0lBQ3ZHLENBQUM7SUFFRCxPQUFPLElBQUk7QUFDYixDQUFDO0FBRUQ7O0NBRUMsR0FDTSxTQUFTVyxjQUFpQ1gsU0FBaUIsRUFBRVksTUFBdUIsRUFBRTtJQUMzRmhCLGFBQWFNLFFBQVEsQ0FBQyxTQUFDQyxPQUFVO1FBQy9CLElBQUksQ0FBRUgsQ0FBQUEsYUFBYUcsS0FBSSxHQUFJO1lBQ3pCQSxLQUFLLENBQUNILFVBQVUsR0FBRyxDQUFDO1FBQ3RCLENBQUM7UUFFREcsS0FBSyxDQUFDSCxVQUFVLEdBQUdZLE9BQU9ULEtBQUssQ0FBQ0gsVUFBVTtRQUMxQyxPQUFPRixPQUFPTyxNQUFNLENBQUMsQ0FBQyxHQUFHRjtJQUMzQjtBQUNGLENBQUM7QUFJRDs7Ozs7O0NBTUMsR0FDTSxTQUFTVSxtQkFBc0NiLFNBQWlCLEVBQUVjLFFBQTRCLEVBQUU7SUFDckcsSUFBSUMsV0FBV1IsV0FBY1A7SUFFN0Isb0JBQW9CO0lBQ3BCYyxTQUFTaEIsT0FBT1ksTUFBTSxDQUFDWixPQUFPTyxNQUFNLENBQUMsQ0FBQyxHQUFHVTtJQUV6QyxPQUFPbkIsYUFBYW9CLFNBQVMsQ0FBQyxTQUFDYixPQUFVO1FBQ3ZDLElBQUljLFVBQTBDakIsYUFBYUcsUUFBU0EsS0FBSyxDQUFDSCxVQUFVLEdBQVMsSUFBSTtRQUVqRyxJQUFJaUIsWUFBWUYsVUFBVTtZQUN4QkEsV0FBV0U7WUFDWEgsU0FBU2hCLE9BQU9ZLE1BQU0sQ0FBQ1osT0FBT08sTUFBTSxDQUFDLENBQUMsR0FBR1k7UUFDM0MsQ0FBQztJQUNIO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1jb250ZXh0L3NyYy9jb250ZXh0LnRzPzMyMTQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IENvbnRleHQgKi9cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tICd6dXN0YW5kL3ZhbmlsbGEnO1xuaW1wb3J0IHsgcmVnaXN0ZXJHbG9iYWxTdG9yZSB9IGZyb20gJ0BvcGVubXJzL2VzbS1zdGF0ZSc7XG5cbmludGVyZmFjZSBPcGVubXJzQXBwQ29udGV4dCB7XG4gIFtuYW1lc3BhY2U6IHN0cmluZ106IHVua25vd247XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKlxuICogVGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgc3RvcmUsIHVzaW5nIGltbWVyIHRvIHBvdGVudGlhbGx5IHNpbXBsaWZ5IHVwZGF0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnRleHRTdG9yZSA9IGNyZWF0ZVN0b3JlPE9wZW5tcnNBcHBDb250ZXh0PigpKCgpID0+ICh7fSkpO1xuXG5yZWdpc3Rlckdsb2JhbFN0b3JlPE9wZW5tcnNBcHBDb250ZXh0Pignb3Blbm1ycy1hcHAtY29udGV4dCcsIGNvbnRleHRTdG9yZSk7XG5cbmNvbnN0IG5vdGhpbmcgPSBPYmplY3QoKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGNhbGxlcnMgdG8gcmVnaXN0ZXIgYSBuZXcgbmFtZXNwYWNlIGluIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0LiBBdHRlbXB0aW5nIHRvIHJlZ2lzdGVyXG4gKiBhbiBhbHJlYWR5LXJlZ2lzdGVyZWQgbmFtZXNwYWNlIHdpbGwgZGlzcGxheSBhIHdhcm5pbmcgYW5kIG1ha2Ugbm8gbW9kaWZpY2F0aW9ucyB0byB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSB0aGUgbmFtZXNwYWNlIHRvIHJlZ2lzdGVyXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBuYW1lc3BhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29udGV4dDxUIGV4dGVuZHMge30gPSB7fT4obmFtZXNwYWNlOiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogVCA9IG5vdGhpbmcpIHtcbiAgY29udGV4dFN0b3JlLnNldFN0YXRlKChzdGF0ZSkgPT4ge1xuICAgIGlmIChuYW1lc3BhY2UgaW4gc3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEF0dGVtcHRlZCB0byByZS1yZWdpc3RlciBuYW1lc3BhY2UgJHtuYW1lc3BhY2V9IGluIHRoZSBhcHAgY29udGV4dC4gRWFjaCBuYW1lc3BhY2UgbXVzdCBiZSB1bnJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBuYW1lIGNhbiBiZSByZWdpc3RlcmVkIGFnYWluLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgeyBuYW1lc3BhY2U6IGluaXRpYWxWYWx1ZSA9PT0gbm90aGluZyA/IHt9IDogaW5pdGlhbFZhbHVlIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBVc2VkIGJ5IGNhbGxlciB0byB1bnJlZ2lzdGVyIGEgbmFtZXNwYWNlIGluIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0LiBVbnJlZ2lzdGVyaW5nIGEgbmFtZXNwYWNlXG4gKiB3aWxsIHJlbW92ZSB0aGUgbmFtZXNwYWNlIGFuZCBhbGwgYXNzb2NpYXRlZCBkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckNvbnRleHQobmFtZXNwYWNlOiBzdHJpbmcpIHtcbiAgY29udGV4dFN0b3JlLnNldFN0YXRlKChzdGF0ZSkgPT4ge1xuICAgIGlmIChuYW1lc3BhY2UgaW4gc3RhdGUpIHtcbiAgICAgIGRlbGV0ZSBzdGF0ZVtuYW1lc3BhY2VdO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGU7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGV4dDxUIGV4dGVuZHMge30gPSB7fT4obmFtZXNwYWNlOiBzdHJpbmcpOiBSZWFkb25seTxUPiB8IG51bGw7XG4vKipcbiAqIFJldHVybnMgYW4gX2ltbXV0YWJsZV8gdmVyc2lvbiBvZiB0aGUgc3RhdGUgb2YgdGhlIG5hbWVzcGFjZSBhcyBpdCBpcyBjdXJyZW50bHlcbiAqXG4gKiBAdHlwZVBhcmFtIFQgVGhlIHR5cGUgb2YgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgbmFtZXNwYWNlXG4gKiBAdHlwZVBhcmFtIFUgVGhlIHJldHVybiB0eXBlIG9mIHRoaXMgaG9vayB3aGljaCBpcyBtb3N0bHkgcmVsZXZhbnQgd2hlbiB1c2luZyBhIHNlbGVjdG9yXG4gKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdG8gbG9hZCBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSBzZWxlY3RvciBBbiBvcHRpb25hbCBmdW5jdGlvbiB3aGljaCBleHRyYWN0cyB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRleHQ8VCBleHRlbmRzIHt9ID0ge30sIFUgZXh0ZW5kcyB7fSA9IFQ+KFxuICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgc2VsZWN0b3I6IChzdGF0ZTogUmVhZG9ubHk8VD4pID0+IFUgPSAoc3RhdGUpID0+IHN0YXRlIGFzIHVua25vd24gYXMgVSxcbik6IFJlYWRvbmx5PFU+IHwgbnVsbCB7XG4gIGNvbnN0IHN0YXRlID0gY29udGV4dFN0b3JlLmdldFN0YXRlKCk7XG4gIGlmIChuYW1lc3BhY2UgaW4gc3RhdGUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuYXNzaWduKHt9LCAoc2VsZWN0b3IgPyBzZWxlY3RvcihzdGF0ZVtuYW1lc3BhY2VdIGFzIFQpIDogc3RhdGVbbmFtZXNwYWNlXSkgYXMgVSkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlcyBhIG5hbWVzcGFjZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuIElmIHRoZSBuYW1lc3BhY2UgZG9lcyBub3QgZXhpc3QsIGl0IGlzIHJlZ2lzdGVyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDb250ZXh0PFQgZXh0ZW5kcyB7fSA9IHt9PihuYW1lc3BhY2U6IHN0cmluZywgdXBkYXRlOiAoc3RhdGU6IFQpID0+IFQpIHtcbiAgY29udGV4dFN0b3JlLnNldFN0YXRlKChzdGF0ZSkgPT4ge1xuICAgIGlmICghKG5hbWVzcGFjZSBpbiBzdGF0ZSkpIHtcbiAgICAgIHN0YXRlW25hbWVzcGFjZV0gPSB7fTtcbiAgICB9XG5cbiAgICBzdGF0ZVtuYW1lc3BhY2VdID0gdXBkYXRlKHN0YXRlW25hbWVzcGFjZV0gYXMgVCk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCB0eXBlIENvbnRleHRDYWxsYmFjazxUIGV4dGVuZHMge30gPSB7fT4gPSAoc3RhdGU6IFJlYWRvbmx5PFQ+IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblxuLyoqXG4gKiBTdWJzY3JpYmVzIHRvIHVwZGF0ZXMgb2YgYSBnaXZlbiBuYW1lc3BhY2UuIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgb2JqZWN0IGlzIGltbXV0YWJsZS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIHRoZSBuYW1lc3BhY2UgdG8gc3Vic2NyaWJlIHRvXG4gKiBAcGFyYW0gY2FsbGJhY2sgYSBmdW5jdGlvbiBpbnZva2VkIHdpdGggdGhlIGN1cnJlbnQgY29udGV4dCB3aGVuZXZlclxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0byB1bnN1YnNjcmliZSBmcm9tIHRoZSBjb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVUb0NvbnRleHQ8VCBleHRlbmRzIHt9ID0ge30+KG5hbWVzcGFjZTogc3RyaW5nLCBjYWxsYmFjazogQ29udGV4dENhbGxiYWNrPFQ+KSB7XG4gIGxldCBwcmV2aW91cyA9IGdldENvbnRleHQ8VD4obmFtZXNwYWNlKTtcblxuICAvLyBzZXQgaW5pdGlhbCB2YWx1ZVxuICBjYWxsYmFjayhPYmplY3QuZnJlZXplKE9iamVjdC5hc3NpZ24oe30sIHByZXZpb3VzKSkpO1xuXG4gIHJldHVybiBjb250ZXh0U3RvcmUuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgIGxldCBjdXJyZW50OiBSZWFkb25seTxUPiB8IG51bGwgfCB1bmRlZmluZWQgPSBuYW1lc3BhY2UgaW4gc3RhdGUgPyAoc3RhdGVbbmFtZXNwYWNlXSBhcyBUKSA6IG51bGw7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gcHJldmlvdXMpIHtcbiAgICAgIHByZXZpb3VzID0gY3VycmVudDtcbiAgICAgIGNhbGxiYWNrKE9iamVjdC5mcmVlemUoT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudCkpKTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVN0b3JlIiwicmVnaXN0ZXJHbG9iYWxTdG9yZSIsImNvbnRleHRTdG9yZSIsIm5vdGhpbmciLCJPYmplY3QiLCJyZWdpc3RlckNvbnRleHQiLCJuYW1lc3BhY2UiLCJpbml0aWFsVmFsdWUiLCJzZXRTdGF0ZSIsInN0YXRlIiwiRXJyb3IiLCJhc3NpZ24iLCJ1bnJlZ2lzdGVyQ29udGV4dCIsImdldENvbnRleHQiLCJzZWxlY3RvciIsImdldFN0YXRlIiwiZnJlZXplIiwidXBkYXRlQ29udGV4dCIsInVwZGF0ZSIsInN1YnNjcmliZVRvQ29udGV4dCIsImNhbGxiYWNrIiwicHJldmlvdXMiLCJzdWJzY3JpYmUiLCJjdXJyZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-context/src/context.ts\n");
588
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ contextStore: () => (/* binding */ contextStore),\n/* harmony export */ getContext: () => (/* binding */ getContext),\n/* harmony export */ registerContext: () => (/* binding */ registerContext),\n/* harmony export */ subscribeToContext: () => (/* binding */ subscribeToContext),\n/* harmony export */ unregisterContext: () => (/* binding */ unregisterContext),\n/* harmony export */ updateContext: () => (/* binding */ updateContext)\n/* harmony export */ });\n/* harmony import */ var zustand_vanilla__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zustand/vanilla */ \"../../../node_modules/zustand/esm/vanilla.mjs\");\n/* harmony import */ var _openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-state */ \"../../framework/esm-state/src/index.ts\");\n/** @module @category Context */ \nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\n\n/**\n * @internal\n *\n * The application context store, using immer to potentially simplify updates\n */ var contextStore = (0,zustand_vanilla__WEBPACK_IMPORTED_MODULE_1__.createStore)()(function() {\n return {};\n});\n(0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.registerGlobalStore)(\"openmrs-app-context\", contextStore);\nvar nothing = Object();\n/**\n * Used by callers to register a new namespace in the application context. Attempting to register\n * an already-registered namespace will display a warning and make no modifications to the state.\n *\n * @param namespace the namespace to register\n * @param initialValue the initial value of the namespace\n */ function registerContext(namespace) {\n var initialValue = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : nothing;\n contextStore.setState(function(state) {\n if (namespace in state) {\n throw new Error(\"Attempted to re-register namespace \".concat(namespace, \" in the app context. Each namespace must be unregistered before the name can be registered again.\"));\n }\n return Object.assign({}, state, _define_property({}, namespace, initialValue === nothing ? {} : initialValue));\n });\n}\n/**\n * Used by caller to unregister a namespace in the application context. Unregistering a namespace\n * will remove the namespace and all associated data.\n */ function unregisterContext(namespace) {\n contextStore.setState(function(state) {\n if (namespace in state) {\n delete state[namespace];\n }\n return state;\n });\n}\n/**\n * Returns an _immutable_ version of the state of the namespace as it is currently\n *\n * @typeParam T The type of the value stored in the namespace\n * @typeParam U The return type of this hook which is mostly relevant when using a selector\n * @param namespace The namespace to load properties from\n * @param selector An optional function which extracts the relevant part of the state\n */ function getContext(namespace) {\n var selector = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function(state) {\n return state;\n };\n var state = contextStore.getState();\n if (namespace in state) {\n return Object.freeze(Object.assign({}, selector ? selector(state[namespace]) : state[namespace]));\n }\n return null;\n}\n/**\n * Updates a namespace in the global context. If the namespace does not exist, it is registered.\n */ function updateContext(namespace, update) {\n contextStore.setState(function(state) {\n if (!(namespace in state)) {\n state[namespace] = {};\n }\n state[namespace] = update(state[namespace]);\n return Object.assign({}, state);\n });\n}\n/**\n * Subscribes to updates of a given namespace. Note that the returned object is immutable.\n *\n * @param namespace the namespace to subscribe to\n * @param callback a function invoked with the current context whenever\n * @returns A function to unsubscribe from the context\n */ function subscribeToContext(namespace, callback) {\n var previous = getContext(namespace);\n // set initial value\n callback(Object.freeze(Object.assign({}, previous)));\n return contextStore.subscribe(function(state) {\n var current = namespace in state ? state[namespace] : null;\n if (current !== previous) {\n previous = current;\n callback(Object.freeze(Object.assign({}, current)));\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb250ZXh0L3NyYy9jb250ZXh0LnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsOEJBQThCLEdBQzlCOzs7Ozs7Ozs7Ozs7OztBQUU4QztBQUNXO0FBTXpEOzs7O0NBSUMsR0FDTSxJQUFNRSxlQUFlRiw0REFBV0EsR0FBc0I7V0FBTyxDQUFDO0dBQUk7QUFFekVDLHVFQUFtQkEsQ0FBb0IsdUJBQXVCQztBQUU5RCxJQUFNQyxVQUFVQztBQUVoQjs7Ozs7O0NBTUMsR0FDTSxTQUFTQyxnQkFBbUNDLFNBQWlCLEVBQTZCO1FBQTNCQyxlQUFBQSxpRUFBa0JKLE9BQU87SUFDN0ZELGFBQWFNLFFBQVEsQ0FBQyxTQUFDQyxPQUFVO1FBQy9CLElBQUlILGFBQWFHLE9BQU87WUFDdEIsTUFBTSxJQUFJQyxNQUNSLHNDQUFnRCxPQUFWSixXQUFVLHNHQUNoRDtRQUNKLENBQUM7UUFFRCxPQUFPRixPQUFPTyxNQUFNLENBQUMsQ0FBQyxHQUFHRixPQUFTLHFCQUFDSCxXQUFZQyxpQkFBaUJKLFVBQVUsQ0FBQyxJQUFJSSxZQUFZO0lBQzdGO0FBQ0YsQ0FBQztBQUVEOzs7Q0FHQyxHQUNNLFNBQVNLLGtCQUFrQk4sU0FBaUIsRUFBRTtJQUNuREosYUFBYU0sUUFBUSxDQUFDLFNBQUNDLE9BQVU7UUFDL0IsSUFBSUgsYUFBYUcsT0FBTztZQUN0QixPQUFPQSxLQUFLLENBQUNILFVBQVU7UUFDekIsQ0FBQztRQUNELE9BQU9HO0lBQ1Q7QUFDRixDQUFDO0FBR0Q7Ozs7Ozs7Q0FPQyxHQUNNLFNBQVNJLFdBQ2RQLFNBQWlCLEVBRUc7UUFEcEJRLFdBQUFBLGlFQUFzQyxTQUFDTDtlQUFVQTtLQUFxQjtJQUV0RSxJQUFNQSxRQUFRUCxhQUFhYSxRQUFRO0lBQ25DLElBQUlULGFBQWFHLE9BQU87UUFDdEIsT0FBT0wsT0FBT1ksTUFBTSxDQUFDWixPQUFPTyxNQUFNLENBQUMsQ0FBQyxHQUFJRyxXQUFXQSxTQUFTTCxLQUFLLENBQUNILFVBQVUsSUFBU0csS0FBSyxDQUFDSCxVQUFVO0lBQ3ZHLENBQUM7SUFFRCxPQUFPLElBQUk7QUFDYixDQUFDO0FBRUQ7O0NBRUMsR0FDTSxTQUFTVyxjQUFpQ1gsU0FBaUIsRUFBRVksTUFBdUIsRUFBRTtJQUMzRmhCLGFBQWFNLFFBQVEsQ0FBQyxTQUFDQyxPQUFVO1FBQy9CLElBQUksQ0FBRUgsQ0FBQUEsYUFBYUcsS0FBSSxHQUFJO1lBQ3pCQSxLQUFLLENBQUNILFVBQVUsR0FBRyxDQUFDO1FBQ3RCLENBQUM7UUFFREcsS0FBSyxDQUFDSCxVQUFVLEdBQUdZLE9BQU9ULEtBQUssQ0FBQ0gsVUFBVTtRQUMxQyxPQUFPRixPQUFPTyxNQUFNLENBQUMsQ0FBQyxHQUFHRjtJQUMzQjtBQUNGLENBQUM7QUFJRDs7Ozs7O0NBTUMsR0FDTSxTQUFTVSxtQkFBc0NiLFNBQWlCLEVBQUVjLFFBQTRCLEVBQUU7SUFDckcsSUFBSUMsV0FBV1IsV0FBY1A7SUFFN0Isb0JBQW9CO0lBQ3BCYyxTQUFTaEIsT0FBT1ksTUFBTSxDQUFDWixPQUFPTyxNQUFNLENBQUMsQ0FBQyxHQUFHVTtJQUV6QyxPQUFPbkIsYUFBYW9CLFNBQVMsQ0FBQyxTQUFDYixPQUFVO1FBQ3ZDLElBQUljLFVBQTBDakIsYUFBYUcsUUFBU0EsS0FBSyxDQUFDSCxVQUFVLEdBQVMsSUFBSTtRQUVqRyxJQUFJaUIsWUFBWUYsVUFBVTtZQUN4QkEsV0FBV0U7WUFDWEgsU0FBU2hCLE9BQU9ZLE1BQU0sQ0FBQ1osT0FBT08sTUFBTSxDQUFDLENBQUMsR0FBR1k7UUFDM0MsQ0FBQztJQUNIO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1jb250ZXh0L3NyYy9jb250ZXh0LnRzPzMyMTQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IENvbnRleHQgKi9cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tICd6dXN0YW5kL3ZhbmlsbGEnO1xuaW1wb3J0IHsgcmVnaXN0ZXJHbG9iYWxTdG9yZSB9IGZyb20gJ0BvcGVubXJzL2VzbS1zdGF0ZSc7XG5cbmludGVyZmFjZSBPcGVubXJzQXBwQ29udGV4dCB7XG4gIFtuYW1lc3BhY2U6IHN0cmluZ106IHVua25vd247XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKlxuICogVGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgc3RvcmUsIHVzaW5nIGltbWVyIHRvIHBvdGVudGlhbGx5IHNpbXBsaWZ5IHVwZGF0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnRleHRTdG9yZSA9IGNyZWF0ZVN0b3JlPE9wZW5tcnNBcHBDb250ZXh0PigpKCgpID0+ICh7fSkpO1xuXG5yZWdpc3Rlckdsb2JhbFN0b3JlPE9wZW5tcnNBcHBDb250ZXh0Pignb3Blbm1ycy1hcHAtY29udGV4dCcsIGNvbnRleHRTdG9yZSk7XG5cbmNvbnN0IG5vdGhpbmcgPSBPYmplY3QoKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGNhbGxlcnMgdG8gcmVnaXN0ZXIgYSBuZXcgbmFtZXNwYWNlIGluIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0LiBBdHRlbXB0aW5nIHRvIHJlZ2lzdGVyXG4gKiBhbiBhbHJlYWR5LXJlZ2lzdGVyZWQgbmFtZXNwYWNlIHdpbGwgZGlzcGxheSBhIHdhcm5pbmcgYW5kIG1ha2Ugbm8gbW9kaWZpY2F0aW9ucyB0byB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSB0aGUgbmFtZXNwYWNlIHRvIHJlZ2lzdGVyXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBuYW1lc3BhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29udGV4dDxUIGV4dGVuZHMge30gPSB7fT4obmFtZXNwYWNlOiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogVCA9IG5vdGhpbmcpIHtcbiAgY29udGV4dFN0b3JlLnNldFN0YXRlKChzdGF0ZSkgPT4ge1xuICAgIGlmIChuYW1lc3BhY2UgaW4gc3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEF0dGVtcHRlZCB0byByZS1yZWdpc3RlciBuYW1lc3BhY2UgJHtuYW1lc3BhY2V9IGluIHRoZSBhcHAgY29udGV4dC4gRWFjaCBuYW1lc3BhY2UgbXVzdCBiZSB1bnJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBuYW1lIGNhbiBiZSByZWdpc3RlcmVkIGFnYWluLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgeyBbbmFtZXNwYWNlXTogaW5pdGlhbFZhbHVlID09PSBub3RoaW5nID8ge30gOiBpbml0aWFsVmFsdWUgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFVzZWQgYnkgY2FsbGVyIHRvIHVucmVnaXN0ZXIgYSBuYW1lc3BhY2UgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQuIFVucmVnaXN0ZXJpbmcgYSBuYW1lc3BhY2VcbiAqIHdpbGwgcmVtb3ZlIHRoZSBuYW1lc3BhY2UgYW5kIGFsbCBhc3NvY2lhdGVkIGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyQ29udGV4dChuYW1lc3BhY2U6IHN0cmluZykge1xuICBjb250ZXh0U3RvcmUuc2V0U3RhdGUoKHN0YXRlKSA9PiB7XG4gICAgaWYgKG5hbWVzcGFjZSBpbiBzdGF0ZSkge1xuICAgICAgZGVsZXRlIHN0YXRlW25hbWVzcGFjZV07XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZXh0PFQgZXh0ZW5kcyB7fSA9IHt9PihuYW1lc3BhY2U6IHN0cmluZyk6IFJlYWRvbmx5PFQ+IHwgbnVsbDtcbi8qKlxuICogUmV0dXJucyBhbiBfaW1tdXRhYmxlXyB2ZXJzaW9uIG9mIHRoZSBzdGF0ZSBvZiB0aGUgbmFtZXNwYWNlIGFzIGl0IGlzIGN1cnJlbnRseVxuICpcbiAqIEB0eXBlUGFyYW0gVCBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBuYW1lc3BhY2VcbiAqIEB0eXBlUGFyYW0gVSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhpcyBob29rIHdoaWNoIGlzIG1vc3RseSByZWxldmFudCB3aGVuIHVzaW5nIGEgc2VsZWN0b3JcbiAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSB0byBsb2FkIHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHNlbGVjdG9yIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGV4dDxUIGV4dGVuZHMge30gPSB7fSwgVSBleHRlbmRzIHt9ID0gVD4oXG4gIG5hbWVzcGFjZTogc3RyaW5nLFxuICBzZWxlY3RvcjogKHN0YXRlOiBSZWFkb25seTxUPikgPT4gVSA9IChzdGF0ZSkgPT4gc3RhdGUgYXMgdW5rbm93biBhcyBVLFxuKTogUmVhZG9ubHk8VT4gfCBudWxsIHtcbiAgY29uc3Qgc3RhdGUgPSBjb250ZXh0U3RvcmUuZ2V0U3RhdGUoKTtcbiAgaWYgKG5hbWVzcGFjZSBpbiBzdGF0ZSkge1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKE9iamVjdC5hc3NpZ24oe30sIChzZWxlY3RvciA/IHNlbGVjdG9yKHN0YXRlW25hbWVzcGFjZV0gYXMgVCkgOiBzdGF0ZVtuYW1lc3BhY2VdKSBhcyBVKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGEgbmFtZXNwYWNlIGluIHRoZSBnbG9iYWwgY29udGV4dC4gSWYgdGhlIG5hbWVzcGFjZSBkb2VzIG5vdCBleGlzdCwgaXQgaXMgcmVnaXN0ZXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQ8VCBleHRlbmRzIHt9ID0ge30+KG5hbWVzcGFjZTogc3RyaW5nLCB1cGRhdGU6IChzdGF0ZTogVCkgPT4gVCkge1xuICBjb250ZXh0U3RvcmUuc2V0U3RhdGUoKHN0YXRlKSA9PiB7XG4gICAgaWYgKCEobmFtZXNwYWNlIGluIHN0YXRlKSkge1xuICAgICAgc3RhdGVbbmFtZXNwYWNlXSA9IHt9O1xuICAgIH1cblxuICAgIHN0YXRlW25hbWVzcGFjZV0gPSB1cGRhdGUoc3RhdGVbbmFtZXNwYWNlXSBhcyBUKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpO1xuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgQ29udGV4dENhbGxiYWNrPFQgZXh0ZW5kcyB7fSA9IHt9PiA9IChzdGF0ZTogUmVhZG9ubHk8VD4gfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXG4vKipcbiAqIFN1YnNjcmliZXMgdG8gdXBkYXRlcyBvZiBhIGdpdmVuIG5hbWVzcGFjZS4gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBvYmplY3QgaXMgaW1tdXRhYmxlLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgdGhlIG5hbWVzcGFjZSB0byBzdWJzY3JpYmUgdG9cbiAqIEBwYXJhbSBjYWxsYmFjayBhIGZ1bmN0aW9uIGludm9rZWQgd2l0aCB0aGUgY3VycmVudCBjb250ZXh0IHdoZW5ldmVyXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRvIHVuc3Vic2NyaWJlIGZyb20gdGhlIGNvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnNjcmliZVRvQ29udGV4dDxUIGV4dGVuZHMge30gPSB7fT4obmFtZXNwYWNlOiBzdHJpbmcsIGNhbGxiYWNrOiBDb250ZXh0Q2FsbGJhY2s8VD4pIHtcbiAgbGV0IHByZXZpb3VzID0gZ2V0Q29udGV4dDxUPihuYW1lc3BhY2UpO1xuXG4gIC8vIHNldCBpbml0aWFsIHZhbHVlXG4gIGNhbGxiYWNrKE9iamVjdC5mcmVlemUoT2JqZWN0LmFzc2lnbih7fSwgcHJldmlvdXMpKSk7XG5cbiAgcmV0dXJuIGNvbnRleHRTdG9yZS5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XG4gICAgbGV0IGN1cnJlbnQ6IFJlYWRvbmx5PFQ+IHwgbnVsbCB8IHVuZGVmaW5lZCA9IG5hbWVzcGFjZSBpbiBzdGF0ZSA/IChzdGF0ZVtuYW1lc3BhY2VdIGFzIFQpIDogbnVsbDtcblxuICAgIGlmIChjdXJyZW50ICE9PSBwcmV2aW91cykge1xuICAgICAgcHJldmlvdXMgPSBjdXJyZW50O1xuICAgICAgY2FsbGJhY2soT2JqZWN0LmZyZWV6ZShPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50KSkpO1xuICAgIH1cbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlU3RvcmUiLCJyZWdpc3Rlckdsb2JhbFN0b3JlIiwiY29udGV4dFN0b3JlIiwibm90aGluZyIsIk9iamVjdCIsInJlZ2lzdGVyQ29udGV4dCIsIm5hbWVzcGFjZSIsImluaXRpYWxWYWx1ZSIsInNldFN0YXRlIiwic3RhdGUiLCJFcnJvciIsImFzc2lnbiIsInVucmVnaXN0ZXJDb250ZXh0IiwiZ2V0Q29udGV4dCIsInNlbGVjdG9yIiwiZ2V0U3RhdGUiLCJmcmVlemUiLCJ1cGRhdGVDb250ZXh0IiwidXBkYXRlIiwic3Vic2NyaWJlVG9Db250ZXh0IiwiY2FsbGJhY2siLCJwcmV2aW91cyIsInN1YnNjcmliZSIsImN1cnJlbnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-context/src/context.ts\n");
589
589
 
590
590
  /***/ }),
591
591
 
@@ -985,7 +985,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
985
985
  \*************************************************************************/
986
986
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
987
987
 
988
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ openmrsComponentDecorator: () => (/* binding */ openmrsComponentDecorator)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"webpack/sharing/consume/default/react-i18next/react-i18next\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_i18next__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var swr__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! swr */ \"../../../node_modules/swr/dist/core/index.mjs\");\n/* harmony import */ var _openmrs_esm_api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @openmrs/esm-api */ \"../../framework/esm-api/src/index.ts\");\n/* harmony import */ var _ComponentContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ComponentContext */ \"../../framework/esm-react-utils/src/ComponentContext.ts\");\nfunction _assert_this_initialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nfunction _class_call_check(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _get_prototype_of(o);\n}\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nfunction _possible_constructor_return(self, call) {\n if (call && (_type_of(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n return _assert_this_initialized(self);\n}\nfunction _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _set_prototype_of(o, p);\n}\nfunction _type_of(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nfunction _is_native_reflect_construct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction _create_super(Derived) {\n var hasNativeReflectConstruct = _is_native_reflect_construct();\n return function _createSuperInternal() {\n var Super = _get_prototype_of(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = _get_prototype_of(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return _possible_constructor_return(this, result);\n };\n}\n\n\n\n\n\nvar defaultOpts = {\n strictMode: true,\n throwErrorsToConsole: true,\n disableTranslations: false\n};\n// Read more about the available config options here: https://swr.vercel.app/docs/api#configuration\nvar defaultSwrConfig = {\n // max number of retries after requests have failed\n errorRetryCount: 3,\n // default fetcher function\n fetcher: _openmrs_esm_api__WEBPACK_IMPORTED_MODULE_3__.openmrsFetch,\n // only revalidate once every 30 seconds\n focusThrottleInterval: 30000\n};\nfunction openmrsComponentDecorator(userOpts) {\n if (typeof userOpts !== \"object\" || typeof userOpts.featureName !== \"string\" || typeof userOpts.moduleName !== \"string\") {\n throw new Error(\"Invalid options\");\n }\n var opts = Object.assign({}, defaultOpts, userOpts);\n return function decorateComponent(Comp) {\n var _React_Component, _OpenmrsReactComponent;\n return _OpenmrsReactComponent = /*#__PURE__*/ function(_superClass) {\n \"use strict\";\n _inherits(OpenmrsReactComponent, _superClass);\n var _super = _create_super(OpenmrsReactComponent);\n function OpenmrsReactComponent(props) {\n _class_call_check(this, OpenmrsReactComponent);\n var _this;\n _this = _super.call(this, props);\n _this.state = {\n caughtError: null,\n caughtErrorInfo: null,\n config: {\n moduleName: opts.moduleName,\n featureName: opts.featureName,\n extension: props._extensionContext\n }\n };\n return _this;\n }\n _create_class(OpenmrsReactComponent, [\n {\n key: \"componentDidCatch\",\n value: function componentDidCatch(err, info) {\n if (info && info.componentStack) {\n err.extra = Object.assign(err.extra || {}, {\n componentStack: info.componentStack\n });\n }\n if (opts.throwErrorsToConsole) {\n setTimeout(function() {\n throw err;\n });\n }\n this.setState({\n caughtError: err,\n caughtErrorInfo: info\n });\n }\n },\n {\n key: \"render\",\n value: function render() {\n if (this.state.caughtError) {\n // TO-DO have a UX designed for when a catastrophic error occurs\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, \"An error has occurred. Please try reloading the page.\");\n } else {\n var content = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n fallback: null\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(swr__WEBPACK_IMPORTED_MODULE_2__.SWRConfig, {\n value: defaultSwrConfig\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ComponentContext__WEBPACK_IMPORTED_MODULE_4__.ComponentContext.Provider, {\n value: this.state.config\n }, opts.disableTranslations ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Comp, this.props) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_i18next__WEBPACK_IMPORTED_MODULE_1__.I18nextProvider, {\n i18n: window.i18next,\n defaultNS: opts.moduleName\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Comp, this.props)))));\n if (opts.strictMode || !(react__WEBPACK_IMPORTED_MODULE_0___default().StrictMode)) {\n return content;\n } else {\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().StrictMode), null, content);\n }\n }\n }\n }\n ]);\n return OpenmrsReactComponent;\n }(_React_Component = (react__WEBPACK_IMPORTED_MODULE_0___default().Component)), _define_property(_OpenmrsReactComponent, \"displayName\", \"OpenmrsReactComponent(\".concat(opts.featureName, \")\")), _OpenmrsReactComponent;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9zcmMvb3Blbm1yc0NvbXBvbmVudERlY29yYXRvci50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUE0RTtBQUM1QjtBQUNoQjtBQUVnQjtBQUNnRDtBQUVoRyxJQUFNTSxjQUFjO0lBQ2xCQyxZQUFZLElBQUk7SUFDaEJDLHNCQUFzQixJQUFJO0lBQzFCQyxxQkFBcUIsS0FBSztBQUM1QjtBQUVBLG1HQUFtRztBQUNuRyxJQUFNQyxtQkFBbUI7SUFDdkIsbURBQW1EO0lBQ25EQyxpQkFBaUI7SUFDakIsMkJBQTJCO0lBQzNCQyxTQUFTUiwwREFBWUE7SUFDckIsd0NBQXdDO0lBQ3hDUyx1QkFBdUI7QUFDekI7QUFtQk8sU0FBU0MsMEJBQTZCQyxRQUFtQyxFQUFFO0lBQ2hGLElBQ0UsT0FBT0EsYUFBYSxZQUNwQixPQUFPQSxTQUFTQyxXQUFXLEtBQUssWUFDaEMsT0FBT0QsU0FBU0UsVUFBVSxLQUFLLFVBQy9CO1FBQ0EsTUFBTSxJQUFJQyxNQUFNLG1CQUFtQjtJQUNyQyxDQUFDO0lBRUQsSUFBTUMsT0FBT0MsT0FBT0MsTUFBTSxDQUFDLENBQUMsR0FBR2YsYUFBYVM7SUFFNUMsT0FBTyxTQUFTTyxrQkFBa0JDLElBQXNCLEVBQW9CO1lBQy9CdkI7UUFBM0MsOENBQU87Ozs7cUJBQU13QixzQkFNQ0MsS0FBcUM7OzswQ0FDekNBO2dCQUNOLE1BQUtDLEtBQUssR0FBRztvQkFDWEMsYUFBYSxJQUFJO29CQUNqQkMsaUJBQWlCLElBQUk7b0JBQ3JCQyxRQUFRO3dCQUNOWixZQUFZRSxLQUFLRixVQUFVO3dCQUMzQkQsYUFBYUcsS0FBS0gsV0FBVzt3QkFDN0JjLFdBQVdMLE1BQU1NLGlCQUFpQjtvQkFDcEM7Z0JBQ0Y7Ozs7O29CQUdGQyxLQUFBQTsyQkFBQUEsU0FBQUEsa0JBQWtCQyxHQUFRLEVBQUVDLElBQWUsRUFBRTt3QkFDM0MsSUFBSUEsUUFBUUEsS0FBS0MsY0FBYyxFQUFFOzRCQUMvQkYsSUFBSUcsS0FBSyxHQUFHaEIsT0FBT0MsTUFBTSxDQUFDWSxJQUFJRyxLQUFLLElBQUksQ0FBQyxHQUFHO2dDQUN6Q0QsZ0JBQWdCRCxLQUFLQyxjQUFjOzRCQUNyQzt3QkFDRixDQUFDO3dCQUVELElBQUloQixLQUFLWCxvQkFBb0IsRUFBRTs0QkFDN0I2QixXQUFXLFdBQU07Z0NBQ2YsTUFBTUosSUFBSTs0QkFDWjt3QkFDRixDQUFDO3dCQUVELElBQUksQ0FBQ0ssUUFBUSxDQUFDOzRCQUNaWCxhQUFhTTs0QkFDYkwsaUJBQWlCTTt3QkFDbkI7b0JBQ0Y7OztvQkFFQUssS0FBQUE7MkJBQUFBLFNBQUFBLFNBQVM7d0JBQ1AsSUFBSSxJQUFJLENBQUNiLEtBQUssQ0FBQ0MsV0FBVyxFQUFFOzRCQUMxQixnRUFBZ0U7NEJBQ2hFLHFCQUFPLDJEQUFDYSxhQUFJO3dCQUNkLE9BQU87NEJBQ0wsSUFBTUMsd0JBQ0osMkRBQUN4QywyQ0FBUUE7Z0NBQUN5QyxVQUFVLElBQUk7NkNBQ3RCLDJEQUFDdkMsMENBQVNBO2dDQUFDd0MsT0FBT2pDOzZDQUNoQiwyREFBQ0wsK0RBQWdCQSxDQUFDdUMsUUFBUTtnQ0FBQ0QsT0FBTyxJQUFJLENBQUNqQixLQUFLLENBQUNHLE1BQU07K0JBQ2hEVixLQUFLVixtQkFBbUIsaUJBQ3ZCLDJEQUFDYyxNQUFTLElBQUksQ0FBQ0UsS0FBSyxrQkFFcEIsMkRBQUN2QiwwREFBZUE7Z0NBQUMyQyxNQUFNQyxPQUFPQyxPQUFPO2dDQUFFQyxXQUFXN0IsS0FBS0YsVUFBVTs2Q0FDL0QsMkRBQUNNLE1BQVMsSUFBSSxDQUFDRSxLQUFLLEVBRXZCOzRCQU1ULElBQUlOLEtBQUtaLFVBQVUsSUFBSSxDQUFDUCx5REFBZ0IsRUFBRTtnQ0FDeEMsT0FBT3lDOzRCQUNULE9BQU87Z0NBQ0wscUJBQU8sMkRBQUN6Qyx5REFBZ0IsUUFBRXlDOzRCQUM1QixDQUFDO3dCQUNILENBQUM7b0JBQ0g7Ozs7VUFqRXlDekMsbUJBQUFBLHdEQUFlLEdBSXhELHlDQUFPbUQsZUFBYyx5QkFBMEMsT0FBakJoQyxLQUFLSCxXQUFXLEVBQUM7SUErRG5FO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9zcmMvb3Blbm1yc0NvbXBvbmVudERlY29yYXRvci50c3g/ODFkOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdHlwZSBDb21wb25lbnRUeXBlLCB0eXBlIEVycm9ySW5mbywgU3VzcGVuc2UgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJMThuZXh0UHJvdmlkZXIgfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IFNXUkNvbmZpZyB9IGZyb20gJ3N3cic7XG5pbXBvcnQgdHlwZSB7fSBmcm9tICdAb3Blbm1ycy9lc20tZ2xvYmFscyc7XG5pbXBvcnQgeyBvcGVubXJzRmV0Y2ggfSBmcm9tICdAb3Blbm1ycy9lc20tYXBpJztcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHQsIHR5cGUgQ29tcG9uZW50Q29uZmlnLCB0eXBlIEV4dGVuc2lvbkRhdGEgfSBmcm9tICcuL0NvbXBvbmVudENvbnRleHQnO1xuXG5jb25zdCBkZWZhdWx0T3B0cyA9IHtcbiAgc3RyaWN0TW9kZTogdHJ1ZSxcbiAgdGhyb3dFcnJvcnNUb0NvbnNvbGU6IHRydWUsXG4gIGRpc2FibGVUcmFuc2xhdGlvbnM6IGZhbHNlLFxufTtcblxuLy8gUmVhZCBtb3JlIGFib3V0IHRoZSBhdmFpbGFibGUgY29uZmlnIG9wdGlvbnMgaGVyZTogaHR0cHM6Ly9zd3IudmVyY2VsLmFwcC9kb2NzL2FwaSNjb25maWd1cmF0aW9uXG5jb25zdCBkZWZhdWx0U3dyQ29uZmlnID0ge1xuICAvLyBtYXggbnVtYmVyIG9mIHJldHJpZXMgYWZ0ZXIgcmVxdWVzdHMgaGF2ZSBmYWlsZWRcbiAgZXJyb3JSZXRyeUNvdW50OiAzLFxuICAvLyBkZWZhdWx0IGZldGNoZXIgZnVuY3Rpb25cbiAgZmV0Y2hlcjogb3Blbm1yc0ZldGNoLFxuICAvLyBvbmx5IHJldmFsaWRhdGUgb25jZSBldmVyeSAzMCBzZWNvbmRzXG4gIGZvY3VzVGhyb3R0bGVJbnRlcnZhbDogMzAwMDAsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERlY29yYXRvck9wdGlvbnMge1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG4gIGZlYXR1cmVOYW1lOiBzdHJpbmc7XG4gIGRpc2FibGVUcmFuc2xhdGlvbnM/OiBib29sZWFuO1xuICBzdHJpY3RNb2RlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVubXJzUmVhY3RDb21wb25lbnRQcm9wcyB7XG4gIF9leHRlbnNpb25Db250ZXh0PzogRXh0ZW5zaW9uRGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVubXJzUmVhY3RDb21wb25lbnRTdGF0ZSB7XG4gIGNhdWdodEVycm9yOiBhbnk7XG4gIGNhdWdodEVycm9ySW5mbzogRXJyb3JJbmZvIHwgbnVsbDtcbiAgY29uZmlnOiBDb21wb25lbnRDb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGVubXJzQ29tcG9uZW50RGVjb3JhdG9yPFQ+KHVzZXJPcHRzOiBDb21wb25lbnREZWNvcmF0b3JPcHRpb25zKSB7XG4gIGlmIChcbiAgICB0eXBlb2YgdXNlck9wdHMgIT09ICdvYmplY3QnIHx8XG4gICAgdHlwZW9mIHVzZXJPcHRzLmZlYXR1cmVOYW1lICE9PSAnc3RyaW5nJyB8fFxuICAgIHR5cGVvZiB1c2VyT3B0cy5tb2R1bGVOYW1lICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb3B0aW9ucycpO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRzLCB1c2VyT3B0cyk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRlQ29tcG9uZW50KENvbXA6IENvbXBvbmVudFR5cGU8VD4pOiBDb21wb25lbnRUeXBlPFQ+IHtcbiAgICByZXR1cm4gY2xhc3MgT3Blbm1yc1JlYWN0Q29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICAgICAgT3Blbm1yc1JlYWN0Q29tcG9uZW50UHJvcHMgJiBULFxuICAgICAgT3Blbm1yc1JlYWN0Q29tcG9uZW50U3RhdGVcbiAgICA+IHtcbiAgICAgIHN0YXRpYyBkaXNwbGF5TmFtZSA9IGBPcGVubXJzUmVhY3RDb21wb25lbnQoJHtvcHRzLmZlYXR1cmVOYW1lfSlgO1xuXG4gICAgICBjb25zdHJ1Y3Rvcihwcm9wczogT3Blbm1yc1JlYWN0Q29tcG9uZW50UHJvcHMgJiBUKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICBjYXVnaHRFcnJvcjogbnVsbCxcbiAgICAgICAgICBjYXVnaHRFcnJvckluZm86IG51bGwsXG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiBvcHRzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgICBmZWF0dXJlTmFtZTogb3B0cy5mZWF0dXJlTmFtZSxcbiAgICAgICAgICAgIGV4dGVuc2lvbjogcHJvcHMuX2V4dGVuc2lvbkNvbnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29tcG9uZW50RGlkQ2F0Y2goZXJyOiBhbnksIGluZm86IEVycm9ySW5mbykge1xuICAgICAgICBpZiAoaW5mbyAmJiBpbmZvLmNvbXBvbmVudFN0YWNrKSB7XG4gICAgICAgICAgZXJyLmV4dHJhID0gT2JqZWN0LmFzc2lnbihlcnIuZXh0cmEgfHwge30sIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrOiBpbmZvLmNvbXBvbmVudFN0YWNrLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMudGhyb3dFcnJvcnNUb0NvbnNvbGUpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGNhdWdodEVycm9yOiBlcnIsXG4gICAgICAgICAgY2F1Z2h0RXJyb3JJbmZvOiBpbmZvLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5jYXVnaHRFcnJvcikge1xuICAgICAgICAgIC8vIFRPLURPIGhhdmUgYSBVWCBkZXNpZ25lZCBmb3Igd2hlbiBhIGNhdGFzdHJvcGhpYyBlcnJvciBvY2N1cnNcbiAgICAgICAgICByZXR1cm4gPGRpdj5BbiBlcnJvciBoYXMgb2NjdXJyZWQuIFBsZWFzZSB0cnkgcmVsb2FkaW5nIHRoZSBwYWdlLjwvZGl2PjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gKFxuICAgICAgICAgICAgPFN1c3BlbnNlIGZhbGxiYWNrPXtudWxsfT5cbiAgICAgICAgICAgICAgPFNXUkNvbmZpZyB2YWx1ZT17ZGVmYXVsdFN3ckNvbmZpZ30+XG4gICAgICAgICAgICAgICAgPENvbXBvbmVudENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoaXMuc3RhdGUuY29uZmlnfT5cbiAgICAgICAgICAgICAgICAgIHtvcHRzLmRpc2FibGVUcmFuc2xhdGlvbnMgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxDb21wIHsuLi50aGlzLnByb3BzfSAvPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPEkxOG5leHRQcm92aWRlciBpMThuPXt3aW5kb3cuaTE4bmV4dH0gZGVmYXVsdE5TPXtvcHRzLm1vZHVsZU5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxDb21wIHsuLi50aGlzLnByb3BzfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L0kxOG5leHRQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9Db21wb25lbnRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgICA8L1NXUkNvbmZpZz5cbiAgICAgICAgICAgIDwvU3VzcGVuc2U+XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChvcHRzLnN0cmljdE1vZGUgfHwgIVJlYWN0LlN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gPFJlYWN0LlN0cmljdE1vZGU+e2NvbnRlbnR9PC9SZWFjdC5TdHJpY3RNb2RlPjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9O1xufVxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiU3VzcGVuc2UiLCJJMThuZXh0UHJvdmlkZXIiLCJTV1JDb25maWciLCJvcGVubXJzRmV0Y2giLCJDb21wb25lbnRDb250ZXh0IiwiZGVmYXVsdE9wdHMiLCJzdHJpY3RNb2RlIiwidGhyb3dFcnJvcnNUb0NvbnNvbGUiLCJkaXNhYmxlVHJhbnNsYXRpb25zIiwiZGVmYXVsdFN3ckNvbmZpZyIsImVycm9yUmV0cnlDb3VudCIsImZldGNoZXIiLCJmb2N1c1Rocm90dGxlSW50ZXJ2YWwiLCJvcGVubXJzQ29tcG9uZW50RGVjb3JhdG9yIiwidXNlck9wdHMiLCJmZWF0dXJlTmFtZSIsIm1vZHVsZU5hbWUiLCJFcnJvciIsIm9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJkZWNvcmF0ZUNvbXBvbmVudCIsIkNvbXAiLCJPcGVubXJzUmVhY3RDb21wb25lbnQiLCJwcm9wcyIsInN0YXRlIiwiY2F1Z2h0RXJyb3IiLCJjYXVnaHRFcnJvckluZm8iLCJjb25maWciLCJleHRlbnNpb24iLCJfZXh0ZW5zaW9uQ29udGV4dCIsImNvbXBvbmVudERpZENhdGNoIiwiZXJyIiwiaW5mbyIsImNvbXBvbmVudFN0YWNrIiwiZXh0cmEiLCJzZXRUaW1lb3V0Iiwic2V0U3RhdGUiLCJyZW5kZXIiLCJkaXYiLCJjb250ZW50IiwiZmFsbGJhY2siLCJ2YWx1ZSIsIlByb3ZpZGVyIiwiaTE4biIsIndpbmRvdyIsImkxOG5leHQiLCJkZWZhdWx0TlMiLCJTdHJpY3RNb2RlIiwiQ29tcG9uZW50IiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-react-utils/src/openmrsComponentDecorator.tsx\n");
988
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ openmrsComponentDecorator: () => (/* binding */ openmrsComponentDecorator)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-i18next */ \"webpack/sharing/consume/default/react-i18next/react-i18next\");\n/* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_i18next__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var swr__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! swr */ \"../../../node_modules/swr/dist/core/index.mjs\");\n/* harmony import */ var _openmrs_esm_api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @openmrs/esm-api */ \"../../framework/esm-api/src/index.ts\");\n/* harmony import */ var _ComponentContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ComponentContext */ \"../../framework/esm-react-utils/src/ComponentContext.ts\");\nfunction _assert_this_initialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nfunction _class_call_check(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _get_prototype_of(o);\n}\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nfunction _possible_constructor_return(self, call) {\n if (call && (_type_of(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n return _assert_this_initialized(self);\n}\nfunction _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _set_prototype_of(o, p);\n}\nfunction _type_of(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nfunction _is_native_reflect_construct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction _create_super(Derived) {\n var hasNativeReflectConstruct = _is_native_reflect_construct();\n return function _createSuperInternal() {\n var Super = _get_prototype_of(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = _get_prototype_of(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return _possible_constructor_return(this, result);\n };\n}\n\n\n\n\n\nvar defaultOpts = {\n strictMode: true,\n throwErrorsToConsole: true,\n disableTranslations: false\n};\n// Read more about the available config options here: https://swr.vercel.app/docs/api#configuration\nvar defaultSwrConfig = {\n // max number of retries after requests have failed\n errorRetryCount: 3,\n // default fetcher function\n fetcher: _openmrs_esm_api__WEBPACK_IMPORTED_MODULE_3__.openmrsFetch,\n // only revalidate once every 30 seconds\n focusThrottleInterval: 30000\n};\nfunction openmrsComponentDecorator(userOpts) {\n if (typeof userOpts !== \"object\" || typeof userOpts.featureName !== \"string\" || typeof userOpts.moduleName !== \"string\") {\n throw new Error(\"Invalid options\");\n }\n var opts = Object.assign({}, defaultOpts, userOpts);\n return function decorateComponent(Comp) {\n var _React_Component, _OpenmrsReactComponent;\n return _OpenmrsReactComponent = /*#__PURE__*/ function(_superClass) {\n \"use strict\";\n _inherits(OpenmrsReactComponent, _superClass);\n var _super = _create_super(OpenmrsReactComponent);\n function OpenmrsReactComponent(props) {\n _class_call_check(this, OpenmrsReactComponent);\n var _this;\n _this = _super.call(this, props);\n _this.state = {\n caughtError: null,\n caughtErrorInfo: null,\n config: {\n moduleName: opts.moduleName,\n featureName: opts.featureName,\n extension: props._extensionContext\n }\n };\n return _this;\n }\n _create_class(OpenmrsReactComponent, [\n {\n key: \"componentDidCatch\",\n value: function componentDidCatch(err, info) {\n if (info && info.componentStack) {\n err.extra = Object.assign(err.extra || {}, {\n componentStack: info.componentStack\n });\n }\n if (opts.throwErrorsToConsole) {\n setTimeout(function() {\n throw err;\n });\n }\n this.setState({\n caughtError: err,\n caughtErrorInfo: info\n });\n }\n },\n {\n key: \"render\",\n value: function render() {\n if (this.state.caughtError) {\n // TO-DO have a UX designed for when a catastrophic error occurs\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, \"An error has occurred. Please try reloading the page.\");\n } else {\n var content = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n fallback: null\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(swr__WEBPACK_IMPORTED_MODULE_2__.SWRConfig, {\n value: defaultSwrConfig\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ComponentContext__WEBPACK_IMPORTED_MODULE_4__.ComponentContext.Provider, {\n value: this.state.config\n }, opts.disableTranslations ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Comp, this.props) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_i18next__WEBPACK_IMPORTED_MODULE_1__.I18nextProvider, {\n i18n: window.i18next,\n defaultNS: this.props._extensionContext ? \"\".concat(opts.moduleName, \"___\").concat(this.props._extensionContext.extensionSlotName, \"___\").concat(this.props._extensionContext.extensionId) : opts.moduleName\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Comp, this.props)))));\n if (opts.strictMode || !(react__WEBPACK_IMPORTED_MODULE_0___default().StrictMode)) {\n return content;\n } else {\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().StrictMode), null, content);\n }\n }\n }\n }\n ]);\n return OpenmrsReactComponent;\n }(_React_Component = (react__WEBPACK_IMPORTED_MODULE_0___default().Component)), _define_property(_OpenmrsReactComponent, \"displayName\", \"OpenmrsReactComponent(\".concat(opts.featureName, \")\")), _OpenmrsReactComponent;\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9zcmMvb3Blbm1yc0NvbXBvbmVudERlY29yYXRvci50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUE0RTtBQUM1QjtBQUNoQjtBQUVnQjtBQUNnRDtBQUVoRyxJQUFNTSxjQUFjO0lBQ2xCQyxZQUFZLElBQUk7SUFDaEJDLHNCQUFzQixJQUFJO0lBQzFCQyxxQkFBcUIsS0FBSztBQUM1QjtBQUVBLG1HQUFtRztBQUNuRyxJQUFNQyxtQkFBbUI7SUFDdkIsbURBQW1EO0lBQ25EQyxpQkFBaUI7SUFDakIsMkJBQTJCO0lBQzNCQyxTQUFTUiwwREFBWUE7SUFDckIsd0NBQXdDO0lBQ3hDUyx1QkFBdUI7QUFDekI7QUFtQk8sU0FBU0MsMEJBQTZCQyxRQUFtQyxFQUFFO0lBQ2hGLElBQ0UsT0FBT0EsYUFBYSxZQUNwQixPQUFPQSxTQUFTQyxXQUFXLEtBQUssWUFDaEMsT0FBT0QsU0FBU0UsVUFBVSxLQUFLLFVBQy9CO1FBQ0EsTUFBTSxJQUFJQyxNQUFNLG1CQUFtQjtJQUNyQyxDQUFDO0lBRUQsSUFBTUMsT0FBT0MsT0FBT0MsTUFBTSxDQUFDLENBQUMsR0FBR2YsYUFBYVM7SUFFNUMsT0FBTyxTQUFTTyxrQkFBa0JDLElBQXNCLEVBQW9CO1lBQy9CdkI7UUFBM0MsOENBQU87Ozs7cUJBQU13QixzQkFNQ0MsS0FBcUM7OzswQ0FDekNBO2dCQUNOLE1BQUtDLEtBQUssR0FBRztvQkFDWEMsYUFBYSxJQUFJO29CQUNqQkMsaUJBQWlCLElBQUk7b0JBQ3JCQyxRQUFRO3dCQUNOWixZQUFZRSxLQUFLRixVQUFVO3dCQUMzQkQsYUFBYUcsS0FBS0gsV0FBVzt3QkFDN0JjLFdBQVdMLE1BQU1NLGlCQUFpQjtvQkFDcEM7Z0JBQ0Y7Ozs7O29CQUdGQyxLQUFBQTsyQkFBQUEsU0FBQUEsa0JBQWtCQyxHQUFRLEVBQUVDLElBQWUsRUFBRTt3QkFDM0MsSUFBSUEsUUFBUUEsS0FBS0MsY0FBYyxFQUFFOzRCQUMvQkYsSUFBSUcsS0FBSyxHQUFHaEIsT0FBT0MsTUFBTSxDQUFDWSxJQUFJRyxLQUFLLElBQUksQ0FBQyxHQUFHO2dDQUN6Q0QsZ0JBQWdCRCxLQUFLQyxjQUFjOzRCQUNyQzt3QkFDRixDQUFDO3dCQUVELElBQUloQixLQUFLWCxvQkFBb0IsRUFBRTs0QkFDN0I2QixXQUFXLFdBQU07Z0NBQ2YsTUFBTUosSUFBSTs0QkFDWjt3QkFDRixDQUFDO3dCQUVELElBQUksQ0FBQ0ssUUFBUSxDQUFDOzRCQUNaWCxhQUFhTTs0QkFDYkwsaUJBQWlCTTt3QkFDbkI7b0JBQ0Y7OztvQkFFQUssS0FBQUE7MkJBQUFBLFNBQUFBLFNBQVM7d0JBQ1AsSUFBSSxJQUFJLENBQUNiLEtBQUssQ0FBQ0MsV0FBVyxFQUFFOzRCQUMxQixnRUFBZ0U7NEJBQ2hFLHFCQUFPLDJEQUFDYSxhQUFJO3dCQUNkLE9BQU87NEJBQ0wsSUFBTUMsd0JBQ0osMkRBQUN4QywyQ0FBUUE7Z0NBQUN5QyxVQUFVLElBQUk7NkNBQ3RCLDJEQUFDdkMsMENBQVNBO2dDQUFDd0MsT0FBT2pDOzZDQUNoQiwyREFBQ0wsK0RBQWdCQSxDQUFDdUMsUUFBUTtnQ0FBQ0QsT0FBTyxJQUFJLENBQUNqQixLQUFLLENBQUNHLE1BQU07K0JBQ2hEVixLQUFLVixtQkFBbUIsaUJBQ3ZCLDJEQUFDYyxNQUFTLElBQUksQ0FBQ0UsS0FBSyxrQkFFcEIsMkRBQUN2QiwwREFBZUE7Z0NBQ2QyQyxNQUFNQyxPQUFPQyxPQUFPO2dDQUNwQkMsV0FDRSxJQUFJLENBQUN2QixLQUFLLENBQUNNLGlCQUFpQixHQUN4QixHQUF3QixPQUFyQlosS0FBS0YsVUFBVSxFQUFDLE9BQXlELE9BQXBELElBQUksQ0FBQ1EsS0FBSyxDQUFDTSxpQkFBaUIsQ0FBQ2tCLGlCQUFpQixFQUFDLE9BQThDLE9BQXpDLElBQUksQ0FBQ3hCLEtBQUssQ0FBQ00saUJBQWlCLENBQUNtQixXQUFXLElBQ3BIL0IsS0FBS0YsVUFBVTs2Q0FHckIsMkRBQUNNLE1BQVMsSUFBSSxDQUFDRSxLQUFLLEVBRXZCOzRCQU1ULElBQUlOLEtBQUtaLFVBQVUsSUFBSSxDQUFDUCx5REFBZ0IsRUFBRTtnQ0FDeEMsT0FBT3lDOzRCQUNULE9BQU87Z0NBQ0wscUJBQU8sMkRBQUN6Qyx5REFBZ0IsUUFBRXlDOzRCQUM1QixDQUFDO3dCQUNILENBQUM7b0JBQ0g7Ozs7VUF4RXlDekMsbUJBQUFBLHdEQUFlLEdBSXhELHlDQUFPcUQsZUFBYyx5QkFBMEMsT0FBakJsQyxLQUFLSCxXQUFXLEVBQUM7SUFzRW5FO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9zcmMvb3Blbm1yc0NvbXBvbmVudERlY29yYXRvci50c3g/ODFkOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdHlwZSBDb21wb25lbnRUeXBlLCB0eXBlIEVycm9ySW5mbywgU3VzcGVuc2UgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJMThuZXh0UHJvdmlkZXIgfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IFNXUkNvbmZpZyB9IGZyb20gJ3N3cic7XG5pbXBvcnQgdHlwZSB7fSBmcm9tICdAb3Blbm1ycy9lc20tZ2xvYmFscyc7XG5pbXBvcnQgeyBvcGVubXJzRmV0Y2ggfSBmcm9tICdAb3Blbm1ycy9lc20tYXBpJztcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHQsIHR5cGUgQ29tcG9uZW50Q29uZmlnLCB0eXBlIEV4dGVuc2lvbkRhdGEgfSBmcm9tICcuL0NvbXBvbmVudENvbnRleHQnO1xuXG5jb25zdCBkZWZhdWx0T3B0cyA9IHtcbiAgc3RyaWN0TW9kZTogdHJ1ZSxcbiAgdGhyb3dFcnJvcnNUb0NvbnNvbGU6IHRydWUsXG4gIGRpc2FibGVUcmFuc2xhdGlvbnM6IGZhbHNlLFxufTtcblxuLy8gUmVhZCBtb3JlIGFib3V0IHRoZSBhdmFpbGFibGUgY29uZmlnIG9wdGlvbnMgaGVyZTogaHR0cHM6Ly9zd3IudmVyY2VsLmFwcC9kb2NzL2FwaSNjb25maWd1cmF0aW9uXG5jb25zdCBkZWZhdWx0U3dyQ29uZmlnID0ge1xuICAvLyBtYXggbnVtYmVyIG9mIHJldHJpZXMgYWZ0ZXIgcmVxdWVzdHMgaGF2ZSBmYWlsZWRcbiAgZXJyb3JSZXRyeUNvdW50OiAzLFxuICAvLyBkZWZhdWx0IGZldGNoZXIgZnVuY3Rpb25cbiAgZmV0Y2hlcjogb3Blbm1yc0ZldGNoLFxuICAvLyBvbmx5IHJldmFsaWRhdGUgb25jZSBldmVyeSAzMCBzZWNvbmRzXG4gIGZvY3VzVGhyb3R0bGVJbnRlcnZhbDogMzAwMDAsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERlY29yYXRvck9wdGlvbnMge1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG4gIGZlYXR1cmVOYW1lOiBzdHJpbmc7XG4gIGRpc2FibGVUcmFuc2xhdGlvbnM/OiBib29sZWFuO1xuICBzdHJpY3RNb2RlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVubXJzUmVhY3RDb21wb25lbnRQcm9wcyB7XG4gIF9leHRlbnNpb25Db250ZXh0PzogRXh0ZW5zaW9uRGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVubXJzUmVhY3RDb21wb25lbnRTdGF0ZSB7XG4gIGNhdWdodEVycm9yOiBhbnk7XG4gIGNhdWdodEVycm9ySW5mbzogRXJyb3JJbmZvIHwgbnVsbDtcbiAgY29uZmlnOiBDb21wb25lbnRDb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGVubXJzQ29tcG9uZW50RGVjb3JhdG9yPFQ+KHVzZXJPcHRzOiBDb21wb25lbnREZWNvcmF0b3JPcHRpb25zKSB7XG4gIGlmIChcbiAgICB0eXBlb2YgdXNlck9wdHMgIT09ICdvYmplY3QnIHx8XG4gICAgdHlwZW9mIHVzZXJPcHRzLmZlYXR1cmVOYW1lICE9PSAnc3RyaW5nJyB8fFxuICAgIHR5cGVvZiB1c2VyT3B0cy5tb2R1bGVOYW1lICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb3B0aW9ucycpO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRzLCB1c2VyT3B0cyk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRlQ29tcG9uZW50KENvbXA6IENvbXBvbmVudFR5cGU8VD4pOiBDb21wb25lbnRUeXBlPFQ+IHtcbiAgICByZXR1cm4gY2xhc3MgT3Blbm1yc1JlYWN0Q29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICAgICAgT3Blbm1yc1JlYWN0Q29tcG9uZW50UHJvcHMgJiBULFxuICAgICAgT3Blbm1yc1JlYWN0Q29tcG9uZW50U3RhdGVcbiAgICA+IHtcbiAgICAgIHN0YXRpYyBkaXNwbGF5TmFtZSA9IGBPcGVubXJzUmVhY3RDb21wb25lbnQoJHtvcHRzLmZlYXR1cmVOYW1lfSlgO1xuXG4gICAgICBjb25zdHJ1Y3Rvcihwcm9wczogT3Blbm1yc1JlYWN0Q29tcG9uZW50UHJvcHMgJiBUKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICBjYXVnaHRFcnJvcjogbnVsbCxcbiAgICAgICAgICBjYXVnaHRFcnJvckluZm86IG51bGwsXG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiBvcHRzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgICBmZWF0dXJlTmFtZTogb3B0cy5mZWF0dXJlTmFtZSxcbiAgICAgICAgICAgIGV4dGVuc2lvbjogcHJvcHMuX2V4dGVuc2lvbkNvbnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29tcG9uZW50RGlkQ2F0Y2goZXJyOiBhbnksIGluZm86IEVycm9ySW5mbykge1xuICAgICAgICBpZiAoaW5mbyAmJiBpbmZvLmNvbXBvbmVudFN0YWNrKSB7XG4gICAgICAgICAgZXJyLmV4dHJhID0gT2JqZWN0LmFzc2lnbihlcnIuZXh0cmEgfHwge30sIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrOiBpbmZvLmNvbXBvbmVudFN0YWNrLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMudGhyb3dFcnJvcnNUb0NvbnNvbGUpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGNhdWdodEVycm9yOiBlcnIsXG4gICAgICAgICAgY2F1Z2h0RXJyb3JJbmZvOiBpbmZvLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5jYXVnaHRFcnJvcikge1xuICAgICAgICAgIC8vIFRPLURPIGhhdmUgYSBVWCBkZXNpZ25lZCBmb3Igd2hlbiBhIGNhdGFzdHJvcGhpYyBlcnJvciBvY2N1cnNcbiAgICAgICAgICByZXR1cm4gPGRpdj5BbiBlcnJvciBoYXMgb2NjdXJyZWQuIFBsZWFzZSB0cnkgcmVsb2FkaW5nIHRoZSBwYWdlLjwvZGl2PjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gKFxuICAgICAgICAgICAgPFN1c3BlbnNlIGZhbGxiYWNrPXtudWxsfT5cbiAgICAgICAgICAgICAgPFNXUkNvbmZpZyB2YWx1ZT17ZGVmYXVsdFN3ckNvbmZpZ30+XG4gICAgICAgICAgICAgICAgPENvbXBvbmVudENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoaXMuc3RhdGUuY29uZmlnfT5cbiAgICAgICAgICAgICAgICAgIHtvcHRzLmRpc2FibGVUcmFuc2xhdGlvbnMgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxDb21wIHsuLi50aGlzLnByb3BzfSAvPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPEkxOG5leHRQcm92aWRlclxuICAgICAgICAgICAgICAgICAgICAgIGkxOG49e3dpbmRvdy5pMThuZXh0fVxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHROUz17XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLl9leHRlbnNpb25Db250ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7b3B0cy5tb2R1bGVOYW1lfV9fXyR7dGhpcy5wcm9wcy5fZXh0ZW5zaW9uQ29udGV4dC5leHRlbnNpb25TbG90TmFtZX1fX18ke3RoaXMucHJvcHMuX2V4dGVuc2lvbkNvbnRleHQuZXh0ZW5zaW9uSWR9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9wdHMubW9kdWxlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxDb21wIHsuLi50aGlzLnByb3BzfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L0kxOG5leHRQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9Db21wb25lbnRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgICA8L1NXUkNvbmZpZz5cbiAgICAgICAgICAgIDwvU3VzcGVuc2U+XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChvcHRzLnN0cmljdE1vZGUgfHwgIVJlYWN0LlN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gPFJlYWN0LlN0cmljdE1vZGU+e2NvbnRlbnR9PC9SZWFjdC5TdHJpY3RNb2RlPjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9O1xufVxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiU3VzcGVuc2UiLCJJMThuZXh0UHJvdmlkZXIiLCJTV1JDb25maWciLCJvcGVubXJzRmV0Y2giLCJDb21wb25lbnRDb250ZXh0IiwiZGVmYXVsdE9wdHMiLCJzdHJpY3RNb2RlIiwidGhyb3dFcnJvcnNUb0NvbnNvbGUiLCJkaXNhYmxlVHJhbnNsYXRpb25zIiwiZGVmYXVsdFN3ckNvbmZpZyIsImVycm9yUmV0cnlDb3VudCIsImZldGNoZXIiLCJmb2N1c1Rocm90dGxlSW50ZXJ2YWwiLCJvcGVubXJzQ29tcG9uZW50RGVjb3JhdG9yIiwidXNlck9wdHMiLCJmZWF0dXJlTmFtZSIsIm1vZHVsZU5hbWUiLCJFcnJvciIsIm9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJkZWNvcmF0ZUNvbXBvbmVudCIsIkNvbXAiLCJPcGVubXJzUmVhY3RDb21wb25lbnQiLCJwcm9wcyIsInN0YXRlIiwiY2F1Z2h0RXJyb3IiLCJjYXVnaHRFcnJvckluZm8iLCJjb25maWciLCJleHRlbnNpb24iLCJfZXh0ZW5zaW9uQ29udGV4dCIsImNvbXBvbmVudERpZENhdGNoIiwiZXJyIiwiaW5mbyIsImNvbXBvbmVudFN0YWNrIiwiZXh0cmEiLCJzZXRUaW1lb3V0Iiwic2V0U3RhdGUiLCJyZW5kZXIiLCJkaXYiLCJjb250ZW50IiwiZmFsbGJhY2siLCJ2YWx1ZSIsIlByb3ZpZGVyIiwiaTE4biIsIndpbmRvdyIsImkxOG5leHQiLCJkZWZhdWx0TlMiLCJleHRlbnNpb25TbG90TmFtZSIsImV4dGVuc2lvbklkIiwiU3RyaWN0TW9kZSIsIkNvbXBvbmVudCIsImRpc3BsYXlOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-react-utils/src/openmrsComponentDecorator.tsx\n");
989
989
 
990
990
  /***/ }),
991
991