@openmrs/esm-app-shell 8.0.1-pre.3331 → 8.0.1-pre.3349

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 (171) hide show
  1. package/.turbo/turbo-build.log +11 -13
  2. package/dist/{b12e3025071aa50e.js.map → 18821cd9b4faaa77.js.map} +1 -1
  3. package/dist/{546c6bfce53cd9de.js → 86ad42432ebd7435.js} +1 -1
  4. package/dist/a48ac555f9c8f4b1.js +1 -0
  5. package/dist/{de6eff539629b20c.js.map → dba4329a5f923cfd.js.map} +1 -1
  6. package/dist/index.html +1 -1
  7. package/dist/{openmrs.68b79c078fc8efc7.js → openmrs.fc321a65c26e79f8.js} +1 -1
  8. package/dist/{openmrs.68b79c078fc8efc7.js.map → openmrs.fc321a65c26e79f8.js.map} +1 -1
  9. package/dist/service-worker.js +1 -1
  10. package/lib/3e16b91f3a85e08c.js +22 -0
  11. package/lib/{b0c4fd2f830ff03f.js → 7b7cacfbf9fb1472.js} +2 -2
  12. package/lib/{e7716cbca8f87729.js → d8be2a4a8de86aa7.js} +1 -1
  13. package/lib/esm-devtools-app/main.js +1 -1
  14. package/lib/esm-devtools-app/openmrs-esm-devtools-app.js +1 -1
  15. package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json +3 -3
  16. package/lib/esm-devtools-app/routes.json +1 -1
  17. package/lib/esm-help-menu-app/108.js +1 -0
  18. package/lib/esm-help-menu-app/108.js.map +1 -0
  19. package/lib/esm-help-menu-app/11.js +1 -0
  20. package/lib/esm-help-menu-app/11.js.map +1 -0
  21. package/lib/esm-help-menu-app/248.js +1 -0
  22. package/lib/esm-help-menu-app/248.js.map +1 -0
  23. package/lib/esm-help-menu-app/322.js +1 -0
  24. package/lib/esm-help-menu-app/322.js.map +1 -0
  25. package/lib/esm-help-menu-app/326.js +2 -0
  26. package/lib/esm-help-menu-app/326.js.map +1 -0
  27. package/lib/esm-help-menu-app/380.js +1 -0
  28. package/lib/esm-help-menu-app/380.js.map +1 -0
  29. package/lib/esm-help-menu-app/555.js +1 -0
  30. package/lib/esm-help-menu-app/555.js.map +1 -0
  31. package/lib/esm-help-menu-app/556.js +2 -0
  32. package/lib/{esm-offline-tools-app/9346.js.LICENSE.txt → esm-help-menu-app/556.js.LICENSE.txt} +10 -0
  33. package/lib/esm-help-menu-app/556.js.map +1 -0
  34. package/lib/esm-help-menu-app/623.js +2 -0
  35. package/lib/esm-help-menu-app/623.js.map +1 -0
  36. package/lib/esm-help-menu-app/660.js +2 -0
  37. package/lib/esm-help-menu-app/660.js.map +1 -0
  38. package/lib/esm-help-menu-app/770.js +2 -0
  39. package/lib/esm-help-menu-app/770.js.map +1 -0
  40. package/lib/esm-help-menu-app/802.js +1 -0
  41. package/lib/esm-help-menu-app/802.js.map +1 -0
  42. package/lib/esm-help-menu-app/90.js +1 -0
  43. package/lib/esm-help-menu-app/90.js.map +1 -0
  44. package/lib/esm-help-menu-app/932.js +2 -0
  45. package/lib/esm-help-menu-app/932.js.map +1 -0
  46. package/lib/esm-help-menu-app/main.js +1 -0
  47. package/lib/esm-help-menu-app/main.js.map +1 -0
  48. package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js +1 -0
  49. package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js.buildmanifest.json +464 -0
  50. package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js.map +1 -0
  51. package/lib/esm-help-menu-app/routes.json +1 -0
  52. package/lib/esm-implementer-tools-app/9538.js +1 -1
  53. package/lib/esm-implementer-tools-app/main.js +1 -1
  54. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js +1 -1
  55. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.buildmanifest.json +6 -6
  56. package/lib/esm-implementer-tools-app/routes.json +1 -1
  57. package/lib/esm-login-app/9182.js +1 -1
  58. package/lib/esm-login-app/main.js +1 -1
  59. package/lib/esm-login-app/main.js.map +1 -1
  60. package/lib/esm-login-app/openmrs-esm-login-app.js +1 -1
  61. package/lib/esm-login-app/openmrs-esm-login-app.js.buildmanifest.json +6 -6
  62. package/lib/esm-login-app/openmrs-esm-login-app.js.map +1 -1
  63. package/lib/esm-login-app/routes.json +1 -1
  64. package/lib/esm-primary-navigation-app/9538.js +1 -1
  65. package/lib/esm-primary-navigation-app/main.js +1 -1
  66. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js +1 -1
  67. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json +6 -6
  68. package/lib/esm-primary-navigation-app/routes.json +1 -1
  69. package/lib/index.html +2 -2
  70. package/lib/openmrs.js +6 -6
  71. package/lib/service-worker.js +1 -1
  72. package/package.json +3 -3
  73. package/dist/5e8aea2775453e88.js +0 -1
  74. package/lib/a45dcb6da2ee08e1.js +0 -22
  75. package/lib/esm-offline-tools-app/1119.js +0 -1
  76. package/lib/esm-offline-tools-app/1185.js +0 -1
  77. package/lib/esm-offline-tools-app/1185.js.map +0 -1
  78. package/lib/esm-offline-tools-app/1197.js +0 -1
  79. package/lib/esm-offline-tools-app/1405.js +0 -1
  80. package/lib/esm-offline-tools-app/1405.js.map +0 -1
  81. package/lib/esm-offline-tools-app/1584c81d564cacde.svg +0 -8
  82. package/lib/esm-offline-tools-app/2146.js +0 -1
  83. package/lib/esm-offline-tools-app/2500.js +0 -1
  84. package/lib/esm-offline-tools-app/2500.js.map +0 -1
  85. package/lib/esm-offline-tools-app/2690.js +0 -1
  86. package/lib/esm-offline-tools-app/3099.js +0 -1
  87. package/lib/esm-offline-tools-app/3389.js +0 -2
  88. package/lib/esm-offline-tools-app/3389.js.map +0 -1
  89. package/lib/esm-offline-tools-app/3584.js +0 -1
  90. package/lib/esm-offline-tools-app/3709.js +0 -1
  91. package/lib/esm-offline-tools-app/3709.js.map +0 -1
  92. package/lib/esm-offline-tools-app/4055.js +0 -1
  93. package/lib/esm-offline-tools-app/4132.js +0 -1
  94. package/lib/esm-offline-tools-app/4300.js +0 -1
  95. package/lib/esm-offline-tools-app/4335.js +0 -1
  96. package/lib/esm-offline-tools-app/4618.js +0 -1
  97. package/lib/esm-offline-tools-app/4652.js +0 -1
  98. package/lib/esm-offline-tools-app/4944.js +0 -1
  99. package/lib/esm-offline-tools-app/5173.js +0 -1
  100. package/lib/esm-offline-tools-app/5241.js +0 -1
  101. package/lib/esm-offline-tools-app/5442.js +0 -1
  102. package/lib/esm-offline-tools-app/5623.js +0 -2
  103. package/lib/esm-offline-tools-app/5623.js.map +0 -1
  104. package/lib/esm-offline-tools-app/5661.js +0 -1
  105. package/lib/esm-offline-tools-app/5725.js +0 -2
  106. package/lib/esm-offline-tools-app/5725.js.LICENSE.txt +0 -9
  107. package/lib/esm-offline-tools-app/5725.js.map +0 -1
  108. package/lib/esm-offline-tools-app/5770.js +0 -2
  109. package/lib/esm-offline-tools-app/5770.js.map +0 -1
  110. package/lib/esm-offline-tools-app/6022.js +0 -1
  111. package/lib/esm-offline-tools-app/6090.js +0 -2
  112. package/lib/esm-offline-tools-app/6090.js.LICENSE.txt +0 -9
  113. package/lib/esm-offline-tools-app/6090.js.map +0 -1
  114. package/lib/esm-offline-tools-app/6224.js +0 -1
  115. package/lib/esm-offline-tools-app/6224.js.map +0 -1
  116. package/lib/esm-offline-tools-app/6248.js +0 -1
  117. package/lib/esm-offline-tools-app/6248.js.map +0 -1
  118. package/lib/esm-offline-tools-app/6252.js +0 -1
  119. package/lib/esm-offline-tools-app/6252.js.map +0 -1
  120. package/lib/esm-offline-tools-app/6269.js +0 -2
  121. package/lib/esm-offline-tools-app/6269.js.LICENSE.txt +0 -9
  122. package/lib/esm-offline-tools-app/6269.js.map +0 -1
  123. package/lib/esm-offline-tools-app/6326.js +0 -2
  124. package/lib/esm-offline-tools-app/6326.js.map +0 -1
  125. package/lib/esm-offline-tools-app/6408.js +0 -2
  126. package/lib/esm-offline-tools-app/6408.js.LICENSE.txt +0 -32
  127. package/lib/esm-offline-tools-app/6408.js.map +0 -1
  128. package/lib/esm-offline-tools-app/6468.js +0 -1
  129. package/lib/esm-offline-tools-app/6679.js +0 -1
  130. package/lib/esm-offline-tools-app/6840.js +0 -1
  131. package/lib/esm-offline-tools-app/6859.js +0 -1
  132. package/lib/esm-offline-tools-app/7097.js +0 -1
  133. package/lib/esm-offline-tools-app/7159.js +0 -1
  134. package/lib/esm-offline-tools-app/723.js +0 -1
  135. package/lib/esm-offline-tools-app/7380.js +0 -1
  136. package/lib/esm-offline-tools-app/7380.js.map +0 -1
  137. package/lib/esm-offline-tools-app/7617.js +0 -1
  138. package/lib/esm-offline-tools-app/795.js +0 -1
  139. package/lib/esm-offline-tools-app/8163.js +0 -1
  140. package/lib/esm-offline-tools-app/8349.js +0 -1
  141. package/lib/esm-offline-tools-app/8618.js +0 -1
  142. package/lib/esm-offline-tools-app/8650.js +0 -1
  143. package/lib/esm-offline-tools-app/8650.js.map +0 -1
  144. package/lib/esm-offline-tools-app/890.js +0 -1
  145. package/lib/esm-offline-tools-app/9214.js +0 -1
  146. package/lib/esm-offline-tools-app/9346.js +0 -2
  147. package/lib/esm-offline-tools-app/9346.js.map +0 -1
  148. package/lib/esm-offline-tools-app/9538.js +0 -1
  149. package/lib/esm-offline-tools-app/9569.js +0 -1
  150. package/lib/esm-offline-tools-app/9825.js +0 -2
  151. package/lib/esm-offline-tools-app/9825.js.map +0 -1
  152. package/lib/esm-offline-tools-app/986.js +0 -1
  153. package/lib/esm-offline-tools-app/9879.js +0 -1
  154. package/lib/esm-offline-tools-app/9895.js +0 -1
  155. package/lib/esm-offline-tools-app/9900.js +0 -1
  156. package/lib/esm-offline-tools-app/9913.js +0 -1
  157. package/lib/esm-offline-tools-app/main.js +0 -2
  158. package/lib/esm-offline-tools-app/main.js.LICENSE.txt +0 -15
  159. package/lib/esm-offline-tools-app/main.js.map +0 -1
  160. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js +0 -1
  161. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json +0 -1518
  162. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.map +0 -1
  163. package/lib/esm-offline-tools-app/routes.json +0 -1
  164. /package/dist/{b12e3025071aa50e.js → 18821cd9b4faaa77.js} +0 -0
  165. /package/dist/{de6eff539629b20c.js → dba4329a5f923cfd.js} +0 -0
  166. /package/lib/{4e8f2e9f00a52bcc.js → 6976c18a7cf00d61.js} +0 -0
  167. /package/lib/{esm-offline-tools-app/6326.js.LICENSE.txt → esm-help-menu-app/326.js.LICENSE.txt} +0 -0
  168. /package/lib/{esm-offline-tools-app/5623.js.LICENSE.txt → esm-help-menu-app/623.js.LICENSE.txt} +0 -0
  169. /package/lib/{esm-offline-tools-app/5770.js.LICENSE.txt → esm-help-menu-app/660.js.LICENSE.txt} +0 -0
  170. /package/lib/{esm-offline-tools-app/3389.js.LICENSE.txt → esm-help-menu-app/770.js.LICENSE.txt} +0 -0
  171. /package/lib/{esm-offline-tools-app/9825.js.LICENSE.txt → esm-help-menu-app/932.js.LICENSE.txt} +0 -0
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /*
3
+ * ATTENTION: An "eval-source-map" devtool has been used.
4
+ * This devtool is neither made for production nor for readable output files.
5
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
6
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
7
+ * or disable the default devtool with "devtool: false".
8
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
9
+ */
10
+ (self["webpackChunk_openmrs_esm_app_shell"] = self["webpackChunk_openmrs_esm_app_shell"] || []).push([["framework_esm-translations_translations_en_json"],{
11
+
12
+ /***/ "../../framework/esm-translations/translations/en.json":
13
+ /*!*************************************************************!*\
14
+ !*** ../../framework/esm-translations/translations/en.json ***!
15
+ \*************************************************************/
16
+ /***/ ((module) => {
17
+
18
+ module.exports = /*#__PURE__*/JSON.parse('{"actions":"Actions","address":"Address","address1":"Address line 1","address2":"Address line 2","address3":"Address line 3","address4":"Address line 4","address5":"Address line 5","address6":"Address line 6","age":"Age","cancel":"Cancel","change":"Change","city":"City","cityVillage":"City","Clinic":"Clinic","close":"Close","closeAllOpenedWorkspaces":"Discard changes in {{count}} workspaces","closingAllWorkspacesPromptBody":"There may be unsaved changes in the following workspaces. Do you want to discard changes in the following workspaces? {{workspaceNames}}","closingAllWorkspacesPromptTitle":"You have unsaved changes","confirm":"Confirm","contactAdministratorIfIssuePersists":"Contact your system administrator if the problem persists.","contactDetails":"Contact Details","country":"Country","countyDistrict":"District","delete":"Delete","discard":"Discard","district":"District","edit":"Edit","error":"Error","errorCopy":"Sorry, there was a problem displaying this information. You can try to reload this page, or contact the site administrator and quote the error code above.","female":"Female","hide":"Hide","loading":"Loading","male":"Male","maximize":"Maximize","minimize":"Minimize","openAnyway":"Open Anyway","other":"Other","patientIdentifierSticker":"Patient identifier sticker","patientLists":"Patient Lists","postalCode":"Postal code","print":"Print","printError":"Print error","printErrorExplainer":"An error occurred in {{errorLocation}}","printIdentifierSticker":"Print identifier sticker","printing":"Printing","relationships":"Relationships","resetOverrides":"Reset overrides","save":"Save","scriptLoadingError":"Failed to load overridden script from {{url}}. Please check that the bundled script is available at the expected URL. Click the button below to reset all import map overrides.","scriptLoadingFailed":"Error: Script failed to load","seeMoreLists":"See {{count}} more lists","sex":"Sex","showLess":"Show less","showMore":"Show more","state":"State","stateProvince":"State","toggleDevTools":"Toggle dev tools","unknown":"Unknown","unsavedChangesInOpenedWorkspace":"You may have unsaved changes in the opened workspace. Do you want to discard these changes?","unsavedChangesInWorkspace":"There may be unsaved changes in \\"{{workspaceName}}\\". Please save them before opening another workspace.","unsavedChangesTitleText":"Unsaved changes","workspaceHeader":"Workspace header"}');
19
+
20
+ /***/ })
21
+
22
+ }]);
@@ -2195,7 +2195,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2195
2195
  \*******************************************************************/
2196
2196
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2197
2197
 
