@sapui5/sap.fe.core 1.99.0 → 1.100.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 (246) hide show
  1. package/package.json +4 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +1 -69
  4. package/src/sap/fe/core/AnnotationHelper.ts +0 -70
  5. package/src/sap/fe/core/AppComponent.js +388 -399
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +127 -158
  8. package/src/sap/fe/core/BaseController.js +82 -58
  9. package/src/sap/fe/core/BaseController.ts +68 -0
  10. package/src/sap/fe/core/CommonUtils.js +111 -20
  11. package/src/sap/fe/core/CommonUtils.ts +131 -32
  12. package/src/sap/fe/core/ExtensionAPI.js +278 -274
  13. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  14. package/src/sap/fe/core/PageController.js +157 -29
  15. package/src/sap/fe/core/PageController.ts +60 -32
  16. package/src/sap/fe/core/RouterProxy.js +694 -756
  17. package/src/sap/fe/core/RouterProxy.ts +11 -9
  18. package/src/sap/fe/core/Synchronization.js +21 -31
  19. package/src/sap/fe/core/TemplateComponent.js +1 -1
  20. package/src/sap/fe/core/TemplateComponent.ts +10 -3
  21. package/src/sap/fe/core/TemplateModel.js +20 -38
  22. package/src/sap/fe/core/TemplateModel.ts +1 -1
  23. package/src/sap/fe/core/TransactionHelper.js +1354 -1370
  24. package/src/sap/fe/core/TransactionHelper.ts +33 -22
  25. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  27. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  29. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  30. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  31. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  32. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  33. package/src/sap/fe/core/actions/draft.js +30 -68
  34. package/src/sap/fe/core/actions/draft.ts +44 -71
  35. package/src/sap/fe/core/actions/messageHandling.js +55 -36
  36. package/src/sap/fe/core/actions/messageHandling.ts +66 -46
  37. package/src/sap/fe/core/actions/operations.js +34 -15
  38. package/src/sap/fe/core/actions/operations.ts +48 -18
  39. package/src/sap/fe/core/actions/sticky.js +17 -4
  40. package/src/sap/fe/core/actions/sticky.ts +21 -4
  41. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +69 -66
  42. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  43. package/src/sap/fe/core/controllerextensions/EditFlow.js +1593 -1669
  44. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  47. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +718 -779
  48. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  49. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
  50. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1004 -1005
  52. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  53. package/src/sap/fe/core/controllerextensions/KPIManagement.js +487 -521
  54. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  55. package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
  56. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  57. package/src/sap/fe/core/controllerextensions/MessageHandler.js +233 -244
  58. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  59. package/src/sap/fe/core/controllerextensions/PageReady.js +301 -336
  60. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  61. package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
  62. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  63. package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
  64. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  65. package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
  66. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  67. package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
  68. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  69. package/src/sap/fe/core/controllerextensions/Share.js +230 -268
  70. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  71. package/src/sap/fe/core/controllerextensions/SideEffects.js +592 -633
  72. package/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  73. package/src/sap/fe/core/controllerextensions/ViewState.js +788 -806
  74. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  75. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  76. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  77. package/src/sap/fe/core/controls/CommandExecution.js +67 -66
  78. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +90 -75
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  81. package/src/sap/fe/core/controls/CustomQuickViewPage.js +130 -125
  82. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  83. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +103 -112
  84. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  85. package/src/sap/fe/core/controls/FieldWrapper.js +122 -135
  86. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  87. package/src/sap/fe/core/controls/FilterBar.js +162 -159
  88. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  89. package/src/sap/fe/core/controls/FormElementWrapper.js +45 -39
  90. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  91. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
  92. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  93. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +126 -116
  94. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  95. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +241 -255
  96. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  97. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +150 -141
  98. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  99. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
  100. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  101. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +74 -74
  102. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  103. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  104. package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  105. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  106. package/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  107. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
  108. package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  109. package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
  110. package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  111. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  112. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  113. package/src/sap/fe/core/converters/annotations/DataField.js +26 -12
  114. package/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  115. package/src/sap/fe/core/converters/controls/Common/Form.js +2 -2
  116. package/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  117. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  119. package/src/sap/fe/core/converters/controls/Common/Table.js +130 -23
  120. package/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  121. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +118 -53
  122. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  123. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +161 -207
  124. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  125. package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
  126. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  127. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  128. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  129. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  130. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  131. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  132. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +25 -4
  133. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  134. package/src/sap/fe/core/converters/templates/ListReportConverter.js +10 -4
  135. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  136. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  137. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  138. package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
  139. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  141. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  142. package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
  143. package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  144. package/src/sap/fe/core/fpm/Component.js +50 -54
  145. package/src/sap/fe/core/fpm/Component.ts +48 -0
  146. package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
  147. package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  148. package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
  149. package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  150. package/src/sap/fe/core/helpers/ClassSupport.js +186 -62
  151. package/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  152. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
  153. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  154. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  155. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  156. package/src/sap/fe/core/helpers/MassEditHelper.js +601 -684
  157. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  158. package/src/sap/fe/core/helpers/ModelHelper.js +25 -1
  159. package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  160. package/src/sap/fe/core/helpers/SemanticDateOperators.js +5 -1
  161. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  162. package/src/sap/fe/core/library.js +426 -451
  163. package/src/sap/fe/core/library.support.js +22 -33
  164. package/src/sap/fe/core/library.support.ts +23 -0
  165. package/src/sap/fe/core/library.ts +420 -0
  166. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  167. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  168. package/src/sap/fe/core/messagebundle.properties +22 -5
  169. package/src/sap/fe/core/messagebundle_ar.properties +27 -7
  170. package/src/sap/fe/core/messagebundle_bg.properties +27 -7
  171. package/src/sap/fe/core/messagebundle_ca.properties +27 -7
  172. package/src/sap/fe/core/messagebundle_cs.properties +27 -7
  173. package/src/sap/fe/core/messagebundle_cy.properties +27 -7
  174. package/src/sap/fe/core/messagebundle_da.properties +27 -7
  175. package/src/sap/fe/core/messagebundle_de.properties +27 -7
  176. package/src/sap/fe/core/messagebundle_el.properties +27 -7
  177. package/src/sap/fe/core/messagebundle_en.properties +27 -7
  178. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  179. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  180. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  181. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  182. package/src/sap/fe/core/messagebundle_es.properties +27 -7
  183. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  184. package/src/sap/fe/core/messagebundle_et.properties +27 -7
  185. package/src/sap/fe/core/messagebundle_fi.properties +28 -8
  186. package/src/sap/fe/core/messagebundle_fr.properties +28 -8
  187. package/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  188. package/src/sap/fe/core/messagebundle_hi.properties +27 -7
  189. package/src/sap/fe/core/messagebundle_hr.properties +27 -7
  190. package/src/sap/fe/core/messagebundle_hu.properties +27 -7
  191. package/src/sap/fe/core/messagebundle_id.properties +27 -7
  192. package/src/sap/fe/core/messagebundle_it.properties +27 -7
  193. package/src/sap/fe/core/messagebundle_iw.properties +27 -7
  194. package/src/sap/fe/core/messagebundle_ja.properties +26 -6
  195. package/src/sap/fe/core/messagebundle_kk.properties +27 -7
  196. package/src/sap/fe/core/messagebundle_ko.properties +27 -7
  197. package/src/sap/fe/core/messagebundle_lt.properties +27 -7
  198. package/src/sap/fe/core/messagebundle_lv.properties +28 -8
  199. package/src/sap/fe/core/messagebundle_ms.properties +27 -7
  200. package/src/sap/fe/core/messagebundle_nl.properties +27 -7
  201. package/src/sap/fe/core/messagebundle_no.properties +27 -7
  202. package/src/sap/fe/core/messagebundle_pl.properties +27 -7
  203. package/src/sap/fe/core/messagebundle_pt.properties +28 -8
  204. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  205. package/src/sap/fe/core/messagebundle_ro.properties +27 -7
  206. package/src/sap/fe/core/messagebundle_ru.properties +27 -7
  207. package/src/sap/fe/core/messagebundle_sh.properties +27 -7
  208. package/src/sap/fe/core/messagebundle_sk.properties +27 -7
  209. package/src/sap/fe/core/messagebundle_sl.properties +27 -7
  210. package/src/sap/fe/core/messagebundle_sv.properties +27 -7
  211. package/src/sap/fe/core/messagebundle_th.properties +26 -6
  212. package/src/sap/fe/core/messagebundle_tr.properties +30 -10
  213. package/src/sap/fe/core/messagebundle_uk.properties +27 -7
  214. package/src/sap/fe/core/messagebundle_vi.properties +27 -7
  215. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  216. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  217. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  218. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +154 -192
  219. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  220. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +66 -92
  221. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  222. package/src/sap/fe/core/services/NavigationServiceFactory.js +284 -339
  223. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  224. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +67 -102
  225. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  226. package/src/sap/fe/core/services/RoutingServiceFactory.js +754 -814
  227. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  228. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -736
  229. package/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  230. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +567 -592
  231. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  232. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +354 -386
  233. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  234. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  235. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  236. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  237. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  238. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  239. package/src/sap/fe/core/templating/DataModelPathHelper.js +93 -85
  240. package/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  241. package/src/sap/fe/core/templating/FilterHelper.js +25 -32
  242. package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  243. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  244. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  245. package/src/sap/fe/core/templating/UIFormatters.js +32 -26
  246. package/src/sap/fe/core/templating/UIFormatters.ts +37 -24
@@ -1,5 +1,5 @@
1
1
  import { SelectOptionType, SelectionVariantTypeTypes, SelectionRangeTypeTypes } from "@sap-ux/vocabularies-types/dist/generated/UI";
2
- import { createCondition } from "sap/ui/mdc/condition/Condition";
2
+ import Condition, { ConditionObject } from "sap/ui/mdc/condition/Condition";
3
3
  import ConditionValidated from "sap/ui/mdc/enum/ConditionValidated";
4
4
  import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
