@sapui5/sap.fe.core 1.141.2 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +78 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +91 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +91 -8
  7. package/src/sap/fe/core/AppStateHandler.js +7 -7
  8. package/src/sap/fe/core/AppStateHandler.ts +9 -8
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -11
  14. package/src/sap/fe/core/ExtensionAPI.ts +3 -16
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +12 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +16 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -3
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +5 -2
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -44
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +92 -59
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -48
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +87 -50
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +10 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +4 -4
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +3 -6
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +49 -21
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +64 -24
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +6 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +5 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  71. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +21 -15
  72. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +18 -15
  73. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
  74. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
  75. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  76. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  77. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +3 -2
  78. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +2 -1
  79. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  80. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  81. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  82. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  83. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  84. package/src/sap/fe/core/converters/MetaModelConverter.ts +1 -1
  85. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  86. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  87. package/src/sap/fe/core/converters/common/AnnotationConverter.js +118 -39
  88. package/src/sap/fe/core/converters/controls/Common/Action.js +58 -21
  89. package/src/sap/fe/core/converters/controls/Common/Action.ts +72 -22
  90. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  91. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  92. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  93. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  94. package/src/sap/fe/core/converters/controls/Common/Table.js +87 -22
  95. package/src/sap/fe/core/converters/controls/Common/Table.ts +112 -21
  96. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  97. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  98. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  99. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +174 -79
  100. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  101. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  102. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  103. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  104. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  105. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  106. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  107. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  108. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  109. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  110. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +10 -5
  111. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +13 -1
  112. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  113. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  114. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  115. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  116. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  117. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  118. package/src/sap/fe/core/flexibility/AppComponent.flexibility.js +55 -0
  119. package/src/sap/fe/core/flexibility/AppComponent.flexibility.ts +65 -0
  120. package/src/sap/fe/core/flexibility/XMLTools.js +71 -0
  121. package/src/sap/fe/core/flexibility/XMLTools.ts +61 -0
  122. package/src/sap/fe/core/fpm/manifest.json +2 -2
  123. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  124. package/src/sap/fe/core/helpers/AppStartupHelper.ts +92 -32
  125. package/src/sap/fe/core/helpers/DeleteHelper.js +13 -13
  126. package/src/sap/fe/core/helpers/DeleteHelper.ts +17 -15
  127. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  128. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  129. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  130. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  131. package/src/sap/fe/core/helpers/ModelHelper.js +47 -11
  132. package/src/sap/fe/core/helpers/ModelHelper.ts +62 -15
  133. package/src/sap/fe/core/helpers/PasteHelper.js +6 -2
  134. package/src/sap/fe/core/helpers/PasteHelper.ts +5 -7
  135. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  136. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  137. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  138. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  139. package/src/sap/fe/core/library.js +33 -3
  140. package/src/sap/fe/core/library.ts +31 -1
  141. package/src/sap/fe/core/messagebundle.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_ar.properties +8 -1
  143. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  144. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  146. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  148. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  149. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  152. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  153. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -1
  154. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  159. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  167. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_no.properties +9 -2
  175. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  184. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  185. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  186. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  187. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  188. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  189. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  190. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  191. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  192. package/src/sap/fe/core/rootView/Fcl.controller.ts +22 -5
  193. package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
  194. package/src/sap/fe/core/rootView/NavContainer.controller.ts +2 -1
  195. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  196. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  197. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
  198. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +9 -9
  199. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  200. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  201. package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -4
  202. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -6
  203. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  204. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  205. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +57 -5
  206. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +69 -10
  207. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  208. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  209. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  210. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  211. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  212. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  213. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  214. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  215. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  216. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  217. package/ui5.yaml +2 -0
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/m/Button", "sap/m/CustomListItem", "sap/m/Dialog", "sap/m/Label", "sap/m/List", "sap/m/Text", "sap/m/VBox", "sap/ui/base/ManagedObject", "sap/ui/core/CustomData", "sap/ui/core/library", "../../CommonUtils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs", "sap/fe/base/jsx-runtime/Fragment"], function (ClassSupport, ResourceModelHelper, StableIdHelper, Button, CustomListItem, Dialog, Label, List, Text, VBox, ManagedObject, CustomData, library, CommonUtils, _jsx, _jsxs, _Fragment) {
5
+ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/m/Button", "sap/m/CustomListItem", "sap/m/Dialog", "sap/m/Label", "sap/m/List", "sap/m/Text", "sap/m/VBox", "sap/ui/base/ManagedObject", "sap/ui/core/CustomData", "sap/ui/core/library", "sap/ui/performance/trace/FESRHelper", "../../CommonUtils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs", "sap/fe/base/jsx-runtime/Fragment"], function (ClassSupport, ResourceModelHelper, StableIdHelper, Button, CustomListItem, Dialog, Label, List, Text, VBox, ManagedObject, CustomData, library, FESRHelper, CommonUtils, _jsx, _jsxs, _Fragment) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
@@ -124,11 +124,13 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHel
124
124
  * @returns A button
125
125
  */;