2198
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ canCloseWorkspaceWithoutPrompting: () => (/* binding */ canCloseWorkspaceWithoutPrompting),\n/* harmony export */ cancelPrompt: () => (/* binding */ cancelPrompt),\n/* harmony export */ changeWorkspaceContext: () => (/* binding */ changeWorkspaceContext),\n/* harmony export */ closeAllWorkspaces: () => (/* binding */ closeAllWorkspaces),\n/* harmony export */ closeWorkspace: () => (/* binding */ closeWorkspace),\n/* harmony export */ getPromptBeforeClosingFcn: () => (/* binding */ getPromptBeforeClosingFcn),\n/* harmony export */ getWorkspaceGroupStore: () => (/* binding */ getWorkspaceGroupStore),\n/* harmony export */ getWorkspaceStore: () => (/* binding */ getWorkspaceStore),\n/* harmony export */ launchWorkspace: () => (/* binding */ launchWorkspace),\n/* harmony export */ launchWorkspaceGroup: () => (/* binding */ launchWorkspaceGroup),\n/* harmony export */ navigateAndLaunchWorkspace: () => (/* binding */ navigateAndLaunchWorkspace),\n/* harmony export */ promptBeforeClosing: () => (/* binding */ promptBeforeClosing),\n/* harmony export */ resetWorkspaceStore: () => (/* binding */ resetWorkspaceStore),\n/* harmony export */ showWorkspacePrompts: () => (/* binding */ showWorkspacePrompts),\n/* harmony export */ updateWorkspaceWindowState: () => (/* binding */ updateWorkspaceWindowState),\n/* harmony export */ useWorkspaces: () => (/* binding */ useWorkspaces),\n/* harmony export */ workspaceStore: () => (/* binding */ workspaceStore)\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 _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @openmrs/esm-extensions */ \"../../framework/esm-extensions/dist/index.js\");\n/* harmony import */ var _openmrs_esm_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @openmrs/esm-navigation */ \"../../framework/esm-navigation/dist/index.js\");\n/* harmony import */ var _openmrs_esm_state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @openmrs/esm-state */ \"../../framework/esm-state/dist/index.js\");\n/* harmony import */ var _openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @openmrs/esm-translations */ \"../../framework/esm-translations/dist/index.js\");\n/* harmony import */ var _openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @openmrs/esm-react-utils */ \"../../framework/esm-react-utils/dist/index.js\");\n/** @module @category Workspace */ 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_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 _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 _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/**\n *\n * @param name Name of the workspace\n * @param ignoreChanges If set to true, the \"unsaved changes\" modal will never be shown, even if the `promptBeforeClosing` function returns true. The user will not be prompted before closing.\n * @returns true if the workspace can be closed.\n */ function canCloseWorkspaceWithoutPrompting(name) {\n var ignoreChanges = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n if (ignoreChanges) {\n return true;\n }\n var promptBeforeFn = getPromptBeforeClosingFcn(name);\n return !promptBeforeFn || !promptBeforeFn();\n}\n/**\n * Closes a workspace group and performs cleanup operations.\n *\n * @param groupName - The name of the workspace group to close\n * @param onWorkspaceCloseup - Optional callback function to execute after closing the workspace group\n * @returns void, or exits early if the current workspace group name doesn't match the provided group name\n *\n * @remarks\n * This function performs the following operations:\n * - Validates if the provided group name matches the current workspace group\n * - Closes all workspaces associated with the group\n * - Clears the workspace group store state\n * - Executes cleanup function if defined in the workspace group\n * - Updates the main workspace store to remove the workspace group\n * - Calls the optional closeup callback if provided\n */ function closeWorkspaceGroup(groupName, onWorkspaceCloseup) {\n var _store_getState;\n var store = getWorkspaceStore();\n var currentWorkspaceGroup = (_store_getState = store.getState()) === null || _store_getState === void 0 ? void 0 : _store_getState.workspaceGroup;\n var currentGroupName = currentWorkspaceGroup === null || currentWorkspaceGroup === void 0 ? void 0 : currentWorkspaceGroup.name;\n if (!currentGroupName || groupName !== currentGroupName) {\n return;\n }\n var filter = currentGroupName ? function(workspace) {\n return workspace.currentWorkspaceGroup === currentGroupName;\n } : function() {\n return true;\n };\n closeAllWorkspaces(function() {\n // Clearing the workspace group and respective store if the new workspace is not part of the current group, which is handled in the `launchWorkspace` function.\n var workspaceGroupStore = getWorkspaceGroupStore(groupName);\n if (workspaceGroupStore) {\n workspaceGroupStore.setState({}, true);\n var unsubscribe = workspaceGroupStore.subscribe(function() {});\n unsubscribe();\n }\n if (typeof (currentWorkspaceGroup === null || currentWorkspaceGroup === void 0 ? void 0 : currentWorkspaceGroup.cleanup) === 'function') {\n currentWorkspaceGroup.cleanup();\n }\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n workspaceGroup: undefined\n });\n });\n if (typeof onWorkspaceCloseup === 'function') {\n onWorkspaceCloseup();\n }\n }, filter);\n}\n/**\n * Launches a workspace group with the specified name and configuration.\n * If there are any open workspaces, it will first close them before launching the new workspace group.\n *\n * @param groupName - The name of the workspace group to launch\n * @param args - Configuration object for launching the workspace group\n * @param args.state - The initial state for the workspace group\n * @param args.onWorkspaceGroupLaunch - Optional callback function to be executed after the workspace group is launched\n * @param args.workspaceGroupCleanup - Optional cleanup function to be executed when the workspace group is closed\n *\n * @example\n * launchWorkspaceGroup(\"myGroup\", {\n * state: initialState,\n * onWorkspaceGroupLaunch: () => console.log(\"Workspace group launched\"),\n * workspaceGroupCleanup: () => console.log(\"Cleaning up workspace group\")\n * });\n */ function launchWorkspaceGroup(groupName, args) {\n var workspaceGroupRegistration = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_1__.getWorkspaceGroupRegistration)(groupName);\n var state = args.state, onWorkspaceGroupLaunch = args.onWorkspaceGroupLaunch, workspaceGroupCleanup = args.workspaceGroupCleanup, workspaceToLaunch = args.workspaceToLaunch;\n var store = getWorkspaceStore();\n if (store.getState().openWorkspaces.length) {\n var workspaceGroup = store.getState().workspaceGroup;\n if (workspaceGroup) {\n closeWorkspaceGroup(workspaceGroup === null || workspaceGroup === void 0 ? void 0 : workspaceGroup.name, function() {\n launchWorkspaceGroup(groupName, args);\n });\n } else {\n closeAllWorkspaces(function() {\n launchWorkspaceGroup(groupName, args);\n });\n }\n } else {\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n workspaceGroup: {\n name: groupName,\n members: workspaceGroupRegistration.members,\n cleanup: workspaceGroupCleanup\n }\n });\n });\n getWorkspaceGroupStore(groupName, state);\n onWorkspaceGroupLaunch === null || onWorkspaceGroupLaunch === void 0 ? void 0 : onWorkspaceGroupLaunch();\n if (workspaceToLaunch) {\n var _workspaceToLaunch_additionalProps;\n launchWorkspace(workspaceToLaunch.name, (_workspaceToLaunch_additionalProps = workspaceToLaunch.additionalProps) !== null && _workspaceToLaunch_additionalProps !== void 0 ? _workspaceToLaunch_additionalProps : {});\n }\n }\n}\nfunction promptBeforeLaunchingWorkspace(workspace, newWorkspaceDetails) {\n var name = newWorkspaceDetails.name, additionalProps = newWorkspaceDetails.additionalProps;\n var newWorkspaceRegistration = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_1__.getWorkspaceRegistration)(name);\n var proceed = function() {\n closeWorkspace(workspace.name, {\n ignoreChanges: true,\n // Calling the launchWorkspace again, since one of the `if` case\n // might resolve, but we need to check all the cases before launching the form.\n onWorkspaceClose: function() {\n return launchWorkspace(name, additionalProps);\n },\n // If the new workspace is of the same sidebar group, then we don't need to clear the workspace group store.\n closeWorkspaceGroup: false\n });\n };\n if (!canCloseWorkspaceWithoutPrompting(workspace.name)) {\n var _workspace_title;\n showWorkspacePrompts('closing-workspace-launching-new-workspace', proceed, (_workspace_title = workspace.title) !== null && _workspace_title !== void 0 ? _workspace_title : workspace.name);\n } else {\n proceed();\n }\n}\n/**\n * This launches a workspace by its name. The workspace must have been registered.\n * Workspaces should be registered in the `routes.json` file.\n *\n * For the workspace to appear, there must be either a `<WorkspaceOverlay />` or\n * a `<WorkspaceWindow />` component rendered.\n *\n * The behavior of this function is as follows:\n *\n * - If no workspaces are open, or if no other workspaces with the same type are open,\n * it will be opened and focused.\n * - If a workspace with the same name is already open, it will be displayed/focused,\n * if it was not already.\n * - If a workspace is launched and a workspace which cannot be hidden is already open,\n * a confirmation modal will pop up warning about closing the currently open workspace.\n * - If another workspace with the same type is open, the workspace will be brought to\n * the front and then a confirmation modal will pop up warning about closing the opened\n * workspace\n *\n * Note that this function just manipulates the workspace store. The UI logic is handled\n * by the components that display workspaces.\n *\n * Additional props can be passed to the workspace component being launched. Passing a\n * prop named `workspaceTitle` will override the title of the workspace.\n *\n * @param name The name of the workspace to launch\n * @param additionalProps Props to pass to the workspace component being launched. Passing\n * a prop named `workspaceTitle` will override the title of the workspace.\n */ function launchWorkspace(name, additionalProps) {\n var _currentWorkspaceGroup_members, _store_getState_workspaceGroup;\n var store = getWorkspaceStore();\n var workspace = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_1__.getWorkspaceRegistration)(name);\n var currentWorkspaceGroup = store.getState().workspaceGroup;\n if (currentWorkspaceGroup && !((_currentWorkspaceGroup_members = currentWorkspaceGroup.members) === null || _currentWorkspaceGroup_members === void 0 ? void 0 : _currentWorkspaceGroup_members.includes(name))) {\n closeWorkspaceGroup(currentWorkspaceGroup.name, function() {\n launchWorkspace(name, additionalProps);\n });\n return;\n }\n var currentGroupName = (_store_getState_workspaceGroup = store.getState().workspaceGroup) === null || _store_getState_workspaceGroup === void 0 ? void 0 : _store_getState_workspaceGroup.name;\n var newWorkspace = _object_spread_props(_object_spread({}, workspace), {\n title: getWorkspaceTitle(workspace, additionalProps),\n closeWorkspace: function() {\n var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n return closeWorkspace(name, options);\n },\n closeWorkspaceWithSavedChanges: function(options) {\n return closeWorkspace(name, _object_spread({\n ignoreChanges: true\n }, options));\n },\n promptBeforeClosing: function(testFcn) {\n return promptBeforeClosing(name, testFcn);\n },\n setTitle: function(title, titleNode) {\n newWorkspace.title = title;\n newWorkspace.titleNode = titleNode;\n store.setState(function(state) {\n var openWorkspaces = state.openWorkspaces.map(function(w) {\n return w.name === name ? newWorkspace : w;\n });\n return _object_spread_props(_object_spread({}, state), {\n openWorkspaces: openWorkspaces\n });\n });\n },\n currentWorkspaceGroup: currentGroupName,\n additionalProps: additionalProps !== null && additionalProps !== void 0 ? additionalProps : {}\n });\n if (currentGroupName) {\n getWorkspaceGroupStore(currentGroupName, additionalProps);\n }\n function updateStoreWithNewWorkspace(workspaceToBeAdded, restOfTheWorkspaces) {\n store.setState(function(state) {\n var openWorkspaces = [\n workspaceToBeAdded\n ].concat(_to_consumable_array(restOfTheWorkspaces !== null && restOfTheWorkspaces !== void 0 ? restOfTheWorkspaces : state.openWorkspaces));\n var workspaceWindowState = getUpdatedWorkspaceWindowState(workspaceToBeAdded);\n return _object_spread_props(_object_spread({}, state), {\n openWorkspaces: openWorkspaces,\n workspaceWindowState: workspaceWindowState\n });\n });\n }\n var openWorkspaces = store.getState().openWorkspaces;\n var workspaceIndexInOpenWorkspaces = openWorkspaces.findIndex(function(w) {\n return w.name === name;\n });\n var isWorkspaceAlreadyOpen = workspaceIndexInOpenWorkspaces >= 0;\n var openedWorkspaceWithSameType = openWorkspaces.find(function(w) {\n return w.type == newWorkspace.type;\n });\n if (openWorkspaces.length === 0) {\n updateStoreWithNewWorkspace(newWorkspace);\n } else if (!openWorkspaces[0].canHide && workspaceIndexInOpenWorkspaces !== 0) {\n promptBeforeLaunchingWorkspace(openWorkspaces[0], {\n name: name,\n additionalProps: additionalProps\n });\n } else if (isWorkspaceAlreadyOpen) {\n var openWorkspace = openWorkspaces[workspaceIndexInOpenWorkspaces];\n // Only update the title if it hasn't been set by `setTitle`\n if (openWorkspace.title === getWorkspaceTitle(openWorkspace, openWorkspace.additionalProps)) {\n openWorkspace.title = getWorkspaceTitle(newWorkspace, newWorkspace.additionalProps);\n }\n openWorkspace.additionalProps = newWorkspace.additionalProps;\n var restOfTheWorkspaces = openWorkspaces.filter(function(w) {\n return w.name != name;\n });\n updateStoreWithNewWorkspace(openWorkspaces[workspaceIndexInOpenWorkspaces], restOfTheWorkspaces);\n } else if (openedWorkspaceWithSameType) {\n var restOfTheWorkspaces1 = store.getState().openWorkspaces.filter(function(w) {\n return w.type != newWorkspace.type;\n });\n updateStoreWithNewWorkspace(openedWorkspaceWithSameType, restOfTheWorkspaces1);\n promptBeforeLaunchingWorkspace(openedWorkspaceWithSameType, {\n name: name,\n additionalProps: additionalProps\n });\n } else {\n updateStoreWithNewWorkspace(newWorkspace);\n }\n}\n/**\n * Use this function to navigate to a new page and launch a workspace on that page.\n *\n * @param options.targetUrl: The URL to navigate to. Will be passed to [[navigate]].\n * @param options.contextKey: The context key used by the target page.\n * @param options.workspaceName: The name of the workspace to launch.\n * @param options.additionalProps: Additional props to pass to the workspace component being launched.\n */ function navigateAndLaunchWorkspace(param) {\n var targetUrl = param.targetUrl, contextKey = param.contextKey, workspaceName = param.workspaceName, additionalProps = param.additionalProps;\n changeWorkspaceContext(contextKey);\n launchWorkspace(workspaceName, additionalProps);\n (0,_openmrs_esm_navigation__WEBPACK_IMPORTED_MODULE_2__.navigate)({\n to: targetUrl\n });\n}\nvar promptBeforeClosingFcns = {};\nfunction promptBeforeClosing(workspaceName, testFcn) {\n promptBeforeClosingFcns[workspaceName] = testFcn;\n}\nfunction getPromptBeforeClosingFcn(workspaceName) {\n return promptBeforeClosingFcns[workspaceName];\n}\nfunction cancelPrompt() {\n var store = getWorkspaceStore();\n var state = store.getState();\n store.setState(_object_spread_props(_object_spread({}, state), {\n prompt: null\n }));\n}\nvar defaultOptions = {\n ignoreChanges: false,\n onWorkspaceClose: function() {},\n closeWorkspaceGroup: true\n};\n/**\n * Function to close an opened workspace\n * @param name Workspace registration name\n * @param options Options to close workspace\n */ function closeWorkspace(name) {\n var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n options = _object_spread({}, defaultOptions, options);\n var store = getWorkspaceStore();\n var updateStoreWithClosedWorkspace = function() {\n var _store_getState_workspaceGroup, _options_onWorkspaceClose;\n var state = store.getState();\n var workspaceToBeClosed = state.openWorkspaces.find(function(w) {\n return w.name === name;\n });\n var newOpenWorkspaces = state.openWorkspaces.filter(function(w) {\n return w.name != name;\n });\n var workspaceGroupName = (_store_getState_workspaceGroup = store.getState().workspaceGroup) === null || _store_getState_workspaceGroup === void 0 ? void 0 : _store_getState_workspaceGroup.name;\n if (workspaceGroupName && options.closeWorkspaceGroup) {\n closeWorkspaceGroup(workspaceGroupName);\n }\n // ensure closed workspace will not prompt\n promptBeforeClosing(name, function() {\n return false;\n });\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n prompt: null,\n openWorkspaces: newOpenWorkspaces,\n workspaceWindowState: getUpdatedWorkspaceWindowState(newOpenWorkspaces === null || newOpenWorkspaces === void 0 ? void 0 : newOpenWorkspaces[0])\n });\n });\n options === null || options === void 0 ? void 0 : (_options_onWorkspaceClose = options.onWorkspaceClose) === null || _options_onWorkspaceClose === void 0 ? void 0 : _options_onWorkspaceClose.call(options);\n };\n if (!canCloseWorkspaceWithoutPrompting(name, options === null || options === void 0 ? void 0 : options.ignoreChanges)) {\n var _getWorkspaceRegistration_title;\n var currentName = (_getWorkspaceRegistration_title = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_1__.getWorkspaceRegistration)(name).title) !== null && _getWorkspaceRegistration_title !== void 0 ? _getWorkspaceRegistration_title : name;\n showWorkspacePrompts('closing-workspace', updateStoreWithClosedWorkspace, currentName);\n return false;\n } else {\n updateStoreWithClosedWorkspace();\n return true;\n }\n}\n/**\n * The set of workspaces is specific to a particular page. This function\n * should be used when transitioning to a new page. If the current\n * workspace data is for a different page, the workspace state is cleared.\n *\n * This is called by the workspace components when they mount.\n * @internal\n *\n * @param contextKey An arbitrary key to identify the current page\n */ function changeWorkspaceContext(contextKey) {\n var store = getWorkspaceStore();\n var state = store.getState();\n if (state.context != contextKey) {\n store.setState({\n context: contextKey,\n openWorkspaces: [],\n prompt: null\n });\n }\n}\nvar initialState = {\n context: '',\n openWorkspaces: [],\n prompt: null,\n workspaceWindowState: 'normal',\n workspaceGroup: undefined\n};\nvar workspaceStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_3__.createGlobalStore)('workspace', initialState);\nfunction getWorkspaceStore() {\n return workspaceStore;\n}\nfunction updateWorkspaceWindowState(value) {\n var store = getWorkspaceStore();\n var state = store.getState();\n store.setState(_object_spread_props(_object_spread({}, state), {\n workspaceWindowState: value\n }));\n}\nfunction getUpdatedWorkspaceWindowState(workspaceAtTop) {\n var _workspaceAtTop_preferredWindowSize;\n return (_workspaceAtTop_preferredWindowSize = workspaceAtTop === null || workspaceAtTop === void 0 ? void 0 : workspaceAtTop.preferredWindowSize) !== null && _workspaceAtTop_preferredWindowSize !== void 0 ? _workspaceAtTop_preferredWindowSize : 'normal';\n}\nfunction closeAllWorkspaces() {\n var onClosingWorkspaces = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function() {}, filter = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function() {\n return true;\n };\n var store = getWorkspaceStore();\n var canCloseAllWorkspaces = store.getState().openWorkspaces.filter(filter).every(function(param) {\n var name = param.name;\n return canCloseWorkspaceWithoutPrompting(name);\n });\n var updateWorkspaceStore = function() {\n resetWorkspaceStore();\n onClosingWorkspaces === null || onClosingWorkspaces === void 0 ? void 0 : onClosingWorkspaces();\n };\n if (!canCloseAllWorkspaces) {\n showWorkspacePrompts('closing-all-workspaces', updateWorkspaceStore);\n } else {\n updateWorkspaceStore();\n }\n}\nfunction useWorkspaces() {\n var _useStore = (0,_openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_5__.useStore)(workspaceStore), workspaceWindowState = _useStore.workspaceWindowState, openWorkspaces = _useStore.openWorkspaces, prompt = _useStore.prompt, workspaceGroup = _useStore.workspaceGroup;\n var memoisedResults = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return {\n active: openWorkspaces.length > 0,\n prompt: prompt,\n workspaceWindowState: workspaceWindowState,\n workspaces: openWorkspaces,\n workspaceGroup: workspaceGroup\n };\n }, [\n openWorkspaces,\n workspaceWindowState,\n prompt,\n workspaceGroup\n ]);\n return memoisedResults;\n}\n/**\n * Sets the current prompt according to the prompt type.\n * @param promptType Determines the text and behavior of the prompt\n * @param onConfirmation Function to be called after the user confirms to close the workspace\n * @param workspaceTitle Workspace title to be shown in the prompt\n * @returns\n */ function showWorkspacePrompts(promptType) {\n var onConfirmation = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function() {}, workspaceTitle = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : '';\n var store = getWorkspaceStore();\n var prompt;\n switch(promptType){\n case 'closing-workspace':\n {\n prompt = {\n title: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('unsavedChangesTitleText', 'Unsaved changes'),\n body: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('unsavedChangesInOpenedWorkspace', \"You may have unsaved changes in the opened workspace. Do you want to discard these changes?\"),\n onConfirm: function() {\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('discard', 'Discard')\n };\n break;\n }\n case 'closing-all-workspaces':\n {\n var workspacesNotClosed = store.getState().openWorkspaces.filter(function(param) {\n var name = param.name;\n return !canCloseWorkspaceWithoutPrompting(name);\n }).map(function(param, indx) {\n var title = param.title;\n return \"\".concat(indx + 1, \". \").concat(title);\n });\n prompt = {\n title: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('closingAllWorkspacesPromptTitle', 'You have unsaved changes'),\n body: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('closingAllWorkspacesPromptBody', 'There may be unsaved changes in the following workspaces. Do you want to discard changes in the following workspaces? {{workspaceNames}}', {\n workspaceNames: workspacesNotClosed.join(',')\n }),\n onConfirm: function() {\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('closeAllOpenedWorkspaces', 'Discard changes in {{count}} workspaces', {\n count: workspacesNotClosed.length\n })\n };\n break;\n }\n case 'closing-workspace-launching-new-workspace':\n {\n prompt = {\n title: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('unsavedChangesTitleText', 'Unsaved changes'),\n body: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('unsavedChangesInWorkspace', 'There may be unsaved changes in \"{{workspaceName}}\". Please save them before opening another workspace.', {\n workspaceName: workspaceTitle\n }),\n onConfirm: function() {\n store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n prompt: null\n });\n });\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('openAnyway', 'Open anyway')\n };\n break;\n }\n default:\n {\n console.error('Workspace system trying to open unknown prompt type \"'.concat(promptType, '\" in function \"showWorkspacePrompts\"'));\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n return;\n }\n }\n store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n prompt: prompt\n });\n });\n}\nfunction getWorkspaceTitle(workspace, additionalProps) {\n var _additionalProps_workspaceTitle;\n return (_additionalProps_workspaceTitle = additionalProps === null || additionalProps === void 0 ? void 0 : additionalProps['workspaceTitle']) !== null && _additionalProps_workspaceTitle !== void 0 ? _additionalProps_workspaceTitle : workspace.title;\n}\nfunction resetWorkspaceStore() {\n getWorkspaceStore().setState(initialState);\n}\n/**\n * The workspace group store is a store that is specific to the workspace group.\n * If the workspace has its own sidebar, the store will be created.\n * This store can be used to store data that is specific to the workspace group.\n * The store will be same for all the workspaces with same group name.\n *\n * For workspaces launched without a group, the store will be undefined.\n *\n * The store will be cleared when all the workspaces with the store's group name are closed.\n */ function getWorkspaceGroupStore(workspaceGroupName) {\n var additionalProps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n if (!workspaceGroupName || workspaceGroupName === 'default') {\n return undefined;\n }\n var store = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_3__.getGlobalStore)(workspaceGroupName, {});\n if (additionalProps) {\n store.setState(function(prev) {\n return _object_spread({}, prev, additionalProps);\n });\n }\n return store;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1zdHlsZWd1aWRlL3NyYy93b3Jrc3BhY2VzL3dvcmtzcGFjZXMudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0NBQWdDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNnQjtBQUtmO0FBRWtCO0FBQ29CO0FBQ1I7QUFDWDtBQTBHcEQ7Ozs7O0NBS0MsR0FDTSxTQUFTUSxrQ0FBa0NDLElBQVk7UUFBRUMsZ0JBQUFBLGlFQUF5QjtJQUN2RixJQUFJQSxlQUFlO1FBQ2pCLE9BQU87SUFDVDtJQUNBLElBQU1DLGlCQUFpQkMsMEJBQTBCSDtJQUNqRCxPQUFPLENBQUNFLGtCQUFrQixDQUFDQTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Q0FlQyxHQUNELFNBQVNFLG9CQUFvQkMsU0FBaUIsRUFBRUMsa0JBQStCO1FBRS9DQztJQUQ5QixJQUFNQSxRQUFRQztJQUNkLElBQU1DLHlCQUF3QkYsa0JBQUFBLE1BQU1HLFFBQVEsZ0JBQWRILHNDQUFBQSxnQkFBa0JJLGNBQWM7SUFDOUQsSUFBTUMsbUJBQW1CSCxrQ0FBQUEsNENBQUFBLHNCQUF1QlQsSUFBSTtJQUNwRCxJQUFJLENBQUNZLG9CQUFvQlAsY0FBY08sa0JBQWtCO1FBQ3ZEO0lBQ0Y7SUFDQSxJQUFNQyxTQUFnREQsbUJBQ2xELFNBQUNFO2VBQWNBLFVBQVVMLHFCQUFxQixLQUFLRztRQUNuRDtlQUFNOztJQUVWRyxtQkFBbUI7UUFDakIsK0pBQStKO1FBQy9KLElBQU1DLHNCQUFzQkMsdUJBQXVCWjtRQUNuRCxJQUFJVyxxQkFBcUI7WUFDdkJBLG9CQUFvQkUsUUFBUSxDQUFDLENBQUMsR0FBRztZQUNqQyxJQUFNQyxjQUFjSCxvQkFBb0JJLFNBQVMsQ0FBQyxZQUFPO1lBQ3pERDtRQUNGO1FBRUEsSUFBSSxRQUFPVixrQ0FBQUEsNENB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ZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLXN0eWxlZ3VpZGUvc3JjL3dvcmtzcGFjZXMvd29ya3NwYWNlcy50cz9jMTVlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBXb3Jrc3BhY2UgKi9cbmltcG9ydCB7IHVzZU1lbW8sIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgZ2V0V29ya3NwYWNlR3JvdXBSZWdpc3RyYXRpb24sXG4gIGdldFdvcmtzcGFjZVJlZ2lzdHJhdGlvbixcbiAgdHlwZSBXb3Jrc3BhY2VSZWdpc3RyYXRpb24sXG59IGZyb20gJ0BvcGVubXJzL2VzbS1leHRlbnNpb25zJztcbmltcG9ydCB7IHR5cGUgV29ya3NwYWNlV2luZG93U3RhdGUgfSBmcm9tICdAb3Blbm1ycy9lc20tZ2xvYmFscyc7XG5pbXBvcnQgeyBuYXZpZ2F0ZSB9IGZyb20gJ0BvcGVubXJzL2VzbS1uYXZpZ2F0aW9uJztcbmltcG9ydCB7IGdldEdsb2JhbFN0b3JlLCBjcmVhdGVHbG9iYWxTdG9yZSB9IGZyb20gJ0BvcGVubXJzL2VzbS1zdGF0ZSc7XG5pbXBvcnQgeyBnZXRDb3JlVHJhbnNsYXRpb24gfSBmcm9tICdAb3Blbm1ycy9lc20tdHJhbnNsYXRpb25zJztcbmltcG9ydCB7IHVzZVN0b3JlIH0gZnJvbSAnQG9wZW5tcnMvZXNtLXJlYWN0LXV0aWxzJztcbmltcG9ydCB0eXBlIHsgU3RvcmVBcGkgfSBmcm9tICd6dXN0YW5kL3ZhbmlsbGEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsb3NlV29ya3NwYWNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNsb3NlIHRoZSB3b3Jrc3BhY2UgaWdub3JpbmcgYWxsIHRoZSBjaGFuZ2VzIHByZXNlbnQgaW4gdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogSWYgaWdub3JlQ2hhbmdlcyBpcyB0cnVlLCB0aGUgdXNlciB3aWxsIG5vdCBiZSBwcm9tcHRlZCB0byBzYXZlIGNoYW5nZXMgYmVmb3JlIGNsb3NpbmdcbiAgICogZXZlbiBpZiB0aGUgYHRlc3RGY25gIHBhc3NlZCB0byBgcHJvbXB0QmVmb3JlQ2xvc2luZ2AgcmV0dXJucyBgdHJ1ZWAuXG4gICAqL1xuICBpZ25vcmVDaGFuZ2VzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHlvdSB3YW50IHRvIHRha2UgYW4gYWN0aW9uIGFmdGVyIHRoZSB3b3Jrc3BhY2UgaXMgY2xvc2VkLCB5b3UgY2FuIHBhc3MgeW91ciBmdW5jdGlvbiBhc1xuICAgKiBgb25Xb3Jrc3BhY2VDbG9zZWAuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb25seSBhZnRlciB0aGUgd29ya3NwYWNlIGlzIGNsb3NlZCwgZ2l2ZW5cbiAgICogdGhhdCB0aGUgdXNlciBtaWdodCBiZSBzaG93biBhIHByb21wdC5cbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgb25Xb3Jrc3BhY2VDbG9zZT86ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgc2hvdWxkIGJlIGNsb3NlZCBhbmQgc3RvcmUgdG8gYmVcbiAgICogY2xlYXJlZCB3aGVuIHRoaXMgd29ya3NwYWNlIGlzIGNsb3NlZC5cbiAgICogRGVmYXVsdHMgdG8gdHJ1ZSBleGNlcHQgd2hlbiBvcGVuaW5nIGEgbmV3IHdvcmtzcGFjZSBvZiB0aGUgc2FtZSBncm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY2xvc2VXb3Jrc3BhY2VHcm91cD86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzIHJlY2VpdmVkIGJ5IGFsbCB3b3Jrc3BhY2VzICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRXb3Jrc3BhY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gY2xvc2UgdGhlIHdvcmtzcGFjZS4gVGhpcyBmdW5jdGlvbiB3aWxsIHByb21wdCB0aGUgdXNlclxuICAgKiBpZiB0aGVyZSBhcmUgYW55IHVuc2F2ZWQgY2hhbmdlcyB0byB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIFlvdSBjYW4gcGFzcyBgb25Xb3Jrc3BhY2VDbG9zZWAgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHdvcmtzcGFjZSBpcyBmaW5hbGx5XG4gICAqIGNsb3NlZCwgZ2l2ZW4gdGhlIHVzZXIgZm9yY2VmdWxseSBjbG9zZXMgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIGNsb3NlV29ya3NwYWNlKGNsb3NlV29ya3NwYWNlT3B0aW9ucz86IENsb3NlV29ya3NwYWNlT3B0aW9ucyk6IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgd2l0aCBhIG5vLWFyZ3MgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgc2hvdWxkIGJlIHByb21wdGVkIGJlZm9yZVxuICAgKiB0aGlzIHdvcmtzcGFjZSBpcyBjbG9zZWQ7IGUuZy4gaWYgdGhlcmUgaXMgdW5zYXZlZCBkYXRhLlxuICAgKi9cbiAgcHJvbXB0QmVmb3JlQ2xvc2luZyh0ZXN0RmNuOiAoKSA9PiBib29sZWFuKTogdm9pZDtcbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBjbG9zZSB0aGUgd29ya3NwYWNlIGFmdGVyIHRoZSBmb3JtIGlzIHNhdmVkLiBUaGlzIGZ1bmN0aW9uXG4gICAqIHdpbGwgZGlyZWN0bHkgY2xvc2UgdGhlIHdvcmtzcGFjZSB3aXRob3V0IGFueSBwcm9tcHRcbiAgICovXG4gIGNsb3NlV29ya3NwYWNlV2l0aFNhdmVkQ2hhbmdlcyhjbG9zZVdvcmtzcGFjZU9wdGlvbnM/OiBDbG9zZVdvcmtzcGFjZU9wdGlvbnMpOiB2b2lkO1xuICAvKipcbiAgICogVXNlIHRoaXMgdG8gc2V0IHRoZSB3b3Jrc3BhY2UgdGl0bGUgaWYgaXQgbmVlZHMgdG8gYmUgc2V0IGR5bmFtaWNhbGx5LlxuICAgKlxuICAgKiBXb3Jrc3BhY2UgdGl0bGVzIGdlbmVyYWxseSBhcmUgc2V0IGluIHRoZSB3b3Jrc3BhY2UgZGVjbGFyYXRpb24gaW4gdGhlIHJvdXRlcy5qc29uIGZpbGUuIFRoZXkgY2FuIGFsc29cbiAgICogYmUgc2V0IGJ5IHRoZSB3b3Jrc3BhY2UgbGF1bmNoZXIgYnkgcGFzc2luZyBgd29ya3NwYWNlVGl0bGVgIGluIHRoZSBgYWRkaXRpb25hbFByb3BzYFxuICAgKiBwYXJhbWV0ZXIgb2YgdGhlIGBsYXVuY2hXb3Jrc3BhY2VgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIHRoZSB3b3Jrc3BhY2VcbiAgICogdGl0bGUgbmVlZHMgdG8gYmUgc2V0IGR5bmFtaWNhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIHRvIHNldC4gSWYgdXNpbmcgdGl0bGVOb2RlLCBzZXQgdGhpcyB0byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZ1xuICAgKiAgICAgICAgd2hpY2ggd2lsbCBpZGVudGlmeSB0aGUgd29ya3NwYWNlIGluIG5vdGlmaWNhdGlvbnMgYW5kIG90aGVyIHBsYWNlcy5cbiAgICogQHBhcmFtIHRpdGxlTm9kZSBBIFJlYWN0IG9iamVjdCB0byBwdXQgaW4gdGhlIHdvcmtzcGFjZSBoZWFkZXIgaW4gcGxhY2Ugb2YgdGhlIHRpdGxlLiBUaGlzXG4gICAqICAgICAgICBpcyB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgY3VzdG9tIGVsZW1lbnRzIGluIHRoZSBoZWFkZXIuIE5vdGUgdGhhdCBjdXN0b20gaGVhZGVyXG4gICAqICAgICAgICBlbGVtZW50cyBjYW4gYWxzbyBiZSBhdHRhY2hlZCB0byB0aGUgd29ya3NwYWNlIGhlYWRlciBleHRlbnNpb24gc2xvdHMuXG4gICAqL1xuICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nLCB0aXRsZU5vZGU/OiBSZWFjdE5vZGUpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZVdpbmRvd1NpemUge1xuICBzaXplOiBXb3Jrc3BhY2VXaW5kb3dTdGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VXaW5kb3dTaXplUHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZVdpbmRvd1NpemVDb250ZXh0IHtcbiAgd2luZG93U2l6ZTogV29ya3NwYWNlV2luZG93U2l6ZTtcbiAgdXBkYXRlV2luZG93U2l6ZT8odmFsdWU6IFdvcmtzcGFjZVdpbmRvd1N0YXRlKTogYW55O1xuICBhY3RpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvbXB0IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICAvKiogRGVmYXVsdHMgdG8gXCJDb25maXJtXCIgKi9cbiAgY29uZmlybVRleHQ/OiBzdHJpbmc7XG4gIG9uQ29uZmlybSgpOiB2b2lkO1xuICAvKiogRGVmYXVsdHMgdG8gXCJDYW5jZWxcIiAqL1xuICBjYW5jZWxUZXh0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZVN0b3JlU3RhdGUge1xuICBjb250ZXh0OiBzdHJpbmcgfCBudWxsO1xuICBvcGVuV29ya3NwYWNlczogQXJyYXk8T3BlbldvcmtzcGFjZT47XG4gIHByb21wdDogUHJvbXB0IHwgbnVsbDtcbiAgd29ya3NwYWNlV2luZG93U3RhdGU6IFdvcmtzcGFjZVdpbmRvd1N0YXRlO1xuICB3b3Jrc3BhY2VHcm91cD86IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWVtYmVyczogQXJyYXk8c3RyaW5nPjtcbiAgICBjbGVhbnVwPygpOiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5Xb3Jrc3BhY2UgZXh0ZW5kcyBXb3Jrc3BhY2VSZWdpc3RyYXRpb24sIERlZmF1bHRXb3Jrc3BhY2VQcm9wcyB7XG4gIGFkZGl0aW9uYWxQcm9wczogb2JqZWN0O1xuICBjdXJyZW50V29ya3NwYWNlR3JvdXA/OiBzdHJpbmc7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHdvcmtzcGFjZVxuICogQHBhcmFtIGlnbm9yZUNoYW5nZXMgSWYgc2V0IHRvIHRydWUsIHRoZSBcInVuc2F2ZWQgY2hhbmdlc1wiIG1vZGFsIHdpbGwgbmV2ZXIgYmUgc2hvd24sIGV2ZW4gaWYgdGhlIGBwcm9tcHRCZWZvcmVDbG9zaW5nYCBmdW5jdGlvbiByZXR1cm5zIHRydWUuIFRoZSB1c2VyIHdpbGwgbm90IGJlIHByb21wdGVkIGJlZm9yZSBjbG9zaW5nLlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgd29ya3NwYWNlIGNhbiBiZSBjbG9zZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5DbG9zZVdvcmtzcGFjZVdpdGhvdXRQcm9tcHRpbmcobmFtZTogc3RyaW5nLCBpZ25vcmVDaGFuZ2VzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgaWYgKGlnbm9yZUNoYW5nZXMpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBwcm9tcHRCZWZvcmVGbiA9IGdldFByb21wdEJlZm9yZUNsb3NpbmdGY24obmFtZSk7XG4gIHJldHVybiAhcHJvbXB0QmVmb3JlRm4gfHwgIXByb21wdEJlZm9yZUZuKCk7XG59XG5cbi8qKlxuICogQ2xvc2VzIGEgd29ya3NwYWNlIGdyb3VwIGFuZCBwZXJmb3JtcyBjbGVhbnVwIG9wZXJhdGlvbnMuXG4gKlxuICogQHBhcmFtIGdyb3VwTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgdG8gY2xvc2VcbiAqIEBwYXJhbSBvbldvcmtzcGFjZUNsb3NldXAgLSBPcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIGNsb3NpbmcgdGhlIHdvcmtzcGFjZSBncm91cFxuICogQHJldHVybnMgdm9pZCwgb3IgZXhpdHMgZWFybHkgaWYgdGhlIGN1cnJlbnQgd29ya3NwYWNlIGdyb3VwIG5hbWUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlkZWQgZ3JvdXAgbmFtZVxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczpcbiAqIC0gVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBncm91cCBuYW1lIG1hdGNoZXMgdGhlIGN1cnJlbnQgd29ya3NwYWNlIGdyb3VwXG4gKiAtIENsb3NlcyBhbGwgd29ya3NwYWNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdyb3VwXG4gKiAtIENsZWFycyB0aGUgd29ya3NwYWNlIGdyb3VwIHN0b3JlIHN0YXRlXG4gKiAtIEV4ZWN1dGVzIGNsZWFudXAgZnVuY3Rpb24gaWYgZGVmaW5lZCBpbiB0aGUgd29ya3NwYWNlIGdyb3VwXG4gKiAtIFVwZGF0ZXMgdGhlIG1haW4gd29ya3NwYWNlIHN0b3JlIHRvIHJlbW92ZSB0aGUgd29ya3NwYWNlIGdyb3VwXG4gKiAtIENhbGxzIHRoZSBvcHRpb25hbCBjbG9zZXVwIGNhbGxiYWNrIGlmIHByb3ZpZGVkXG4gKi9cbmZ1bmN0aW9uIGNsb3NlV29ya3NwYWNlR3JvdXAoZ3JvdXBOYW1lOiBzdHJpbmcsIG9uV29ya3NwYWNlQ2xvc2V1cD86ICgpID0+IHZvaWQpIHtcbiAgY29uc3Qgc3RvcmUgPSBnZXRXb3Jrc3BhY2VTdG9yZSgpO1xuICBjb25zdCBjdXJyZW50V29ya3NwYWNlR3JvdXAgPSBzdG9yZS5nZXRTdGF0ZSgpPy53b3Jrc3BhY2VHcm91cDtcbiAgY29uc3QgY3VycmVudEdyb3VwTmFtZSA9IGN1cnJlbnRXb3Jrc3BhY2VHcm91cD8ubmFtZTtcbiAgaWYgKCFjdXJyZW50R3JvdXBOYW1lIHx8IGdyb3VwTmFtZSAhPT0gY3VycmVudEdyb3VwTmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBmaWx0ZXI6ICh3b3Jrc3BhY2U6IE9wZW5Xb3Jrc3BhY2UpID0+IGJvb2xlYW4gPSBjdXJyZW50R3JvdXBOYW1lXG4gICAgPyAod29ya3NwYWNlKSA9PiB3b3Jrc3BhY2UuY3VycmVudFdvcmtzcGFjZUdyb3VwID09PSBjdXJyZW50R3JvdXBOYW1lXG4gICAgOiAoKSA9PiB0cnVlO1xuXG4gIGNsb3NlQWxsV29ya3NwYWNlcygoKSA9PiB7XG4gICAgLy8gQ2xlYXJpbmcgdGhlIHdvcmtzcGFjZSBncm91cCBhbmQgcmVzcGVjdGl2ZSBzdG9yZSBpZiB0aGUgbmV3IHdvcmtzcGFjZSBpcyBub3QgcGFydCBvZiB0aGUgY3VycmVudCBncm91cCwgd2hpY2ggaXMgaGFuZGxlZCBpbiB0aGUgYGxhdW5jaFdvcmtzcGFjZWAgZnVuY3Rpb24uXG4gICAgY29uc3Qgd29ya3NwYWNlR3JvdXBTdG9yZSA9IGdldFdvcmtzcGFjZUdyb3VwU3RvcmUoZ3JvdXBOYW1lKTtcbiAgICBpZiAod29ya3NwYWNlR3JvdXBTdG9yZSkge1xuICAgICAgd29ya3NwYWNlR3JvdXBTdG9yZS5zZXRTdGF0ZSh7fSwgdHJ1ZSk7XG4gICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHdvcmtzcGFjZUdyb3VwU3RvcmUuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50V29ya3NwYWNlR3JvdXA/LmNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRXb3Jrc3BhY2VHcm91cC5jbGVhbnVwKCk7XG4gICAgfVxuXG4gICAgc3RvcmUuc2V0U3RhdGUoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgd29ya3NwYWNlR3JvdXA6IHVuZGVmaW5lZCxcbiAgICB9KSk7XG5cbiAgICBpZiAodHlwZW9mIG9uV29ya3NwYWNlQ2xvc2V1cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb25Xb3Jrc3BhY2VDbG9zZXVwKCk7XG4gICAgfVxuICB9LCBmaWx0ZXIpO1xufVxuXG5pbnRlcmZhY2UgTGF1bmNoV29ya3NwYWNlR3JvdXBBcmcge1xuICBzdGF0ZTogUmVjb3JkPHN0cmluZyB8IHN5bWJvbCB8IG51bWJlciwgYW55PjtcbiAgb25Xb3Jrc3BhY2VHcm91cExhdW5jaD8oKTogdm9pZDtcbiAgd29ya3NwYWNlR3JvdXBDbGVhbnVwPygpOiB2b2lkO1xuICB3b3Jrc3BhY2VUb0xhdW5jaD86IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYWRkaXRpb25hbFByb3BzPzogUmVjb3JkPHN0cmluZyB8IHN5bWJvbCB8IG51bWJlciwgYW55PjtcbiAgfTtcbn1cblxuLyoqXG4gKiBMYXVuY2hlcyBhIHdvcmtzcGFjZSBncm91cCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQgY29uZmlndXJhdGlvbi5cbiAqIElmIHRoZXJlIGFyZSBhbnkgb3BlbiB3b3Jrc3BhY2VzLCBpdCB3aWxsIGZpcnN0IGNsb3NlIHRoZW0gYmVmb3JlIGxhdW5jaGluZyB0aGUgbmV3IHdvcmtzcGFjZSBncm91cC5cbiAqXG4gKiBAcGFyYW0gZ3JvdXBOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZSBncm91cCB0byBsYXVuY2hcbiAqIEBwYXJhbSBhcmdzIC0gQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGxhdW5jaGluZyB0aGUgd29ya3NwYWNlIGdyb3VwXG4gKiBAcGFyYW0gYXJncy5zdGF0ZSAtIFRoZSBpbml0aWFsIHN0YXRlIGZvciB0aGUgd29ya3NwYWNlIGdyb3VwXG4gKiBAcGFyYW0gYXJncy5vbldvcmtzcGFjZUdyb3VwTGF1bmNoIC0gT3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHdvcmtzcGFjZSBncm91cCBpcyBsYXVuY2hlZFxuICogQHBhcmFtIGFyZ3Mud29ya3NwYWNlR3JvdXBDbGVhbnVwIC0gT3B0aW9uYWwgY2xlYW51cCBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgaXMgY2xvc2VkXG4gKlxuICogQGV4YW1wbGVcbiAqIGxhdW5jaFdvcmtzcGFjZUdyb3VwKFwibXlHcm91cFwiLCB7XG4gKiAgIHN0YXRlOiBpbml0aWFsU3RhdGUsXG4gKiAgIG9uV29ya3NwYWNlR3JvdXBMYXVuY2g6ICgpID0+IGNvbnNvbGUubG9nKFwiV29ya3NwYWNlIGdyb3VwIGxhdW5jaGVkXCIpLFxuICogICB3b3Jrc3BhY2VHcm91cENsZWFudXA6ICgpID0+IGNvbnNvbGUubG9nKFwiQ2xlYW5pbmcgdXAgd29ya3NwYWNlIGdyb3VwXCIpXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhdW5jaFdvcmtzcGFjZUdyb3VwKGdyb3VwTmFtZTogc3RyaW5nLCBhcmdzOiBMYXVuY2hXb3Jrc3BhY2VHcm91cEFyZykge1xuICBjb25zdCB3b3Jrc3BhY2VHcm91cFJlZ2lzdHJhdGlvbiA9IGdldFdvcmtzcGFjZUdyb3VwUmVnaXN0cmF0aW9uKGdyb3VwTmFtZSk7XG4gIGNvbnN0IHsgc3RhdGUsIG9uV29ya3NwYWNlR3JvdXBMYXVuY2gsIHdvcmtzcGFjZUdyb3VwQ2xlYW51cCwgd29ya3NwYWNlVG9MYXVuY2ggfSA9IGFyZ3M7XG4gIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgaWYgKHN0b3JlLmdldFN0YXRlKCkub3BlbldvcmtzcGFjZXMubGVuZ3RoKSB7XG4gICAgY29uc3Qgd29ya3NwYWNlR3JvdXAgPSBzdG9yZS5nZXRTdGF0ZSgpLndvcmtzcGFjZUdyb3VwO1xuICAgIGlmICh3b3Jrc3BhY2VHcm91cCkge1xuICAgICAgY2xvc2VXb3Jrc3BhY2VHcm91cCh3b3Jrc3BhY2VHcm91cD8ubmFtZSwgKCkgPT4ge1xuICAgICAgICBsYXVuY2hXb3Jrc3BhY2VHcm91cChncm91cE5hbWUsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsb3NlQWxsV29ya3NwYWNlcygoKSA9PiB7XG4gICAgICAgIGxhdW5jaFdvcmtzcGFjZUdyb3VwKGdyb3VwTmFtZSwgYXJncyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RvcmUuc2V0U3RhdGUoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgd29ya3NwYWNlR3JvdXA6IHtcbiAgICAgICAgbmFtZTogZ3JvdXBOYW1lLFxuICAgICAgICBtZW1iZXJzOiB3b3Jrc3BhY2VHcm91cFJlZ2lzdHJhdGlvbi5tZW1iZXJzLFxuICAgICAgICBjbGVhbnVwOiB3b3Jrc3BhY2VHcm91cENsZWFudXAsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgICBnZXRXb3Jrc3BhY2VHcm91cFN0b3JlKGdyb3VwTmFtZSwgc3RhdGUpO1xuICAgIG9uV29ya3NwYWNlR3JvdXBMYXVuY2g/LigpO1xuICAgIGlmICh3b3Jrc3BhY2VUb0xhdW5jaCkge1xuICAgICAgbGF1bmNoV29ya3NwYWNlKHdvcmtzcGFjZVRvTGF1bmNoLm5hbWUsIHdvcmtzcGFjZVRvTGF1bmNoLmFkZGl0aW9uYWxQcm9wcyA/PyB7fSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb21wdEJlZm9yZUxhdW5jaGluZ1dvcmtzcGFjZShcbiAgd29ya3NwYWNlOiBPcGVuV29ya3NwYWNlLFxuICBuZXdXb3Jrc3BhY2VEZXRhaWxzOiB7IG5hbWU6IHN0cmluZzsgYWRkaXRpb25hbFByb3BzPzogb2JqZWN0IH0sXG4pIHtcbiAgY29uc3QgeyBuYW1lLCBhZGRpdGlvbmFsUHJvcHMgfSA9IG5ld1dvcmtzcGFjZURldGFpbHM7XG4gIGNvbnN0IG5ld1dvcmtzcGFjZVJlZ2lzdHJhdGlvbiA9IGdldFdvcmtzcGFjZVJlZ2lzdHJhdGlvbihuYW1lKTtcblxuICBjb25zdCBwcm9jZWVkID0gKCkgPT4ge1xuICAgIGNsb3NlV29ya3NwYWNlKHdvcmtzcGFjZS5uYW1lLCB7XG4gICAgICBpZ25vcmVDaGFuZ2VzOiB0cnVlLFxuICAgICAgLy8gQ2FsbGluZyB0aGUgbGF1bmNoV29ya3NwYWNlIGFnYWluLCBzaW5jZSBvbmUgb2YgdGhlIGBpZmAgY2FzZVxuICAgICAgLy8gbWlnaHQgcmVzb2x2ZSwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgYWxsIHRoZSBjYXNlcyBiZWZvcmUgbGF1bmNoaW5nIHRoZSBmb3JtLlxuICAgICAgb25Xb3Jrc3BhY2VDbG9zZTogKCkgPT4gbGF1bmNoV29ya3NwYWNlKG5hbWUsIGFkZGl0aW9uYWxQcm9wcyksXG4gICAgICAvLyBJZiB0aGUgbmV3IHdvcmtzcGFjZSBpcyBvZiB0aGUgc2FtZSBzaWRlYmFyIGdyb3VwLCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2xlYXIgdGhlIHdvcmtzcGFjZSBncm91cCBzdG9yZS5cbiAgICAgIGNsb3NlV29ya3NwYWNlR3JvdXA6IGZhbHNlLFxuICAgIH0pO1xuICB9O1xuXG4gIGlmICghY2FuQ2xvc2VXb3Jrc3BhY2VXaXRob3V0UHJvbXB0aW5nKHdvcmtzcGFjZS5uYW1lKSkge1xuICAgIHNob3dXb3Jrc3BhY2VQcm9tcHRzKCdjbG9zaW5nLXdvcmtzcGFjZS1sYXVuY2hpbmctbmV3LXdvcmtzcGFjZScsIHByb2NlZWQsIHdvcmtzcGFjZS50aXRsZSA/PyB3b3Jrc3BhY2UubmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcHJvY2VlZCgpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBsYXVuY2hlcyBhIHdvcmtzcGFjZSBieSBpdHMgbmFtZS4gVGhlIHdvcmtzcGFjZSBtdXN0IGhhdmUgYmVlbiByZWdpc3RlcmVkLlxuICogV29ya3NwYWNlcyBzaG91bGQgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgYHJvdXRlcy5qc29uYCBmaWxlLlxuICpcbiAqIEZvciB0aGUgd29ya3NwYWNlIHRvIGFwcGVhciwgdGhlcmUgbXVzdCBiZSBlaXRoZXIgYSBgPFdvcmtzcGFjZU92ZXJsYXkgLz5gIG9yXG4gKiBhIGA8V29ya3NwYWNlV2luZG93IC8+YCBjb21wb25lbnQgcmVuZGVyZWQuXG4gKlxuICogVGhlIGJlaGF2aW9yIG9mIHRoaXMgZnVuY3Rpb24gaXMgYXMgZm9sbG93czpcbiAqXG4gKiAtIElmIG5vIHdvcmtzcGFjZXMgYXJlIG9wZW4sIG9yIGlmIG5vIG90aGVyIHdvcmtzcGFjZXMgd2l0aCB0aGUgc2FtZSB0eXBlIGFyZSBvcGVuLFxuICogICBpdCB3aWxsIGJlIG9wZW5lZCBhbmQgZm9jdXNlZC5cbiAqIC0gSWYgYSB3b3Jrc3BhY2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGFscmVhZHkgb3BlbiwgaXQgd2lsbCBiZSBkaXNwbGF5ZWQvZm9jdXNlZCxcbiAqICAgaWYgaXQgd2FzIG5vdCBhbHJlYWR5LlxuICogLSBJZiBhIHdvcmtzcGFjZSBpcyBsYXVuY2hlZCBhbmQgYSB3b3Jrc3BhY2Ugd2hpY2ggY2Fubm90IGJlIGhpZGRlbiBpcyBhbHJlYWR5IG9wZW4sXG4gKiAgYSBjb25maXJtYXRpb24gbW9kYWwgd2lsbCBwb3AgdXAgd2FybmluZyBhYm91dCBjbG9zaW5nIHRoZSBjdXJyZW50bHkgb3BlbiB3b3Jrc3BhY2UuXG4gKiAtIElmIGFub3RoZXIgd29ya3NwYWNlIHdpdGggdGhlIHNhbWUgdHlwZSBpcyBvcGVuLCB0aGUgd29ya3NwYWNlIHdpbGwgYmUgYnJvdWdodCB0b1xuICogICB0aGUgZnJvbnQgYW5kIHRoZW4gYSBjb25maXJtYXRpb24gbW9kYWwgd2lsbCBwb3AgdXAgd2FybmluZyBhYm91dCBjbG9zaW5nIHRoZSBvcGVuZWRcbiAqICAgd29ya3NwYWNlXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24ganVzdCBtYW5pcHVsYXRlcyB0aGUgd29ya3NwYWNlIHN0b3JlLiBUaGUgVUkgbG9naWMgaXMgaGFuZGxlZFxuICogYnkgdGhlIGNvbXBvbmVudHMgdGhhdCBkaXNwbGF5IHdvcmtzcGFjZXMuXG4gKlxuICogQWRkaXRpb25hbCBwcm9wcyBjYW4gYmUgcGFzc2VkIHRvIHRoZSB3b3Jrc3BhY2UgY29tcG9uZW50IGJlaW5nIGxhdW5jaGVkLiBQYXNzaW5nIGFcbiAqIHByb3AgbmFtZWQgYHdvcmtzcGFjZVRpdGxlYCB3aWxsIG92ZXJyaWRlIHRoZSB0aXRsZSBvZiB0aGUgd29ya3NwYWNlLlxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UgdG8gbGF1bmNoXG4gKiBAcGFyYW0gYWRkaXRpb25hbFByb3BzIFByb3BzIHRvIHBhc3MgdG8gdGhlIHdvcmtzcGFjZSBjb21wb25lbnQgYmVpbmcgbGF1bmNoZWQuIFBhc3NpbmdcbiAqICAgICAgICAgIGEgcHJvcCBuYW1lZCBgd29ya3NwYWNlVGl0bGVgIHdpbGwgb3ZlcnJpZGUgdGhlIHRpdGxlIG9mIHRoZSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXVuY2hXb3Jrc3BhY2U8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0V29ya3NwYWNlUHJvcHMgfCBvYmplY3QgPSBEZWZhdWx0V29ya3NwYWNlUHJvcHMgJiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuPihuYW1lOiBzdHJpbmcsIGFkZGl0aW9uYWxQcm9wcz86IE9taXQ8VCwga2V5b2YgRGVmYXVsdFdvcmtzcGFjZVByb3BzPiAmIHsgd29ya3NwYWNlVGl0bGU/OiBzdHJpbmcgfSkge1xuICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGdldFdvcmtzcGFjZVJlZ2lzdHJhdGlvbihuYW1lKTtcbiAgY29uc3QgY3VycmVudFdvcmtzcGFjZUdyb3VwID0gc3RvcmUuZ2V0U3RhdGUoKS53b3Jrc3BhY2VHcm91cDtcblxuICBpZiAoY3VycmVudFdvcmtzcGFjZUdyb3VwICYmICFjdXJyZW50V29ya3NwYWNlR3JvdXAubWVtYmVycz8uaW5jbHVkZXMobmFtZSkpIHtcbiAgICBjbG9zZVdvcmtzcGFjZUdyb3VwKGN1cnJlbnRXb3Jrc3BhY2VHcm91cC5uYW1lLCAoKSA9PiB7XG4gICAgICBsYXVuY2hXb3Jrc3BhY2UobmFtZSwgYWRkaXRpb25hbFByb3BzKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY3VycmVudEdyb3VwTmFtZSA9IHN0b3JlLmdldFN0YXRlKCkud29ya3NwYWNlR3JvdXA/Lm5hbWU7XG4gIGNvbnN0IG5ld1dvcmtzcGFjZTogT3BlbldvcmtzcGFjZSA9IHtcbiAgICAuLi53b3Jrc3BhY2UsXG4gICAgdGl0bGU6IGdldFdvcmtzcGFjZVRpdGxlKHdvcmtzcGFjZSwgYWRkaXRpb25hbFByb3BzKSxcbiAgICBjbG9zZVdvcmtzcGFjZTogKG9wdGlvbnM6IENsb3NlV29ya3NwYWNlT3B0aW9ucyA9IHt9KSA9PiBjbG9zZVdvcmtzcGFjZShuYW1lLCBvcHRpb25zKSxcbiAgICBjbG9zZVdvcmtzcGFjZVdpdGhTYXZlZENoYW5nZXM6IChvcHRpb25zOiBDbG9zZVdvcmtzcGFjZU9wdGlvbnMpID0+XG4gICAgICBjbG9zZVdvcmtzcGFjZShuYW1lLCB7IGlnbm9yZUNoYW5nZXM6IHRydWUsIC4uLm9wdGlvbnMgfSksXG4gICAgcHJvbXB0QmVmb3JlQ2xvc2luZzogKHRlc3RGY24pID0+IHByb21wdEJlZm9yZUNsb3NpbmcobmFtZSwgdGVzdEZjbiksXG4gICAgc2V0VGl0bGU6ICh0aXRsZTogc3RyaW5nLCB0aXRsZU5vZGU6IFJlYWN0Tm9kZSkgPT4ge1xuICAgICAgbmV3V29ya3NwYWNlLnRpdGxlID0gdGl0bGU7XG4gICAgICBuZXdXb3Jrc3BhY2UudGl0bGVOb2RlID0gdGl0bGVOb2RlO1xuICAgICAgc3RvcmUuc2V0U3RhdGUoKHN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wZW5Xb3Jrc3BhY2VzID0gc3RhdGUub3BlbldvcmtzcGFjZXMubWFwKCh3KSA9PiAody5uYW1lID09PSBuYW1lID8gbmV3V29ya3NwYWNlIDogdykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIG9wZW5Xb3Jrc3BhY2VzLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBjdXJyZW50V29ya3NwYWNlR3JvdXA6IGN1cnJlbnRHcm91cE5hbWUsXG4gICAgYWRkaXRpb25hbFByb3BzOiBhZGRpdGlvbmFsUHJvcHMgPz8ge30sXG4gIH07XG5cbiAgaWYgKGN1cnJlbnRHcm91cE5hbWUpIHtcbiAgICBnZXRXb3Jrc3BhY2VHcm91cFN0b3JlKGN1cnJlbnRHcm91cE5hbWUsIGFkZGl0aW9uYWxQcm9wcyk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlU3RvcmVXaXRoTmV3V29ya3NwYWNlKHdvcmtzcGFjZVRvQmVBZGRlZDogT3BlbldvcmtzcGFjZSwgcmVzdE9mVGhlV29ya3NwYWNlcz86IEFycmF5PE9wZW5Xb3Jrc3BhY2U+KSB7XG4gICAgc3RvcmUuc2V0U3RhdGUoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBvcGVuV29ya3NwYWNlcyA9IFt3b3Jrc3BhY2VUb0JlQWRkZWQsIC4uLihyZXN0T2ZUaGVXb3Jrc3BhY2VzID8/IHN0YXRlLm9wZW5Xb3Jrc3BhY2VzKV07XG4gICAgICBsZXQgd29ya3NwYWNlV2luZG93U3RhdGUgPSBnZXRVcGRhdGVkV29ya3NwYWNlV2luZG93U3RhdGUod29ya3NwYWNlVG9CZUFkZGVkKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG9wZW5Xb3Jrc3BhY2VzLFxuICAgICAgICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBvcGVuV29ya3NwYWNlcyA9IHN0b3JlLmdldFN0YXRlKCkub3BlbldvcmtzcGFjZXM7XG4gIGNvbnN0IHdvcmtzcGFjZUluZGV4SW5PcGVuV29ya3NwYWNlcyA9IG9wZW5Xb3Jrc3BhY2VzLmZpbmRJbmRleCgodykgPT4gdy5uYW1lID09PSBuYW1lKTtcbiAgY29uc3QgaXNXb3Jrc3BhY2VBbHJlYWR5T3BlbiA9IHdvcmtzcGFjZUluZGV4SW5PcGVuV29ya3NwYWNlcyA+PSAwO1xuICBjb25zdCBvcGVuZWRXb3Jrc3BhY2VXaXRoU2FtZVR5cGUgPSBvcGVuV29ya3NwYWNlcy5maW5kKCh3KSA9PiB3LnR5cGUgPT0gbmV3V29ya3NwYWNlLnR5cGUpO1xuXG4gIGlmIChvcGVuV29ya3NwYWNlcy5sZW5ndGggPT09IDApIHtcbiAgICB1cGRhdGVTdG9yZVdpdGhOZXdXb3Jrc3BhY2UobmV3V29ya3NwYWNlKTtcbiAgfSBlbHNlIGlmICghb3BlbldvcmtzcGFjZXNbMF0uY2FuSGlkZSAmJiB3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXMgIT09IDApIHtcbiAgICBwcm9tcHRCZWZvcmVMYXVuY2hpbmdXb3Jrc3BhY2Uob3BlbldvcmtzcGFjZXNbMF0sIHtcbiAgICAgIG5hbWUsXG4gICAgICBhZGRpdGlvbmFsUHJvcHMsXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNXb3Jrc3BhY2VBbHJlYWR5T3Blbikge1xuICAgIGNvbnN0IG9wZW5Xb3Jrc3BhY2UgPSBvcGVuV29ya3NwYWNlc1t3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXNdO1xuICAgIC8vIE9ubHkgdXBkYXRlIHRoZSB0aXRsZSBpZiBpdCBoYXNuJ3QgYmVlbiBzZXQgYnkgYHNldFRpdGxlYFxuICAgIGlmIChvcGVuV29ya3NwYWNlLnRpdGxlID09PSBnZXRXb3Jrc3BhY2VUaXRsZShvcGVuV29ya3NwYWNlLCBvcGVuV29ya3NwYWNlLmFkZGl0aW9uYWxQcm9wcykpIHtcbiAgICAgIG9wZW5Xb3Jrc3BhY2UudGl0bGUgPSBnZXRXb3Jrc3BhY2VUaXRsZShuZXdXb3Jrc3BhY2UsIG5ld1dvcmtzcGFjZS5hZGRpdGlvbmFsUHJvcHMpO1xuICAgIH1cbiAgICBvcGVuV29ya3NwYWNlLmFkZGl0aW9uYWxQcm9wcyA9IG5ld1dvcmtzcGFjZS5hZGRpdGlvbmFsUHJvcHM7XG4gICAgY29uc3QgcmVzdE9mVGhlV29ya3NwYWNlcyA9IG9wZW5Xb3Jrc3BhY2VzLmZpbHRlcigodykgPT4gdy5uYW1lICE9IG5hbWUpO1xuICAgIHVwZGF0ZVN0b3JlV2l0aE5ld1dvcmtzcGFjZShvcGVuV29ya3NwYWNlc1t3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXNdLCByZXN0T2ZUaGVXb3Jrc3BhY2VzKTtcbiAgfSBlbHNlIGlmIChvcGVuZWRXb3Jrc3BhY2VXaXRoU2FtZVR5cGUpIHtcbiAgICBjb25zdCByZXN0T2ZUaGVXb3Jrc3BhY2VzID0gc3RvcmUuZ2V0U3RhdGUoKS5vcGVuV29ya3NwYWNlcy5maWx0ZXIoKHcpID0+IHcudHlwZSAhPSBuZXdXb3Jrc3BhY2UudHlwZSk7XG4gICAgdXBkYXRlU3RvcmVXaXRoTmV3V29ya3NwYWNlKG9wZW5lZFdvcmtzcGFjZVdpdGhTYW1lVHlwZSwgcmVzdE9mVGhlV29ya3NwYWNlcyk7XG4gICAgcHJvbXB0QmVmb3JlTGF1bmNoaW5nV29ya3NwYWNlKG9wZW5lZFdvcmtzcGFjZVdpdGhTYW1lVHlwZSwge1xuICAgICAgbmFtZSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wcyxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGVTdG9yZVdpdGhOZXdXb3Jrc3BhY2UobmV3V29ya3NwYWNlKTtcbiAgfVxufVxuXG4vKipcbiAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIGEgbmV3IHBhZ2UgYW5kIGxhdW5jaCBhIHdvcmtzcGFjZSBvbiB0aGF0IHBhZ2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMudGFyZ2V0VXJsOiBUaGUgVVJMIHRvIG5hdmlnYXRlIHRvLiBXaWxsIGJlIHBhc3NlZCB0byBbW25hdmlnYXRlXV0uXG4gKiBAcGFyYW0gb3B0aW9ucy5jb250ZXh0S2V5OiBUaGUgY29udGV4dCBrZXkgdXNlZCBieSB0aGUgdGFyZ2V0IHBhZ2UuXG4gKiBAcGFyYW0gb3B0aW9ucy53b3Jrc3BhY2VOYW1lOiBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlIHRvIGxhdW5jaC5cbiAqIEBwYXJhbSBvcHRpb25zLmFkZGl0aW9uYWxQcm9wczogQWRkaXRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB3b3Jrc3BhY2UgY29tcG9uZW50IGJlaW5nIGxhdW5jaGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmF2aWdhdGVBbmRMYXVuY2hXb3Jrc3BhY2Uoe1xuICB0YXJnZXRVcmwsXG4gIGNvbnRleHRLZXksXG4gIHdvcmtzcGFjZU5hbWUsXG4gIGFkZGl0aW9uYWxQcm9wcyxcbn06IHtcbiAgdGFyZ2V0VXJsOiBzdHJpbmc7XG4gIGNvbnRleHRLZXk6IHN0cmluZztcbiAgd29ya3NwYWNlTmFtZTogc3RyaW5nO1xuICBhZGRpdGlvbmFsUHJvcHM/OiBvYmplY3Q7XG59KSB7XG4gIGNoYW5nZVdvcmtzcGFjZUNvbnRleHQoY29udGV4dEtleSk7XG4gIGxhdW5jaFdvcmtzcGFjZSh3b3Jrc3BhY2VOYW1lLCBhZGRpdGlvbmFsUHJvcHMpO1xuICBuYXZpZ2F0ZSh7IHRvOiB0YXJnZXRVcmwgfSk7XG59XG5cbmNvbnN0IHByb21wdEJlZm9yZUNsb3NpbmdGY25zID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9tcHRCZWZvcmVDbG9zaW5nKHdvcmtzcGFjZU5hbWU6IHN0cmluZywgdGVzdEZjbjogKCkgPT4gYm9vbGVhbikge1xuICBwcm9tcHRCZWZvcmVDbG9zaW5nRmNuc1t3b3Jrc3BhY2VOYW1lXSA9IHRlc3RGY247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9tcHRCZWZvcmVDbG9zaW5nRmNuKHdvcmtzcGFjZU5hbWU6IHN0cmluZykge1xuICByZXR1cm4gcHJvbXB0QmVmb3JlQ2xvc2luZ0ZjbnNbd29ya3NwYWNlTmFtZV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxQcm9tcHQoKSB7XG4gIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBzdG9yZS5zZXRTdGF0ZSh7IC4uLnN0YXRlLCBwcm9tcHQ6IG51bGwgfSk7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBDbG9zZVdvcmtzcGFjZU9wdGlvbnMgPSB7XG4gIGlnbm9yZUNoYW5nZXM6IGZhbHNlLFxuICBvbldvcmtzcGFjZUNsb3NlOiAoKSA9PiB7fSxcbiAgY2xvc2VXb3Jrc3BhY2VHcm91cDogdHJ1ZSxcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2xvc2UgYW4gb3BlbmVkIHdvcmtzcGFjZVxuICogQHBhcmFtIG5hbWUgV29ya3NwYWNlIHJlZ2lzdHJhdGlvbiBuYW1lXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIGNsb3NlIHdvcmtzcGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VXb3Jrc3BhY2UobmFtZTogc3RyaW5nLCBvcHRpb25zOiBDbG9zZVdvcmtzcGFjZU9wdGlvbnMgPSB7fSk6IGJvb2xlYW4ge1xuICBvcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG5cbiAgY29uc3QgdXBkYXRlU3RvcmVXaXRoQ2xvc2VkV29ya3NwYWNlID0gKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCB3b3Jrc3BhY2VUb0JlQ2xvc2VkID0gc3RhdGUub3BlbldvcmtzcGFjZXMuZmluZCgodykgPT4gdy5uYW1lID09PSBuYW1lKTtcbiAgICBjb25zdCBuZXdPcGVuV29ya3NwYWNlcyA9IHN0YXRlLm9wZW5Xb3Jrc3BhY2VzLmZpbHRlcigodykgPT4gdy5uYW1lICE9IG5hbWUpO1xuXG4gICAgY29uc3Qgd29ya3NwYWNlR3JvdXBOYW1lID0gc3RvcmUuZ2V0U3RhdGUoKS53b3Jrc3BhY2VHcm91cD8ubmFtZTtcblxuICAgIGlmICh3b3Jrc3BhY2VHcm91cE5hbWUgJiYgb3B0aW9ucy5jbG9zZVdvcmtzcGFjZUdyb3VwKSB7XG4gICAgICBjbG9zZVdvcmtzcGFjZUdyb3VwKHdvcmtzcGFjZUdyb3VwTmFtZSk7XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIGNsb3NlZCB3b3Jrc3BhY2Ugd2lsbCBub3QgcHJvbXB0XG4gICAgcHJvbXB0QmVmb3JlQ2xvc2luZyhuYW1lLCAoKSA9PiBmYWxzZSk7XG4gICAgc3RvcmUuc2V0U3RhdGUoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgcHJvbXB0OiBudWxsLFxuICAgICAgb3BlbldvcmtzcGFjZXM6IG5ld09wZW5Xb3Jrc3BhY2VzLFxuICAgICAgd29ya3NwYWNlV2luZG93U3RhdGU6IGdldFVwZGF0ZWRXb3Jrc3BhY2VXaW5kb3dTdGF0ZShuZXdPcGVuV29ya3NwYWNlcz8uWzBdKSxcbiAgICB9KSk7XG5cbiAgICBvcHRpb25zPy5vbldvcmtzcGFjZUNsb3NlPy4oKTtcbiAgfTtcblxuICBpZiAoIWNhbkNsb3NlV29ya3NwYWNlV2l0aG91dFByb21wdGluZyhuYW1lLCBvcHRpb25zPy5pZ25vcmVDaGFuZ2VzKSkge1xuICAgIGNvbnN0IGN1cnJlbnROYW1lID0gZ2V0V29ya3NwYWNlUmVnaXN0cmF0aW9uKG5hbWUpLnRpdGxlID8/IG5hbWU7XG4gICAgc2hvd1dvcmtzcGFjZVByb21wdHMoJ2Nsb3Npbmctd29ya3NwYWNlJywgdXBkYXRlU3RvcmVXaXRoQ2xvc2VkV29ya3NwYWNlLCBjdXJyZW50TmFtZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZVN0b3JlV2l0aENsb3NlZFdvcmtzcGFjZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHNldCBvZiB3b3Jrc3BhY2VzIGlzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBwYWdlLiBUaGlzIGZ1bmN0aW9uXG4gKiBzaG91bGQgYmUgdXNlZCB3aGVuIHRyYW5zaXRpb25pbmcgdG8gYSBuZXcgcGFnZS4gSWYgdGhlIGN1cnJlbnRcbiAqIHdvcmtzcGFjZSBkYXRhIGlzIGZvciBhIGRpZmZlcmVudCBwYWdlLCB0aGUgd29ya3NwYWNlIHN0YXRlIGlzIGNsZWFyZWQuXG4gKlxuICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHdvcmtzcGFjZSBjb21wb25lbnRzIHdoZW4gdGhleSBtb3VudC5cbiAqIEBpbnRlcm5hbFxuICpcbiAqIEBwYXJhbSBjb250ZXh0S2V5IEFuIGFyYml0cmFyeSBrZXkgdG8gaWRlbnRpZnkgdGhlIGN1cnJlbnQgcGFnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlV29ya3NwYWNlQ29udGV4dChjb250ZXh0S2V5OiBzdHJpbmcgfCBudWxsKSB7XG4gIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBpZiAoc3RhdGUuY29udGV4dCAhPSBjb250ZXh0S2V5KSB7XG4gICAgc3RvcmUuc2V0U3RhdGUoeyBjb250ZXh0OiBjb250ZXh0S2V5LCBvcGVuV29ya3NwYWNlczogW10sIHByb21wdDogbnVsbCB9KTtcbiAgfVxufVxuXG5jb25zdCBpbml0aWFsU3RhdGU6IFdvcmtzcGFjZVN0b3JlU3RhdGUgPSB7XG4gIGNvbnRleHQ6ICcnLFxuICBvcGVuV29ya3NwYWNlczogW10sXG4gIHByb21wdDogbnVsbCxcbiAgd29ya3NwYWNlV2luZG93U3RhdGU6ICdub3JtYWwnLFxuICB3b3Jrc3BhY2VHcm91cDogdW5kZWZpbmVkLFxufTtcblxuZXhwb3J0IGNvbnN0IHdvcmtzcGFjZVN0b3JlID0gY3JlYXRlR2xvYmFsU3RvcmUoJ3dvcmtzcGFjZScsIGluaXRpYWxTdGF0ZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VTdG9yZSgpIHtcbiAgcmV0dXJuIHdvcmtzcGFjZVN0b3JlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlV29ya3NwYWNlV2luZG93U3RhdGUodmFsdWU6IFdvcmtzcGFjZVdpbmRvd1N0YXRlKSB7XG4gIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBzdG9yZS5zZXRTdGF0ZSh7IC4uLnN0YXRlLCB3b3Jrc3BhY2VXaW5kb3dTdGF0ZTogdmFsdWUgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFVwZGF0ZWRXb3Jrc3BhY2VXaW5kb3dTdGF0ZSh3b3Jrc3BhY2VBdFRvcDogT3BlbldvcmtzcGFjZSkge1xuICByZXR1cm4gd29ya3NwYWNlQXRUb3A/LnByZWZlcnJlZFdpbmRvd1NpemUgPz8gJ25vcm1hbCc7XG59XG5leHBvcnQgZnVuY3Rpb24gY2xvc2VBbGxXb3Jrc3BhY2VzKFxuICBvbkNsb3NpbmdXb3Jrc3BhY2VzOiAoKSA9PiB2b2lkID0gKCkgPT4ge30sXG4gIGZpbHRlcjogKHdvcmtzcGFjZTogT3BlbldvcmtzcGFjZSkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWUsXG4pIHtcbiAgY29uc3Qgc3RvcmUgPSBnZXRXb3Jrc3BhY2VTdG9yZSgpO1xuXG4gIGNvbnN0IGNhbkNsb3NlQWxsV29ya3NwYWNlcyA9IHN0b3JlXG4gICAgLmdldFN0YXRlKClcbiAgICAub3BlbldvcmtzcGFjZXMuZmlsdGVyKGZpbHRlcilcbiAgICAuZXZlcnkoKHsgbmFtZSB9KSA9PiB7XG4gICAgICByZXR1cm4gY2FuQ2xvc2VXb3Jrc3BhY2VXaXRob3V0UHJvbXB0aW5nKG5hbWUpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZVdvcmtzcGFjZVN0b3JlID0gKCkgPT4ge1xuICAgIHJlc2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgICBvbkNsb3NpbmdXb3Jrc3BhY2VzPy4oKTtcbiAgfTtcblxuICBpZiAoIWNhbkNsb3NlQWxsV29ya3NwYWNlcykge1xuICAgIHNob3dXb3Jrc3BhY2VQcm9tcHRzKCdjbG9zaW5nLWFsbC13b3Jrc3BhY2VzJywgdXBkYXRlV29ya3NwYWNlU3RvcmUpO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZVdvcmtzcGFjZVN0b3JlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VzSW5mbyB7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgcHJvbXB0OiBQcm9tcHQgfCBudWxsO1xuICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZTogV29ya3NwYWNlV2luZG93U3RhdGU7XG4gIHdvcmtzcGFjZXM6IEFycmF5PE9wZW5Xb3Jrc3BhY2U+O1xuICB3b3Jrc3BhY2VHcm91cD86IFdvcmtzcGFjZVN0b3JlU3RhdGVbJ3dvcmtzcGFjZUdyb3VwJ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VXb3Jrc3BhY2VzKCk6IFdvcmtzcGFjZXNJbmZvIHtcbiAgY29uc3QgeyB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSwgb3BlbldvcmtzcGFjZXMsIHByb21wdCwgd29ya3NwYWNlR3JvdXAgfSA9IHVzZVN0b3JlKHdvcmtzcGFjZVN0b3JlKTtcbiAgY29uc3QgbWVtb2lzZWRSZXN1bHRzOiBXb3Jrc3BhY2VzSW5mbyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhY3RpdmU6IG9wZW5Xb3Jrc3BhY2VzLmxlbmd0aCA+IDAsXG4gICAgICBwcm9tcHQsXG4gICAgICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSxcbiAgICAgIHdvcmtzcGFjZXM6IG9wZW5Xb3Jrc3BhY2VzLFxuICAgICAgd29ya3NwYWNlR3JvdXAsXG4gICAgfTtcbiAgfSwgW29wZW5Xb3Jrc3BhY2VzLCB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSwgcHJvbXB0LCB3b3Jrc3BhY2VHcm91cF0pO1xuICByZXR1cm4gbWVtb2lzZWRSZXN1bHRzO1xufVxuXG50eXBlIFByb21wdFR5cGUgPSAnY2xvc2luZy13b3Jrc3BhY2UnIHwgJ2Nsb3NpbmctYWxsLXdvcmtzcGFjZXMnIHwgJ2Nsb3Npbmctd29ya3NwYWNlLWxhdW5jaGluZy1uZXctd29ya3NwYWNlJztcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHByb21wdCBhY2NvcmRpbmcgdG8gdGhlIHByb21wdCB0eXBlLlxuICogQHBhcmFtIHByb21wdFR5cGUgRGV0ZXJtaW5lcyB0aGUgdGV4dCBhbmQgYmVoYXZpb3Igb2YgdGhlIHByb21wdFxuICogQHBhcmFtIG9uQ29uZmlybWF0aW9uIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgdXNlciBjb25maXJtcyB0byBjbG9zZSB0aGUgd29ya3NwYWNlXG4gKiBAcGFyYW0gd29ya3NwYWNlVGl0bGUgV29ya3NwYWNlIHRpdGxlIHRvIGJlIHNob3duIGluIHRoZSBwcm9tcHRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93V29ya3NwYWNlUHJvbXB0cyhcbiAgcHJvbXB0VHlwZTogUHJvbXB0VHlwZSxcbiAgb25Db25maXJtYXRpb246ICgpID0+IHZvaWQgPSAoKSA9PiB7fSxcbiAgd29ya3NwYWNlVGl0bGU6IHN0cmluZyA9ICcnLFxuKSB7XG4gIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcblxuICBsZXQgcHJvbXB0OiBQcm9tcHQ7XG4gIHN3aXRjaCAocHJvbXB0VHlwZSkge1xuICAgIGNhc2UgJ2Nsb3Npbmctd29ya3NwYWNlJzoge1xuICAgICAgcHJvbXB0ID0ge1xuICAgICAgICB0aXRsZTogZ2V0Q29yZVRyYW5zbGF0aW9uKCd1bnNhdmVkQ2hhbmdlc1RpdGxlVGV4dCcsICdVbnNhdmVkIGNoYW5nZXMnKSxcbiAgICAgICAgYm9keTogZ2V0Q29yZVRyYW5zbGF0aW9uKFxuICAgICAgICAgICd1bnNhdmVkQ2hhbmdlc0luT3BlbmVkV29ya3NwYWNlJyxcbiAgICAgICAgICBgWW91IG1heSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgb3BlbmVkIHdvcmtzcGFjZS4gRG8geW91IHdhbnQgdG8gZGlzY2FyZCB0aGVzZSBjaGFuZ2VzP2AsXG4gICAgICAgICksXG4gICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgIG9uQ29uZmlybWF0aW9uPy4oKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlybVRleHQ6IGdldENvcmVUcmFuc2xhdGlvbignZGlzY2FyZCcsICdEaXNjYXJkJyksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSAnY2xvc2luZy1hbGwtd29ya3NwYWNlcyc6IHtcbiAgICAgIGNvbnN0IHdvcmtzcGFjZXNOb3RDbG9zZWQgPSBzdG9yZVxuICAgICAgICAuZ2V0U3RhdGUoKVxuICAgICAgICAub3BlbldvcmtzcGFjZXMuZmlsdGVyKCh7IG5hbWUgfSkgPT4gIWNhbkNsb3NlV29ya3NwYWNlV2l0aG91dFByb21wdGluZyhuYW1lKSlcbiAgICAgICAgLm1hcCgoeyB0aXRsZSB9LCBpbmR4KSA9PiBgJHtpbmR4ICsgMX0uICR7dGl0bGV9YCk7XG5cbiAgICAgIHByb21wdCA9IHtcbiAgICAgICAgdGl0bGU6IGdldENvcmVUcmFuc2xhdGlvbignY2xvc2luZ0FsbFdvcmtzcGFjZXNQcm9tcHRUaXRsZScsICdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMnKSxcbiAgICAgICAgYm9keTogZ2V0Q29yZVRyYW5zbGF0aW9uKFxuICAgICAgICAgICdjbG9zaW5nQWxsV29ya3NwYWNlc1Byb21wdEJvZHknLFxuICAgICAgICAgICdUaGVyZSBtYXkgYmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgd29ya3NwYWNlcy4gRG8geW91IHdhbnQgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgd29ya3NwYWNlcz8ge3t3b3Jrc3BhY2VOYW1lc319JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3b3Jrc3BhY2VOYW1lczogd29ya3NwYWNlc05vdENsb3NlZC5qb2luKCcsJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XG4gICAgICAgICAgb25Db25maXJtYXRpb24/LigpO1xuICAgICAgICB9LFxuICAgICAgICBjb25maXJtVGV4dDogZ2V0Q29yZVRyYW5zbGF0aW9uKCdjbG9zZUFsbE9wZW5lZFdvcmtzcGFjZXMnLCAnRGlzY2FyZCBjaGFuZ2VzIGluIHt7Y291bnR9fSB3b3Jrc3BhY2VzJywge1xuICAgICAgICAgIGNvdW50OiB3b3Jrc3BhY2VzTm90Q2xvc2VkLmxlbmd0aCxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ2Nsb3Npbmctd29ya3NwYWNlLWxhdW5jaGluZy1uZXctd29ya3NwYWNlJzoge1xuICAgICAgcHJvbXB0ID0ge1xuICAgICAgICB0aXRsZTogZ2V0Q29yZVRyYW5zbGF0aW9uKCd1bnNhdmVkQ2hhbmdlc1RpdGxlVGV4dCcsICdVbnNhdmVkIGNoYW5nZXMnKSxcbiAgICAgICAgYm9keTogZ2V0Q29yZVRyYW5zbGF0aW9uKFxuICAgICAgICAgICd1bnNhdmVkQ2hhbmdlc0luV29ya3NwYWNlJyxcbiAgICAgICAgICAnVGhlcmUgbWF5IGJlIHVuc2F2ZWQgY2hhbmdlcyBpbiBcInt7d29ya3NwYWNlTmFtZX19XCIuIFBsZWFzZSBzYXZlIHRoZW0gYmVmb3JlIG9wZW5pbmcgYW5vdGhlciB3b3Jrc3BhY2UuJyxcbiAgICAgICAgICB7IHdvcmtzcGFjZU5hbWU6IHdvcmtzcGFjZVRpdGxlIH0sXG4gICAgICAgICksXG4gICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgIHN0b3JlLnNldFN0YXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgcHJvbXB0OiBudWxsLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBvbkNvbmZpcm1hdGlvbj8uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpcm1UZXh0OiBnZXRDb3JlVHJhbnNsYXRpb24oJ29wZW5Bbnl3YXknLCAnT3BlbiBhbnl3YXknKSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFdvcmtzcGFjZSBzeXN0ZW0gdHJ5aW5nIHRvIG9wZW4gdW5rbm93biBwcm9tcHQgdHlwZSBcIiR7cHJvbXB0VHlwZX1cIiBpbiBmdW5jdGlvbiBcInNob3dXb3Jrc3BhY2VQcm9tcHRzXCJgLFxuICAgICAgKTtcbiAgICAgIG9uQ29uZmlybWF0aW9uPy4oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgc3RvcmUuc2V0U3RhdGUoKHN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgcHJvbXB0IH0pKTtcbn1cblxuZnVuY3Rpb24gZ2V0V29ya3NwYWNlVGl0bGUod29ya3NwYWNlOiBXb3Jrc3BhY2VSZWdpc3RyYXRpb24sIGFkZGl0aW9uYWxQcm9wcz86IG9iamVjdCkge1xuICByZXR1cm4gYWRkaXRpb25hbFByb3BzPy5bJ3dvcmtzcGFjZVRpdGxlJ10gPz8gd29ya3NwYWNlLnRpdGxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRXb3Jrc3BhY2VTdG9yZSgpIHtcbiAgZ2V0V29ya3NwYWNlU3RvcmUoKS5zZXRTdGF0ZShpbml0aWFsU3RhdGUpO1xufVxuXG4vKipcbiAqIFRoZSB3b3Jrc3BhY2UgZ3JvdXAgc3RvcmUgaXMgYSBzdG9yZSB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSB3b3Jrc3BhY2UgZ3JvdXAuXG4gKiBJZiB0aGUgd29ya3NwYWNlIGhhcyBpdHMgb3duIHNpZGViYXIsIHRoZSBzdG9yZSB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBUaGlzIHN0b3JlIGNhbiBiZSB1c2VkIHRvIHN0b3JlIGRhdGEgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgd29ya3NwYWNlIGdyb3VwLlxuICogVGhlIHN0b3JlIHdpbGwgYmUgc2FtZSBmb3IgYWxsIHRoZSB3b3Jrc3BhY2VzIHdpdGggc2FtZSBncm91cCBuYW1lLlxuICpcbiAqIEZvciB3b3Jrc3BhY2VzIGxhdW5jaGVkIHdpdGhvdXQgYSBncm91cCwgdGhlIHN0b3JlIHdpbGwgYmUgdW5kZWZpbmVkLlxuICpcbiAqIFRoZSBzdG9yZSB3aWxsIGJlIGNsZWFyZWQgd2hlbiBhbGwgdGhlIHdvcmtzcGFjZXMgd2l0aCB0aGUgc3RvcmUncyBncm91cCBuYW1lIGFyZSBjbG9zZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VHcm91cFN0b3JlKFxuICB3b3Jrc3BhY2VHcm91cE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgYWRkaXRpb25hbFByb3BzOiBvYmplY3QgPSB7fSxcbik6IFN0b3JlQXBpPG9iamVjdD4gfCB1bmRlZmluZWQge1xuICBpZiAoIXdvcmtzcGFjZUdyb3VwTmFtZSB8fCB3b3Jrc3BhY2VHcm91cE5hbWUgPT09ICdkZWZhdWx0Jykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RvcmUgPSBnZXRHbG9iYWxTdG9yZTxvYmplY3Q+KHdvcmtzcGFjZUdyb3VwTmFtZSwge30pO1xuICBpZiAoYWRkaXRpb25hbFByb3BzKSB7XG4gICAgc3RvcmUuc2V0U3RhdGUoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgLi4uYWRkaXRpb25hbFByb3BzLFxuICAgIH0pKTtcbiAgfVxuICByZXR1cm4gc3RvcmU7XG59XG4iXSwibmFtZXMiOlsidXNlTWVtbyIsImdldFdvcmtzcGFjZUdyb3VwUmVnaXN0cmF0aW9uIiwiZ2V0V29ya3NwYWNlUmVnaXN0cmF0aW9uIiwibmF2aWdhdGUiLCJnZXRHbG9iYWxTdG9yZSIsImNyZWF0ZUdsb2JhbFN0b3JlIiwiZ2V0Q29yZVRyYW5zbGF0aW9uIiwidXNlU3RvcmUiLCJjYW5DbG9zZVdvcmtzcGFjZVdpdGhvdXRQcm9tcHRpbmciLCJuYW1lIiwiaWdub3JlQ2hhbmdlcyIsInByb21wdEJlZm9yZUZuIiwiZ2V0UHJvbXB0QmVmb3JlQ2xvc2luZ0ZjbiIsImNsb3NlV29ya3NwYWNlR3JvdXAiLCJncm91cE5hbWUiLCJvbldvcmtzcGFjZUNsb3NldXAiLCJzdG9yZSIsImdldFdvcmtzcGFjZVN0b3JlIiwiY3VycmVudFdvcmtzcGFjZUdyb3VwIiwiZ2V0U3RhdGUiLCJ3b3Jrc3BhY2VHcm91cCIsImN1cnJlbnRHcm91cE5hbWUiLCJmaWx0ZXIiLCJ3b3Jrc3BhY2UiLCJjbG9zZUFsbFdvcmtzcGFjZXMiLCJ3b3Jrc3BhY2VHcm91cFN0b3JlIiwiZ2V0V29ya3NwYWNlR3JvdXBTdG9yZSIsInNldFN0YXRlIiwidW5zdWJzY3JpYmUiLCJzdWJzY3JpYmUiLCJjbGVhbnVwIiwicHJldiIsInVuZGVmaW5lZCIsImxhdW5jaFdvcmtzcGFjZUdyb3VwIiwiYXJncyIsIndvcmtzcGFjZUdyb3VwUmVnaXN0cmF0aW9uIiwic3RhdGUiLCJvbldvcmtzcGFjZUdyb3VwTGF1bmNoIiwid29ya3NwYWNlR3JvdXBDbGVhbnVwIiwid29ya3NwYWNlVG9MYXVuY2giLCJvcGVuV29ya3NwYWNlcyIsImxlbmd0aCIsIm1lbWJlcnMiLCJsYXVuY2hXb3Jrc3BhY2UiLCJhZGRpdGlvbmFsUHJvcHMiLCJwcm9tcHRCZWZvcmVMYXVuY2hpbmdXb3Jrc3BhY2UiLCJuZXdXb3Jrc3BhY2VEZXRhaWxzIiwibmV3V29ya3NwYWNlUmVnaXN0cmF0aW9uIiwicHJvY2VlZCIsImNsb3NlV29ya3NwYWNlIiwib25Xb3Jrc3BhY2VDbG9zZSIsInNob3dXb3Jrc3BhY2VQcm9tcHRzIiwidGl0bGUiLCJpbmNsdWRlcyIsIm5ld1dvcmtzcGFjZSIsImdldFdvcmtzcGFjZVRpdGxlIiwib3B0aW9ucyIsImNsb3NlV29ya3NwYWNlV2l0aFNhdmVkQ2hhbmdlcyIsInByb21wdEJlZm9yZUNsb3NpbmciLCJ0ZXN0RmNuIiwic2V0VGl0bGUiLCJ0aXRsZU5vZGUiLCJtYXAiLCJ3IiwidXBkYXRlU3RvcmVXaXRoTmV3V29ya3NwYWNlIiwid29ya3NwYWNlVG9CZUFkZGVkIiwicmVzdE9mVGhlV29ya3NwYWNlcyIsIndvcmtzcGFjZVdpbmRvd1N0YXRlIiwiZ2V0VXBkYXRlZFdvcmtzcGFjZVdpbmRvd1N0YXRlIiwid29ya3NwYWNlSW5kZXhJbk9wZW5Xb3Jrc3BhY2VzIiwiZmluZEluZGV4IiwiaXNXb3Jrc3BhY2VBbHJlYWR5T3BlbiIsIm9wZW5lZFdvcmtzcGFjZVdpdGhTYW1lVHlwZSIsImZpbmQiLCJ0eXBlIiwiY2FuSGlkZSIsIm9wZW5Xb3Jrc3BhY2UiLCJuYXZpZ2F0ZUFuZExhdW5jaFdvcmtzcGFjZSIsInRhcmdldFVybCIsImNvbnRleHRLZXkiLCJ3b3Jrc3BhY2VOYW1lIiwiY2hhbmdlV29ya3NwYWNlQ29udGV4dCIsInRvIiwicHJvbXB0QmVmb3JlQ2xvc2luZ0ZjbnMiLCJjYW5jZWxQcm9tcHQiLCJwcm9tcHQiLCJkZWZhdWx0T3B0aW9ucyIsInVwZGF0ZVN0b3JlV2l0aENsb3NlZFdvcmtzcGFjZSIsIndvcmtzcGFjZVRvQmVDbG9zZWQiLCJuZXdPcGVuV29ya3NwYWNlcyIsIndvcmtzcGFjZUdyb3VwTmFtZSIsImN1cnJlbnROYW1lIiwiY29udGV4dCIsImluaXRpYWxTdGF0ZSIsIndvcmtzcGFjZVN0b3JlIiwidXBkYXRlV29ya3NwYWNlV2luZG93U3RhdGUiLCJ2YWx1ZSIsIndvcmtzcGFjZUF0VG9wIiwicHJlZmVycmVkV2luZG93U2l6ZSIsIm9uQ2xvc2luZ1dvcmtzcGFjZXMiLCJjYW5DbG9zZUFsbFdvcmtzcGFjZXMiLCJldmVyeSIsInVwZGF0ZVdvcmtzcGFjZVN0b3JlIiwicmVzZXRXb3Jrc3BhY2VTdG9yZSIsInVzZVdvcmtzcGFjZXMiLCJtZW1vaXNlZFJlc3VsdHMiLCJhY3RpdmUiLCJ3b3Jrc3BhY2VzIiwicHJvbXB0VHlwZSIsIm9uQ29uZmlybWF0aW9uIiwid29ya3NwYWNlVGl0bGUiLCJib2R5Iiwib25Db25maXJtIiwiY29uZmlybVRleHQiLCJ3b3Jrc3BhY2VzTm90Q2xvc2VkIiwiaW5keCIsIndvcmtzcGFjZU5hbWVzIiwiam9pbiIsImNvdW50IiwiY29uc29sZSIsImVycm9yIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-styleguide/src/workspaces/workspaces.ts\n");
2198
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ canCloseWorkspaceWithoutPrompting: () => (/* binding */ canCloseWorkspaceWithoutPrompting),\n/* harmony export */ cancelPrompt: () => (/* binding */ cancelPrompt),\n/* harmony export */ changeWorkspaceContext: () => (/* binding */ changeWorkspaceContext),\n/* harmony export */ closeAllWorkspaces: () => (/* binding */ closeAllWorkspaces),\n/* harmony export */ closeWorkspace: () => (/* binding */ closeWorkspace),\n/* harmony export */ getPromptBeforeClosingFcn: () => (/* binding */ getPromptBeforeClosingFcn),\n/* harmony export */ getWorkspaceGroupStore: () => (/* binding */ getWorkspaceGroupStore),\n/* harmony export */ getWorkspaceStore: () => (/* binding */ getWorkspaceStore),\n/* harmony export */ launchWorkspace: () => (/* binding */ launchWorkspace),\n/* harmony export */ launchWorkspaceGroup: () => (/* binding */ launchWorkspaceGroup),\n/* harmony export */ navigateAndLaunchWorkspace: () => (/* binding */ navigateAndLaunchWorkspace),\n/* harmony export */ promptBeforeClosing: () => (/* binding */ promptBeforeClosing),\n/* harmony export */ resetWorkspaceStore: () => (/* binding */ resetWorkspaceStore),\n/* harmony export */ showWorkspacePrompts: () => (/* binding */ showWorkspacePrompts),\n/* harmony export */ updateWorkspaceWindowState: () => (/* binding */ updateWorkspaceWindowState),\n/* harmony export */ useWorkspaces: () => (/* binding */ useWorkspaces),\n/* harmony export */ workspaceStore: () => (/* binding */ workspaceStore)\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 _openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @openmrs/esm-extensions */ \"../../framework/esm-extensions/dist/index.js\");\n/* harmony import */ var _openmrs_esm_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @openmrs/esm-navigation */ \"../../framework/esm-navigation/dist/index.js\");\n/* harmony import */ var _openmrs_esm_state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @openmrs/esm-state */ \"../../framework/esm-state/dist/index.js\");\n/* harmony import */ var _openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @openmrs/esm-translations */ \"../../framework/esm-translations/dist/index.js\");\n/* harmony import */ var _openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @openmrs/esm-react-utils */ \"../../framework/esm-react-utils/dist/index.js\");\n/** @module @category Workspace */ 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_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 _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 _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/**\n *\n * @param name Name of the workspace\n * @param ignoreChanges If set to true, the \"unsaved changes\" modal will never be shown, even if the `promptBeforeClosing` function returns true. The user will not be prompted before closing.\n * @returns true if the workspace can be closed.\n */ function canCloseWorkspaceWithoutPrompting(name) {\n var ignoreChanges = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n if (ignoreChanges) {\n return true;\n }\n var promptBeforeFn = getPromptBeforeClosingFcn(name);\n return !promptBeforeFn || !promptBeforeFn();\n}\n/**\n * Closes a workspace group and performs cleanup operations.\n *\n * @param groupName - The name of the workspace group to close\n * @param onWorkspaceCloseup - Optional callback function to execute after closing the workspace group\n * @returns void, or exits early if the current workspace group name doesn't match the provided group name\n *\n * @remarks\n * This function performs the following operations:\n * - Validates if the provided group name matches the current workspace group\n * - Closes all workspaces associated with the group\n * - Clears the workspace group store state\n * - Executes cleanup function if defined in the workspace group\n * - Updates the main workspace store to remove the workspace group\n * - Calls the optional closeup callback if provided\n */ function closeWorkspaceGroup(groupName, onWorkspaceCloseup) {\n var _store_getState;\n var store = getWorkspaceStore();\n var currentWorkspaceGroup = (_store_getState = store.getState()) === null || _store_getState === void 0 ? void 0 : _store_getState.workspaceGroup;\n var currentGroupName = currentWorkspaceGroup === null || currentWorkspaceGroup === void 0 ? void 0 : currentWorkspaceGroup.name;\n if (!currentGroupName || groupName !== currentGroupName) {\n return;\n }\n var filter = currentGroupName ? function(workspace) {\n return workspace.currentWorkspaceGroup === currentGroupName;\n } : function() {\n return true;\n };\n closeAllWorkspaces(function() {\n // Clearing the workspace group and respective store if the new workspace is not part of the current group, which is handled in the `launchWorkspace` function.\n var workspaceGroupStore = getWorkspaceGroupStore(groupName);\n if (workspaceGroupStore) {\n workspaceGroupStore.setState({}, true);\n var unsubscribe = workspaceGroupStore.subscribe(function() {});\n unsubscribe();\n }\n if (typeof (currentWorkspaceGroup === null || currentWorkspaceGroup === void 0 ? void 0 : currentWorkspaceGroup.cleanup) === 'function') {\n currentWorkspaceGroup.cleanup();\n }\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n workspaceGroup: undefined\n });\n });\n if (typeof onWorkspaceCloseup === 'function') {\n onWorkspaceCloseup();\n }\n }, filter);\n}\n/**\n * Launches a workspace group with the specified name and configuration.\n * If there are any open workspaces, it will first close them before launching the new workspace group.\n *\n * @param groupName - The name of the workspace group to launch\n * @param args - Configuration object for launching the workspace group\n * @param args.state - The initial state for the workspace group\n * @param args.onWorkspaceGroupLaunch - Optional callback function to be executed after the workspace group is launched\n * @param args.workspaceGroupCleanup - Optional cleanup function to be executed when the workspace group is closed\n *\n * @example\n * launchWorkspaceGroup(\"myGroup\", {\n * state: initialState,\n * onWorkspaceGroupLaunch: () => console.log(\"Workspace group launched\"),\n * workspaceGroupCleanup: () => console.log(\"Cleaning up workspace group\")\n * });\n */ function launchWorkspaceGroup(groupName, args) {\n var workspaceGroupRegistration = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_1__.getWorkspaceGroupRegistration)(groupName);\n var state = args.state, onWorkspaceGroupLaunch = args.onWorkspaceGroupLaunch, workspaceGroupCleanup = args.workspaceGroupCleanup, workspaceToLaunch = args.workspaceToLaunch;\n var store = getWorkspaceStore();\n if (store.getState().openWorkspaces.length) {\n var workspaceGroup = store.getState().workspaceGroup;\n if (workspaceGroup) {\n closeWorkspaceGroup(workspaceGroup === null || workspaceGroup === void 0 ? void 0 : workspaceGroup.name, function() {\n launchWorkspaceGroup(groupName, args);\n });\n } else {\n closeAllWorkspaces(function() {\n launchWorkspaceGroup(groupName, args);\n });\n }\n } else {\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n workspaceGroup: {\n name: groupName,\n members: workspaceGroupRegistration.members,\n cleanup: workspaceGroupCleanup\n }\n });\n });\n getWorkspaceGroupStore(groupName, state);\n onWorkspaceGroupLaunch === null || onWorkspaceGroupLaunch === void 0 ? void 0 : onWorkspaceGroupLaunch();\n if (workspaceToLaunch) {\n var _workspaceToLaunch_additionalProps;\n launchWorkspace(workspaceToLaunch.name, (_workspaceToLaunch_additionalProps = workspaceToLaunch.additionalProps) !== null && _workspaceToLaunch_additionalProps !== void 0 ? _workspaceToLaunch_additionalProps : {});\n }\n }\n}\nfunction promptBeforeLaunchingWorkspace(workspace, newWorkspaceDetails) {\n var name = newWorkspaceDetails.name, additionalProps = newWorkspaceDetails.additionalProps;\n var newWorkspaceRegistration = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_1__.getWorkspaceRegistration)(name);\n var proceed = function() {\n closeWorkspace(workspace.name, {\n ignoreChanges: true,\n // Calling the launchWorkspace again, since one of the `if` case\n // might resolve, but we need to check all the cases before launching the form.\n onWorkspaceClose: function() {\n return launchWorkspace(name, additionalProps);\n },\n // If the new workspace is of the same sidebar group, then we don't need to clear the workspace group store.\n closeWorkspaceGroup: false\n });\n };\n if (!canCloseWorkspaceWithoutPrompting(workspace.name)) {\n var _workspace_title;\n showWorkspacePrompts('closing-workspace-launching-new-workspace', proceed, (_workspace_title = workspace.title) !== null && _workspace_title !== void 0 ? _workspace_title : workspace.name);\n } else {\n proceed();\n }\n}\n/**\n * This launches a workspace by its name. The workspace must have been registered.\n * Workspaces should be registered in the `routes.json` file.\n *\n * For the workspace to appear, there must be either a `<WorkspaceOverlay />` or\n * a `<WorkspaceWindow />` component rendered.\n *\n * The behavior of this function is as follows:\n *\n * - If no workspaces are open, or if no other workspaces with the same type are open,\n * it will be opened and focused.\n * - If a workspace with the same name is already open, it will be displayed/focused,\n * if it was not already.\n * - If a workspace is launched and a workspace which cannot be hidden is already open,\n * a confirmation modal will pop up warning about closing the currently open workspace.\n * - If another workspace with the same type is open, the workspace will be brought to\n * the front and then a confirmation modal will pop up warning about closing the opened\n * workspace\n *\n * Note that this function just manipulates the workspace store. The UI logic is handled\n * by the components that display workspaces.\n *\n * Additional props can be passed to the workspace component being launched. Passing a\n * prop named `workspaceTitle` will override the title of the workspace.\n *\n * @param name The name of the workspace to launch\n * @param additionalProps Props to pass to the workspace component being launched. Passing\n * a prop named `workspaceTitle` will override the title of the workspace.\n */ function launchWorkspace(name, additionalProps) {\n var _currentWorkspaceGroup_members, _store_getState_workspaceGroup;\n var store = getWorkspaceStore();\n var workspace = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_1__.getWorkspaceRegistration)(name);\n var currentWorkspaceGroup = store.getState().workspaceGroup;\n if (currentWorkspaceGroup && !((_currentWorkspaceGroup_members = currentWorkspaceGroup.members) === null || _currentWorkspaceGroup_members === void 0 ? void 0 : _currentWorkspaceGroup_members.includes(name))) {\n closeWorkspaceGroup(currentWorkspaceGroup.name, function() {\n launchWorkspace(name, additionalProps);\n });\n return;\n }\n var currentGroupName = (_store_getState_workspaceGroup = store.getState().workspaceGroup) === null || _store_getState_workspaceGroup === void 0 ? void 0 : _store_getState_workspaceGroup.name;\n var newWorkspace = _object_spread_props(_object_spread({}, workspace), {\n title: getWorkspaceTitle(workspace, additionalProps),\n closeWorkspace: function() {\n var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n return closeWorkspace(name, options);\n },\n closeWorkspaceWithSavedChanges: function(options) {\n return closeWorkspace(name, _object_spread({\n ignoreChanges: true\n }, options));\n },\n promptBeforeClosing: function(testFcn) {\n return promptBeforeClosing(name, testFcn);\n },\n setTitle: function(title, titleNode) {\n newWorkspace.title = title;\n newWorkspace.titleNode = titleNode;\n store.setState(function(state) {\n var openWorkspaces = state.openWorkspaces.map(function(w) {\n return w.name === name ? newWorkspace : w;\n });\n return _object_spread_props(_object_spread({}, state), {\n openWorkspaces: openWorkspaces\n });\n });\n },\n currentWorkspaceGroup: currentGroupName,\n additionalProps: additionalProps !== null && additionalProps !== void 0 ? additionalProps : {}\n });\n if (currentGroupName) {\n getWorkspaceGroupStore(currentGroupName, additionalProps);\n }\n function updateStoreWithNewWorkspace(workspaceToBeAdded, restOfTheWorkspaces) {\n store.setState(function(state) {\n var openWorkspaces = [\n workspaceToBeAdded\n ].concat(_to_consumable_array(restOfTheWorkspaces !== null && restOfTheWorkspaces !== void 0 ? restOfTheWorkspaces : state.openWorkspaces));\n var workspaceWindowState = getUpdatedWorkspaceWindowState(workspaceToBeAdded);\n return _object_spread_props(_object_spread({}, state), {\n openWorkspaces: openWorkspaces,\n workspaceWindowState: workspaceWindowState\n });\n });\n }\n var openWorkspaces = store.getState().openWorkspaces;\n var workspaceIndexInOpenWorkspaces = openWorkspaces.findIndex(function(w) {\n return w.name === name;\n });\n var isWorkspaceAlreadyOpen = workspaceIndexInOpenWorkspaces >= 0;\n var openedWorkspaceWithSameType = openWorkspaces.find(function(w) {\n return w.type == newWorkspace.type;\n });\n if (openWorkspaces.length === 0) {\n updateStoreWithNewWorkspace(newWorkspace);\n } else if (!openWorkspaces[0].canHide && workspaceIndexInOpenWorkspaces !== 0) {\n promptBeforeLaunchingWorkspace(openWorkspaces[0], {\n name: name,\n additionalProps: additionalProps\n });\n } else if (isWorkspaceAlreadyOpen) {\n var openWorkspace = openWorkspaces[workspaceIndexInOpenWorkspaces];\n // Only update the title if it hasn't been set by `setTitle`\n if (openWorkspace.title === getWorkspaceTitle(openWorkspace, openWorkspace.additionalProps)) {\n openWorkspace.title = getWorkspaceTitle(newWorkspace, newWorkspace.additionalProps);\n }\n openWorkspace.additionalProps = newWorkspace.additionalProps;\n var restOfTheWorkspaces = openWorkspaces.filter(function(w) {\n return w.name != name;\n });\n updateStoreWithNewWorkspace(openWorkspaces[workspaceIndexInOpenWorkspaces], restOfTheWorkspaces);\n } else if (openedWorkspaceWithSameType) {\n var restOfTheWorkspaces1 = store.getState().openWorkspaces.filter(function(w) {\n return w.type != newWorkspace.type;\n });\n updateStoreWithNewWorkspace(openedWorkspaceWithSameType, restOfTheWorkspaces1);\n promptBeforeLaunchingWorkspace(openedWorkspaceWithSameType, {\n name: name,\n additionalProps: additionalProps\n });\n } else {\n updateStoreWithNewWorkspace(newWorkspace);\n }\n}\n/**\n * Use this function to navigate to a new page and launch a workspace on that page.\n *\n * @param options.targetUrl: The URL to navigate to. Will be passed to [[navigate]].\n * @param options.contextKey: The context key used by the target page.\n * @param options.workspaceName: The name of the workspace to launch.\n * @param options.additionalProps: Additional props to pass to the workspace component being launched.\n */ function navigateAndLaunchWorkspace(param) {\n var targetUrl = param.targetUrl, contextKey = param.contextKey, workspaceName = param.workspaceName, additionalProps = param.additionalProps;\n changeWorkspaceContext(contextKey);\n launchWorkspace(workspaceName, additionalProps);\n (0,_openmrs_esm_navigation__WEBPACK_IMPORTED_MODULE_2__.navigate)({\n to: targetUrl\n });\n}\nvar promptBeforeClosingFcns = {};\nfunction promptBeforeClosing(workspaceName, testFcn) {\n promptBeforeClosingFcns[workspaceName] = testFcn;\n}\nfunction getPromptBeforeClosingFcn(workspaceName) {\n return promptBeforeClosingFcns[workspaceName];\n}\nfunction cancelPrompt() {\n var store = getWorkspaceStore();\n var state = store.getState();\n store.setState(_object_spread_props(_object_spread({}, state), {\n prompt: null\n }));\n}\nvar defaultOptions = {\n ignoreChanges: false,\n onWorkspaceClose: function() {},\n closeWorkspaceGroup: true\n};\n/**\n * Function to close an opened workspace\n * @param name Workspace registration name\n * @param options Options to close workspace\n */ function closeWorkspace(name) {\n var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n options = _object_spread({}, defaultOptions, options);\n var store = getWorkspaceStore();\n var updateStoreWithClosedWorkspace = function() {\n var _store_getState_workspaceGroup, _options_onWorkspaceClose;\n var state = store.getState();\n var workspaceToBeClosed = state.openWorkspaces.find(function(w) {\n return w.name === name;\n });\n var newOpenWorkspaces = state.openWorkspaces.filter(function(w) {\n return w.name != name;\n });\n var workspaceGroupName = (_store_getState_workspaceGroup = store.getState().workspaceGroup) === null || _store_getState_workspaceGroup === void 0 ? void 0 : _store_getState_workspaceGroup.name;\n if (workspaceGroupName && options.closeWorkspaceGroup) {\n closeWorkspaceGroup(workspaceGroupName);\n }\n // ensure closed workspace will not prompt\n promptBeforeClosing(name, function() {\n return false;\n });\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n prompt: null,\n openWorkspaces: newOpenWorkspaces,\n workspaceWindowState: getUpdatedWorkspaceWindowState(newOpenWorkspaces === null || newOpenWorkspaces === void 0 ? void 0 : newOpenWorkspaces[0])\n });\n });\n options === null || options === void 0 ? void 0 : (_options_onWorkspaceClose = options.onWorkspaceClose) === null || _options_onWorkspaceClose === void 0 ? void 0 : _options_onWorkspaceClose.call(options);\n };\n if (!canCloseWorkspaceWithoutPrompting(name, options === null || options === void 0 ? void 0 : options.ignoreChanges)) {\n var _getWorkspaceRegistration_title;\n var currentName = (_getWorkspaceRegistration_title = (0,_openmrs_esm_extensions__WEBPACK_IMPORTED_MODULE_1__.getWorkspaceRegistration)(name).title) !== null && _getWorkspaceRegistration_title !== void 0 ? _getWorkspaceRegistration_title : name;\n showWorkspacePrompts('closing-workspace', updateStoreWithClosedWorkspace, currentName);\n return false;\n } else {\n updateStoreWithClosedWorkspace();\n return true;\n }\n}\n/**\n * The set of workspaces is specific to a particular page. This function\n * should be used when transitioning to a new page. If the current\n * workspace data is for a different page, the workspace state is cleared.\n *\n * This is called by the workspace components when they mount.\n * @internal\n *\n * @param contextKey An arbitrary key to identify the current page\n */ function changeWorkspaceContext(contextKey) {\n var store = getWorkspaceStore();\n var state = store.getState();\n if (state.context != contextKey) {\n store.setState({\n context: contextKey,\n openWorkspaces: [],\n prompt: null\n });\n }\n}\nvar initialState = {\n context: '',\n openWorkspaces: [],\n prompt: null,\n workspaceWindowState: 'normal',\n workspaceGroup: undefined\n};\nvar workspaceStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_3__.createGlobalStore)('workspace', initialState);\nfunction getWorkspaceStore() {\n return workspaceStore;\n}\nfunction updateWorkspaceWindowState(value) {\n var store = getWorkspaceStore();\n var state = store.getState();\n store.setState(_object_spread_props(_object_spread({}, state), {\n workspaceWindowState: value\n }));\n}\nfunction getUpdatedWorkspaceWindowState(workspaceAtTop) {\n var _workspaceAtTop_preferredWindowSize;\n return (_workspaceAtTop_preferredWindowSize = workspaceAtTop === null || workspaceAtTop === void 0 ? void 0 : workspaceAtTop.preferredWindowSize) !== null && _workspaceAtTop_preferredWindowSize !== void 0 ? _workspaceAtTop_preferredWindowSize : 'normal';\n}\nfunction closeAllWorkspaces() {\n var onClosingWorkspaces = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function() {}, filter = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function() {\n return true;\n };\n var store = getWorkspaceStore();\n var canCloseAllWorkspaces = store.getState().openWorkspaces.filter(filter).every(function(param) {\n var name = param.name;\n return canCloseWorkspaceWithoutPrompting(name);\n });\n var updateWorkspaceStore = function() {\n resetWorkspaceStore();\n onClosingWorkspaces === null || onClosingWorkspaces === void 0 ? void 0 : onClosingWorkspaces();\n };\n if (!canCloseAllWorkspaces) {\n showWorkspacePrompts('closing-all-workspaces', updateWorkspaceStore);\n } else {\n updateWorkspaceStore();\n }\n}\nfunction useWorkspaces() {\n var _useStore = (0,_openmrs_esm_react_utils__WEBPACK_IMPORTED_MODULE_5__.useStore)(workspaceStore), workspaceWindowState = _useStore.workspaceWindowState, openWorkspaces = _useStore.openWorkspaces, prompt = _useStore.prompt, workspaceGroup = _useStore.workspaceGroup;\n var memoisedResults = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return {\n active: openWorkspaces.length > 0,\n prompt: prompt,\n workspaceWindowState: workspaceWindowState,\n workspaces: openWorkspaces,\n workspaceGroup: workspaceGroup\n };\n }, [\n openWorkspaces,\n workspaceWindowState,\n prompt,\n workspaceGroup\n ]);\n return memoisedResults;\n}\n/**\n * Sets the current prompt according to the prompt type.\n * @param promptType Determines the text and behavior of the prompt\n * @param onConfirmation Function to be called after the user confirms to close the workspace\n * @param workspaceTitle Workspace title to be shown in the prompt\n * @returns\n */ function showWorkspacePrompts(promptType) {\n var onConfirmation = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function() {}, workspaceTitle = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : '';\n var store = getWorkspaceStore();\n var prompt;\n switch(promptType){\n case 'closing-workspace':\n {\n prompt = {\n title: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('unsavedChangesTitleText', 'Unsaved changes'),\n body: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('unsavedChangesInOpenedWorkspace', \"You may have unsaved changes in the opened workspace. Do you want to discard these changes?\"),\n onConfirm: function() {\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('discard', 'Discard')\n };\n break;\n }\n case 'closing-all-workspaces':\n {\n var workspacesNotClosed = store.getState().openWorkspaces.filter(function(param) {\n var name = param.name;\n return !canCloseWorkspaceWithoutPrompting(name);\n }).map(function(param, indx) {\n var title = param.title;\n return \"\".concat(indx + 1, \". \").concat(title);\n });\n prompt = {\n title: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('closingAllWorkspacesPromptTitle', 'You have unsaved changes'),\n body: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('closingAllWorkspacesPromptBody', 'There may be unsaved changes in the following workspaces. Do you want to discard changes in the following workspaces? {{workspaceNames}}', {\n workspaceNames: workspacesNotClosed.join(',')\n }),\n onConfirm: function() {\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('closeAllOpenedWorkspaces', 'Discard changes in {{count}} workspaces', {\n count: workspacesNotClosed.length\n })\n };\n break;\n }\n case 'closing-workspace-launching-new-workspace':\n {\n prompt = {\n title: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('unsavedChangesTitleText', 'Unsaved changes'),\n body: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('unsavedChangesInWorkspace', 'There may be unsaved changes in \"{{workspaceName}}\". Please save them before opening another workspace.', {\n workspaceName: workspaceTitle\n }),\n onConfirm: function() {\n store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n prompt: null\n });\n });\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__WEBPACK_IMPORTED_MODULE_4__.getCoreTranslation)('openAnyway', 'Open anyway')\n };\n break;\n }\n default:\n {\n console.error('Workspace system trying to open unknown prompt type \"'.concat(promptType, '\" in function \"showWorkspacePrompts\"'));\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n return;\n }\n }\n store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n prompt: prompt\n });\n });\n}\nfunction getWorkspaceTitle(workspace, additionalProps) {\n var _additionalProps_workspaceTitle;\n return (_additionalProps_workspaceTitle = additionalProps === null || additionalProps === void 0 ? void 0 : additionalProps['workspaceTitle']) !== null && _additionalProps_workspaceTitle !== void 0 ? _additionalProps_workspaceTitle : workspace.title;\n}\nfunction resetWorkspaceStore() {\n getWorkspaceStore().setState(initialState);\n}\n/**\n * The workspace group store is a store that is specific to the workspace group.\n * If the workspace has its own sidebar, the store will be created.\n * This store can be used to store data that is specific to the workspace group.\n * The store will be same for all the workspaces with same group name.\n *\n * For workspaces launched without a group, the store will be undefined.\n *\n * The store will be cleared when all the workspaces with the store's group name are closed.\n */ function getWorkspaceGroupStore(workspaceGroupName) {\n var additionalProps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n if (!workspaceGroupName || workspaceGroupName === 'default') {\n return undefined;\n }\n var store = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_3__.getGlobalStore)(workspaceGroupName, {});\n if (additionalProps) {\n store.setState(function(prev) {\n return _object_spread({}, prev, additionalProps);\n });\n }\n return store;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1zdHlsZWd1aWRlL3NyYy93b3Jrc3BhY2VzL3dvcmtzcGFjZXMudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0NBQWdDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNnQjtBQU1mO0FBRWtCO0FBQ29CO0FBQ1I7QUFDWDtBQXlHcEQ7Ozs7O0NBS0MsR0FDTSxTQUFTUSxrQ0FBa0NDLElBQVk7UUFBRUMsZ0JBQUFBLGlFQUF5QjtJQUN2RixJQUFJQSxlQUFlO1FBQ2pCLE9BQU87SUFDVDtJQUNBLElBQU1DLGlCQUFpQkMsMEJBQTBCSDtJQUNqRCxPQUFPLENBQUNFLGtCQUFrQixDQUFDQTtBQUM3QjtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Q0FlQyxHQUNELFNBQVNFLG9CQUFvQkMsU0FBaUIsRUFBRUMsa0JBQStCO1FBRS9DQztJQUQ5QixJQUFNQSxRQUFRQztJQUNkLElBQU1DLHlCQUF3QkYsa0JBQUFBLE1BQU1HLFFBQVEsZ0JBQWRILHNDQUFBQSxnQkFBa0JJLGNBQWM7SUFDOUQsSUFBTUMsbUJBQW1CSCxrQ0FBQUEsNENBQUFBLHNCQUF1QlQsSUFBSTtJQUNwRCxJQUFJLENBQUNZLG9CQUFvQlAsY0FBY08sa0JBQWtCO1FBQ3ZEO0lBQ0Y7SUFDQSxJQUFNQyxTQUFnREQsbUJBQ2xELFNBQUNFO2VBQWNBLFVBQVVMLHFCQUFxQixLQUFLRztRQUNuRDtlQUFNOztJQUVWRyxtQkFBbUI7UUFDakIsK0pBQStKO1FBQy9KLElBQU1DLHNCQUFzQkMsdUJBQXVCWjtRQUNuRCxJQUFJVyxxQkFBcUI7WUFDdkJBLG9CQUFvQkUsUUFBUSxDQUFDLENBQUMsR0FBRztZQUNqQyxJQUFNQyxjQUFjSCxvQkFBb0JJLFNBQVMsQ0FBQyxZQUFPO1lBQ3pERDtRQUNGO1FBRUEsSUFBSSxRQUFPVixrQ0FBQUEsNENB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ZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLXN0eWxlZ3VpZGUvc3JjL3dvcmtzcGFjZXMvd29ya3NwYWNlcy50cz9jMTVlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBXb3Jrc3BhY2UgKi9cbmltcG9ydCB7IHVzZU1lbW8sIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBTdG9yZUFwaSB9IGZyb20gJ3p1c3RhbmQvdmFuaWxsYSc7XG5pbXBvcnQge1xuICBnZXRXb3Jrc3BhY2VHcm91cFJlZ2lzdHJhdGlvbixcbiAgZ2V0V29ya3NwYWNlUmVnaXN0cmF0aW9uLFxuICB0eXBlIFdvcmtzcGFjZVJlZ2lzdHJhdGlvbixcbn0gZnJvbSAnQG9wZW5tcnMvZXNtLWV4dGVuc2lvbnMnO1xuaW1wb3J0IHsgdHlwZSBXb3Jrc3BhY2VXaW5kb3dTdGF0ZSB9IGZyb20gJ0BvcGVubXJzL2VzbS1nbG9iYWxzJztcbmltcG9ydCB7IG5hdmlnYXRlIH0gZnJvbSAnQG9wZW5tcnMvZXNtLW5hdmlnYXRpb24nO1xuaW1wb3J0IHsgZ2V0R2xvYmFsU3RvcmUsIGNyZWF0ZUdsb2JhbFN0b3JlIH0gZnJvbSAnQG9wZW5tcnMvZXNtLXN0YXRlJztcbmltcG9ydCB7IGdldENvcmVUcmFuc2xhdGlvbiB9IGZyb20gJ0BvcGVubXJzL2VzbS10cmFuc2xhdGlvbnMnO1xuaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tICdAb3Blbm1ycy9lc20tcmVhY3QtdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsb3NlV29ya3NwYWNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNsb3NlIHRoZSB3b3Jrc3BhY2UgaWdub3JpbmcgYWxsIHRoZSBjaGFuZ2VzIHByZXNlbnQgaW4gdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogSWYgaWdub3JlQ2hhbmdlcyBpcyB0cnVlLCB0aGUgdXNlciB3aWxsIG5vdCBiZSBwcm9tcHRlZCB0byBzYXZlIGNoYW5nZXMgYmVmb3JlIGNsb3NpbmdcbiAgICogZXZlbiBpZiB0aGUgYHRlc3RGY25gIHBhc3NlZCB0byBgcHJvbXB0QmVmb3JlQ2xvc2luZ2AgcmV0dXJucyBgdHJ1ZWAuXG4gICAqL1xuICBpZ25vcmVDaGFuZ2VzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHlvdSB3YW50IHRvIHRha2UgYW4gYWN0aW9uIGFmdGVyIHRoZSB3b3Jrc3BhY2UgaXMgY2xvc2VkLCB5b3UgY2FuIHBhc3MgeW91ciBmdW5jdGlvbiBhc1xuICAgKiBgb25Xb3Jrc3BhY2VDbG9zZWAuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb25seSBhZnRlciB0aGUgd29ya3NwYWNlIGlzIGNsb3NlZCwgZ2l2ZW5cbiAgICogdGhhdCB0aGUgdXNlciBtaWdodCBiZSBzaG93biBhIHByb21wdC5cbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgb25Xb3Jrc3BhY2VDbG9zZT86ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgc2hvdWxkIGJlIGNsb3NlZCBhbmQgc3RvcmUgdG8gYmVcbiAgICogY2xlYXJlZCB3aGVuIHRoaXMgd29ya3NwYWNlIGlzIGNsb3NlZC5cbiAgICogRGVmYXVsdHMgdG8gdHJ1ZSBleGNlcHQgd2hlbiBvcGVuaW5nIGEgbmV3IHdvcmtzcGFjZSBvZiB0aGUgc2FtZSBncm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY2xvc2VXb3Jrc3BhY2VHcm91cD86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzIHJlY2VpdmVkIGJ5IGFsbCB3b3Jrc3BhY2VzICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRXb3Jrc3BhY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gY2xvc2UgdGhlIHdvcmtzcGFjZS4gVGhpcyBmdW5jdGlvbiB3aWxsIHByb21wdCB0aGUgdXNlclxuICAgKiBpZiB0aGVyZSBhcmUgYW55IHVuc2F2ZWQgY2hhbmdlcyB0byB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIFlvdSBjYW4gcGFzcyBgb25Xb3Jrc3BhY2VDbG9zZWAgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHdvcmtzcGFjZSBpcyBmaW5hbGx5XG4gICAqIGNsb3NlZCwgZ2l2ZW4gdGhlIHVzZXIgZm9yY2VmdWxseSBjbG9zZXMgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIGNsb3NlV29ya3NwYWNlKGNsb3NlV29ya3NwYWNlT3B0aW9ucz86IENsb3NlV29ya3NwYWNlT3B0aW9ucyk6IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgd2l0aCBhIG5vLWFyZ3MgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgc2hvdWxkIGJlIHByb21wdGVkIGJlZm9yZVxuICAgKiB0aGlzIHdvcmtzcGFjZSBpcyBjbG9zZWQ7IGUuZy4gaWYgdGhlcmUgaXMgdW5zYXZlZCBkYXRhLlxuICAgKi9cbiAgcHJvbXB0QmVmb3JlQ2xvc2luZyh0ZXN0RmNuOiAoKSA9PiBib29sZWFuKTogdm9pZDtcbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBjbG9zZSB0aGUgd29ya3NwYWNlIGFmdGVyIHRoZSBmb3JtIGlzIHNhdmVkLiBUaGlzIGZ1bmN0aW9uXG4gICAqIHdpbGwgZGlyZWN0bHkgY2xvc2UgdGhlIHdvcmtzcGFjZSB3aXRob3V0IGFueSBwcm9tcHRcbiAgICovXG4gIGNsb3NlV29ya3NwYWNlV2l0aFNhdmVkQ2hhbmdlcyhjbG9zZVdvcmtzcGFjZU9wdGlvbnM/OiBDbG9zZVdvcmtzcGFjZU9wdGlvbnMpOiB2b2lkO1xuICAvKipcbiAgICogVXNlIHRoaXMgdG8gc2V0IHRoZSB3b3Jrc3BhY2UgdGl0bGUgaWYgaXQgbmVlZHMgdG8gYmUgc2V0IGR5bmFtaWNhbGx5LlxuICAgKlxuICAgKiBXb3Jrc3BhY2UgdGl0bGVzIGdlbmVyYWxseSBhcmUgc2V0IGluIHRoZSB3b3Jrc3BhY2UgZGVjbGFyYXRpb24gaW4gdGhlIHJvdXRlcy5qc29uIGZpbGUuIFRoZXkgY2FuIGFsc29cbiAgICogYmUgc2V0IGJ5IHRoZSB3b3Jrc3BhY2UgbGF1bmNoZXIgYnkgcGFzc2luZyBgd29ya3NwYWNlVGl0bGVgIGluIHRoZSBgYWRkaXRpb25hbFByb3BzYFxuICAgKiBwYXJhbWV0ZXIgb2YgdGhlIGBsYXVuY2hXb3Jrc3BhY2VgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIHRoZSB3b3Jrc3BhY2VcbiAgICogdGl0bGUgbmVlZHMgdG8gYmUgc2V0IGR5bmFtaWNhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIHRvIHNldC4gSWYgdXNpbmcgdGl0bGVOb2RlLCBzZXQgdGhpcyB0byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZ1xuICAgKiAgICAgICAgd2hpY2ggd2lsbCBpZGVudGlmeSB0aGUgd29ya3NwYWNlIGluIG5vdGlmaWNhdGlvbnMgYW5kIG90aGVyIHBsYWNlcy5cbiAgICogQHBhcmFtIHRpdGxlTm9kZSBBIFJlYWN0IG9iamVjdCB0byBwdXQgaW4gdGhlIHdvcmtzcGFjZSBoZWFkZXIgaW4gcGxhY2Ugb2YgdGhlIHRpdGxlLiBUaGlzXG4gICAqICAgICAgICBpcyB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgY3VzdG9tIGVsZW1lbnRzIGluIHRoZSBoZWFkZXIuIE5vdGUgdGhhdCBjdXN0b20gaGVhZGVyXG4gICAqICAgICAgICBlbGVtZW50cyBjYW4gYWxzbyBiZSBhdHRhY2hlZCB0byB0aGUgd29ya3NwYWNlIGhlYWRlciBleHRlbnNpb24gc2xvdHMuXG4gICAqL1xuICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nLCB0aXRsZU5vZGU/OiBSZWFjdE5vZGUpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZVdpbmRvd1NpemUge1xuICBzaXplOiBXb3Jrc3BhY2VXaW5kb3dTdGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VXaW5kb3dTaXplUHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZVdpbmRvd1NpemVDb250ZXh0IHtcbiAgd2luZG93U2l6ZTogV29ya3NwYWNlV2luZG93U2l6ZTtcbiAgdXBkYXRlV2luZG93U2l6ZT8odmFsdWU6IFdvcmtzcGFjZVdpbmRvd1N0YXRlKTogYW55O1xuICBhY3RpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvbXB0IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICAvKiogRGVmYXVsdHMgdG8gXCJDb25maXJtXCIgKi9cbiAgY29uZmlybVRleHQ/OiBzdHJpbmc7XG4gIG9uQ29uZmlybSgpOiB2b2lkO1xuICAvKiogRGVmYXVsdHMgdG8gXCJDYW5jZWxcIiAqL1xuICBjYW5jZWxUZXh0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZVN0b3JlU3RhdGUge1xuICBjb250ZXh0OiBzdHJpbmcgfCBudWxsO1xuICBvcGVuV29ya3NwYWNlczogQXJyYXk8T3BlbldvcmtzcGFjZT47XG4gIHByb21wdDogUHJvbXB0IHwgbnVsbDtcbiAgd29ya3NwYWNlV2luZG93U3RhdGU6IFdvcmtzcGFjZVdpbmRvd1N0YXRlO1xuICB3b3Jrc3BhY2VHcm91cD86IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWVtYmVyczogQXJyYXk8c3RyaW5nPjtcbiAgICBjbGVhbnVwPygpOiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5Xb3Jrc3BhY2UgZXh0ZW5kcyBXb3Jrc3BhY2VSZWdpc3RyYXRpb24sIERlZmF1bHRXb3Jrc3BhY2VQcm9wcyB7XG4gIGFkZGl0aW9uYWxQcm9wczogb2JqZWN0O1xuICBjdXJyZW50V29ya3NwYWNlR3JvdXA/OiBzdHJpbmc7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHdvcmtzcGFjZVxuICogQHBhcmFtIGlnbm9yZUNoYW5nZXMgSWYgc2V0IHRvIHRydWUsIHRoZSBcInVuc2F2ZWQgY2hhbmdlc1wiIG1vZGFsIHdpbGwgbmV2ZXIgYmUgc2hvd24sIGV2ZW4gaWYgdGhlIGBwcm9tcHRCZWZvcmVDbG9zaW5nYCBmdW5jdGlvbiByZXR1cm5zIHRydWUuIFRoZSB1c2VyIHdpbGwgbm90IGJlIHByb21wdGVkIGJlZm9yZSBjbG9zaW5nLlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgd29ya3NwYWNlIGNhbiBiZSBjbG9zZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5DbG9zZVdvcmtzcGFjZVdpdGhvdXRQcm9tcHRpbmcobmFtZTogc3RyaW5nLCBpZ25vcmVDaGFuZ2VzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgaWYgKGlnbm9yZUNoYW5nZXMpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBwcm9tcHRCZWZvcmVGbiA9IGdldFByb21wdEJlZm9yZUNsb3NpbmdGY24obmFtZSk7XG4gIHJldHVybiAhcHJvbXB0QmVmb3JlRm4gfHwgIXByb21wdEJlZm9yZUZuKCk7XG59XG5cbi8qKlxuICogQ2xvc2VzIGEgd29ya3NwYWNlIGdyb3VwIGFuZCBwZXJmb3JtcyBjbGVhbnVwIG9wZXJhdGlvbnMuXG4gKlxuICogQHBhcmFtIGdyb3VwTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgdG8gY2xvc2VcbiAqIEBwYXJhbSBvbldvcmtzcGFjZUNsb3NldXAgLSBPcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIGNsb3NpbmcgdGhlIHdvcmtzcGFjZSBncm91cFxuICogQHJldHVybnMgdm9pZCwgb3IgZXhpdHMgZWFybHkgaWYgdGhlIGN1cnJlbnQgd29ya3NwYWNlIGdyb3VwIG5hbWUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlkZWQgZ3JvdXAgbmFtZVxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczpcbiAqIC0gVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBncm91cCBuYW1lIG1hdGNoZXMgdGhlIGN1cnJlbnQgd29ya3NwYWNlIGdyb3VwXG4gKiAtIENsb3NlcyBhbGwgd29ya3NwYWNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdyb3VwXG4gKiAtIENsZWFycyB0aGUgd29ya3NwYWNlIGdyb3VwIHN0b3JlIHN0YXRlXG4gKiAtIEV4ZWN1dGVzIGNsZWFudXAgZnVuY3Rpb24gaWYgZGVmaW5lZCBpbiB0aGUgd29ya3NwYWNlIGdyb3VwXG4gKiAtIFVwZGF0ZXMgdGhlIG1haW4gd29ya3NwYWNlIHN0b3JlIHRvIHJlbW92ZSB0aGUgd29ya3NwYWNlIGdyb3VwXG4gKiAtIENhbGxzIHRoZSBvcHRpb25hbCBjbG9zZXVwIGNhbGxiYWNrIGlmIHByb3ZpZGVkXG4gKi9cbmZ1bmN0aW9uIGNsb3NlV29ya3NwYWNlR3JvdXAoZ3JvdXBOYW1lOiBzdHJpbmcsIG9uV29ya3NwYWNlQ2xvc2V1cD86ICgpID0+IHZvaWQpIHtcbiAgY29uc3Qgc3RvcmUgPSBnZXRXb3Jrc3BhY2VTdG9yZSgpO1xuICBjb25zdCBjdXJyZW50V29ya3NwYWNlR3JvdXAgPSBzdG9yZS5nZXRTdGF0ZSgpPy53b3Jrc3BhY2VHcm91cDtcbiAgY29uc3QgY3VycmVudEdyb3VwTmFtZSA9IGN1cnJlbnRXb3Jrc3BhY2VHcm91cD8ubmFtZTtcbiAgaWYgKCFjdXJyZW50R3JvdXBOYW1lIHx8IGdyb3VwTmFtZSAhPT0gY3VycmVudEdyb3VwTmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBmaWx0ZXI6ICh3b3Jrc3BhY2U6IE9wZW5Xb3Jrc3BhY2UpID0+IGJvb2xlYW4gPSBjdXJyZW50R3JvdXBOYW1lXG4gICAgPyAod29ya3NwYWNlKSA9PiB3b3Jrc3BhY2UuY3VycmVudFdvcmtzcGFjZUdyb3VwID09PSBjdXJyZW50R3JvdXBOYW1lXG4gICAgOiAoKSA9PiB0cnVlO1xuXG4gIGNsb3NlQWxsV29ya3NwYWNlcygoKSA9PiB7XG4gICAgLy8gQ2xlYXJpbmcgdGhlIHdvcmtzcGFjZSBncm91cCBhbmQgcmVzcGVjdGl2ZSBzdG9yZSBpZiB0aGUgbmV3IHdvcmtzcGFjZSBpcyBub3QgcGFydCBvZiB0aGUgY3VycmVudCBncm91cCwgd2hpY2ggaXMgaGFuZGxlZCBpbiB0aGUgYGxhdW5jaFdvcmtzcGFjZWAgZnVuY3Rpb24uXG4gICAgY29uc3Qgd29ya3NwYWNlR3JvdXBTdG9yZSA9IGdldFdvcmtzcGFjZUdyb3VwU3RvcmUoZ3JvdXBOYW1lKTtcbiAgICBpZiAod29ya3NwYWNlR3JvdXBTdG9yZSkge1xuICAgICAgd29ya3NwYWNlR3JvdXBTdG9yZS5zZXRTdGF0ZSh7fSwgdHJ1ZSk7XG4gICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHdvcmtzcGFjZUdyb3VwU3RvcmUuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50V29ya3NwYWNlR3JvdXA/LmNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRXb3Jrc3BhY2VHcm91cC5jbGVhbnVwKCk7XG4gICAgfVxuXG4gICAgc3RvcmUuc2V0U3RhdGUoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgd29ya3NwYWNlR3JvdXA6IHVuZGVmaW5lZCxcbiAgICB9KSk7XG5cbiAgICBpZiAodHlwZW9mIG9uV29ya3NwYWNlQ2xvc2V1cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb25Xb3Jrc3BhY2VDbG9zZXVwKCk7XG4gICAgfVxuICB9LCBmaWx0ZXIpO1xufVxuXG5pbnRlcmZhY2UgTGF1bmNoV29ya3NwYWNlR3JvdXBBcmcge1xuICBzdGF0ZTogUmVjb3JkPHN0cmluZyB8IHN5bWJvbCB8IG51bWJlciwgYW55PjtcbiAgb25Xb3Jrc3BhY2VHcm91cExhdW5jaD8oKTogdm9pZDtcbiAgd29ya3NwYWNlR3JvdXBDbGVhbnVwPygpOiB2b2lkO1xuICB3b3Jrc3BhY2VUb0xhdW5jaD86IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYWRkaXRpb25hbFByb3BzPzogUmVjb3JkPHN0cmluZyB8IHN5bWJvbCB8IG51bWJlciwgYW55PjtcbiAgfTtcbn1cblxuLyoqXG4gKiBMYXVuY2hlcyBhIHdvcmtzcGFjZSBncm91cCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQgY29uZmlndXJhdGlvbi5cbiAqIElmIHRoZXJlIGFyZSBhbnkgb3BlbiB3b3Jrc3BhY2VzLCBpdCB3aWxsIGZpcnN0IGNsb3NlIHRoZW0gYmVmb3JlIGxhdW5jaGluZyB0aGUgbmV3IHdvcmtzcGFjZSBncm91cC5cbiAqXG4gKiBAcGFyYW0gZ3JvdXBOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZSBncm91cCB0byBsYXVuY2hcbiAqIEBwYXJhbSBhcmdzIC0gQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGxhdW5jaGluZyB0aGUgd29ya3NwYWNlIGdyb3VwXG4gKiBAcGFyYW0gYXJncy5zdGF0ZSAtIFRoZSBpbml0aWFsIHN0YXRlIGZvciB0aGUgd29ya3NwYWNlIGdyb3VwXG4gKiBAcGFyYW0gYXJncy5vbldvcmtzcGFjZUdyb3VwTGF1bmNoIC0gT3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHdvcmtzcGFjZSBncm91cCBpcyBsYXVuY2hlZFxuICogQHBhcmFtIGFyZ3Mud29ya3NwYWNlR3JvdXBDbGVhbnVwIC0gT3B0aW9uYWwgY2xlYW51cCBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgaXMgY2xvc2VkXG4gKlxuICogQGV4YW1wbGVcbiAqIGxhdW5jaFdvcmtzcGFjZUdyb3VwKFwibXlHcm91cFwiLCB7XG4gKiAgIHN0YXRlOiBpbml0aWFsU3RhdGUsXG4gKiAgIG9uV29ya3NwYWNlR3JvdXBMYXVuY2g6ICgpID0+IGNvbnNvbGUubG9nKFwiV29ya3NwYWNlIGdyb3VwIGxhdW5jaGVkXCIpLFxuICogICB3b3Jrc3BhY2VHcm91cENsZWFudXA6ICgpID0+IGNvbnNvbGUubG9nKFwiQ2xlYW5pbmcgdXAgd29ya3NwYWNlIGdyb3VwXCIpXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhdW5jaFdvcmtzcGFjZUdyb3VwKGdyb3VwTmFtZTogc3RyaW5nLCBhcmdzOiBMYXVuY2hXb3Jrc3BhY2VHcm91cEFyZykge1xuICBjb25zdCB3b3Jrc3BhY2VHcm91cFJlZ2lzdHJhdGlvbiA9IGdldFdvcmtzcGFjZUdyb3VwUmVnaXN0cmF0aW9uKGdyb3VwTmFtZSk7XG4gIGNvbnN0IHsgc3RhdGUsIG9uV29ya3NwYWNlR3JvdXBMYXVuY2gsIHdvcmtzcGFjZUdyb3VwQ2xlYW51cCwgd29ya3NwYWNlVG9MYXVuY2ggfSA9IGFyZ3M7XG4gIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgaWYgKHN0b3JlLmdldFN0YXRlKCkub3BlbldvcmtzcGFjZXMubGVuZ3RoKSB7XG4gICAgY29uc3Qgd29ya3NwYWNlR3JvdXAgPSBzdG9yZS5nZXRTdGF0ZSgpLndvcmtzcGFjZUdyb3VwO1xuICAgIGlmICh3b3Jrc3BhY2VHcm91cCkge1xuICAgICAgY2xvc2VXb3Jrc3BhY2VHcm91cCh3b3Jrc3BhY2VHcm91cD8ubmFtZSwgKCkgPT4ge1xuICAgICAgICBsYXVuY2hXb3Jrc3BhY2VHcm91cChncm91cE5hbWUsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsb3NlQWxsV29ya3NwYWNlcygoKSA9PiB7XG4gICAgICAgIGxhdW5jaFdvcmtzcGFjZUdyb3VwKGdyb3VwTmFtZSwgYXJncyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RvcmUuc2V0U3RhdGUoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgd29ya3NwYWNlR3JvdXA6IHtcbiAgICAgICAgbmFtZTogZ3JvdXBOYW1lLFxuICAgICAgICBtZW1iZXJzOiB3b3Jrc3BhY2VHcm91cFJlZ2lzdHJhdGlvbi5tZW1iZXJzLFxuICAgICAgICBjbGVhbnVwOiB3b3Jrc3BhY2VHcm91cENsZWFudXAsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgICBnZXRXb3Jrc3BhY2VHcm91cFN0b3JlKGdyb3VwTmFtZSwgc3RhdGUpO1xuICAgIG9uV29ya3NwYWNlR3JvdXBMYXVuY2g/LigpO1xuICAgIGlmICh3b3Jrc3BhY2VUb0xhdW5jaCkge1xuICAgICAgbGF1bmNoV29ya3NwYWNlKHdvcmtzcGFjZVRvTGF1bmNoLm5hbWUsIHdvcmtzcGFjZVRvTGF1bmNoLmFkZGl0aW9uYWxQcm9wcyA/PyB7fSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb21wdEJlZm9yZUxhdW5jaGluZ1dvcmtzcGFjZShcbiAgd29ya3NwYWNlOiBPcGVuV29ya3NwYWNlLFxuICBuZXdXb3Jrc3BhY2VEZXRhaWxzOiB7IG5hbWU6IHN0cmluZzsgYWRkaXRpb25hbFByb3BzPzogb2JqZWN0IH0sXG4pIHtcbiAgY29uc3QgeyBuYW1lLCBhZGRpdGlvbmFsUHJvcHMgfSA9IG5ld1dvcmtzcGFjZURldGFpbHM7XG4gIGNvbnN0IG5ld1dvcmtzcGFjZVJlZ2lzdHJhdGlvbiA9IGdldFdvcmtzcGFjZVJlZ2lzdHJhdGlvbihuYW1lKTtcblxuICBjb25zdCBwcm9jZWVkID0gKCkgPT4ge1xuICAgIGNsb3NlV29ya3NwYWNlKHdvcmtzcGFjZS5uYW1lLCB7XG4gICAgICBpZ25vcmVDaGFuZ2VzOiB0cnVlLFxuICAgICAgLy8gQ2FsbGluZyB0aGUgbGF1bmNoV29ya3NwYWNlIGFnYWluLCBzaW5jZSBvbmUgb2YgdGhlIGBpZmAgY2FzZVxuICAgICAgLy8gbWlnaHQgcmVzb2x2ZSwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgYWxsIHRoZSBjYXNlcyBiZWZvcmUgbGF1bmNoaW5nIHRoZSBmb3JtLlxuICAgICAgb25Xb3Jrc3BhY2VDbG9zZTogKCkgPT4gbGF1bmNoV29ya3NwYWNlKG5hbWUsIGFkZGl0aW9uYWxQcm9wcyksXG4gICAgICAvLyBJZiB0aGUgbmV3IHdvcmtzcGFjZSBpcyBvZiB0aGUgc2FtZSBzaWRlYmFyIGdyb3VwLCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2xlYXIgdGhlIHdvcmtzcGFjZSBncm91cCBzdG9yZS5cbiAgICAgIGNsb3NlV29ya3NwYWNlR3JvdXA6IGZhbHNlLFxuICAgIH0pO1xuICB9O1xuXG4gIGlmICghY2FuQ2xvc2VXb3Jrc3BhY2VXaXRob3V0UHJvbXB0aW5nKHdvcmtzcGFjZS5uYW1lKSkge1xuICAgIHNob3dXb3Jrc3BhY2VQcm9tcHRzKCdjbG9zaW5nLXdvcmtzcGFjZS1sYXVuY2hpbmctbmV3LXdvcmtzcGFjZScsIHByb2NlZWQsIHdvcmtzcGFjZS50aXRsZSA/PyB3b3Jrc3BhY2UubmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcHJvY2VlZCgpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBsYXVuY2hlcyBhIHdvcmtzcGFjZSBieSBpdHMgbmFtZS4gVGhlIHdvcmtzcGFjZSBtdXN0IGhhdmUgYmVlbiByZWdpc3RlcmVkLlxuICogV29ya3NwYWNlcyBzaG91bGQgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgYHJvdXRlcy5qc29uYCBmaWxlLlxuICpcbiAqIEZvciB0aGUgd29ya3NwYWNlIHRvIGFwcGVhciwgdGhlcmUgbXVzdCBiZSBlaXRoZXIgYSBgPFdvcmtzcGFjZU92ZXJsYXkgLz5gIG9yXG4gKiBhIGA8V29ya3NwYWNlV2luZG93IC8+YCBjb21wb25lbnQgcmVuZGVyZWQuXG4gKlxuICogVGhlIGJlaGF2aW9yIG9mIHRoaXMgZnVuY3Rpb24gaXMgYXMgZm9sbG93czpcbiAqXG4gKiAtIElmIG5vIHdvcmtzcGFjZXMgYXJlIG9wZW4sIG9yIGlmIG5vIG90aGVyIHdvcmtzcGFjZXMgd2l0aCB0aGUgc2FtZSB0eXBlIGFyZSBvcGVuLFxuICogICBpdCB3aWxsIGJlIG9wZW5lZCBhbmQgZm9jdXNlZC5cbiAqIC0gSWYgYSB3b3Jrc3BhY2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGFscmVhZHkgb3BlbiwgaXQgd2lsbCBiZSBkaXNwbGF5ZWQvZm9jdXNlZCxcbiAqICAgaWYgaXQgd2FzIG5vdCBhbHJlYWR5LlxuICogLSBJZiBhIHdvcmtzcGFjZSBpcyBsYXVuY2hlZCBhbmQgYSB3b3Jrc3BhY2Ugd2hpY2ggY2Fubm90IGJlIGhpZGRlbiBpcyBhbHJlYWR5IG9wZW4sXG4gKiAgYSBjb25maXJtYXRpb24gbW9kYWwgd2lsbCBwb3AgdXAgd2FybmluZyBhYm91dCBjbG9zaW5nIHRoZSBjdXJyZW50bHkgb3BlbiB3b3Jrc3BhY2UuXG4gKiAtIElmIGFub3RoZXIgd29ya3NwYWNlIHdpdGggdGhlIHNhbWUgdHlwZSBpcyBvcGVuLCB0aGUgd29ya3NwYWNlIHdpbGwgYmUgYnJvdWdodCB0b1xuICogICB0aGUgZnJvbnQgYW5kIHRoZW4gYSBjb25maXJtYXRpb24gbW9kYWwgd2lsbCBwb3AgdXAgd2FybmluZyBhYm91dCBjbG9zaW5nIHRoZSBvcGVuZWRcbiAqICAgd29ya3NwYWNlXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24ganVzdCBtYW5pcHVsYXRlcyB0aGUgd29ya3NwYWNlIHN0b3JlLiBUaGUgVUkgbG9naWMgaXMgaGFuZGxlZFxuICogYnkgdGhlIGNvbXBvbmVudHMgdGhhdCBkaXNwbGF5IHdvcmtzcGFjZXMuXG4gKlxuICogQWRkaXRpb25hbCBwcm9wcyBjYW4gYmUgcGFzc2VkIHRvIHRoZSB3b3Jrc3BhY2UgY29tcG9uZW50IGJlaW5nIGxhdW5jaGVkLiBQYXNzaW5nIGFcbiAqIHByb3AgbmFtZWQgYHdvcmtzcGFjZVRpdGxlYCB3aWxsIG92ZXJyaWRlIHRoZSB0aXRsZSBvZiB0aGUgd29ya3NwYWNlLlxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UgdG8gbGF1bmNoXG4gKiBAcGFyYW0gYWRkaXRpb25hbFByb3BzIFByb3BzIHRvIHBhc3MgdG8gdGhlIHdvcmtzcGFjZSBjb21wb25lbnQgYmVpbmcgbGF1bmNoZWQuIFBhc3NpbmdcbiAqICAgICAgICAgIGEgcHJvcCBuYW1lZCBgd29ya3NwYWNlVGl0bGVgIHdpbGwgb3ZlcnJpZGUgdGhlIHRpdGxlIG9mIHRoZSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXVuY2hXb3Jrc3BhY2U8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0V29ya3NwYWNlUHJvcHMgfCBvYmplY3QgPSBEZWZhdWx0V29ya3NwYWNlUHJvcHMgJiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuPihuYW1lOiBzdHJpbmcsIGFkZGl0aW9uYWxQcm9wcz86IE9taXQ8VCwga2V5b2YgRGVmYXVsdFdvcmtzcGFjZVByb3BzPiAmIHsgd29ya3NwYWNlVGl0bGU/OiBzdHJpbmcgfSkge1xuICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGdldFdvcmtzcGFjZVJlZ2lzdHJhdGlvbihuYW1lKTtcbiAgY29uc3QgY3VycmVudFdvcmtzcGFjZUdyb3VwID0gc3RvcmUuZ2V0U3RhdGUoKS53b3Jrc3BhY2VHcm91cDtcblxuICBpZiAoY3VycmVudFdvcmtzcGFjZUdyb3VwICYmICFjdXJyZW50V29ya3NwYWNlR3JvdXAubWVtYmVycz8uaW5jbHVkZXMobmFtZSkpIHtcbiAgICBjbG9zZVdvcmtzcGFjZUdyb3VwKGN1cnJlbnRXb3Jrc3BhY2VHcm91cC5uYW1lLCAoKSA9PiB7XG4gICAgICBsYXVuY2hXb3Jrc3BhY2UobmFtZSwgYWRkaXRpb25hbFByb3BzKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY3VycmVudEdyb3VwTmFtZSA9IHN0b3JlLmdldFN0YXRlKCkud29ya3NwYWNlR3JvdXA/Lm5hbWU7XG4gIGNvbnN0IG5ld1dvcmtzcGFjZTogT3BlbldvcmtzcGFjZSA9IHtcbiAgICAuLi53b3Jrc3BhY2UsXG4gICAgdGl0bGU6IGdldFdvcmtzcGFjZVRpdGxlKHdvcmtzcGFjZSwgYWRkaXRpb25hbFByb3BzKSxcbiAgICBjbG9zZVdvcmtzcGFjZTogKG9wdGlvbnM6IENsb3NlV29ya3NwYWNlT3B0aW9ucyA9IHt9KSA9PiBjbG9zZVdvcmtzcGFjZShuYW1lLCBvcHRpb25zKSxcbiAgICBjbG9zZVdvcmtzcGFjZVdpdGhTYXZlZENoYW5nZXM6IChvcHRpb25zOiBDbG9zZVdvcmtzcGFjZU9wdGlvbnMpID0+XG4gICAgICBjbG9zZVdvcmtzcGFjZShuYW1lLCB7IGlnbm9yZUNoYW5nZXM6IHRydWUsIC4uLm9wdGlvbnMgfSksXG4gICAgcHJvbXB0QmVmb3JlQ2xvc2luZzogKHRlc3RGY24pID0+IHByb21wdEJlZm9yZUNsb3NpbmcobmFtZSwgdGVzdEZjbiksXG4gICAgc2V0VGl0bGU6ICh0aXRsZTogc3RyaW5nLCB0aXRsZU5vZGU6IFJlYWN0Tm9kZSkgPT4ge1xuICAgICAgbmV3V29ya3NwYWNlLnRpdGxlID0gdGl0bGU7XG4gICAgICBuZXdXb3Jrc3BhY2UudGl0bGVOb2RlID0gdGl0bGVOb2RlO1xuICAgICAgc3RvcmUuc2V0U3RhdGUoKHN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wZW5Xb3Jrc3BhY2VzID0gc3RhdGUub3BlbldvcmtzcGFjZXMubWFwKCh3KSA9PiAody5uYW1lID09PSBuYW1lID8gbmV3V29ya3NwYWNlIDogdykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIG9wZW5Xb3Jrc3BhY2VzLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBjdXJyZW50V29ya3NwYWNlR3JvdXA6IGN1cnJlbnRHcm91cE5hbWUsXG4gICAgYWRkaXRpb25hbFByb3BzOiBhZGRpdGlvbmFsUHJvcHMgPz8ge30sXG4gIH07XG5cbiAgaWYgKGN1cnJlbnRHcm91cE5hbWUpIHtcbiAgICBnZXRXb3Jrc3BhY2VHcm91cFN0b3JlKGN1cnJlbnRHcm91cE5hbWUsIGFkZGl0aW9uYWxQcm9wcyk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlU3RvcmVXaXRoTmV3V29ya3NwYWNlKHdvcmtzcGFjZVRvQmVBZGRlZDogT3BlbldvcmtzcGFjZSwgcmVzdE9mVGhlV29ya3NwYWNlcz86IEFycmF5PE9wZW5Xb3Jrc3BhY2U+KSB7XG4gICAgc3RvcmUuc2V0U3RhdGUoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBvcGVuV29ya3NwYWNlcyA9IFt3b3Jrc3BhY2VUb0JlQWRkZWQsIC4uLihyZXN0T2ZUaGVXb3Jrc3BhY2VzID8/IHN0YXRlLm9wZW5Xb3Jrc3BhY2VzKV07XG4gICAgICBsZXQgd29ya3NwYWNlV2luZG93U3RhdGUgPSBnZXRVcGRhdGVkV29ya3NwYWNlV2luZG93U3RhdGUod29ya3NwYWNlVG9CZUFkZGVkKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG9wZW5Xb3Jrc3BhY2VzLFxuICAgICAgICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBvcGVuV29ya3NwYWNlcyA9IHN0b3JlLmdldFN0YXRlKCkub3BlbldvcmtzcGFjZXM7XG4gIGNvbnN0IHdvcmtzcGFjZUluZGV4SW5PcGVuV29ya3NwYWNlcyA9IG9wZW5Xb3Jrc3BhY2VzLmZpbmRJbmRleCgodykgPT4gdy5uYW1lID09PSBuYW1lKTtcbiAgY29uc3QgaXNXb3Jrc3BhY2VBbHJlYWR5T3BlbiA9IHdvcmtzcGFjZUluZGV4SW5PcGVuV29ya3NwYWNlcyA+PSAwO1xuICBjb25zdCBvcGVuZWRXb3Jrc3BhY2VXaXRoU2FtZVR5cGUgPSBvcGVuV29ya3NwYWNlcy5maW5kKCh3KSA9PiB3LnR5cGUgPT0gbmV3V29ya3NwYWNlLnR5cGUpO1xuXG4gIGlmIChvcGVuV29ya3NwYWNlcy5sZW5ndGggPT09IDApIHtcbiAgICB1cGRhdGVTdG9yZVdpdGhOZXdXb3Jrc3BhY2UobmV3V29ya3NwYWNlKTtcbiAgfSBlbHNlIGlmICghb3BlbldvcmtzcGFjZXNbMF0uY2FuSGlkZSAmJiB3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXMgIT09IDApIHtcbiAgICBwcm9tcHRCZWZvcmVMYXVuY2hpbmdXb3Jrc3BhY2Uob3BlbldvcmtzcGFjZXNbMF0sIHtcbiAgICAgIG5hbWUsXG4gICAgICBhZGRpdGlvbmFsUHJvcHMsXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNXb3Jrc3BhY2VBbHJlYWR5T3Blbikge1xuICAgIGNvbnN0IG9wZW5Xb3Jrc3BhY2UgPSBvcGVuV29ya3NwYWNlc1t3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXNdO1xuICAgIC8vIE9ubHkgdXBkYXRlIHRoZSB0aXRsZSBpZiBpdCBoYXNuJ3QgYmVlbiBzZXQgYnkgYHNldFRpdGxlYFxuICAgIGlmIChvcGVuV29ya3NwYWNlLnRpdGxlID09PSBnZXRXb3Jrc3BhY2VUaXRsZShvcGVuV29ya3NwYWNlLCBvcGVuV29ya3NwYWNlLmFkZGl0aW9uYWxQcm9wcykpIHtcbiAgICAgIG9wZW5Xb3Jrc3BhY2UudGl0bGUgPSBnZXRXb3Jrc3BhY2VUaXRsZShuZXdXb3Jrc3BhY2UsIG5ld1dvcmtzcGFjZS5hZGRpdGlvbmFsUHJvcHMpO1xuICAgIH1cbiAgICBvcGVuV29ya3NwYWNlLmFkZGl0aW9uYWxQcm9wcyA9IG5ld1dvcmtzcGFjZS5hZGRpdGlvbmFsUHJvcHM7XG4gICAgY29uc3QgcmVzdE9mVGhlV29ya3NwYWNlcyA9IG9wZW5Xb3Jrc3BhY2VzLmZpbHRlcigodykgPT4gdy5uYW1lICE9IG5hbWUpO1xuICAgIHVwZGF0ZVN0b3JlV2l0aE5ld1dvcmtzcGFjZShvcGVuV29ya3NwYWNlc1t3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXNdLCByZXN0T2ZUaGVXb3Jrc3BhY2VzKTtcbiAgfSBlbHNlIGlmIChvcGVuZWRXb3Jrc3BhY2VXaXRoU2FtZVR5cGUpIHtcbiAgICBjb25zdCByZXN0T2ZUaGVXb3Jrc3BhY2VzID0gc3RvcmUuZ2V0U3RhdGUoKS5vcGVuV29ya3NwYWNlcy5maWx0ZXIoKHcpID0+IHcudHlwZSAhPSBuZXdXb3Jrc3BhY2UudHlwZSk7XG4gICAgdXBkYXRlU3RvcmVXaXRoTmV3V29ya3NwYWNlKG9wZW5lZFdvcmtzcGFjZVdpdGhTYW1lVHlwZSwgcmVzdE9mVGhlV29ya3NwYWNlcyk7XG4gICAgcHJvbXB0QmVmb3JlTGF1bmNoaW5nV29ya3NwYWNlKG9wZW5lZFdvcmtzcGFjZVdpdGhTYW1lVHlwZSwge1xuICAgICAgbmFtZSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wcyxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGVTdG9yZVdpdGhOZXdXb3Jrc3BhY2UobmV3V29ya3NwYWNlKTtcbiAgfVxufVxuXG4vKipcbiAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIGEgbmV3IHBhZ2UgYW5kIGxhdW5jaCBhIHdvcmtzcGFjZSBvbiB0aGF0IHBhZ2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMudGFyZ2V0VXJsOiBUaGUgVVJMIHRvIG5hdmlnYXRlIHRvLiBXaWxsIGJlIHBhc3NlZCB0byBbW25hdmlnYXRlXV0uXG4gKiBAcGFyYW0gb3B0aW9ucy5jb250ZXh0S2V5OiBUaGUgY29udGV4dCBrZXkgdXNlZCBieSB0aGUgdGFyZ2V0IHBhZ2UuXG4gKiBAcGFyYW0gb3B0aW9ucy53b3Jrc3BhY2VOYW1lOiBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlIHRvIGxhdW5jaC5cbiAqIEBwYXJhbSBvcHRpb25zLmFkZGl0aW9uYWxQcm9wczogQWRkaXRpb25hbCBwcm9wcyB0byBwYXNzIHRvIHRoZSB3b3Jrc3BhY2UgY29tcG9uZW50IGJlaW5nIGxhdW5jaGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmF2aWdhdGVBbmRMYXVuY2hXb3Jrc3BhY2Uoe1xuICB0YXJnZXRVcmwsXG4gIGNvbnRleHRLZXksXG4gIHdvcmtzcGFjZU5hbWUsXG4gIGFkZGl0aW9uYWxQcm9wcyxcbn06IHtcbiAgdGFyZ2V0VXJsOiBzdHJpbmc7XG4gIGNvbnRleHRLZXk6IHN0cmluZztcbiAgd29ya3NwYWNlTmFtZTogc3RyaW5nO1xuICBhZGRpdGlvbmFsUHJvcHM/OiBvYmplY3Q7XG59KSB7XG4gIGNoYW5nZVdvcmtzcGFjZUNvbnRleHQoY29udGV4dEtleSk7XG4gIGxhdW5jaFdvcmtzcGFjZSh3b3Jrc3BhY2VOYW1lLCBhZGRpdGlvbmFsUHJvcHMpO1xuICBuYXZpZ2F0ZSh7IHRvOiB0YXJnZXRVcmwgfSk7XG59XG5cbmNvbnN0IHByb21wdEJlZm9yZUNsb3NpbmdGY25zID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9tcHRCZWZvcmVDbG9zaW5nKHdvcmtzcGFjZU5hbWU6IHN0cmluZywgdGVzdEZjbjogKCkgPT4gYm9vbGVhbikge1xuICBwcm9tcHRCZWZvcmVDbG9zaW5nRmNuc1t3b3Jrc3BhY2VOYW1lXSA9IHRlc3RGY247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9tcHRCZWZvcmVDbG9zaW5nRmNuKHdvcmtzcGFjZU5hbWU6IHN0cmluZykge1xuICByZXR1cm4gcHJvbXB0QmVmb3JlQ2xvc2luZ0ZjbnNbd29ya3NwYWNlTmFtZV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxQcm9tcHQoKSB7XG4gIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBzdG9yZS5zZXRTdGF0ZSh7IC4uLnN0YXRlLCBwcm9tcHQ6IG51bGwgfSk7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBDbG9zZVdvcmtzcGFjZU9wdGlvbnMgPSB7XG4gIGlnbm9yZUNoYW5nZXM6IGZhbHNlLFxuICBvbldvcmtzcGFjZUNsb3NlOiAoKSA9PiB7fSxcbiAgY2xvc2VXb3Jrc3BhY2VHcm91cDogdHJ1ZSxcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2xvc2UgYW4gb3BlbmVkIHdvcmtzcGFjZVxuICogQHBhcmFtIG5hbWUgV29ya3NwYWNlIHJlZ2lzdHJhdGlvbiBuYW1lXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIGNsb3NlIHdvcmtzcGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VXb3Jrc3BhY2UobmFtZTogc3RyaW5nLCBvcHRpb25zOiBDbG9zZVdvcmtzcGFjZU9wdGlvbnMgPSB7fSk6IGJvb2xlYW4ge1xuICBvcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG5cbiAgY29uc3QgdXBkYXRlU3RvcmVXaXRoQ2xvc2VkV29ya3NwYWNlID0gKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCB3b3Jrc3BhY2VUb0JlQ2xvc2VkID0gc3RhdGUub3BlbldvcmtzcGFjZXMuZmluZCgodykgPT4gdy5uYW1lID09PSBuYW1lKTtcbiAgICBjb25zdCBuZXdPcGVuV29ya3NwYWNlcyA9IHN0YXRlLm9wZW5Xb3Jrc3BhY2VzLmZpbHRlcigodykgPT4gdy5uYW1lICE9IG5hbWUpO1xuXG4gICAgY29uc3Qgd29ya3NwYWNlR3JvdXBOYW1lID0gc3RvcmUuZ2V0U3RhdGUoKS53b3Jrc3BhY2VHcm91cD8ubmFtZTtcblxuICAgIGlmICh3b3Jrc3BhY2VHcm91cE5hbWUgJiYgb3B0aW9ucy5jbG9zZVdvcmtzcGFjZUdyb3VwKSB7XG4gICAgICBjbG9zZVdvcmtzcGFjZUdyb3VwKHdvcmtzcGFjZUdyb3VwTmFtZSk7XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIGNsb3NlZCB3b3Jrc3BhY2Ugd2lsbCBub3QgcHJvbXB0XG4gICAgcHJvbXB0QmVmb3JlQ2xvc2luZyhuYW1lLCAoKSA9PiBmYWxzZSk7XG4gICAgc3RvcmUuc2V0U3RhdGUoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgcHJvbXB0OiBudWxsLFxuICAgICAgb3BlbldvcmtzcGFjZXM6IG5ld09wZW5Xb3Jrc3BhY2VzLFxuICAgICAgd29ya3NwYWNlV2luZG93U3RhdGU6IGdldFVwZGF0ZWRXb3Jrc3BhY2VXaW5kb3dTdGF0ZShuZXdPcGVuV29ya3NwYWNlcz8uWzBdKSxcbiAgICB9KSk7XG5cbiAgICBvcHRpb25zPy5vbldvcmtzcGFjZUNsb3NlPy4oKTtcbiAgfTtcblxuICBpZiAoIWNhbkNsb3NlV29ya3NwYWNlV2l0aG91dFByb21wdGluZyhuYW1lLCBvcHRpb25zPy5pZ25vcmVDaGFuZ2VzKSkge1xuICAgIGNvbnN0IGN1cnJlbnROYW1lID0gZ2V0V29ya3NwYWNlUmVnaXN0cmF0aW9uKG5hbWUpLnRpdGxlID8/IG5hbWU7XG4gICAgc2hvd1dvcmtzcGFjZVByb21wdHMoJ2Nsb3Npbmctd29ya3NwYWNlJywgdXBkYXRlU3RvcmVXaXRoQ2xvc2VkV29ya3NwYWNlLCBjdXJyZW50TmFtZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZVN0b3JlV2l0aENsb3NlZFdvcmtzcGFjZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHNldCBvZiB3b3Jrc3BhY2VzIGlzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBwYWdlLiBUaGlzIGZ1bmN0aW9uXG4gKiBzaG91bGQgYmUgdXNlZCB3aGVuIHRyYW5zaXRpb25pbmcgdG8gYSBuZXcgcGFnZS4gSWYgdGhlIGN1cnJlbnRcbiAqIHdvcmtzcGFjZSBkYXRhIGlzIGZvciBhIGRpZmZlcmVudCBwYWdlLCB0aGUgd29ya3NwYWNlIHN0YXRlIGlzIGNsZWFyZWQuXG4gKlxuICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHdvcmtzcGFjZSBjb21wb25lbnRzIHdoZW4gdGhleSBtb3VudC5cbiAqIEBpbnRlcm5hbFxuICpcbiAqIEBwYXJhbSBjb250ZXh0S2V5IEFuIGFyYml0cmFyeSBrZXkgdG8gaWRlbnRpZnkgdGhlIGN1cnJlbnQgcGFnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlV29ya3NwYWNlQ29udGV4dChjb250ZXh0S2V5OiBzdHJpbmcgfCBudWxsKSB7XG4gIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBpZiAoc3RhdGUuY29udGV4dCAhPSBjb250ZXh0S2V5KSB7XG4gICAgc3RvcmUuc2V0U3RhdGUoeyBjb250ZXh0OiBjb250ZXh0S2V5LCBvcGVuV29ya3NwYWNlczogW10sIHByb21wdDogbnVsbCB9KTtcbiAgfVxufVxuXG5jb25zdCBpbml0aWFsU3RhdGU6IFdvcmtzcGFjZVN0b3JlU3RhdGUgPSB7XG4gIGNvbnRleHQ6ICcnLFxuICBvcGVuV29ya3NwYWNlczogW10sXG4gIHByb21wdDogbnVsbCxcbiAgd29ya3NwYWNlV2luZG93U3RhdGU6ICdub3JtYWwnLFxuICB3b3Jrc3BhY2VHcm91cDogdW5kZWZpbmVkLFxufTtcblxuZXhwb3J0IGNvbnN0IHdvcmtzcGFjZVN0b3JlID0gY3JlYXRlR2xvYmFsU3RvcmUoJ3dvcmtzcGFjZScsIGluaXRpYWxTdGF0ZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VTdG9yZSgpIHtcbiAgcmV0dXJuIHdvcmtzcGFjZVN0b3JlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlV29ya3NwYWNlV2luZG93U3RhdGUodmFsdWU6IFdvcmtzcGFjZVdpbmRvd1N0YXRlKSB7XG4gIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBzdG9yZS5zZXRTdGF0ZSh7IC4uLnN0YXRlLCB3b3Jrc3BhY2VXaW5kb3dTdGF0ZTogdmFsdWUgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFVwZGF0ZWRXb3Jrc3BhY2VXaW5kb3dTdGF0ZSh3b3Jrc3BhY2VBdFRvcDogT3BlbldvcmtzcGFjZSkge1xuICByZXR1cm4gd29ya3NwYWNlQXRUb3A/LnByZWZlcnJlZFdpbmRvd1NpemUgPz8gJ25vcm1hbCc7XG59XG5leHBvcnQgZnVuY3Rpb24gY2xvc2VBbGxXb3Jrc3BhY2VzKFxuICBvbkNsb3NpbmdXb3Jrc3BhY2VzOiAoKSA9PiB2b2lkID0gKCkgPT4ge30sXG4gIGZpbHRlcjogKHdvcmtzcGFjZTogT3BlbldvcmtzcGFjZSkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWUsXG4pIHtcbiAgY29uc3Qgc3RvcmUgPSBnZXRXb3Jrc3BhY2VTdG9yZSgpO1xuXG4gIGNvbnN0IGNhbkNsb3NlQWxsV29ya3NwYWNlcyA9IHN0b3JlXG4gICAgLmdldFN0YXRlKClcbiAgICAub3BlbldvcmtzcGFjZXMuZmlsdGVyKGZpbHRlcilcbiAgICAuZXZlcnkoKHsgbmFtZSB9KSA9PiB7XG4gICAgICByZXR1cm4gY2FuQ2xvc2VXb3Jrc3BhY2VXaXRob3V0UHJvbXB0aW5nKG5hbWUpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZVdvcmtzcGFjZVN0b3JlID0gKCkgPT4ge1xuICAgIHJlc2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgICBvbkNsb3NpbmdXb3Jrc3BhY2VzPy4oKTtcbiAgfTtcblxuICBpZiAoIWNhbkNsb3NlQWxsV29ya3NwYWNlcykge1xuICAgIHNob3dXb3Jrc3BhY2VQcm9tcHRzKCdjbG9zaW5nLWFsbC13b3Jrc3BhY2VzJywgdXBkYXRlV29ya3NwYWNlU3RvcmUpO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZVdvcmtzcGFjZVN0b3JlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VzSW5mbyB7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgcHJvbXB0OiBQcm9tcHQgfCBudWxsO1xuICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZTogV29ya3NwYWNlV2luZG93U3RhdGU7XG4gIHdvcmtzcGFjZXM6IEFycmF5PE9wZW5Xb3Jrc3BhY2U+O1xuICB3b3Jrc3BhY2VHcm91cD86IFdvcmtzcGFjZVN0b3JlU3RhdGVbJ3dvcmtzcGFjZUdyb3VwJ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VXb3Jrc3BhY2VzKCk6IFdvcmtzcGFjZXNJbmZvIHtcbiAgY29uc3QgeyB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSwgb3BlbldvcmtzcGFjZXMsIHByb21wdCwgd29ya3NwYWNlR3JvdXAgfSA9IHVzZVN0b3JlKHdvcmtzcGFjZVN0b3JlKTtcbiAgY29uc3QgbWVtb2lzZWRSZXN1bHRzOiBXb3Jrc3BhY2VzSW5mbyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhY3RpdmU6IG9wZW5Xb3Jrc3BhY2VzLmxlbmd0aCA+IDAsXG4gICAgICBwcm9tcHQsXG4gICAgICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSxcbiAgICAgIHdvcmtzcGFjZXM6IG9wZW5Xb3Jrc3BhY2VzLFxuICAgICAgd29ya3NwYWNlR3JvdXAsXG4gICAgfTtcbiAgfSwgW29wZW5Xb3Jrc3BhY2VzLCB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSwgcHJvbXB0LCB3b3Jrc3BhY2VHcm91cF0pO1xuICByZXR1cm4gbWVtb2lzZWRSZXN1bHRzO1xufVxuXG50eXBlIFByb21wdFR5cGUgPSAnY2xvc2luZy13b3Jrc3BhY2UnIHwgJ2Nsb3NpbmctYWxsLXdvcmtzcGFjZXMnIHwgJ2Nsb3Npbmctd29ya3NwYWNlLWxhdW5jaGluZy1uZXctd29ya3NwYWNlJztcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHByb21wdCBhY2NvcmRpbmcgdG8gdGhlIHByb21wdCB0eXBlLlxuICogQHBhcmFtIHByb21wdFR5cGUgRGV0ZXJtaW5lcyB0aGUgdGV4dCBhbmQgYmVoYXZpb3Igb2YgdGhlIHByb21wdFxuICogQHBhcmFtIG9uQ29uZmlybWF0aW9uIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgdXNlciBjb25maXJtcyB0byBjbG9zZSB0aGUgd29ya3NwYWNlXG4gKiBAcGFyYW0gd29ya3NwYWNlVGl0bGUgV29ya3NwYWNlIHRpdGxlIHRvIGJlIHNob3duIGluIHRoZSBwcm9tcHRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93V29ya3NwYWNlUHJvbXB0cyhcbiAgcHJvbXB0VHlwZTogUHJvbXB0VHlwZSxcbiAgb25Db25maXJtYXRpb246ICgpID0+IHZvaWQgPSAoKSA9PiB7fSxcbiAgd29ya3NwYWNlVGl0bGU6IHN0cmluZyA9ICcnLFxuKSB7XG4gIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcblxuICBsZXQgcHJvbXB0OiBQcm9tcHQ7XG4gIHN3aXRjaCAocHJvbXB0VHlwZSkge1xuICAgIGNhc2UgJ2Nsb3Npbmctd29ya3NwYWNlJzoge1xuICAgICAgcHJvbXB0ID0ge1xuICAgICAgICB0aXRsZTogZ2V0Q29yZVRyYW5zbGF0aW9uKCd1bnNhdmVkQ2hhbmdlc1RpdGxlVGV4dCcsICdVbnNhdmVkIGNoYW5nZXMnKSxcbiAgICAgICAgYm9keTogZ2V0Q29yZVRyYW5zbGF0aW9uKFxuICAgICAgICAgICd1bnNhdmVkQ2hhbmdlc0luT3BlbmVkV29ya3NwYWNlJyxcbiAgICAgICAgICBgWW91IG1heSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgb3BlbmVkIHdvcmtzcGFjZS4gRG8geW91IHdhbnQgdG8gZGlzY2FyZCB0aGVzZSBjaGFuZ2VzP2AsXG4gICAgICAgICksXG4gICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgIG9uQ29uZmlybWF0aW9uPy4oKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlybVRleHQ6IGdldENvcmVUcmFuc2xhdGlvbignZGlzY2FyZCcsICdEaXNjYXJkJyksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSAnY2xvc2luZy1hbGwtd29ya3NwYWNlcyc6IHtcbiAgICAgIGNvbnN0IHdvcmtzcGFjZXNOb3RDbG9zZWQgPSBzdG9yZVxuICAgICAgICAuZ2V0U3RhdGUoKVxuICAgICAgICAub3BlbldvcmtzcGFjZXMuZmlsdGVyKCh7IG5hbWUgfSkgPT4gIWNhbkNsb3NlV29ya3NwYWNlV2l0aG91dFByb21wdGluZyhuYW1lKSlcbiAgICAgICAgLm1hcCgoeyB0aXRsZSB9LCBpbmR4KSA9PiBgJHtpbmR4ICsgMX0uICR7dGl0bGV9YCk7XG5cbiAgICAgIHByb21wdCA9IHtcbiAgICAgICAgdGl0bGU6IGdldENvcmVUcmFuc2xhdGlvbignY2xvc2luZ0FsbFdvcmtzcGFjZXNQcm9tcHRUaXRsZScsICdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMnKSxcbiAgICAgICAgYm9keTogZ2V0Q29yZVRyYW5zbGF0aW9uKFxuICAgICAgICAgICdjbG9zaW5nQWxsV29ya3NwYWNlc1Byb21wdEJvZHknLFxuICAgICAgICAgICdUaGVyZSBtYXkgYmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgd29ya3NwYWNlcy4gRG8geW91IHdhbnQgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgd29ya3NwYWNlcz8ge3t3b3Jrc3BhY2VOYW1lc319JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3b3Jrc3BhY2VOYW1lczogd29ya3NwYWNlc05vdENsb3NlZC5qb2luKCcsJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XG4gICAgICAgICAgb25Db25maXJtYXRpb24/LigpO1xuICAgICAgICB9LFxuICAgICAgICBjb25maXJtVGV4dDogZ2V0Q29yZVRyYW5zbGF0aW9uKCdjbG9zZUFsbE9wZW5lZFdvcmtzcGFjZXMnLCAnRGlzY2FyZCBjaGFuZ2VzIGluIHt7Y291bnR9fSB3b3Jrc3BhY2VzJywge1xuICAgICAgICAgIGNvdW50OiB3b3Jrc3BhY2VzTm90Q2xvc2VkLmxlbmd0aCxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ2Nsb3Npbmctd29ya3NwYWNlLWxhdW5jaGluZy1uZXctd29ya3NwYWNlJzoge1xuICAgICAgcHJvbXB0ID0ge1xuICAgICAgICB0aXRsZTogZ2V0Q29yZVRyYW5zbGF0aW9uKCd1bnNhdmVkQ2hhbmdlc1RpdGxlVGV4dCcsICdVbnNhdmVkIGNoYW5nZXMnKSxcbiAgICAgICAgYm9keTogZ2V0Q29yZVRyYW5zbGF0aW9uKFxuICAgICAgICAgICd1bnNhdmVkQ2hhbmdlc0luV29ya3NwYWNlJyxcbiAgICAgICAgICAnVGhlcmUgbWF5IGJlIHVuc2F2ZWQgY2hhbmdlcyBpbiBcInt7d29ya3NwYWNlTmFtZX19XCIuIFBsZWFzZSBzYXZlIHRoZW0gYmVmb3JlIG9wZW5pbmcgYW5vdGhlciB3b3Jrc3BhY2UuJyxcbiAgICAgICAgICB7IHdvcmtzcGFjZU5hbWU6IHdvcmtzcGFjZVRpdGxlIH0sXG4gICAgICAgICksXG4gICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgIHN0b3JlLnNldFN0YXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgcHJvbXB0OiBudWxsLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBvbkNvbmZpcm1hdGlvbj8uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpcm1UZXh0OiBnZXRDb3JlVHJhbnNsYXRpb24oJ29wZW5Bbnl3YXknLCAnT3BlbiBhbnl3YXknKSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFdvcmtzcGFjZSBzeXN0ZW0gdHJ5aW5nIHRvIG9wZW4gdW5rbm93biBwcm9tcHQgdHlwZSBcIiR7cHJvbXB0VHlwZX1cIiBpbiBmdW5jdGlvbiBcInNob3dXb3Jrc3BhY2VQcm9tcHRzXCJgLFxuICAgICAgKTtcbiAgICAgIG9uQ29uZmlybWF0aW9uPy4oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgc3RvcmUuc2V0U3RhdGUoKHN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgcHJvbXB0IH0pKTtcbn1cblxuZnVuY3Rpb24gZ2V0V29ya3NwYWNlVGl0bGUod29ya3NwYWNlOiBXb3Jrc3BhY2VSZWdpc3RyYXRpb24sIGFkZGl0aW9uYWxQcm9wcz86IG9iamVjdCkge1xuICByZXR1cm4gYWRkaXRpb25hbFByb3BzPy5bJ3dvcmtzcGFjZVRpdGxlJ10gPz8gd29ya3NwYWNlLnRpdGxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRXb3Jrc3BhY2VTdG9yZSgpIHtcbiAgZ2V0V29ya3NwYWNlU3RvcmUoKS5zZXRTdGF0ZShpbml0aWFsU3RhdGUpO1xufVxuXG4vKipcbiAqIFRoZSB3b3Jrc3BhY2UgZ3JvdXAgc3RvcmUgaXMgYSBzdG9yZSB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSB3b3Jrc3BhY2UgZ3JvdXAuXG4gKiBJZiB0aGUgd29ya3NwYWNlIGhhcyBpdHMgb3duIHNpZGViYXIsIHRoZSBzdG9yZSB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBUaGlzIHN0b3JlIGNhbiBiZSB1c2VkIHRvIHN0b3JlIGRhdGEgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgd29ya3NwYWNlIGdyb3VwLlxuICogVGhlIHN0b3JlIHdpbGwgYmUgc2FtZSBmb3IgYWxsIHRoZSB3b3Jrc3BhY2VzIHdpdGggc2FtZSBncm91cCBuYW1lLlxuICpcbiAqIEZvciB3b3Jrc3BhY2VzIGxhdW5jaGVkIHdpdGhvdXQgYSBncm91cCwgdGhlIHN0b3JlIHdpbGwgYmUgdW5kZWZpbmVkLlxuICpcbiAqIFRoZSBzdG9yZSB3aWxsIGJlIGNsZWFyZWQgd2hlbiBhbGwgdGhlIHdvcmtzcGFjZXMgd2l0aCB0aGUgc3RvcmUncyBncm91cCBuYW1lIGFyZSBjbG9zZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VHcm91cFN0b3JlKFxuICB3b3Jrc3BhY2VHcm91cE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgYWRkaXRpb25hbFByb3BzOiBvYmplY3QgPSB7fSxcbik6IFN0b3JlQXBpPG9iamVjdD4gfCB1bmRlZmluZWQge1xuICBpZiAoIXdvcmtzcGFjZUdyb3VwTmFtZSB8fCB3b3Jrc3BhY2VHcm91cE5hbWUgPT09ICdkZWZhdWx0Jykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RvcmUgPSBnZXRHbG9iYWxTdG9yZTxvYmplY3Q+KHdvcmtzcGFjZUdyb3VwTmFtZSwge30pO1xuICBpZiAoYWRkaXRpb25hbFByb3BzKSB7XG4gICAgc3RvcmUuc2V0U3RhdGUoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgLi4uYWRkaXRpb25hbFByb3BzLFxuICAgIH0pKTtcbiAgfVxuICByZXR1cm4gc3RvcmU7XG59XG4iXSwibmFtZXMiOlsidXNlTWVtbyIsImdldFdvcmtzcGFjZUdyb3VwUmVnaXN0cmF0aW9uIiwiZ2V0V29ya3NwYWNlUmVnaXN0cmF0aW9uIiwibmF2aWdhdGUiLCJnZXRHbG9iYWxTdG9yZSIsImNyZWF0ZUdsb2JhbFN0b3JlIiwiZ2V0Q29yZVRyYW5zbGF0aW9uIiwidXNlU3RvcmUiLCJjYW5DbG9zZVdvcmtzcGFjZVdpdGhvdXRQcm9tcHRpbmciLCJuYW1lIiwiaWdub3JlQ2hhbmdlcyIsInByb21wdEJlZm9yZUZuIiwiZ2V0UHJvbXB0QmVmb3JlQ2xvc2luZ0ZjbiIsImNsb3NlV29ya3NwYWNlR3JvdXAiLCJncm91cE5hbWUiLCJvbldvcmtzcGFjZUNsb3NldXAiLCJzdG9yZSIsImdldFdvcmtzcGFjZVN0b3JlIiwiY3VycmVudFdvcmtzcGFjZUdyb3VwIiwiZ2V0U3RhdGUiLCJ3b3Jrc3BhY2VHcm91cCIsImN1cnJlbnRHcm91cE5hbWUiLCJmaWx0ZXIiLCJ3b3Jrc3BhY2UiLCJjbG9zZUFsbFdvcmtzcGFjZXMiLCJ3b3Jrc3BhY2VHcm91cFN0b3JlIiwiZ2V0V29ya3NwYWNlR3JvdXBTdG9yZSIsInNldFN0YXRlIiwidW5zdWJzY3JpYmUiLCJzdWJzY3JpYmUiLCJjbGVhbnVwIiwicHJldiIsInVuZGVmaW5lZCIsImxhdW5jaFdvcmtzcGFjZUdyb3VwIiwiYXJncyIsIndvcmtzcGFjZUdyb3VwUmVnaXN0cmF0aW9uIiwic3RhdGUiLCJvbldvcmtzcGFjZUdyb3VwTGF1bmNoIiwid29ya3NwYWNlR3JvdXBDbGVhbnVwIiwid29ya3NwYWNlVG9MYXVuY2giLCJvcGVuV29ya3NwYWNlcyIsImxlbmd0aCIsIm1lbWJlcnMiLCJsYXVuY2hXb3Jrc3BhY2UiLCJhZGRpdGlvbmFsUHJvcHMiLCJwcm9tcHRCZWZvcmVMYXVuY2hpbmdXb3Jrc3BhY2UiLCJuZXdXb3Jrc3BhY2VEZXRhaWxzIiwibmV3V29ya3NwYWNlUmVnaXN0cmF0aW9uIiwicHJvY2VlZCIsImNsb3NlV29ya3NwYWNlIiwib25Xb3Jrc3BhY2VDbG9zZSIsInNob3dXb3Jrc3BhY2VQcm9tcHRzIiwidGl0bGUiLCJpbmNsdWRlcyIsIm5ld1dvcmtzcGFjZSIsImdldFdvcmtzcGFjZVRpdGxlIiwib3B0aW9ucyIsImNsb3NlV29ya3NwYWNlV2l0aFNhdmVkQ2hhbmdlcyIsInByb21wdEJlZm9yZUNsb3NpbmciLCJ0ZXN0RmNuIiwic2V0VGl0bGUiLCJ0aXRsZU5vZGUiLCJtYXAiLCJ3IiwidXBkYXRlU3RvcmVXaXRoTmV3V29ya3NwYWNlIiwid29ya3NwYWNlVG9CZUFkZGVkIiwicmVzdE9mVGhlV29ya3NwYWNlcyIsIndvcmtzcGFjZVdpbmRvd1N0YXRlIiwiZ2V0VXBkYXRlZFdvcmtzcGFjZVdpbmRvd1N0YXRlIiwid29ya3NwYWNlSW5kZXhJbk9wZW5Xb3Jrc3BhY2VzIiwiZmluZEluZGV4IiwiaXNXb3Jrc3BhY2VBbHJlYWR5T3BlbiIsIm9wZW5lZFdvcmtzcGFjZVdpdGhTYW1lVHlwZSIsImZpbmQiLCJ0eXBlIiwiY2FuSGlkZSIsIm9wZW5Xb3Jrc3BhY2UiLCJuYXZpZ2F0ZUFuZExhdW5jaFdvcmtzcGFjZSIsInRhcmdldFVybCIsImNvbnRleHRLZXkiLCJ3b3Jrc3BhY2VOYW1lIiwiY2hhbmdlV29ya3NwYWNlQ29udGV4dCIsInRvIiwicHJvbXB0QmVmb3JlQ2xvc2luZ0ZjbnMiLCJjYW5jZWxQcm9tcHQiLCJwcm9tcHQiLCJkZWZhdWx0T3B0aW9ucyIsInVwZGF0ZVN0b3JlV2l0aENsb3NlZFdvcmtzcGFjZSIsIndvcmtzcGFjZVRvQmVDbG9zZWQiLCJuZXdPcGVuV29ya3NwYWNlcyIsIndvcmtzcGFjZUdyb3VwTmFtZSIsImN1cnJlbnROYW1lIiwiY29udGV4dCIsImluaXRpYWxTdGF0ZSIsIndvcmtzcGFjZVN0b3JlIiwidXBkYXRlV29ya3NwYWNlV2luZG93U3RhdGUiLCJ2YWx1ZSIsIndvcmtzcGFjZUF0VG9wIiwicHJlZmVycmVkV2luZG93U2l6ZSIsIm9uQ2xvc2luZ1dvcmtzcGFjZXMiLCJjYW5DbG9zZUFsbFdvcmtzcGFjZXMiLCJldmVyeSIsInVwZGF0ZVdvcmtzcGFjZVN0b3JlIiwicmVzZXRXb3Jrc3BhY2VTdG9yZSIsInVzZVdvcmtzcGFjZXMiLCJtZW1vaXNlZFJlc3VsdHMiLCJhY3RpdmUiLCJ3b3Jrc3BhY2VzIiwicHJvbXB0VHlwZSIsIm9uQ29uZmlybWF0aW9uIiwid29ya3NwYWNlVGl0bGUiLCJib2R5Iiwib25Db25maXJtIiwiY29uZmlybVRleHQiLCJ3b3Jrc3BhY2VzTm90Q2xvc2VkIiwiaW5keCIsIndvcmtzcGFjZU5hbWVzIiwiam9pbiIsImNvdW50IiwiY29uc29sZSIsImVycm9yIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-styleguide/src/workspaces/workspaces.ts\n");
2199
2199
 