5
5
  export type FilterConditions = {
@@ -209,38 +209,31 @@ function _buildConditionsFromSelectionRanges(
209
209
  return aConditions;
210
210
  }
211
211
 
212
+ function _getProperty(propertyName: string, metaModel: ODataMetaModel, entitySetPath: string): Record<string, object> {
213
+ const lastSlashIndex = propertyName.lastIndexOf("/");
214
+ const navigationPath = lastSlashIndex > -1 ? propertyName.substring(0, propertyName.lastIndexOf("/") + 1) : "";
215
+ const collection = metaModel.getObject(entitySetPath + "/" + navigationPath);
216
+ return collection?.[propertyName.replace(navigationPath, "")];
217
+ }
218
+
212
219
  function _buildFiltersConditionsFromSelectOption(
213
- oSelectOption: SelectOptionType,
214
- oMetaModel: ODataMetaModel,
215
- sEntitySetPath: string,
220
+ selectOption: SelectOptionType,
221
+ metaModel: ODataMetaModel,
222
+ entitySetPath: string,
216
223
  getCustomConditions?: Function
217
224
  ): Record<string, FilterConditions[]> {
218
- const propertyName: any = oSelectOption.PropertyName,
219
- oFilterConditions: Record<string, FilterConditions[]> = {},
220
- sPropertyName: string = propertyName.value || propertyName.$PropertyPath,
221
- Ranges: SelectionRangeTypeTypes[] = oSelectOption.Ranges;
222
- let sNavigationPropertyName: string | undefined, sTargetPropertyName: string | undefined, aValidProperties: Record<string, object>;
223
- if (sPropertyName && sPropertyName.lastIndexOf("/") > -1) {
224
- sNavigationPropertyName = sPropertyName.substring(0, sPropertyName.lastIndexOf("/") + 1);
225
- sTargetPropertyName = sPropertyName.replace(sNavigationPropertyName, "");
226
- aValidProperties = oMetaModel.getObject(sEntitySetPath + "/" + sNavigationPropertyName);
227
- } else {
228
- aValidProperties = oMetaModel.getObject(sEntitySetPath + "/");
229
- sTargetPropertyName = sPropertyName;
230
- }
231
- for (const key in aValidProperties) {
232
- let aConditions: any[] = [];
233
- if (sTargetPropertyName === key) {
234
- const oValidProperty = aValidProperties[key] as any;
235
- aConditions = (aConditions || []).concat(
236
- _buildConditionsFromSelectionRanges(Ranges, oValidProperty, sPropertyName, getCustomConditions)
237
- );
238
- if (aConditions.length) {
239
- oFilterConditions[sPropertyName] = (oFilterConditions[sPropertyName] || []).concat(aConditions);
240
- }
225
+ const propertyName: any = selectOption.PropertyName,
226
+ filterConditions: Record<string, FilterConditions[]> = {},
227
+ propertyPath: string = propertyName.value || propertyName.$PropertyPath,
228
+ Ranges: SelectionRangeTypeTypes[] = selectOption.Ranges;
229
+ const targetProperty = _getProperty(propertyPath, metaModel, entitySetPath);
230
+ if (targetProperty) {
231
+ const conditions: any[] = _buildConditionsFromSelectionRanges(Ranges, targetProperty, propertyPath, getCustomConditions);
232
+ if (conditions.length) {
233
+ filterConditions[propertyPath] = (filterConditions[propertyPath] || []).concat(conditions);
241
234
  }
242
235
  }
243
- return oFilterConditions;
236
+ return filterConditions;
244
237
  }
245
238
 
246
239
  export function getFiltersConditionsFromSelectionVariant(
@@ -286,15 +279,21 @@ export function getFiltersConditionsFromSelectionVariant(
286
279
  return oFilterConditions;
287
280
  }
288
281
 
289
- export function getConditions(Range: any, oValidProperty: any) {
282
+ export function getConditions(Range: any, oValidProperty: any): ConditionObject | undefined {
290
283
  let oCondition;
291
284
  const sign: string | undefined = Range.Sign;
292
285
  const sOption: string | undefined = Range.Option ? getOperator(Range.Option) : undefined;
293
- const oValue1: any = getTypeCompliantValue(Range.Low, oValidProperty.$Type);
294
- const oValue2: any = Range.High ? getTypeCompliantValue(Range.High, oValidProperty.$Type) : undefined;
286
+ const oValue1: any = getTypeCompliantValue(Range.Low, oValidProperty.$Type || oValidProperty.type);
287
+ const oValue2: any = Range.High ? getTypeCompliantValue(Range.High, oValidProperty.$Type || oValidProperty.type) : undefined;
295
288
  const oConditionValues = resolveConditionValues(sOption, oValue1, oValue2, sign) as any;
296
289
  if (oConditionValues) {
297
- oCondition = createCondition(oConditionValues.operator, oConditionValues.values, null, null, ConditionValidated.Validated);
290
+ oCondition = Condition.createCondition(
291
+ oConditionValues.operator,
292
+ oConditionValues.values,
293
+ null,
294
+ null,
295
+ ConditionValidated.Validated
296
+ );
298
297
  }
299
298
  return oCondition;
300
299
  }
@@ -311,7 +310,7 @@ const getDefaultValueFilters = function(oContext: any, properties: any): Record<
311
310
  if (defaultFilterValue !== undefined) {
312
311
  const PropertyName = key;
313
312
  filterConditions[PropertyName] = [
314
- createCondition("EQ", [defaultFilterValue], null, null, ConditionValidated.Validated) as FilterConditions
313
+ Condition.createCondition("EQ", [defaultFilterValue], null, null, ConditionValidated.Validated) as FilterConditions
315
314
  ];
316
315
  }
317
316
  }
@@ -329,7 +328,9 @@ const getDefaultSemanticDateFilters = function(
329
328
  for (const key in properties) {
330
329
  // currently defaultSemanticDates can support only one entry, we pick the first one directly using 0 index
331
330
  if (defaultSemanticDates[key] && defaultSemanticDates[key][0]) {
332
- filterConditions[key] = [createCondition(defaultSemanticDates[key][0].operator, [], null, null, null) as FilterConditions];
331
+ filterConditions[key] = [
332
+ Condition.createCondition(defaultSemanticDates[key][0].operator, [], null, null, null) as FilterConditions
333
+ ];
333
334
  }
334
335
  }
335
336
  }
@@ -339,7 +340,7 @@ const getDefaultSemanticDateFilters = function(
339
340
  function getEditStatusFilter(): Record<string, FilterConditions[]> {
340
341
  const ofilterConditions: Record<string, FilterConditions[]> = {};
341
342
  ofilterConditions["$editState"] = [
342
- createCondition("DRAFT_EDIT_STATE", ["ALL"], null, null, ConditionValidated.Validated) as FilterConditions
343
+ Condition.createCondition("DRAFT_EDIT_STATE", ["ALL"], null, null, ConditionValidated.Validated) as FilterConditions
343
344
  ];
344
345
  return ofilterConditions;
345
346
  }
@@ -219,7 +219,7 @@ sap.ui.define([], function () {
219
219
  var hasValueHelpWithFixedValues = function (oProperty) {
220
220
  var _oProperty$annotation46, _oProperty$annotation47, _oProperty$annotation48;
221
221
 
222
- return !!((_oProperty$annotation46 = oProperty.annotations) !== null && _oProperty$annotation46 !== void 0 && (_oProperty$annotation47 = _oProperty$annotation46.Common) !== null && _oProperty$annotation47 !== void 0 && (_oProperty$annotation48 = _oProperty$annotation47.ValueListWithFixedValues) !== null && _oProperty$annotation48 !== void 0 && _oProperty$annotation48.valueOf());
222
+ return !!(oProperty !== null && oProperty !== void 0 && (_oProperty$annotation46 = oProperty.annotations) !== null && _oProperty$annotation46 !== void 0 && (_oProperty$annotation47 = _oProperty$annotation46.Common) !== null && _oProperty$annotation47 !== void 0 && (_oProperty$annotation48 = _oProperty$annotation47.ValueListWithFixedValues) !== null && _oProperty$annotation48 !== void 0 && _oProperty$annotation48.valueOf());
223
223
  };
224
224
  /**
225
225
  * Check whether the property has a value help for validation annotation defined or not.
@@ -300,4 +300,4 @@ sap.ui.define([], function () {
300
300
  _exports.hasCurrency = hasCurrency;
301
301
  return _exports;
302
302
  }, false);
303
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlByb3BlcnR5SGVscGVyLnRzIl0sIm5hbWVzIjpbImlzUHJvcGVydHkiLCJwcm9wZXJ0eSIsImhhc093blByb3BlcnR5IiwiX3R5cGUiLCJpc0NvbXB1dGVkIiwib1Byb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJDb3JlIiwiQ29tcHV0ZWQiLCJ2YWx1ZU9mIiwiaXNJbW11dGFibGUiLCJJbW11dGFibGUiLCJpc0tleSIsImhhc0RhdGVUeXBlIiwiaW5kZXhPZiIsInR5cGUiLCJnZXRMYWJlbCIsIkNvbW1vbiIsIkxhYmVsIiwidG9TdHJpbmciLCJoYXNTZW1hbnRpY09iamVjdCIsIlNlbWFudGljT2JqZWN0IiwiaXNQYXRoRXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJpc0Fubm90YXRpb25QYXRoRXhwcmVzc2lvbiIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJNZWFzdXJlcyIsIlVuaXQiLCIkdGFyZ2V0IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJwYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJJU09DdXJyZW5jeSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiVGV4dCIsImdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQiLCJzVGFyZ2V0VmFsdWUiLCJVSSIsIkRhdGFGaWVsZERlZmF1bHQiLCJUYXJnZXQiLCJUYXJnZXRWYWx1ZSIsImhhc1ZhbHVlSGVscCIsIlZhbHVlTGlzdCIsIlZhbHVlTGlzdFJlZmVyZW5jZXMiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJWYWx1ZUxpc3RNYXBwaW5nIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiaGFzVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiIsIlZhbHVlTGlzdEZvclZhbGlkYXRpb24iLCJpc1VuaXQiLCJJc1VuaXQiLCJoYXNVbml0IiwiaXNDdXJyZW5jeSIsIklzQ3VycmVuY3kiLCJoYXNDdXJyZW5jeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sV0FBU0EsVUFBVCxDQUFvQkMsUUFBcEIsRUFBeUQ7QUFDL0QsV0FBT0EsUUFBUSxJQUFLQSxRQUFELENBQXVCQyxjQUF2QixDQUFzQyxPQUF0QyxDQUFaLElBQStERCxRQUFELENBQXVCRSxLQUF2QixLQUFpQyxVQUF0RztBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLE1BQU1DLFVBQVUsR0FBRyxVQUFTQyxTQUFULEVBQXVDO0FBQUE7O0FBQ2hFLFdBQU8sQ0FBQywyQkFBQ0EsU0FBUyxDQUFDQyxXQUFYLDRFQUFDLHNCQUF1QkMsSUFBeEIsNkVBQUMsdUJBQTZCQyxRQUE5QixtREFBQyx1QkFBdUNDLE9BQXZDLEVBQUQsQ0FBUjtBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUMsV0FBVyxHQUFHLFVBQVNMLFNBQVQsRUFBdUM7QUFBQTs7QUFDakUsV0FBTyxDQUFDLDRCQUFDQSxTQUFTLENBQUNDLFdBQVgsNkVBQUMsdUJBQXVCQyxJQUF4Qiw2RUFBQyx1QkFBNkJJLFNBQTlCLG1EQUFDLHVCQUF3Q0YsT0FBeEMsRUFBRCxDQUFSO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNRyxLQUFLLEdBQUcsVUFBU1AsU0FBVCxFQUF1QztBQUMzRCxXQUFPLENBQUMsQ0FBQ0EsU0FBUyxDQUFDTyxLQUFuQjtBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUMsV0FBVyxHQUFHLFVBQVNSLFNBQVQsRUFBdUM7QUFDakUsV0FBTyxDQUFDLFVBQUQsRUFBYSxjQUFiLEVBQTZCLG9CQUE3QixFQUFtRFMsT0FBbkQsQ0FBMkRULFNBQVMsQ0FBQ1UsSUFBckUsTUFBK0UsQ0FBQyxDQUF2RjtBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUMsUUFBUSxHQUFHLFVBQVNYLFNBQVQsRUFBc0M7QUFBQTs7QUFDN0QsV0FBTywyQkFBQUEsU0FBUyxDQUFDQyxXQUFWLDRHQUF1QlcsTUFBdkIsNEdBQStCQyxLQUEvQixrRkFBc0NDLFFBQXRDLE9BQW9ELEVBQTNEO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNQyxpQkFBaUIsR0FBRyxVQUFTZixTQUFULEVBQXVDO0FBQUE7O0FBQ3ZFLFdBQU8sQ0FBQyw2QkFBQ0EsU0FBUyxDQUFDQyxXQUFYLCtFQUFDLHdCQUF1QlcsTUFBeEIsb0RBQUMsd0JBQStCSSxjQUFoQyxDQUFSO0FBQ0EsR0FGTTs7OztBQUlBLE1BQU1DLGdCQUFnQixHQUFHLFVBQVlDLFVBQVosRUFBd0U7QUFDdkcsV0FBTyxDQUFDLENBQUNBLFVBQUYsSUFBZ0JBLFVBQVUsQ0FBQ1IsSUFBWCxLQUFvQlMsU0FBcEMsSUFBaURELFVBQVUsQ0FBQ1IsSUFBWCxLQUFvQixNQUE1RTtBQUNBLEdBRk07Ozs7QUFHQSxNQUFNVSwwQkFBMEIsR0FBRyxVQUFZRixVQUFaLEVBQXdFO0FBQ2pILFdBQU8sQ0FBQyxDQUFDQSxVQUFGLElBQWdCQSxVQUFVLENBQUNSLElBQVgsS0FBb0JTLFNBQXBDLElBQWlERCxVQUFVLENBQUNSLElBQVgsS0FBb0IsZ0JBQTVFO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNVyx5QkFBeUIsR0FBRyxVQUFTckIsU0FBVCxFQUFvRDtBQUFBOztBQUM1RixXQUFPaUIsZ0JBQWdCLENBQUNqQixTQUFELGFBQUNBLFNBQUQsa0RBQUNBLFNBQVMsQ0FBRUMsV0FBWix1RkFBQyx3QkFBd0JxQixRQUF6Qiw0REFBQyx3QkFBa0NDLElBQW5DLENBQWhCLDhCQUNGdkIsU0FBUyxDQUFDQyxXQURSLHVGQUNGLHdCQUF1QnFCLFFBRHJCLDREQUNGLHdCQUFpQ0MsSUFBakMsQ0FBc0NDLE9BRHBDLEdBRUpMLFNBRkg7QUFHQSxHQUpNOzs7O0FBTUEsTUFBTU0sNkJBQTZCLEdBQUcsVUFBU3pCLFNBQVQsRUFBa0Q7QUFBQTs7QUFDOUYsV0FBT2lCLGdCQUFnQixDQUFDakIsU0FBRCxhQUFDQSxTQUFELGtEQUFDQSxTQUFTLENBQUVDLFdBQVosdUZBQUMsd0JBQXdCcUIsUUFBekIsNERBQUMsd0JBQWtDQyxJQUFuQyxDQUFoQiw4QkFBMkR2QixTQUFTLENBQUNDLFdBQXJFLHVGQUEyRCx3QkFBdUJxQixRQUFsRiw0REFBMkQsd0JBQWlDQyxJQUFqQyxDQUFzQ0csSUFBakcsR0FBd0dQLFNBQS9HO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNUSw2QkFBNkIsR0FBRyxVQUFTM0IsU0FBVCxFQUFvRDtBQUFBOztBQUNoRyxXQUFPaUIsZ0JBQWdCLENBQUNqQixTQUFELGFBQUNBLFNBQUQsa0RBQUNBLFNBQVMsQ0FBRUMsV0FBWix1RkFBQyx3QkFBd0JxQixRQUF6Qiw0REFBQyx3QkFBa0NNLFdBQW5DLENBQWhCLDhCQUNGNUIsU0FBUyxDQUFDQyxXQURSLHVGQUNGLHdCQUF1QnFCLFFBRHJCLDREQUNGLHdCQUFpQ00sV0FBakMsQ0FBNkNKLE9BRDNDLEdBRUpMLFNBRkg7QUFHQSxHQUpNOzs7O0FBTUEsTUFBTVUsaUNBQWlDLEdBQUcsVUFBUzdCLFNBQVQsRUFBa0Q7QUFBQTs7QUFDbEcsV0FBT2lCLGdCQUFnQixDQUFDakIsU0FBRCxhQUFDQSxTQUFELGtEQUFDQSxTQUFTLENBQUVDLFdBQVosdUZBQUMsd0JBQXdCcUIsUUFBekIsNERBQUMsd0JBQWtDTSxXQUFuQyxDQUFoQiw4QkFBa0U1QixTQUFTLENBQUNDLFdBQTVFLHVGQUFrRSx3QkFBdUJxQixRQUF6Riw0REFBa0Usd0JBQWlDTSxXQUFqQyxDQUE2Q0YsSUFBL0csR0FBc0hQLFNBQTdIO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNVyw2QkFBNkIsR0FBRyxVQUFTOUIsU0FBVCxFQUFrRDtBQUFBOztBQUM5RixXQUFPaUIsZ0JBQWdCLDRCQUFDakIsU0FBUyxDQUFDQyxXQUFYLHVGQUFDLHdCQUF1QlcsTUFBeEIsNERBQUMsd0JBQStCbUIsSUFBaEMsQ0FBaEIsOEJBQXdEL0IsU0FBUyxDQUFDQyxXQUFsRSx1RkFBd0Qsd0JBQXVCVyxNQUEvRSw0REFBd0Qsd0JBQStCbUIsSUFBL0IsQ0FBb0NMLElBQTVGLEdBQW1HUCxTQUExRztBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBRU8sTUFBTWEseUJBQXlCLEdBQUcsVUFBU2hDLFNBQVQsRUFBNkM7QUFBQTs7QUFDckYsUUFBTWlDLFlBQVksR0FDakIsNEJBQUFqQyxTQUFTLENBQUNDLFdBQVYsK0dBQXVCaUMsRUFBdkIsK0dBQTJCQyxnQkFBM0IsK0dBQTZDQyxNQUE3QywrR0FBcURaLE9BQXJELCtHQUE4RGEsV0FBOUQsb0ZBQTJFdkIsUUFBM0UsaUNBQXlGZCxTQUFTLENBQUNxQyxXQUFuRywwREFBeUYsc0JBQXVCdkIsUUFBdkIsRUFBekYsQ0FERDtBQUVBLFdBQU9tQixZQUFZLEdBQUdBLFlBQUgsR0FBa0JkLFNBQXJDO0FBQ0EsR0FKTTtBQUtQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNbUIsWUFBWSxHQUFHLFVBQVN0QyxTQUFULEVBQXVDO0FBQUE7O0FBQ2xFLFdBQ0MsQ0FBQyw2QkFBQ0EsU0FBUyxDQUFDQyxXQUFYLCtFQUFDLHdCQUF1QlcsTUFBeEIsb0RBQUMsd0JBQStCMkIsU0FBaEMsQ0FBRCxJQUNBLENBQUMsNkJBQUN2QyxTQUFTLENBQUNDLFdBQVgsK0VBQUMsd0JBQXVCVyxNQUF4QixvREFBQyx3QkFBK0I0QixtQkFBaEMsQ0FERCxJQUVBLENBQUMsNkJBQUN4QyxTQUFTLENBQUNDLFdBQVgsK0VBQUMsd0JBQXVCVyxNQUF4QixvREFBQyx3QkFBK0I2Qix3QkFBaEMsQ0FGRCxJQUdBLENBQUMsNkJBQUN6QyxTQUFTLENBQUNDLFdBQVgsK0VBQUMsd0JBQXVCVyxNQUF4QixvREFBQyx3QkFBK0I4QixnQkFBaEMsQ0FKRjtBQU1BLEdBUE07QUFTUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUMsMkJBQTJCLEdBQUcsVUFBUzNDLFNBQVQsRUFBdUM7QUFBQTs7QUFDakYsV0FBTyxDQUFDLDZCQUFDQSxTQUFTLENBQUNDLFdBQVgsK0VBQUMsd0JBQXVCVyxNQUF4QiwrRUFBQyx3QkFBK0I2Qix3QkFBaEMsb0RBQUMsd0JBQXlEckMsT0FBekQsRUFBRCxDQUFSO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNd0MseUJBQXlCLEdBQUcsVUFBUzVDLFNBQVQsRUFBdUM7QUFBQTs7QUFDL0UsV0FBTyw0QkFBQUEsU0FBUyxDQUFDQyxXQUFWLCtHQUF1QlcsTUFBdkIsb0ZBQStCaUMsc0JBQS9CLE1BQTBEMUIsU0FBakU7QUFDQSxHQUZNO0FBSVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLE1BQU0yQixNQUFNLEdBQUcsVUFBUzlDLFNBQVQsRUFBdUM7QUFBQTs7QUFDNUQsV0FBTyxDQUFDLDZCQUFDQSxTQUFTLENBQUNDLFdBQVgsK0VBQUMsd0JBQXVCVyxNQUF4QiwrRUFBQyx3QkFBK0JtQyxNQUFoQyxvREFBQyx3QkFBdUMzQyxPQUF2QyxFQUFELENBQVI7QUFDQSxHQUZNO0FBSVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUVPLE1BQU00QyxPQUFPLEdBQUcsVUFBU2hELFNBQVQsRUFBdUM7QUFBQTs7QUFDN0QsV0FBTyw0QkFBQUEsU0FBUyxDQUFDQyxXQUFWLCtHQUF1QnFCLFFBQXZCLG9GQUFpQ0MsSUFBakMsTUFBMENKLFNBQWpEO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNOEIsVUFBVSxHQUFHLFVBQVNqRCxTQUFULEVBQXVDO0FBQUE7O0FBQ2hFLFdBQU8sQ0FBQyw2QkFBQ0EsU0FBUyxDQUFDQyxXQUFYLCtFQUFDLHdCQUF1QlcsTUFBeEIsK0VBQUMsd0JBQStCc0MsVUFBaEMsb0RBQUMsd0JBQTJDOUMsT0FBM0MsRUFBRCxDQUFSO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNK0MsV0FBVyxHQUFHLFVBQVNuRCxTQUFULEVBQXVDO0FBQUE7O0FBQ2pFLFdBQU8sNEJBQUFBLFNBQVMsQ0FBQ0MsV0FBViwrR0FBdUJxQixRQUF2QixvRkFBaUNNLFdBQWpDLE1BQWlEVCxTQUF4RDtBQUNBLEdBRk0iLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuXG4vKipcbiAqIElkZW50aWZ5IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXNzZWQgaXMgYSBcIlByb3BlcnR5XCIgKGhhcyBhIF90eXBlKS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSBBIHRhcmdldCBwcm9wZXJ0eSB0byBldmFsdWF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFZhbGlkYXRlIHRoYXQgcHJvcGVydHkgaXMgYSBQcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eShwcm9wZXJ0eTogYW55KTogcHJvcGVydHkgaXMgUHJvcGVydHkge1xuXHRyZXR1cm4gcHJvcGVydHkgJiYgKHByb3BlcnR5IGFzIFByb3BlcnR5KS5oYXNPd25Qcm9wZXJ0eShcIl90eXBlXCIpICYmIChwcm9wZXJ0eSBhcyBQcm9wZXJ0eSkuX3R5cGUgPT09IFwiUHJvcGVydHlcIjtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgdGhlIENvcmUuQ29tcHV0ZWQgYW5ub3RhdGlvbiBvciBub3QuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBpc0NvbXB1dGVkID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvcmU/LkNvbXB1dGVkPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyB0aGUgQ29yZS5JbW11dGFibGUgYW5ub3RhdGlvbiBvciBub3QuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgaXQncyBpbW11dGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW1tdXRhYmxlID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvcmU/LkltbXV0YWJsZT8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGtleSBvciBub3QuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgaXQncyBhIGtleVxuICovXG5leHBvcnQgY29uc3QgaXNLZXkgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5pc0tleTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIGRhdGUgdGltZSBvciBub3QuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIG9mIHR5cGUgZGF0ZSAvIGRhdGV0aW1lIC8gZGF0ZXRpbWVvZmZzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0RhdGVUeXBlID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gW1wiRWRtLkRhdGVcIiwgXCJFZG0uRGF0ZVRpbWVcIiwgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIl0uaW5kZXhPZihvUHJvcGVydHkudHlwZSkgIT09IC0xO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgbGFiZWwgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBsYWJlbCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldExhYmVsID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgfHwgXCJcIjtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgc2VtYW50aWMgb2JqZWN0IGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0IGhhcyBhIHNlbWFudGljIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgaGFzU2VtYW50aWNPYmplY3QgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY09iamVjdDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BhdGhFeHByZXNzaW9uID0gZnVuY3Rpb248VD4oZXhwcmVzc2lvbjogYW55KTogZXhwcmVzc2lvbiBpcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gISFleHByZXNzaW9uICYmIGV4cHJlc3Npb24udHlwZSAhPT0gdW5kZWZpbmVkICYmIGV4cHJlc3Npb24udHlwZSA9PT0gXCJQYXRoXCI7XG59O1xuZXhwb3J0IGNvbnN0IGlzQW5ub3RhdGlvblBhdGhFeHByZXNzaW9uID0gZnVuY3Rpb248VD4oZXhwcmVzc2lvbjogYW55KTogZXhwcmVzc2lvbiBpcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gISFleHByZXNzaW9uICYmIGV4cHJlc3Npb24udHlwZSAhPT0gdW5kZWZpbmVkICYmIGV4cHJlc3Npb24udHlwZSA9PT0gXCJBbm5vdGF0aW9uUGF0aFwiO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHVuaXQgcHJvcGVydHkgYXNzb2NpYXRlZCB0byB0aGUgcHJvcGVydHksIGlmIGFwcGxpY2FibGUuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtQcm9wZXJ0eSB8IHVuZGVmaW5lZH0gVGhlIHVuaXQgcHJvcGVydHksIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KVxuXHRcdD8gKChvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0LiR0YXJnZXQgYXMgdW5rbm93bikgYXMgUHJvcGVydHkpXG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQpID8gb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdC5wYXRoIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFzc29jaWF0ZWQgY3VycmVuY3kgcHJvcGVydHkgZm9yIHRoYXQgcHJvcGVydHkgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7UHJvcGVydHkgfCB1bmRlZmluZWR9IFRoZSB1bml0IHByb3BlcnR5LCBpZiBpdCBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5ID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5KVxuXHRcdD8gKChvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeS4kdGFyZ2V0IGFzIHVua25vd24pIGFzIFByb3BlcnR5KVxuXHRcdDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kpID8gb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kucGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBDb21tb24uVGV4dCBwcm9wZXJ0eSBwYXRoIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gVGhlIENvbW1vbi5UZXh0IHByb3BlcnR5IHBhdGggb3IgdW5kZWZpbmVkIGlmIGl0IGRvZXMgbm90IGV4aXRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0KSA/IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LnBhdGggOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgVGFyZ2V0VmFsdWUgZnJvbSBkYXRhcG9pbnQuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IHRoZSB0YXJnZXQgcHJvcGVydHkvZGF0YVBvaW50XG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSB0aGUgVGFyZ2V0VmFsdWVcbiAqL1xuXG5leHBvcnQgY29uc3QgZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludCA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc1RhcmdldFZhbHVlID1cblx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0Py5UYXJnZXQ/LiR0YXJnZXQ/LlRhcmdldFZhbHVlPy50b1N0cmluZygpIHx8IG9Qcm9wZXJ0eS5UYXJnZXRWYWx1ZT8udG9TdHJpbmcoKTtcblx0cmV0dXJuIHNUYXJnZXRWYWx1ZSA/IHNUYXJnZXRWYWx1ZSA6IHVuZGVmaW5lZDtcbn07XG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHZhbHVlIGhlbHAgYW5ub3RhdGlvbiBkZWZpbmVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBpdCBoYXMgYSB2YWx1ZSBoZWxwXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNWYWx1ZUhlbHAgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0ISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0IHx8XG5cdFx0ISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVmZXJlbmNlcyB8fFxuXHRcdCEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyB8fFxuXHRcdCEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdE1hcHBpbmdcblx0KTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdmFsdWUgaGVscCB3aXRoIGZpeGVkIHZhbHVlIGFubm90YXRpb24gZGVmaW5lZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgaXQgaGFzIGEgdmFsdWUgaGVscFxuICovXG5leHBvcnQgY29uc3QgaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHZhbHVlIGhlbHAgZm9yIHZhbGlkYXRpb24gYW5ub3RhdGlvbiBkZWZpbmVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBpdCBoYXMgYSB2YWx1ZSBoZWxwXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdEZvclZhbGlkYXRpb24gIT09IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEgdW5pdCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgdW5pdFxuICovXG5leHBvcnQgY29uc3QgaXNVbml0ID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNVbml0Py52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSB1bml0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgdW5pdFxuICovXG5cbmV4cG9ydCBjb25zdCBoYXNVbml0ID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSBjdXJyZW5jeSBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgY3VycmVuY3lcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQ3VycmVuY3kgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0N1cnJlbmN5Py52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSBjdXJyZW5jeSBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBhIGN1cnJlbmN5XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNDdXJyZW5jeSA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5ICE9PSB1bmRlZmluZWQ7XG59O1xuIl19
303
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlByb3BlcnR5SGVscGVyLnRzIl0sIm5hbWVzIjpbImlzUHJvcGVydHkiLCJwcm9wZXJ0eSIsImhhc093blByb3BlcnR5IiwiX3R5cGUiLCJpc0NvbXB1dGVkIiwib1Byb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJDb3JlIiwiQ29tcHV0ZWQiLCJ2YWx1ZU9mIiwiaXNJbW11dGFibGUiLCJJbW11dGFibGUiLCJpc0tleSIsImhhc0RhdGVUeXBlIiwiaW5kZXhPZiIsInR5cGUiLCJnZXRMYWJlbCIsIkNvbW1vbiIsIkxhYmVsIiwidG9TdHJpbmciLCJoYXNTZW1hbnRpY09iamVjdCIsIlNlbWFudGljT2JqZWN0IiwiaXNQYXRoRXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJpc0Fubm90YXRpb25QYXRoRXhwcmVzc2lvbiIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJNZWFzdXJlcyIsIlVuaXQiLCIkdGFyZ2V0IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJwYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJJU09DdXJyZW5jeSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiVGV4dCIsImdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQiLCJzVGFyZ2V0VmFsdWUiLCJVSSIsIkRhdGFGaWVsZERlZmF1bHQiLCJUYXJnZXQiLCJUYXJnZXRWYWx1ZSIsImhhc1ZhbHVlSGVscCIsIlZhbHVlTGlzdCIsIlZhbHVlTGlzdFJlZmVyZW5jZXMiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJWYWx1ZUxpc3RNYXBwaW5nIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiaGFzVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiIsIlZhbHVlTGlzdEZvclZhbGlkYXRpb24iLCJpc1VuaXQiLCJJc1VuaXQiLCJoYXNVbml0IiwiaXNDdXJyZW5jeSIsIklzQ3VycmVuY3kiLCJoYXNDdXJyZW5jeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sV0FBU0EsVUFBVCxDQUFvQkMsUUFBcEIsRUFBeUQ7QUFDL0QsV0FBT0EsUUFBUSxJQUFLQSxRQUFELENBQXVCQyxjQUF2QixDQUFzQyxPQUF0QyxDQUFaLElBQStERCxRQUFELENBQXVCRSxLQUF2QixLQUFpQyxVQUF0RztBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLE1BQU1DLFVBQVUsR0FBRyxVQUFTQyxTQUFULEVBQXVDO0FBQUE7O0FBQ2hFLFdBQU8sQ0FBQywyQkFBQ0EsU0FBUyxDQUFDQyxXQUFYLDRFQUFDLHNCQUF1QkMsSUFBeEIsNkVBQUMsdUJBQTZCQyxRQUE5QixtREFBQyx1QkFBdUNDLE9BQXZDLEVBQUQsQ0FBUjtBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUMsV0FBVyxHQUFHLFVBQVNMLFNBQVQsRUFBdUM7QUFBQTs7QUFDakUsV0FBTyxDQUFDLDRCQUFDQSxTQUFTLENBQUNDLFdBQVgsNkVBQUMsdUJBQXVCQyxJQUF4Qiw2RUFBQyx1QkFBNkJJLFNBQTlCLG1EQUFDLHVCQUF3Q0YsT0FBeEMsRUFBRCxDQUFSO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNRyxLQUFLLEdBQUcsVUFBU1AsU0FBVCxFQUF1QztBQUMzRCxXQUFPLENBQUMsQ0FBQ0EsU0FBUyxDQUFDTyxLQUFuQjtBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUMsV0FBVyxHQUFHLFVBQVNSLFNBQVQsRUFBdUM7QUFDakUsV0FBTyxDQUFDLFVBQUQsRUFBYSxjQUFiLEVBQTZCLG9CQUE3QixFQUFtRFMsT0FBbkQsQ0FBMkRULFNBQVMsQ0FBQ1UsSUFBckUsTUFBK0UsQ0FBQyxDQUF2RjtBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUMsUUFBUSxHQUFHLFVBQVNYLFNBQVQsRUFBc0M7QUFBQTs7QUFDN0QsV0FBTywyQkFBQUEsU0FBUyxDQUFDQyxXQUFWLDRHQUF1QlcsTUFBdkIsNEdBQStCQyxLQUEvQixrRkFBc0NDLFFBQXRDLE9BQW9ELEVBQTNEO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNQyxpQkFBaUIsR0FBRyxVQUFTZixTQUFULEVBQXVDO0FBQUE7O0FBQ3ZFLFdBQU8sQ0FBQyw2QkFBQ0EsU0FBUyxDQUFDQyxXQUFYLCtFQUFDLHdCQUF1QlcsTUFBeEIsb0RBQUMsd0JBQStCSSxjQUFoQyxDQUFSO0FBQ0EsR0FGTTs7OztBQUlBLE1BQU1DLGdCQUFnQixHQUFHLFVBQVlDLFVBQVosRUFBd0U7QUFDdkcsV0FBTyxDQUFDLENBQUNBLFVBQUYsSUFBZ0JBLFVBQVUsQ0FBQ1IsSUFBWCxLQUFvQlMsU0FBcEMsSUFBaURELFVBQVUsQ0FBQ1IsSUFBWCxLQUFvQixNQUE1RTtBQUNBLEdBRk07Ozs7QUFHQSxNQUFNVSwwQkFBMEIsR0FBRyxVQUFZRixVQUFaLEVBQXdFO0FBQ2pILFdBQU8sQ0FBQyxDQUFDQSxVQUFGLElBQWdCQSxVQUFVLENBQUNSLElBQVgsS0FBb0JTLFNBQXBDLElBQWlERCxVQUFVLENBQUNSLElBQVgsS0FBb0IsZ0JBQTVFO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNVyx5QkFBeUIsR0FBRyxVQUFTckIsU0FBVCxFQUFvRDtBQUFBOztBQUM1RixXQUFPaUIsZ0JBQWdCLENBQUNqQixTQUFELGFBQUNBLFNBQUQsa0RBQUNBLFNBQVMsQ0FBRUMsV0FBWix1RkFBQyx3QkFBd0JxQixRQUF6Qiw0REFBQyx3QkFBa0NDLElBQW5DLENBQWhCLDhCQUNGdkIsU0FBUyxDQUFDQyxXQURSLHVGQUNGLHdCQUF1QnFCLFFBRHJCLDREQUNGLHdCQUFpQ0MsSUFBakMsQ0FBc0NDLE9BRHBDLEdBRUpMLFNBRkg7QUFHQSxHQUpNOzs7O0FBTUEsTUFBTU0sNkJBQTZCLEdBQUcsVUFBU3pCLFNBQVQsRUFBa0Q7QUFBQTs7QUFDOUYsV0FBT2lCLGdCQUFnQixDQUFDakIsU0FBRCxhQUFDQSxTQUFELGtEQUFDQSxTQUFTLENBQUVDLFdBQVosdUZBQUMsd0JBQXdCcUIsUUFBekIsNERBQUMsd0JBQWtDQyxJQUFuQyxDQUFoQiw4QkFBMkR2QixTQUFTLENBQUNDLFdBQXJFLHVGQUEyRCx3QkFBdUJxQixRQUFsRiw0REFBMkQsd0JBQWlDQyxJQUFqQyxDQUFzQ0csSUFBakcsR0FBd0dQLFNBQS9HO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNUSw2QkFBNkIsR0FBRyxVQUFTM0IsU0FBVCxFQUFvRDtBQUFBOztBQUNoRyxXQUFPaUIsZ0JBQWdCLENBQUNqQixTQUFELGFBQUNBLFNBQUQsa0RBQUNBLFNBQVMsQ0FBRUMsV0FBWix1RkFBQyx3QkFBd0JxQixRQUF6Qiw0REFBQyx3QkFBa0NNLFdBQW5DLENBQWhCLDhCQUNGNUIsU0FBUyxDQUFDQyxXQURSLHVGQUNGLHdCQUF1QnFCLFFBRHJCLDREQUNGLHdCQUFpQ00sV0FBakMsQ0FBNkNKLE9BRDNDLEdBRUpMLFNBRkg7QUFHQSxHQUpNOzs7O0FBTUEsTUFBTVUsaUNBQWlDLEdBQUcsVUFBUzdCLFNBQVQsRUFBa0Q7QUFBQTs7QUFDbEcsV0FBT2lCLGdCQUFnQixDQUFDakIsU0FBRCxhQUFDQSxTQUFELGtEQUFDQSxTQUFTLENBQUVDLFdBQVosdUZBQUMsd0JBQXdCcUIsUUFBekIsNERBQUMsd0JBQWtDTSxXQUFuQyxDQUFoQiw4QkFBa0U1QixTQUFTLENBQUNDLFdBQTVFLHVGQUFrRSx3QkFBdUJxQixRQUF6Riw0REFBa0Usd0JBQWlDTSxXQUFqQyxDQUE2Q0YsSUFBL0csR0FBc0hQLFNBQTdIO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNVyw2QkFBNkIsR0FBRyxVQUFTOUIsU0FBVCxFQUFrRDtBQUFBOztBQUM5RixXQUFPaUIsZ0JBQWdCLDRCQUFDakIsU0FBUyxDQUFDQyxXQUFYLHVGQUFDLHdCQUF1QlcsTUFBeEIsNERBQUMsd0JBQStCbUIsSUFBaEMsQ0FBaEIsOEJBQXdEL0IsU0FBUyxDQUFDQyxXQUFsRSx1RkFBd0Qsd0JBQXVCVyxNQUEvRSw0REFBd0Qsd0JBQStCbUIsSUFBL0IsQ0FBb0NMLElBQTVGLEdBQW1HUCxTQUExRztBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBRU8sTUFBTWEseUJBQXlCLEdBQUcsVUFBU2hDLFNBQVQsRUFBNkM7QUFBQTs7QUFDckYsUUFBTWlDLFlBQVksR0FDakIsNEJBQUFqQyxTQUFTLENBQUNDLFdBQVYsK0dBQXVCaUMsRUFBdkIsK0dBQTJCQyxnQkFBM0IsK0dBQTZDQyxNQUE3QywrR0FBcURaLE9BQXJELCtHQUE4RGEsV0FBOUQsb0ZBQTJFdkIsUUFBM0UsaUNBQXlGZCxTQUFTLENBQUNxQyxXQUFuRywwREFBeUYsc0JBQXVCdkIsUUFBdkIsRUFBekYsQ0FERDtBQUVBLFdBQU9tQixZQUFZLEdBQUdBLFlBQUgsR0FBa0JkLFNBQXJDO0FBQ0EsR0FKTTtBQUtQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNbUIsWUFBWSxHQUFHLFVBQVN0QyxTQUFULEVBQXVDO0FBQUE7O0FBQ2xFLFdBQ0MsQ0FBQyw2QkFBQ0EsU0FBUyxDQUFDQyxXQUFYLCtFQUFDLHdCQUF1QlcsTUFBeEIsb0RBQUMsd0JBQStCMkIsU0FBaEMsQ0FBRCxJQUNBLENBQUMsNkJBQUN2QyxTQUFTLENBQUNDLFdBQVgsK0VBQUMsd0JBQXVCVyxNQUF4QixvREFBQyx3QkFBK0I0QixtQkFBaEMsQ0FERCxJQUVBLENBQUMsNkJBQUN4QyxTQUFTLENBQUNDLFdBQVgsK0VBQUMsd0JBQXVCVyxNQUF4QixvREFBQyx3QkFBK0I2Qix3QkFBaEMsQ0FGRCxJQUdBLENBQUMsNkJBQUN6QyxTQUFTLENBQUNDLFdBQVgsK0VBQUMsd0JBQXVCVyxNQUF4QixvREFBQyx3QkFBK0I4QixnQkFBaEMsQ0FKRjtBQU1BLEdBUE07QUFTUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUMsMkJBQTJCLEdBQUcsVUFBUzNDLFNBQVQsRUFBdUM7QUFBQTs7QUFDakYsV0FBTyxDQUFDLEVBQUNBLFNBQUQsYUFBQ0EsU0FBRCwwQ0FBQ0EsU0FBUyxDQUFFQyxXQUFaLCtFQUFDLHdCQUF3QlcsTUFBekIsK0VBQUMsd0JBQWdDNkIsd0JBQWpDLG9EQUFDLHdCQUEwRHJDLE9BQTFELEVBQUQsQ0FBUjtBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTXdDLHlCQUF5QixHQUFHLFVBQVM1QyxTQUFULEVBQXVDO0FBQUE7O0FBQy9FLFdBQU8sNEJBQUFBLFNBQVMsQ0FBQ0MsV0FBViwrR0FBdUJXLE1BQXZCLG9GQUErQmlDLHNCQUEvQixNQUEwRDFCLFNBQWpFO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNMkIsTUFBTSxHQUFHLFVBQVM5QyxTQUFULEVBQXVDO0FBQUE7O0FBQzVELFdBQU8sQ0FBQyw2QkFBQ0EsU0FBUyxDQUFDQyxXQUFYLCtFQUFDLHdCQUF1QlcsTUFBeEIsK0VBQUMsd0JBQStCbUMsTUFBaEMsb0RBQUMsd0JBQXVDM0MsT0FBdkMsRUFBRCxDQUFSO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFFTyxNQUFNNEMsT0FBTyxHQUFHLFVBQVNoRCxTQUFULEVBQXVDO0FBQUE7O0FBQzdELFdBQU8sNEJBQUFBLFNBQVMsQ0FBQ0MsV0FBViwrR0FBdUJxQixRQUF2QixvRkFBaUNDLElBQWpDLE1BQTBDSixTQUFqRDtBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTThCLFVBQVUsR0FBRyxVQUFTakQsU0FBVCxFQUF1QztBQUFBOztBQUNoRSxXQUFPLENBQUMsNkJBQUNBLFNBQVMsQ0FBQ0MsV0FBWCwrRUFBQyx3QkFBdUJXLE1BQXhCLCtFQUFDLHdCQUErQnNDLFVBQWhDLG9EQUFDLHdCQUEyQzlDLE9BQTNDLEVBQUQsQ0FBUjtBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTStDLFdBQVcsR0FBRyxVQUFTbkQsU0FBVCxFQUF1QztBQUFBOztBQUNqRSxXQUFPLDRCQUFBQSxTQUFTLENBQUNDLFdBQVYsK0dBQXVCcUIsUUFBdkIsb0ZBQWlDTSxXQUFqQyxNQUFpRFQsU0FBeEQ7QUFDQSxHQUZNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcblxuLyoqXG4gKiBJZGVudGlmeSBpZiB0aGUgZ2l2ZW4gcHJvcGVydHkgcGFzc2VkIGlzIGEgXCJQcm9wZXJ0eVwiIChoYXMgYSBfdHlwZSkuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgQSB0YXJnZXQgcHJvcGVydHkgdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSBWYWxpZGF0ZSB0aGF0IHByb3BlcnR5IGlzIGEgUHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHkocHJvcGVydHk6IGFueSk6IHByb3BlcnR5IGlzIFByb3BlcnR5IHtcblx0cmV0dXJuIHByb3BlcnR5ICYmIChwcm9wZXJ0eSBhcyBQcm9wZXJ0eSkuaGFzT3duUHJvcGVydHkoXCJfdHlwZVwiKSAmJiAocHJvcGVydHkgYXMgUHJvcGVydHkpLl90eXBlID09PSBcIlByb3BlcnR5XCI7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIHRoZSBDb3JlLkNvbXB1dGVkIGFubm90YXRpb24gb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBjb21wdXRlZFxuICovXG5leHBvcnQgY29uc3QgaXNDb21wdXRlZCA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db3JlPy5Db21wdXRlZD8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgdGhlIENvcmUuSW1tdXRhYmxlIGFubm90YXRpb24gb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0J3MgaW1tdXRhYmxlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ltbXV0YWJsZSA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db3JlPy5JbW11dGFibGU/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSBrZXkgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0J3MgYSBrZXlcbiAqL1xuZXhwb3J0IGNvbnN0IGlzS2V5ID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuaXNLZXk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSBkYXRlIHRpbWUgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBvZiB0eXBlIGRhdGUgLyBkYXRldGltZSAvIGRhdGV0aW1lb2Zmc2V0XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNEYXRlVHlwZSA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIFtcIkVkbS5EYXRlXCIsIFwiRWRtLkRhdGVUaW1lXCIsIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCJdLmluZGV4T2Yob1Byb3BlcnR5LnR5cGUpICE9PSAtMTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGxhYmVsIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgbGFiZWwgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRMYWJlbCA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8IFwiXCI7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHNlbWFudGljIG9iamVjdCBkZWZpbmVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBpdCBoYXMgYSBzZW1hbnRpYyBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1NlbWFudGljT2JqZWN0ID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNPYmplY3Q7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQYXRoRXhwcmVzc2lvbiA9IGZ1bmN0aW9uPFQ+KGV4cHJlc3Npb246IGFueSk6IGV4cHJlc3Npb24gaXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuICEhZXhwcmVzc2lvbiAmJiBleHByZXNzaW9uLnR5cGUgIT09IHVuZGVmaW5lZCAmJiBleHByZXNzaW9uLnR5cGUgPT09IFwiUGF0aFwiO1xufTtcbmV4cG9ydCBjb25zdCBpc0Fubm90YXRpb25QYXRoRXhwcmVzc2lvbiA9IGZ1bmN0aW9uPFQ+KGV4cHJlc3Npb246IGFueSk6IGV4cHJlc3Npb24gaXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuICEhZXhwcmVzc2lvbiAmJiBleHByZXNzaW9uLnR5cGUgIT09IHVuZGVmaW5lZCAmJiBleHByZXNzaW9uLnR5cGUgPT09IFwiQW5ub3RhdGlvblBhdGhcIjtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB1bml0IHByb3BlcnR5IGFzc29jaWF0ZWQgdG8gdGhlIHByb3BlcnR5LCBpZiBhcHBsaWNhYmxlLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7UHJvcGVydHkgfCB1bmRlZmluZWR9IFRoZSB1bml0IHByb3BlcnR5LCBpZiBpdCBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdClcblx0XHQ/ICgob1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdC4kdGFyZ2V0IGFzIHVua25vd24pIGFzIFByb3BlcnR5KVxuXHRcdDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSA/IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQucGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhc3NvY2lhdGVkIGN1cnJlbmN5IHByb3BlcnR5IGZvciB0aGF0IHByb3BlcnR5IGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMge1Byb3BlcnR5IHwgdW5kZWZpbmVkfSBUaGUgdW5pdCBwcm9wZXJ0eSwgaWYgaXQgZXhpc3RzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSlcblx0XHQ/ICgob1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kuJHRhcmdldCBhcyB1bmtub3duKSBhcyBQcm9wZXJ0eSlcblx0XHQ6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5KSA/IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5LnBhdGggOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgQ29tbW9uLlRleHQgcHJvcGVydHkgcGF0aCBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSBDb21tb24uVGV4dCBwcm9wZXJ0eSBwYXRoIG9yIHVuZGVmaW5lZCBpZiBpdCBkb2VzIG5vdCBleGl0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCkgPyBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dC5wYXRoIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIFRhcmdldFZhbHVlIGZyb20gZGF0YXBvaW50LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSB0aGUgdGFyZ2V0IHByb3BlcnR5L2RhdGFQb2ludFxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gdGhlIFRhcmdldFZhbHVlXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQgPSBmdW5jdGlvbihvUHJvcGVydHk6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNUYXJnZXRWYWx1ZSA9XG5cdFx0b1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdD8uVGFyZ2V0Py4kdGFyZ2V0Py5UYXJnZXRWYWx1ZT8udG9TdHJpbmcoKSB8fCBvUHJvcGVydHkuVGFyZ2V0VmFsdWU/LnRvU3RyaW5nKCk7XG5cdHJldHVybiBzVGFyZ2V0VmFsdWUgPyBzVGFyZ2V0VmFsdWUgOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBoZWxwIGFubm90YXRpb24gZGVmaW5lZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgaXQgaGFzIGEgdmFsdWUgaGVscFxuICovXG5leHBvcnQgY29uc3QgaGFzVmFsdWVIZWxwID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdCEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdCB8fFxuXHRcdCEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdFJlZmVyZW5jZXMgfHxcblx0XHQhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgfHxcblx0XHQhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RNYXBwaW5nXG5cdCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHZhbHVlIGhlbHAgd2l0aCBmaXhlZCB2YWx1ZSBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdmFsdWUgaGVscCBmb3IgdmFsaWRhdGlvbiBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlTGlzdEZvclZhbGlkYXRpb24gPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSB1bml0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSB1bml0XG4gKi9cbmV4cG9ydCBjb25zdCBpc1VuaXQgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc1VuaXQ/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHVuaXQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gY2hlY2tcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgYSB1bml0XG4gKi9cblxuZXhwb3J0IGNvbnN0IGhhc1VuaXQgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0ICE9PSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGN1cnJlbmN5IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBjdXJyZW5jeVxuICovXG5leHBvcnQgY29uc3QgaXNDdXJyZW5jeSA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzQ3VycmVuY3k/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIGN1cnJlbmN5IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgY3VycmVuY3lcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0N1cnJlbmN5ID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgIT09IHVuZGVmaW5lZDtcbn07XG4iXX0=
@@ -154,7 +154,7 @@ export const hasValueHelp = function(oProperty: Property): boolean {
154
154
  * @returns {boolean} `true` if it has a value help
155
155
  */
156
156
  export const hasValueHelpWithFixedValues = function(oProperty: Property): boolean {
157
- return !!oProperty.annotations?.Common?.ValueListWithFixedValues?.valueOf();
157
+ return !!oProperty?.annotations?.Common?.ValueListWithFixedValues?.valueOf();
158
158
  };
159
159
 
160
160
  /**
@@ -10,9 +10,9 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
10
10
  var isDisabledExpression = FieldControlHelper.isDisabledExpression;
11
11
  var isNonEditableExpression = FieldControlHelper.isNonEditableExpression;
12
12
  var isReadOnlyExpression = FieldControlHelper.isReadOnlyExpression;
13
+ var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
13
14
  var getPathRelativeLocation = DataModelPathHelper.getPathRelativeLocation;
14
15
  var isPathUpdatable = DataModelPathHelper.isPathUpdatable;
15
- var getTargetEntitySetPath = DataModelPathHelper.getTargetEntitySetPath;
16
16
  var isProperty = PropertyHelper.isProperty;
17
17
  var isPathExpression = PropertyHelper.isPathExpression;
18
18
  var isKey = PropertyHelper.isKey;
@@ -22,6 +22,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
22
22
  var getAssociatedCurrencyProperty = PropertyHelper.getAssociatedCurrencyProperty;
23
23
  var getAssociatedUnitProperty = PropertyHelper.getAssociatedUnitProperty;
24
24
  var UI = BindingHelper.UI;
25
+ var singletonPathVisitor = BindingHelper.singletonPathVisitor;
25
26
  var or = BindingExpression.or;
26
27
  var not = BindingExpression.not;
27
28
  var isTruthy = BindingExpression.isTruthy;
@@ -31,6 +32,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
31
32
  var equal = BindingExpression.equal;
32
33
  var constant = BindingExpression.constant;
33
34
  var compileBinding = BindingExpression.compileBinding;
35
+ var bindingExpression = BindingExpression.bindingExpression;
34
36
  var annotationExpression = BindingExpression.annotationExpression;
35
37
  var and = BindingExpression.and;
36
38
  var addTypeInformation = BindingExpression.addTypeInformation;
@@ -77,7 +79,12 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
77
79
  // immutable and key while in the creation row
78
80
  // ui/isEditable
79
81
 
80
- var isPathUpdatableExpression = isPathUpdatable(oDataModelObjectPath, oPropertyPath);
82
+ var isPathUpdatableExpression = isPathUpdatable(oDataModelObjectPath, {
83
+ propertyPath: oPropertyPath,
84
+ pathVisitor: function (path, navigationPaths) {
85
+ return singletonPathVisitor(path, oDataModelObjectPath.convertedTypes, navigationPaths);
86
+ }
87
+ });
81
88
  var editableExpression = ifElse(or(not(isPathUpdatableExpression), isComputed(oProperty), isKey(oProperty), isImmutable(oProperty), isNonEditableExpression(oProperty)), ifElse(or(isComputed(oProperty), isNonEditableExpression(oProperty)), false, UI.IsTransientBinding), UI.IsEditable);
82
89
 
83
90
  if (bAsObject) {
@@ -86,6 +93,22 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
86
93
 
87
94
  return compileBinding(and(editableExpression, dataFieldEditableExpression));
88
95
  };
96
+
97
+ _exports.getEditableExpression = getEditableExpression;
98
+
99
+ var getCollaborationExpression = function (dataModelObjectPath, formatter) {
100
+ var _dataModelObjectPath$;
101
+
102
+ var objectPath = getTargetObjectPath(dataModelObjectPath);
103
+ var activityExpression = bindingExpression("/collaboration/activities" + objectPath, "internal");
104
+ var keys = dataModelObjectPath === null || dataModelObjectPath === void 0 ? void 0 : (_dataModelObjectPath$ = dataModelObjectPath.targetEntityType) === null || _dataModelObjectPath$ === void 0 ? void 0 : _dataModelObjectPath$.keys;
105
+ var keysExpressions = [];
106
+ keys === null || keys === void 0 ? void 0 : keys.forEach(function (key) {
107
+ var keyExpression = bindingExpression(key.name);
108
+ keysExpressions.push(keyExpression);
109
+ });
110
+ return formatResult([activityExpression].concat(keysExpressions), formatter);
111
+ };
89
112
  /**
90
113
  * Create the expression to generate an "enabled" boolean value.
91
114
  *
@@ -96,7 +119,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
96
119
  */
97
120
 
98
121
 
99
- _exports.getEditableExpression = getEditableExpression;
122
+ _exports.getCollaborationExpression = getCollaborationExpression;
100
123
 
101
124
  var getEnabledExpression = function (oPropertyPath, oDataFieldConverted) {
102
125
  var bAsObject = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
@@ -124,6 +147,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
124
147
  };
125
148
  /**
126
149
  * Create the expression to generate an "editMode" enum value.
150
+ *
127
151
  * @param {PropertyPath} oPropertyPath The input property
128
152
  * @param {DataModelObjectPath} oDataModelObjectPath The list of data model objects that are involved to reach that property
129
153
  * @param {boolean} bMeasureReadOnly Whether we should set UoM / currency field mode to read only
@@ -212,7 +236,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
212
236
 
213
237
  _exports.getFieldDisplay = getFieldDisplay;
214
238
 
215
- var formatWithTypeInformation = function (oProperty, propertyBindingExpression) {
239
+ var formatWithTypeInformation = function (oProperty, propertyBindingExpression, ignoreConstraints) {
216
240
  var outExpression = propertyBindingExpression;
217
241
 
218
242
  if (oProperty._type === "Property") {
@@ -223,7 +247,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
223
247
 
224
248
  outExpression.type = oTargetMapping.type;
225
249
 
226
- if (oTargetMapping.constraints) {
250
+ if (oTargetMapping.constraints && !ignoreConstraints) {
227
251
  var _oProperty$annotation, _oProperty$annotation2, _oProperty$annotation3, _oProperty$annotation4;
228
252
 
229
253
  outExpression.constraints = {};
@@ -330,7 +354,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
330
354
 
331
355
  _exports.getTypeConfig = getTypeConfig;
332
356
 
333
- var getBindingWithUnitOrCurrency = function (oPropertyDataModelPath, propertyBindingExpression) {
357
+ var getBindingWithUnitOrCurrency = function (oPropertyDataModelPath, propertyBindingExpression, ignoreUnitConstraint) {
334
358
  var _oPropertyDefinition$5, _oPropertyDefinition$6, _unit, _oPropertyDefinition$7, _oPropertyDefinition$8;
335
359
 
336
360
  var oPropertyDefinition = oPropertyDataModelPath.targetObject;
@@ -346,7 +370,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
346
370
 
347
371
  var complexType = unit ? "sap.ui.model.odata.type.Unit" : "sap.ui.model.odata.type.Currency";
348
372
  unit = unit ? unit : (_oPropertyDefinition$7 = oPropertyDefinition.annotations) === null || _oPropertyDefinition$7 === void 0 ? void 0 : (_oPropertyDefinition$8 = _oPropertyDefinition$7.Measures) === null || _oPropertyDefinition$8 === void 0 ? void 0 : _oPropertyDefinition$8.ISOCurrency;
349
- var unitBindingExpression = unit.$target ? formatWithTypeInformation(unit.$target, annotationExpression(unit, relativeLocation)) : annotationExpression(unit, relativeLocation);
373
+ var unitBindingExpression = unit.$target ? formatWithTypeInformation(unit.$target, annotationExpression(unit, relativeLocation), ignoreUnitConstraint) : annotationExpression(unit, relativeLocation);
350
374
  return addTypeInformation([propertyBindingExpression, unitBindingExpression], complexType);
351
375
  };
352
376
 
@@ -408,27 +432,9 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
408
432
  var getExpressionBinding = function (expression) {
409
433
  return compileBinding(expression);
410
434
  };
411
- /**
412
- * Retrieve the target entityset for a context path if it exists.
413
- *
414
- * @param oContext
415
- * @returns {string}
416
- */
417
-
418
435
 
419
436
  _exports.getExpressionBinding = getExpressionBinding;
420
437
 
421
- var getTargetEntitySet = function (oContext) {
422
- if (oContext) {
423
- var oDataModelPath = getInvolvedDataModelObjects(oContext);
424
- return getTargetEntitySetPath(oDataModelPath);
425
- }
426
-
427
- return null;
428
- };
429
-
430
- _exports.getTargetEntitySet = getTargetEntitySet;
431
-
432
438
  var isCollectionField = function (oDataModelPath) {
433
439
  var _oDataModelPath$navig;
434
440
 
@@ -492,4 +498,4 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
492
498
  _exports.getRequiredExpression = getRequiredExpression;
493
499
  return _exports;
494
500
  }, false);
495
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJRm9ybWF0dGVycy50cyJdLCJuYW1lcyI6WyJnZXREaXNwbGF5TW9kZSIsIkRpc3BsYXlNb2RlRm9ybWF0dGVyIiwiRURNX1RZUEVfTUFQUElORyIsImdldEVkaXRhYmxlRXhwcmVzc2lvbiIsIm9Qcm9wZXJ0eVBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJiQXNPYmplY3QiLCJjb21waWxlQmluZGluZyIsImRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiIsImlmRWxzZSIsImlzTm9uRWRpdGFibGVFeHByZXNzaW9uIiwiVUkiLCJJc0VkaXRhYmxlIiwib1Byb3BlcnR5IiwiaXNQYXRoRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIiwiaXNQYXRoVXBkYXRhYmxlIiwiZWRpdGFibGVFeHByZXNzaW9uIiwib3IiLCJub3QiLCJpc0NvbXB1dGVkIiwiaXNLZXkiLCJpc0ltbXV0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsImFuZCIsImdldEVuYWJsZWRFeHByZXNzaW9uIiwiZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RWRpdE1vZGUiLCJiTWVhc3VyZVJlYWRPbmx5IiwiYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJyZXN1bHRFeHByZXNzaW9uIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJyZWFkT25seUV4cHJlc3Npb24iLCJlZGl0TW9kZUV4cHJlc3Npb24iLCJpc0NvbnN0YW50IiwiaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQiLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwib1Byb3BlcnR5RGVmaW5pdGlvbiIsInRhcmdldE9iamVjdCIsImN1cnJlbmN5IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIklTT0N1cnJlbmN5IiwibWVhc3VyZSIsIlVuaXQiLCJpc1RydXRoeSIsImFubm90YXRpb25FeHByZXNzaW9uIiwiSXNUb3RhbCIsImNvbnN0YW50IiwiaWZVbml0RWRpdGFibGUiLCJzRWRpdGFibGVWYWx1ZSIsInNOb25FZGl0YWJsZVZhbHVlIiwiZ2V0RmllbGREaXNwbGF5Iiwic1RhcmdldERpc3BsYXlNb2RlIiwib0NvbXB1dGVkRWRpdE1vZGUiLCJoYXNWYWx1ZUhlbHAiLCJlcXVhbCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwib3V0RXhwcmVzc2lvbiIsIl90eXBlIiwib1RhcmdldE1hcHBpbmciLCJ0eXBlIiwiY29uc3RyYWludHMiLCIkU2NhbGUiLCJzY2FsZSIsInVuZGVmaW5lZCIsIiRQcmVjaXNpb24iLCJwcmVjaXNpb24iLCIkTWF4TGVuZ3RoIiwibWF4TGVuZ3RoIiwiJE51bGxhYmxlIiwibnVsbGFibGUiLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsImlzTmFOIiwibWluaW11bSIsIk1heGltdW0iLCJtYXhpbXVtIiwiaW5kZXhPZiIsImZvcm1hdE9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJwYXJzZUFzU3RyaW5nIiwiZW1wdHlTdHJpbmciLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciLCJDb21tb24iLCJJc0RpZ2l0U2VxdWVuY2UiLCJpc0RpZ2l0U2VxdWVuY2UiLCJnZXRUeXBlQ29uZmlnIiwiZGF0YVR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJpc1Byb3BlcnR5IiwiZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSIsIm9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgiLCJ1bml0IiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uIiwiY29udGV4dExvY2F0aW9uIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYXAiLCJucCIsIm5hbWUiLCJ0b1N0cmluZyIsImZvcm1hdFJlc3VsdCIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhQZXJjZW50YWdlIiwiY29tcGxleFR5cGUiLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRBbGlnbm1lbnRFeHByZXNzaW9uIiwic0FsaWduRGlzcGxheSIsInNBbGlnbkVkaXQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Iiwib0NvbnRleHQiLCJvSW50ZXJmYWNlIiwiY29udGV4dCIsImNvbnZlcnRNZXRhTW9kZWxDb250ZXh0IiwicmVxdWlyZXNJQ29udGV4dCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRFeHByZXNzaW9uQmluZGluZyIsImV4cHJlc3Npb24iLCJnZXRUYXJnZXRFbnRpdHlTZXQiLCJvRGF0YU1vZGVsUGF0aCIsImdldFRhcmdldEVudGl0eVNldFBhdGgiLCJpc0NvbGxlY3Rpb25GaWVsZCIsImxlbmd0aCIsImhhc09uZVRvTWFueU5hdmlnYXRpb24iLCJmaW5kSW5kZXgiLCJvTmF2IiwiaXNDb2xsZWN0aW9uIiwib0NvbnRleHROYXYiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJmb3JjZUVkaXRNb2RlIiwiZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uIiwiaXNSZXF1aXJlZEV4cHJlc3Npb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJlZGl0TW9kZSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaURPLE1BQU1BLGNBQWMsR0FBR0Msb0JBQW9CLENBQUNELGNBQTVDOztBQUNBLE1BQU1FLGdCQUFnQixHQUFHRCxvQkFBb0IsQ0FBQ0MsZ0JBQTlDOzs7QUFrQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFB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QkFBZ0IsQ0FBQ1gsYUFBRCxDQUFoQixJQUFtQ0EsYUFBYSxDQUFDWSxPQUFsRCxJQUErRFosYUFBM0YsQ0FWOEQsQ0FXOUQ7QUFDQTs7QUFDQSxRQUFNNEksa0JBQWtCLEdBQUdELG9CQUFvQixDQUFDakksU0FBRCxDQUEvQztBQUNBLFFBQU1tSSxRQUFRLEdBQUdKLGFBQWEsSUFBSWpJLEVBQUUsQ0FBQ0MsVUFBckM7O0FBQ0EsUUFBSU4sU0FBSixFQUFlO0FBQ2QsYUFBT21CLEdBQUcsQ0FBQ04sRUFBRSxDQUFDNEgsa0JBQUQsRUFBcUJGLDJCQUFyQixDQUFILEVBQXNERyxRQUF0RCxDQUFWO0FBQ0E7O0FBQ0QsV0FBT3pJLGNBQWMsQ0FBQ2tCLEdBQUcsQ0FBQ04sRUFBRSxDQUFDNEgsa0JBQUQsRUFBcUJGLDJCQUFyQixDQUFILEVBQXNERyxRQUF0RCxDQUFKLENBQXJCO0FBQ0EsR0F4Qk0iLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHsgY29udmVydE1ldGFNb2RlbENvbnRleHQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0YWRkVHlwZUluZm9ybWF0aW9uLFxuXHRhbmQsXG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRFeHByZXNzaW9uLFxuXHRFeHByZXNzaW9uT3JQcmltaXRpdmUsXG5cdGZvcm1hdFJlc3VsdCxcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRpc1RydXRoeSxcblx0bm90LFxuXHRvclxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGlzQ29tcHV0ZWQsXG5cdGlzSW1tdXRhYmxlLFxuXHRpc0tleSxcblx0aXNQYXRoRXhwcmVzc2lvbixcblx0aXNQcm9wZXJ0eVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdHlwZXMvRWRtXCI7XG5pbXBvcnQge1xuXHREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRnZXRUYXJnZXRFbnRpdHlTZXRQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGUsXG5cdGdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGlzUmVhZE9ubHlFeHByZXNzaW9uLFxuXHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbixcblx0aXNEaXNhYmxlZEV4cHJlc3Npb24sXG5cdGlzUmVxdWlyZWRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0ICogYXMgRGlzcGxheU1vZGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcblxuLy8gSW1wb3J0LWV4cG9ydCBtZXRob2QgdXNlZCBieSB0aGUgY29udmVydGVyIHRvIHVzZSB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nIHRocm91Z2ggdGhlIFVJRm9ybWF0dGVycy5cbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RlID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRGlzcGxheU1vZGU7XG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheU1vZGUgPSBEaXNwbGF5TW9kZUZvcm1hdHRlci5nZXREaXNwbGF5TW9kZTtcbmV4cG9ydCBjb25zdCBFRE1fVFlQRV9NQVBQSU5HID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRURNX1RZUEVfTUFQUElORztcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlPclBhdGg8UD4gPSBzdHJpbmcgfCBQIHwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFA+O1xuZXhwb3J0IHR5cGUgTWV0YU1vZGVsQ29udGV4dCA9IHtcblx0JGtpbmQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UgPSB7XG5cdGNvbnRleHQ6IENvbnRleHQ7XG5cdGFyZ3VtZW50czogYW55W107XG5cdCQkdmFsdWVBc1Byb21pc2U6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZWZvcm1hdE9wdGlvbnMgPSB7XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZztcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGUgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0Y29uc3RyYWludHM6IGNvbmZpZ1R5cGVDb25zdHJhaW50cztcblx0Zm9ybWF0T3B0aW9uczogY29uZmlnVHlwZWZvcm1hdE9wdGlvbnM7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRhYmxlXCIgYm9vbGVhbiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5UGF0aH0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSB7b2JqZWN0fSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgb2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0ge0RhdGFNb2RlbE9iamVjdFBhdGh9IG9EYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIHRoaXMgcHJvcGVydHkgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJBc09iamVjdCBXaGV0aGVyIG9yIG5vdCB0aGlzIHNob3VsZCBiZSByZXR1cm5lZCBhcyBhbiBvYmplY3Qgb3IgYSBiaW5kaW5nIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB1c2VkIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IGlzIGVkaXRhYmxlIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdGFibGVFeHByZXNzaW9uID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogYW55ID0gbnVsbCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRiQXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZVxuKTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4ge1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoZmFsc2UpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb246IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+ID0gdHJ1ZTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IG51bGwpIHtcblx0XHRkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24gPSBpZkVsc2UoaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCksIGZhbHNlLCBVSS5Jc0VkaXRhYmxlKTtcblx0fVxuXG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Ly8gRWRpdGFiaWxpdHkgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGtleSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uIGlmIG5vdCBjb21wdXRlZFxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgY29tcHV0ZWQgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgdXBkYXRhYmxlIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgaW1tdXRhYmxlIC0+IG5vdCBlZGl0YWJsZSBleGNlcHQgaW4gY3JlYXRpb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgYSBwYXRoIHJlc29sdmluZyB0byBSZWFkT25seSBvciBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAoPD0gMSkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIEVsc2UsIHRvIGJlIGVkaXRhYmxlIHlvdSBuZWVkXG5cdC8vIGltbXV0YWJsZSBhbmQga2V5IHdoaWxlIGluIHRoZSBjcmVhdGlvbiByb3dcblx0Ly8gdWkvaXNFZGl0YWJsZVxuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gaXNQYXRoVXBkYXRhYmxlKG9EYXRhTW9kZWxPYmplY3RQYXRoLCBvUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdG9yKFxuXHRcdFx0bm90KGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLFxuXHRcdFx0aXNDb21wdXRlZChvUHJvcGVydHkpLFxuXHRcdFx0aXNLZXkob1Byb3BlcnR5KSxcblx0XHRcdGlzSW1tdXRhYmxlKG9Qcm9wZXJ0eSksXG5cdFx0XHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHkpXG5cdFx0KSxcblx0XHRpZkVsc2Uob3IoaXNDb21wdXRlZChvUHJvcGVydHkpLCBpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHkpKSwgZmFsc2UsIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0VUkuSXNFZGl0YWJsZVxuXHQpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbikpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlbmFibGVkXCIgYm9vbGVhbiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5UGF0aH0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSB7YW55fSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgT2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJBc09iamVjdCBXaGV0aGVyIG9yIG5vdCB0aGlzIHNob3VsZCBiZSByZXR1cm5lZCBhcyBhbiBvYmplY3Qgb3IgYSBiaW5kaW5nIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBwcm9wZXJ0eSBpcyBlbmFibGVkIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb24gPSBmdW5jdGlvbihcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogYW55LFxuXHRiQXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZVxuKTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4ge1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcodHJ1ZSk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPiA9IHRydWU7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSBudWxsKSB7XG5cdFx0ZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24gPSBpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCksIGZhbHNlLCB0cnVlKTtcblx0fVxuXG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Ly8gRW5hYmxlbWVudCBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZW5hYmxlZFxuXHRjb25zdCBlbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvUHJvcGVydHkpLCBmYWxzZSwgdHJ1ZSk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdE1vZGVcIiBlbnVtIHZhbHVlLlxuICogQHBhcmFtIHtQcm9wZXJ0eVBhdGh9IG9Qcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0ge0RhdGFNb2RlbE9iamVjdFBhdGh9IG9EYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBsaXN0IG9mIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCB0byByZWFjaCB0aGF0IHByb3BlcnR5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJNZWFzdXJlUmVhZE9ubHkgV2hldGhlciB3ZSBzaG91bGQgc2V0IFVvTSAvIGN1cnJlbmN5IGZpZWxkIG1vZGUgdG8gcmVhZCBvbmx5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJBc09iamVjdCBXaGV0aGVyIHdlIHNob3VsZCByZXR1cm4gdGhpcyBhcyBhbiBleHByZXNzaW9uIG9yIGFzIGEgc3RyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gb0RhdGFGaWVsZENvbnZlcnRlZCBUaGUgZGF0YUZpZWxkIG9iamVjdFxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcHJvcGVydHkgZWRpdCBtb2RlLCBjb21wbGlhbnQgd2l0aCB0aGUgTURDIEZpZWxkIGRlZmluaXRpb24gb2YgZWRpdE1vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0TW9kZSA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRiTWVhc3VyZVJlYWRPbmx5OiBib29sZWFuID0gZmFsc2UsXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBhbnkgPSBudWxsXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz4ge1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gXCJEaXNwbGF5XCI7XG5cdH1cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGVuYWJsZWQgPT4gRGlzYWJsZWRcblx0Ly8gaWYgdGhlIHByb3BlcnR5IGlzIGVuYWJsZWQgJiYgbm90IGVkaXRhYmxlID0+IFJlYWRPbmx5XG5cdC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBlbmFibGVkICYmIGVkaXRhYmxlID0+IEVkaXRhYmxlXG5cdC8vIElmIHRoZXJlIGlzIGFuIGFzc29jaWF0ZWQgdW5pdCwgYW5kIGl0IGhhcyBhIGZpZWxkIGNvbnRyb2wgYWxzbyB1c2UgY29uc2lkZXIgdGhlIGZvbGxvd2luZ1xuXHQvLyBpZiB0aGUgdW5pdCBmaWVsZCBjb250cm9sIGlzIHJlYWRvbmx5IC0+IEVkaXRhYmxlUmVhZE9ubHlcblx0Ly8gb3RoZXJ3aXNlIC0+IEVkaXRhYmxlXG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGdldEVkaXRhYmxlRXhwcmVzc2lvbihcblx0XHRvUHJvcGVydHlQYXRoLFxuXHRcdG9EYXRhRmllbGRDb252ZXJ0ZWQsXG5cdFx0b0RhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0dHJ1ZVxuXHQpIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblxuXHRjb25zdCBlbmFibGVkRXhwcmVzc2lvbiA9IGdldEVuYWJsZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgsIG9EYXRhRmllbGRDb252ZXJ0ZWQsIHRydWUpIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblx0Y29uc3QgYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRjb25zdCB1bml0UHJvcGVydHkgPSBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdGxldCByZXN1bHRFeHByZXNzaW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPiA9IFwiRWRpdGFibGVcIjtcblx0aWYgKHVuaXRQcm9wZXJ0eSkge1xuXHRcdHJlc3VsdEV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0XHRvcihpc1JlYWRPbmx5RXhwcmVzc2lvbih1bml0UHJvcGVydHkpLCBpc0NvbXB1dGVkKHVuaXRQcm9wZXJ0eSksIGJNZWFzdXJlUmVhZE9ubHkpLFxuXHRcdFx0XCJFZGl0YWJsZVJlYWRPbmx5XCIsXG5cdFx0XHRcIkVkaXRhYmxlXCJcblx0XHQpO1xuXHR9XG5cdGNvbnN0IHJlYWRPbmx5RXhwcmVzc2lvbiA9IG9yKGlzUmVhZE9ubHlFeHByZXNzaW9uKG9Qcm9wZXJ0eSksIGlzUmVhZE9ubHlFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpKTtcblxuXHQvLyBpZiB0aGUgcHJvcGVydHkgaXMgZnJvbSBhIG5vbi11cGRhdGFibGUgZW50aXR5ID0+IFJlYWQgb25seSBtb2RlLCBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgZWRpdCBNb2RlIGlzIGlnbm9yZWRcblx0Ly8gaWYgdGhlIHByb3BlcnR5IGlzIGZyb20gYW4gdXBkYXRhYmxlIGVudGl0eSA9PiBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgZWRpdCBNb2RlIGV4cHJlc3Npb25cblx0Y29uc3QgZWRpdE1vZGVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdGVuYWJsZWRFeHByZXNzaW9uLFxuXHRcdGlmRWxzZShcblx0XHRcdGVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdHJlc3VsdEV4cHJlc3Npb24sXG5cdFx0XHRpZkVsc2UoYW5kKCFpc0NvbnN0YW50KHJlYWRPbmx5RXhwcmVzc2lvbikgJiYgcmVhZE9ubHlFeHByZXNzaW9uLCBVSS5Jc0VkaXRhYmxlKSwgXCJSZWFkT25seVwiLCBcIkRpc3BsYXlcIilcblx0XHQpLFxuXHRcdGlmRWxzZShVSS5Jc0VkaXRhYmxlLCBcIkRpc2FibGVkXCIsIFwiRGlzcGxheVwiKVxuXHQpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGVkaXRNb2RlRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoZWRpdE1vZGVFeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRjb25zdCBjdXJyZW5jeSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0Y29uc3QgbWVhc3VyZSA9IGN1cnJlbmN5ID8gY3VycmVuY3kgOiBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKG1lYXN1cmUpIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcob3IoaXNUcnV0aHkoYW5ub3RhdGlvbkV4cHJlc3Npb24obWVhc3VyZSkgYXMgRXhwcmVzc2lvbjxzdHJpbmc+KSwgbm90KFVJLklzVG90YWwpKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGNvbnN0YW50KHRydWUpKTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGlmVW5pdEVkaXRhYmxlID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0c0VkaXRhYmxlVmFsdWU6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+LFxuXHRzTm9uRWRpdGFibGVWYWx1ZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz5cbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHkgPSAoaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Y29uc3QgdW5pdFByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkob1Byb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdGlmICghdW5pdFByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKHNOb25FZGl0YWJsZVZhbHVlKTtcblx0fVxuXHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBhbmQobm90KGlzUmVhZE9ubHlFeHByZXNzaW9uKHVuaXRQcm9wZXJ0eSkpLCBub3QoaXNDb21wdXRlZCh1bml0UHJvcGVydHkpKSk7XG5cdHJldHVybiBjb21waWxlQmluZGluZyhpZkVsc2UoZWRpdGFibGVFeHByZXNzaW9uLCBzRWRpdGFibGVWYWx1ZSwgc05vbkVkaXRhYmxlVmFsdWUpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWVsZERpc3BsYXkgPSBmdW5jdGlvbihcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzVGFyZ2V0RGlzcGxheU1vZGU6IHN0cmluZyxcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+XG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cblx0cmV0dXJuIGhhc1ZhbHVlSGVscChvUHJvcGVydHkpXG5cdFx0PyBjb21waWxlQmluZGluZyhzVGFyZ2V0RGlzcGxheU1vZGUpXG5cdFx0OiBjb21waWxlQmluZGluZyhpZkVsc2UoZXF1YWwob0NvbXB1dGVkRWRpdE1vZGUsIFwiRWRpdGFibGVcIiksIFwiVmFsdWVcIiwgc1RhcmdldERpc3BsYXlNb2RlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHksIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEV4cHJlc3Npb248c3RyaW5nPik6IEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG91dEV4cHJlc3Npb246IEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxhbnk+ID0gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiBhcyBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248YW55Pjtcblx0aWYgKG9Qcm9wZXJ0eS5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpLnR5cGVdO1xuXHRcdGlmIChvVGFyZ2V0TWFwcGluZykge1xuXHRcdFx0b3V0RXhwcmVzc2lvbi50eXBlID0gb1RhcmdldE1hcHBpbmcudHlwZTtcblx0XHRcdGlmIChvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cykge1xuXHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzID0ge307XG5cdFx0XHRcdGlmIChvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cy4kU2NhbGUgJiYgb1Byb3BlcnR5LnNjYWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzLnNjYWxlID0gb1Byb3BlcnR5LnNjYWxlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cy4kUHJlY2lzaW9uICYmIG9Qcm9wZXJ0eS5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMucHJlY2lzaW9uID0gb1Byb3BlcnR5LnByZWNpc2lvbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1RhcmdldE1hcHBpbmcuY29uc3RyYWludHMuJE1heExlbmd0aCAmJiBvUHJvcGVydHkubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzLm1heExlbmd0aCA9IG9Qcm9wZXJ0eS5tYXhMZW5ndGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzLiROdWxsYWJsZSAmJiBvUHJvcGVydHkubnVsbGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cy5udWxsYWJsZSA9IG9Qcm9wZXJ0eS5udWxsYWJsZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHNbXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1pbmltdW0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMubWluaW11bSA9IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1pbmltdW19YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHNbXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1heGltdW0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMubWF4aW11bSA9IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1heGltdW19YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG91dEV4cHJlc3Npb24/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDApIHtcblx0XHRcdFx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdGVtcHR5U3RyaW5nOiBcIlwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIikge1xuXHRcdFx0XHRpZiAoIW91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl0gJiZcblx0XHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMuaXNEaWdpdFNlcXVlbmNlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG91dEV4cHJlc3Npb24/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDApIHtcblx0XHRcdFx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdGVtcHR5U3RyaW5nOiBcIlwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlQ29uZmlnID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhbnkge1xuXHRjb25zdCBvVGFyZ2V0TWFwcGluZyA9IEVETV9UWVBFX01BUFBJTkdbKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSk/LnR5cGVdIHx8IChkYXRhVHlwZSA/IEVETV9UWVBFX01BUFBJTkdbZGF0YVR5cGVdIDogdW5kZWZpbmVkKTtcblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnOiBjb25maWdUeXBlID0ge1xuXHRcdHR5cGU6IG9UYXJnZXRNYXBwaW5nLnR5cGUsXG5cdFx0Y29uc3RyYWludHM6IHt9LFxuXHRcdGZvcm1hdE9wdGlvbnM6IHt9XG5cdH07XG5cdGlmIChpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdICYmXG5cdFx0XHRcdChvUHJvcGVydHkgYXMgUHJvcGVydHkpLmFubm90YXRpb25zPy5Db21tb24/LklzRGlnaXRTZXF1ZW5jZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0fTtcblx0fVxuXHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRwYXJzZUFzU3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBmYWxzZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRlbXB0eVN0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gXCJcIlxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiID8gdHJ1ZSA6IHVuZGVmaW5lZFxuXHR9O1xuXHRyZXR1cm4gcHJvcGVydHlUeXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kgPSBmdW5jdGlvbihcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxzdHJpbmc+XG4pOiBFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGxldCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbihcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzXG5cdCkubWFwKG5wID0+IG5wLm5hbWUpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0aWYgKHVuaXQ/LnRvU3RyaW5nKCkgPT09IFwiJVwiKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoUGVyY2VudGFnZSk7XG5cdH1cblx0Y29uc3QgY29tcGxleFR5cGUgPSB1bml0ID8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCI7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID0gKHVuaXQgYXMgYW55KS4kdGFyZ2V0XG5cdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKCh1bml0IGFzIGFueSkuJHRhcmdldCwgYW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgRXhwcmVzc2lvbjxzdHJpbmc+KVxuXHRcdDogKGFubm90YXRpb25FeHByZXNzaW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEV4cHJlc3Npb248c3RyaW5nPik7XG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sIGNvbXBsZXhUeXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGlnbm1lbnRFeHByZXNzaW9uID0gZnVuY3Rpb24oXG5cdG9Db21wdXRlZEVkaXRNb2RlOiBFeHByZXNzaW9uPHN0cmluZz4sXG5cdHNBbGlnbkRpc3BsYXk6IHN0cmluZyA9IFwiQmVnaW5cIixcblx0c0FsaWduRWRpdDogc3RyaW5nID0gXCJCZWdpblwiXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHwgRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJEaXNwbGF5XCIpLCBzQWxpZ25EaXNwbGF5LCBzQWxpZ25FZGl0KSk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGNvbnZlcnRlckNvbnRleHQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHtDb250ZXh0fSBvQ29udGV4dCBUaGUgb3JpZ2luYWwgbWV0YW1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSB7Q29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlfSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMge29iamVjdH0gVGhlIENvbnZlcnRlckNvbnRleHQgcmVwcmVzZW50aW5nIHRoYXQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0ID0gZnVuY3Rpb24ob0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IG9iamVjdCB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gY29udmVydE1ldGFNb2RlbENvbnRleHQob0ludGVyZmFjZS5jb250ZXh0KTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5nZXRDb252ZXJ0ZXJDb250ZXh0LnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0ge0NvbnRleHR9IG9Db250ZXh0IFRoZSBvcmlnaW5hbCBPRGF0YU1ldGFNb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0ge0NvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZX0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIHtvYmplY3RbXX0gQW4gYXJyYXkgb2YgZW50aXR5c2V0cyBhbmQgbmF2cHJvcGVydGllcyB0aGF0IGFyZSBpbnZvbHZlZCB0byBnZXQgdG8gYSBzcGVjaWZpYyBvYmplY3QgaW4gdGhlIG1ldGFtb2RlbFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGZ1bmN0aW9uKFxuXHRvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCxcblx0b0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoIHwgbnVsbCB7XG5cdGlmIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCkge1xuXHRcdHJldHVybiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0ludGVyZmFjZS5jb250ZXh0KTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5nZXREYXRhTW9kZWxPYmplY3RQYXRoLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZXhwcmVzc2lvbkJpbmRpbmcgY3JlYXRlZCBvdXQgb2YgYSBiaW5kaW5nIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHtFeHByZXNzaW9uPGFueT59IGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gd2hpY2ggbmVlZHMgdG8gYmUgY29tcGlsZWRcbiAqIEByZXR1cm5zIHtCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+fSBUaGUgZXhwcmVzc2lvbi1iaW5kaW5nIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkJpbmRpbmcgPSBmdW5jdGlvbihleHByZXNzaW9uOiBFeHByZXNzaW9uPGFueT4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGV4cHJlc3Npb24pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgdGFyZ2V0IGVudGl0eXNldCBmb3IgYSBjb250ZXh0IHBhdGggaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRhcmdldEVudGl0eVNldCA9IGZ1bmN0aW9uKG9Db250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmIChvQ29udGV4dCkge1xuXHRcdGNvbnN0IG9EYXRhTW9kZWxQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9Db250ZXh0KTtcblx0XHRyZXR1cm4gZ2V0VGFyZ2V0RW50aXR5U2V0UGF0aChvRGF0YU1vZGVsUGF0aCk7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NvbGxlY3Rpb25GaWVsZCA9IGZ1bmN0aW9uKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogYm9vbGVhbiB7XG5cdGlmIChvRGF0YU1vZGVsUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0Y29uc3QgaGFzT25lVG9NYW55TmF2aWdhdGlvbiA9XG5cdFx0XHRvRGF0YU1vZGVsUGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KChvTmF2OiBOYXZpZ2F0aW9uUHJvcGVydHkpID0+IHtcblx0XHRcdFx0aWYgKG9OYXYuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdFx0aWYgKG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly93ZSBjaGVjayB0aGUgb25lIHRvIG1hbnkgbmF2IGlzIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIGNvbnRleHRcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KFxuXHRcdFx0XHRcdFx0XHRcdChvQ29udGV4dE5hdjogTmF2aWdhdGlvblByb3BlcnR5KSA9PiBvQ29udGV4dE5hdi5uYW1lID09PSBvTmF2Lm5hbWVcblx0XHRcdFx0XHRcdFx0KSA9PT0gLTFcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pID4gLTE7XG5cdFx0aWYgKGhhc09uZVRvTWFueU5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRFeHByZXNzaW9uID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IGFueSxcblx0Zm9yY2VFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlLFxuXHRiQXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZVxuKTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4ge1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoZmFsc2UpO1xuXHR9XG5cblx0bGV0IGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbjogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4gPSB0cnVlO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gbnVsbCkge1xuXHRcdGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IHJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSk7XG5cdGNvbnN0IGVkaXRNb2RlID0gZm9yY2VFZGl0TW9kZSB8fCBVSS5Jc0VkaXRhYmxlO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChvcihyZXF1aXJlZEV4cHJlc3Npb24sIGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiksIGVkaXRNb2RlKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5kKG9yKHJlcXVpcmVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uKSwgZWRpdE1vZGUpKTtcbn07XG4iXX0=
501
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJRm9ybWF0dGVycy50cyJdLCJuYW1lcyI6WyJnZXREaXNwbGF5TW9kZSIsIkRpc3BsYXlNb2RlRm9ybWF0dGVyIiwiRURNX1RZUEVfTUFQUElORyIsImdldEVkaXRhYmxlRXhwcmVzc2lvbiIsIm9Qcm9wZXJ0eVBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJiQXNPYmplY3QiLCJjb21waWxlQmluZGluZyIsImRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiIsImlmRWxzZSIsImlzTm9uRWRpdGFibGVFeHByZXNzaW9uIiwiVUkiLCJJc0VkaXRhYmxlIiwib1Byb3BlcnR5IiwiaXNQYXRoRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIiwiaXNQYXRoVXBkYXRhYmxlIiwicHJvcGVydHlQYXRoIiwicGF0aFZpc2l0b3IiLCJwYXRoIiwibmF2aWdhdGlvblBhdGhzIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJjb252ZXJ0ZWRUeXBlcyIsImVkaXRhYmxlRXhwcmVzc2lvbiIsIm9yIiwibm90IiwiaXNDb21wdXRlZCIsImlzS2V5IiwiaXNJbW11dGFibGUiLCJJc1RyYW5zaWVudEJpbmRpbmciLCJhbmQiLCJnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJmb3JtYXR0ZXIiLCJvYmplY3RQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImFjdGl2aXR5RXhwcmVzc2lvbiIsImJpbmRpbmdFeHByZXNzaW9uIiwia2V5cyIsInRhcmdldEVudGl0eVR5cGUiLCJrZXlzRXhwcmVzc2lvbnMiLCJmb3JFYWNoIiwia2V5Iiwia2V5RXhwcmVzc2lvbiIsIm5hbWUiLCJwdXNoIiwiZm9ybWF0UmVzdWx0IiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiIsImlzRGlzYWJsZWRFeHByZXNzaW9uIiwiZW5hYmxlZEV4cHJlc3Npb24iLCJnZXRFZGl0TW9kZSIsImJNZWFzdXJlUmVhZE9ubHkiLCJhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsInJlc3VsdEV4cHJlc3Npb24iLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsInJlYWRPbmx5RXhwcmVzc2lvbiIsImVkaXRNb2RlRXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwidGFyZ2V0T2JqZWN0IiwiY3VycmVuY3kiLCJhbm5vdGF0aW9ucyIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJtZWFzdXJlIiwiVW5pdCIsImlzVHJ1dGh5IiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJJc1RvdGFsIiwiY29uc3RhbnQiLCJpZlVuaXRFZGl0YWJsZSIsInNFZGl0YWJsZVZhbHVlIiwic05vbkVkaXRhYmxlVmFsdWUiLCJnZXRGaWVsZERpc3BsYXkiLCJzVGFyZ2V0RGlzcGxheU1vZGUiLCJvQ29tcHV0ZWRFZGl0TW9kZSIsImhhc1ZhbHVlSGVscCIsImVxdWFsIiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsInByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24iLCJpZ25vcmVDb25zdHJhaW50cyIsIm91dEV4cHJlc3Npb24iLCJfdHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwidHlwZSIsImNvbnN0cmFpbnRzIiwiJFNjYWxlIiwic2NhbGUiLCJ1bmRlZmluZWQiLCIkUHJlY2lzaW9uIiwicHJlY2lzaW9uIiwiJE1heExlbmd0aCIsIm1heExlbmd0aCIsIiROdWxsYWJsZSIsIm51bGxhYmxlIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJpc05hTiIsIm1pbmltdW0iLCJNYXhpbXVtIiwibWF4aW11bSIsImluZGV4T2YiLCJmb3JtYXRPcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwicGFyc2VBc1N0cmluZyIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiQ29tbW9uIiwiSXNEaWdpdFNlcXVlbmNlIiwiaXNEaWdpdFNlcXVlbmNlIiwiZ2V0VHlwZUNvbmZpZyIsImRhdGFUeXBlIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiaXNQcm9wZXJ0eSIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwiaWdub3JlVW5pdENvbnN0cmFpbnQiLCJ1bml0IiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uIiwiY29udGV4dExvY2F0aW9uIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYXAiLCJucCIsInRvU3RyaW5nIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aFBlcmNlbnRhZ2UiLCJjb21wbGV4VHlwZSIsInVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImFkZFR5cGVJbmZvcm1hdGlvbiIsImdldEFsaWdubWVudEV4cHJlc3Npb24iLCJzQWxpZ25EaXNwbGF5Iiwic0FsaWduRWRpdCIsImdldENvbnZlcnRlckNvbnRleHQiLCJvQ29udGV4dCIsIm9JbnRlcmZhY2UiLCJjb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJyZXF1aXJlc0lDb250ZXh0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldEV4cHJlc3Npb25CaW5kaW5nIiwiZXhwcmVzc2lvbiIsImlzQ29sbGVjdGlvbkZpZWxkIiwib0RhdGFNb2RlbFBhdGgiLCJsZW5ndGgiLCJoYXNPbmVUb01hbnlOYXZpZ2F0aW9uIiwiZmluZEluZGV4Iiwib05hdiIsImlzQ29sbGVjdGlvbiIsIm9Db250ZXh0TmF2IiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwiZm9yY2VFZGl0TW9kZSIsImRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiZWRpdE1vZGUiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0RPLE1BQU1BLGNBQWMsR0FBR0Msb0JBQW9CLENBQUNELGNBQTVDOztBQUNBLE1BQU1FLGdCQUFnQixHQUFHRCxvQkFBb0IsQ0FBQ0MsZ0JBQTlDOzs7QUFrQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUMscUJBQXFCLEdBQUcsVUFDcENDLGFBRG9DLEVBSzBCO0FBQUEsUUFIOURDLG1CQUc4RCx1RUFIbkMsSUFHbUM7QUFBQSxRQUY5REMsb0JBRThEO0FBQUEsUUFEOURDLFNBQzhELHVFQUR6QyxLQUN5Qzs7QUFDOUQsUUFBSSxDQUFDSCxhQUFELElBQWtCLE9BQU9BLGFBQVAsS0FBeUIsUUFBL0MsRUFBeUQ7QUFDeEQsYUFBT0ksY0FBYyxDQUFDLEtBQUQsQ0FBckI7QUFDQTs7QUFDRCxRQUFJQywyQkFBd0YsR0FBRyxJQUEvRjs7QUFDQSxRQUFJSixtQkFBbUIsS0FBSyxJQUE1QixFQUFrQztBQUNqQ0ksTUFBQUEsMkJBQTJCLEdBQUdDLE1BQU0sQ0FBQ0MsdUJBQXVCLENBQUNOLG1CQUFELENBQXhCLEVBQStDLEtBQS9DLEVBQXNETyxFQUFFLENBQUNDLFVBQXpELENBQXBDO0FBQ0E7O0FBRUQsUUFBTUMsU0FBbUIsR0FBSUMsZ0JBQWdCLENBQUNYLGFBQUQsQ0FBaEIsSUFBbUNBLGFBQWEsQ0FBQ1ksT0FBbEQsSUFBK0RaLGFBQTNGLENBVDhELENBVTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFFBQU1hLHlCQUF5QixHQUFHQyxlQUFlLENBQUNaLG9CQUFELEVBQXVCO0FBQ3ZFYSxN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bUIsR0FBSUMsZ0JBQWdCLENBQUNYLGFBQUQsQ0FBaEIsSUFBbUNBLGFBQWEsQ0FBQ1ksT0FBbEQsSUFBK0RaLGFBQTNGLENBVjhELENBVzlEO0FBQ0E7O0FBQ0EsUUFBTWdLLGtCQUFrQixHQUFHRCxvQkFBb0IsQ0FBQ3JKLFNBQUQsQ0FBL0M7QUFDQSxRQUFNdUosUUFBUSxHQUFHSixhQUFhLElBQUlySixFQUFFLENBQUNDLFVBQXJDOztBQUNBLFFBQUlOLFNBQUosRUFBZTtBQUNkLGFBQU95QixHQUFHLENBQUNOLEVBQUUsQ0FBQzBJLGtCQUFELEVBQXFCRiwyQkFBckIsQ0FBSCxFQUFzREcsUUFBdEQsQ0FBVjtBQUNBOztBQUNELFdBQU83SixjQUFjLENBQUN3QixHQUFHLENBQUNOLEVBQUUsQ0FBQzBJLGtCQUFELEVBQXFCRiwyQkFBckIsQ0FBSCxFQUFzREcsUUFBdEQsQ0FBSixDQUFyQjtBQUNBLEdBeEJNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdGFkZFR5cGVJbmZvcm1hdGlvbixcblx0YW5kLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0YmluZGluZ0V4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdEV4cHJlc3Npb24sXG5cdEV4cHJlc3Npb25PclByaW1pdGl2ZSxcblx0Zm9ybWF0UmVzdWx0LFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdGlzVHJ1dGh5LFxuXHRub3QsXG5cdG9yXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBzaW5nbGV0b25QYXRoVmlzaXRvciwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGlzQ29tcHV0ZWQsXG5cdGlzSW1tdXRhYmxlLFxuXHRpc0tleSxcblx0aXNQYXRoRXhwcmVzc2lvbixcblx0aXNQcm9wZXJ0eVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdHlwZXMvRWRtXCI7XG5pbXBvcnQge1xuXHREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGUsXG5cdGdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGlzUmVhZE9ubHlFeHByZXNzaW9uLFxuXHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbixcblx0aXNEaXNhYmxlZEV4cHJlc3Npb24sXG5cdGlzUmVxdWlyZWRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0ICogYXMgRGlzcGxheU1vZGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcblxuLy8gSW1wb3J0LWV4cG9ydCBtZXRob2QgdXNlZCBieSB0aGUgY29udmVydGVyIHRvIHVzZSB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nIHRocm91Z2ggdGhlIFVJRm9ybWF0dGVycy5cbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RlID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRGlzcGxheU1vZGU7XG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheU1vZGUgPSBEaXNwbGF5TW9kZUZvcm1hdHRlci5nZXREaXNwbGF5TW9kZTtcbmV4cG9ydCBjb25zdCBFRE1fVFlQRV9NQVBQSU5HID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRURNX1RZUEVfTUFQUElORztcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlPclBhdGg8UD4gPSBzdHJpbmcgfCBQIHwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFA+O1xuZXhwb3J0IHR5cGUgTWV0YU1vZGVsQ29udGV4dCA9IHtcblx0JGtpbmQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UgPSB7XG5cdGNvbnRleHQ6IENvbnRleHQ7XG5cdGFyZ3VtZW50czogYW55W107XG5cdCQkdmFsdWVBc1Byb21pc2U6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZWZvcm1hdE9wdGlvbnMgPSB7XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZztcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGUgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0Y29uc3RyYWludHM6IGNvbmZpZ1R5cGVDb25zdHJhaW50cztcblx0Zm9ybWF0T3B0aW9uczogY29uZmlnVHlwZWZvcm1hdE9wdGlvbnM7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRhYmxlXCIgYm9vbGVhbiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5UGF0aH0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSB7b2JqZWN0fSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgb2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0ge0RhdGFNb2RlbE9iamVjdFBhdGh9IG9EYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIHRoaXMgcHJvcGVydHkgb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJBc09iamVjdCBXaGV0aGVyIG9yIG5vdCB0aGlzIHNob3VsZCBiZSByZXR1cm5lZCBhcyBhbiBvYmplY3Qgb3IgYSBiaW5kaW5nIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB1c2VkIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IGlzIGVkaXRhYmxlIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdGFibGVFeHByZXNzaW9uID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogYW55ID0gbnVsbCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPiB7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhmYWxzZSk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4gPSB0cnVlO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gbnVsbCkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlmRWxzZShpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIFVJLklzRWRpdGFibGUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBFZGl0YWJpbGl0eSBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBSZWFkT25seSBvciBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGEga2V5IC0+IG5vdCBlZGl0YWJsZSBleGNlcHQgaW4gY3JlYXRpb24gaWYgbm90IGNvbXB1dGVkXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBjb21wdXRlZCAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCB1cGRhdGFibGUgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBpbW11dGFibGUgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBhIHBhdGggcmVzb2x2aW5nIHRvIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpICg8PSAxKSAtPiBub3QgZWRpdGFibGVcblx0Ly8gRWxzZSwgdG8gYmUgZWRpdGFibGUgeW91IG5lZWRcblx0Ly8gaW1tdXRhYmxlIGFuZCBrZXkgd2hpbGUgaW4gdGhlIGNyZWF0aW9uIHJvd1xuXHQvLyB1aS9pc0VkaXRhYmxlXG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBpc1BhdGhVcGRhdGFibGUob0RhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRwcm9wZXJ0eVBhdGg6IG9Qcm9wZXJ0eVBhdGgsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBvRGF0YU1vZGVsT2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdG9yKFxuXHRcdFx0bm90KGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLFxuXHRcdFx0aXNDb21wdXRlZChvUHJvcGVydHkpLFxuXHRcdFx0aXNLZXkob1Byb3BlcnR5KSxcblx0XHRcdGlzSW1tdXRhYmxlKG9Qcm9wZXJ0eSksXG5cdFx0XHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHkpXG5cdFx0KSxcblx0XHRpZkVsc2Uob3IoaXNDb21wdXRlZChvUHJvcGVydHkpLCBpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHkpKSwgZmFsc2UsIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0VUkuSXNFZGl0YWJsZVxuXHQpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbikpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gZnVuY3Rpb24oZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCwgZm9ybWF0dGVyOiBhbnkpOiBCaW5kaW5nRXhwcmVzc2lvbjxhbnk+IHtcblx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGFjdGl2aXR5RXhwcmVzc2lvbiA9IGJpbmRpbmdFeHByZXNzaW9uKFwiL2NvbGxhYm9yYXRpb24vYWN0aXZpdGllc1wiICsgb2JqZWN0UGF0aCwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3Qga2V5cyA9IGRhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGU/LmtleXM7XG5cdGNvbnN0IGtleXNFeHByZXNzaW9uczogQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPGFueT5bXSA9IFtdO1xuXHRrZXlzPy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuXHRcdGNvbnN0IGtleUV4cHJlc3Npb24gPSBiaW5kaW5nRXhwcmVzc2lvbihrZXkubmFtZSkgYXMgQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPGFueT47XG5cdFx0a2V5c0V4cHJlc3Npb25zLnB1c2goa2V5RXhwcmVzc2lvbik7XG5cdH0pO1xuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFthY3Rpdml0eUV4cHJlc3Npb24sIC4uLmtleXNFeHByZXNzaW9uc10sIGZvcm1hdHRlcik7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVuYWJsZWRcIiBib29sZWFuIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlQYXRofSBvUHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIHthbnl9IG9EYXRhRmllbGRDb252ZXJ0ZWQgVGhlIERhdGFGaWVsZENvbnZlcnRlZCBPYmplY3QgdG8gcmVhZCB0aGUgZmllbGRDb250cm9sIGFubm90YXRpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYmluZGluZyBleHByZXNzaW9uIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IGlzIGVuYWJsZWQgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbmFibGVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBhbnksXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPiB7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyh0cnVlKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb246IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+ID0gdHJ1ZTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IG51bGwpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID0gaWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSksIGZhbHNlLCB0cnVlKTtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiBhbmQoZW5hYmxlZEV4cHJlc3Npb24sIGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbikpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlZGl0TW9kZVwiIGVudW0gdmFsdWUuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eVBhdGh9IG9Qcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0ge0RhdGFNb2RlbE9iamVjdFBhdGh9IG9EYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBsaXN0IG9mIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCB0byByZWFjaCB0aGF0IHByb3BlcnR5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJNZWFzdXJlUmVhZE9ubHkgV2hldGhlciB3ZSBzaG91bGQgc2V0IFVvTSAvIGN1cnJlbmN5IGZpZWxkIG1vZGUgdG8gcmVhZCBvbmx5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJBc09iamVjdCBXaGV0aGVyIHdlIHNob3VsZCByZXR1cm4gdGhpcyBhcyBhbiBleHByZXNzaW9uIG9yIGFzIGEgc3RyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gb0RhdGFGaWVsZENvbnZlcnRlZCBUaGUgZGF0YUZpZWxkIG9iamVjdFxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcHJvcGVydHkgZWRpdCBtb2RlLCBjb21wbGlhbnQgd2l0aCB0aGUgTURDIEZpZWxkIGRlZmluaXRpb24gb2YgZWRpdE1vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0TW9kZSA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRiTWVhc3VyZVJlYWRPbmx5OiBib29sZWFuID0gZmFsc2UsXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBhbnkgPSBudWxsXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz4ge1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gXCJEaXNwbGF5XCI7XG5cdH1cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGVuYWJsZWQgPT4gRGlzYWJsZWRcblx0Ly8gaWYgdGhlIHByb3BlcnR5IGlzIGVuYWJsZWQgJiYgbm90IGVkaXRhYmxlID0+IFJlYWRPbmx5XG5cdC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBlbmFibGVkICYmIGVkaXRhYmxlID0+IEVkaXRhYmxlXG5cdC8vIElmIHRoZXJlIGlzIGFuIGFzc29jaWF0ZWQgdW5pdCwgYW5kIGl0IGhhcyBhIGZpZWxkIGNvbnRyb2wgYWxzbyB1c2UgY29uc2lkZXIgdGhlIGZvbGxvd2luZ1xuXHQvLyBpZiB0aGUgdW5pdCBmaWVsZCBjb250cm9sIGlzIHJlYWRvbmx5IC0+IEVkaXRhYmxlUmVhZE9ubHlcblx0Ly8gb3RoZXJ3aXNlIC0+IEVkaXRhYmxlXG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGdldEVkaXRhYmxlRXhwcmVzc2lvbihcblx0XHRvUHJvcGVydHlQYXRoLFxuXHRcdG9EYXRhRmllbGRDb252ZXJ0ZWQsXG5cdFx0b0RhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0dHJ1ZVxuXHQpIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblxuXHRjb25zdCBlbmFibGVkRXhwcmVzc2lvbiA9IGdldEVuYWJsZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgsIG9EYXRhRmllbGRDb252ZXJ0ZWQsIHRydWUpIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPjtcblx0Y29uc3QgYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRjb25zdCB1bml0UHJvcGVydHkgPSBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdGxldCByZXN1bHRFeHByZXNzaW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPiA9IFwiRWRpdGFibGVcIjtcblx0aWYgKHVuaXRQcm9wZXJ0eSkge1xuXHRcdHJlc3VsdEV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0XHRvcihpc1JlYWRPbmx5RXhwcmVzc2lvbih1bml0UHJvcGVydHkpLCBpc0NvbXB1dGVkKHVuaXRQcm9wZXJ0eSksIGJNZWFzdXJlUmVhZE9ubHkpLFxuXHRcdFx0XCJFZGl0YWJsZVJlYWRPbmx5XCIsXG5cdFx0XHRcIkVkaXRhYmxlXCJcblx0XHQpO1xuXHR9XG5cdGNvbnN0IHJlYWRPbmx5RXhwcmVzc2lvbiA9IG9yKGlzUmVhZE9ubHlFeHByZXNzaW9uKG9Qcm9wZXJ0eSksIGlzUmVhZE9ubHlFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpKTtcblxuXHQvLyBpZiB0aGUgcHJvcGVydHkgaXMgZnJvbSBhIG5vbi11cGRhdGFibGUgZW50aXR5ID0+IFJlYWQgb25seSBtb2RlLCBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgZWRpdCBNb2RlIGlzIGlnbm9yZWRcblx0Ly8gaWYgdGhlIHByb3BlcnR5IGlzIGZyb20gYW4gdXBkYXRhYmxlIGVudGl0eSA9PiBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgZWRpdCBNb2RlIGV4cHJlc3Npb25cblx0Y29uc3QgZWRpdE1vZGVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdGVuYWJsZWRFeHByZXNzaW9uLFxuXHRcdGlmRWxzZShcblx0XHRcdGVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdHJlc3VsdEV4cHJlc3Npb24sXG5cdFx0XHRpZkVsc2UoYW5kKCFpc0NvbnN0YW50KHJlYWRPbmx5RXhwcmVzc2lvbikgJiYgcmVhZE9ubHlFeHByZXNzaW9uLCBVSS5Jc0VkaXRhYmxlKSwgXCJSZWFkT25seVwiLCBcIkRpc3BsYXlcIilcblx0XHQpLFxuXHRcdGlmRWxzZShVSS5Jc0VkaXRhYmxlLCBcIkRpc2FibGVkXCIsIFwiRGlzcGxheVwiKVxuXHQpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGVkaXRNb2RlRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoZWRpdE1vZGVFeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRjb25zdCBjdXJyZW5jeSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0Y29uc3QgbWVhc3VyZSA9IGN1cnJlbmN5ID8gY3VycmVuY3kgOiBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKG1lYXN1cmUpIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcob3IoaXNUcnV0aHkoYW5ub3RhdGlvbkV4cHJlc3Npb24obWVhc3VyZSkgYXMgRXhwcmVzc2lvbjxzdHJpbmc+KSwgbm90KFVJLklzVG90YWwpKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGNvbnN0YW50KHRydWUpKTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGlmVW5pdEVkaXRhYmxlID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0c0VkaXRhYmxlVmFsdWU6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+LFxuXHRzTm9uRWRpdGFibGVWYWx1ZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz5cbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHkgPSAoaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Y29uc3QgdW5pdFByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkob1Byb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdGlmICghdW5pdFByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKHNOb25FZGl0YWJsZVZhbHVlKTtcblx0fVxuXHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBhbmQobm90KGlzUmVhZE9ubHlFeHByZXNzaW9uKHVuaXRQcm9wZXJ0eSkpLCBub3QoaXNDb21wdXRlZCh1bml0UHJvcGVydHkpKSk7XG5cdHJldHVybiBjb21waWxlQmluZGluZyhpZkVsc2UoZWRpdGFibGVFeHByZXNzaW9uLCBzRWRpdGFibGVWYWx1ZSwgc05vbkVkaXRhYmxlVmFsdWUpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWVsZERpc3BsYXkgPSBmdW5jdGlvbihcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzVGFyZ2V0RGlzcGxheU1vZGU6IHN0cmluZyxcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+XG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cblx0cmV0dXJuIGhhc1ZhbHVlSGVscChvUHJvcGVydHkpXG5cdFx0PyBjb21waWxlQmluZGluZyhzVGFyZ2V0RGlzcGxheU1vZGUpXG5cdFx0OiBjb21waWxlQmluZGluZyhpZkVsc2UoZXF1YWwob0NvbXB1dGVkRWRpdE1vZGUsIFwiRWRpdGFibGVcIiksIFwiVmFsdWVcIiwgc1RhcmdldERpc3BsYXlNb2RlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHk6IFByb3BlcnR5LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZUNvbnN0cmFpbnRzPzogYm9vbGVhblxuKTogRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb3V0RXhwcmVzc2lvbjogQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPGFueT4gPSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIGFzIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxhbnk+O1xuXHRpZiAob1Byb3BlcnR5Ll90eXBlID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRjb25zdCBvVGFyZ2V0TWFwcGluZyA9IEVETV9UWVBFX01BUFBJTkdbKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSkudHlwZV07XG5cdFx0aWYgKG9UYXJnZXRNYXBwaW5nKSB7XG5cdFx0XHRvdXRFeHByZXNzaW9uLnR5cGUgPSBvVGFyZ2V0TWFwcGluZy50eXBlO1xuXHRcdFx0aWYgKG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzICYmICFpZ25vcmVDb25zdHJhaW50cykge1xuXHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzID0ge307XG5cdFx0XHRcdGlmIChvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cy4kU2NhbGUgJiYgb1Byb3BlcnR5LnNjYWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzLnNjYWxlID0gb1Byb3BlcnR5LnNjYWxlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cy4kUHJlY2lzaW9uICYmIG9Qcm9wZXJ0eS5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMucHJlY2lzaW9uID0gb1Byb3BlcnR5LnByZWNpc2lvbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1RhcmdldE1hcHBpbmcuY29uc3RyYWludHMuJE1heExlbmd0aCAmJiBvUHJvcGVydHkubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzLm1heExlbmd0aCA9IG9Qcm9wZXJ0eS5tYXhMZW5ndGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzLiROdWxsYWJsZSAmJiBvUHJvcGVydHkubnVsbGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cy5udWxsYWJsZSA9IG9Qcm9wZXJ0eS5udWxsYWJsZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHNbXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1pbmltdW0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMubWluaW11bSA9IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1pbmltdW19YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHNbXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1heGltdW0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMubWF4aW11bSA9IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1heGltdW19YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG91dEV4cHJlc3Npb24/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDApIHtcblx0XHRcdFx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdGVtcHR5U3RyaW5nOiBcIlwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIikge1xuXHRcdFx0XHRpZiAoIW91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl0gJiZcblx0XHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMuaXNEaWdpdFNlcXVlbmNlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG91dEV4cHJlc3Npb24/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDApIHtcblx0XHRcdFx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdGVtcHR5U3RyaW5nOiBcIlwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlQ29uZmlnID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhbnkge1xuXHRjb25zdCBvVGFyZ2V0TWFwcGluZyA9IEVETV9UWVBFX01BUFBJTkdbKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSk/LnR5cGVdIHx8IChkYXRhVHlwZSA/IEVETV9UWVBFX01BUFBJTkdbZGF0YVR5cGVdIDogdW5kZWZpbmVkKTtcblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnOiBjb25maWdUeXBlID0ge1xuXHRcdHR5cGU6IG9UYXJnZXRNYXBwaW5nLnR5cGUsXG5cdFx0Y29uc3RyYWludHM6IHt9LFxuXHRcdGZvcm1hdE9wdGlvbnM6IHt9XG5cdH07XG5cdGlmIChpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdICYmXG5cdFx0XHRcdChvUHJvcGVydHkgYXMgUHJvcGVydHkpLmFubm90YXRpb25zPy5Db21tb24/LklzRGlnaXRTZXF1ZW5jZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0fTtcblx0fVxuXHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRwYXJzZUFzU3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBmYWxzZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRlbXB0eVN0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gXCJcIlxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiID8gdHJ1ZSA6IHVuZGVmaW5lZFxuXHR9O1xuXHRyZXR1cm4gcHJvcGVydHlUeXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kgPSBmdW5jdGlvbihcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVVbml0Q29uc3RyYWludD86IGJvb2xlYW5cbik6IEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0bGV0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uKFxuXHRcdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXNcblx0KS5tYXAobnAgPT4gbnAubmFtZSk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRpZiAodW5pdD8udG9TdHJpbmcoKSA9PT0gXCIlXCIpIHtcblx0XHRyZXR1cm4gZm9ybWF0UmVzdWx0KFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uXSwgdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhQZXJjZW50YWdlKTtcblx0fVxuXHRjb25zdCBjb21wbGV4VHlwZSA9IHVuaXQgPyBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIiA6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIjtcblx0dW5pdCA9IHVuaXQgPyB1bml0IDogb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPSAodW5pdCBhcyBhbnkpLiR0YXJnZXRcblx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24oXG5cdFx0XHRcdCh1bml0IGFzIGFueSkuJHRhcmdldCxcblx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRcdFx0XHRpZ25vcmVVbml0Q29uc3RyYWludFxuXHRcdCAgKVxuXHRcdDogKGFubm90YXRpb25FeHByZXNzaW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEV4cHJlc3Npb248c3RyaW5nPik7XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFsaWdubWVudEV4cHJlc3Npb24gPSBmdW5jdGlvbihcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEV4cHJlc3Npb248c3RyaW5nPixcblx0c0FsaWduRGlzcGxheTogc3RyaW5nID0gXCJCZWdpblwiLFxuXHRzQWxpZ25FZGl0OiBzdHJpbmcgPSBcIkJlZ2luXCJcbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gfCBFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoaWZFbHNlKGVxdWFsKG9Db21wdXRlZEVkaXRNb2RlLCBcIkRpc3BsYXlcIiksIHNBbGlnbkRpc3BsYXksIHNBbGlnbkVkaXQpKTtcbn07XG5cbi8qKlxuICogRm9ybWF0dGVyIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgY29udmVydGVyQ29udGV4dCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0ge0NvbnRleHR9IG9Db250ZXh0IFRoZSBvcmlnaW5hbCBtZXRhbW9kZWwgY29udGV4dFxuICogQHBhcmFtIHtDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2V9IG9JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgQ29udmVydGVyQ29udGV4dCByZXByZXNlbnRpbmcgdGhhdCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHQgPSBmdW5jdGlvbihvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogb2JqZWN0IHwgbnVsbCB7XG5cdGlmIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCkge1xuXHRcdHJldHVybiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvSW50ZXJmYWNlLmNvbnRleHQpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbmdldENvbnZlcnRlckNvbnRleHQucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbi8qKlxuICogRm9ybWF0dGVyIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIGZyb20gdGhlIG1ldGFtb2RlbCBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB7Q29udGV4dH0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIE9EYXRhTWV0YU1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSB7Q29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlfSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMge29iamVjdFtdfSBBbiBhcnJheSBvZiBlbnRpdHlzZXRzIGFuZCBuYXZwcm9wZXJ0aWVzIHRoYXQgYXJlIGludm9sdmVkIHRvIGdldCB0byBhIHNwZWNpZmljIG9iamVjdCBpbiB0aGUgbWV0YW1vZGVsXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoID0gZnVuY3Rpb24oXG5cdG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LFxuXHRvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGggfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvSW50ZXJmYWNlLmNvbnRleHQpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbmdldERhdGFNb2RlbE9iamVjdFBhdGgucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBleHByZXNzaW9uQmluZGluZyBjcmVhdGVkIG91dCBvZiBhIGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0ge0V4cHJlc3Npb248YW55Pn0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB3aGljaCBuZWVkcyB0byBiZSBjb21waWxlZFxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPHN0cmluZz59IFRoZSBleHByZXNzaW9uLWJpbmRpbmcgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uQmluZGluZyA9IGZ1bmN0aW9uKGV4cHJlc3Npb246IEV4cHJlc3Npb248YW55Pik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoZXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDb2xsZWN0aW9uRmllbGQgPSBmdW5jdGlvbihvRGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IGJvb2xlYW4ge1xuXHRpZiAob0RhdGFNb2RlbFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdGNvbnN0IGhhc09uZVRvTWFueU5hdmlnYXRpb24gPVxuXHRcdFx0b0RhdGFNb2RlbFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmRJbmRleCgob05hdjogTmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdGlmIChvTmF2LmlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdGlmIChvRGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vd2UgY2hlY2sgdGhlIG9uZSB0byBtYW55IG5hdiBpcyBub3QgYWxyZWFkeSBwYXJ0IG9mIHRoZSBjb250ZXh0XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRvRGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmRJbmRleChcblx0XHRcdFx0XHRcdFx0XHQob0NvbnRleHROYXY6IE5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4gb0NvbnRleHROYXYubmFtZSA9PT0gb05hdi5uYW1lXG5cdFx0XHRcdFx0XHRcdCkgPT09IC0xXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KSA+IC0xO1xuXHRcdGlmIChoYXNPbmVUb01hbnlOYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBhbnksXG5cdGZvcmNlRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZSxcblx0YkFzT2JqZWN0OiBib29sZWFuID0gZmFsc2Vcbik6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGZhbHNlKTtcblx0fVxuXG5cdGxldCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb246IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+ID0gdHJ1ZTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IG51bGwpIHtcblx0XHRkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKTtcblx0fVxuXG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Ly8gRW5hYmxlbWVudCBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZW5hYmxlZFxuXHRjb25zdCByZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHkpO1xuXHRjb25zdCBlZGl0TW9kZSA9IGZvcmNlRWRpdE1vZGUgfHwgVUkuSXNFZGl0YWJsZTtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiBhbmQob3IocmVxdWlyZWRFeHByZXNzaW9uLCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb24pLCBlZGl0TW9kZSk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFuZChvcihyZXF1aXJlZEV4cHJlc3Npb24sIGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiksIGVkaXRNb2RlKSk7XG59O1xuIl19