126
126
  _proto.getConfirmButton = function getConfirmButton() {
127
- return _jsx(Button, {
127
+ const button = _jsx(Button, {
128
128
  text: this.dataLossResourceModel.getText("C_COMMON_DIALOG_OK"),
129
129
  type: "Emphasized",
130
130
  press: () => this.handleDataLossOk()
131
131
  });
132
+ FESRHelper.setSemanticStepname(button, "press", "fe4:draftLoss:Ok");
133
+ return button;
132
134
  }
133
135
 
134
136
  /**
@@ -136,10 +138,12 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHel
136
138
  * @returns A button
137
139
  */;
138
140
  _proto.getCancelButton = function getCancelButton() {
139
- return _jsx(Button, {
141
+ const button = _jsx(Button, {
140
142
  text: this.isHiddenDraft ? this.dataLossResourceModel.getText("C_COMMON_SAPFE_CLOSE") : this.dataLossResourceModel.getText("C_COMMON_DIALOG_CANCEL"),
141
143
  press: () => this.handleDataLossCancel()
142
144
  });
145
+ FESRHelper.setSemanticStepname(button, "press", "fe4:draftLoss:Cancel");
146
+ return button;
143
147
  }
144
148
 
145
149
  /**
@@ -224,6 +228,7 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHel
224
228
  state: ValueState.Warning,
225
229
  type: "Message",
226
230
  contentWidth: "22rem",
231
+ escapeHandler: () => this.close(),
227
232
  ref: this.dataLossDialog,
228
233
  children: {
229
234
  content: _jsxs(_Fragment, {
@@ -261,4 +266,4 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHel
261
266
  _exports = DraftDataLossDialog;
262
267
  return _exports;
263
268
  }, false);
264
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcmFmdERhdGFMb3NzRGlhbG9nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjMyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFuYWdlZE9iamVjdCIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsInNoYWxsRm9yY2VEcmFmdFNhdmVPckRpc2NhcmQiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib3BlbiIsImNvbnRyb2xsZXIiLCJmb2N1c09uQ2FuY2VsIiwidmlldyIsImdldFZpZXciLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImlzSGlkZGVuRHJhZnQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsInZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc1Jvb3RDb250ZXh0TmV3IiwiZWRpdEZsb3ciLCJkYXRhTG9zc1Jlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiY3JlYXRlQ29udGVudCIsImRhdGFMb3NzQ29uZmlybSIsImhhbmRsZURhdGFMb3NzT2siLCJvcHRpb25zTGlzdCIsImN1cnJlbnQiLCJhZGRFdmVudERlbGVnYXRlIiwib25rZXl1cCIsImUiLCJrZXkiLCJhZGREZXBlbmRlbnQiLCJkYXRhTG9zc0RpYWxvZyIsInNlbGVjdEFuZEZvY3VzRmlyc3RFbnRyeSIsIlByb21pc2UiLCJyZXNvbHZlIiwicHJvbWlzZVJlc29sdmUiLCJjbG9zZSIsImRlc3Ryb3kiLCJnZXRTZWxlY3RlZEtleSIsImhhbmRsZURhdGFMb3NzQ2FuY2VsIiwiY2FuY2VsQnV0dG9uIiwiZ2V0SXRlbXMiLCJzZXRTZWxlY3RlZEl0ZW0iLCJmb2N1cyIsImZpcnN0TGlzdEl0ZW1PcHRpb24iLCJnZXRTZWxlY3RlZEl0ZW0iLCJkYXRhIiwiZ2V0Q29uZmlybUJ1dHRvbiIsIl9qc3giLCJCdXR0b24iLCJ0ZXh0IiwiZ2V0VGV4dCIsInR5cGUiLCJwcmVzcyIsImdldENhbmNlbEJ1dHRvbiIsImlzU2F2ZSIsImNyZWF0ZU9yU2F2ZVRleHQiLCJjcmVhdGVPclNhdmVMYWJlbCIsIml0ZW1zIiwicHVzaCIsIkN1c3RvbUxpc3RJdGVtIiwiY3VzdG9tRGF0YSIsIkN1c3RvbURhdGEiLCJ2YWx1ZSIsImNoaWxkcmVuIiwiX2pzeHMiLCJWQm94IiwiY2xhc3MiLCJMYWJlbCIsImRlc2lnbiIsIlRleHQiLCJoYXNBY3RpdmVFbnRpdHkiLCJnZXRPYmplY3QiLCJIYXNBY3RpdmVFbnRpdHkiLCJkZXNjcmlwdGlvbiIsIkRpYWxvZyIsImlkIiwiZ2VuZXJhdGUiLCJnZXRJZCIsInRpdGxlIiwic3RhdGUiLCJWYWx1ZVN0YXRlIiwiV2FybmluZyIsImNvbnRlbnRXaWR0aCIsInJlZiIsImNvbnRlbnQiLCJfRnJhZ21lbnQiLCJMaXN0IiwibW9kZSIsInNob3dTZXBhcmF0b3JzIiwiaW5jbHVkZUl0ZW1JblNlbGVjdGlvbiIsImJhY2tncm91bmREZXNpZ24iLCJidXR0b25zIiwiTWFuYWdlZE9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRHJhZnREYXRhTG9zc0RpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uLy4uL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcIi4uLy4uL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQgfSBmcm9tIFwiLi4vLi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkRhdGFMb3NzT3JEcmFmdERpc2NhcmQuRHJhZnREYXRhTG9zc0RpYWxvZ1wiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJhZnREYXRhTG9zc0RpYWxvZyBleHRlbmRzIE1hbmFnZWRPYmplY3Qge1xuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0ZGF0YUxvc3NEaWFsb2chOiBSZWY8RGlhbG9nPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0b3B0aW9uc0xpc3QhOiBSZWY8TGlzdD47XG5cblx0cHJpdmF0ZSB2aWV3ITogVmlldztcblxuXHRwcml2YXRlIGRhdGFMb3NzUmVzb3VyY2VNb2RlbCE6IFJlc291cmNlTW9kZWw7XG5cblx0LyoqXG5cdCAqIFJlc29sdmVzIHRoZSBwcm9taXNlIHdpdGggdGhlIHNlbGVjdGVkIGRpYWxvZyBsaXN0IG9wdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBwcm9taXNlUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgc2hhbGxGb3JjZURyYWZ0U2F2ZU9yRGlzY2FyZCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgaXNSb290Q29udGV4dE5ldyE6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBpc0hpZGRlbkRyYWZ0ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGRhdGEgbG9zcyBkaWFsb2cuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBmb2N1c09uQ2FuY2VsIERldGVybWluZXMgd2hldGhlciB0byBmb2N1cyBvbiB0aGUgY2FuY2VsIGJ1dHRvbiB3aGVuIHRoZSBkaWFsb2cgb3BlbnMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgb3Blbihjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgZm9jdXNPbkNhbmNlbD86IGJvb2xlYW4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHR0aGlzLnZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy52aWV3KTtcblx0XHR0aGlzLmlzSGlkZGVuRHJhZnQgPSAoYXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQ7XG5cdFx0Y29uc3Qgdmlld0NvbnRleHQgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdHRoaXMuaXNSb290Q29udGV4dE5ldyA9IHZpZXdDb250ZXh0ID8gYXdhaXQgY29udHJvbGxlci5lZGl0Rmxvdy5pc1Jvb3RDb250ZXh0TmV3KHZpZXdDb250ZXh0KSA6IGZhbHNlO1xuXHRcdHRoaXMuc2hhbGxGb3JjZURyYWZ0U2F2ZU9yRGlzY2FyZCA9IGNvbnRyb2xsZXIuZWRpdEZsb3cuc2hhbGxGb3JjZURyYWZ0U2F2ZU9yRGlzY2FyZCgpO1xuXHRcdHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnZpZXcpO1xuXHRcdHRoaXMuY3JlYXRlQ29udGVudCgpO1xuXHRcdGNvbnN0IGRhdGFMb3NzQ29uZmlybSA9ICgpOiB2b2lkID0+IHRoaXMuaGFuZGxlRGF0YUxvc3NPaygpO1xuXHRcdHRoaXMub3B0aW9uc0xpc3QuY3VycmVudD8uYWRkRXZlbnREZWxlZ2F0ZSh7XG5cdFx0XHRvbmtleXVwOiBmdW5jdGlvbiAoZTogS2V5Ym9hcmRFdmVudCkge1xuXHRcdFx0XHRpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuXHRcdFx0XHRcdGRhdGFMb3NzQ29uZmlybSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy52aWV3LmFkZERlcGVuZGVudCh0aGlzLmRhdGFMb3NzRGlhbG9nLmN1cnJlbnQgYXMgVUk1RWxlbWVudCk7XG5cdFx0dGhpcy5kYXRhTG9zc0RpYWxvZy5jdXJyZW50Py5vcGVuKCk7XG5cdFx0aWYgKGZvY3VzT25DYW5jZWwgIT0gbnVsbCkge1xuXHRcdFx0dGhpcy5zZWxlY3RBbmRGb2N1c0ZpcnN0RW50cnkoZm9jdXNPbkNhbmNlbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2VsZWN0QW5kRm9jdXNGaXJzdEVudHJ5KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLnByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIHRvIGNsb3NlIHRoZSBkYXRhbG9zcyBkaWFsb2cuXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy5kYXRhTG9zc0RpYWxvZy5jdXJyZW50Py5jbG9zZSgpO1xuXHRcdHRoaXMuZGF0YUxvc3NEaWFsb2cuY3VycmVudD8uZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBsb2dpYyB3aGVuIHRoZSBkYXRhIGxvc3MgZGlhbG9nIGlzIGNvbmZpcm1lZC4gVGhlIHNlbGVjdGlvbiBvZiBhbiBvcHRpb24gcmVzb2x2ZXMgdGhlIHByb21pc2UgYW5kIGxlYWRzIHRvIHRoZVxuXHQgKiBwcm9jZXNzaW5nIG9mIHRoZSBvcmlnaW5hbGx5IHRyaWdnZXJlZCBhY3Rpb24gbGlrZSBlLmcuIGEgYmFjayBuYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKi9cblxuXHRwcml2YXRlIGhhbmRsZURhdGFMb3NzT2soKTogdm9pZCB7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZSh0aGlzLmdldFNlbGVjdGVkS2V5KCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgdG8gY2xvc2UgdGhlIGRhdGFsb3NzIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdHByaXZhdGUgaGFuZGxlRGF0YUxvc3NDYW5jZWwoKTogdm9pZCB7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShcImNhbmNlbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgZmlyc3QgbGlzdCBpdGVtIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBmb2N1c09uQ2FuY2VsIERldGVybWluZXMgd2hldGhlciB0byBmb2N1cyBvbiB0aGUgY2FuY2VsIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgc2VsZWN0QW5kRm9jdXNGaXJzdEVudHJ5KGZvY3VzT25DYW5jZWw/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0aWYgKGZvY3VzT25DYW5jZWwgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHRoaXMub3B0aW9uc0xpc3QuY3VycmVudD8uZ2V0SXRlbXMoKVsxXSBhcyBDdXN0b21MaXN0SXRlbTtcblx0XHRcdHRoaXMub3B0aW9uc0xpc3QuY3VycmVudD8uc2V0U2VsZWN0ZWRJdGVtKGNhbmNlbEJ1dHRvbik7XG5cdFx0XHRjYW5jZWxCdXR0b24/LmZvY3VzKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGZpcnN0TGlzdEl0ZW1PcHRpb246IEN1c3RvbUxpc3RJdGVtID0gdGhpcy5vcHRpb25zTGlzdC5jdXJyZW50Py5nZXRJdGVtcygpWzBdIGFzIEN1c3RvbUxpc3RJdGVtO1xuXHRcdHRoaXMub3B0aW9uc0xpc3QuY3VycmVudD8uc2V0U2VsZWN0ZWRJdGVtKGZpcnN0TGlzdEl0ZW1PcHRpb24pO1xuXHRcdC8vIFdlIGRvIG5vdCBzZXQgdGhlIGZvY3VzIG9uIHRoZSBidXR0b24sIGJ1dCBjYXRjaCB0aGUgRU5URVIga2V5IGluIHRoZSBkaWFsb2dcblx0XHQvLyBhbmQgcHJvY2VzcyBpdCBhcyBPaywgc2luY2UgZm9jdXNpbmcgdGhlIGJ1dHRvbiB3YXMgcmVwb3J0ZWQgYXMgYW4gQUNDIGlzc3VlXG5cdFx0Zmlyc3RMaXN0SXRlbU9wdGlvbj8uZm9jdXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBrZXkgb2YgdGhlIHNlbGVjdGVkIGl0ZW0gZnJvbSB0aGUgbGlzdCBvZiBvcHRpb25zIHRoYXQgd2FzIHNldCB2aWEgY3VzdG9tRGF0YS5cblx0ICogQHJldHVybnMgVGhlIGtleSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1cblx0ICovXG5cdHByaXZhdGUgZ2V0U2VsZWN0ZWRLZXkoKTogc3RyaW5nIHtcblx0XHRjb25zdCBvcHRpb25zTGlzdCA9IHRoaXMub3B0aW9uc0xpc3QuY3VycmVudCBhcyBMaXN0O1xuXHRcdHJldHVybiBvcHRpb25zTGlzdC5nZXRTZWxlY3RlZEl0ZW0oKS5kYXRhKFwiaXRlbUtleVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb25maXJtIGJ1dHRvbi5cblx0ICogQHJldHVybnMgQSBidXR0b25cblx0ICovXG5cdHByaXZhdGUgZ2V0Q29uZmlybUJ1dHRvbigpOiBCdXR0b24ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdHRleHQ9e3RoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIil9XG5cdFx0XHRcdHR5cGU9e1wiRW1waGFzaXplZFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4gdGhpcy5oYW5kbGVEYXRhTG9zc09rKCl9XG5cdFx0XHQvPlxuXHRcdCkgYXMgQnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNhbmNlbCBidXR0b24uXG5cdCAqIEByZXR1cm5zIEEgYnV0dG9uXG5cdCAqL1xuXHRwcml2YXRlIGdldENhbmNlbEJ1dHRvbigpOiBCdXR0b24ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdHRleHQ9e1xuXHRcdFx0XHRcdHRoaXMuaXNIaWRkZW5EcmFmdFxuXHRcdFx0XHRcdFx0PyB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfQ0xPU0VcIilcblx0XHRcdFx0XHRcdDogdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIilcblx0XHRcdFx0fVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4gdGhpcy5oYW5kbGVEYXRhTG9zc0NhbmNlbCgpfVxuXHRcdFx0Lz5cblx0XHQpIGFzIEJ1dHRvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gaXNTYXZlXG5cdCAqIEByZXR1cm5zIFRoZSBvcHRpb25zIGFzIEN1c3RvbUxpc3RJdGVtc1xuXHQgKi9cblx0cHJpdmF0ZSBnZXRJdGVtcyhpc1NhdmU6IGJvb2xlYW4pOiBDdXN0b21MaXN0SXRlbVtdIHtcblx0XHRsZXQgY3JlYXRlT3JTYXZlVGV4dCA9IFwiXCI7XG5cdFx0bGV0IGNyZWF0ZU9yU2F2ZUxhYmVsID0gdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX1NBVkVfRFJBRlRfUkJMXCIpO1xuXHRcdGlmIChpc1NhdmUpIHtcblx0XHRcdGNyZWF0ZU9yU2F2ZVRleHQgPSB0aGlzLmlzSGlkZGVuRHJhZnRcblx0XHRcdFx0PyB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfU0FWRV9ISURERU5fRFJBRlRfVE9MXCIpXG5cdFx0XHRcdDogdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX1NBVkVfRFJBRlRfVE9MXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjcmVhdGVPclNhdmVMYWJlbCA9IHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19DUkVBVEVfRU5USVRZX1JCTFwiKTtcblx0XHRcdGNyZWF0ZU9yU2F2ZVRleHQgPSB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfQ1JFQVRFX0VOVElUWV9UT0xcIik7XG5cdFx0fVxuXHRcdGNvbnN0IGl0ZW1zOiBDdXN0b21MaXN0SXRlbVtdID0gW107XG5cdFx0aXRlbXMucHVzaChcblx0XHRcdDxDdXN0b21MaXN0SXRlbSBjdXN0b21EYXRhPXtbbmV3IEN1c3RvbURhdGEoeyBrZXk6IFwiaXRlbUtleVwiLCB2YWx1ZTogXCJkcmFmdERhdGFMb3NzT3B0aW9uU2F2ZVwiIH0pXX0+XG5cdFx0XHRcdDxWQm94IGNsYXNzPVwic2FwVWlUaW55TWFyZ2luXCI+XG5cdFx0XHRcdFx0PExhYmVsIHRleHQ9e2NyZWF0ZU9yU2F2ZUxhYmVsfSBkZXNpZ249XCJCb2xkXCIgLz5cblx0XHRcdFx0XHQ8VGV4dCB0ZXh0PXtjcmVhdGVPclNhdmVUZXh0fSAvPlxuXHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdCk7XG5cblx0XHQvLyBUaGUgb3B0aW9uIHRvIGtlZXAgdGhlIGRyYWZ0IGlzIG5vdCBhdmFpbGFibGUgZm9yIG5ldyBkcmFmdHMgYW5kIGlmIHNoYWxsRm9yY2VEcmFmdFNhdmVPckRpc2NhcmQgPT09IHRydWVcblx0XHQvLyAoVHJlZVRhYmxlIGluIHRoZSBMaXN0UmVwb3J0KVxuXHRcdGlmICgoaXNTYXZlIHx8ICF0aGlzLnNoYWxsRm9yY2VEcmFmdFNhdmVPckRpc2NhcmQpICYmICF0aGlzLmlzSGlkZGVuRHJhZnQpIHtcblx0XHRcdGl0ZW1zLnB1c2goXG5cdFx0XHRcdDxDdXN0b21MaXN0SXRlbSBjdXN0b21EYXRhPXtbbmV3IEN1c3RvbURhdGEoeyBrZXk6IFwiaXRlbUtleVwiLCB2YWx1ZTogXCJkcmFmdERhdGFMb3NzT3B0aW9uS2VlcFwiIH0pXX0+XG5cdFx0XHRcdFx0PFZCb3ggY2xhc3M9XCJzYXBVaVRpbnlNYXJnaW5cIj5cblx0XHRcdFx0XHRcdDxMYWJlbCB0ZXh0PXt0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfS0VFUF9EUkFGVF9SQkxcIil9IGRlc2lnbj1cIkJvbGRcIiAvPlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD17dGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0tFRVBfRFJBRlRfVE9MXCIpfSAvPlxuXHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aXRlbXMucHVzaChcblx0XHRcdDxDdXN0b21MaXN0SXRlbSBjdXN0b21EYXRhPXtbbmV3IEN1c3RvbURhdGEoeyBrZXk6IFwiaXRlbUtleVwiLCB2YWx1ZTogXCJkcmFmdERhdGFMb3NzT3B0aW9uRGlzY2FyZFwiIH0pXX0+XG5cdFx0XHRcdDxWQm94IGNsYXNzPVwic2FwVWlUaW55TWFyZ2luXCI+XG5cdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHR0ZXh0PXtcblx0XHRcdFx0XHRcdFx0dGhpcy5pc0hpZGRlbkRyYWZ0XG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfRElTQ0FSRF9ISURERU5fRFJBRlRfUkJMXCIpXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfRElTQ0FSRF9EUkFGVF9SQkxcIilcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGRlc2lnbj1cIkJvbGRcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PFRleHQgdGV4dD17dGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0RJU0NBUkRfRFJBRlRfVE9MXCIpfSAvPlxuXHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdCk7XG5cblx0XHRyZXR1cm4gaXRlbXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1aWxkaW5nIGJsb2NrIHJlbmRlciBmdW5jdGlvbi5cblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZ1xuXHQgKi9cblx0Y3JlYXRlQ29udGVudCgpOiBEaWFsb2cge1xuXHRcdGNvbnN0IGhhc0FjdGl2ZUVudGl0eSA9IHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkgPT09IHRydWU7XG5cdFx0Y29uc3QgaXNTYXZlID0gdGhpcy5pc0hpZGRlbkRyYWZ0ID8gIXRoaXMuaXNSb290Q29udGV4dE5ldyA6IGhhc0FjdGl2ZUVudGl0eTtcblx0XHRjb25zdCBkZXNjcmlwdGlvbiA9IGlzU2F2ZVxuXHRcdFx0PyB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfUE9QVVBfTUVTU0FHRV9TQVZFXCIpXG5cdFx0XHQ6IHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19QT1BVUF9NRVNTQUdFX0NSRUFURVwiKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5nZXRJZCgpLCBcImRyYWZ0RGF0YUxvc3NEaWFsb2dcIl0pfVxuXHRcdFx0XHR0aXRsZT17dGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIldBUk5JTkdcIil9XG5cdFx0XHRcdHN0YXRlPXtWYWx1ZVN0YXRlLldhcm5pbmd9XG5cdFx0XHRcdHR5cGU9e1wiTWVzc2FnZVwifVxuXHRcdFx0XHRjb250ZW50V2lkdGg9e1wiMjJyZW1cIn1cblx0XHRcdFx0cmVmPXt0aGlzLmRhdGFMb3NzRGlhbG9nfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9e2Rlc2NyaXB0aW9ufSBjbGFzcz1cInNhcFVpVGlueU1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblRvcEJvdHRvbVwiIC8+XG5cdFx0XHRcdFx0XHRcdDxMaXN0XG5cdFx0XHRcdFx0XHRcdFx0bW9kZT1cIlNpbmdsZVNlbGVjdExlZnRcIlxuXHRcdFx0XHRcdFx0XHRcdHNob3dTZXBhcmF0b3JzPVwiTm9uZVwiXG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZUl0ZW1JblNlbGVjdGlvbj1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmREZXNpZ249XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaU5vQ29udGVudFBhZGRpbmdcIlxuXHRcdFx0XHRcdFx0XHRcdHJlZj17dGhpcy5vcHRpb25zTGlzdH1cblx0XHRcdFx0XHRcdFx0XHRpdGVtcz17dGhpcy5nZXRJdGVtcyhpc1NhdmUpfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRidXR0b25zOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHRjb25maXJtQnV0dG9uID0ge3RoaXMuZ2V0Q29uZmlybUJ1dHRvbigpfVxuXHRcdFx0XHRcdFx0XHRjYW5jZWxCdXR0b24gPSB7dGhpcy5nZXRDYW5jZWxCdXR0b24oKX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCkgYXMgRGlhbG9nO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1QnFCQSxtQkFBbUIsSUFBQUMsSUFBQSxHQUR2Q0MsY0FBYyxDQUFDLGlFQUFpRSxDQUFDLEVBQUFD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
269
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcmFmdERhdGFMb3NzRGlhbG9nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjMyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFuYWdlZE9iamVjdCIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsInNoYWxsRm9yY2VEcmFmdFNhdmVPckRpc2NhcmQiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib3BlbiIsImNvbnRyb2xsZXIiLCJmb2N1c09uQ2FuY2VsIiwidmlldyIsImdldFZpZXciLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImlzSGlkZGVuRHJhZnQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsInZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc1Jvb3RDb250ZXh0TmV3IiwiZWRpdEZsb3ciLCJkYXRhTG9zc1Jlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiY3JlYXRlQ29udGVudCIsImRhdGFMb3NzQ29uZmlybSIsImhhbmRsZURhdGFMb3NzT2siLCJvcHRpb25zTGlzdCIsImN1cnJlbnQiLCJhZGRFdmVudERlbGVnYXRlIiwib25rZXl1cCIsImUiLCJrZXkiLCJhZGREZXBlbmRlbnQiLCJkYXRhTG9zc0RpYWxvZyIsInNlbGVjdEFuZEZvY3VzRmlyc3RFbnRyeSIsIlByb21pc2UiLCJyZXNvbHZlIiwicHJvbWlzZVJlc29sdmUiLCJjbG9zZSIsImRlc3Ryb3kiLCJnZXRTZWxlY3RlZEtleSIsImhhbmRsZURhdGFMb3NzQ2FuY2VsIiwiY2FuY2VsQnV0dG9uIiwiZ2V0SXRlbXMiLCJzZXRTZWxlY3RlZEl0ZW0iLCJmb2N1cyIsImZpcnN0TGlzdEl0ZW1PcHRpb24iLCJnZXRTZWxlY3RlZEl0ZW0iLCJkYXRhIiwiZ2V0Q29uZmlybUJ1dHRvbiIsImJ1dHRvbiIsIl9qc3giLCJCdXR0b24iLCJ0ZXh0IiwiZ2V0VGV4dCIsInR5cGUiLCJwcmVzcyIsIkZFU1JIZWxwZXIiLCJzZXRTZW1hbnRpY1N0ZXBuYW1lIiwiZ2V0Q2FuY2VsQnV0dG9uIiwiaXNTYXZlIiwiY3JlYXRlT3JTYXZlVGV4dCIsImNyZWF0ZU9yU2F2ZUxhYmVsIiwiaXRlbXMiLCJwdXNoIiwiQ3VzdG9tTGlzdEl0ZW0iLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsInZhbHVlIiwiY2hpbGRyZW4iLCJfanN4cyIsIlZCb3giLCJjbGFzcyIsIkxhYmVsIiwiZGVzaWduIiwiVGV4dCIsImhhc0FjdGl2ZUVudGl0eSIsImdldE9iamVjdCIsIkhhc0FjdGl2ZUVudGl0eSIsImRlc2NyaXB0aW9uIiwiRGlhbG9nIiwiaWQiLCJnZW5lcmF0ZSIsImdldElkIiwidGl0bGUiLCJzdGF0ZSIsIlZhbHVlU3RhdGUiLCJXYXJuaW5nIiwiY29udGVudFdpZHRoIiwiZXNjYXBlSGFuZGxlciIsInJlZiIsImNvbnRlbnQiLCJfRnJhZ21lbnQiLCJMaXN0IiwibW9kZSIsInNob3dTZXBhcmF0b3JzIiwiaW5jbHVkZUl0ZW1JblNlbGVjdGlvbiIsImJhY2tncm91bmREZXNpZ24iLCJidXR0b25zIiwiTWFuYWdlZE9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRHJhZnREYXRhTG9zc0RpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgRkVTUkhlbHBlciBmcm9tIFwic2FwL3VpL3BlcmZvcm1hbmNlL3RyYWNlL0ZFU1JIZWxwZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwiLi4vLi4vQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCIuLi8uLi9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwiLi4vLi4vUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCB9IGZyb20gXCIuLi8uLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbHMuRGF0YUxvc3NPckRyYWZ0RGlzY2FyZC5EcmFmdERhdGFMb3NzRGlhbG9nXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmFmdERhdGFMb3NzRGlhbG9nIGV4dGVuZHMgTWFuYWdlZE9iamVjdCB7XG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRkYXRhTG9zc0RpYWxvZyE6IFJlZjxEaWFsb2c+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRvcHRpb25zTGlzdCE6IFJlZjxMaXN0PjtcblxuXHRwcml2YXRlIHZpZXchOiBWaWV3O1xuXG5cdHByaXZhdGUgZGF0YUxvc3NSZXNvdXJjZU1vZGVsITogUmVzb3VyY2VNb2RlbDtcblxuXHQvKipcblx0ICogUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgc2VsZWN0ZWQgZGlhbG9nIGxpc3Qgb3B0aW9uXG5cdCAqL1xuXHRwcml2YXRlIHByb21pc2VSZXNvbHZlITogRnVuY3Rpb247XG5cblx0cHJpdmF0ZSBzaGFsbEZvcmNlRHJhZnRTYXZlT3JEaXNjYXJkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBpc1Jvb3RDb250ZXh0TmV3ITogYm9vbGVhbjtcblxuXHRwcml2YXRlIGlzSGlkZGVuRHJhZnQhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgZGF0YSBsb3NzIGRpYWxvZy5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIGZvY3VzT25DYW5jZWwgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGZvY3VzIG9uIHRoZSBjYW5jZWwgYnV0dG9uIHdoZW4gdGhlIGRpYWxvZyBvcGVucy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBvcGVuKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBmb2N1c09uQ2FuY2VsPzogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHRoaXMudmlldyA9IGNvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLnZpZXcpO1xuXHRcdHRoaXMuaXNIaWRkZW5EcmFmdCA9IChhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZDtcblx0XHRjb25zdCB2aWV3Q29udGV4dCA9IHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0dGhpcy5pc1Jvb3RDb250ZXh0TmV3ID0gdmlld0NvbnRleHQgPyBhd2FpdCBjb250cm9sbGVyLmVkaXRGbG93LmlzUm9vdENvbnRleHROZXcodmlld0NvbnRleHQpIDogZmFsc2U7XG5cdFx0dGhpcy5zaGFsbEZvcmNlRHJhZnRTYXZlT3JEaXNjYXJkID0gY29udHJvbGxlci5lZGl0Rmxvdy5zaGFsbEZvcmNlRHJhZnRTYXZlT3JEaXNjYXJkKCk7XG5cdFx0dGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMudmlldyk7XG5cdFx0dGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0Y29uc3QgZGF0YUxvc3NDb25maXJtID0gKCk6IHZvaWQgPT4gdGhpcy5oYW5kbGVEYXRhTG9zc09rKCk7XG5cdFx0dGhpcy5vcHRpb25zTGlzdC5jdXJyZW50Py5hZGRFdmVudERlbGVnYXRlKHtcblx0XHRcdG9ua2V5dXA6IGZ1bmN0aW9uIChlOiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0XHRcdGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG5cdFx0XHRcdFx0ZGF0YUxvc3NDb25maXJtKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHR0aGlzLnZpZXcuYWRkRGVwZW5kZW50KHRoaXMuZGF0YUxvc3NEaWFsb2cuY3VycmVudCBhcyBVSTVFbGVtZW50KTtcblx0XHR0aGlzLmRhdGFMb3NzRGlhbG9nLmN1cnJlbnQ/Lm9wZW4oKTtcblx0XHRpZiAoZm9jdXNPbkNhbmNlbCAhPSBudWxsKSB7XG5cdFx0XHR0aGlzLnNlbGVjdEFuZEZvY3VzRmlyc3RFbnRyeShmb2N1c09uQ2FuY2VsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZWxlY3RBbmRGb2N1c0ZpcnN0RW50cnkoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRoaXMucHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgdG8gY2xvc2UgdGhlIGRhdGFsb3NzIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmRhdGFMb3NzRGlhbG9nLmN1cnJlbnQ/LmNsb3NlKCk7XG5cdFx0dGhpcy5kYXRhTG9zc0RpYWxvZy5jdXJyZW50Py5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGxvZ2ljIHdoZW4gdGhlIGRhdGEgbG9zcyBkaWFsb2cgaXMgY29uZmlybWVkLiBUaGUgc2VsZWN0aW9uIG9mIGFuIG9wdGlvbiByZXNvbHZlcyB0aGUgcHJvbWlzZSBhbmQgbGVhZHMgdG8gdGhlXG5cdCAqIHByb2Nlc3Npbmcgb2YgdGhlIG9yaWdpbmFsbHkgdHJpZ2dlcmVkIGFjdGlvbiBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24uXG5cdCAqXG5cdCAqL1xuXG5cdHByaXZhdGUgaGFuZGxlRGF0YUxvc3NPaygpOiB2b2lkIHtcblx0XHR0aGlzLnByb21pc2VSZXNvbHZlKHRoaXMuZ2V0U2VsZWN0ZWRLZXkoKSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciB0byBjbG9zZSB0aGUgZGF0YWxvc3MgZGlhbG9nLlxuXHQgKlxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVEYXRhTG9zc0NhbmNlbCgpOiB2b2lkIHtcblx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFwiY2FuY2VsXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBmaXJzdCBsaXN0IGl0ZW0gb2YgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGZvY3VzT25DYW5jZWwgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGZvY3VzIG9uIHRoZSBjYW5jZWwgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBzZWxlY3RBbmRGb2N1c0ZpcnN0RW50cnkoZm9jdXNPbkNhbmNlbD86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAoZm9jdXNPbkNhbmNlbCA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgY2FuY2VsQnV0dG9uID0gdGhpcy5vcHRpb25zTGlzdC5jdXJyZW50Py5nZXRJdGVtcygpWzFdIGFzIEN1c3RvbUxpc3RJdGVtO1xuXHRcdFx0dGhpcy5vcHRpb25zTGlzdC5jdXJyZW50Py5zZXRTZWxlY3RlZEl0ZW0oY2FuY2VsQnV0dG9uKTtcblx0XHRcdGNhbmNlbEJ1dHRvbj8uZm9jdXMoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZmlyc3RMaXN0SXRlbU9wdGlvbjogQ3VzdG9tTGlzdEl0ZW0gPSB0aGlzLm9wdGlvbnNMaXN0LmN1cnJlbnQ/LmdldEl0ZW1zKClbMF0gYXMgQ3VzdG9tTGlzdEl0ZW07XG5cdFx0dGhpcy5vcHRpb25zTGlzdC5jdXJyZW50Py5zZXRTZWxlY3RlZEl0ZW0oZmlyc3RMaXN0SXRlbU9wdGlvbik7XG5cdFx0Ly8gV2UgZG8gbm90IHNldCB0aGUgZm9jdXMgb24gdGhlIGJ1dHRvbiwgYnV0IGNhdGNoIHRoZSBFTlRFUiBrZXkgaW4gdGhlIGRpYWxvZ1xuXHRcdC8vIGFuZCBwcm9jZXNzIGl0IGFzIE9rLCBzaW5jZSBmb2N1c2luZyB0aGUgYnV0dG9uIHdhcyByZXBvcnRlZCBhcyBhbiBBQ0MgaXNzdWVcblx0XHRmaXJzdExpc3RJdGVtT3B0aW9uPy5mb2N1cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGtleSBvZiB0aGUgc2VsZWN0ZWQgaXRlbSBmcm9tIHRoZSBsaXN0IG9mIG9wdGlvbnMgdGhhdCB3YXMgc2V0IHZpYSBjdXN0b21EYXRhLlxuXHQgKiBAcmV0dXJucyBUaGUga2V5IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbVxuXHQgKi9cblx0cHJpdmF0ZSBnZXRTZWxlY3RlZEtleSgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9wdGlvbnNMaXN0ID0gdGhpcy5vcHRpb25zTGlzdC5jdXJyZW50IGFzIExpc3Q7XG5cdFx0cmV0dXJuIG9wdGlvbnNMaXN0LmdldFNlbGVjdGVkSXRlbSgpLmRhdGEoXCJpdGVtS2V5XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbmZpcm0gYnV0dG9uLlxuXHQgKiBAcmV0dXJucyBBIGJ1dHRvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDb25maXJtQnV0dG9uKCk6IEJ1dHRvbiB7XG5cdFx0Y29uc3QgYnV0dG9uOiBCdXR0b24gPSAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdHRleHQ9e3RoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIil9XG5cdFx0XHRcdHR5cGU9e1wiRW1waGFzaXplZFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4gdGhpcy5oYW5kbGVEYXRhTG9zc09rKCl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKGJ1dHRvbiwgXCJwcmVzc1wiLCBcImZlNDpkcmFmdExvc3M6T2tcIik7XG5cdFx0cmV0dXJuIGJ1dHRvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjYW5jZWwgYnV0dG9uLlxuXHQgKiBAcmV0dXJucyBBIGJ1dHRvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDYW5jZWxCdXR0b24oKTogQnV0dG9uIHtcblx0XHRjb25zdCBidXR0b246IEJ1dHRvbiA9IChcblx0XHRcdDxCdXR0b25cblx0XHRcdFx0dGV4dD17XG5cdFx0XHRcdFx0dGhpcy5pc0hpZGRlbkRyYWZ0XG5cdFx0XHRcdFx0XHQ/IHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHRcdFx0OiB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTFwiKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB0aGlzLmhhbmRsZURhdGFMb3NzQ2FuY2VsKCl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKGJ1dHRvbiwgXCJwcmVzc1wiLCBcImZlNDpkcmFmdExvc3M6Q2FuY2VsXCIpO1xuXHRcdHJldHVybiBidXR0b247XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgb3B0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGlzU2F2ZVxuXHQgKiBAcmV0dXJucyBUaGUgb3B0aW9ucyBhcyBDdXN0b21MaXN0SXRlbXNcblx0ICovXG5cdHByaXZhdGUgZ2V0SXRlbXMoaXNTYXZlOiBib29sZWFuKTogQ3VzdG9tTGlzdEl0ZW1bXSB7XG5cdFx0bGV0IGNyZWF0ZU9yU2F2ZVRleHQgPSBcIlwiO1xuXHRcdGxldCBjcmVhdGVPclNhdmVMYWJlbCA9IHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19TQVZFX0RSQUZUX1JCTFwiKTtcblx0XHRpZiAoaXNTYXZlKSB7XG5cdFx0XHRjcmVhdGVPclNhdmVUZXh0ID0gdGhpcy5pc0hpZGRlbkRyYWZ0XG5cdFx0XHRcdD8gdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX1NBVkVfSElEREVOX0RSQUZUX1RPTFwiKVxuXHRcdFx0XHQ6IHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19TQVZFX0RSQUZUX1RPTFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3JlYXRlT3JTYXZlTGFiZWwgPSB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfQ1JFQVRFX0VOVElUWV9SQkxcIik7XG5cdFx0XHRjcmVhdGVPclNhdmVUZXh0ID0gdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0NSRUFURV9FTlRJVFlfVE9MXCIpO1xuXHRcdH1cblx0XHRjb25zdCBpdGVtczogQ3VzdG9tTGlzdEl0ZW1bXSA9IFtdO1xuXHRcdGl0ZW1zLnB1c2goXG5cdFx0XHQ8Q3VzdG9tTGlzdEl0ZW0gY3VzdG9tRGF0YT17W25ldyBDdXN0b21EYXRhKHsga2V5OiBcIml0ZW1LZXlcIiwgdmFsdWU6IFwiZHJhZnREYXRhTG9zc09wdGlvblNhdmVcIiB9KV19PlxuXHRcdFx0XHQ8VkJveCBjbGFzcz1cInNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdDxMYWJlbCB0ZXh0PXtjcmVhdGVPclNhdmVMYWJlbH0gZGVzaWduPVwiQm9sZFwiIC8+XG5cdFx0XHRcdFx0PFRleHQgdGV4dD17Y3JlYXRlT3JTYXZlVGV4dH0gLz5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHQpO1xuXG5cdFx0Ly8gVGhlIG9wdGlvbiB0byBrZWVwIHRoZSBkcmFmdCBpcyBub3QgYXZhaWxhYmxlIGZvciBuZXcgZHJhZnRzIGFuZCBpZiBzaGFsbEZvcmNlRHJhZnRTYXZlT3JEaXNjYXJkID09PSB0cnVlXG5cdFx0Ly8gKFRyZWVUYWJsZSBpbiB0aGUgTGlzdFJlcG9ydClcblx0XHRpZiAoKGlzU2F2ZSB8fCAhdGhpcy5zaGFsbEZvcmNlRHJhZnRTYXZlT3JEaXNjYXJkKSAmJiAhdGhpcy5pc0hpZGRlbkRyYWZ0KSB7XG5cdFx0XHRpdGVtcy5wdXNoKFxuXHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW0gY3VzdG9tRGF0YT17W25ldyBDdXN0b21EYXRhKHsga2V5OiBcIml0ZW1LZXlcIiwgdmFsdWU6IFwiZHJhZnREYXRhTG9zc09wdGlvbktlZXBcIiB9KV19PlxuXHRcdFx0XHRcdDxWQm94IGNsYXNzPVwic2FwVWlUaW55TWFyZ2luXCI+XG5cdFx0XHRcdFx0XHQ8TGFiZWwgdGV4dD17dGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0tFRVBfRFJBRlRfUkJMXCIpfSBkZXNpZ249XCJCb2xkXCIgLz5cblx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9e3RoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19LRUVQX0RSQUZUX1RPTFwiKX0gLz5cblx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdDwvQ3VzdG9tTGlzdEl0ZW0+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGl0ZW1zLnB1c2goXG5cdFx0XHQ8Q3VzdG9tTGlzdEl0ZW0gY3VzdG9tRGF0YT17W25ldyBDdXN0b21EYXRhKHsga2V5OiBcIml0ZW1LZXlcIiwgdmFsdWU6IFwiZHJhZnREYXRhTG9zc09wdGlvbkRpc2NhcmRcIiB9KV19PlxuXHRcdFx0XHQ8VkJveCBjbGFzcz1cInNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0dGV4dD17XG5cdFx0XHRcdFx0XHRcdHRoaXMuaXNIaWRkZW5EcmFmdFxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0RJU0NBUkRfSElEREVOX0RSQUZUX1JCTFwiKVxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0RJU0NBUkRfRFJBRlRfUkJMXCIpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRkZXNpZ249XCJCb2xkXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxUZXh0IHRleHQ9e3RoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19ESVNDQVJEX0RSQUZUX1RPTFwiKX0gLz5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIGl0ZW1zO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBidWlsZGluZyBibG9jayByZW5kZXIgZnVuY3Rpb24uXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmdcblx0ICovXG5cdGNyZWF0ZUNvbnRlbnQoKTogRGlhbG9nIHtcblx0XHRjb25zdCBoYXNBY3RpdmVFbnRpdHkgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0T2JqZWN0KCkuSGFzQWN0aXZlRW50aXR5ID09PSB0cnVlO1xuXHRcdGNvbnN0IGlzU2F2ZSA9IHRoaXMuaXNIaWRkZW5EcmFmdCA/ICF0aGlzLmlzUm9vdENvbnRleHROZXcgOiBoYXNBY3RpdmVFbnRpdHk7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb24gPSBpc1NhdmVcblx0XHRcdD8gdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX1BPUFVQX01FU1NBR0VfU0FWRVwiKVxuXHRcdFx0OiB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfUE9QVVBfTUVTU0FHRV9DUkVBVEVcIik7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RoaXMuZ2V0SWQoKSwgXCJkcmFmdERhdGFMb3NzRGlhbG9nXCJdKX1cblx0XHRcdFx0dGl0bGU9e3RoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJXQVJOSU5HXCIpfVxuXHRcdFx0XHRzdGF0ZT17VmFsdWVTdGF0ZS5XYXJuaW5nfVxuXHRcdFx0XHR0eXBlPXtcIk1lc3NhZ2VcIn1cblx0XHRcdFx0Y29udGVudFdpZHRoPXtcIjIycmVtXCJ9XG5cdFx0XHRcdGVzY2FwZUhhbmRsZXI9eygpOiB2b2lkID0+IHRoaXMuY2xvc2UoKX1cblx0XHRcdFx0cmVmPXt0aGlzLmRhdGFMb3NzRGlhbG9nfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9e2Rlc2NyaXB0aW9ufSBjbGFzcz1cInNhcFVpVGlueU1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblRvcEJvdHRvbVwiIC8+XG5cdFx0XHRcdFx0XHRcdDxMaXN0XG5cdFx0XHRcdFx0XHRcdFx0bW9kZT1cIlNpbmdsZVNlbGVjdExlZnRcIlxuXHRcdFx0XHRcdFx0XHRcdHNob3dTZXBhcmF0b3JzPVwiTm9uZVwiXG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZUl0ZW1JblNlbGVjdGlvbj1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmREZXNpZ249XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaU5vQ29udGVudFBhZGRpbmdcIlxuXHRcdFx0XHRcdFx0XHRcdHJlZj17dGhpcy5vcHRpb25zTGlzdH1cblx0XHRcdFx0XHRcdFx0XHRpdGVtcz17dGhpcy5nZXRJdGVtcyhpc1NhdmUpfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRidXR0b25zOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHRjb25maXJtQnV0dG9uID0ge3RoaXMuZ2V0Q29uZmlybUJ1dHRvbigpfVxuXHRcdFx0XHRcdFx0XHRjYW5jZWxCdXR0b24gPSB7dGhpcy5nZXRDYW5jZWxCdXR0b24oKX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCkgYXMgRGlhbG9nO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF3QnFCQSxtQkFBbUIsSUFBQUMsSUFBQSxHQUR2Q0MsY0FBYyxDQUFDLGlFQUFpRSxDQUFDLEVBQUFDLEtBQUEsR0FFaEZDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHakJELGVBQWUsQ0FBQyxDQUFDLEVBQUFILElBQUEsQ0FBQUssTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxjQUFBO0lBQUEsU0FBQVIsb0JBQUE7TUFBQSxJQUFBUyxLQUFBO01BQUEsU0FBQUMsSUFBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsRUFBQUMsSUFBQSxPQUFBQyxLQUFBLENBQUFKLElBQUEsR0FBQUssSUFBQSxNQUFBQSxJQUFBLEdBQUFMLElBQUEsRUFBQUssSUFBQTtRQUFBRixJQUFBLENBQUFFLElBQUEsSUFBQUosU0FBQSxDQUFBSSxJQUFBO01BQUE7TUFBQU4sS0FBQSxHQUFBRCxjQUFBLENBQUFRLElBQUEsVUFBQUgsSUFBQTtNQUFBSSwwQkFBQSxDQUFBUixLQUFBLG9CQUFBUyxXQUFBLEVBQUFULEtBQUE7TUFBQVEsMEJBQUEsQ0FBQVIsS0FBQSxpQkFBQVUsWUFBQSxFQUFBVixLQUFBO01BQUFBLEtBQUEsQ0FZVlcsNEJBQTRCLEdBQUcsS0FBSztNQUFBLE9BQUFYLEtBQUE7SUFBQTtJQUFBWSxRQUFBLEdBQUFyQixt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
@@ -15,6 +15,7 @@ import type UI5Element from "sap/ui/core/Element";
15
15
  import { ValueState } from "sap/ui/core/library";
16
16
  import type View from "sap/ui/core/mvc/View";
17
17
  import type Context from "sap/ui/model/odata/v4/Context";
18
+ import FESRHelper from "sap/ui/performance/trace/FESRHelper";
18
19
  import CommonUtils from "../../CommonUtils";
19
20
  import type PageController from "../../PageController";
20
21
  import type ResourceModel from "../../ResourceModel";
@@ -137,13 +138,15 @@ export default class DraftDataLossDialog extends ManagedObject {
137
138
  * @returns A button
138
139
  */
139
140
  private getConfirmButton(): Button {
140
- return (
141
+ const button: Button = (
141
142
  <Button
142
143
  text={this.dataLossResourceModel.getText("C_COMMON_DIALOG_OK")}
143
144
  type={"Emphasized"}
144
145
  press={(): void => this.handleDataLossOk()}
145
146
  />
146
- ) as Button;
147
+ );
148
+ FESRHelper.setSemanticStepname(button, "press", "fe4:draftLoss:Ok");
149
+ return button;
147
150
  }
148
151
 
149
152
  /**
@@ -151,7 +154,7 @@ export default class DraftDataLossDialog extends ManagedObject {
151
154
  * @returns A button
152
155
  */
153
156
  private getCancelButton(): Button {
154
- return (
157
+ const button: Button = (
155
158
  <Button
156
159
  text={
157
160
  this.isHiddenDraft
@@ -160,7 +163,9 @@ export default class DraftDataLossDialog extends ManagedObject {
160
163
  }
161
164
  press={(): void => this.handleDataLossCancel()}
162
165
  />
163
- ) as Button;
166
+ );
167
+ FESRHelper.setSemanticStepname(button, "press", "fe4:draftLoss:Cancel");
168
+ return button;
164
169
  }
165
170
 
166
171
  /**
@@ -239,6 +244,7 @@ export default class DraftDataLossDialog extends ManagedObject {
239
244
  state={ValueState.Warning}
240
245
  type={"Message"}
241
246
  contentWidth={"22rem"}
247
+ escapeHandler={(): void => this.close()}
242
248
  ref={this.dataLossDialog}
243
249
  >
244
250
  {{
@@ -321,7 +321,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
321
321
  const rejectedContextData = {};
322
322
  for (const key of Object.keys(annotationObject)) {
323
323
  if (key.includes("ui5.fe.recommendations")) {
324
- rejectedContextData[key] = annotationObject[key];
324
+ const value = annotationObject[key];
325
+ rejectedContextData[key] = Array.isArray(value) ? [...value] : value;
325
326
  }
326
327
  }
327
328
  return rejectedContextData;
@@ -533,4 +534,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
533
534
  _exports.ConfirmRecommendationDialog = ConfirmRecommendationDialog;
534
535
  return _exports;
535
536
  }, false);
536
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIl9leHBvcnRzIiwiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJkZWZpbmVSZWZlcmVuY2UiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX01hbmFnZWRPYmplY3QiLCJwcm9wcyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJ2aWV3IiwicHJvZ3JhbW1pbmdNb2RlbCIsImNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRPcGVuUmVjb21tZW5kYXRpb25zIiwidmlzaWJsZUNvbnRleHRQYXRocyIsImdldFZpc2libGVQYWdlQ29udGV4dFBhdGhzIiwib3BlblJlY29tbWVuZGF0aW9ucyIsImdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JWaXNpYmxlQ29udGV4dFBhdGhzIiwicmVjb21tZW5kYXRpb25zIiwibGVuZ3RoIiwiZm9yRWFjaCIsInJlY29tbWVuZGF0aW9uIiwicHJpbWFyeUNvbnRleHQiLCJjb250ZXh0IiwiZmFsbGJhY2tDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJpc0VtcHR5IiwiY3R4IiwicGF0aCIsInZhbHVlIiwiZ2V0UHJvcGVydHkiLCJ1bmRlZmluZWQiLCJwdXNoIiwidmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMiLCJnZXRQYXRoIiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJmY2xDb250cm9sbGVyIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiaXNGY2xFbmFibGVkIiwiX2lzRmNsRW5hYmxlZCIsImlzRnVsbFNjcmVlbiIsImdldEhlbHBlciIsImdldEN1cnJlbnRVSVN0YXRlIiwicmlnaHRNb3N0Q29udGV4dCIsImdldFJpZ2h0bW9zdENvbnRleHQiLCJpbmNsdWRlcyIsImNvbnRleHRQYXRocyIsImxvY2FsQW5ub3RhdGlvbk1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImNvbnRleHRQYXRoIiwibG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwiZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbk9iamVjdCIsImZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwicmVjb21tZW5kYXRpb25PYmplY3QiLCJjdXJyZW50S2V5IiwiY3VycmVudFZhbHVlIiwia2V5cyIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RW50aXR5S2V5cyIsImNvbnRleHRJZGVudGlmaWVyIiwiZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQiLCJjb250ZXh0RGF0YSIsInJlY29tbWVuZGF0aW9uQ29udGV4dCIsImNvbnRleHRLZXkiLCJhcmd1bWVudHMiLCJjdXJyZW50VmFsdWVJc0NvbnRleHQiLCJpc0EiLCJzcGxpdCIsIm9wZW5SZWNvbW1lbmRhdGlvbiIsImNvbnRleHRJZGVudGlmaWVyVGV4dCIsImRlc2NyaXB0aW9uIiwidGV4dCIsIkFycmF5IiwiaXNBcnJheSIsIm9wZW4iLCJpc1NhdmUiLCJzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyIiwiYWRkQ29udGV4dElkZW50aWZpZXJUZXh0IiwicmVjb21tZW5kYXRpb25EYXRhIiwiYWNjZXB0QWxsUGFyYW1zIiwib25CZWZvcmVBY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJsZWdhY3lSZWNvbW1lbmRhdGlvbnNFeGlzdCIsImNoZWNrSWZSZWNvbW1lbmRhdGlvbnNFeGlzdCIsImZldGNoQWNjZXB0QWxsUGFyYW1zIiwiYWNjZXB0TW9kZWwiLCJnZXRBY2NlcHRBbGxNb2RlbCIsInNldE1vZGVsIiwiZ2V0RGF0YSIsIml0ZW1zIiwiU2tpcHBlZCIsImRpYWxvZyIsImdldENvbnRlbnQiLCJzZXRFc2NhcGVIYW5kbGVyIiwib25Db250aW51ZUVkaXRpbmciLCJiaW5kIiwiYWRkRGVwZW5kZW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9taXNlUmVzb2x2ZSIsInByb21pc2VSZWplY3QiLCJjbG9zZSIsImNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZyIsImN1cnJlbnQiLCJkZXN0cm95Iiwib25BY2NlcHRBbmRTYXZlIiwiaXNBY2NlcHRlZCIsImFjY2VwdFJlY29tbWVuZGF0aW9ucyIsIkFjY2VwdCIsIkxvZyIsImVycm9yIiwib25JZ25vcmVBbmRTYXZlIiwicmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnMiLCJwcm9jZXNzZWRDb250ZXh0UGF0aHMiLCJTZXQiLCJoYXMiLCJfcHJvY2Vzc1JlY29tbWVuZGF0aW9uQ29udGV4dCIsImlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMiLCJSZWplY3QiLCJyZWplY3RlZENvbnRleHREYXRhIiwiX2ZpbHRlclJlY29tbWVuZGF0aW9uS2V5cyIsIl9jbGVhclJlY29tbWVuZGF0aW9uUHJvcGVydGllcyIsInNldFByb3BlcnR5IiwiYWRkIiwia2V5IiwiT2JqZWN0IiwiQ29udGludWUiLCJnZXRGaWVsZE5hbWUiLCJ0YXJnZXRQYXRoIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3QiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIiwiZ2V0TWV0YU1vZGVsIiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsInRvU3RyaW5nIiwiZ2V0VGV4dCIsImRpc3BsYXlNb2RlIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiZ2V0QnV0dG9uIiwidHlwZSIsInByZXNzSGFuZGxlciIsIl9qc3giLCJCdXR0b24iLCJ3aWR0aCIsInByZXNzIiwiY2hpbGRyZW4iLCJsYXlvdXREYXRhIiwiX0ZyYWdtZW50IiwiRmxleEl0ZW1EYXRhIiwibWluV2lkdGgiLCJnZXRGb290ZXIiLCJUb29sYmFyIiwiY29udGVudCIsIl9qc3hzIiwiVG9vbGJhclNwYWNlciIsIl9nZXREaWFsb2dCdXR0b25UZXh0Iiwic2F2ZSIsInJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24iLCJpc0FjY2VwdEJ1dHRvbiIsImlzQ3JlYXRlTW9kZSIsIkpTT05Nb2RlbCIsImVudGl0eU5hbWVMYWJlbCIsImdldEVudGl0eU5hbWUiLCJpZGVudGlmaWVyVGV4dHMiLCJnZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgiLCJsaXN0RGF0YSIsImZpZWxkTmFtZSIsInZhbHVlT2YiLCJmaWVsZFZhbHVlIiwic2V0RGF0YSIsImdldEdyb3VwIiwiZ2V0TWVzc2FnZSIsImFjY2VwdEFsbERhdGEiLCJtZXNzYWdlVGV4dCIsIlRleHQiLCJnZXREaWFsb2dDb250ZW50IiwiTGlzdCIsIm1vZGVsIiwic29ydGVyIiwiU29ydGVyIiwiQ3VzdG9tTGlzdEl0ZW0iLCJIQm94IiwiY2xhc3MiLCJEaWFsb2ciLCJ0aXRsZSIsInN0YXRlIiwiVmFsdWVTdGF0ZSIsIkluZm9ybWF0aW9uIiwicmVmIiwicmVzaXphYmxlIiwiY29udGVudFdpZHRoIiwiZm9vdGVyIiwiTWFuYWdlZE9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUb29sYmFyIGZyb20gXCJzYXAvbS9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcIi4uLy4uL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQWNjZXB0QWxsUGFyYW1zLCBSZWNvbW1lbmRhdGlvbkRhdGEgfSBmcm9tIFwiLi4vLi4vY29udHJvbGxlcmV4dGVuc2lvbnMvUmVjb21tZW5kYXRpb25zXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCIuLi8uLi9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciwgdHlwZSBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCIuLi8uLi9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWw7XG50eXBlIFByb2dyYW1taW5nTW9kZWxUeXBlID0gKHR5cGVvZiBQcm9ncmFtbWluZ01vZGVsKVtrZXlvZiB0eXBlb2YgUHJvZ3JhbW1pbmdNb2RlbF07XG5cbmV4cG9ydCBlbnVtIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24ge1xuXHRBY2NlcHQgPSBcIkFjY2VwdF9SZWNvbW1lbmRhdGlvbnNcIixcblx0UmVqZWN0ID0gXCJSZWplY3RfUmVjb21tZW5kYXRpb25zXCIsXG5cdENvbnRpbnVlID0gXCJDb250aW51ZV9FZGl0aW5nXCIsXG5cdFNraXBwZWQgPSBcIlNraXBwZWRcIlxufVxuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9scy5SZWNvbW1lbmRhdGlvbnMuQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCIpXG5leHBvcnQgY2xhc3MgQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIGV4dGVuZHMgTWFuYWdlZE9iamVjdCB7XG5cdGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wZXJ0aWVzT2Y8Q29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nPikge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLnZpZXcgPSBwcm9wcy52aWV3IGFzIFZpZXc7XG5cdFx0dGhpcy5wcm9ncmFtbWluZ01vZGVsID0gcHJvcHMucHJvZ3JhbW1pbmdNb2RlbDtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMudmlldyk7XG5cdH1cblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0Y29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nITogUmVmPERpYWxvZz47XG5cblx0cHVibGljIHZpZXchOiBWaWV3O1xuXG5cdHB1YmxpYyBwcm9ncmFtbWluZ01vZGVsITogUHJvZ3JhbW1pbmdNb2RlbFR5cGU7XG5cblx0cHJpdmF0ZSBjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsITogUmVzb3VyY2VNb2RlbDtcblxuXHRwcm90ZWN0ZWQga2V5ITogc3RyaW5nO1xuXG5cdHByaXZhdGUgaXNTYXZlITogYm9vbGVhbjtcblxuXHRwcml2YXRlIGFjY2VwdEFsbFBhcmFtcyE6IEFjY2VwdEFsbFBhcmFtcztcblxuXHQvKipcblx0ICogUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgc2VsZWN0ZWQgZGlhbG9nIGxpc3Qgb3B0aW9uXG5cdCAqL1xuXHRwcml2YXRlIHByb21pc2VSZXNvbHZlITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIFJlamVjdHMgdGhlIHByb21pc2Ugb2Ygb3BlbiBkaWFsb2dcblx0ICovXG5cdHB1YmxpYyBwcm9taXNlUmVqZWN0ITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uIERhdGFcblx0ICovXG5cblx0cHVibGljIGdldE9wZW5SZWNvbW1lbmRhdGlvbnMoKTogUmVjb21tZW5kYXRpb25EYXRhW10ge1xuXHRcdGNvbnN0IHZpc2libGVDb250ZXh0UGF0aHMgPSB0aGlzLmdldFZpc2libGVQYWdlQ29udGV4dFBhdGhzKCk7XG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9ucyA9IHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvclZpc2libGVDb250ZXh0UGF0aHModmlzaWJsZUNvbnRleHRQYXRocyk7XG5cdFx0Y29uc3QgcmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSA9IFtdO1xuXG5cdFx0aWYgKG9wZW5SZWNvbW1lbmRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucy5mb3JFYWNoKChyZWNvbW1lbmRhdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBwcmltYXJ5Q29udGV4dCA9IHJlY29tbWVuZGF0aW9uLmNvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IGZhbGxiYWNrQ29udGV4dCA9IHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSByZWNvbW1lbmRhdGlvbi5wcm9wZXJ0eVBhdGggPz8gXCJcIjtcblxuXHRcdFx0XHRjb25zdCBpc0VtcHR5ID0gKGN0eDogQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGwsIHBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gY3R4Py5nZXRQcm9wZXJ0eShwYXRoKTtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIjtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBwdXNoIHJlY29tbWVuZGF0aW9uIGlmIHByb3BlcnR5IGlzIGVtcHR5IGluIGJvdGggY29udGV4dHNcblx0XHRcdFx0aWYgKGlzRW1wdHkocHJpbWFyeUNvbnRleHQsIHByb3BlcnR5UGF0aCkgJiYgaXNFbXB0eShmYWxsYmFja0NvbnRleHQsIHByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbnMucHVzaChyZWNvbW1lbmRhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgY29udGV4dCBwYXRoc1xuXHQgKi9cblxuXHRwdWJsaWMgZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMgPSBbdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKV07XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgZmNsQ29udHJvbGxlciA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcjtcblx0XHRjb25zdCBpc0ZjbEVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLl9pc0ZjbEVuYWJsZWQoKTtcblx0XHRjb25zdCBpc0Z1bGxTY3JlZW4gPSBpc0ZjbEVuYWJsZWQgPyBmY2xDb250cm9sbGVyLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuaXNGdWxsU2NyZWVuIDogdHJ1ZTtcblx0XHRpZiAoaXNGY2xFbmFibGVkICYmICFpc0Z1bGxTY3JlZW4pIHtcblx0XHRcdGNvbnN0IHJpZ2h0TW9zdENvbnRleHQgPSBmY2xDb250cm9sbGVyLmdldFJpZ2h0bW9zdENvbnRleHQoKTtcblx0XHRcdGlmICghdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMuaW5jbHVkZXMocmlnaHRNb3N0Q29udGV4dD8uZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHR2aXNpYmxlUGFnZUNvbnRleHRQYXRocy5wdXNoKHJpZ2h0TW9zdENvbnRleHQ/LmdldFBhdGgoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB2aXNpYmxlUGFnZUNvbnRleHRQYXRocztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhzIFBhdGhzIG9mIHRoZSBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBSZWNvbW1lbmRhdGlvbkRhdGEgZm9yIHZpc2libGUgY29udGV4dHNcblx0ICovXG5cdHB1YmxpYyBnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyhjb250ZXh0UGF0aHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSB7XG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10gPSBbXTtcblx0XHRpZiAoY29udGV4dFBhdGhzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk1vZGVsID0gKHRoaXMudmlldy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldExvY2FsQW5ub3RhdGlvbk1vZGVsKCk7XG5cdFx0XHQvLyBjaGVjayBjb250ZXh0IHBhdGhzIGluIGxvY2FsIGFubm90YXRpb24gbW9kZWxzIHdoaWNoIG1hdGNoIHRvXG5cdFx0XHQvLyAxLiBjdXJyZW50IHBhZ2UgYW5kXG5cdFx0XHQvLyAyLiBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgcGFnZVxuXHRcdFx0Ly8gTmVlZCB0byBjb25zaWRlciBhbHNvIGltbWVkaWF0ZSBjaGlsZHJlblxuXHRcdFx0Ly8gaXRlcmF0ZSBvdmVyIGFsbCBrZXlzXG5cdFx0XHRjb250ZXh0UGF0aHMuZm9yRWFjaCgoY29udGV4dFBhdGgpID0+IHtcblx0XHRcdFx0aWYgKGNvbnRleHRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbEFubm90YXRpb25PYmplY3QgPSBsb2NhbEFubm90YXRpb25Nb2RlbC5nZXRPYmplY3QoY29udGV4dFBhdGgpO1xuXHRcdFx0XHRcdGlmIChsb2NhbEFubm90YXRpb25PYmplY3QpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25PYmplY3QgPSBsb2NhbEFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHRcdCAqIFRoZSBsb2NhbCBhbm5vdGF0aW9uIG9iamVjdCB3aWxsIGJlIG9mIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIDpcblx0XHRcdFx0XHRcdCAqIHtcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25cIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogUHJvcGVydHlOYW1lOiB7XG5cdFx0XHRcdFx0XHQgKiBcdFx0XCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFx0XHRcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy50eXBlQWhlYWRWYWx1ZXNcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQ6eyBjb250ZXh0IH1cblx0XHRcdFx0XHRcdCAqIFx0IH1cblx0XHRcdFx0XHRcdCAqIHJlY29tbWVuZGF0aW9uQ29udGV4dDp7IGNvbnRleHQgfVxuXHRcdFx0XHRcdFx0ICogfVxuXHRcdFx0XHRcdFx0ICpcblx0XHRcdFx0XHRcdCAqIHNvIGluIG9yZGVyIHRvIGdldCB0aGUgcmVjb21tZW5kYXRpb25zIGFzIHBlciBlYWNoIGNvbnRleHQgLSBmb3IgcGFyZW50L2NoaWxkIGVudGl0aWVzIHdlIG5lZWQgdG8gaXRlcmF0ZSBvdmVyIGVhY2gga2V5cyByZWN1cnNpdmVseSBpbiB0aGUgZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QgZnVuY3Rpb24sXG5cdFx0XHRcdFx0XHQgKiBmb3JtIHRoZSBjb3JyZXNwb25kaW5nIHN0cnVjdHVyZSBhbmQgdGhlbiBzZW5kIGl0IGZvciBnZXR0aW5nIHRoZSByZWNvbW1lbmRhdGlvbnMgYWNjb3JkaW5nbHkuXG5cdFx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRcdHRoaXMuZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdCwgb3BlblJlY29tbWVuZGF0aW9ucyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9wZW5SZWNvbW1lbmRhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGFubm90YXRpb25PYmplY3Rcblx0ICogQHBhcmFtIG9wZW5SZWNvbW1lbmRhdGlvbnMgUmVjb21tZW5kYXRpb24gRGF0YVxuXHQgKi9cblxuXHRwcml2YXRlIGZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSk6IHZvaWQge1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdKSB7XG5cdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdID0gYW5ub3RhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGZvciAoY29uc3QgY3VycmVudEtleSBpbiBhbm5vdGF0aW9uT2JqZWN0KSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGFubm90YXRpb25PYmplY3RbY3VycmVudEtleV07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoKGN1cnJlbnRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBPRGF0YVY0Q29udGV4dD4pW1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3RbY3VycmVudEtleV0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9wZW5SZWNvbW1lbmRhdGlvbnMpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIikgfHxcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiKSB8fFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy50eXBlQWhlYWRWYWx1ZXNcIilcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W2N1cnJlbnRLZXldID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qga2V5cyA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEVudGl0eUtleXMoXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIE9EYXRhVjRDb250ZXh0XG5cdFx0XHQpO1xuXHRcdFx0KHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKS5jb250ZXh0SWRlbnRpZmllciA9IGtleXNbXCJzZW1hbnRpY0tleXNcIl1cblx0XHRcdFx0PyBrZXlzW1wic2VtYW50aWNLZXlzXCJdXG5cdFx0XHRcdDoga2V5c1tcInRlY2huaWNhbEtleXNcIl07XG5cdFx0XHR0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0KFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdCxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgT0RhdGFWNENvbnRleHQsXG5cdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnNcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dERhdGEgVGhlIGNvbnRleHQgZGF0YSBvYmplY3QgZm9yIHJlY29tbWVuZGF0aW9uc1xuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25Db250ZXh0IFRoZSByZWNvbW1lbmRhdGlvbiBjb250ZXh0XG5cdCAqIEBwYXJhbSBvcGVuUmVjb21tZW5kYXRpb25zIFJlY29tbWVuZGF0aW9uRGF0YVxuXHQgKiBAcGFyYW0gY29udGV4dEtleSBDb250ZXh0IEtleVxuXHQgKi9cblxuXHRwcml2YXRlIGdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0KFxuXHRcdGNvbnRleHREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdG9wZW5SZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdLFxuXHRcdGNvbnRleHRLZXkgPSBcIlwiXG5cdCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY3VycmVudEtleSBpbiBjb250ZXh0RGF0YSkge1xuXHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gY29udGV4dERhdGFbY3VycmVudEtleV07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlKSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZUlzQ29udGV4dCA9XG5cdFx0XHRcdFx0KGN1cnJlbnRWYWx1ZSBhcyBPRGF0YVY0Q29udGV4dCkuaXNBICYmIChjdXJyZW50VmFsdWUgYXMgT0RhdGFWNENvbnRleHQpLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpO1xuXHRcdFx0XHRpZiAoY3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gY3VycmVudEtleS5zcGxpdChcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCIpWzBdO1xuXHRcdFx0XHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbjogUmVjb21tZW5kYXRpb25EYXRhID0ge1xuXHRcdFx0XHRcdFx0Y29udGV4dDogcmVjb21tZW5kYXRpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBjb250ZXh0S2V5ID8gYCR7Y29udGV4dEtleX0vJHtwcm9wZXJ0eVBhdGh9YCA6IHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdHZhbHVlOiBjdXJyZW50VmFsdWUgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0Y29udGV4dElkZW50aWZpZXI6IChyZWNvbW1lbmRhdGlvbkNvbnRleHQgYXMgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pLmNvbnRleHRJZGVudGlmaWVyLFxuXHRcdFx0XHRcdFx0Y29udGV4dElkZW50aWZpZXJUZXh0OiBbXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZGVzY3JpcHRpb24gPSBjb250ZXh0RGF0YVtgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25gXTtcblx0XHRcdFx0XHRpZiAoZGVzY3JpcHRpb24pIHtcblx0XHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbi50ZXh0ID0gZGVzY3JpcHRpb24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb25zLnB1c2gob3BlblJlY29tbWVuZGF0aW9uKTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY3VycmVudFZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkgJiYgIWN1cnJlbnRWYWx1ZUlzQ29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0XHRcdFx0XHRjdXJyZW50VmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGNvbmZpcm0gcmVjb21tZW5kYXRpb25zIGRpYWxvZy5cblx0ICogQHBhcmFtIGlzU2F2ZSBCb29sZWFuIGZsYWcgd2hpY2ggd291bGQgYmUgc2V0IHRvIHRydWUgaWYgd2UgYXJlIHNhdmluZyB0aGUgZG9jdW1lbnQgYW5kIHdvdWxkIGJlIGZhbHNlIGlmIHdlIGRvIGFwcGx5IGNoYW5nZXNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3b3VsZCByZXNvbHZlIHdpdGggUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiAoQWNjZXB0LCBJZ25vcmUsIENvbnRpbnVlLCBTa2lwcGVkKVxuXHQgKi9cblx0cHVibGljIGFzeW5jIG9wZW4oaXNTYXZlOiBib29sZWFuKTogUHJvbWlzZTxSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIHwgdW5kZWZpbmVkPiB7XG5cdFx0Ly8gY2hlY2sgZm9yIGJ1aWx0LWluIHJlY29tbWVuZGF0aW9uc1xuXHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbnMgPSB0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnMoKTtcblx0XHRpZiAob3BlblJlY29tbWVuZGF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmFkZENvbnRleHRJZGVudGlmaWVyVGV4dChcblx0XHRcdFx0eyByZWNvbW1lbmRhdGlvbkRhdGE6IG9wZW5SZWNvbW1lbmRhdGlvbnMgfSxcblx0XHRcdFx0dGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zID0ge1xuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRhdGE6IG9wZW5SZWNvbW1lbmRhdGlvbnNcblx0XHRcdH07XG5cdFx0XHRhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5vbkJlZm9yZUFjY2VwdFJlY29tbWVuZGF0aW9ucyh0aGlzLmFjY2VwdEFsbFBhcmFtcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGlmIGJ1aWx0LWluIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IGZvdW5kIHRoZW4gY2hlY2sgZm9yIGxlZ2FjeSByZWNvbW1lbmRhdGlvbnMuXG5cdFx0XHRjb25zdCBsZWdhY3lSZWNvbW1lbmRhdGlvbnNFeGlzdCA9ICh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmNoZWNrSWZSZWNvbW1lbmRhdGlvbnNFeGlzdCgpO1xuXHRcdFx0aWYgKGxlZ2FjeVJlY29tbWVuZGF0aW9uc0V4aXN0KSB7XG5cdFx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zID0gYXdhaXQgKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBY2NlcHRBbGxQYXJhbXMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGFjY2VwdE1vZGVsID0gdGhpcy5nZXRBY2NlcHRBbGxNb2RlbCgpO1xuXHRcdHRoaXMudmlldy5zZXRNb2RlbChhY2NlcHRNb2RlbCwgXCJfYWNjZXB0RGlhbG9nTW9kZWxcIik7XG5cdFx0aWYgKCFhY2NlcHRNb2RlbC5nZXREYXRhKCkuaXRlbXM/Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uU2tpcHBlZDtcblx0XHR9XG5cdFx0dGhpcy5pc1NhdmUgPSBpc1NhdmU7XG5cdFx0Y29uc3QgZGlhbG9nID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0ZGlhbG9nPy5zZXRFc2NhcGVIYW5kbGVyKHRoaXMub25Db250aW51ZUVkaXRpbmcuYmluZCh0aGlzKSk7XG5cdFx0dGhpcy52aWV3LmFkZERlcGVuZGVudChkaWFsb2cgYXMgVUk1RWxlbWVudCk7XG5cdFx0ZGlhbG9nPy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgdG8gY2xvc2UgdGhlIGNvbmZpcm1SZWNvbW1lbmRhdGlvbiBkaWFsb2cuXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2cuY3VycmVudD8uY2xvc2UoKTtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5jdXJyZW50Py5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgQWNjZXB0IGFuZCBTYXZlIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgb25BY2NlcHRBbmRTYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBpc0FjY2VwdGVkID0gYXdhaXQgKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuYWNjZXB0UmVjb21tZW5kYXRpb25zKFxuXHRcdFx0XHR0aGlzLmFjY2VwdEFsbFBhcmFtc1xuXHRcdFx0KTtcblx0XHRcdGlmICghaXNBY2NlcHRlZCkge1xuXHRcdFx0XHR0aGlzLnByb21pc2VSZWplY3QoXCJBY2NlcHQgRmFpbGVkXCIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkFjY2VwdCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRMb2cuZXJyb3IoXCJBY2NlcHQgUmVjb21tZW5kYXRpb25zIEZhaWxlZFwiKTtcblx0XHRcdHRoaXMucHJvbWlzZVJlamVjdChcIkFjY2VwdCBGYWlsZWRcIik7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgUmVqZWN0IGFuZCBTYXZlIGJ1dHRvbi5cblx0ICovXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBSZWplY3QgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvbklnbm9yZUFuZFNhdmUoKTogdm9pZCB7XG5cdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSAodGhpcy52aWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwoKTtcblx0XHRjb25zdCByZWplY3RlZFJlY29tbWVuZGF0aW9ucyA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldFByb3BlcnR5KFwiL3JlamVjdGVkUmVjb21tZW5kYXRpb25zXCIpID8/IHt9O1xuXG5cdFx0aWYgKCF0aGlzLmFjY2VwdEFsbFBhcmFtcz8ucmVjb21tZW5kYXRpb25EYXRhKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvY2Vzc2VkQ29udGV4dFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cblx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGF0aW9uIG9mIHRoaXMuYWNjZXB0QWxsUGFyYW1zLnJlY29tbWVuZGF0aW9uRGF0YSkge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSByZWNvbW1lbmRhdGlvbi5jb250ZXh0Py5nZXRQYXRoKCkgPz8gXCJcIjtcblxuXHRcdFx0aWYgKGNvbnRleHRQYXRoICE9PSBcIlwiICYmICFwcm9jZXNzZWRDb250ZXh0UGF0aHMuaGFzKGNvbnRleHRQYXRoKSkge1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uT2JqZWN0ID0gbG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0T2JqZWN0KGNvbnRleHRQYXRoKTtcblxuXHRcdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2YgYW5ub3RhdGlvbk9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdHRoaXMuX3Byb2Nlc3NSZWNvbW1lbmRhdGlvbkNvbnRleHQoXG5cdFx0XHRcdFx0XHRjb250ZXh0UGF0aCxcblx0XHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QsXG5cdFx0XHRcdFx0XHRyZWplY3RlZFJlY29tbWVuZGF0aW9ucyxcblx0XHRcdFx0XHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLFxuXHRcdFx0XHRcdFx0cHJvY2Vzc2VkQ29udGV4dFBhdGhzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMoKTtcblx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uUmVqZWN0KTtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvY2Vzc2VzIGEgc2luZ2xlIHJlY29tbWVuZGF0aW9uIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBUaGUgY29udGV4dCBwYXRoIGJlaW5nIHByb2Nlc3NlZFxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbk9iamVjdCBUaGUgYW5ub3RhdGlvbiBvYmplY3QgZm9yIHRoZSBjb250ZXh0XG5cdCAqIEBwYXJhbSByZWplY3RlZFJlY29tbWVuZGF0aW9ucyBUaGUgcmVqZWN0ZWQgcmVjb21tZW5kYXRpb25zIG9iamVjdFxuXHQgKiBAcGFyYW0gbG9jYWxBbm5vdGF0aW9uTW9kZWwgVGhlIGxvY2FsIGFubm90YXRpb24gbW9kZWxcblx0ICogQHBhcmFtIHByb2Nlc3NlZENvbnRleHRQYXRocyBTZXQgdG8gdHJhY2sgcHJvY2Vzc2VkIGNvbnRleHRzXG5cdCAqL1xuXHRwcml2YXRlIF9wcm9jZXNzUmVjb21tZW5kYXRpb25Db250ZXh0KFxuXHRcdGNvbnRleHRQYXRoOiBzdHJpbmcsXG5cdFx0YW5ub3RhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0cmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsOiBKU09OTW9kZWwsXG5cdFx0cHJvY2Vzc2VkQ29udGV4dFBhdGhzOiBTZXQ8c3RyaW5nPlxuXHQpOiB2b2lkIHtcblx0XHQvLyBCdWlsZCBhIHNoYWxsb3cgY29weSwgdGhlbiBmaWx0ZXIgZm9yIHJlY29tbWVuZGF0aW9uIGtleXMgb25seVxuXHRcdGNvbnN0IHJlamVjdGVkQ29udGV4dERhdGEgPSB0aGlzLl9maWx0ZXJSZWNvbW1lbmRhdGlvbktleXMoYW5ub3RhdGlvbk9iamVjdCk7XG5cblx0XHQvLyBDbGVhciByZWNvbW1lbmRhdGlvbiBwcm9wZXJ0aWVzIGZyb20gbG9jYWwgYW5ub3RhdGlvbiBtb2RlbFxuXHRcdHRoaXMuX2NsZWFyUmVjb21tZW5kYXRpb25Qcm9wZXJ0aWVzKGFubm90YXRpb25PYmplY3QsIGNvbnRleHRQYXRoLCBsb2NhbEFubm90YXRpb25Nb2RlbCk7XG5cblx0XHQvLyBTdG9yZSB0aGUgZmlsdGVyZWQgcmVqZWN0ZWQgY29udGV4dCBpbiByZWplY3RlZFJlY29tbWVuZGF0aW9uc1xuXHRcdHJlamVjdGVkUmVjb21tZW5kYXRpb25zW2NvbnRleHRQYXRoXSA9IHJlamVjdGVkQ29udGV4dERhdGE7XG5cdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnNcIiwgcmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnMpO1xuXG5cdFx0Ly8gTWFyayB0aGlzIGNvbnRleHRQYXRoIGFzIHByb2Nlc3NlZFxuXHRcdHByb2Nlc3NlZENvbnRleHRQYXRocy5hZGQoY29udGV4dFBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbHRlcnMgYW5ub3RhdGlvbiBvYmplY3QgdG8ga2VlcCBvbmx5IHJlY29tbWVuZGF0aW9uIGtleXMuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uT2JqZWN0IFRoZSBzb3VyY2UgYW5ub3RhdGlvbiBvYmplY3Rcblx0ICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgb25seSByZWNvbW1lbmRhdGlvbi1yZWxhdGVkIGtleXNcblx0ICovXG5cdHByaXZhdGUgX2ZpbHRlclJlY29tbWVuZGF0aW9uS2V5cyhhbm5vdGF0aW9uT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0XHRjb25zdCByZWplY3RlZENvbnRleHREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdCkpIHtcblx0XHRcdGlmIChrZXkuaW5jbHVkZXMoXCJ1aTUuZmUucmVjb21tZW5kYXRpb25zXCIpKSB7XG5cdFx0XHRcdHJlamVjdGVkQ29udGV4dERhdGFba2V5XSA9IGFubm90YXRpb25PYmplY3Rba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVqZWN0ZWRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgcmVjb21tZW5kYXRpb24gcHJvcGVydGllcyBmcm9tIGxvY2FsIGFubm90YXRpb24gbW9kZWwuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uT2JqZWN0IFRoZSBhbm5vdGF0aW9uIG9iamVjdCBjb250YWluaW5nIGtleXMgdG8gY2xlYXJcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoIFRoZSBjb250ZXh0IHBhdGggZm9yIHByb3BlcnR5IGNsZWFyaW5nXG5cdCAqIEBwYXJhbSBsb2NhbEFubm90YXRpb25Nb2RlbCBUaGUgbG9jYWwgYW5ub3RhdGlvbiBtb2RlbFxuXHQgKi9cblx0cHJpdmF0ZSBfY2xlYXJSZWNvbW1lbmRhdGlvblByb3BlcnRpZXMoXG5cdFx0YW5ub3RhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRsb2NhbEFubm90YXRpb25Nb2RlbDogSlNPTk1vZGVsXG5cdCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFubm90YXRpb25PYmplY3QpKSB7XG5cdFx0XHRpZiAoa2V5LmluY2x1ZGVzKFwidWk1LmZlLnJlY29tbWVuZGF0aW9uc1wiKSkge1xuXHRcdFx0XHRsb2NhbEFubm90YXRpb25Nb2RlbC5zZXRQcm9wZXJ0eShgJHtjb250ZXh0UGF0aH0vJHtrZXl9YCwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgQ29udGludWUgRWRpdGluZyBidXR0b24uXG5cdCAqL1xuXHRwcml2YXRlIG9uQ29udGludWVFZGl0aW5nKCk6IHZvaWQge1xuXHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Db250aW51ZSk7XG5cdFx0dGhpcy5jbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGxhYmVsIG9yIG5hbWUgb2YgdGhlIEZpZWxkIGJhc2VkIG9uIGl0cyBwcm9wZXJ0eSBwYXRoLlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBsYWJlbCBvZiB0aGUgRmllbGQuXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpZWxkTmFtZSh0YXJnZXRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGg8UHJvcGVydHk+KFxuXHRcdFx0dGFyZ2V0UGF0aCxcblx0XHRcdHRoaXMudmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWxcblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fFxuXHRcdFx0dGFyZ2V0UGF0aC5zcGxpdChcIi9cIilbdGFyZ2V0UGF0aC5zcGxpdChcIi9cIikubGVuZ3RoIC0gMV1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGV4dCBmb3IgcmVjb21tZW5kYXRpb24gYmFzZWQgb24gZGlzcGxheSBtb2RlLlxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25cblx0ICogQHBhcmFtIGRpc3BsYXlNb2RlXG5cdCAqIEByZXR1cm5zIFRleHQgZm9yIGEgcmVjb21tZW5kYXRpb25cblx0ICovXG5cdHByaXZhdGUgZ2V0VGV4dChyZWNvbW1lbmRhdGlvbjogU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlLCBkaXNwbGF5TW9kZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAocmVjb21tZW5kYXRpb24udGV4dCB8fCByZWNvbW1lbmRhdGlvbi52YWx1ZSkge1xuXHRcdFx0c3dpdGNoIChkaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udGV4dCE7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMocmVjb21tZW5kYXRpb24udGV4dCwgcmVjb21tZW5kYXRpb24udmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHJlY29tbWVuZGF0aW9uLnZhbHVlLCByZWNvbW1lbmRhdGlvbi50ZXh0KTtcblx0XHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uLnZhbHVlITtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uLnZhbHVlIHx8IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBCdXR0b24gd2l0aCBnaXZlbiB0ZXh0LCB0eXBlIGFuZCBwcmVzc0hhbmRsZXIuXG5cdCAqIEBwYXJhbSB0ZXh0IFRleHQgZm9yIHRoZSBidXR0b25cblx0ICogQHBhcmFtIHR5cGUgVHlwZSBvZiB0aGUgYnV0dG9uXG5cdCAqIEBwYXJhbSBwcmVzc0hhbmRsZXIgUHJlc3MgSGFuZGxlciBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcmV0dXJucyBCdXR0b24gd2l0aCB0aGUgZ2l2ZW4gc2V0dGluZ3Ncblx0ICovXG5cdHByaXZhdGUgZ2V0QnV0dG9uKHRleHQ6IHN0cmluZywgdHlwZTogc3RyaW5nLCBwcmVzc0hhbmRsZXI6IEV2ZW50SGFuZGxlcik6IEJ1dHRvbiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxCdXR0b24gdGV4dD17dGV4dH0gdHlwZT17dHlwZX0gd2lkdGg9e1wiYXV0b1wifSBwcmVzcz17cHJlc3NIYW5kbGVyfT5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8RmxleEl0ZW1EYXRhIG1pbldpZHRoPXtcIjEwMCVcIn0+PC9GbGV4SXRlbURhdGE+XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgRm9vdGVyIHdpdGggQnV0dG9ucy5cblx0ICogQHJldHVybnMgRm9vdGVyXG5cdCAqL1xuXG5cdHByaXZhdGUgZ2V0Rm9vdGVyKCk6IFRvb2xiYXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VG9vbGJhcj5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0RGlhbG9nQnV0dG9uVGV4dCh0aGlzLmlzU2F2ZSwgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5BY2NlcHQpLFxuXHRcdFx0XHRcdFx0XHRcdFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25BY2NlcHRBbmRTYXZlLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0QnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2dldERpYWxvZ0J1dHRvblRleHQodGhpcy5pc1NhdmUsIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uUmVqZWN0KSxcblx0XHRcdFx0XHRcdFx0XHRcIkdob3N0XCIsXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbklnbm9yZUFuZFNhdmUuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19DT05USU5VRV9FRElUSU5HXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFwiR2hvc3RcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQ29udGludWVFZGl0aW5nLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvVG9vbGJhcj5cblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0RGlhbG9nQnV0dG9uVGV4dChzYXZlOiBib29sZWFuLCByZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uOiBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uKTogc3RyaW5nIHtcblx0XHRjb25zdCBpc0FjY2VwdEJ1dHRvbiA9IHJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gPT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0O1xuXHRcdGlmIChzYXZlKSB7XG5cdFx0XHRjb25zdCBpc0NyZWF0ZU1vZGUgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiY3JlYXRlTW9kZVwiKTtcblxuXHRcdFx0aWYgKGlzQ3JlYXRlTW9kZSkge1xuXHRcdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUX0FORF9DUkVBVEVcIilcblx0XHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfUkVKRUNUX0FORF9DUkVBVEVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBpc0FjY2VwdEJ1dHRvblxuXHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUX0FORF9TQVZFXCIpXG5cdFx0XHRcdDogdGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19SRUpFQ1RfQU5EX1NBVkVcIik7XG5cdFx0fVxuXG5cdFx0Ly8gTm90IHNhdmluZyDigJMgcGxhaW4gQWNjZXB0L0lnbm9yZVxuXHRcdHJldHVybiBpc0FjY2VwdEJ1dHRvblxuXHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVFwiKVxuXHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1JFSkVDVFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjcmVhdGVkIGEgSlNPTiBNb2RlbCBmb3IgdGhlIGFjY2VwdCBhbGwgZGlhbG9nIGRhdGEuXG5cdCAqIEByZXR1cm5zIFRoZSBKU09OIE1vZGVsIGZvciBhY2NlcHQgYWxsIGRpYWxvZy5cblx0ICovXG5cdGdldEFjY2VwdEFsbE1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0Y29uc3QgaXRlbXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSBvZiB0aGlzLmFjY2VwdEFsbFBhcmFtcz8ucmVjb21tZW5kYXRpb25EYXRhIHx8IFtdKSB7XG5cdFx0XHRjb25zdCBlbnRpdHlOYW1lTGFiZWwgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldEVudGl0eU5hbWUocmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IGlkZW50aWZpZXJUZXh0cyA9XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHQgJiYgcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyVGV4dC5sZW5ndGggPiAwXG5cdFx0XHRcdFx0PyBgJHtlbnRpdHlOYW1lTGFiZWx9ICgke3JlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHR9KWBcblx0XHRcdFx0XHQ6IGVudGl0eU5hbWVMYWJlbDtcblxuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YS52YWx1ZSB8fCByZWNvbW1lbmRhdGlvbkRhdGEudGV4dCkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQ/LmdldFBhdGgoKSArIFwiL1wiICsgcmVjb21tZW5kYXRpb25EYXRhLnByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aChcblx0XHRcdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0XHRcdHRoaXMudmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWxcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgbGlzdERhdGEgPSB7XG5cdFx0XHRcdFx0ZmllbGROYW1lOiB0aGlzLmdldEZpZWxkTmFtZSh0YXJnZXRQYXRoKS52YWx1ZU9mKCksXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZTogdGhpcy5nZXRUZXh0KHJlY29tbWVuZGF0aW9uRGF0YSwgZGlzcGxheU1vZGUpLFxuXHRcdFx0XHRcdGlkZW50aWZpZXJUZXh0czogaWRlbnRpZmllclRleHRzXG5cdFx0XHRcdH07XG5cdFx0XHRcdGl0ZW1zLnB1c2gobGlzdERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhY2NlcHRNb2RlbC5zZXREYXRhKHsgaXRlbXM6IGl0ZW1zIH0pO1xuXHRcdHJldHVybiBhY2NlcHRNb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBncm91cHMgdGhlIGNvbnRleHRzIGFjY29yZGluZyB0byB0aGUgaWRlbnRpZmllciB0ZXh0cy5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGl0ZW1cblx0ICogQHJldHVybnMgVGhlIHRleHQgb2YgdGhlIGdyb3VwXG5cdCAqL1xuXHRnZXRHcm91cChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJpZGVudGlmaWVyVGV4dHNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGluIHRoZSBhY2NlcHQgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBBIG1lc3NhZ2Ugd2l0aCB0aGUgZGVzaXJlZCB0ZXh0LlxuXHQgKi9cblx0Z2V0TWVzc2FnZSgpOiBUZXh0IHtcblx0XHRjb25zdCBhY2NlcHRBbGxEYXRhID0gKHRoaXMudmlldy5nZXRNb2RlbChcIl9hY2NlcHREaWFsb2dNb2RlbFwiKSBhcyBKU09OTW9kZWwpPy5nZXREYXRhKCk/Lml0ZW1zO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZXh0ID1cblx0XHRcdGFjY2VwdEFsbERhdGEubGVuZ3RoID4gMVxuXHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVFwiLCBbYWNjZXB0QWxsRGF0YS5sZW5ndGhdKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVF9TSU5HVUxBUlwiKTtcblx0XHRyZXR1cm4gPFRleHQgdGV4dD17bWVzc2FnZVRleHR9IC8+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBhcyBjb250ZW50IG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRnZXREaWFsb2dDb250ZW50KCk6IExpc3Qge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlzdCBpdGVtcz17eyBtb2RlbDogXCJfYWNjZXB0RGlhbG9nTW9kZWxcIiwgcGF0aDogXCIvaXRlbXNcIiwgc29ydGVyOiBuZXcgU29ydGVyKFwiaWRlbnRpZmllclRleHRzXCIsIGZhbHNlLCB0aGlzLmdldEdyb3VwKSB9fT5cblx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtPlxuXHRcdFx0XHRcdDxIQm94IGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD1cIntfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGROYW1lfToge19hY2NlcHREaWFsb2dNb2RlbD5maWVsZFZhbHVlfVwiIC8+XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdFx0PC9MaXN0PlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1aWxkaW5nIGJsb2NrIHJlbmRlciBmdW5jdGlvbi5cblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZ1xuXHQgKi9cblx0Z2V0Q29udGVudCgpOiBEaWFsb2cge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RJVExFXCIpfVxuXHRcdFx0XHRzdGF0ZT17VmFsdWVTdGF0ZS5JbmZvcm1hdGlvbn1cblx0XHRcdFx0dHlwZT17XCJNZXNzYWdlXCJ9XG5cdFx0XHRcdHJlZj17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2d9XG5cdFx0XHRcdHJlc2l6YWJsZT17XCJ0cnVlXCJ9XG5cdFx0XHRcdGNvbnRlbnRXaWR0aD17XCIzNXJlbVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldE1lc3NhZ2UoKX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0RGlhbG9nQ29udGVudCgpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmb290ZXI6IDw+e3RoaXMuZ2V0Rm9vdGVyKCl9PC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpIGFzIERpYWxvZztcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBcUNBLE1BQU1BLGdCQUFnQixHQUFHQyxTQUFTLENBQUNELGdCQUFnQjtFQUFDLElBR3hDRSw0QkFBNEIsMEJBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUE1QkEsNEJBQTRCO0lBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUFBLE9BQTVCQSw0QkFBNEI7RUFBQTtFQUFBQyxRQUFBLENBQUFELDRCQUFBLEdBQUFBLDRCQUFBO0VBQUEsSUFRM0JFLDJCQUEyQixJQUFBQyxJQUFBLEdBRHZDQyxjQUFjLENBQUMsa0VBQWtFLENBQUMsRUFBQUMsS0FBQSxHQVNqRkMsZUFBZSxDQUFDLENBQUMsRUFBQUgsSUFBQSxDQUFBSSxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGNBQUE7SUFQbEIsU0FBQVAsNEJBQVlRLEtBQWdELEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQzdEQSxLQUFBLEdBQUFGLGNBQUEsQ0FBQUcsSUFBQSxPQUFNRixLQUFLLENBQUM7TUFBQ0csMEJBQUEsQ0FBQUYsS0FBQSxpQ0FBQUcsV0FBQSxFQUFBSCxLQUFBO01BQ2JBLEtBQUEsQ0FBS0ksSUFBSSxHQUFHTCxLQUFLLENBQUNLLElBQVk7TUFDOUJKLEtBQUEsQ0FBS0ssZ0JBQWdCLEdBQUdOLEtBQUssQ0FBQ00sZ0JBQWdCO01BQzlDTCxLQUFBLENBQUtNLHdDQUF3QyxHQUFHQyxnQkFBZ0IsQ0FBQ1AsS0FBQSxDQUFLSSxJQUFJLENBQUM7TUFBQyxPQUFBSixLQUFBO0lBQzdFO0lBQUNWLFFBQUEsQ0FBQUMsMkJBQUEsR0FBQUEsMkJBQUE7SUFBQWlCLGNBQUEsQ0FBQWpCLDJCQUFBLEVBQUFPLGNBQUE7SUFBQSxJQUFBVyxNQUFBLEdBQUFsQiwyQkFBQSxDQUFBbUIsU0FBQTtJQWlCRDtBQUNEO0FBQ0E7SUFHQztBQUNEO0FBQ0E7SUFHQztBQUNEO0FBQ0E7QUFDQTtJQUhDRCxNQUFBLENBS09FLHNCQUFzQixHQUE3QixTQUFPQSxzQkFBc0JBLENBQUEsRUFBeUI7TUFDckQsTUFBTUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDQywwQkFBMEIsQ0FBQyxDQUFDO01BQzdELE1BQU1DLG1CQUFtQixHQUFHLElBQUksQ0FBQ0MsNENBQTRDLENBQUNILG1CQUFtQixDQUFDO01BQ2xHLE1BQU1JLGVBQXFDLEdBQUcsRUFBRTtNQUVoRCxJQUFJRixtQkFBbUIsQ0FBQ0csTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQ0gsbUJBQW1CLENBQUNJLE9BQU8sQ0FBRUMsY0FBYyxJQUFLO1VBQy9DLE1BQU1DLGNBQWMsR0FBR0QsY0FBYyxDQUFDRSxPQUFPO1VBQzdDLE1BQU1DLGVBQWUsR0FBRyxJQUFJLENBQUNsQixJQUFJLENBQUNtQixpQkFBaUIsQ0FBQyxDQUFDO1VBQ3JELE1BQU1DLFlBQVksR0FBR0wsY0FBYyxDQUFDSyxZQUFZLElBQUksRUFBRTtVQUV0RCxNQUFNQyxPQUFPLEdBQUdBLENBQUNDLEdBQStCLEVBQUVDLElBQVksS0FBYztZQUMzRSxNQUFNQyxLQUFLLEdBQUdGLEdBQUcsRUFBRUcsV0FBVyxDQUFDRixJQUFJLENBQUM7WUFDcEMsT0FBT0MsS0FBSyxLQUFLLElBQUksSUFBSUEsS0FBSyxLQUFLRSxTQUFTLElBQUlGLEtBQUssS0FBSyxFQUFFO1VBQzdELENBQUM7O1VBRUQ7VUFDQSxJQUFJSCxPQUFPLENBQUNMLGNBQWMsRUFBRUksWUFBWSxDQUFDLElBQUlDLE9BQU8sQ0FBQ0gsZUFBZSxFQUFFRSxZQUFZLENBQUMsRUFBRTtZQUNwRlIsZUFBZSxDQUFDZSxJQUFJLENBQUNaLGNBQWMsQ0FBQztVQUNyQztRQUNELENBQUMsQ0FBQztNQUNIO01BQ0EsT0FBT0gsZUFBZTtJQUN2Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFQLE1BQUEsQ0FLT0ksMEJBQTBCLEdBQWpDLFNBQU9BLDBCQUEwQkEsQ0FBQSxFQUEyQjtNQUMzRCxNQUFNbUIsdUJBQXVCLEdBQUcsQ0FBQyxJQUFJLENBQUM1QixJQUFJLENBQUNtQixpQkFBaUIsQ0FBQyxDQUFDLEVBQUVVLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDMUUsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQzlCLElBQUksQ0FBQytCLGFBQWEsQ0FBQyxDQUFtQjtNQUM5RCxNQUFNQyxhQUFhLEdBQUdGLFVBQVUsQ0FBQ0csZUFBZSxDQUFDLENBQUMsQ0FBQ0MscUJBQXFCLENBQUMsQ0FBa0I7TUFDM0YsTUFBTUMsWUFBWSxHQUFHTCxVQUFVLENBQUNHLGVBQWUsQ0FBQyxDQUFDLENBQUNHLGFBQWEsQ0FBQyxDQUFDO01BQ2pFLE1BQU1DLFlBQVksR0FBR0YsWUFBWSxHQUFHSCxhQUFhLENBQUNNLFNBQVMsQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUMsQ0FBQ0YsWUFBWSxHQUFHLElBQUk7TUFDckcsSUFBSUYsWUFBWSxJQUFJLENBQUNFLFlBQVksRUFBRTtRQUNsQyxNQUFNRyxnQkFBZ0IsR0FBR1IsYUFBYSxDQUFDUyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQ2IsdUJBQXVCLENBQUNjLFFBQVEsQ0FBQ0YsZ0JBQWdCLEVBQUVYLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUNuRUQsdUJBQXVCLENBQUNELElBQUksQ0FBQ2EsZ0JBQWdCLEVBQUVYLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUQ7TUFDRDtNQUNBLE9BQU9ELHVCQUF1QjtJQUMvQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXZCLE1BQUEsQ0FLT00sNENBQTRDLEdBQW5ELFNBQU9BLDRDQUE0Q0EsQ0FBQ2dDLFlBQW9DLEVBQXdCO01BQy9HLE1BQU1qQyxtQkFBeUMsR0FBRyxFQUFFO01BQ3BELElBQUlpQyxZQUFZLENBQUM5QixNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzVCLE1BQU0rQixvQkFBb0IsR0FBSSxJQUFJLENBQUM1QyxJQUFJLENBQUM2QyxRQUFRLENBQUMsQ0FBQyxDQUFnQkMsdUJBQXVCLENBQUMsQ0FBQztRQUMzRjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0FILFlBQVksQ0FBQzdCLE9BQU8sQ0FBRWlDLFdBQVcsSUFBSztVQUNyQyxJQUFJQSxXQUFXLEtBQUtyQixTQUFTLEVBQUU7WUFDOUIsTUFBTXNCLHFCQUFxQixHQUFHSixvQkFBb0IsQ0FBQ0ssU0FBUyxDQUFDRixXQUFXLENBQUM7WUFDekUsSUFBSUMscUJBQXFCLEVBQUU7Y0FDMUIsTUFBTUUsZ0JBQWdCLEdBQUdGLHFCQUFxQjtjQUM5QztBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Y0FDTSxJQUFJLENBQUNHLDBCQUEwQixDQUFDRCxnQkFBZ0IsRUFBRXhDLG1CQUFtQixDQUFDO1lBQ3ZFO1VBQ0Q7UUFDRCxDQUFDLENBQUM7TUFDSDtNQUNBLE9BQU9BLG1CQUFtQjtJQUMzQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQUwsTUFBQSxDQU1ROEMsMEJBQTBCLEdBQWxDLFNBQVFBLDBCQUEwQkEsQ0FBQ0QsZ0JBQXlDLEVBQUV4QyxtQkFBeUMsRUFBUTtNQUM5SCxJQUFJd0MsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsRUFBRTtRQUM5QyxNQUFNRSxvQkFBNkMsR0FBRyxDQUFDLENBQUM7UUFDeERBLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLEdBQUdGLGdCQUFnQixDQUFDLHVCQUF1QixDQUFtQjtRQUMzRyxLQUFLLE1BQU1HLFVBQVUsSUFBSUgsZ0JBQWdCLEVBQUU7VUFDMUMsTUFBTUksWUFBWSxHQUFHSixnQkFBZ0IsQ0FBQ0csVUFBVSxDQUFDO1VBQ2pELElBQUlDLFlBQVksRUFBRTtZQUNqQixJQUFLQSxZQUFZLENBQW9DLHVCQUF1QixDQUFDLEVBQUU7Y0FDOUUsSUFBSSxDQUFDSCwwQkFBMEIsQ0FBQ0QsZ0JBQWdCLENBQUNHLFVBQVUsQ0FBQyxFQUE2QjNDLG1CQUFtQixDQUFDO1lBQzlHLENBQUMsTUFBTSxJQUNOMkMsVUFBVSxDQUFDWCxRQUFRLENBQUMsMkNBQTJDLENBQUMsSUFDaEVXLFVBQVUsQ0FBQ1gsUUFBUSxDQUFDLGlEQUFpRCxDQUFDLElBQ3RFVyxVQUFVLENBQUNYLFFBQVEsQ0FBQywwQ0FBMEMsQ0FBQyxFQUM5RDtjQUNEVSxvQkFBb0IsQ0FBQ0MsVUFBVSxDQUFDLEdBQUdDLFlBQVk7WUFDaEQ7VUFDRDtRQUNEO1FBQ0EsTUFBTUMsSUFBSSxHQUFHQyxrQkFBa0IsQ0FBQ0Msb0NBQW9DLENBQ25FTCxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FDN0MsQ0FBQztRQUNBQSxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFnQ00saUJBQWlCLEdBQUdILElBQUksQ0FBQyxjQUFjLENBQUMsR0FDbkhBLElBQUksQ0FBQyxjQUFjLENBQUMsR0FDcEJBLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDeEIsSUFBSSxDQUFDSSxnQ0FBZ0MsQ0FDcENQLG9CQUFvQixFQUNwQkEsb0JBQW9CLENBQUMsdUJBQXVCLENBQUMsRUFDN0MxQyxtQkFDRCxDQUFDO01BQ0Y7SUFDRDtJQUNBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQUwsTUFBQSxDQVFRc0QsZ0NBQWdDLEdBQXhDLFNBQVFBLGdDQUFnQ0EsQ0FDdkNDLFdBQW9DLEVBQ3BDQyxxQkFBcUMsRUFDckNuRCxtQkFBeUMsRUFFbEM7TUFBQSxJQURQb0QsVUFBVSxHQUFBQyxTQUFBLENBQUFsRCxNQUFBLFFBQUFrRCxTQUFBLFFBQUFyQyxTQUFBLEdBQUFxQyxTQUFBLE1BQUcsRUFBRTtNQUVmLEtBQUssTUFBTVYsVUFBVSxJQUFJTyxXQUFXLEVBQUU7UUFDckMsTUFBTU4sWUFBWSxHQUFHTSxXQUFXLENBQUNQLFVBQVUsQ0FBQztRQUM1QyxJQUFJQyxZQUFZLEVBQUU7VUFDakIsTUFBTVUscUJBQXFCLEdBQ3pCVixZQUFZLENBQW9CVyxHQUFHLElBQUtYLFlBQVksQ0FBb0JXLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQztVQUM5RyxJQUFJWixVQUFVLENBQUNYLFFBQVEsQ0FBQywyQ0FBMkMsQ0FBQyxFQUFFO1lBQ3JFLE1BQU10QixZQUFZLEdBQUdpQyxVQUFVLENBQUNhLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRixNQUFNQyxrQkFBc0MsR0FBRztjQUM5Q2xELE9BQU8sRUFBRTRDLHFCQUFxQjtjQUM5QnpDLFlBQVksRUFBRTBDLFVBQVUsR0FBRyxHQUFHQSxVQUFVLElBQUkxQyxZQUFZLEVBQUUsR0FBR0EsWUFBWTtjQUN6RUksS0FBSyxFQUFFOEIsWUFBc0I7Y0FDN0JJLGlCQUFpQixFQUFHRyxxQkFBcUIsQ0FBZ0NILGlCQUFpQjtjQUMxRlUscUJBQXFCLEVBQUU7WUFDeEIsQ0FBQztZQUNELE1BQU1DLFdBQVcsR0FBR1QsV0FBVyxDQUFDLEdBQUd4QyxZQUFZLGlEQUFpRCxDQUFDO1lBQ2pHLElBQUlpRCxXQUFXLEVBQUU7Y0FDaEJGLGtCQUFrQixDQUFDRyxJQUFJLEdBQUdELFdBQXFCO1lBQ2hEO1lBQ0EzRCxtQkFBbUIsQ0FBQ2lCLElBQUksQ0FBQ3dDLGtCQUFrQixDQUFDO1VBQzdDLENBQUMsTUFBTSxJQUFJLE9BQU9iLFlBQVksS0FBSyxRQUFRLElBQUksQ0FBQ2lCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDbEIsWUFBWSxDQUFDLElBQUksQ0FBQ1UscUJBQXFCLEVBQUU7WUFDdEcsSUFBSSxDQUFDTCxnQ0FBZ0MsQ0FDcENMLFlBQVksRUFDWk8scUJBQXFCLEVBQ3JCbkQsbUJBQW1CLEVBQ25CMkMsVUFDRCxDQUFDO1VBQ0Y7UUFDRDtNQUNEO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFoRCxNQUFBLENBS2FvRSxJQUFJLEdBQWpCLGVBQWFBLElBQUlBLENBQUNDLE1BQWUsRUFBcUQ7TUFDckY7TUFDQSxNQUFNaEUsbUJBQW1CLEdBQUcsSUFBSSxDQUFDSCxzQkFBc0IsQ0FBQyxDQUFDO01BQ3pELElBQUlHLG1CQUFtQixDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ25DOEQsNEJBQTRCLENBQUNDLHdCQUF3QixDQUNwRDtVQUFFQyxrQkFBa0IsRUFBRW5FO1FBQW9CLENBQUMsRUFDM0MsSUFBSSxDQUFDVixJQUFJLENBQUNtQixpQkFBaUIsQ0FBQyxDQUFDLEVBQUVVLE9BQU8sQ0FBQyxDQUN4QyxDQUFDO1FBQ0QsSUFBSSxDQUFDaUQsZUFBZSxHQUFHO1VBQ3RCRCxrQkFBa0IsRUFBRW5FO1FBQ3JCLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDVixJQUFJLEVBQUUrQixhQUFhLENBQUMsQ0FBQyxFQUFvQm5CLGVBQWUsQ0FBQ21FLDZCQUE2QixDQUFDLElBQUksQ0FBQ0QsZUFBZSxDQUFDO01BQ3pILENBQUMsTUFBTTtRQUNOO1FBQ0EsTUFBTUUsMEJBQTBCLEdBQUcsQ0FBQyxJQUFJLENBQUNoRixJQUFJLEVBQUUrQixhQUFhLENBQUMsQ0FBQyxFQUFvQm5CLGVBQWUsQ0FBQ3FFLDJCQUEyQixDQUFDLENBQUM7UUFDL0gsSUFBSUQsMEJBQTBCLEVBQUU7VUFDL0IsSUFBSSxDQUFDRixlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQzlFLElBQUksRUFBRStCLGFBQWEsQ0FBQyxDQUFDLEVBQW9CbkIsZUFBZSxDQUFDc0Usb0JBQW9CLENBQUMsQ0FBQztRQUNuSCxDQUFDLE1BQU07VUFDTixPQUFPeEQsU0FBUztRQUNqQjtNQUNEO01BQ0EsTUFBTXlELFdBQVcsR0FBRyxJQUFJLENBQUNDLGlCQUFpQixDQUFDLENBQUM7TUFDNUMsSUFBSSxDQUFDcEYsSUFBSSxDQUFDcUYsUUFBUSxDQUFDRixXQUFXLEVBQUUsb0JBQW9CLENBQUM7TUFDckQsSUFBSSxDQUFDQSxXQUFXLENBQUNHLE9BQU8sQ0FBQyxDQUFDLENBQUNDLEtBQUssRUFBRTFFLE1BQU0sRUFBRTtRQUN6QyxPQUFPNUIsNEJBQTRCLENBQUN1RyxPQUFPO01BQzVDO01BQ0EsSUFBSSxDQUFDZCxNQUFNLEdBQUdBLE1BQU07TUFDcEIsTUFBTWUsTUFBTSxHQUFHLElBQUksQ0FBQ0MsVUFBVSxDQUFDLENBQUM7TUFDaENELE1BQU0sRUFBRUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzNELElBQUksQ0FBQzdGLElBQUksQ0FBQzhGLFlBQVksQ0FBQ0wsTUFBb0IsQ0FBQztNQUM1Q0EsTUFBTSxFQUFFaEIsSUFBSSxDQUFDLENBQUM7TUFDZCxPQUFPLElBQUlzQixPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7UUFDdkMsSUFBSSxDQUFDQyxjQUFjLEdBQUdGLE9BQU87UUFDN0IsSUFBSSxDQUFDRyxhQUFhLEdBQUdGLE1BQU07TUFDNUIsQ0FBQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBNUYsTUFBQSxDQUlPK0YsS0FBSyxHQUFaLFNBQU9BLEtBQUtBLENBQUEsRUFBUztNQUNwQixJQUFJLENBQUNDLDJCQUEyQixDQUFDQyxPQUFPLEVBQUVGLEtBQUssQ0FBQyxDQUFDO01BQ2pELElBQUksQ0FBQ0MsMkJBQTJCLENBQUNDLE9BQU8sRUFBRUMsT0FBTyxDQUFDLENBQUM7SUFDcEQ7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQWxHLE1BQUEsQ0FHY21HLGVBQWUsR0FBN0IsZUFBY0EsZUFBZUEsQ0FBQSxFQUFrQjtNQUM5QyxJQUFJO1FBQ0gsTUFBTUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUN6RyxJQUFJLEVBQUUrQixhQUFhLENBQUMsQ0FBQyxFQUFvQm5CLGVBQWUsQ0FBQzhGLHFCQUFxQixDQUM1RyxJQUFJLENBQUM1QixlQUNOLENBQUM7UUFDRCxJQUFJLENBQUMyQixVQUFVLEVBQUU7VUFDaEIsSUFBSSxDQUFDTixhQUFhLENBQUMsZUFBZSxDQUFDO1FBQ3BDO1FBQ0EsSUFBSSxDQUFDRCxjQUFjLENBQUNqSCw0QkFBNEIsQ0FBQzBILE1BQU0sQ0FBQztNQUN6RCxDQUFDLENBQUMsTUFBTTtRQUNQQyxHQUFHLENBQUNDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztRQUMxQyxJQUFJLENBQUNWLGFBQWEsQ0FBQyxlQUFlLENBQUM7TUFDcEMsQ0FBQyxTQUFTO1FBQ1QsSUFBSSxDQUFDQyxLQUFLLENBQUMsQ0FBQztNQUNiO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0lBQ0M7QUFDRDtBQUNBLE9BRkM7SUFBQS9GLE1BQUEsQ0FHUXlHLGVBQWUsR0FBdkIsU0FBUUEsZUFBZUEsQ0FBQSxFQUFTO01BQy9CLE1BQU1sRSxvQkFBb0IsR0FBSSxJQUFJLENBQUM1QyxJQUFJLENBQUM2QyxRQUFRLENBQUMsQ0FBQyxDQUFnQkMsdUJBQXVCLENBQUMsQ0FBQztNQUMzRixNQUFNaUUsdUJBQXVCLEdBQUduRSxvQkFBb0IsQ0FBQ25CLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUVsRyxJQUFJLENBQUMsSUFBSSxDQUFDcUQsZUFBZSxFQUFFRCxrQkFBa0IsRUFBRTtRQUM5QztNQUNEO01BRUEsTUFBTW1DLHFCQUFxQixHQUFHLElBQUlDLEdBQUcsQ0FBUyxDQUFDO01BRS9DLEtBQUssTUFBTWxHLGNBQWMsSUFBSSxJQUFJLENBQUMrRCxlQUFlLENBQUNELGtCQUFrQixFQUFFO1FBQ3JFLE1BQU05QixXQUFXLEdBQUdoQyxjQUFjLENBQUNFLE9BQU8sRUFBRVksT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFO1FBRTNELElBQUlrQixXQUFXLEtBQUssRUFBRSxJQUFJLENBQUNpRSxxQkFBcUIsQ0FBQ0UsR0FBRyxDQUFDbkUsV0FBVyxDQUFDLEVBQUU7VUFDbEUsTUFBTUcsZ0JBQWdCLEdBQUdOLG9CQUFvQixDQUFDSyxTQUFTLENBQUNGLFdBQVcsQ0FBQztVQUVwRSxJQUFJRyxnQkFBZ0IsS0FBSyxJQUFJLElBQUksT0FBT0EsZ0JBQWdCLEtBQUssUUFBUSxFQUFFO1lBQ3RFLElBQUksQ0FBQ2lFLDZCQUE2QixDQUNqQ3BFLFdBQVcsRUFDWEcsZ0JBQWdCLEVBQ2hCNkQsdUJBQXVCLEVBQ3ZCbkUsb0JBQW9CLEVBQ3BCb0UscUJBQ0QsQ0FBQztVQUNGO1FBQ0Q7TUFDRDtNQUVBLENBQUMsSUFBSSxDQUFDaEgsSUFBSSxFQUFFK0IsYUFBYSxDQUFDLENBQUMsRUFBb0JuQixlQUFlLENBQUN3RywrQkFBK0IsQ0FBQyxDQUFDO01BQ2hHLElBQUksQ0FBQ2xCLGNBQWMsQ0FBQ2pILDRCQUE0QixDQUFDb0ksTUFBTSxDQUFDO01BQ3hELElBQUksQ0FBQ2pCLEtBQUssQ0FBQyxDQUFDO0lBQ2I7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUEvRixNQUFBLENBUVE4Ryw2QkFBNkIsR0FBckMsU0FBUUEsNkJBQTZCQSxDQUNwQ3BFLFdBQW1CLEVBQ25CRyxnQkFBeUMsRUFDekM2RCx1QkFBZ0QsRUFDaERuRSxvQkFBK0IsRUFDL0JvRSxxQkFBa0MsRUFDM0I7TUFDUDtNQUNBLE1BQU1NLG1CQUFtQixHQUFHLElBQUksQ0FBQ0MseUJBQXlCLENBQUNyRSxnQkFBZ0IsQ0FBQzs7TUFFNUU7TUFDQSxJQUFJLENBQUNzRSw4QkFBOEIsQ0FBQ3RFLGdCQUFnQixFQUFFSCxXQUFXLEVBQUVILG9CQUFvQixDQUFDOztNQUV4RjtNQUNBbUUsdUJBQXVCLENBQUNoRSxXQUFXLENBQUMsR0FBR3VFLG1CQUFtQjtNQUMxRDFFLG9CQUFvQixDQUFDNkUsV0FBVyxDQUFDLDBCQUEwQixFQUFFVix1QkFBdUIsQ0FBQzs7TUFFckY7TUFDQUMscUJBQXFCLENBQUNVLEdBQUcsQ0FBQzNFLFdBQVcsQ0FBQztJQUN2Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTFDLE1BQUEsQ0FLUWtILHlCQUF5QixHQUFqQyxTQUFRQSx5QkFBeUJBLENBQUNyRSxnQkFBeUMsRUFBMkI7TUFDckcsTUFBTW9FLG1CQUE0QyxHQUFHLENBQUMsQ0FBQztNQUV2RCxLQUFLLE1BQU1LLEdBQUcsSUFBSUMsTUFBTSxDQUFDckUsSUFBSSxDQUFDTCxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ2hELElBQUl5RSxHQUFHLENBQUNqRixRQUFRLENBQUMsd0JBQXdCLENBQUMsRUFBRTtVQUMzQzRFLG1CQUFtQixDQUFDSyxHQUFHLENBQUMsR0FBR3pFLGdCQUFnQixDQUFDeUUsR0FBRyxDQUFDO1FBQ2pEO01BQ0Q7TUFFQSxPQUFPTCxtQkFBbUI7SUFDM0I7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQWpILE1BQUEsQ0FNUW1ILDhCQUE4QixHQUF0QyxTQUFRQSw4QkFBOEJBLENBQ3JDdEUsZ0JBQXlDLEVBQ3pDSCxXQUFtQixFQUNuQkgsb0JBQStCLEVBQ3hCO01BQ1AsS0FBSyxNQUFNK0UsR0FBRyxJQUFJQyxNQUFNLENBQUNyRSxJQUFJLENBQUNMLGdCQUFnQixDQUFDLEVBQUU7UUFDaEQsSUFBSXlFLEdBQUcsQ0FBQ2pGLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1VBQzNDRSxvQkFBb0IsQ0FBQzZFLFdBQVcsQ0FBQyxHQUFHMUUsV0FBVyxJQUFJNEUsR0FBRyxFQUFFLEVBQUVqRyxTQUFTLENBQUM7UUFDckU7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUFyQixNQUFBLENBR1F1RixpQkFBaUIsR0FBekIsU0FBUUEsaUJBQWlCQSxDQUFBLEVBQVM7TUFDakMsSUFBSSxDQUFDTSxjQUFjLENBQUNqSCw0QkFBNEIsQ0FBQzRJLFFBQVEsQ0FBQztNQUMxRCxJQUFJLENBQUN6QixLQUFLLENBQUMsQ0FBQztJQUNiOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBL0YsTUFBQSxDQUtReUgsWUFBWSxHQUFwQixTQUFRQSxZQUFZQSxDQUFDQyxVQUFrQixFQUFVO01BQ2hELE1BQU1DLHVCQUF1QixHQUFHeEUsa0JBQWtCLENBQUN5RSx3Q0FBd0MsQ0FDMUZGLFVBQVUsRUFDVixJQUFJLENBQUMvSCxJQUFJLEVBQUVtQixpQkFBaUIsQ0FBQyxDQUFDLEVBQUUwQixRQUFRLENBQUMsQ0FBQyxFQUFFcUYsWUFBWSxDQUFDLENBQzFELENBQUM7TUFDRCxPQUNDRix1QkFBdUIsRUFBRUcsWUFBWSxFQUFFQyxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQyxJQUM3RVIsVUFBVSxDQUFDN0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDNkQsVUFBVSxDQUFDN0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDckQsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUV6RDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBUixNQUFBLENBTVFtSSxPQUFPLEdBQWYsU0FBUUEsT0FBT0EsQ0FBQ3pILGNBQThDLEVBQUUwSCxXQUFtQixFQUFVO01BQzVGLElBQUkxSCxjQUFjLENBQUN1RCxJQUFJLElBQUl2RCxjQUFjLENBQUNTLEtBQUssRUFBRTtRQUNoRCxRQUFRaUgsV0FBVztVQUNsQixLQUFLLGFBQWE7WUFDakIsT0FBTzFILGNBQWMsQ0FBQ3VELElBQUk7VUFDM0IsS0FBSyxrQkFBa0I7WUFDdEIsT0FBT29FLGVBQWUsQ0FBQ0Msa0JBQWtCLENBQUM1SCxjQUFjLENBQUN1RCxJQUFJLEVBQUV2RCxjQUFjLENBQUNTLEtBQUssQ0FBQztVQUNyRixLQUFLLGtCQUFrQjtZQUN0QixPQUFPa0gsZUFBZSxDQUFDQyxrQkFBa0IsQ0FBQzVILGNBQWMsQ0FBQ1MsS0FBSyxFQUFFVCxjQUFjLENBQUN1RCxJQUFJLENBQUM7VUFDckYsS0FBSyxPQUFPO1lBQ1gsT0FBT3ZELGNBQWMsQ0FBQ1MsS0FBSztRQUM3QjtNQUNEO01BQ0EsT0FBT1QsY0FBYyxDQUFDUyxLQUFLLElBQUksRUFBRTtJQUNsQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUFuQixNQUFBLENBT1F1SSxTQUFTLEdBQWpCLFNBQVFBLFNBQVNBLENBQUN0RSxJQUFZLEVBQUV1RSxJQUFZLEVBQUVDLFlBQTBCLEVBQVU7TUFDakYsT0FDQ0MsSUFBQSxDQUFDQyxNQUFNO1FBQUMxRSxJQUFJLEVBQUVBLElBQUs7UUFBQ3VFLElBQUksRUFBRUEsSUFBSztRQUFDSSxLQUFLLEVBQUUsTUFBTztRQUFDQyxLQUFLLEVBQUVKLFlBQWE7UUFBQUssUUFBQSxFQUNqRTtVQUNBQyxVQUFVLEVBQ1RMLElBQUEsQ0FBQU0sU0FBQTtZQUFBRixRQUFBLEVBQ0NKLElBQUEsQ0FBQ08sWUFBWTtjQUFDQyxRQUFRLEVBQUU7WUFBTyxDQUFlO1VBQUMsQ0FDOUM7UUFFSjtNQUFDLENBQ00sQ0FBQztJQUVYOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQWxKLE1BQUEsQ0FLUW1KLFNBQVMsR0FBakIsU0FBUUEsU0FBU0EsQ0FBQSxFQUFZO01BQzVCLE9BQ0NULElBQUEsQ0FBQ1UsT0FBTztRQUFBTixRQUFBLEVBQ047VUFDQU8sT0FBTyxFQUNOQyxLQUFBLENBQUFOLFNBQUE7WUFBQUYsUUFBQSxHQUNDSixJQUFBLENBQUNhLGFBQWEsSUFBRSxDQUFDLEVBQ2hCLElBQUksQ0FBQ2hCLFNBQVMsQ0FDZCxJQUFJLENBQUNpQixvQkFBb0IsQ0FBQyxJQUFJLENBQUNuRixNQUFNLEVBQUV6Riw0QkFBNEIsQ0FBQzBILE1BQU0sQ0FBQyxFQUMzRSxZQUFZLEVBQ1osSUFBSSxDQUFDSCxlQUFlLENBQUNYLElBQUksQ0FBQyxJQUFJLENBQy9CLENBQUMsRUFDQSxJQUFJLENBQUMrQyxTQUFTLENBQ2QsSUFBSSxDQUFDaUIsb0JBQW9CLENBQUMsSUFBSSxDQUFDbkYsTUFBTSxFQUFFekYsNEJBQTRCLENBQUNvSSxNQUFNLENBQUMsRUFDM0UsT0FBTyxFQUNQLElBQUksQ0FBQ1AsZUFBZSxDQUFDakIsSUFBSSxDQUFDLElBQUksQ0FDL0IsQ0FBQyxFQUNBLElBQUksQ0FBQytDLFNBQVMsQ0FDZCxJQUFJLENBQUMxSSx3Q0FBd0MsQ0FBQ3NJLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQyxFQUNqRyxPQUFPLEVBQ1AsSUFBSSxDQUFDNUMsaUJBQWlCLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQ2pDLENBQUM7VUFBQSxDQUNBO1FBRUo7TUFBQyxDQUNPLENBQUM7SUFFWixDQUFDO0lBQUF4RixNQUFBLENBRU93SixvQkFBb0IsR0FBNUIsU0FBUUEsb0JBQW9CQSxDQUFDQyxJQUFhLEVBQUVDLDRCQUEwRCxFQUFVO01BQy9HLE1BQU1DLGNBQWMsR0FBR0QsNEJBQTRCLEtBQUs5Syw0QkFBNEIsQ0FBQzBILE1BQU07TUFDM0YsSUFBSW1ELElBQUksRUFBRTtRQUNULE1BQU1HLFlBQVksR0FBRyxJQUFJLENBQUNqSyxJQUFJLENBQUNtQixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsRUFBRU0sV0FBVyxDQUFDLFlBQVksQ0FBQztRQUUzRixJQUFJd0ksWUFBWSxFQUFFO1VBQ2pCLE9BQU9ELGNBQWMsR0FDbEIsSUFBSSxDQUFDOUosd0NBQXdDLENBQUNzSSxPQUFPLENBQUMsMkNBQTJDLENBQUMsR0FDbEcsSUFBSSxDQUFDdEksd0NBQXdDLENBQUNzSSxPQUFPLENBQUMsMkNBQTJDLENBQUM7UUFDdEc7UUFFQSxPQUFPd0IsY0FBYyxHQUNsQixJQUFJLENBQUM5Six3Q0FBd0MsQ0FBQ3NJLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxHQUNoRyxJQUFJLENBQUN0SSx3Q0FBd0MsQ0FBQ3NJLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQztNQUNwRzs7TUFFQTtNQUNBLE9BQU93QixjQUFjLEdBQ2xCLElBQUksQ0FBQzlKLHdDQUF3QyxDQUFDc0ksT0FBTyxDQUFDLGdDQUFnQyxDQUFDLEdBQ3ZGLElBQUksQ0FBQ3RJLHdDQUF3QyxDQUFDc0ksT0FBTyxDQUFDLGdDQUFnQyxDQUFDO0lBQzNGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQW5JLE1BQUEsQ0FJQStFLGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUEsRUFBYztNQUM5QixNQUFNRCxXQUFXLEdBQUcsSUFBSStFLFNBQVMsQ0FBQyxDQUFDO01BQ25DLE1BQU0zRSxLQUFLLEdBQUcsRUFBRTtNQUNoQixLQUFLLE1BQU1WLGtCQUFrQixJQUFJLElBQUksQ0FBQ0MsZUFBZSxFQUFFRCxrQkFBa0IsSUFBSSxFQUFFLEVBQUU7UUFDaEYsTUFBTXNGLGVBQWUsR0FBR3hGLDRCQUE0QixDQUFDeUYsYUFBYSxDQUFDdkYsa0JBQWtCLENBQUM1RCxPQUF5QixDQUFDLElBQUksRUFBRTtRQUV0SCxNQUFNb0osZUFBZSxHQUNwQnhGLGtCQUFrQixDQUFDVCxxQkFBcUIsSUFBSVMsa0JBQWtCLENBQUNULHFCQUFxQixDQUFDdkQsTUFBTSxHQUFHLENBQUMsR0FDNUYsR0FBR3NKLGVBQWUsS0FBS3RGLGtCQUFrQixDQUFDVCxxQkFBcUIsR0FBRyxHQUNsRStGLGVBQWU7UUFFbkIsSUFBSXRGLGtCQUFrQixDQUFDckQsS0FBSyxJQUFJcUQsa0JBQWtCLENBQUNQLElBQUksRUFBRTtVQUN4RCxNQUFNeUQsVUFBVSxHQUFHbEQsa0JBQWtCLENBQUM1RCxPQUFPLEVBQUVZLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHZ0Qsa0JBQWtCLENBQUN6RCxZQUFZO1VBQ2hHLE1BQU1xSCxXQUFXLEdBQUc5RCw0QkFBNEIsQ0FBQzJGLDJCQUEyQixDQUMzRXZDLFVBQVUsRUFDVixJQUFJLENBQUMvSCxJQUFJLEVBQUVtQixpQkFBaUIsQ0FBQyxDQUFDLEVBQUUwQixRQUFRLENBQUMsQ0FBQyxFQUFFcUYsWUFBWSxDQUFDLENBQzFELENBQUM7VUFDRCxNQUFNcUMsUUFBUSxHQUFHO1lBQ2hCQyxTQUFTLEVBQUUsSUFBSSxDQUFDMUMsWUFBWSxDQUFDQyxVQUFVLENBQUMsQ0FBQzBDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xEQyxVQUFVLEVBQUUsSUFBSSxDQUFDbEMsT0FBTyxDQUFDM0Qsa0JBQWtCLEVBQUU0RCxXQUFXLENBQUM7WUFDekQ0QixlQUFlLEVBQUVBO1VBQ2xCLENBQUM7VUFDRDlFLEtBQUssQ0FBQzVELElBQUksQ0FBQzRJLFFBQVEsQ0FBQztRQUNyQjtNQUNEO01BQ0FwRixXQUFXLENBQUN3RixPQUFPLENBQUM7UUFBRXBGLEtBQUssRUFBRUE7TUFBTSxDQUFDLENBQUM7TUFDckMsT0FBT0osV0FBVztJQUNuQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTlFLE1BQUEsQ0FLQXVLLFFBQVEsR0FBUixTQUFBQSxRQUFRQSxDQUFDM0osT0FBdUIsRUFBVTtNQUN6QyxPQUFPQSxPQUFPLENBQUNRLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztJQUM5Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFwQixNQUFBLENBSUF3SyxVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQSxFQUFTO01BQ2xCLE1BQU1DLGFBQWEsR0FBSSxJQUFJLENBQUM5SyxJQUFJLENBQUM2QyxRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFBZ0J5QyxPQUFPLENBQUMsQ0FBQyxFQUFFQyxLQUFLO01BQy9GLE1BQU13RixXQUFXLEdBQ2hCRCxhQUFhLENBQUNqSyxNQUFNLEdBQUcsQ0FBQyxHQUNyQixJQUFJLENBQUNYLHdDQUF3QyxDQUFDc0ksT0FBTyxDQUFDLDhCQUE4QixFQUFFLENBQUNzQyxhQUFhLENBQUNqSyxNQUFNLENBQUMsQ0FBQyxHQUM3RyxJQUFJLENBQUNYLHdDQUF3QyxDQUFDc0ksT0FBTyxDQUFDLHVDQUF1QyxDQUFDO01BQ2xHLE9BQU9PLElBQUEsQ0FBQ2lDLElBQUk7UUFBQzFHLElBQUksRUFBRXlHO01BQVksQ0FBRSxDQUFDO0lBQ25DOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTFLLE1BQUEsQ0FJQTRLLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUEsRUFBUztNQUN4QixPQUNDbEMsSUFBQSxDQUFDbUMsSUFBSTtRQUFDM0YsS0FBSyxFQUFFO1VBQUU0RixLQUFLLEVBQUUsb0JBQW9CO1VBQUU1SixJQUFJLEVBQUUsUUFBUTtVQUFFNkosTUFBTSxFQUFFLElBQUlDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDVCxRQUFRO1FBQUUsQ0FBRTtRQUFBekIsUUFBQSxFQUN6SEosSUFBQSxDQUFDdUMsY0FBYztVQUFBbkMsUUFBQSxFQUNkSixJQUFBLENBQUN3QyxJQUFJO1lBQUNDLEtBQUssRUFBQyx1Q0FBdUM7WUFBQXJDLFFBQUEsRUFDbERKLElBQUEsQ0FBQ2lDLElBQUk7Y0FBQzFHLElBQUksRUFBQztZQUFpRSxDQUFFO1VBQUMsQ0FDMUU7UUFBQyxDQUNRO01BQUMsQ0FDWixDQUFDO0lBRVQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBakUsTUFBQSxDQUlBcUYsVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQUEsRUFBVztNQUNwQixPQUNDcUQsSUFBQSxDQUFDMEMsTUFBTTtRQUNOQyxLQUFLLEVBQUUsSUFBSSxDQUFDeEwsd0NBQXdDLENBQUNzSSxPQUFPLENBQUMsK0JBQStCLENBQUU7UUFDOUZtRCxLQUFLLEVBQUVDLFVBQVUsQ0FBQ0MsV0FBWTtRQUM5QmhELElBQUksRUFBRSxTQUFVO1FBQ2hCaUQsR0FBRyxFQUFFLElBQUksQ0FBQ3pGLDJCQUE0QjtRQUN0QzBGLFNBQVMsRUFBRSxNQUFPO1FBQ2xCQyxZQUFZLEVBQUUsT0FBUTtRQUFBN0MsUUFBQSxFQUVyQjtVQUNBTyxPQUFPLEVBQ05DLEtBQUEsQ0FBQU4sU0FBQTtZQUFBRixRQUFBLEdBQ0UsSUFBSSxDQUFDMEIsVUFBVSxDQUFDLENBQUMsRUFDakIsSUFBSSxDQUFDSSxnQkFBZ0IsQ0FBQyxDQUFDO1VBQUEsQ0FDdkIsQ0FDRjtVQUNEZ0IsTUFBTSxFQUFFbEQsSUFBQSxDQUFBTSxTQUFBO1lBQUFGLFFBQUEsRUFBRyxJQUFJLENBQUNLLFNBQVMsQ0FBQztVQUFDLENBQUc7UUFDL0I7TUFBQyxDQUNNLENBQUM7SUFFWCxDQUFDO0lBQUEsT0FBQXJLLDJCQUFBO0VBQUEsRUEzbEIrQytNLGFBQWEsR0FBQW5NLFdBQUEsR0FBQW9NLHlCQUFBLENBQUExTSxPQUFBLENBQUFhLFNBQUEsa0NBQUFoQixLQUFBO0lBQUE4TSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTlNLE9BQUEsTUFBQUQsTUFBQTtFQUFBTixRQUFBLENBQUFDLDJCQUFBLEdBQUFBLDJCQUFBO0VBQUEsT0FBQUQsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
537
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIl9leHBvcnRzIiwiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJkZWZpbmVSZWZlcmVuY2UiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX01hbmFnZWRPYmplY3QiLCJwcm9wcyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJ2aWV3IiwicHJvZ3JhbW1pbmdNb2RlbCIsImNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRPcGVuUmVjb21tZW5kYXRpb25zIiwidmlzaWJsZUNvbnRleHRQYXRocyIsImdldFZpc2libGVQYWdlQ29udGV4dFBhdGhzIiwib3BlblJlY29tbWVuZGF0aW9ucyIsImdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JWaXNpYmxlQ29udGV4dFBhdGhzIiwicmVjb21tZW5kYXRpb25zIiwibGVuZ3RoIiwiZm9yRWFjaCIsInJlY29tbWVuZGF0aW9uIiwicHJpbWFyeUNvbnRleHQiLCJjb250ZXh0IiwiZmFsbGJhY2tDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJpc0VtcHR5IiwiY3R4IiwicGF0aCIsInZhbHVlIiwiZ2V0UHJvcGVydHkiLCJ1bmRlZmluZWQiLCJwdXNoIiwidmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMiLCJnZXRQYXRoIiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJmY2xDb250cm9sbGVyIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiaXNGY2xFbmFibGVkIiwiX2lzRmNsRW5hYmxlZCIsImlzRnVsbFNjcmVlbiIsImdldEhlbHBlciIsImdldEN1cnJlbnRVSVN0YXRlIiwicmlnaHRNb3N0Q29udGV4dCIsImdldFJpZ2h0bW9zdENvbnRleHQiLCJpbmNsdWRlcyIsImNvbnRleHRQYXRocyIsImxvY2FsQW5ub3RhdGlvbk1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImNvbnRleHRQYXRoIiwibG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwiZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbk9iamVjdCIsImZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwicmVjb21tZW5kYXRpb25PYmplY3QiLCJjdXJyZW50S2V5IiwiY3VycmVudFZhbHVlIiwia2V5cyIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RW50aXR5S2V5cyIsImNvbnRleHRJZGVudGlmaWVyIiwiZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQiLCJjb250ZXh0RGF0YSIsInJlY29tbWVuZGF0aW9uQ29udGV4dCIsImNvbnRleHRLZXkiLCJhcmd1bWVudHMiLCJjdXJyZW50VmFsdWVJc0NvbnRleHQiLCJpc0EiLCJzcGxpdCIsIm9wZW5SZWNvbW1lbmRhdGlvbiIsImNvbnRleHRJZGVudGlmaWVyVGV4dCIsImRlc2NyaXB0aW9uIiwidGV4dCIsIkFycmF5IiwiaXNBcnJheSIsIm9wZW4iLCJpc1NhdmUiLCJzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyIiwiYWRkQ29udGV4dElkZW50aWZpZXJUZXh0IiwicmVjb21tZW5kYXRpb25EYXRhIiwiYWNjZXB0QWxsUGFyYW1zIiwib25CZWZvcmVBY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJsZWdhY3lSZWNvbW1lbmRhdGlvbnNFeGlzdCIsImNoZWNrSWZSZWNvbW1lbmRhdGlvbnNFeGlzdCIsImZldGNoQWNjZXB0QWxsUGFyYW1zIiwiYWNjZXB0TW9kZWwiLCJnZXRBY2NlcHRBbGxNb2RlbCIsInNldE1vZGVsIiwiZ2V0RGF0YSIsIml0ZW1zIiwiU2tpcHBlZCIsImRpYWxvZyIsImdldENvbnRlbnQiLCJzZXRFc2NhcGVIYW5kbGVyIiwib25Db250aW51ZUVkaXRpbmciLCJiaW5kIiwiYWRkRGVwZW5kZW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9taXNlUmVzb2x2ZSIsInByb21pc2VSZWplY3QiLCJjbG9zZSIsImNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZyIsImN1cnJlbnQiLCJkZXN0cm95Iiwib25BY2NlcHRBbmRTYXZlIiwiaXNBY2NlcHRlZCIsImFjY2VwdFJlY29tbWVuZGF0aW9ucyIsIkFjY2VwdCIsIkxvZyIsImVycm9yIiwib25JZ25vcmVBbmRTYXZlIiwicmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnMiLCJwcm9jZXNzZWRDb250ZXh0UGF0aHMiLCJTZXQiLCJoYXMiLCJfcHJvY2Vzc1JlY29tbWVuZGF0aW9uQ29udGV4dCIsImlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMiLCJSZWplY3QiLCJyZWplY3RlZENvbnRleHREYXRhIiwiX2ZpbHRlclJlY29tbWVuZGF0aW9uS2V5cyIsIl9jbGVhclJlY29tbWVuZGF0aW9uUHJvcGVydGllcyIsInNldFByb3BlcnR5IiwiYWRkIiwia2V5IiwiT2JqZWN0IiwiQ29udGludWUiLCJnZXRGaWVsZE5hbWUiLCJ0YXJnZXRQYXRoIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3QiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIiwiZ2V0TWV0YU1vZGVsIiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsInRvU3RyaW5nIiwiZ2V0VGV4dCIsImRpc3BsYXlNb2RlIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiZ2V0QnV0dG9uIiwidHlwZSIsInByZXNzSGFuZGxlciIsIl9qc3giLCJCdXR0b24iLCJ3aWR0aCIsInByZXNzIiwiY2hpbGRyZW4iLCJsYXlvdXREYXRhIiwiX0ZyYWdtZW50IiwiRmxleEl0ZW1EYXRhIiwibWluV2lkdGgiLCJnZXRGb290ZXIiLCJUb29sYmFyIiwiY29udGVudCIsIl9qc3hzIiwiVG9vbGJhclNwYWNlciIsIl9nZXREaWFsb2dCdXR0b25UZXh0Iiwic2F2ZSIsInJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24iLCJpc0FjY2VwdEJ1dHRvbiIsImlzQ3JlYXRlTW9kZSIsIkpTT05Nb2RlbCIsImVudGl0eU5hbWVMYWJlbCIsImdldEVudGl0eU5hbWUiLCJpZGVudGlmaWVyVGV4dHMiLCJnZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgiLCJsaXN0RGF0YSIsImZpZWxkTmFtZSIsInZhbHVlT2YiLCJmaWVsZFZhbHVlIiwic2V0RGF0YSIsImdldEdyb3VwIiwiZ2V0TWVzc2FnZSIsImFjY2VwdEFsbERhdGEiLCJtZXNzYWdlVGV4dCIsIlRleHQiLCJnZXREaWFsb2dDb250ZW50IiwiTGlzdCIsIm1vZGVsIiwic29ydGVyIiwiU29ydGVyIiwiQ3VzdG9tTGlzdEl0ZW0iLCJIQm94IiwiY2xhc3MiLCJEaWFsb2ciLCJ0aXRsZSIsInN0YXRlIiwiVmFsdWVTdGF0ZSIsIkluZm9ybWF0aW9uIiwicmVmIiwicmVzaXphYmxlIiwiY29udGVudFdpZHRoIiwiZm9vdGVyIiwiTWFuYWdlZE9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUb29sYmFyIGZyb20gXCJzYXAvbS9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcIi4uLy4uL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQWNjZXB0QWxsUGFyYW1zLCBSZWNvbW1lbmRhdGlvbkRhdGEgfSBmcm9tIFwiLi4vLi4vY29udHJvbGxlcmV4dGVuc2lvbnMvUmVjb21tZW5kYXRpb25zXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCIuLi8uLi9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciwgdHlwZSBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCIuLi8uLi9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWw7XG50eXBlIFByb2dyYW1taW5nTW9kZWxUeXBlID0gKHR5cGVvZiBQcm9ncmFtbWluZ01vZGVsKVtrZXlvZiB0eXBlb2YgUHJvZ3JhbW1pbmdNb2RlbF07XG5cbmV4cG9ydCBlbnVtIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24ge1xuXHRBY2NlcHQgPSBcIkFjY2VwdF9SZWNvbW1lbmRhdGlvbnNcIixcblx0UmVqZWN0ID0gXCJSZWplY3RfUmVjb21tZW5kYXRpb25zXCIsXG5cdENvbnRpbnVlID0gXCJDb250aW51ZV9FZGl0aW5nXCIsXG5cdFNraXBwZWQgPSBcIlNraXBwZWRcIlxufVxuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9scy5SZWNvbW1lbmRhdGlvbnMuQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCIpXG5leHBvcnQgY2xhc3MgQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIGV4dGVuZHMgTWFuYWdlZE9iamVjdCB7XG5cdGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wZXJ0aWVzT2Y8Q29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nPikge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLnZpZXcgPSBwcm9wcy52aWV3IGFzIFZpZXc7XG5cdFx0dGhpcy5wcm9ncmFtbWluZ01vZGVsID0gcHJvcHMucHJvZ3JhbW1pbmdNb2RlbDtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMudmlldyk7XG5cdH1cblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0Y29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nITogUmVmPERpYWxvZz47XG5cblx0cHVibGljIHZpZXchOiBWaWV3O1xuXG5cdHB1YmxpYyBwcm9ncmFtbWluZ01vZGVsITogUHJvZ3JhbW1pbmdNb2RlbFR5cGU7XG5cblx0cHJpdmF0ZSBjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsITogUmVzb3VyY2VNb2RlbDtcblxuXHRwcm90ZWN0ZWQga2V5ITogc3RyaW5nO1xuXG5cdHByaXZhdGUgaXNTYXZlITogYm9vbGVhbjtcblxuXHRwcml2YXRlIGFjY2VwdEFsbFBhcmFtcyE6IEFjY2VwdEFsbFBhcmFtcztcblxuXHQvKipcblx0ICogUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgc2VsZWN0ZWQgZGlhbG9nIGxpc3Qgb3B0aW9uXG5cdCAqL1xuXHRwcml2YXRlIHByb21pc2VSZXNvbHZlITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIFJlamVjdHMgdGhlIHByb21pc2Ugb2Ygb3BlbiBkaWFsb2dcblx0ICovXG5cdHB1YmxpYyBwcm9taXNlUmVqZWN0ITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uIERhdGFcblx0ICovXG5cblx0cHVibGljIGdldE9wZW5SZWNvbW1lbmRhdGlvbnMoKTogUmVjb21tZW5kYXRpb25EYXRhW10ge1xuXHRcdGNvbnN0IHZpc2libGVDb250ZXh0UGF0aHMgPSB0aGlzLmdldFZpc2libGVQYWdlQ29udGV4dFBhdGhzKCk7XG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9ucyA9IHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvclZpc2libGVDb250ZXh0UGF0aHModmlzaWJsZUNvbnRleHRQYXRocyk7XG5cdFx0Y29uc3QgcmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSA9IFtdO1xuXG5cdFx0aWYgKG9wZW5SZWNvbW1lbmRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucy5mb3JFYWNoKChyZWNvbW1lbmRhdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBwcmltYXJ5Q29udGV4dCA9IHJlY29tbWVuZGF0aW9uLmNvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IGZhbGxiYWNrQ29udGV4dCA9IHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSByZWNvbW1lbmRhdGlvbi5wcm9wZXJ0eVBhdGggPz8gXCJcIjtcblxuXHRcdFx0XHRjb25zdCBpc0VtcHR5ID0gKGN0eDogQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGwsIHBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gY3R4Py5nZXRQcm9wZXJ0eShwYXRoKTtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIjtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBwdXNoIHJlY29tbWVuZGF0aW9uIGlmIHByb3BlcnR5IGlzIGVtcHR5IGluIGJvdGggY29udGV4dHNcblx0XHRcdFx0aWYgKGlzRW1wdHkocHJpbWFyeUNvbnRleHQsIHByb3BlcnR5UGF0aCkgJiYgaXNFbXB0eShmYWxsYmFja0NvbnRleHQsIHByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbnMucHVzaChyZWNvbW1lbmRhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgY29udGV4dCBwYXRoc1xuXHQgKi9cblxuXHRwdWJsaWMgZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMgPSBbdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKV07XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgZmNsQ29udHJvbGxlciA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcjtcblx0XHRjb25zdCBpc0ZjbEVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLl9pc0ZjbEVuYWJsZWQoKTtcblx0XHRjb25zdCBpc0Z1bGxTY3JlZW4gPSBpc0ZjbEVuYWJsZWQgPyBmY2xDb250cm9sbGVyLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuaXNGdWxsU2NyZWVuIDogdHJ1ZTtcblx0XHRpZiAoaXNGY2xFbmFibGVkICYmICFpc0Z1bGxTY3JlZW4pIHtcblx0XHRcdGNvbnN0IHJpZ2h0TW9zdENvbnRleHQgPSBmY2xDb250cm9sbGVyLmdldFJpZ2h0bW9zdENvbnRleHQoKTtcblx0XHRcdGlmICghdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMuaW5jbHVkZXMocmlnaHRNb3N0Q29udGV4dD8uZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHR2aXNpYmxlUGFnZUNvbnRleHRQYXRocy5wdXNoKHJpZ2h0TW9zdENvbnRleHQ/LmdldFBhdGgoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB2aXNpYmxlUGFnZUNvbnRleHRQYXRocztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhzIFBhdGhzIG9mIHRoZSBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBSZWNvbW1lbmRhdGlvbkRhdGEgZm9yIHZpc2libGUgY29udGV4dHNcblx0ICovXG5cdHB1YmxpYyBnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyhjb250ZXh0UGF0aHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSB7XG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10gPSBbXTtcblx0XHRpZiAoY29udGV4dFBhdGhzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk1vZGVsID0gKHRoaXMudmlldy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldExvY2FsQW5ub3RhdGlvbk1vZGVsKCk7XG5cdFx0XHQvLyBjaGVjayBjb250ZXh0IHBhdGhzIGluIGxvY2FsIGFubm90YXRpb24gbW9kZWxzIHdoaWNoIG1hdGNoIHRvXG5cdFx0XHQvLyAxLiBjdXJyZW50IHBhZ2UgYW5kXG5cdFx0XHQvLyAyLiBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgcGFnZVxuXHRcdFx0Ly8gTmVlZCB0byBjb25zaWRlciBhbHNvIGltbWVkaWF0ZSBjaGlsZHJlblxuXHRcdFx0Ly8gaXRlcmF0ZSBvdmVyIGFsbCBrZXlzXG5cdFx0XHRjb250ZXh0UGF0aHMuZm9yRWFjaCgoY29udGV4dFBhdGgpID0+IHtcblx0XHRcdFx0aWYgKGNvbnRleHRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbEFubm90YXRpb25PYmplY3QgPSBsb2NhbEFubm90YXRpb25Nb2RlbC5nZXRPYmplY3QoY29udGV4dFBhdGgpO1xuXHRcdFx0XHRcdGlmIChsb2NhbEFubm90YXRpb25PYmplY3QpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25PYmplY3QgPSBsb2NhbEFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHRcdCAqIFRoZSBsb2NhbCBhbm5vdGF0aW9uIG9iamVjdCB3aWxsIGJlIG9mIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIDpcblx0XHRcdFx0XHRcdCAqIHtcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25cIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogUHJvcGVydHlOYW1lOiB7XG5cdFx0XHRcdFx0XHQgKiBcdFx0XCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFx0XHRcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy50eXBlQWhlYWRWYWx1ZXNcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQ6eyBjb250ZXh0IH1cblx0XHRcdFx0XHRcdCAqIFx0IH1cblx0XHRcdFx0XHRcdCAqIHJlY29tbWVuZGF0aW9uQ29udGV4dDp7IGNvbnRleHQgfVxuXHRcdFx0XHRcdFx0ICogfVxuXHRcdFx0XHRcdFx0ICpcblx0XHRcdFx0XHRcdCAqIHNvIGluIG9yZGVyIHRvIGdldCB0aGUgcmVjb21tZW5kYXRpb25zIGFzIHBlciBlYWNoIGNvbnRleHQgLSBmb3IgcGFyZW50L2NoaWxkIGVudGl0aWVzIHdlIG5lZWQgdG8gaXRlcmF0ZSBvdmVyIGVhY2gga2V5cyByZWN1cnNpdmVseSBpbiB0aGUgZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QgZnVuY3Rpb24sXG5cdFx0XHRcdFx0XHQgKiBmb3JtIHRoZSBjb3JyZXNwb25kaW5nIHN0cnVjdHVyZSBhbmQgdGhlbiBzZW5kIGl0IGZvciBnZXR0aW5nIHRoZSByZWNvbW1lbmRhdGlvbnMgYWNjb3JkaW5nbHkuXG5cdFx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRcdHRoaXMuZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdCwgb3BlblJlY29tbWVuZGF0aW9ucyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9wZW5SZWNvbW1lbmRhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGFubm90YXRpb25PYmplY3Rcblx0ICogQHBhcmFtIG9wZW5SZWNvbW1lbmRhdGlvbnMgUmVjb21tZW5kYXRpb24gRGF0YVxuXHQgKi9cblxuXHRwcml2YXRlIGZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSk6IHZvaWQge1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdKSB7XG5cdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdID0gYW5ub3RhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGZvciAoY29uc3QgY3VycmVudEtleSBpbiBhbm5vdGF0aW9uT2JqZWN0KSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGFubm90YXRpb25PYmplY3RbY3VycmVudEtleV07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoKGN1cnJlbnRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBPRGF0YVY0Q29udGV4dD4pW1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3RbY3VycmVudEtleV0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9wZW5SZWNvbW1lbmRhdGlvbnMpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIikgfHxcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiKSB8fFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy50eXBlQWhlYWRWYWx1ZXNcIilcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W2N1cnJlbnRLZXldID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qga2V5cyA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEVudGl0eUtleXMoXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIE9EYXRhVjRDb250ZXh0XG5cdFx0XHQpO1xuXHRcdFx0KHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKS5jb250ZXh0SWRlbnRpZmllciA9IGtleXNbXCJzZW1hbnRpY0tleXNcIl1cblx0XHRcdFx0PyBrZXlzW1wic2VtYW50aWNLZXlzXCJdXG5cdFx0XHRcdDoga2V5c1tcInRlY2huaWNhbEtleXNcIl07XG5cdFx0XHR0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0KFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdCxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgT0RhdGFWNENvbnRleHQsXG5cdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnNcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dERhdGEgVGhlIGNvbnRleHQgZGF0YSBvYmplY3QgZm9yIHJlY29tbWVuZGF0aW9uc1xuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25Db250ZXh0IFRoZSByZWNvbW1lbmRhdGlvbiBjb250ZXh0XG5cdCAqIEBwYXJhbSBvcGVuUmVjb21tZW5kYXRpb25zIFJlY29tbWVuZGF0aW9uRGF0YVxuXHQgKiBAcGFyYW0gY29udGV4dEtleSBDb250ZXh0IEtleVxuXHQgKi9cblxuXHRwcml2YXRlIGdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0KFxuXHRcdGNvbnRleHREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdG9wZW5SZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdLFxuXHRcdGNvbnRleHRLZXkgPSBcIlwiXG5cdCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY3VycmVudEtleSBpbiBjb250ZXh0RGF0YSkge1xuXHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gY29udGV4dERhdGFbY3VycmVudEtleV07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlKSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZUlzQ29udGV4dCA9XG5cdFx0XHRcdFx0KGN1cnJlbnRWYWx1ZSBhcyBPRGF0YVY0Q29udGV4dCkuaXNBICYmIChjdXJyZW50VmFsdWUgYXMgT0RhdGFWNENvbnRleHQpLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpO1xuXHRcdFx0XHRpZiAoY3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gY3VycmVudEtleS5zcGxpdChcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCIpWzBdO1xuXHRcdFx0XHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbjogUmVjb21tZW5kYXRpb25EYXRhID0ge1xuXHRcdFx0XHRcdFx0Y29udGV4dDogcmVjb21tZW5kYXRpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBjb250ZXh0S2V5ID8gYCR7Y29udGV4dEtleX0vJHtwcm9wZXJ0eVBhdGh9YCA6IHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdHZhbHVlOiBjdXJyZW50VmFsdWUgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0Y29udGV4dElkZW50aWZpZXI6IChyZWNvbW1lbmRhdGlvbkNvbnRleHQgYXMgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pLmNvbnRleHRJZGVudGlmaWVyLFxuXHRcdFx0XHRcdFx0Y29udGV4dElkZW50aWZpZXJUZXh0OiBbXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZGVzY3JpcHRpb24gPSBjb250ZXh0RGF0YVtgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25gXTtcblx0XHRcdFx0XHRpZiAoZGVzY3JpcHRpb24pIHtcblx0XHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbi50ZXh0ID0gZGVzY3JpcHRpb24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb25zLnB1c2gob3BlblJlY29tbWVuZGF0aW9uKTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY3VycmVudFZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkgJiYgIWN1cnJlbnRWYWx1ZUlzQ29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0XHRcdFx0XHRjdXJyZW50VmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGNvbmZpcm0gcmVjb21tZW5kYXRpb25zIGRpYWxvZy5cblx0ICogQHBhcmFtIGlzU2F2ZSBCb29sZWFuIGZsYWcgd2hpY2ggd291bGQgYmUgc2V0IHRvIHRydWUgaWYgd2UgYXJlIHNhdmluZyB0aGUgZG9jdW1lbnQgYW5kIHdvdWxkIGJlIGZhbHNlIGlmIHdlIGRvIGFwcGx5IGNoYW5nZXNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3b3VsZCByZXNvbHZlIHdpdGggUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiAoQWNjZXB0LCBJZ25vcmUsIENvbnRpbnVlLCBTa2lwcGVkKVxuXHQgKi9cblx0cHVibGljIGFzeW5jIG9wZW4oaXNTYXZlOiBib29sZWFuKTogUHJvbWlzZTxSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIHwgdW5kZWZpbmVkPiB7XG5cdFx0Ly8gY2hlY2sgZm9yIGJ1aWx0LWluIHJlY29tbWVuZGF0aW9uc1xuXHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbnMgPSB0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnMoKTtcblx0XHRpZiAob3BlblJlY29tbWVuZGF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmFkZENvbnRleHRJZGVudGlmaWVyVGV4dChcblx0XHRcdFx0eyByZWNvbW1lbmRhdGlvbkRhdGE6IG9wZW5SZWNvbW1lbmRhdGlvbnMgfSxcblx0XHRcdFx0dGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zID0ge1xuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRhdGE6IG9wZW5SZWNvbW1lbmRhdGlvbnNcblx0XHRcdH07XG5cdFx0XHRhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5vbkJlZm9yZUFjY2VwdFJlY29tbWVuZGF0aW9ucyh0aGlzLmFjY2VwdEFsbFBhcmFtcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGlmIGJ1aWx0LWluIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IGZvdW5kIHRoZW4gY2hlY2sgZm9yIGxlZ2FjeSByZWNvbW1lbmRhdGlvbnMuXG5cdFx0XHRjb25zdCBsZWdhY3lSZWNvbW1lbmRhdGlvbnNFeGlzdCA9ICh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmNoZWNrSWZSZWNvbW1lbmRhdGlvbnNFeGlzdCgpO1xuXHRcdFx0aWYgKGxlZ2FjeVJlY29tbWVuZGF0aW9uc0V4aXN0KSB7XG5cdFx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zID0gYXdhaXQgKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBY2NlcHRBbGxQYXJhbXMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGFjY2VwdE1vZGVsID0gdGhpcy5nZXRBY2NlcHRBbGxNb2RlbCgpO1xuXHRcdHRoaXMudmlldy5zZXRNb2RlbChhY2NlcHRNb2RlbCwgXCJfYWNjZXB0RGlhbG9nTW9kZWxcIik7XG5cdFx0aWYgKCFhY2NlcHRNb2RlbC5nZXREYXRhKCkuaXRlbXM/Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uU2tpcHBlZDtcblx0XHR9XG5cdFx0dGhpcy5pc1NhdmUgPSBpc1NhdmU7XG5cdFx0Y29uc3QgZGlhbG9nID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0ZGlhbG9nPy5zZXRFc2NhcGVIYW5kbGVyKHRoaXMub25Db250aW51ZUVkaXRpbmcuYmluZCh0aGlzKSk7XG5cdFx0dGhpcy52aWV3LmFkZERlcGVuZGVudChkaWFsb2cgYXMgVUk1RWxlbWVudCk7XG5cdFx0ZGlhbG9nPy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgdG8gY2xvc2UgdGhlIGNvbmZpcm1SZWNvbW1lbmRhdGlvbiBkaWFsb2cuXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2cuY3VycmVudD8uY2xvc2UoKTtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5jdXJyZW50Py5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgQWNjZXB0IGFuZCBTYXZlIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgb25BY2NlcHRBbmRTYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBpc0FjY2VwdGVkID0gYXdhaXQgKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuYWNjZXB0UmVjb21tZW5kYXRpb25zKFxuXHRcdFx0XHR0aGlzLmFjY2VwdEFsbFBhcmFtc1xuXHRcdFx0KTtcblx0XHRcdGlmICghaXNBY2NlcHRlZCkge1xuXHRcdFx0XHR0aGlzLnByb21pc2VSZWplY3QoXCJBY2NlcHQgRmFpbGVkXCIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkFjY2VwdCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRMb2cuZXJyb3IoXCJBY2NlcHQgUmVjb21tZW5kYXRpb25zIEZhaWxlZFwiKTtcblx0XHRcdHRoaXMucHJvbWlzZVJlamVjdChcIkFjY2VwdCBGYWlsZWRcIik7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgUmVqZWN0IGFuZCBTYXZlIGJ1dHRvbi5cblx0ICovXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBSZWplY3QgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvbklnbm9yZUFuZFNhdmUoKTogdm9pZCB7XG5cdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSAodGhpcy52aWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwoKTtcblx0XHRjb25zdCByZWplY3RlZFJlY29tbWVuZGF0aW9ucyA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldFByb3BlcnR5KFwiL3JlamVjdGVkUmVjb21tZW5kYXRpb25zXCIpID8/IHt9O1xuXG5cdFx0aWYgKCF0aGlzLmFjY2VwdEFsbFBhcmFtcz8ucmVjb21tZW5kYXRpb25EYXRhKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvY2Vzc2VkQ29udGV4dFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cblx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGF0aW9uIG9mIHRoaXMuYWNjZXB0QWxsUGFyYW1zLnJlY29tbWVuZGF0aW9uRGF0YSkge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSByZWNvbW1lbmRhdGlvbi5jb250ZXh0Py5nZXRQYXRoKCkgPz8gXCJcIjtcblxuXHRcdFx0aWYgKGNvbnRleHRQYXRoICE9PSBcIlwiICYmICFwcm9jZXNzZWRDb250ZXh0UGF0aHMuaGFzKGNvbnRleHRQYXRoKSkge1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uT2JqZWN0ID0gbG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0T2JqZWN0KGNvbnRleHRQYXRoKTtcblxuXHRcdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2YgYW5ub3RhdGlvbk9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdHRoaXMuX3Byb2Nlc3NSZWNvbW1lbmRhdGlvbkNvbnRleHQoXG5cdFx0XHRcdFx0XHRjb250ZXh0UGF0aCxcblx0XHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QsXG5cdFx0XHRcdFx0XHRyZWplY3RlZFJlY29tbWVuZGF0aW9ucyxcblx0XHRcdFx0XHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLFxuXHRcdFx0XHRcdFx0cHJvY2Vzc2VkQ29udGV4dFBhdGhzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMoKTtcblx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uUmVqZWN0KTtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvY2Vzc2VzIGEgc2luZ2xlIHJlY29tbWVuZGF0aW9uIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBUaGUgY29udGV4dCBwYXRoIGJlaW5nIHByb2Nlc3NlZFxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbk9iamVjdCBUaGUgYW5ub3RhdGlvbiBvYmplY3QgZm9yIHRoZSBjb250ZXh0XG5cdCAqIEBwYXJhbSByZWplY3RlZFJlY29tbWVuZGF0aW9ucyBUaGUgcmVqZWN0ZWQgcmVjb21tZW5kYXRpb25zIG9iamVjdFxuXHQgKiBAcGFyYW0gbG9jYWxBbm5vdGF0aW9uTW9kZWwgVGhlIGxvY2FsIGFubm90YXRpb24gbW9kZWxcblx0ICogQHBhcmFtIHByb2Nlc3NlZENvbnRleHRQYXRocyBTZXQgdG8gdHJhY2sgcHJvY2Vzc2VkIGNvbnRleHRzXG5cdCAqL1xuXHRwcml2YXRlIF9wcm9jZXNzUmVjb21tZW5kYXRpb25Db250ZXh0KFxuXHRcdGNvbnRleHRQYXRoOiBzdHJpbmcsXG5cdFx0YW5ub3RhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0cmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsOiBKU09OTW9kZWwsXG5cdFx0cHJvY2Vzc2VkQ29udGV4dFBhdGhzOiBTZXQ8c3RyaW5nPlxuXHQpOiB2b2lkIHtcblx0XHQvLyBCdWlsZCBhIHNoYWxsb3cgY29weSwgdGhlbiBmaWx0ZXIgZm9yIHJlY29tbWVuZGF0aW9uIGtleXMgb25seVxuXHRcdGNvbnN0IHJlamVjdGVkQ29udGV4dERhdGEgPSB0aGlzLl9maWx0ZXJSZWNvbW1lbmRhdGlvbktleXMoYW5ub3RhdGlvbk9iamVjdCk7XG5cblx0XHQvLyBDbGVhciByZWNvbW1lbmRhdGlvbiBwcm9wZXJ0aWVzIGZyb20gbG9jYWwgYW5ub3RhdGlvbiBtb2RlbFxuXHRcdHRoaXMuX2NsZWFyUmVjb21tZW5kYXRpb25Qcm9wZXJ0aWVzKGFubm90YXRpb25PYmplY3QsIGNvbnRleHRQYXRoLCBsb2NhbEFubm90YXRpb25Nb2RlbCk7XG5cblx0XHQvLyBTdG9yZSB0aGUgZmlsdGVyZWQgcmVqZWN0ZWQgY29udGV4dCBpbiByZWplY3RlZFJlY29tbWVuZGF0aW9uc1xuXHRcdHJlamVjdGVkUmVjb21tZW5kYXRpb25zW2NvbnRleHRQYXRoXSA9IHJlamVjdGVkQ29udGV4dERhdGE7XG5cdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnNcIiwgcmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnMpO1xuXG5cdFx0Ly8gTWFyayB0aGlzIGNvbnRleHRQYXRoIGFzIHByb2Nlc3NlZFxuXHRcdHByb2Nlc3NlZENvbnRleHRQYXRocy5hZGQoY29udGV4dFBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbHRlcnMgYW5ub3RhdGlvbiBvYmplY3QgdG8ga2VlcCBvbmx5IHJlY29tbWVuZGF0aW9uIGtleXMuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uT2JqZWN0IFRoZSBzb3VyY2UgYW5ub3RhdGlvbiBvYmplY3Rcblx0ICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgb25seSByZWNvbW1lbmRhdGlvbi1yZWxhdGVkIGtleXNcblx0ICovXG5cdHByaXZhdGUgX2ZpbHRlclJlY29tbWVuZGF0aW9uS2V5cyhhbm5vdGF0aW9uT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0XHRjb25zdCByZWplY3RlZENvbnRleHREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdCkpIHtcblx0XHRcdGlmIChrZXkuaW5jbHVkZXMoXCJ1aTUuZmUucmVjb21tZW5kYXRpb25zXCIpKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYW5ub3RhdGlvbk9iamVjdFtrZXldO1xuXHRcdFx0XHRyZWplY3RlZENvbnRleHREYXRhW2tleV0gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVqZWN0ZWRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgcmVjb21tZW5kYXRpb24gcHJvcGVydGllcyBmcm9tIGxvY2FsIGFubm90YXRpb24gbW9kZWwuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uT2JqZWN0IFRoZSBhbm5vdGF0aW9uIG9iamVjdCBjb250YWluaW5nIGtleXMgdG8gY2xlYXJcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoIFRoZSBjb250ZXh0IHBhdGggZm9yIHByb3BlcnR5IGNsZWFyaW5nXG5cdCAqIEBwYXJhbSBsb2NhbEFubm90YXRpb25Nb2RlbCBUaGUgbG9jYWwgYW5ub3RhdGlvbiBtb2RlbFxuXHQgKi9cblx0cHJpdmF0ZSBfY2xlYXJSZWNvbW1lbmRhdGlvblByb3BlcnRpZXMoXG5cdFx0YW5ub3RhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRsb2NhbEFubm90YXRpb25Nb2RlbDogSlNPTk1vZGVsXG5cdCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFubm90YXRpb25PYmplY3QpKSB7XG5cdFx0XHRpZiAoa2V5LmluY2x1ZGVzKFwidWk1LmZlLnJlY29tbWVuZGF0aW9uc1wiKSkge1xuXHRcdFx0XHRsb2NhbEFubm90YXRpb25Nb2RlbC5zZXRQcm9wZXJ0eShgJHtjb250ZXh0UGF0aH0vJHtrZXl9YCwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgQ29udGludWUgRWRpdGluZyBidXR0b24uXG5cdCAqL1xuXHRwcml2YXRlIG9uQ29udGludWVFZGl0aW5nKCk6IHZvaWQge1xuXHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Db250aW51ZSk7XG5cdFx0dGhpcy5jbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGxhYmVsIG9yIG5hbWUgb2YgdGhlIEZpZWxkIGJhc2VkIG9uIGl0cyBwcm9wZXJ0eSBwYXRoLlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBsYWJlbCBvZiB0aGUgRmllbGQuXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpZWxkTmFtZSh0YXJnZXRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGg8UHJvcGVydHk+KFxuXHRcdFx0dGFyZ2V0UGF0aCxcblx0XHRcdHRoaXMudmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWxcblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fFxuXHRcdFx0dGFyZ2V0UGF0aC5zcGxpdChcIi9cIilbdGFyZ2V0UGF0aC5zcGxpdChcIi9cIikubGVuZ3RoIC0gMV1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGV4dCBmb3IgcmVjb21tZW5kYXRpb24gYmFzZWQgb24gZGlzcGxheSBtb2RlLlxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25cblx0ICogQHBhcmFtIGRpc3BsYXlNb2RlXG5cdCAqIEByZXR1cm5zIFRleHQgZm9yIGEgcmVjb21tZW5kYXRpb25cblx0ICovXG5cdHByaXZhdGUgZ2V0VGV4dChyZWNvbW1lbmRhdGlvbjogU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlLCBkaXNwbGF5TW9kZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAocmVjb21tZW5kYXRpb24udGV4dCB8fCByZWNvbW1lbmRhdGlvbi52YWx1ZSkge1xuXHRcdFx0c3dpdGNoIChkaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udGV4dCE7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMocmVjb21tZW5kYXRpb24udGV4dCwgcmVjb21tZW5kYXRpb24udmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHJlY29tbWVuZGF0aW9uLnZhbHVlLCByZWNvbW1lbmRhdGlvbi50ZXh0KTtcblx0XHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uLnZhbHVlITtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uLnZhbHVlIHx8IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBCdXR0b24gd2l0aCBnaXZlbiB0ZXh0LCB0eXBlIGFuZCBwcmVzc0hhbmRsZXIuXG5cdCAqIEBwYXJhbSB0ZXh0IFRleHQgZm9yIHRoZSBidXR0b25cblx0ICogQHBhcmFtIHR5cGUgVHlwZSBvZiB0aGUgYnV0dG9uXG5cdCAqIEBwYXJhbSBwcmVzc0hhbmRsZXIgUHJlc3MgSGFuZGxlciBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcmV0dXJucyBCdXR0b24gd2l0aCB0aGUgZ2l2ZW4gc2V0dGluZ3Ncblx0ICovXG5cdHByaXZhdGUgZ2V0QnV0dG9uKHRleHQ6IHN0cmluZywgdHlwZTogc3RyaW5nLCBwcmVzc0hhbmRsZXI6IEV2ZW50SGFuZGxlcik6IEJ1dHRvbiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxCdXR0b24gdGV4dD17dGV4dH0gdHlwZT17dHlwZX0gd2lkdGg9e1wiYXV0b1wifSBwcmVzcz17cHJlc3NIYW5kbGVyfT5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8RmxleEl0ZW1EYXRhIG1pbldpZHRoPXtcIjEwMCVcIn0+PC9GbGV4SXRlbURhdGE+XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgRm9vdGVyIHdpdGggQnV0dG9ucy5cblx0ICogQHJldHVybnMgRm9vdGVyXG5cdCAqL1xuXG5cdHByaXZhdGUgZ2V0Rm9vdGVyKCk6IFRvb2xiYXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VG9vbGJhcj5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0RGlhbG9nQnV0dG9uVGV4dCh0aGlzLmlzU2F2ZSwgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5BY2NlcHQpLFxuXHRcdFx0XHRcdFx0XHRcdFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25BY2NlcHRBbmRTYXZlLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0QnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2dldERpYWxvZ0J1dHRvblRleHQodGhpcy5pc1NhdmUsIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uUmVqZWN0KSxcblx0XHRcdFx0XHRcdFx0XHRcIkdob3N0XCIsXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbklnbm9yZUFuZFNhdmUuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19DT05USU5VRV9FRElUSU5HXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFwiR2hvc3RcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQ29udGludWVFZGl0aW5nLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvVG9vbGJhcj5cblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0RGlhbG9nQnV0dG9uVGV4dChzYXZlOiBib29sZWFuLCByZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uOiBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uKTogc3RyaW5nIHtcblx0XHRjb25zdCBpc0FjY2VwdEJ1dHRvbiA9IHJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gPT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0O1xuXHRcdGlmIChzYXZlKSB7XG5cdFx0XHRjb25zdCBpc0NyZWF0ZU1vZGUgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiY3JlYXRlTW9kZVwiKTtcblxuXHRcdFx0aWYgKGlzQ3JlYXRlTW9kZSkge1xuXHRcdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUX0FORF9DUkVBVEVcIilcblx0XHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfUkVKRUNUX0FORF9DUkVBVEVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBpc0FjY2VwdEJ1dHRvblxuXHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUX0FORF9TQVZFXCIpXG5cdFx0XHRcdDogdGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19SRUpFQ1RfQU5EX1NBVkVcIik7XG5cdFx0fVxuXG5cdFx0Ly8gTm90IHNhdmluZyDigJMgcGxhaW4gQWNjZXB0L0lnbm9yZVxuXHRcdHJldHVybiBpc0FjY2VwdEJ1dHRvblxuXHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVFwiKVxuXHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1JFSkVDVFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjcmVhdGVkIGEgSlNPTiBNb2RlbCBmb3IgdGhlIGFjY2VwdCBhbGwgZGlhbG9nIGRhdGEuXG5cdCAqIEByZXR1cm5zIFRoZSBKU09OIE1vZGVsIGZvciBhY2NlcHQgYWxsIGRpYWxvZy5cblx0ICovXG5cdGdldEFjY2VwdEFsbE1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0Y29uc3QgaXRlbXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSBvZiB0aGlzLmFjY2VwdEFsbFBhcmFtcz8ucmVjb21tZW5kYXRpb25EYXRhIHx8IFtdKSB7XG5cdFx0XHRjb25zdCBlbnRpdHlOYW1lTGFiZWwgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldEVudGl0eU5hbWUocmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IGlkZW50aWZpZXJUZXh0cyA9XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHQgJiYgcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyVGV4dC5sZW5ndGggPiAwXG5cdFx0XHRcdFx0PyBgJHtlbnRpdHlOYW1lTGFiZWx9ICgke3JlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHR9KWBcblx0XHRcdFx0XHQ6IGVudGl0eU5hbWVMYWJlbDtcblxuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YS52YWx1ZSB8fCByZWNvbW1lbmRhdGlvbkRhdGEudGV4dCkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQ/LmdldFBhdGgoKSArIFwiL1wiICsgcmVjb21tZW5kYXRpb25EYXRhLnByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aChcblx0XHRcdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0XHRcdHRoaXMudmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWxcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgbGlzdERhdGEgPSB7XG5cdFx0XHRcdFx0ZmllbGROYW1lOiB0aGlzLmdldEZpZWxkTmFtZSh0YXJnZXRQYXRoKS52YWx1ZU9mKCksXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZTogdGhpcy5nZXRUZXh0KHJlY29tbWVuZGF0aW9uRGF0YSwgZGlzcGxheU1vZGUpLFxuXHRcdFx0XHRcdGlkZW50aWZpZXJUZXh0czogaWRlbnRpZmllclRleHRzXG5cdFx0XHRcdH07XG5cdFx0XHRcdGl0ZW1zLnB1c2gobGlzdERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhY2NlcHRNb2RlbC5zZXREYXRhKHsgaXRlbXM6IGl0ZW1zIH0pO1xuXHRcdHJldHVybiBhY2NlcHRNb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBncm91cHMgdGhlIGNvbnRleHRzIGFjY29yZGluZyB0byB0aGUgaWRlbnRpZmllciB0ZXh0cy5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGl0ZW1cblx0ICogQHJldHVybnMgVGhlIHRleHQgb2YgdGhlIGdyb3VwXG5cdCAqL1xuXHRnZXRHcm91cChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJpZGVudGlmaWVyVGV4dHNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGluIHRoZSBhY2NlcHQgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBBIG1lc3NhZ2Ugd2l0aCB0aGUgZGVzaXJlZCB0ZXh0LlxuXHQgKi9cblx0Z2V0TWVzc2FnZSgpOiBUZXh0IHtcblx0XHRjb25zdCBhY2NlcHRBbGxEYXRhID0gKHRoaXMudmlldy5nZXRNb2RlbChcIl9hY2NlcHREaWFsb2dNb2RlbFwiKSBhcyBKU09OTW9kZWwpPy5nZXREYXRhKCk/Lml0ZW1zO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZXh0ID1cblx0XHRcdGFjY2VwdEFsbERhdGEubGVuZ3RoID4gMVxuXHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVFwiLCBbYWNjZXB0QWxsRGF0YS5sZW5ndGhdKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVF9TSU5HVUxBUlwiKTtcblx0XHRyZXR1cm4gPFRleHQgdGV4dD17bWVzc2FnZVRleHR9IC8+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBhcyBjb250ZW50IG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRnZXREaWFsb2dDb250ZW50KCk6IExpc3Qge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlzdCBpdGVtcz17eyBtb2RlbDogXCJfYWNjZXB0RGlhbG9nTW9kZWxcIiwgcGF0aDogXCIvaXRlbXNcIiwgc29ydGVyOiBuZXcgU29ydGVyKFwiaWRlbnRpZmllclRleHRzXCIsIGZhbHNlLCB0aGlzLmdldEdyb3VwKSB9fT5cblx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtPlxuXHRcdFx0XHRcdDxIQm94IGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD1cIntfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGROYW1lfToge19hY2NlcHREaWFsb2dNb2RlbD5maWVsZFZhbHVlfVwiIC8+XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdFx0PC9MaXN0PlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1aWxkaW5nIGJsb2NrIHJlbmRlciBmdW5jdGlvbi5cblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZ1xuXHQgKi9cblx0Z2V0Q29udGVudCgpOiBEaWFsb2cge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RJVExFXCIpfVxuXHRcdFx0XHRzdGF0ZT17VmFsdWVTdGF0ZS5JbmZvcm1hdGlvbn1cblx0XHRcdFx0dHlwZT17XCJNZXNzYWdlXCJ9XG5cdFx0XHRcdHJlZj17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2d9XG5cdFx0XHRcdHJlc2l6YWJsZT17XCJ0cnVlXCJ9XG5cdFx0XHRcdGNvbnRlbnRXaWR0aD17XCIzNXJlbVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldE1lc3NhZ2UoKX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0RGlhbG9nQ29udGVudCgpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmb290ZXI6IDw+e3RoaXMuZ2V0Rm9vdGVyKCl9PC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpIGFzIERpYWxvZztcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7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
@@ -405,7 +405,8 @@ export class ConfirmRecommendationDialog extends ManagedObject {
405
405
 
406
406
  for (const key of Object.keys(annotationObject)) {
407
407
  if (key.includes("ui5.fe.recommendations")) {
408
- rejectedContextData[key] = annotationObject[key];
408
+ const value = annotationObject[key];
409
+ rejectedContextData[key] = Array.isArray(value) ? [...value] : value;
409
410
  }
410
411
  }
411
412