2200
2200
  /***/ }),
2201
2201
 
@@ -2215,7 +2215,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2215
2215
  \*************************************************************/
2216
2216
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
2217
2217
 
2218
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ coreTranslations: () => (/* binding */ coreTranslations)\n/* harmony export */ });\n/** Please keep these alphabetized */ const addressFields = {\n address1: 'Address line 1',\n address2: 'Address line 2',\n address3: 'Address line 3',\n address4: 'Address line 4',\n address5: 'Address line 5',\n address6: 'Address line 6',\n city: 'City',\n cityVillage: 'City',\n country: 'Country',\n countyDistrict: 'District',\n district: 'District',\n postalCode: 'Postal code',\n state: 'State',\n stateProvince: 'State'\n};\nconst workspaceTranslations = {\n closeAllOpenedWorkspaces: 'Discard changes in {{count}} workspaces',\n closingAllWorkspacesPromptBody: 'There may be unsaved changes in the following workspaces. Do you want to discard changes in the following workspaces? {{workspaceNames}}',\n closingAllWorkspacesPromptTitle: 'You have unsaved changes',\n discard: 'Discard',\n hide: 'Hide',\n maximize: 'Maximize',\n minimize: 'Minimize',\n openAnyway: 'Open anyway',\n unsavedChangesInOpenedWorkspace: `You may have unsaved changes in the opened workspace. Do you want to discard these changes?`,\n unsavedChangesInWorkspace: 'There may be unsaved changes in \"{{workspaceName}}\". Please save them before opening another workspace.',\n unsavedChangesTitleText: 'Unsaved changes',\n workspaceHeader: 'Workspace header'\n};\nconst coreTranslations = {\n ...addressFields,\n ...workspaceTranslations,\n actions: 'Actions',\n address: 'Address',\n age: 'Age',\n cancel: 'Cancel',\n change: 'Change',\n // Default value for the implementationName config property\n Clinic: 'Clinic',\n close: 'Close',\n confirm: 'Confirm',\n contactAdministratorIfIssuePersists: 'Contact your system administrator if the problem persists.',\n contactDetails: 'Contact details',\n delete: 'Delete',\n edit: 'Edit',\n error: 'Error',\n errorCopy: 'Sorry, there was a problem displaying this information. You can try to reload this page, or contact the site administrator and quote the error code above.',\n female: 'Female',\n loading: 'Loading',\n male: 'Male',\n other: 'Other',\n patientIdentifierSticker: 'Patient identifier sticker',\n patientLists: 'Patient lists',\n print: 'Print',\n printError: 'Print error',\n printErrorExplainer: 'An error occurred in {{errorLocation}}',\n printIdentifierSticker: 'Print identifier sticker',\n printing: 'Printing',\n relationships: 'Relationships',\n resetOverrides: 'Reset overrides',\n save: 'Save',\n scriptLoadingFailed: 'Error: Script failed to load',\n scriptLoadingError: 'Failed to load overridden script from {{url}}. Please check that the bundled script is available at the expected URL. Click the button below to reset all import map overrides.',\n seeMoreLists: 'See {{count}} more lists',\n sex: 'Sex',\n showLess: 'Show less',\n showMore: 'Show more',\n toggleDevTools: 'Toggle dev tools',\n unknown: 'Unknown'\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS10cmFuc2xhdGlvbnMvZGlzdC90cmFuc2xhdGlvbnMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFtQyxHQUFHLE1BQU1BLGdCQUFnQjtJQUN4REMsVUFBVTtJQUNWQyxVQUFVO0lBQ1ZDLFVBQVU7SUFDVkMsVUFBVTtJQUNWQyxVQUFVO0lBQ1ZDLFVBQVU7SUFDVkMsTUFBTTtJQUNOQyxhQUFhO0lBQ2JDLFNBQVM7SUFDVEMsZ0JBQWdCO0lBQ2hCQyxVQUFVO0lBQ1ZDLFlBQVk7SUFDWkMsT0FBTztJQUNQQyxlQUFlO0FBQ25CO0FBQ0EsTUFBTUMsd0JBQXdCO0lBQzFCQywwQkFBMEI7SUFDMUJDLGdDQUFnQztJQUNoQ0MsaUNBQWlDO0lBQ2pDQyxTQUFTO0lBQ1RDLE1BQU07SUFDTkMsVUFBVTtJQUNWQyxVQUFVO0lBQ1ZDLFlBQVk7SUFDWkMsaUNBQWlDLENBQUMsMkZBQTJGLENBQUM7SUFDOUhDLDJCQUEyQjtJQUMzQkMseUJBQXlCO0lBQ3pCQyxpQkFBaUI7QUFDckI7QUFDTyxNQUFNQyxtQkFBbUI7SUFDNUIsR0FBRzVCLGFBQWE7SUFDaEIsR0FBR2UscUJBQXFCO0lBQ3hCYyxTQUFTO0lBQ1RDLFNBQVM7SUFDVEMsS0FBSztJQUNMQyxRQUFRO0lBQ1JDLFFBQVE7SUFDUiwyREFBMkQ7SUFDM0RDLFFBQVE7SUFDUkMsT0FBTztJQUNQQyxTQUFTO0lBQ1RDLHFDQUFxQztJQUNyQ0MsZ0JBQWdCO0lBQ2hCQyxRQUFRO0lBQ1JDLE1BQU07SUFDTkMsT0FBTztJQUNQQyxXQUFXO0lBQ1hDLFFBQVE7SUFDUkMsU0FBUztJQUNUQyxNQUFNO0lBQ05DLE9BQU87SUFDUEMsMEJBQTBCO0lBQzFCQyxjQUFjO0lBQ2RDLE9BQU87SUFDUEMsWUFBWTtJQUNaQyxxQkFBcUI7SUFDckJDLHdCQUF3QjtJQUN4QkMsVUFBVTtJQUNWQyxlQUFlO0lBQ2ZDLGdCQUFnQjtJQUNoQkMsTUFBTTtJQUNOQyxxQkFBcUI7SUFDckJDLG9CQUFvQjtJQUNwQkMsY0FBYztJQUNkQyxLQUFLO0lBQ0xDLFVBQVU7SUFDVkMsVUFBVTtJQUNWQyxnQkFBZ0I7SUFDaEJDLFNBQVM7QUFDYixFQUFFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLXRyYW5zbGF0aW9ucy9kaXN0L3RyYW5zbGF0aW9ucy5qcz9iMjljIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBQbGVhc2Uga2VlcCB0aGVzZSBhbHBoYWJldGl6ZWQgKi8gY29uc3QgYWRkcmVzc0ZpZWxkcyA9IHtcbiAgICBhZGRyZXNzMTogJ0FkZHJlc3MgbGluZSAxJyxcbiAgICBhZGRyZXNzMjogJ0FkZHJlc3MgbGluZSAyJyxcbiAgICBhZGRyZXNzMzogJ0FkZHJlc3MgbGluZSAzJyxcbiAgICBhZGRyZXNzNDogJ0FkZHJlc3MgbGluZSA0JyxcbiAgICBhZGRyZXNzNTogJ0FkZHJlc3MgbGluZSA1JyxcbiAgICBhZGRyZXNzNjogJ0FkZHJlc3MgbGluZSA2JyxcbiAgICBjaXR5OiAnQ2l0eScsXG4gICAgY2l0eVZpbGxhZ2U6ICdDaXR5JyxcbiAgICBjb3VudHJ5OiAnQ291bnRyeScsXG4gICAgY291bnR5RGlzdHJpY3Q6ICdEaXN0cmljdCcsXG4gICAgZGlzdHJpY3Q6ICdEaXN0cmljdCcsXG4gICAgcG9zdGFsQ29kZTogJ1Bvc3RhbCBjb2RlJyxcbiAgICBzdGF0ZTogJ1N0YXRlJyxcbiAgICBzdGF0ZVByb3ZpbmNlOiAnU3RhdGUnXG59O1xuY29uc3Qgd29ya3NwYWNlVHJhbnNsYXRpb25zID0ge1xuICAgIGNsb3NlQWxsT3BlbmVkV29ya3NwYWNlczogJ0Rpc2NhcmQgY2hhbmdlcyBpbiB7e2NvdW50fX0gd29ya3NwYWNlcycsXG4gICAgY2xvc2luZ0FsbFdvcmtzcGFjZXNQcm9tcHRCb2R5OiAnVGhlcmUgbWF5IGJlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIHdvcmtzcGFjZXMuIERvIHlvdSB3YW50IHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIHdvcmtzcGFjZXM/IHt7d29ya3NwYWNlTmFtZXN9fScsXG4gICAgY2xvc2luZ0FsbFdvcmtzcGFjZXNQcm9tcHRUaXRsZTogJ1lvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcycsXG4gICAgZGlzY2FyZDogJ0Rpc2NhcmQnLFxuICAgIGhpZGU6ICdIaWRlJyxcbiAgICBtYXhpbWl6ZTogJ01heGltaXplJyxcbiAgICBtaW5pbWl6ZTogJ01pbmltaXplJyxcbiAgICBvcGVuQW55d2F5OiAnT3BlbiBhbnl3YXknLFxuICAgIHVuc2F2ZWRDaGFuZ2VzSW5PcGVuZWRXb3Jrc3BhY2U6IGBZb3UgbWF5IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBvcGVuZWQgd29ya3NwYWNlLiBEbyB5b3Ugd2FudCB0byBkaXNjYXJkIHRoZXNlIGNoYW5nZXM/YCxcbiAgICB1bnNhdmVkQ2hhbmdlc0luV29ya3NwYWNlOiAnVGhlcmUgbWF5IGJlIHVuc2F2ZWQgY2hhbmdlcyBpbiBcInt7d29ya3NwYWNlTmFtZX19XCIuIFBsZWFzZSBzYXZlIHRoZW0gYmVmb3JlIG9wZW5pbmcgYW5vdGhlciB3b3Jrc3BhY2UuJyxcbiAgICB1bnNhdmVkQ2hhbmdlc1RpdGxlVGV4dDogJ1Vuc2F2ZWQgY2hhbmdlcycsXG4gICAgd29ya3NwYWNlSGVhZGVyOiAnV29ya3NwYWNlIGhlYWRlcidcbn07XG5leHBvcnQgY29uc3QgY29yZVRyYW5zbGF0aW9ucyA9IHtcbiAgICAuLi5hZGRyZXNzRmllbGRzLFxuICAgIC4uLndvcmtzcGFjZVRyYW5zbGF0aW9ucyxcbiAgICBhY3Rpb25zOiAnQWN0aW9ucycsXG4gICAgYWRkcmVzczogJ0FkZHJlc3MnLFxuICAgIGFnZTogJ0FnZScsXG4gICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICBjaGFuZ2U6ICdDaGFuZ2UnLFxuICAgIC8vIERlZmF1bHQgdmFsdWUgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbk5hbWUgY29uZmlnIHByb3BlcnR5XG4gICAgQ2xpbmljOiAnQ2xpbmljJyxcbiAgICBjbG9zZTogJ0Nsb3NlJyxcbiAgICBjb25maXJtOiAnQ29uZmlybScsXG4gICAgY29udGFjdEFkbWluaXN0cmF0b3JJZklzc3VlUGVyc2lzdHM6ICdDb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgaWYgdGhlIHByb2JsZW0gcGVyc2lzdHMuJyxcbiAgICBjb250YWN0RGV0YWlsczogJ0NvbnRhY3QgZGV0YWlscycsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICBlZGl0OiAnRWRpdCcsXG4gICAgZXJyb3I6ICdFcnJvcicsXG4gICAgZXJyb3JDb3B5OiAnU29ycnksIHRoZXJlIHdhcyBhIHByb2JsZW0gZGlzcGxheWluZyB0aGlzIGluZm9ybWF0aW9uLiBZb3UgY2FuIHRyeSB0byByZWxvYWQgdGhpcyBwYWdlLCBvciBjb250YWN0IHRoZSBzaXRlIGFkbWluaXN0cmF0b3IgYW5kIHF1b3RlIHRoZSBlcnJvciBjb2RlIGFib3ZlLicsXG4gICAgZmVtYWxlOiAnRmVtYWxlJyxcbiAgICBsb2FkaW5nOiAnTG9hZGluZycsXG4gICAgbWFsZTogJ01hbGUnLFxuICAgIG90aGVyOiAnT3RoZXInLFxuICAgIHBhdGllbnRJZGVudGlmaWVyU3RpY2tlcjogJ1BhdGllbnQgaWRlbnRpZmllciBzdGlja2VyJyxcbiAgICBwYXRpZW50TGlzdHM6ICdQYXRpZW50IGxpc3RzJyxcbiAgICBwcmludDogJ1ByaW50JyxcbiAgICBwcmludEVycm9yOiAnUHJpbnQgZXJyb3InLFxuICAgIHByaW50RXJyb3JFeHBsYWluZXI6ICdBbiBlcnJvciBvY2N1cnJlZCBpbiB7e2Vycm9yTG9jYXRpb259fScsXG4gICAgcHJpbnRJZGVudGlmaWVyU3RpY2tlcjogJ1ByaW50IGlkZW50aWZpZXIgc3RpY2tlcicsXG4gICAgcHJpbnRpbmc6ICdQcmludGluZycsXG4gICAgcmVsYXRpb25zaGlwczogJ1JlbGF0aW9uc2hpcHMnLFxuICAgIHJlc2V0T3ZlcnJpZGVzOiAnUmVzZXQgb3ZlcnJpZGVzJyxcbiAgICBzYXZlOiAnU2F2ZScsXG4gICAgc2NyaXB0TG9hZGluZ0ZhaWxlZDogJ0Vycm9yOiBTY3JpcHQgZmFpbGVkIHRvIGxvYWQnLFxuICAgIHNjcmlwdExvYWRpbmdFcnJvcjogJ0ZhaWxlZCB0byBsb2FkIG92ZXJyaWRkZW4gc2NyaXB0IGZyb20ge3t1cmx9fS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhlIGJ1bmRsZWQgc2NyaXB0IGlzIGF2YWlsYWJsZSBhdCB0aGUgZXhwZWN0ZWQgVVJMLiBDbGljayB0aGUgYnV0dG9uIGJlbG93IHRvIHJlc2V0IGFsbCBpbXBvcnQgbWFwIG92ZXJyaWRlcy4nLFxuICAgIHNlZU1vcmVMaXN0czogJ1NlZSB7e2NvdW50fX0gbW9yZSBsaXN0cycsXG4gICAgc2V4OiAnU2V4JyxcbiAgICBzaG93TGVzczogJ1Nob3cgbGVzcycsXG4gICAgc2hvd01vcmU6ICdTaG93IG1vcmUnLFxuICAgIHRvZ2dsZURldlRvb2xzOiAnVG9nZ2xlIGRldiB0b29scycsXG4gICAgdW5rbm93bjogJ1Vua25vd24nXG59O1xuIl0sIm5hbWVzIjpbImFkZHJlc3NGaWVsZHMiLCJhZGRyZXNzMSIsImFkZHJlc3MyIiwiYWRkcmVzczMiLCJhZGRyZXNzNCIsImFkZHJlc3M1IiwiYWRkcmVzczYiLCJjaXR5IiwiY2l0eVZpbGxhZ2UiLCJjb3VudHJ5IiwiY291bnR5RGlzdHJpY3QiLCJkaXN0cmljdCIsInBvc3RhbENvZGUiLCJzdGF0ZSIsInN0YXRlUHJvdmluY2UiLCJ3b3Jrc3BhY2VUcmFuc2xhdGlvbnMiLCJjbG9zZUFsbE9wZW5lZFdvcmtzcGFjZXMiLCJjbG9zaW5nQWxsV29ya3NwYWNlc1Byb21wdEJvZHkiLCJjbG9zaW5nQWxsV29ya3NwYWNlc1Byb21wdFRpdGxlIiwiZGlzY2FyZCIsImhpZGUiLCJtYXhpbWl6ZSIsIm1pbmltaXplIiwib3BlbkFueXdheSIsInVuc2F2ZWRDaGFuZ2VzSW5PcGVuZWRXb3Jrc3BhY2UiLCJ1bnNhdmVkQ2hhbmdlc0luV29ya3NwYWNlIiwidW5zYXZlZENoYW5nZXNUaXRsZVRleHQiLCJ3b3Jrc3BhY2VIZWFkZXIiLCJjb3JlVHJhbnNsYXRpb25zIiwiYWN0aW9ucyIsImFkZHJlc3MiLCJhZ2UiLCJjYW5jZWwiLCJjaGFuZ2UiLCJDbGluaWMiLCJjbG9zZSIsImNvbmZpcm0iLCJjb250YWN0QWRtaW5pc3RyYXRvcklmSXNzdWVQZXJzaXN0cyIsImNvbnRhY3REZXRhaWxzIiwiZGVsZXRlIiwiZWRpdCIsImVycm9yIiwiZXJyb3JDb3B5IiwiZmVtYWxlIiwibG9hZGluZyIsIm1hbGUiLCJvdGhlciIsInBhdGllbnRJZGVudGlmaWVyU3RpY2tlciIsInBhdGllbnRMaXN0cyIsInByaW50IiwicHJpbnRFcnJvciIsInByaW50RXJyb3JFeHBsYWluZXIiLCJwcmludElkZW50aWZpZXJTdGlja2VyIiwicHJpbnRpbmciLCJyZWxhdGlvbnNoaXBzIiwicmVzZXRPdmVycmlkZXMiLCJzYXZlIiwic2NyaXB0TG9hZGluZ0ZhaWxlZCIsInNjcmlwdExvYWRpbmdFcnJvciIsInNlZU1vcmVMaXN0cyIsInNleCIsInNob3dMZXNzIiwic2hvd01vcmUiLCJ0b2dnbGVEZXZUb29scyIsInVua25vd24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-translations/dist/translations.js\n");
2218
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ coreTranslations: () => (/* binding */ coreTranslations)\n/* harmony export */ });\n/** Please keep these alphabetized */ const addressFields = {\n address1: 'Address line 1',\n address2: 'Address line 2',\n address3: 'Address line 3',\n address4: 'Address line 4',\n address5: 'Address line 5',\n address6: 'Address line 6',\n city: 'City',\n cityVillage: 'City',\n country: 'Country',\n countyDistrict: 'District',\n district: 'District',\n postalCode: 'Postal code',\n state: 'State',\n stateProvince: 'State'\n};\nconst workspaceTranslations = {\n closeAllOpenedWorkspaces: 'Discard changes in {{count}} workspaces',\n closingAllWorkspacesPromptBody: 'There may be unsaved changes in the following workspaces. Do you want to discard changes in the following workspaces? {{workspaceNames}}',\n closingAllWorkspacesPromptTitle: 'You have unsaved changes',\n discard: 'Discard',\n hide: 'Hide',\n maximize: 'Maximize',\n minimize: 'Minimize',\n openAnyway: 'Open anyway',\n unsavedChangesInOpenedWorkspace: 'You may have unsaved changes in the opened workspace. Do you want to discard these changes?',\n unsavedChangesInWorkspace: 'There may be unsaved changes in \"{{workspaceName}}\". Please save them before opening another workspace.',\n unsavedChangesTitleText: 'Unsaved changes',\n workspaceHeader: 'Workspace header'\n};\nconst coreTranslations = {\n ...addressFields,\n ...workspaceTranslations,\n actions: 'Actions',\n address: 'Address',\n age: 'Age',\n cancel: 'Cancel',\n change: 'Change',\n // Default value for the implementationName config property\n Clinic: 'Clinic',\n close: 'Close',\n confirm: 'Confirm',\n contactAdministratorIfIssuePersists: 'Contact your system administrator if the problem persists.',\n contactDetails: 'Contact details',\n delete: 'Delete',\n edit: 'Edit',\n error: 'Error',\n errorCopy: 'Sorry, there was a problem displaying this information. You can try to reload this page, or contact the site administrator and quote the error code above.',\n female: 'Female',\n loading: 'Loading',\n male: 'Male',\n other: 'Other',\n patientIdentifierSticker: 'Patient identifier sticker',\n patientLists: 'Patient lists',\n print: 'Print',\n printError: 'Print error',\n printErrorExplainer: 'An error occurred in {{errorLocation}}',\n printIdentifierSticker: 'Print identifier sticker',\n printing: 'Printing',\n relationships: 'Relationships',\n resetOverrides: 'Reset overrides',\n save: 'Save',\n scriptLoadingFailed: 'Error: Script failed to load',\n scriptLoadingError: 'Failed to load overridden script from {{url}}. Please check that the bundled script is available at the expected URL. Click the button below to reset all import map overrides.',\n seeMoreLists: 'See {{count}} more lists',\n sex: 'Sex',\n showLess: 'Show less',\n showMore: 'Show more',\n toggleDevTools: 'Toggle dev tools',\n unknown: 'Unknown'\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS10cmFuc2xhdGlvbnMvZGlzdC90cmFuc2xhdGlvbnMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFtQyxHQUFHLE1BQU1BLGdCQUFnQjtJQUN4REMsVUFBVTtJQUNWQyxVQUFVO0lBQ1ZDLFVBQVU7SUFDVkMsVUFBVTtJQUNWQyxVQUFVO0lBQ1ZDLFVBQVU7SUFDVkMsTUFBTTtJQUNOQyxhQUFhO0lBQ2JDLFNBQVM7SUFDVEMsZ0JBQWdCO0lBQ2hCQyxVQUFVO0lBQ1ZDLFlBQVk7SUFDWkMsT0FBTztJQUNQQyxlQUFlO0FBQ25CO0FBQ0EsTUFBTUMsd0JBQXdCO0lBQzFCQywwQkFBMEI7SUFDMUJDLGdDQUFnQztJQUNoQ0MsaUNBQWlDO0lBQ2pDQyxTQUFTO0lBQ1RDLE1BQU07SUFDTkMsVUFBVTtJQUNWQyxVQUFVO0lBQ1ZDLFlBQVk7SUFDWkMsaUNBQWlDO0lBQ2pDQywyQkFBMkI7SUFDM0JDLHlCQUF5QjtJQUN6QkMsaUJBQWlCO0FBQ3JCO0FBQ08sTUFBTUMsbUJBQW1CO0lBQzVCLEdBQUc1QixhQUFhO0lBQ2hCLEdBQUdlLHFCQUFxQjtJQUN4QmMsU0FBUztJQUNUQyxTQUFTO0lBQ1RDLEtBQUs7SUFDTEMsUUFBUTtJQUNSQyxRQUFRO0lBQ1IsMkRBQTJEO0lBQzNEQyxRQUFRO0lBQ1JDLE9BQU87SUFDUEMsU0FBUztJQUNUQyxxQ0FBcUM7SUFDckNDLGdCQUFnQjtJQUNoQkMsUUFBUTtJQUNSQyxNQUFNO0lBQ05DLE9BQU87SUFDUEMsV0FBVztJQUNYQyxRQUFRO0lBQ1JDLFNBQVM7SUFDVEMsTUFBTTtJQUNOQyxPQUFPO0lBQ1BDLDBCQUEwQjtJQUMxQkMsY0FBYztJQUNkQyxPQUFPO0lBQ1BDLFlBQVk7SUFDWkMscUJBQXFCO0lBQ3JCQyx3QkFBd0I7SUFDeEJDLFVBQVU7SUFDVkMsZUFBZTtJQUNmQyxnQkFBZ0I7SUFDaEJDLE1BQU07SUFDTkMscUJBQXFCO0lBQ3JCQyxvQkFBb0I7SUFDcEJDLGNBQWM7SUFDZEMsS0FBSztJQUNMQyxVQUFVO0lBQ1ZDLFVBQVU7SUFDVkMsZ0JBQWdCO0lBQ2hCQyxTQUFTO0FBQ2IsRUFBRSIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS10cmFuc2xhdGlvbnMvZGlzdC90cmFuc2xhdGlvbnMuanM/YjI5YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogUGxlYXNlIGtlZXAgdGhlc2UgYWxwaGFiZXRpemVkICovIGNvbnN0IGFkZHJlc3NGaWVsZHMgPSB7XG4gICAgYWRkcmVzczE6ICdBZGRyZXNzIGxpbmUgMScsXG4gICAgYWRkcmVzczI6ICdBZGRyZXNzIGxpbmUgMicsXG4gICAgYWRkcmVzczM6ICdBZGRyZXNzIGxpbmUgMycsXG4gICAgYWRkcmVzczQ6ICdBZGRyZXNzIGxpbmUgNCcsXG4gICAgYWRkcmVzczU6ICdBZGRyZXNzIGxpbmUgNScsXG4gICAgYWRkcmVzczY6ICdBZGRyZXNzIGxpbmUgNicsXG4gICAgY2l0eTogJ0NpdHknLFxuICAgIGNpdHlWaWxsYWdlOiAnQ2l0eScsXG4gICAgY291bnRyeTogJ0NvdW50cnknLFxuICAgIGNvdW50eURpc3RyaWN0OiAnRGlzdHJpY3QnLFxuICAgIGRpc3RyaWN0OiAnRGlzdHJpY3QnLFxuICAgIHBvc3RhbENvZGU6ICdQb3N0YWwgY29kZScsXG4gICAgc3RhdGU6ICdTdGF0ZScsXG4gICAgc3RhdGVQcm92aW5jZTogJ1N0YXRlJ1xufTtcbmNvbnN0IHdvcmtzcGFjZVRyYW5zbGF0aW9ucyA9IHtcbiAgICBjbG9zZUFsbE9wZW5lZFdvcmtzcGFjZXM6ICdEaXNjYXJkIGNoYW5nZXMgaW4ge3tjb3VudH19IHdvcmtzcGFjZXMnLFxuICAgIGNsb3NpbmdBbGxXb3Jrc3BhY2VzUHJvbXB0Qm9keTogJ1RoZXJlIG1heSBiZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyB3b3Jrc3BhY2VzLiBEbyB5b3Ugd2FudCB0byBkaXNjYXJkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyB3b3Jrc3BhY2VzPyB7e3dvcmtzcGFjZU5hbWVzfX0nLFxuICAgIGNsb3NpbmdBbGxXb3Jrc3BhY2VzUHJvbXB0VGl0bGU6ICdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMnLFxuICAgIGRpc2NhcmQ6ICdEaXNjYXJkJyxcbiAgICBoaWRlOiAnSGlkZScsXG4gICAgbWF4aW1pemU6ICdNYXhpbWl6ZScsXG4gICAgbWluaW1pemU6ICdNaW5pbWl6ZScsXG4gICAgb3BlbkFueXdheTogJ09wZW4gYW55d2F5JyxcbiAgICB1bnNhdmVkQ2hhbmdlc0luT3BlbmVkV29ya3NwYWNlOiAnWW91IG1heSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgb3BlbmVkIHdvcmtzcGFjZS4gRG8geW91IHdhbnQgdG8gZGlzY2FyZCB0aGVzZSBjaGFuZ2VzPycsXG4gICAgdW5zYXZlZENoYW5nZXNJbldvcmtzcGFjZTogJ1RoZXJlIG1heSBiZSB1bnNhdmVkIGNoYW5nZXMgaW4gXCJ7e3dvcmtzcGFjZU5hbWV9fVwiLiBQbGVhc2Ugc2F2ZSB0aGVtIGJlZm9yZSBvcGVuaW5nIGFub3RoZXIgd29ya3NwYWNlLicsXG4gICAgdW5zYXZlZENoYW5nZXNUaXRsZVRleHQ6ICdVbnNhdmVkIGNoYW5nZXMnLFxuICAgIHdvcmtzcGFjZUhlYWRlcjogJ1dvcmtzcGFjZSBoZWFkZXInXG59O1xuZXhwb3J0IGNvbnN0IGNvcmVUcmFuc2xhdGlvbnMgPSB7XG4gICAgLi4uYWRkcmVzc0ZpZWxkcyxcbiAgICAuLi53b3Jrc3BhY2VUcmFuc2xhdGlvbnMsXG4gICAgYWN0aW9uczogJ0FjdGlvbnMnLFxuICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICBhZ2U6ICdBZ2UnLFxuICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgY2hhbmdlOiAnQ2hhbmdlJyxcbiAgICAvLyBEZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wbGVtZW50YXRpb25OYW1lIGNvbmZpZyBwcm9wZXJ0eVxuICAgIENsaW5pYzogJ0NsaW5pYycsXG4gICAgY2xvc2U6ICdDbG9zZScsXG4gICAgY29uZmlybTogJ0NvbmZpcm0nLFxuICAgIGNvbnRhY3RBZG1pbmlzdHJhdG9ySWZJc3N1ZVBlcnNpc3RzOiAnQ29udGFjdCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGlmIHRoZSBwcm9ibGVtIHBlcnNpc3RzLicsXG4gICAgY29udGFjdERldGFpbHM6ICdDb250YWN0IGRldGFpbHMnLFxuICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgZWRpdDogJ0VkaXQnLFxuICAgIGVycm9yOiAnRXJyb3InLFxuICAgIGVycm9yQ29weTogJ1NvcnJ5LCB0aGVyZSB3YXMgYSBwcm9ibGVtIGRpc3BsYXlpbmcgdGhpcyBpbmZvcm1hdGlvbi4gWW91IGNhbiB0cnkgdG8gcmVsb2FkIHRoaXMgcGFnZSwgb3IgY29udGFjdCB0aGUgc2l0ZSBhZG1pbmlzdHJhdG9yIGFuZCBxdW90ZSB0aGUgZXJyb3IgY29kZSBhYm92ZS4nLFxuICAgIGZlbWFsZTogJ0ZlbWFsZScsXG4gICAgbG9hZGluZzogJ0xvYWRpbmcnLFxuICAgIG1hbGU6ICdNYWxlJyxcbiAgICBvdGhlcjogJ090aGVyJyxcbiAgICBwYXRpZW50SWRlbnRpZmllclN0aWNrZXI6ICdQYXRpZW50IGlkZW50aWZpZXIgc3RpY2tlcicsXG4gICAgcGF0aWVudExpc3RzOiAnUGF0aWVudCBsaXN0cycsXG4gICAgcHJpbnQ6ICdQcmludCcsXG4gICAgcHJpbnRFcnJvcjogJ1ByaW50IGVycm9yJyxcbiAgICBwcmludEVycm9yRXhwbGFpbmVyOiAnQW4gZXJyb3Igb2NjdXJyZWQgaW4ge3tlcnJvckxvY2F0aW9ufX0nLFxuICAgIHByaW50SWRlbnRpZmllclN0aWNrZXI6ICdQcmludCBpZGVudGlmaWVyIHN0aWNrZXInLFxuICAgIHByaW50aW5nOiAnUHJpbnRpbmcnLFxuICAgIHJlbGF0aW9uc2hpcHM6ICdSZWxhdGlvbnNoaXBzJyxcbiAgICByZXNldE92ZXJyaWRlczogJ1Jlc2V0IG92ZXJyaWRlcycsXG4gICAgc2F2ZTogJ1NhdmUnLFxuICAgIHNjcmlwdExvYWRpbmdGYWlsZWQ6ICdFcnJvcjogU2NyaXB0IGZhaWxlZCB0byBsb2FkJyxcbiAgICBzY3JpcHRMb2FkaW5nRXJyb3I6ICdGYWlsZWQgdG8gbG9hZCBvdmVycmlkZGVuIHNjcmlwdCBmcm9tIHt7dXJsfX0uIFBsZWFzZSBjaGVjayB0aGF0IHRoZSBidW5kbGVkIHNjcmlwdCBpcyBhdmFpbGFibGUgYXQgdGhlIGV4cGVjdGVkIFVSTC4gQ2xpY2sgdGhlIGJ1dHRvbiBiZWxvdyB0byByZXNldCBhbGwgaW1wb3J0IG1hcCBvdmVycmlkZXMuJyxcbiAgICBzZWVNb3JlTGlzdHM6ICdTZWUge3tjb3VudH19IG1vcmUgbGlzdHMnLFxuICAgIHNleDogJ1NleCcsXG4gICAgc2hvd0xlc3M6ICdTaG93IGxlc3MnLFxuICAgIHNob3dNb3JlOiAnU2hvdyBtb3JlJyxcbiAgICB0b2dnbGVEZXZUb29sczogJ1RvZ2dsZSBkZXYgdG9vbHMnLFxuICAgIHVua25vd246ICdVbmtub3duJ1xufTtcbiJdLCJuYW1lcyI6WyJhZGRyZXNzRmllbGRzIiwiYWRkcmVzczEiLCJhZGRyZXNzMiIsImFkZHJlc3MzIiwiYWRkcmVzczQiLCJhZGRyZXNzNSIsImFkZHJlc3M2IiwiY2l0eSIsImNpdHlWaWxsYWdlIiwiY291bnRyeSIsImNvdW50eURpc3RyaWN0IiwiZGlzdHJpY3QiLCJwb3N0YWxDb2RlIiwic3RhdGUiLCJzdGF0ZVByb3ZpbmNlIiwid29ya3NwYWNlVHJhbnNsYXRpb25zIiwiY2xvc2VBbGxPcGVuZWRXb3Jrc3BhY2VzIiwiY2xvc2luZ0FsbFdvcmtzcGFjZXNQcm9tcHRCb2R5IiwiY2xvc2luZ0FsbFdvcmtzcGFjZXNQcm9tcHRUaXRsZSIsImRpc2NhcmQiLCJoaWRlIiwibWF4aW1pemUiLCJtaW5pbWl6ZSIsIm9wZW5Bbnl3YXkiLCJ1bnNhdmVkQ2hhbmdlc0luT3BlbmVkV29ya3NwYWNlIiwidW5zYXZlZENoYW5nZXNJbldvcmtzcGFjZSIsInVuc2F2ZWRDaGFuZ2VzVGl0bGVUZXh0Iiwid29ya3NwYWNlSGVhZGVyIiwiY29yZVRyYW5zbGF0aW9ucyIsImFjdGlvbnMiLCJhZGRyZXNzIiwiYWdlIiwiY2FuY2VsIiwiY2hhbmdlIiwiQ2xpbmljIiwiY2xvc2UiLCJjb25maXJtIiwiY29udGFjdEFkbWluaXN0cmF0b3JJZklzc3VlUGVyc2lzdHMiLCJjb250YWN0RGV0YWlscyIsImRlbGV0ZSIsImVkaXQiLCJlcnJvciIsImVycm9yQ29weSIsImZlbWFsZSIsImxvYWRpbmciLCJtYWxlIiwib3RoZXIiLCJwYXRpZW50SWRlbnRpZmllclN0aWNrZXIiLCJwYXRpZW50TGlzdHMiLCJwcmludCIsInByaW50RXJyb3IiLCJwcmludEVycm9yRXhwbGFpbmVyIiwicHJpbnRJZGVudGlmaWVyU3RpY2tlciIsInByaW50aW5nIiwicmVsYXRpb25zaGlwcyIsInJlc2V0T3ZlcnJpZGVzIiwic2F2ZSIsInNjcmlwdExvYWRpbmdGYWlsZWQiLCJzY3JpcHRMb2FkaW5nRXJyb3IiLCJzZWVNb3JlTGlzdHMiLCJzZXgiLCJzaG93TGVzcyIsInNob3dNb3JlIiwidG9nZ2xlRGV2VG9vbHMiLCJ1bmtub3duIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-translations/dist/translations.js\n");
2219
2219
 
2220
2220
  /***/ }),
2221
2221
 
@@ -15,7 +15,7 @@
15
15
  \*************************************************************/
16
16
  /***/ ((module) => {
17
17
 
18
- module.exports = /*#__PURE__*/JSON.parse('{"actions":"Actions","address":"Adresse","address1":"Adresse: ligne 1","address2":"Adresse: ligne 2","address3":"Adresse : ligne 3","address4":"Adresse : ligne 4","address5":"Adresse : ligne 5","address6":"Adresse : ligne 6","age":"Âge","cancel":"Annuler","change":"Modifier","city":"Ville","cityVillage":"Ville","Clinic":"Clinique","close":"Fermer","closeAllOpenedWorkspaces":"Annuler les modifications dans les {{count}} espaces de travail ","closingAllWorkspacesPromptBody":"Il y a des modifications non enregistrées dans les espaces de travail suivants. Voulez-vous annuler les modifications ? {{workspaceNames}}","closingAllWorkspacesPromptTitle":"Vous avez des modifications non enregistrées","confirm":"Valider","contactAdministratorIfIssuePersists":"Si le problème persiste, veuillez contacter votre administrateur système.","contactDetails":"Coordonnées","country":"Pays","countyDistrict":"District","delete":"Supprimer","discard":"Annuler","district":"District","edit":"Modifier","error":"Erreur","errorCopy":"Désolé, il y a eu un problème lors de l\'affichage de cette information. Vous pouvez essayer de rafraîchir cette page ou contacter l\'administrateur du site en mentionnant le code d\'erreur ci-dessus.","female":"Femme","hide":"Cacher","loading":"Chargement","male":"Homme","maximize":"Agrandir","minimize":"Réduire","openAnyway":"Ouvrir malgré tout","other":"Autre","patientIdentifierSticker":"Etiquette d\'identification","patientLists":"Listes","postalCode":"Code postal","print":"Imprimer","printError":"Erreur d\'impression","printErrorExplainer":"Une erreur s\'est produite dans {{errorLocation}}","printIdentifierSticker":"Imprimer l\'etiquette d\'identification","printing":"Impression en cours","relationships":"Relations et liens de parenté","resetOverrides":"Réinitialiser les modifications","save":"Enregistrer","scriptLoadingError":"Échec du chargement du script depuis {{url}}. Veuillez vérifier que le script est disponible à l\'URL spécifiée. Cliquez sur le bouton ci-dessous pour réinitialiser l\'import map","scriptLoadingFailed":"Erreur : Le chargement du script a échoué","seeMoreLists":"Voir {{count}} listes de plus","sex":"Sexe","showLess":"Afficher moins","showMore":"Afficher plus","state":"État","stateProvince":"État","toggleDevTools":"Toggle dev tools","unknown":"Inconnu","unsavedChangesInWorkspace":"Il se peut que des modifications non enregistrées aient été apportées à « {{NomEspace}} ». Veuillez les enregistrer avant d\'ouvrir un autre espace de travail.","unsavedChangesTitleText":"Modifications non enregistrés","workspaceHeader":"En-tête de l\'espace de travail"}');
18
+ module.exports = /*#__PURE__*/JSON.parse('{"actions":"Actions","address":"Adresse","address1":"Adresse: ligne 1","address2":"Adresse: ligne 2","address3":"Adresse : ligne 3","address4":"Adresse : ligne 4","address5":"Adresse : ligne 5","address6":"Adresse : ligne 6","age":"Âge","cancel":"Annuler","change":"Modifier","city":"Ville","cityVillage":"Ville","Clinic":"Clinique","close":"Fermer","closeAllOpenedWorkspaces":"Annuler les modifications dans les {{count}} espaces de travail ","closingAllWorkspacesPromptBody":"Il y a des modifications non enregistrées dans les espaces de travail suivants. Voulez-vous annuler les modifications ? {{workspaceNames}}","closingAllWorkspacesPromptTitle":"Vous avez des modifications non enregistrées","confirm":"Valider","contactAdministratorIfIssuePersists":"Si le problème persiste, veuillez contacter votre administrateur système.","contactDetails":"Coordonnées","country":"Pays","countyDistrict":"District","delete":"Supprimer","discard":"Annuler","district":"District","edit":"Modifier","error":"Erreur","errorCopy":"Désolé, il y a eu un problème lors de l\'affichage de cette information. Vous pouvez essayer de rafraîchir cette page ou contacter l\'administrateur du site en mentionnant le code d\'erreur ci-dessus.","female":"Femme","hide":"Cacher","loading":"Chargement","male":"Homme","maximize":"Agrandir","minimize":"Réduire","openAnyway":"Ouvrir malgré tout","other":"Autre","patientIdentifierSticker":"Etiquette d\'identification","patientLists":"Listes","postalCode":"Code postal","print":"Imprimer","printError":"Erreur d\'impression","printErrorExplainer":"Une erreur s\'est produite dans {{errorLocation}}","printIdentifierSticker":"Imprimer l\'etiquette d\'identification","printing":"Impression en cours","relationships":"Relations et liens de parenté","resetOverrides":"Réinitialiser les modifications","save":"Enregistrer","scriptLoadingError":"Échec du chargement du script depuis {{url}}. Veuillez vérifier que le script est disponible à l\'URL spécifiée. Cliquez sur le bouton ci-dessous pour réinitialiser l\'import map","scriptLoadingFailed":"Erreur : Le chargement du script a échoué","seeMoreLists":"Voir {{count}} listes de plus","sex":"Sexe","showLess":"Afficher moins","showMore":"Afficher plus","state":"État","stateProvince":"État","toggleDevTools":"Toggle dev tools","unknown":"Inconnu","unsavedChangesInWorkspace":"Il se peut que des modifications non enregistrées aient été apportées à « {{NomEspace}} ». Veuillez les enregistrer avant d\'ouvrir un autre espace de travail.","unsavedChangesTitleText":"Modifications non enregistrées","workspaceHeader":"En-tête de l\'espace de travail"}');
19
19
 
20
20
  /***/ })
21
21
 
@@ -1 +1 @@
1
- (()=>{"use strict";var e,r,t,o,n={16929:(e,r,t)=>{var o=t(19287),n={featureName:"devtools",moduleName:"@openmrs/esm-devtools-app"};(0,o.getAsyncLifecycle)((function(){return Promise.all([t.e(796),t.e(277),t.e(357),t.e(180)]).then(t.bind(t,26180))}),n),(0,o.getAsyncLifecycle)((function(){return Promise.all([t.e(796),t.e(277),t.e(357),t.e(907)]).then(t.bind(t,81907))}),n)}},a={};function i(e){var r=a[e];if(void 0!==r)return r.exports;var t=a[e]={id:e,exports:{}};return n[e].call(t.exports,t,t.exports,i),t.exports}i.m=n,i.c=a,i.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return i.d(r,{a:r}),r},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(t,o){if(1&o&&(t=this(t)),8&o)return t;if("object"==typeof t&&t){if(4&o&&t.__esModule)return t;if(16&o&&"function"==typeof t.then)return t}var n=Object.create(null);i.r(n);var a={};e=e||[null,r({}),r([]),r(r)];for(var l=2&o&&t;"object"==typeof l&&!~e.indexOf(l);l=r(l))Object.getOwnPropertyNames(l).forEach((e=>a[e]=()=>t[e]));return a.default=()=>t,i.d(n,a),n},i.d=(e,r)=>{for(var t in r)i.o(r,t)&&!i.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((r,t)=>(i.f[t](e,r),r)),[])),i.u=e=>e+".js",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t={},o="@openmrs/esm-devtools-app:",i.l=(e,r,n,a)=>{if(t[e])t[e].push(r);else{var l,u;if(void 0!==n)for(var s=document.getElementsByTagName("script"),f=0;f<s.length;f++){var p=s[f];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")==o+n){l=p;break}}l||(u=!0,(l=document.createElement("script")).charset="utf-8",l.timeout=120,i.nc&&l.setAttribute("nonce",i.nc),l.setAttribute("data-webpack",o+n),l.src=e),t[e]=[r];var c=(r,o)=>{l.onerror=l.onload=null,clearTimeout(d);var n=t[e];if(delete t[e],l.parentNode&&l.parentNode.removeChild(l),n&&n.forEach((e=>e(o))),r)return r(o)},d=setTimeout(c.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=c.bind(null,l.onerror),l.onload=c.bind(null,l.onload),u&&document.head.appendChild(l)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{i.S={};var e={},r={};i.I=(t,o)=>{o||(o=[]);var n=r[t];if(n||(n=r[t]={}),!(o.indexOf(n)>=0)){if(o.push(n),e[t])return e[t];i.o(i.S,t)||(i.S[t]={});var a=i.S[t],l="@openmrs/esm-devtools-app",u=(e,r,t,o)=>{var n=a[e]=a[e]||{},i=n[r];(!i||!i.loaded&&(!o!=!i.eager?o:l>i.from))&&(n[r]={get:t,from:l,eager:!!o})},s=[];return"default"===t&&(u("@carbon/react","1.83.0",(()=>Promise.all([i.e(932),i.e(769),i.e(796),i.e(420)]).then((()=>()=>i(80769))))),u("@openmrs/esm-framework","8.0.1-pre.3331",(()=>Promise.all([i.e(932),i.e(718),i.e(796),i.e(420),i.e(277),i.e(380),i.e(287)]).then((()=>()=>i(27380))))),u("react-dom","18.2.0",(()=>Promise.all([i.e(623),i.e(796)]).then((()=>()=>i(35623))))),u("react-i18next","11.18.6",(()=>Promise.all([i.e(248),i.e(796)]).then((()=>()=>i(36248))))),u("react","18.2.0",(()=>i.e(326).then((()=>()=>i(86326))))),u("rxjs","6.6.7",(()=>i.e(770).then((()=>()=>i(85770)))))),e[t]=s.length?Promise.all(s).then((()=>e[t]=1)):1}}})(),(()=>{var e;i.g.importScripts&&(e=i.g.location+"");var r=i.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var o=t.length-1;o>-1&&(!e||!/^http(s?):/.test(e));)e=t[o--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=e})(),(()=>{var e=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),o=t[1]?r(t[1]):[];return t[2]&&(o.length++,o.push.apply(o,r(t[2]))),t[3]&&(o.push([]),o.push.apply(o,r(t[3]))),o},r=e=>{var t=e[0],o="";if(1===e.length)return"*";if(t+.5){o+=0==t?">=":-1==t?"<":1==t?"^":2==t?"~":t>0?"=":"!=";for(var n=1,a=1;a<e.length;a++)n--,o+="u"==(typeof(l=e[a]))[0]?"-":(n>0?".":"")+(n=2,l);return o}var i=[];for(a=1;a<e.length;a++){var l=e[a];i.push(0===l?"not("+u()+")":1===l?"("+u()+" || "+u()+")":2===l?i.pop()+" "+i.pop():r(l))}return u();function u(){return i.pop().replace(/^\((.+)\)$/,"$1")}},t=(r,o)=>{if(0 in r){o=e(o);var n=r[0],a=n<0;a&&(n=-n-1);for(var i=0,l=1,u=!0;;l++,i++){var s,f,p=l<r.length?(typeof r[l])[0]:"";if(i>=o.length||"o"==(f=(typeof(s=o[i]))[0]))return!u||("u"==p?l>n&&!a:""==p!=a);if("u"==f){if(!u||"u"!=p)return!1}else if(u)if(p==f)if(l<=n){if(s!=r[l])return!1}else{if(a?s>r[l]:s<r[l])return!1;s!=r[l]&&(u=!1)}else if("s"!=p&&"n"!=p){if(a||l<=n)return!1;u=!1,l--}else{if(l<=n||f<p!=a)return!1;u=!1}else"s"!=p&&"n"!=p&&(u=!1,l--)}}var c=[],d=c.pop.bind(c);for(i=1;i<r.length;i++){var h=r[i];c.push(1==h?d()|d():2==h?d()&d():h?t(h,o):!d())}return!!d()},o=(e,r)=>e&&i.o(e,r),n=e=>(e.loaded=1,e.get()),a=(r,t,o)=>{var n=o?(e=>Object.keys(e).reduce(((r,t)=>(e[t].eager&&(r[t]=e[t]),r)),{}))(r[t]):r[t];return Object.keys(n).reduce(((r,t)=>!r||!n[r].loaded&&((r,t)=>{r=e(r),t=e(t);for(var o=0;;){if(o>=r.length)return o<t.length&&"u"!=(typeof t[o])[0];var n=r[o],a=(typeof n)[0];if(o>=t.length)return"u"==a;var i=t[o],l=(typeof i)[0];if(a!=l)return"o"==a&&"n"==l||"s"==l||"u"==a;if("o"!=a&&"u"!=a&&n!=i)return n<i;o++}})(r,t)?t:r),0)},l=e=>function(r,t,o,n,a){var l=i.I(r);return l&&l.then&&!o?l.then(e.bind(e,r,i.S[r],t,!1,n,a)):e(r,i.S[r],t,o,n,a)},u=(e,r,t)=>t?t():((e,r)=>(e=>{throw new Error(e)})("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),s=l(((e,r,t,i,l)=>{if(!o(r,t))return u(e,t,l);var s=a(r,t,i);return n(r[t][s])})),f=l(((e,i,l,s,f,p)=>{if(!o(i,l))return u(e,l,p);var c,d=a(i,l,s);return t(f,d)||(c=((e,t,o,n)=>"Unsatisfied version "+o+" from "+(o&&e[t][o].from)+" of shared singleton module "+t+" (required "+r(n)+")")(i,l,d,f),"undefined"!=typeof console&&console.warn&&console.warn(c)),n(i[l][d])})),p={},c={19287:()=>f("default","@openmrs/esm-framework",!1,[0],(()=>Promise.all([i.e(932),i.e(718),i.e(796),i.e(420),i.e(277),i.e(380)]).then((()=>()=>i(27380))))),20796:()=>f("default","react",!1,[1,18],(()=>i.e(326).then((()=>()=>i(86326))))),11555:()=>f("default","react-i18next",!1,[1,11],(()=>i.e(248).then((()=>()=>i(36248))))),95315:()=>f("default","@carbon/react",!1,[1,1],(()=>Promise.all([i.e(932),i.e(769),i.e(420)]).then((()=>()=>i(80769))))),14357:()=>s("default","@openmrs/esm-framework/src/internal",!1,(()=>Promise.all([i.e(932),i.e(718),i.e(420),i.e(380)]).then((()=>()=>i(27380))))),91420:()=>f("default","react-dom",!1,[1,18],(()=>i.e(623).then((()=>()=>i(35623))))),87633:()=>f("default","rxjs",!1,[1,6],(()=>i.e(770).then((()=>()=>i(85770)))))};[19287].forEach((e=>{i.m[e]=r=>{p[e]=0,delete i.c[e];var t=c[e]();if("function"!=typeof t)throw new Error("Shared module is not available for eager consumption: "+e);r.exports=t()}}));var d={277:[11555,95315],287:[19287],357:[14357],380:[87633],420:[91420],792:[19287],796:[20796]},h={};i.f.consumes=(e,r)=>{i.o(d,e)&&d[e].forEach((e=>{if(i.o(p,e))return r.push(p[e]);if(!h[e]){var t=r=>{p[e]=0,i.m[e]=t=>{delete i.c[e],t.exports=r()}};h[e]=!0;var o=r=>{delete p[e],i.m[e]=t=>{throw delete i.c[e],r}};try{var n=c[e]();n.then?r.push(p[e]=n.then(t).catch(o)):t(n)}catch(e){o(e)}}}))}})(),(()=>{var e={287:0,792:0,929:0};i.f.j=(r,t)=>{var o=i.o(e,r)?e[r]:void 0;if(0!==o)if(o)t.push(o[2]);else if(/^((27|28|35)7|420|796)$/.test(r))e[r]=0;else{var n=new Promise(((t,n)=>o=e[r]=[t,n]));t.push(o[2]=n);var a=i.p+i.u(r),l=new Error;i.l(a,(t=>{if(i.o(e,r)&&(0!==(o=e[r])&&(e[r]=void 0),o)){var n=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;l.message="Loading chunk "+r+" failed.\n("+n+": "+a+")",l.name="ChunkLoadError",l.type=n,l.request=a,o[1](l)}}),"chunk-"+r,r)}};var r=(r,t)=>{var o,n,[a,l,u]=t,s=0;if(a.some((r=>0!==e[r]))){for(o in l)i.o(l,o)&&(i.m[o]=l[o]);u&&u(i)}for(r&&r(t);s<a.length;s++)n=a[s],i.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=globalThis.webpackChunk_openmrs_esm_devtools_app=globalThis.webpackChunk_openmrs_esm_devtools_app||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),i.nc=void 0,i(16929)})();
1
+ (()=>{"use strict";var e,r,t,o,n={16929:(e,r,t)=>{var o=t(19287),n={featureName:"devtools",moduleName:"@openmrs/esm-devtools-app"};(0,o.getAsyncLifecycle)((function(){return Promise.all([t.e(796),t.e(277),t.e(357),t.e(180)]).then(t.bind(t,26180))}),n),(0,o.getAsyncLifecycle)((function(){return Promise.all([t.e(796),t.e(277),t.e(357),t.e(907)]).then(t.bind(t,81907))}),n)}},a={};function i(e){var r=a[e];if(void 0!==r)return r.exports;var t=a[e]={id:e,exports:{}};return n[e].call(t.exports,t,t.exports,i),t.exports}i.m=n,i.c=a,i.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return i.d(r,{a:r}),r},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(t,o){if(1&o&&(t=this(t)),8&o)return t;if("object"==typeof t&&t){if(4&o&&t.__esModule)return t;if(16&o&&"function"==typeof t.then)return t}var n=Object.create(null);i.r(n);var a={};e=e||[null,r({}),r([]),r(r)];for(var l=2&o&&t;"object"==typeof l&&!~e.indexOf(l);l=r(l))Object.getOwnPropertyNames(l).forEach((e=>a[e]=()=>t[e]));return a.default=()=>t,i.d(n,a),n},i.d=(e,r)=>{for(var t in r)i.o(r,t)&&!i.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((r,t)=>(i.f[t](e,r),r)),[])),i.u=e=>e+".js",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t={},o="@openmrs/esm-devtools-app:",i.l=(e,r,n,a)=>{if(t[e])t[e].push(r);else{var l,u;if(void 0!==n)for(var s=document.getElementsByTagName("script"),f=0;f<s.length;f++){var p=s[f];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")==o+n){l=p;break}}l||(u=!0,(l=document.createElement("script")).charset="utf-8",l.timeout=120,i.nc&&l.setAttribute("nonce",i.nc),l.setAttribute("data-webpack",o+n),l.src=e),t[e]=[r];var c=(r,o)=>{l.onerror=l.onload=null,clearTimeout(d);var n=t[e];if(delete t[e],l.parentNode&&l.parentNode.removeChild(l),n&&n.forEach((e=>e(o))),r)return r(o)},d=setTimeout(c.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=c.bind(null,l.onerror),l.onload=c.bind(null,l.onload),u&&document.head.appendChild(l)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{i.S={};var e={},r={};i.I=(t,o)=>{o||(o=[]);var n=r[t];if(n||(n=r[t]={}),!(o.indexOf(n)>=0)){if(o.push(n),e[t])return e[t];i.o(i.S,t)||(i.S[t]={});var a=i.S[t],l="@openmrs/esm-devtools-app",u=(e,r,t,o)=>{var n=a[e]=a[e]||{},i=n[r];(!i||!i.loaded&&(!o!=!i.eager?o:l>i.from))&&(n[r]={get:t,from:l,eager:!!o})},s=[];return"default"===t&&(u("@carbon/react","1.83.0",(()=>Promise.all([i.e(932),i.e(769),i.e(796),i.e(420)]).then((()=>()=>i(80769))))),u("@openmrs/esm-framework","8.0.1-pre.3349",(()=>Promise.all([i.e(932),i.e(718),i.e(796),i.e(420),i.e(277),i.e(380),i.e(287)]).then((()=>()=>i(27380))))),u("react-dom","18.2.0",(()=>Promise.all([i.e(623),i.e(796)]).then((()=>()=>i(35623))))),u("react-i18next","11.18.6",(()=>Promise.all([i.e(248),i.e(796)]).then((()=>()=>i(36248))))),u("react","18.2.0",(()=>i.e(326).then((()=>()=>i(86326))))),u("rxjs","6.6.7",(()=>i.e(770).then((()=>()=>i(85770)))))),e[t]=s.length?Promise.all(s).then((()=>e[t]=1)):1}}})(),(()=>{var e;i.g.importScripts&&(e=i.g.location+"");var r=i.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var o=t.length-1;o>-1&&(!e||!/^http(s?):/.test(e));)e=t[o--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=e})(),(()=>{var e=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),o=t[1]?r(t[1]):[];return t[2]&&(o.length++,o.push.apply(o,r(t[2]))),t[3]&&(o.push([]),o.push.apply(o,r(t[3]))),o},r=e=>{var t=e[0],o="";if(1===e.length)return"*";if(t+.5){o+=0==t?">=":-1==t?"<":1==t?"^":2==t?"~":t>0?"=":"!=";for(var n=1,a=1;a<e.length;a++)n--,o+="u"==(typeof(l=e[a]))[0]?"-":(n>0?".":"")+(n=2,l);return o}var i=[];for(a=1;a<e.length;a++){var l=e[a];i.push(0===l?"not("+u()+")":1===l?"("+u()+" || "+u()+")":2===l?i.pop()+" "+i.pop():r(l))}return u();function u(){return i.pop().replace(/^\((.+)\)$/,"$1")}},t=(r,o)=>{if(0 in r){o=e(o);var n=r[0],a=n<0;a&&(n=-n-1);for(var i=0,l=1,u=!0;;l++,i++){var s,f,p=l<r.length?(typeof r[l])[0]:"";if(i>=o.length||"o"==(f=(typeof(s=o[i]))[0]))return!u||("u"==p?l>n&&!a:""==p!=a);if("u"==f){if(!u||"u"!=p)return!1}else if(u)if(p==f)if(l<=n){if(s!=r[l])return!1}else{if(a?s>r[l]:s<r[l])return!1;s!=r[l]&&(u=!1)}else if("s"!=p&&"n"!=p){if(a||l<=n)return!1;u=!1,l--}else{if(l<=n||f<p!=a)return!1;u=!1}else"s"!=p&&"n"!=p&&(u=!1,l--)}}var c=[],d=c.pop.bind(c);for(i=1;i<r.length;i++){var h=r[i];c.push(1==h?d()|d():2==h?d()&d():h?t(h,o):!d())}return!!d()},o=(e,r)=>e&&i.o(e,r),n=e=>(e.loaded=1,e.get()),a=(r,t,o)=>{var n=o?(e=>Object.keys(e).reduce(((r,t)=>(e[t].eager&&(r[t]=e[t]),r)),{}))(r[t]):r[t];return Object.keys(n).reduce(((r,t)=>!r||!n[r].loaded&&((r,t)=>{r=e(r),t=e(t);for(var o=0;;){if(o>=r.length)return o<t.length&&"u"!=(typeof t[o])[0];var n=r[o],a=(typeof n)[0];if(o>=t.length)return"u"==a;var i=t[o],l=(typeof i)[0];if(a!=l)return"o"==a&&"n"==l||"s"==l||"u"==a;if("o"!=a&&"u"!=a&&n!=i)return n<i;o++}})(r,t)?t:r),0)},l=e=>function(r,t,o,n,a){var l=i.I(r);return l&&l.then&&!o?l.then(e.bind(e,r,i.S[r],t,!1,n,a)):e(r,i.S[r],t,o,n,a)},u=(e,r,t)=>t?t():((e,r)=>(e=>{throw new Error(e)})("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),s=l(((e,r,t,i,l)=>{if(!o(r,t))return u(e,t,l);var s=a(r,t,i);return n(r[t][s])})),f=l(((e,i,l,s,f,p)=>{if(!o(i,l))return u(e,l,p);var c,d=a(i,l,s);return t(f,d)||(c=((e,t,o,n)=>"Unsatisfied version "+o+" from "+(o&&e[t][o].from)+" of shared singleton module "+t+" (required "+r(n)+")")(i,l,d,f),"undefined"!=typeof console&&console.warn&&console.warn(c)),n(i[l][d])})),p={},c={19287:()=>f("default","@openmrs/esm-framework",!1,[0],(()=>Promise.all([i.e(932),i.e(718),i.e(796),i.e(420),i.e(277),i.e(380)]).then((()=>()=>i(27380))))),20796:()=>f("default","react",!1,[1,18],(()=>i.e(326).then((()=>()=>i(86326))))),11555:()=>f("default","react-i18next",!1,[1,11],(()=>i.e(248).then((()=>()=>i(36248))))),95315:()=>f("default","@carbon/react",!1,[1,1],(()=>Promise.all([i.e(932),i.e(769),i.e(420)]).then((()=>()=>i(80769))))),14357:()=>s("default","@openmrs/esm-framework/src/internal",!1,(()=>Promise.all([i.e(932),i.e(718),i.e(420),i.e(380)]).then((()=>()=>i(27380))))),91420:()=>f("default","react-dom",!1,[1,18],(()=>i.e(623).then((()=>()=>i(35623))))),87633:()=>f("default","rxjs",!1,[1,6],(()=>i.e(770).then((()=>()=>i(85770)))))};[19287].forEach((e=>{i.m[e]=r=>{p[e]=0,delete i.c[e];var t=c[e]();if("function"!=typeof t)throw new Error("Shared module is not available for eager consumption: "+e);r.exports=t()}}));var d={277:[11555,95315],287:[19287],357:[14357],380:[87633],420:[91420],792:[19287],796:[20796]},h={};i.f.consumes=(e,r)=>{i.o(d,e)&&d[e].forEach((e=>{if(i.o(p,e))return r.push(p[e]);if(!h[e]){var t=r=>{p[e]=0,i.m[e]=t=>{delete i.c[e],t.exports=r()}};h[e]=!0;var o=r=>{delete p[e],i.m[e]=t=>{throw delete i.c[e],r}};try{var n=c[e]();n.then?r.push(p[e]=n.then(t).catch(o)):t(n)}catch(e){o(e)}}}))}})(),(()=>{var e={287:0,792:0,929:0};i.f.j=(r,t)=>{var o=i.o(e,r)?e[r]:void 0;if(0!==o)if(o)t.push(o[2]);else if(/^((27|28|35)7|420|796)$/.test(r))e[r]=0;else{var n=new Promise(((t,n)=>o=e[r]=[t,n]));t.push(o[2]=n);var a=i.p+i.u(r),l=new Error;i.l(a,(t=>{if(i.o(e,r)&&(0!==(o=e[r])&&(e[r]=void 0),o)){var n=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;l.message="Loading chunk "+r+" failed.\n("+n+": "+a+")",l.name="ChunkLoadError",l.type=n,l.request=a,o[1](l)}}),"chunk-"+r,r)}};var r=(r,t)=>{var o,n,[a,l,u]=t,s=0;if(a.some((r=>0!==e[r]))){for(o in l)i.o(l,o)&&(i.m[o]=l[o]);u&&u(i)}for(r&&r(t);s<a.length;s++)n=a[s],i.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=globalThis.webpackChunk_openmrs_esm_devtools_app=globalThis.webpackChunk_openmrs_esm_devtools_app||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),i.nc=void 0,i(16929)})();