@sapui5/sap.fe.core 1.102.2 → 1.104.1

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 (324) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +73 -30
  4. package/src/sap/fe/core/AppComponent.ts +65 -43
  5. package/src/sap/fe/core/AppStateHandler.js +82 -70
  6. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +227 -126
  10. package/src/sap/fe/core/CommonUtils.ts +240 -163
  11. package/src/sap/fe/core/ExtensionAPI.js +24 -27
  12. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  13. package/src/sap/fe/core/PageController.js +4 -4
  14. package/src/sap/fe/core/PageController.ts +4 -5
  15. package/src/sap/fe/core/TemplateComponent.js +1 -1
  16. package/src/sap/fe/core/TemplateComponent.ts +6 -6
  17. package/src/sap/fe/core/TemplateModel.js +1 -1
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +170 -139
  52. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  61. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  64. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  65. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
  66. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
  67. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
  68. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
  71. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  72. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  73. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
  74. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
  75. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
  76. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
  77. package/src/sap/fe/core/controls/Any.js +9 -5
  78. package/src/sap/fe/core/controls/Any.ts +10 -4
  79. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  80. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  81. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  82. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  84. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  86. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  87. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  88. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  89. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  91. package/src/sap/fe/core/controls/FileWrapper.js +7 -2
  92. package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
  93. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  94. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  97. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  98. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  100. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  101. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  102. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  103. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  104. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  105. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  106. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  107. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  108. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  110. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  111. package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
  112. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  113. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
  114. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  115. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  116. package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
  117. package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
  118. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  119. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  120. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  121. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  122. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
  127. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  128. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
  130. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
  131. package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
  132. package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
  133. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  134. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  135. package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
  136. package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  138. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  140. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  142. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  143. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  144. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  145. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  146. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  147. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
  148. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
  149. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  150. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  151. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  152. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  153. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  154. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  155. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  156. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  157. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  158. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  159. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  160. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  161. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  162. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  163. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  164. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  165. package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
  166. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
  167. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  168. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  169. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  170. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  171. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  172. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  173. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  174. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  175. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  176. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  177. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  178. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  179. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  180. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  181. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  182. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  183. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  184. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  185. package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
  186. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
  187. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  188. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  189. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  190. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  191. package/src/sap/fe/core/helpers/EditState.js +1 -6
  192. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  193. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  194. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  195. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  196. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  197. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  198. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  199. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  200. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  201. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  202. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  203. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  204. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  205. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  206. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  207. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  208. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  209. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  210. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  211. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  212. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  213. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  214. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  215. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  216. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  217. package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
  218. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
  219. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  220. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  221. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  222. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  223. package/src/sap/fe/core/library.js +42 -3
  224. package/src/sap/fe/core/library.ts +38 -0
  225. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  226. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  227. package/src/sap/fe/core/messagebundle.properties +39 -63
  228. package/src/sap/fe/core/messagebundle_ar.properties +25 -39
  229. package/src/sap/fe/core/messagebundle_bg.properties +25 -39
  230. package/src/sap/fe/core/messagebundle_ca.properties +25 -39
  231. package/src/sap/fe/core/messagebundle_cs.properties +25 -39
  232. package/src/sap/fe/core/messagebundle_cy.properties +25 -39
  233. package/src/sap/fe/core/messagebundle_da.properties +25 -39
  234. package/src/sap/fe/core/messagebundle_de.properties +25 -39
  235. package/src/sap/fe/core/messagebundle_el.properties +26 -40
  236. package/src/sap/fe/core/messagebundle_en.properties +25 -39
  237. package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
  238. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
  239. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
  240. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
  241. package/src/sap/fe/core/messagebundle_es.properties +27 -41
  242. package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
  243. package/src/sap/fe/core/messagebundle_et.properties +25 -39
  244. package/src/sap/fe/core/messagebundle_fi.properties +25 -39
  245. package/src/sap/fe/core/messagebundle_fr.properties +26 -40
  246. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
  247. package/src/sap/fe/core/messagebundle_hi.properties +25 -39
  248. package/src/sap/fe/core/messagebundle_hr.properties +25 -39
  249. package/src/sap/fe/core/messagebundle_hu.properties +25 -39
  250. package/src/sap/fe/core/messagebundle_id.properties +25 -39
  251. package/src/sap/fe/core/messagebundle_it.properties +41 -55
  252. package/src/sap/fe/core/messagebundle_iw.properties +25 -39
  253. package/src/sap/fe/core/messagebundle_ja.properties +25 -39
  254. package/src/sap/fe/core/messagebundle_kk.properties +25 -39
  255. package/src/sap/fe/core/messagebundle_ko.properties +30 -44
  256. package/src/sap/fe/core/messagebundle_lt.properties +25 -39
  257. package/src/sap/fe/core/messagebundle_lv.properties +25 -39
  258. package/src/sap/fe/core/messagebundle_ms.properties +25 -39
  259. package/src/sap/fe/core/messagebundle_nl.properties +27 -41
  260. package/src/sap/fe/core/messagebundle_no.properties +25 -39
  261. package/src/sap/fe/core/messagebundle_pl.properties +26 -40
  262. package/src/sap/fe/core/messagebundle_pt.properties +26 -40
  263. package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
  264. package/src/sap/fe/core/messagebundle_ro.properties +25 -39
  265. package/src/sap/fe/core/messagebundle_ru.properties +25 -39
  266. package/src/sap/fe/core/messagebundle_sh.properties +25 -39
  267. package/src/sap/fe/core/messagebundle_sk.properties +25 -39
  268. package/src/sap/fe/core/messagebundle_sl.properties +25 -39
  269. package/src/sap/fe/core/messagebundle_sv.properties +25 -39
  270. package/src/sap/fe/core/messagebundle_th.properties +25 -39
  271. package/src/sap/fe/core/messagebundle_tr.properties +25 -39
  272. package/src/sap/fe/core/messagebundle_uk.properties +25 -39
  273. package/src/sap/fe/core/messagebundle_vi.properties +25 -39
  274. package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
  275. package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
  276. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  278. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
  279. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
  280. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  281. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  282. package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
  283. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  284. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  285. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  286. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  287. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  288. package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
  289. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  290. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  291. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  292. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
  293. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
  294. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  295. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  296. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  297. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  298. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  299. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  300. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  301. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  302. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  303. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  304. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  305. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  306. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  307. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  308. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  309. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  310. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  311. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  312. package/src/sap/fe/core/templating/FilterHelper.js +16 -15
  313. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  314. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  315. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  316. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  317. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  318. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  319. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  320. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  321. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -1,5 +1,4 @@
1
- import { EntitySet } from "@sap-ux/annotation-converter";
2
- import { NavigationPropertyPath } from "@sap-ux/vocabularies-types";
1
+ import type { EntitySet, NavigationPropertyPath } from "@sap-ux/vocabularies-types";
3
2
 
4
3
  export const isEntitySet = function (dataObject: any): dataObject is EntitySet {
5
4
  return dataObject && dataObject.hasOwnProperty("_type") && dataObject._type === "EntitySet";
@@ -13,8 +12,8 @@ export const getFilterExpressionRestrictions = function (entitySet: EntitySet) {
13
12
  * Reads all SortRestrictions of the main entity and the (first level) navigation restrictions.
14
13
  * This does not work for more than one level of navigation.
15
14
  *
16
- * @param {EntitySet} entitySet Entity set to be analyzed
17
- * @returns {string[]} Array containing the property names of all non-sortable properties
15
+ * @param entitySet Entity set to be analyzed
16
+ * @returns Array containing the property names of all non-sortable properties
18
17
  */
19
18
  export const getNonSortablePropertiesRestrictions = function (entitySet: EntitySet | undefined): string[] {
20
19
  let nonSortableProperties = [];
@@ -31,20 +30,19 @@ export const getNonSortablePropertiesRestrictions = function (entitySet: EntityS
31
30
  if (navigationRestriction?.SortRestrictions?.Sortable === false) {
32
31
  // find correct navigation property
33
32
  const navigationProperty = entitySet?.entityType?.navigationProperties?.filter(
34
- (navigationProperty) =>
35
- navigationProperty.name == (navigationRestriction?.NavigationProperty as NavigationPropertyPath)?.value
33
+ (navProperty) => navProperty.name == (navigationRestriction?.NavigationProperty as NavigationPropertyPath)?.value
36
34
  );
37
35
  if (navigationProperty[0]) {
38
36
  // add all properties of the navigation property to the nonSortableProperties
39
37
  nonSortableProperties.push(
40
38
  ...navigationProperty[0].targetType?.entityProperties.map(
41
- (property) => navigationProperty[0].name + "/" + property.name
39
+ (property) => `${navigationProperty[0].name}/${property.name}`
42
40
  )
43
41
  );
44
42
  }
45
43
  } else {
46
44
  const nonSortableNavigationProperties = navigationRestriction?.SortRestrictions?.NonSortableProperties?.map(
47
- (property) => (navigationRestriction?.NavigationProperty as NavigationPropertyPath)?.value + "/" + property.value
45
+ (property) => `${(navigationRestriction?.NavigationProperty as NavigationPropertyPath)?.value}/${property.value}`
48
46
  );
49
47
  if (nonSortableNavigationProperties) {
50
48
  nonSortableProperties.push(...nonSortableNavigationProperties);
@@ -2,49 +2,37 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpression) {
5
+ sap.ui.define(["sap/fe/core/helpers/BindingToolkit"], function (BindingToolkit) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
- var annotationExpression = BindingExpression.annotationExpression;
10
- var or = BindingExpression.or;
11
- var equal = BindingExpression.equal;
9
+ var or = BindingToolkit.or;
10
+ var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
11
+ var equal = BindingToolkit.equal;
12
+ var constant = BindingToolkit.constant;
12
13
 
13
- /**
14
- * Create the binding expression to check if the property is non editable or not.
15
- *
16
- * @param {object} oTarget The target property or DataField
17
- * @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's non editable
18
- */
19
- var isNonEditableExpression = function (oTarget) {
20
- return or(isReadOnlyExpression(oTarget), isDisabledExpression(oTarget));
21
- };
22
14
  /**
23
15
  * Create the binding expression to check if the property is read only or not.
24
16
  *
25
- * @param {object} oTarget The target property or DataField
26
- * @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's read only
17
+ * @param oTarget The target property or DataField
18
+ * @returns The binding expression resolving to a Boolean being true if it's read only
27
19
  */
28
-
29
-
30
- _exports.isNonEditableExpression = isNonEditableExpression;
31
-
32
20
  var isReadOnlyExpression = function (oTarget) {
33
21
  var _oTarget$annotations, _oTarget$annotations$, _oTarget$annotations$2;
34
22
 
35
23
  var oFieldControlValue = oTarget === null || oTarget === void 0 ? void 0 : (_oTarget$annotations = oTarget.annotations) === null || _oTarget$annotations === void 0 ? void 0 : (_oTarget$annotations$ = _oTarget$annotations.Common) === null || _oTarget$annotations$ === void 0 ? void 0 : (_oTarget$annotations$2 = _oTarget$annotations$.FieldControl) === null || _oTarget$annotations$2 === void 0 ? void 0 : _oTarget$annotations$2.valueOf();
36
24
 
37
- if (typeof oFieldControlValue === "object") {
38
- return !!oFieldControlValue && or(equal(annotationExpression(oFieldControlValue), 1), equal(annotationExpression(oFieldControlValue), "1"));
25
+ if (typeof oFieldControlValue === "object" && !!oFieldControlValue) {
26
+ return or(equal(getExpressionFromAnnotation(oFieldControlValue), 1), equal(getExpressionFromAnnotation(oFieldControlValue), "1"));
39
27
  }
40
28
 
41
- return oFieldControlValue === "Common.FieldControlType/ReadOnly";
29
+ return constant(oFieldControlValue === "Common.FieldControlType/ReadOnly");
42
30
  };
43
31
  /**
44
32
  * Create the binding expression to check if the property is disabled or not.
45
33
  *
46
- * @param {object} oTarget The target property or DataField
47
- * @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's disabled
34
+ * @param oTarget The target property or DataField
35
+ * @returns The binding expression resolving to a Boolean being true if it's disabled
48
36
  */
49
37
 
50
38
 
@@ -55,35 +43,48 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
55
43
 
56
44
  var oFieldControlValue = oTarget === null || oTarget === void 0 ? void 0 : (_oTarget$annotations2 = oTarget.annotations) === null || _oTarget$annotations2 === void 0 ? void 0 : (_oTarget$annotations3 = _oTarget$annotations2.Common) === null || _oTarget$annotations3 === void 0 ? void 0 : (_oTarget$annotations4 = _oTarget$annotations3.FieldControl) === null || _oTarget$annotations4 === void 0 ? void 0 : _oTarget$annotations4.valueOf();
57
45
 
58
- if (typeof oFieldControlValue === "object") {
59
- return !!oFieldControlValue && or(equal(annotationExpression(oFieldControlValue), 0), equal(annotationExpression(oFieldControlValue), "0"));
46
+ if (typeof oFieldControlValue === "object" && !!oFieldControlValue) {
47
+ return or(equal(getExpressionFromAnnotation(oFieldControlValue), 0), equal(getExpressionFromAnnotation(oFieldControlValue), "0"));
60
48
  }
61
49
 
62
- return oFieldControlValue === "Common.FieldControlType/Inapplicable";
50
+ return constant(oFieldControlValue === "Common.FieldControlType/Inapplicable");
63
51
  };
64
52
  /**
65
- * Create the binding expression to check if the property is read only or not.
53
+ * Create the binding expression to check if the property is non editable or not.
66
54
  *
67
- * @param {object} oTarget The target property or DataField
68
- * @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's read only
55
+ * @param oTarget The target property or DataField
56
+ * @returns The binding expression resolving to a Boolean being true if it's non editable
69
57
  */
70
58
 
71
59
 
72
60
  _exports.isDisabledExpression = isDisabledExpression;
73
61
 
62
+ var isNonEditableExpression = function (oTarget) {
63
+ return or(isReadOnlyExpression(oTarget), isDisabledExpression(oTarget));
64
+ };
65
+ /**
66
+ * Create the binding expression to check if the property is read only or not.
67
+ *
68
+ * @param oTarget The target property or DataField
69
+ * @returns The binding expression resolving to a Boolean being true if it's read only
70
+ */
71
+
72
+
73
+ _exports.isNonEditableExpression = isNonEditableExpression;
74
+
74
75
  var isRequiredExpression = function (oTarget) {
75
76
  var _oTarget$annotations5, _oTarget$annotations6, _oTarget$annotations7;
76
77
 
77
78
  var oFieldControlValue = oTarget === null || oTarget === void 0 ? void 0 : (_oTarget$annotations5 = oTarget.annotations) === null || _oTarget$annotations5 === void 0 ? void 0 : (_oTarget$annotations6 = _oTarget$annotations5.Common) === null || _oTarget$annotations6 === void 0 ? void 0 : (_oTarget$annotations7 = _oTarget$annotations6.FieldControl) === null || _oTarget$annotations7 === void 0 ? void 0 : _oTarget$annotations7.valueOf();
78
79
 
79
- if (typeof oFieldControlValue === "object") {
80
- return !!oFieldControlValue && or(equal(annotationExpression(oFieldControlValue), 7), equal(annotationExpression(oFieldControlValue), "7"));
80
+ if (typeof oFieldControlValue === "object" && !!oFieldControlValue) {
81
+ return or(equal(getExpressionFromAnnotation(oFieldControlValue), 7), equal(getExpressionFromAnnotation(oFieldControlValue), "7"));
81
82
  }
82
83
 
83
- return oFieldControlValue === "Common.FieldControlType/Mandatory";
84
+ return constant(oFieldControlValue === "Common.FieldControlType/Mandatory");
84
85
  };
85
86
 
86
87
  _exports.isRequiredExpression = isRequiredExpression;
87
88
  return _exports;
88
89
  }, false);
89
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpZWxkQ29udHJvbEhlbHBlci50cyJdLCJuYW1lcyI6WyJpc05vbkVkaXRhYmxlRXhwcmVzc2lvbiIsIm9UYXJnZXQiLCJvciIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiaXNEaXNhYmxlZEV4cHJlc3Npb24iLCJvRmllbGRDb250cm9sVmFsdWUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsInZhbHVlT2YiLCJlcXVhbCIsImFubm90YXRpb25FeHByZXNzaW9uIiwiaXNSZXF1aXJlZEV4cHJlc3Npb24iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1BLHVCQUF1QixHQUFHLFVBQVNDLE9BQVQsRUFBNEM7QUFDbEYsV0FBT0MsRUFBRSxDQUFDQyxvQkFBb0IsQ0FBQ0YsT0FBRCxDQUFyQixFQUFnQ0csb0JBQW9CLENBQUNILE9BQUQsQ0FBcEQsQ0FBVDtBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUUsb0JBQW9CLEdBQUcsVUFBU0YsT0FBVCxFQUF1RDtBQUFBOztBQUMxRixRQUFNSSxrQkFBa0IsR0FBR0osT0FBSCxhQUFHQSxPQUFILCtDQUFHQSxPQUFPLENBQUVLLFdBQVosa0ZBQUcscUJBQXNCQyxNQUF6QixvRkFBRyxzQkFBOEJDLFlBQWpDLDJEQUFHLHVCQUE0Q0MsT0FBNUMsRUFBM0I7O0FBQ0EsUUFBSSxPQUFPSixrQkFBUCxLQUE4QixRQUFsQyxFQUE0QztBQUMzQyxhQUNDLENBQUMsQ0FBQ0Esa0JBQUYsSUFDQUgsRUFBRSxDQUNEUSxLQUFLLENBQUNDLG9CQUFvQixDQUFDTixrQkFBRCxDQUFyQixFQUE0RSxDQUE1RSxDQURKLEVBRURLLEtBQUssQ0FBQ0Msb0JBQW9CLENBQUNOLGtCQUFELENBQXJCLEVBQTRFLEdBQTVFLENBRkosQ0FGSDtBQU9BOztBQUNELFdBQU9BLGtCQUFrQixLQUFLLGtDQUE5QjtBQUNBLEdBWk07QUFjUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUQsb0JBQW9CLEdBQUcsVUFBU0gsT0FBVCxFQUF1RDtBQUFBOztBQUMxRixRQUFNSSxrQkFBa0IsR0FBR0osT0FBSCxhQUFHQSxPQUFILGdEQUFHQSxPQUFPLENBQUVLLFdBQVosbUZBQUcsc0JBQXNCQyxNQUF6QixtRkFBRyxzQkFBOEJDLFlBQWpDLDBEQUFHLHNCQUE0Q0MsT0FBNUMsRUFBM0I7O0FBQ0EsUUFBSSxPQUFPSixrQkFBUCxLQUE4QixRQUFsQyxFQUE0QztBQUMzQyxhQUNDLENBQUMsQ0FBQ0Esa0JBQUYsSUFDQUgsRUFBRSxDQUNEUSxLQUFLLENBQUNDLG9CQUFvQixDQUFDTixrQkFBRCxDQUFyQixFQUE0RSxDQUE1RSxDQURKLEVBRURLLEtBQUssQ0FBQ0Msb0JBQW9CLENBQUNOLGtCQUFELENBQXJCLEVBQTRFLEdBQTVFLENBRkosQ0FGSDtBQU9BOztBQUNELFdBQU9BLGtCQUFrQixLQUFLLHNDQUE5QjtBQUNBLEdBWk07QUFjUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTU8sb0JBQW9CLEdBQUcsVUFBU1gsT0FBVCxFQUF1RDtBQUFBOztBQUMxRixRQUFNSSxrQkFBa0IsR0FBR0osT0FBSCxhQUFHQSxPQUFILGdEQUFHQSxPQUFPLENBQUVLLFdBQVosbUZBQUcsc0JBQXNCQyxNQUF6QixtRkFBRyxzQkFBOEJDLFlBQWpDLDBEQUFHLHNCQUE0Q0MsT0FBNUMsRUFBM0I7O0FBQ0EsUUFBSSxPQUFPSixrQkFBUCxLQUE4QixRQUFsQyxFQUE0QztBQUMzQyxhQUNDLENBQUMsQ0FBQ0Esa0JBQUYsSUFDQUgsRUFBRSxDQUNEUSxLQUFLLENBQUNDLG9CQUFvQixDQUFDTixrQkFBRCxDQUFyQixFQUE0RSxDQUE1RSxDQURKLEVBRURLLEtBQUssQ0FBQ0Msb0JBQW9CLENBQUNOLGtCQUFELENBQXJCLEVBQTRFLEdBQTVFLENBRkosQ0FGSDtBQU9BOztBQUNELFdBQU9BLGtCQUFrQixLQUFLLG1DQUE5QjtBQUNBLEdBWk0iLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVxdWFsLCBFeHByZXNzaW9uLCBFeHByZXNzaW9uT3JQcmltaXRpdmUsIG9yLCBhbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIHByb3BlcnR5IGlzIG5vbiBlZGl0YWJsZSBvciBub3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9UYXJnZXQgVGhlIHRhcmdldCBwcm9wZXJ0eSBvciBEYXRhRmllbGRcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVzb2x2aW5nIHRvIGEgQm9vbGVhbiBiZWluZyB0cnVlIGlmIGl0J3Mgbm9uIGVkaXRhYmxlXG4gKi9cbmV4cG9ydCBjb25zdCBpc05vbkVkaXRhYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG9UYXJnZXQ6IGFueSk6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gb3IoaXNSZWFkT25seUV4cHJlc3Npb24ob1RhcmdldCksIGlzRGlzYWJsZWRFeHByZXNzaW9uKG9UYXJnZXQpKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIHByb3BlcnR5IGlzIHJlYWQgb25seSBvciBub3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9UYXJnZXQgVGhlIHRhcmdldCBwcm9wZXJ0eSBvciBEYXRhRmllbGRcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVzb2x2aW5nIHRvIGEgQm9vbGVhbiBiZWluZyB0cnVlIGlmIGl0J3MgcmVhZCBvbmx5XG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlYWRPbmx5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG9UYXJnZXQ6IGFueSk6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPiB7XG5cdGNvbnN0IG9GaWVsZENvbnRyb2xWYWx1ZSA9IG9UYXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkZpZWxkQ29udHJvbD8udmFsdWVPZigpO1xuXHRpZiAodHlwZW9mIG9GaWVsZENvbnRyb2xWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQhIW9GaWVsZENvbnRyb2xWYWx1ZSAmJlxuXHRcdFx0b3IoXG5cdFx0XHRcdGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKG9GaWVsZENvbnRyb2xWYWx1ZSkgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPG51bWJlcj4sIDEpLFxuXHRcdFx0XHRlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihvRmllbGRDb250cm9sVmFsdWUpIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+LCBcIjFcIilcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cdHJldHVybiBvRmllbGRDb250cm9sVmFsdWUgPT09IFwiQ29tbW9uLkZpZWxkQ29udHJvbFR5cGUvUmVhZE9ubHlcIjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIHByb3BlcnR5IGlzIGRpc2FibGVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb1RhcmdldCBUaGUgdGFyZ2V0IHByb3BlcnR5IG9yIERhdGFGaWVsZFxuICogQHJldHVybnMge0V4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXNvbHZpbmcgdG8gYSBCb29sZWFuIGJlaW5nIHRydWUgaWYgaXQncyBkaXNhYmxlZFxuICovXG5leHBvcnQgY29uc3QgaXNEaXNhYmxlZEV4cHJlc3Npb24gPSBmdW5jdGlvbihvVGFyZ2V0OiBhbnkpOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4ge1xuXHRjb25zdCBvRmllbGRDb250cm9sVmFsdWUgPSBvVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5GaWVsZENvbnRyb2w/LnZhbHVlT2YoKTtcblx0aWYgKHR5cGVvZiBvRmllbGRDb250cm9sVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0ISFvRmllbGRDb250cm9sVmFsdWUgJiZcblx0XHRcdG9yKFxuXHRcdFx0XHRlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihvRmllbGRDb250cm9sVmFsdWUpIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxudW1iZXI+LCAwKSxcblx0XHRcdFx0ZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24ob0ZpZWxkQ29udHJvbFZhbHVlKSBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPiwgXCIwXCIpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gb0ZpZWxkQ29udHJvbFZhbHVlID09PSBcIkNvbW1vbi5GaWVsZENvbnRyb2xUeXBlL0luYXBwbGljYWJsZVwiO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBjaGVjayBpZiB0aGUgcHJvcGVydHkgaXMgcmVhZCBvbmx5IG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb1RhcmdldCBUaGUgdGFyZ2V0IHByb3BlcnR5IG9yIERhdGFGaWVsZFxuICogQHJldHVybnMge0V4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXNvbHZpbmcgdG8gYSBCb29sZWFuIGJlaW5nIHRydWUgaWYgaXQncyByZWFkIG9ubHlcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUmVxdWlyZWRFeHByZXNzaW9uID0gZnVuY3Rpb24ob1RhcmdldDogYW55KTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+IHtcblx0Y29uc3Qgb0ZpZWxkQ29udHJvbFZhbHVlID0gb1RhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmllbGRDb250cm9sPy52YWx1ZU9mKCk7XG5cdGlmICh0eXBlb2Ygb0ZpZWxkQ29udHJvbFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCEhb0ZpZWxkQ29udHJvbFZhbHVlICYmXG5cdFx0XHRvcihcblx0XHRcdFx0ZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24ob0ZpZWxkQ29udHJvbFZhbHVlKSBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8bnVtYmVyPiwgNyksXG5cdFx0XHRcdGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKG9GaWVsZENvbnRyb2xWYWx1ZSkgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz4sIFwiN1wiKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIG9GaWVsZENvbnRyb2xWYWx1ZSA9PT0gXCJDb21tb24uRmllbGRDb250cm9sVHlwZS9NYW5kYXRvcnlcIjtcbn07XG4iXX0=
90
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpZWxkQ29udHJvbEhlbHBlci50cyJdLCJuYW1lcyI6WyJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsIm9UYXJnZXQiLCJvRmllbGRDb250cm9sVmFsdWUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsInZhbHVlT2YiLCJvciIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiY29uc3RhbnQiLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsImlzTm9uRWRpdGFibGVFeHByZXNzaW9uIiwiaXNSZXF1aXJlZEV4cHJlc3Npb24iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNQSxvQkFBb0IsR0FBRyxVQUFVQyxPQUFWLEVBQTJEO0FBQUE7O0FBQzlGLFFBQU1DLGtCQUFrQixHQUFHRCxPQUFILGFBQUdBLE9BQUgsK0NBQUdBLE9BQU8sQ0FBRUUsV0FBWixrRkFBRyxxQkFBc0JDLE1BQXpCLG9GQUFHLHNCQUE4QkMsWUFBakMsMkRBQUcsdUJBQTRDQyxPQUE1QyxFQUEzQjs7QUFDQSxRQUFJLE9BQU9KLGtCQUFQLEtBQThCLFFBQTlCLElBQTBDLENBQUMsQ0FBQ0Esa0JBQWhELEVBQW9FO0FBQ25FLGFBQU9LLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDQywyQkFBMkIsQ0FBQ1Asa0JBQUQsQ0FBNUIsRUFBa0QsQ0FBbEQsQ0FBTixFQUE0RE0sS0FBSyxDQUFDQywyQkFBMkIsQ0FBQ1Asa0JBQUQsQ0FBNUIsRUFBa0QsR0FBbEQsQ0FBakUsQ0FBVDtBQUNBOztBQUNELFdBQU9RLFFBQVEsQ0FBQ1Isa0JBQWtCLEtBQUssa0NBQXhCLENBQWY7QUFDQSxHQU5NO0FBUVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLE1BQU1TLG9CQUFvQixHQUFHLFVBQVVWLE9BQVYsRUFBMkQ7QUFBQTs7QUFDOUYsUUFBTUMsa0JBQWtCLEdBQUdELE9BQUgsYUFBR0EsT0FBSCxnREFBR0EsT0FBTyxDQUFFRSxXQUFaLG1GQUFHLHNCQUFzQkMsTUFBekIsbUZBQUcsc0JBQThCQyxZQUFqQywwREFBRyxzQkFBNENDLE9BQTVDLEVBQTNCOztBQUNBLFFBQUksT0FBT0osa0JBQVAsS0FBOEIsUUFBOUIsSUFBMEMsQ0FBQyxDQUFDQSxrQkFBaEQsRUFBb0U7QUFDbkUsYUFBT0ssRUFBRSxDQUFDQyxLQUFLLENBQUNDLDJCQUEyQixDQUFDUCxrQkFBRCxDQUE1QixFQUFrRCxDQUFsRCxDQUFOLEVBQTRETSxLQUFLLENBQUNDLDJCQUEyQixDQUFDUCxrQkFBRCxDQUE1QixFQUFrRCxHQUFsRCxDQUFqRSxDQUFUO0FBQ0E7O0FBQ0QsV0FBT1EsUUFBUSxDQUFDUixrQkFBa0IsS0FBSyxzQ0FBeEIsQ0FBZjtBQUNBLEdBTk07QUFRUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTVUsdUJBQXVCLEdBQUcsVUFBVVgsT0FBVixFQUEyRDtBQUNqRyxXQUFPTSxFQUFFLENBQUNQLG9CQUFvQixDQUFDQyxPQUFELENBQXJCLEVBQWdDVSxvQkFBb0IsQ0FBQ1YsT0FBRCxDQUFwRCxDQUFUO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNWSxvQkFBb0IsR0FBRyxVQUFVWixPQUFWLEVBQTJEO0FBQUE7O0FBQzlGLFFBQU1DLGtCQUFrQixHQUFHRCxPQUFILGFBQUdBLE9BQUgsZ0RBQUdBLE9BQU8sQ0FBRUUsV0FBWixtRkFBRyxzQkFBc0JDLE1BQXpCLG1GQUFHLHNCQUE4QkMsWUFBakMsMERBQUcsc0JBQTRDQyxPQUE1QyxFQUEzQjs7QUFDQSxRQUFJLE9BQU9KLGtCQUFQLEtBQThCLFFBQTlCLElBQTBDLENBQUMsQ0FBQ0Esa0JBQWhELEVBQW9FO0FBQ25FLGFBQU9LLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDQywyQkFBMkIsQ0FBQ1Asa0JBQUQsQ0FBNUIsRUFBa0QsQ0FBbEQsQ0FBTixFQUE0RE0sS0FBSyxDQUFDQywyQkFBMkIsQ0FBQ1Asa0JBQUQsQ0FBNUIsRUFBa0QsR0FBbEQsQ0FBakUsQ0FBVDtBQUNBOztBQUNELFdBQU9RLFFBQVEsQ0FBQ1Isa0JBQWtCLEtBQUssbUNBQXhCLENBQWY7QUFDQSxHQU5NIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb25zdGFudCwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgb3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGNoZWNrIGlmIHRoZSBwcm9wZXJ0eSBpcyByZWFkIG9ubHkgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBvVGFyZ2V0IFRoZSB0YXJnZXQgcHJvcGVydHkgb3IgRGF0YUZpZWxkXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlc29sdmluZyB0byBhIEJvb2xlYW4gYmVpbmcgdHJ1ZSBpZiBpdCdzIHJlYWQgb25seVxuICovXG5leHBvcnQgY29uc3QgaXNSZWFkT25seUV4cHJlc3Npb24gPSBmdW5jdGlvbiAob1RhcmdldDogYW55KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3Qgb0ZpZWxkQ29udHJvbFZhbHVlID0gb1RhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmllbGRDb250cm9sPy52YWx1ZU9mKCk7XG5cdGlmICh0eXBlb2Ygb0ZpZWxkQ29udHJvbFZhbHVlID09PSBcIm9iamVjdFwiICYmICEhb0ZpZWxkQ29udHJvbFZhbHVlKSB7XG5cdFx0cmV0dXJuIG9yKGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihvRmllbGRDb250cm9sVmFsdWUpLCAxKSwgZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG9GaWVsZENvbnRyb2xWYWx1ZSksIFwiMVwiKSk7XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KG9GaWVsZENvbnRyb2xWYWx1ZSA9PT0gXCJDb21tb24uRmllbGRDb250cm9sVHlwZS9SZWFkT25seVwiKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIHByb3BlcnR5IGlzIGRpc2FibGVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0gb1RhcmdldCBUaGUgdGFyZ2V0IHByb3BlcnR5IG9yIERhdGFGaWVsZFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXNvbHZpbmcgdG8gYSBCb29sZWFuIGJlaW5nIHRydWUgaWYgaXQncyBkaXNhYmxlZFxuICovXG5leHBvcnQgY29uc3QgaXNEaXNhYmxlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAob1RhcmdldDogYW55KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3Qgb0ZpZWxkQ29udHJvbFZhbHVlID0gb1RhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmllbGRDb250cm9sPy52YWx1ZU9mKCk7XG5cdGlmICh0eXBlb2Ygb0ZpZWxkQ29udHJvbFZhbHVlID09PSBcIm9iamVjdFwiICYmICEhb0ZpZWxkQ29udHJvbFZhbHVlKSB7XG5cdFx0cmV0dXJuIG9yKGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihvRmllbGRDb250cm9sVmFsdWUpLCAwKSwgZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG9GaWVsZENvbnRyb2xWYWx1ZSksIFwiMFwiKSk7XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KG9GaWVsZENvbnRyb2xWYWx1ZSA9PT0gXCJDb21tb24uRmllbGRDb250cm9sVHlwZS9JbmFwcGxpY2FibGVcIik7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGNoZWNrIGlmIHRoZSBwcm9wZXJ0eSBpcyBub24gZWRpdGFibGUgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBvVGFyZ2V0IFRoZSB0YXJnZXQgcHJvcGVydHkgb3IgRGF0YUZpZWxkXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlc29sdmluZyB0byBhIEJvb2xlYW4gYmVpbmcgdHJ1ZSBpZiBpdCdzIG5vbiBlZGl0YWJsZVxuICovXG5leHBvcnQgY29uc3QgaXNOb25FZGl0YWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAob1RhcmdldDogYW55KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIG9yKGlzUmVhZE9ubHlFeHByZXNzaW9uKG9UYXJnZXQpLCBpc0Rpc2FibGVkRXhwcmVzc2lvbihvVGFyZ2V0KSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGNoZWNrIGlmIHRoZSBwcm9wZXJ0eSBpcyByZWFkIG9ubHkgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBvVGFyZ2V0IFRoZSB0YXJnZXQgcHJvcGVydHkgb3IgRGF0YUZpZWxkXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlc29sdmluZyB0byBhIEJvb2xlYW4gYmVpbmcgdHJ1ZSBpZiBpdCdzIHJlYWQgb25seVxuICovXG5leHBvcnQgY29uc3QgaXNSZXF1aXJlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAob1RhcmdldDogYW55KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3Qgb0ZpZWxkQ29udHJvbFZhbHVlID0gb1RhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmllbGRDb250cm9sPy52YWx1ZU9mKCk7XG5cdGlmICh0eXBlb2Ygb0ZpZWxkQ29udHJvbFZhbHVlID09PSBcIm9iamVjdFwiICYmICEhb0ZpZWxkQ29udHJvbFZhbHVlKSB7XG5cdFx0cmV0dXJuIG9yKGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihvRmllbGRDb250cm9sVmFsdWUpLCA3KSwgZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG9GaWVsZENvbnRyb2xWYWx1ZSksIFwiN1wiKSk7XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KG9GaWVsZENvbnRyb2xWYWx1ZSA9PT0gXCJDb21tb24uRmllbGRDb250cm9sVHlwZS9NYW5kYXRvcnlcIik7XG59O1xuIl19
@@ -1,71 +1,54 @@
1
- import { equal, Expression, ExpressionOrPrimitive, or, annotationExpression } from "sap/fe/core/helpers/BindingExpression";
1
+ import type { BindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
2
+ import { constant, equal, getExpressionFromAnnotation, or } from "sap/fe/core/helpers/BindingToolkit";
2
3
 
3
4
  /**
4
- * Create the binding expression to check if the property is non editable or not.
5
+ * Create the binding expression to check if the property is read only or not.
5
6
  *
6
- * @param {object} oTarget The target property or DataField
7
- * @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's non editable
7
+ * @param oTarget The target property or DataField
8
+ * @returns The binding expression resolving to a Boolean being true if it's read only
8
9
  */
9
- export const isNonEditableExpression = function(oTarget: any): Expression<boolean> {
10
- return or(isReadOnlyExpression(oTarget), isDisabledExpression(oTarget));
10
+ export const isReadOnlyExpression = function (oTarget: any): BindingToolkitExpression<boolean> {
11
+ const oFieldControlValue = oTarget?.annotations?.Common?.FieldControl?.valueOf();
12
+ if (typeof oFieldControlValue === "object" && !!oFieldControlValue) {
13
+ return or(equal(getExpressionFromAnnotation(oFieldControlValue), 1), equal(getExpressionFromAnnotation(oFieldControlValue), "1"));
14
+ }
15
+ return constant(oFieldControlValue === "Common.FieldControlType/ReadOnly");
11
16
  };
12
17
 
13
18
  /**
14
- * Create the binding expression to check if the property is read only or not.
19
+ * Create the binding expression to check if the property is disabled or not.
15
20
  *
16
- * @param {object} oTarget The target property or DataField
17
- * @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's read only
21
+ * @param oTarget The target property or DataField
22
+ * @returns The binding expression resolving to a Boolean being true if it's disabled
18
23
  */
19
- export const isReadOnlyExpression = function(oTarget: any): ExpressionOrPrimitive<boolean> {
24
+ export const isDisabledExpression = function (oTarget: any): BindingToolkitExpression<boolean> {
20
25
  const oFieldControlValue = oTarget?.annotations?.Common?.FieldControl?.valueOf();
21
- if (typeof oFieldControlValue === "object") {
22
- return (
23
- !!oFieldControlValue &&
24
- or(
25
- equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<number>, 1),
26
- equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<string>, "1")
27
- )
28
- );
26
+ if (typeof oFieldControlValue === "object" && !!oFieldControlValue) {
27
+ return or(equal(getExpressionFromAnnotation(oFieldControlValue), 0), equal(getExpressionFromAnnotation(oFieldControlValue), "0"));
29
28
  }
30
- return oFieldControlValue === "Common.FieldControlType/ReadOnly";
29
+ return constant(oFieldControlValue === "Common.FieldControlType/Inapplicable");
31
30
  };
32
31
 
33
32
  /**
34
- * Create the binding expression to check if the property is disabled or not.
33
+ * Create the binding expression to check if the property is non editable or not.
35
34
  *
36
- * @param {object} oTarget The target property or DataField
37
- * @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's disabled
35
+ * @param oTarget The target property or DataField
36
+ * @returns The binding expression resolving to a Boolean being true if it's non editable
38
37
  */
39
- export const isDisabledExpression = function(oTarget: any): ExpressionOrPrimitive<boolean> {
40
- const oFieldControlValue = oTarget?.annotations?.Common?.FieldControl?.valueOf();
41
- if (typeof oFieldControlValue === "object") {
42
- return (
43
- !!oFieldControlValue &&
44
- or(
45
- equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<number>, 0),
46
- equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<string>, "0")
47
- )
48
- );
49
- }
50
- return oFieldControlValue === "Common.FieldControlType/Inapplicable";
38
+ export const isNonEditableExpression = function (oTarget: any): BindingToolkitExpression<boolean> {
39
+ return or(isReadOnlyExpression(oTarget), isDisabledExpression(oTarget));
51
40
  };
52
41
 
53
42
  /**
54
43
  * Create the binding expression to check if the property is read only or not.
55
44
  *
56
- * @param {object} oTarget The target property or DataField
57
- * @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's read only
45
+ * @param oTarget The target property or DataField
46
+ * @returns The binding expression resolving to a Boolean being true if it's read only
58
47
  */
59
- export const isRequiredExpression = function(oTarget: any): ExpressionOrPrimitive<boolean> {
48
+ export const isRequiredExpression = function (oTarget: any): BindingToolkitExpression<boolean> {
60
49
  const oFieldControlValue = oTarget?.annotations?.Common?.FieldControl?.valueOf();
61
- if (typeof oFieldControlValue === "object") {
62
- return (
63
- !!oFieldControlValue &&
64
- or(
65
- equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<number>, 7),
66
- equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<string>, "7")
67
- )
68
- );
50
+ if (typeof oFieldControlValue === "object" && !!oFieldControlValue) {
51
+ return or(equal(getExpressionFromAnnotation(oFieldControlValue), 7), equal(getExpressionFromAnnotation(oFieldControlValue), "7"));
69
52
  }
70
- return oFieldControlValue === "Common.FieldControlType/Mandatory";
53
+ return constant(oFieldControlValue === "Common.FieldControlType/Mandatory");
71
54
  };
@@ -35,11 +35,11 @@ sap.ui.define(["sap/base/Log", "sap/ui/mdc/condition/Condition", "sap/ui/mdc/enu
35
35
  if (sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2})\+(\d{1,4})/)) {
36
36
  oValue = sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2})\+(\d{1,4})/)[0];
37
37
  } else if (sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2})/)) {
38
- oValue = sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2})/)[0] + "+0000";
38
+ oValue = "".concat(sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2})/)[0], "+0000");
39
39
  } else if (sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})/)) {
40
- oValue = sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})/)[0] + "T00:00:00+0000";
40
+ oValue = "".concat(sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})/)[0], "T00:00:00+0000");
41
41
  } else if (sValue.indexOf("Z") === sValue.length - 1) {
42
- oValue = sValue.split("Z")[0] + "+0100";
42
+ oValue = "".concat(sValue.split("Z")[0], "+0100");
43
43
  } else {
44
44
  oValue = undefined;
45
45
  }
@@ -108,6 +108,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/mdc/condition/Condition", "sap/ui/mdc/enu
108
108
  }
109
109
  /**
110
110
  * Method to create a condition.
111
+ *
111
112
  * @param sOption Operator to be used.
112
113
  * @param oV1 Lower value
113
114
  * @param oV2 Higher value
@@ -181,7 +182,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/mdc/condition/Condition", "sap/ui/mdc/enu
181
182
  break;
182
183
 
183
184
  default:
184
- Log.warning("Selection Option is not supported : '" + sOption + "'");
185
+ Log.warning("Selection Option is not supported : '".concat(sOption, "'"));
185
186
  return;
186
187
  }
187
188
 
@@ -201,16 +202,16 @@ sap.ui.define(["sap/base/Log", "sap/ui/mdc/condition/Condition", "sap/ui/mdc/enu
201
202
 
202
203
  return oCondition;
203
204
  }
204
- /* Method to get the operator from the Selection Option */
205
+ /* Method to get the Range property from the Selection Option */
205
206
 
206
207
 
207
208
  _exports.resolveConditionValues = resolveConditionValues;
208
209
 
209
- function getOperator(sOperator) {
210
- return sOperator.indexOf("/") > 0 ? sOperator.split("/")[1] : sOperator;
210
+ function getRangeProperty(sProperty) {
211
+ return sProperty.indexOf("/") > 0 ? sProperty.split("/")[1] : sProperty;
211
212
  }
212
213
 
213
- _exports.getOperator = getOperator;
214
+ _exports.getRangeProperty = getRangeProperty;
214
215
 
215
216
  function _buildConditionsFromSelectionRanges(Ranges, oProperty, sPropertyName, getCustomConditions) {
216
217
  var aConditions = [];
@@ -227,7 +228,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/mdc/condition/Condition", "sap/ui/mdc/enu
227
228
  function _getProperty(propertyName, metaModel, entitySetPath) {
228
229
  var lastSlashIndex = propertyName.lastIndexOf("/");
229
230
  var navigationPath = lastSlashIndex > -1 ? propertyName.substring(0, propertyName.lastIndexOf("/") + 1) : "";
230
- var collection = metaModel.getObject(entitySetPath + "/" + navigationPath);
231
+ var collection = metaModel.getObject("".concat(entitySetPath, "/").concat(navigationPath));
231
232
  return collection === null || collection === void 0 ? void 0 : collection[propertyName.replace(navigationPath, "")];
232
233
  }
233
234
 
@@ -293,8 +294,8 @@ sap.ui.define(["sap/base/Log", "sap/ui/mdc/condition/Condition", "sap/ui/mdc/enu
293
294
 
294
295
  function getConditions(Range, oValidProperty) {
295
296
  var oCondition;
296
- var sign = Range.Sign;
297
- var sOption = Range.Option ? getOperator(Range.Option) : undefined;
297
+ var sign = Range.Sign ? getRangeProperty(Range.Sign) : undefined;
298
+ var sOption = Range.Option ? getRangeProperty(Range.Option) : undefined;
298
299
  var oValue1 = getTypeCompliantValue(Range.Low, oValidProperty.$Type || oValidProperty.type);
299
300
  var oValue2 = Range.High ? getTypeCompliantValue(Range.High, oValidProperty.$Type || oValidProperty.type) : undefined;
300
301
  var oConditionValues = resolveConditionValues(sOption, oValue1, oValue2, sign);
@@ -315,7 +316,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/mdc/condition/Condition", "sap/ui/mdc/enu
315
316
 
316
317
  if (properties) {
317
318
  for (var key in properties) {
318
- var defaultFilterValue = oMetaModel.getObject(entitySetPath + "/" + key + "@com.sap.vocabularies.Common.v1.FilterDefaultValue");
319
+ var defaultFilterValue = oMetaModel.getObject("".concat(entitySetPath, "/").concat(key, "@com.sap.vocabularies.Common.v1.FilterDefaultValue"));
319
320
 
320
321
  if (defaultFilterValue !== undefined) {
321
322
  var PropertyName = key;
@@ -354,8 +355,8 @@ sap.ui.define(["sap/base/Log", "sap/ui/mdc/condition/Condition", "sap/ui/mdc/enu
354
355
  var editStateFilter;
355
356
  var entitySetPath = oContext.getInterface(1).getPath(),
356
357
  oMetaModel = oContext.getInterface(1).getModel(),
357
- entityTypeAnnotations = oMetaModel.getObject(entitySetPath + "@"),
358
- entityTypeProperties = oMetaModel.getObject(entitySetPath + "/");
358
+ entityTypeAnnotations = oMetaModel.getObject("".concat(entitySetPath, "@")),
359
+ entityTypeProperties = oMetaModel.getObject("".concat(entitySetPath, "/"));
359
360
 
360
361
  if (entityTypeAnnotations["@com.sap.vocabularies.Common.v1.DraftRoot"] || entityTypeAnnotations["@com.sap.vocabularies.Common.v1.DraftNode"]) {
361
362
  editStateFilter = getEditStatusFilter();
@@ -390,4 +391,4 @@ sap.ui.define(["sap/base/Log", "sap/ui/mdc/condition/Condition", "sap/ui/mdc/enu
390
391
  getFilterConditions.requiresIContext = true;
391
392
  return _exports;
392
393
  }, false);
393
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbHRlckhlbHBlci50cyJdLCJuYW1lcyI6WyJhVmFsaWRUeXBlcyIsIm9FeGNsdWRlTWFwIiwiX2dldERhdGVUaW1lT2Zmc2V0Q29tcGxpYW50VmFsdWUiLCJzVmFsdWUiLCJvVmFsdWUiLCJtYXRjaCIsImluZGV4T2YiLCJsZW5ndGgiLCJzcGxpdCIsInVuZGVmaW5lZCIsIl9nZXREYXRlQ29tcGxpYW50VmFsdWUiLCJnZXRUeXBlQ29tcGxpYW50VmFsdWUiLCJzVHlwZSIsImlzTmFOIiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwicmVzb2x2ZUNvbmRpdGlvblZhbHVlcyIsInNPcHRpb24iLCJvVjEiLCJvVjIiLCJzU2lnbiIsIm9WYWx1ZTIiLCJzSW50ZXJuYWxPcGVyYXRpb24iLCJvQ29uZGl0aW9uIiwidmFsdWVzIiwiaXNFbXB0eSIsIm5JbmRleE9mIiwibkxhc3RJbmRleCIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwiTG9nIiwid2FybmluZyIsIm9wZXJhdG9yIiwicHVzaCIsImdldE9wZXJhdG9yIiwic09wZXJhdG9yIiwiX2J1aWxkQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25SYW5nZXMiLCJSYW5nZXMiLCJvUHJvcGVydHkiLCJzUHJvcGVydHlOYW1lIiwiZ2V0Q3VzdG9tQ29uZGl0aW9ucyIsImFDb25kaXRpb25zIiwiZm9yRWFjaCIsIlJhbmdlIiwiZ2V0Q29uZGl0aW9ucyIsIl9nZXRQcm9wZXJ0eSIsInByb3BlcnR5TmFtZSIsIm1ldGFNb2RlbCIsImVudGl0eVNldFBhdGgiLCJsYXN0U2xhc2hJbmRleCIsIm5hdmlnYXRpb25QYXRoIiwiY29sbGVjdGlvbiIsImdldE9iamVjdCIsInJlcGxhY2UiLCJfYnVpbGRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3RPcHRpb24iLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJmaWx0ZXJDb25kaXRpb25zIiwicHJvcGVydHlQYXRoIiwidmFsdWUiLCIkUHJvcGVydHlQYXRoIiwidGFyZ2V0UHJvcGVydHkiLCJjb25kaXRpb25zIiwiY29uY2F0IiwiZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudCIsInNFbnRpdHlTZXRQYXRoIiwib01ldGFNb2RlbCIsInNlbGVjdGlvblZhcmlhbnQiLCJvRmlsdGVyQ29uZGl0aW9ucyIsImFTZWxlY3RPcHRpb25zIiwiU2VsZWN0T3B0aW9ucyIsImFQYXJhbWV0ZXJzIiwiUGFyYW1ldGVycyIsIk9iamVjdCIsImtleXMiLCJpbmNsdWRlcyIsInBhcmFtZXRlciIsInNQcm9wZXJ0eVBhdGgiLCJ2YWx1ZTEiLCJQcm9wZXJ0eVZhbHVlIiwidmFsdWUyIiwicGF0aCIsImlzUGFyYW1ldGVyIiwidmFsaWRhdGVkIiwiQ29uZGl0aW9uVmFsaWRhdGVkIiwiVmFsaWRhdGVkIiwib1ZhbGlkUHJvcGVydHkiLCJzaWduIiwiU2lnbiIsIk9wdGlvbiIsIm9WYWx1ZTEiLCJMb3ciLCIkVHlwZSIsInR5cGUiLCJIaWdoIiwib0NvbmRpdGlvblZhbHVlcyIsIkNvbmRpdGlvbiIsImNyZWF0ZUNvbmRpdGlvbiIsImdldERlZmF1bHRWYWx1ZUZpbHRlcnMiLCJvQ29udGV4dCIsInByb3BlcnRpZXMiLCJnZXRJbnRlcmZhY2UiLCJnZXRQYXRoIiwiZ2V0TW9kZWwiLCJrZXkiLCJkZWZhdWx0RmlsdGVyVmFsdWUiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZ2V0RWRpdFN0YXR1c0ZpbHRlciIsIm9maWx0ZXJDb25kaXRpb25zIiwiZ2V0RmlsdGVyQ29uZGl0aW9ucyIsImVkaXRTdGF0ZUZpbHRlciIsImVudGl0eVR5cGVBbm5vdGF0aW9ucyIsImVudGl0eVR5cGVQcm9wZXJ0aWVzIiwiZGVmYXVsdEZpbHRlcnMiLCJkZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXF1aXJlc0lDb250ZXh0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNB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LENBQXZDLEdBQTJDNkcsSUFBSSxDQUFDQyxTQUFMLENBQWU1RCxnQkFBZixFQUFpQ0osT0FBakMsQ0FBeUMsV0FBekMsRUFBc0QsTUFBdEQsQ0FBM0MsR0FBMkc1QyxTQUFuSDtBQUNBOzs7QUFFRHFHLEVBQUFBLG1CQUFtQixDQUFDUSxnQkFBcEIsR0FBdUMsSUFBdkMiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvblJhbmdlVHlwZVR5cGVzLCBTZWxlY3Rpb25WYXJpYW50VHlwZVR5cGVzLCBTZWxlY3RPcHRpb25UeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb25kaXRpb24sIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IENvbmRpdGlvblZhbGlkYXRlZCBmcm9tIFwic2FwL3VpL21kYy9lbnVtL0NvbmRpdGlvblZhbGlkYXRlZFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmV4cG9ydCB0eXBlIEZpbHRlckNvbmRpdGlvbnMgPSB7XG5cdG9wZXJhdG9yOiBzdHJpbmc7XG5cdHZhbHVlczogQXJyYXk8c3RyaW5nPjtcblx0aXNFbXB0eT86IGJvb2xlYW4gfCBudWxsO1xuXHR2YWxpZGF0ZWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBhVmFsaWRUeXBlcyA9IFtcblx0XCJFZG0uQm9vbGVhblwiLFxuXHRcIkVkbS5CeXRlXCIsXG5cdFwiRWRtLkRhdGVcIixcblx0XCJFZG0uRGF0ZVRpbWVcIixcblx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIixcblx0XCJFZG0uRGVjaW1hbFwiLFxuXHRcIkVkbS5Eb3VibGVcIixcblx0XCJFZG0uRmxvYXRcIixcblx0XCJFZG0uR3VpZFwiLFxuXHRcIkVkbS5JbnQxNlwiLFxuXHRcIkVkbS5JbnQzMlwiLFxuXHRcIkVkbS5JbnQ2NFwiLFxuXHRcIkVkbS5TQnl0ZVwiLFxuXHRcIkVkbS5TaW5nbGVcIixcblx0XCJFZG0uU3RyaW5nXCIsXG5cdFwiRWRtLlRpbWVcIixcblx0XCJFZG0uVGltZU9mRGF5XCJcbl07XG5cbmNvbnN0IG9FeGNsdWRlTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuXHRcIkNvbnRhaW5zXCI6IFwiTm90Q29udGFpbnNcIixcblx0XCJTdGFydHNXaXRoXCI6IFwiTm90U3RhcnRzV2l0aFwiLFxuXHRcIkVuZHNXaXRoXCI6IFwiTm90RW5kc1dpdGhcIixcblx0XCJFbXB0eVwiOiBcIk5vdEVtcHR5XCIsXG5cdFwiTm90RW1wdHlcIjogXCJFbXB0eVwiLFxuXHRcIkxFXCI6IFwiTk9UTEVcIixcblx0XCJHRVwiOiBcIk5PVEdFXCIsXG5cdFwiTFRcIjogXCJOT1RMVFwiLFxuXHRcIkdUXCI6IFwiTk9UR1RcIixcblx0XCJCVFwiOiBcIk5PVEJUXCIsXG5cdFwiTkVcIjogXCJFUVwiLFxuXHRcIkVRXCI6IFwiTkVcIlxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9nZXREYXRlVGltZU9mZnNldENvbXBsaWFudFZhbHVlKHNWYWx1ZTogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IG9WYWx1ZTtcblx0aWYgKHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KVxcKyhcXGR7MSw0fSkvKSkge1xuXHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KVxcKyhcXGR7MSw0fSkvKVswXTtcblx0fSBlbHNlIGlmIChzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSlUKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkvKSkge1xuXHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KS8pWzBdICsgXCIrMDAwMFwiO1xuXHR9IGVsc2UgaWYgKHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pKSB7XG5cdFx0b1ZhbHVlID0gc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pLylbMF0gKyBcIlQwMDowMDowMCswMDAwXCI7XG5cdH0gZWxzZSBpZiAoc1ZhbHVlLmluZGV4T2YoXCJaXCIpID09PSBzVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdG9WYWx1ZSA9IHNWYWx1ZS5zcGxpdChcIlpcIilbMF0gKyBcIiswMTAwXCI7XG5cdH0gZWxzZSB7XG5cdFx0b1ZhbHVlID0gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBvVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZ2V0RGF0ZUNvbXBsaWFudFZhbHVlKHNWYWx1ZTogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pXG5cdFx0PyBzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkvKVswXVxuXHRcdDogc1ZhbHVlLm1hdGNoKC9eKFxcZHs4fSkvKSAmJiBzVmFsdWUubWF0Y2goL14oXFxkezh9KS8pWzBdO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgdGhlIGNvbXBsaWFudCB2YWx1ZSB0eXBlIGJhc2VkIG9uIHRoZSBkYXRhIHR5cGUuXG4gKlxuICogQHBhcmFtICBzVmFsdWUgUmF3IHZhbHVlXG4gKiBAcGFyYW0gIHNUeXBlIFRoZSBwcm9wZXJ0eSB0eXBlXG4gKiBAcmV0dXJucyBWYWx1ZSB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb25kaXRpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wbGlhbnRWYWx1ZShzVmFsdWU6IGFueSwgc1R5cGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBvVmFsdWU7XG5cdGlmIChhVmFsaWRUeXBlcy5pbmRleE9mKHNUeXBlKSA9PT0gLTEpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdG9WYWx1ZSA9IHNWYWx1ZTtcblx0c3dpdGNoIChzVHlwZSkge1xuXHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0b1ZhbHVlID0gc1ZhbHVlID09PSBcInRydWVcIiB8fCAoc1ZhbHVlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLkRvdWJsZVwiOlxuXHRcdGNhc2UgXCJFZG0uU2luZ2xlXCI6XG5cdFx0XHRvVmFsdWUgPSBpc05hTihzVmFsdWUpID8gdW5kZWZpbmVkIDogcGFyc2VGbG9hdChzVmFsdWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdGNhc2UgXCJFZG0uSW50MzJcIjpcblx0XHRjYXNlIFwiRWRtLlNCeXRlXCI6XG5cdFx0XHRvVmFsdWUgPSBpc05hTihzVmFsdWUpID8gdW5kZWZpbmVkIDogcGFyc2VJbnQoc1ZhbHVlLCAxMCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdG9WYWx1ZSA9IF9nZXREYXRlQ29tcGxpYW50VmFsdWUoc1ZhbHVlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdG9WYWx1ZSA9IF9nZXREYXRlVGltZU9mZnNldENvbXBsaWFudFZhbHVlKHNWYWx1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0b1ZhbHVlID0gc1ZhbHVlLm1hdGNoKC8oXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KS8pID8gc1ZhbHVlLm1hdGNoKC8oXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KS8pWzBdIDogdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXG5cdHJldHVybiBvVmFsdWUgPT09IG51bGwgPyB1bmRlZmluZWQgOiBvVmFsdWU7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGNyZWF0ZSBhIGNvbmRpdGlvbi5cbiAqIEBwYXJhbSAgc09wdGlvbiBPcGVyYXRvciB0byBiZSB1c2VkLlxuICogQHBhcmFtICBvVjEgTG93ZXIgdmFsdWVcbiAqIEBwYXJhbSAgb1YyIEhpZ2hlciB2YWx1ZVxuICogQHBhcmFtIHNTaWduXG4gKiBAcmV0dXJucyBDb25kaXRpb24gdG8gYmUgY3JlYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbmRpdGlvblZhbHVlcyhzT3B0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9WMTogYW55LCBvVjI6IGFueSwgc1NpZ246IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRsZXQgb1ZhbHVlID0gb1YxLFxuXHRcdG9WYWx1ZTIsXG5cdFx0c0ludGVybmFsT3BlcmF0aW9uOiBhbnk7XG5cdGNvbnN0IG9Db25kaXRpb246IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0b0NvbmRpdGlvbi52YWx1ZXMgPSBbXTtcblx0b0NvbmRpdGlvbi5pc0VtcHR5ID0gbnVsbCBhcyBhbnk7XG5cdGlmIChvVjEgPT09IHVuZGVmaW5lZCB8fCBvVjEgPT09IG51bGwpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRzd2l0Y2ggKHNPcHRpb24pIHtcblx0XHRjYXNlIFwiQ1BcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IFwiQ29udGFpbnNcIjtcblx0XHRcdGlmIChvVmFsdWUpIHtcblx0XHRcdFx0Y29uc3QgbkluZGV4T2YgPSBvVmFsdWUuaW5kZXhPZihcIipcIik7XG5cdFx0XHRcdGNvbnN0IG5MYXN0SW5kZXggPSBvVmFsdWUubGFzdEluZGV4T2YoXCIqXCIpO1xuXG5cdFx0XHRcdC8vIG9ubHkgd2hlbiB0aGVyZSBhcmUgJyonIGF0IGFsbFxuXHRcdFx0XHRpZiAobkluZGV4T2YgPiAtMSkge1xuXHRcdFx0XHRcdGlmIChuSW5kZXhPZiA9PT0gMCAmJiBuTGFzdEluZGV4ICE9PSBvVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0c0ludGVybmFsT3BlcmF0aW9uID0gXCJFbmRzV2l0aFwiO1xuXHRcdFx0XHRcdFx0b1ZhbHVlID0gb1ZhbHVlLnN1YnN0cmluZygxLCBvVmFsdWUubGVuZ3RoKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG5JbmRleE9mICE9PSAwICYmIG5MYXN0SW5kZXggPT09IG9WYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBcIlN0YXJ0c1dpdGhcIjtcblx0XHRcdFx0XHRcdG9WYWx1ZSA9IG9WYWx1ZS5zdWJzdHJpbmcoMCwgb1ZhbHVlLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvVmFsdWUgPSBvVmFsdWUuc3Vic3RyaW5nKDEsIG9WYWx1ZS5sZW5ndGggLSAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJDb250YWlucyBPcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAnKicuXCIpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVRXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBvVjEgPT09IFwiXCIgPyBcIkVtcHR5XCIgOiBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBvVjEgPT09IFwiXCIgPyBcIk5vdEVtcHR5XCIgOiBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkJUXCI6XG5cdFx0XHRpZiAob1YyID09PSB1bmRlZmluZWQgfHwgb1YyID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdG9WYWx1ZTIgPSBvVjI7XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkxFXCI6XG5cdFx0Y2FzZSBcIkdFXCI6XG5cdFx0Y2FzZSBcIkdUXCI6XG5cdFx0Y2FzZSBcIkxUXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdExvZy53YXJuaW5nKFwiU2VsZWN0aW9uIE9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIDogJ1wiICsgc09wdGlvbiArIFwiJ1wiKTtcblx0XHRcdHJldHVybjtcblx0fVxuXHRpZiAoc1NpZ24gPT09IFwiRVwiKSB7XG5cdFx0c0ludGVybmFsT3BlcmF0aW9uID0gb0V4Y2x1ZGVNYXBbc0ludGVybmFsT3BlcmF0aW9uXTtcblx0fVxuXHRvQ29uZGl0aW9uLm9wZXJhdG9yID0gc0ludGVybmFsT3BlcmF0aW9uO1xuXHRpZiAoc0ludGVybmFsT3BlcmF0aW9uICE9PSBcIkVtcHR5XCIpIHtcblx0XHRvQ29uZGl0aW9uLnZhbHVlcy5wdXNoKG9WYWx1ZSk7XG5cdFx0aWYgKG9WYWx1ZTIpIHtcblx0XHRcdG9Db25kaXRpb24udmFsdWVzLnB1c2gob1ZhbHVlMik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQ29uZGl0aW9uO1xufVxuXG4vKiBNZXRob2QgdG8gZ2V0IHRoZSBvcGVyYXRvciBmcm9tIHRoZSBTZWxlY3Rpb24gT3B0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlcmF0b3Ioc09wZXJhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gc09wZXJhdG9yLmluZGV4T2YoXCIvXCIpID4gMCA/IHNPcGVyYXRvci5zcGxpdChcIi9cIilbMV0gOiBzT3BlcmF0b3I7XG59XG5cbmZ1bmN0aW9uIF9idWlsZENvbmRpdGlvbnNGcm9tU2VsZWN0aW9uUmFuZ2VzKFxuXHRSYW5nZXM6IFNlbGVjdGlvblJhbmdlVHlwZVR5cGVzW10sXG5cdG9Qcm9wZXJ0eTogUmVjb3JkPHN0cmluZywgb2JqZWN0Pixcblx0c1Byb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRnZXRDdXN0b21Db25kaXRpb25zPzogRnVuY3Rpb25cbik6IGFueVtdIHtcblx0Y29uc3QgYUNvbmRpdGlvbnM6IGFueVtdID0gW107XG5cdFJhbmdlcz8uZm9yRWFjaCgoUmFuZ2U6IGFueSkgPT4ge1xuXHRcdGNvbnN0IG9Db25kaXRpb24gPSBnZXRDdXN0b21Db25kaXRpb25zID8gZ2V0Q3VzdG9tQ29uZGl0aW9ucyhSYW5nZSwgb1Byb3BlcnR5LCBzUHJvcGVydHlOYW1lKSA6IGdldENvbmRpdGlvbnMoUmFuZ2UsIG9Qcm9wZXJ0eSk7XG5cdFx0aWYgKG9Db25kaXRpb24pIHtcblx0XHRcdGFDb25kaXRpb25zLnB1c2gob0NvbmRpdGlvbik7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFDb25kaXRpb25zO1xufVxuXG5mdW5jdGlvbiBfZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4ge1xuXHRjb25zdCBsYXN0U2xhc2hJbmRleCA9IHByb3BlcnR5TmFtZS5sYXN0SW5kZXhPZihcIi9cIik7XG5cdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gbGFzdFNsYXNoSW5kZXggPiAtMSA/IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcHJvcGVydHlOYW1lLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpIDogXCJcIjtcblx0Y29uc3QgY29sbGVjdGlvbiA9IG1ldGFNb2RlbC5nZXRPYmplY3QoZW50aXR5U2V0UGF0aCArIFwiL1wiICsgbmF2aWdhdGlvblBhdGgpO1xuXHRyZXR1cm4gY29sbGVjdGlvbj8uW3Byb3BlcnR5TmFtZS5yZXBsYWNlKG5hdmlnYXRpb25QYXRoLCBcIlwiKV07XG59XG5cbmZ1bmN0aW9uIF9idWlsZEZpbHRlcnNDb25kaXRpb25zRnJvbVNlbGVjdE9wdGlvbihcblx0c2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlLFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRlbnRpdHlTZXRQYXRoOiBzdHJpbmcsXG5cdGdldEN1c3RvbUNvbmRpdGlvbnM/OiBGdW5jdGlvblxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZSxcblx0XHRmaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge30sXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWUudmFsdWUgfHwgcHJvcGVydHlOYW1lLiRQcm9wZXJ0eVBhdGgsXG5cdFx0UmFuZ2VzOiBTZWxlY3Rpb25SYW5nZVR5cGVUeXBlc1tdID0gc2VsZWN0T3B0aW9uLlJhbmdlcztcblx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSBfZ2V0UHJvcGVydHkocHJvcGVydHlQYXRoLCBtZXRhTW9kZWwsIGVudGl0eVNldFBhdGgpO1xuXHRpZiAodGFyZ2V0UHJvcGVydHkpIHtcblx0XHRjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IF9idWlsZENvbmRpdGlvbnNGcm9tU2VsZWN0aW9uUmFuZ2VzKFJhbmdlcywgdGFyZ2V0UHJvcGVydHksIHByb3BlcnR5UGF0aCwgZ2V0Q3VzdG9tQ29uZGl0aW9ucyk7XG5cdFx0aWYgKGNvbmRpdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRmaWx0ZXJDb25kaXRpb25zW3Byb3BlcnR5UGF0aF0gPSAoZmlsdGVyQ29uZGl0aW9uc1twcm9wZXJ0eVBhdGhdIHx8IFtdKS5jb25jYXQoY29uZGl0aW9ucyk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmaWx0ZXJDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudChcblx0c0VudGl0eVNldFBhdGg6IHN0cmluZyxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdGdldEN1c3RvbUNvbmRpdGlvbnM/OiBGdW5jdGlvblxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGxldCBvRmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRpZiAoIXNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRyZXR1cm4gb0ZpbHRlckNvbmRpdGlvbnM7XG5cdH1cblx0Y29uc3QgYVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMsXG5cdFx0YVBhcmFtZXRlcnMgPSBzZWxlY3Rpb25WYXJpYW50LlBhcmFtZXRlcnM7XG5cdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWU6IGFueSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWUsXG5cdFx0XHRzUHJvcGVydHlOYW1lOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWUudmFsdWUgfHwgcHJvcGVydHlOYW1lLiRQcm9wZXJ0eVBhdGg7XG5cdFx0aWYgKE9iamVjdC5rZXlzKG9GaWx0ZXJDb25kaXRpb25zKS5pbmNsdWRlcyhzUHJvcGVydHlOYW1lKSkge1xuXHRcdFx0b0ZpbHRlckNvbmRpdGlvbnNbc1Byb3BlcnR5TmFtZV0gPSBvRmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXS5jb25jYXQoXG5cdFx0XHRcdF9idWlsZEZpbHRlcnNDb25kaXRpb25zRnJvbVNlbGVjdE9wdGlvbihzZWxlY3RPcHRpb24sIG9NZXRhTW9kZWwsIHNFbnRpdHlTZXRQYXRoLCBnZXRDdXN0b21Db25kaXRpb25zKVtzUHJvcGVydHlOYW1lXVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0ZpbHRlckNvbmRpdGlvbnMgPSB7XG5cdFx0XHRcdC4uLm9GaWx0ZXJDb25kaXRpb25zLFxuXHRcdFx0XHQuLi5fYnVpbGRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3RPcHRpb24oc2VsZWN0T3B0aW9uLCBvTWV0YU1vZGVsLCBzRW50aXR5U2V0UGF0aCwgZ2V0Q3VzdG9tQ29uZGl0aW9ucylcblx0XHRcdH07XG5cdFx0fVxuXHR9KTtcblx0YVBhcmFtZXRlcnM/LmZvckVhY2goKHBhcmFtZXRlcjogYW55KSA9PiB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUudmFsdWUgfHwgcGFyYW1ldGVyLlByb3BlcnR5TmFtZS4kUHJvcGVydHlQYXRoO1xuXHRcdGNvbnN0IG9Db25kaXRpb246IGFueSA9IGdldEN1c3RvbUNvbmRpdGlvbnNcblx0XHRcdD8geyBvcGVyYXRvcjogXCJFUVwiLCB2YWx1ZTE6IHBhcmFtZXRlci5Qcm9wZXJ0eVZhbHVlLCB2YWx1ZTI6IG51bGwsIHBhdGg6IHNQcm9wZXJ0eVBhdGgsIGlzUGFyYW1ldGVyOiB0cnVlIH1cblx0XHRcdDoge1xuXHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBbcGFyYW1ldGVyLlByb3BlcnR5VmFsdWVdLFxuXHRcdFx0XHRcdGlzRW1wdHk6IG51bGwsXG5cdFx0XHRcdFx0dmFsaWRhdGVkOiBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkLFxuXHRcdFx0XHRcdGlzUGFyYW1ldGVyOiB0cnVlXG5cdFx0XHQgIH07XG5cdFx0b0ZpbHRlckNvbmRpdGlvbnNbc1Byb3BlcnR5UGF0aF0gPSBbb0NvbmRpdGlvbl07XG5cdH0pO1xuXG5cdHJldHVybiBvRmlsdGVyQ29uZGl0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmRpdGlvbnMoUmFuZ2U6IGFueSwgb1ZhbGlkUHJvcGVydHk6IGFueSk6IENvbmRpdGlvbk9iamVjdCB8IHVuZGVmaW5lZCB7XG5cdGxldCBvQ29uZGl0aW9uO1xuXHRjb25zdCBzaWduOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBSYW5nZS5TaWduO1xuXHRjb25zdCBzT3B0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBSYW5nZS5PcHRpb24gPyBnZXRPcGVyYXRvcihSYW5nZS5PcHRpb24pIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvVmFsdWUxOiBhbnkgPSBnZXRUeXBlQ29tcGxpYW50VmFsdWUoUmFuZ2UuTG93LCBvVmFsaWRQcm9wZXJ0eS4kVHlwZSB8fCBvVmFsaWRQcm9wZXJ0eS50eXBlKTtcblx0Y29uc3Qgb1ZhbHVlMjogYW55ID0gUmFuZ2UuSGlnaCA/IGdldFR5cGVDb21wbGlhbnRWYWx1ZShSYW5nZS5IaWdoLCBvVmFsaWRQcm9wZXJ0eS4kVHlwZSB8fCBvVmFsaWRQcm9wZXJ0eS50eXBlKSA6IHVuZGVmaW5lZDtcblx0Y29uc3Qgb0NvbmRpdGlvblZhbHVlcyA9IHJlc29sdmVDb25kaXRpb25WYWx1ZXMoc09wdGlvbiwgb1ZhbHVlMSwgb1ZhbHVlMiwgc2lnbikgYXMgYW55O1xuXHRpZiAob0NvbmRpdGlvblZhbHVlcykge1xuXHRcdG9Db25kaXRpb24gPSBDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKFxuXHRcdFx0b0NvbmRpdGlvblZhbHVlcy5vcGVyYXRvcixcblx0XHRcdG9Db25kaXRpb25WYWx1ZXMudmFsdWVzLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gb0NvbmRpdGlvbjtcbn1cblxuY29uc3QgZ2V0RGVmYXVsdFZhbHVlRmlsdGVycyA9IGZ1bmN0aW9uIChvQ29udGV4dDogYW55LCBwcm9wZXJ0aWVzOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3QgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldFBhdGgoKSxcblx0XHRvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldE1vZGVsKCk7XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGVudGl0eVNldFBhdGggKyBcIi9cIiArIGtleSArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVcIlxuXHRcdFx0KTtcblx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBQcm9wZXJ0eU5hbWUgPSBrZXk7XG5cdFx0XHRcdGZpbHRlckNvbmRpdGlvbnNbUHJvcGVydHlOYW1lXSA9IFtcblx0XHRcdFx0XHRDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKFwiRVFcIiwgW2RlZmF1bHRGaWx0ZXJWYWx1ZV0sIG51bGwsIG51bGwsIENvbmRpdGlvblZhbGlkYXRlZC5WYWxpZGF0ZWQpIGFzIEZpbHRlckNvbmRpdGlvbnNcblx0XHRcdFx0XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZpbHRlckNvbmRpdGlvbnM7XG59O1xuXG5jb25zdCBnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyA9IGZ1bmN0aW9uIChcblx0b0NvbnRleHQ6IGFueSxcblx0cHJvcGVydGllczogYW55LFxuXHRkZWZhdWx0U2VtYW50aWNEYXRlczogYW55XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3QgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHByb3BlcnRpZXMpIHtcblx0XHRcdC8vIGN1cnJlbnRseSBkZWZhdWx0U2VtYW50aWNEYXRlcyBjYW4gc3VwcG9ydCBvbmx5IG9uZSBlbnRyeSwgd2UgcGljayB0aGUgZmlyc3Qgb25lIGRpcmVjdGx5IHVzaW5nIDAgaW5kZXhcblx0XHRcdGlmIChkZWZhdWx0U2VtYW50aWNEYXRlc1trZXldICYmIGRlZmF1bHRTZW1hbnRpY0RhdGVzW2tleV1bMF0pIHtcblx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1trZXldID0gW1xuXHRcdFx0XHRcdENvbmRpdGlvbi5jcmVhdGVDb25kaXRpb24oZGVmYXVsdFNlbWFudGljRGF0ZXNba2V5XVswXS5vcGVyYXRvciwgW10sIG51bGwsIG51bGwsIG51bGwpIGFzIEZpbHRlckNvbmRpdGlvbnNcblx0XHRcdFx0XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZpbHRlckNvbmRpdGlvbnM7XG59O1xuXG5mdW5jdGlvbiBnZXRFZGl0U3RhdHVzRmlsdGVyKCk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4ge1xuXHRjb25zdCBvZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRvZmlsdGVyQ29uZGl0aW9uc1tcIiRlZGl0U3RhdGVcIl0gPSBbXG5cdFx0Q29uZGl0aW9uLmNyZWF0ZUNvbmRpdGlvbihcIkRSQUZUX0VESVRfU1RBVEVcIiwgW1wiQUxMXCJdLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkKSBhcyBGaWx0ZXJDb25kaXRpb25zXG5cdF07XG5cdHJldHVybiBvZmlsdGVyQ29uZGl0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlckNvbmRpdGlvbnMob0NvbnRleHQ6IGFueSwgZmlsdGVyQ29uZGl0aW9uczogYW55KTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGxldCBlZGl0U3RhdGVGaWx0ZXI7XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0UGF0aCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0TW9kZWwoKSxcblx0XHRlbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChlbnRpdHlTZXRQYXRoICsgXCJAXCIpLFxuXHRcdGVudGl0eVR5cGVQcm9wZXJ0aWVzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoZW50aXR5U2V0UGF0aCArIFwiL1wiKTtcblx0aWYgKFxuXHRcdGVudGl0eVR5cGVBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdIHx8XG5cdFx0ZW50aXR5VHlwZUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIl1cblx0KSB7XG5cdFx0ZWRpdFN0YXRlRmlsdGVyID0gZ2V0RWRpdFN0YXR1c0ZpbHRlcigpO1xuXHR9XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBmaWx0ZXJDb25kaXRpb25zPy5zZWxlY3Rpb25WYXJpYW50O1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlcyA9IGZpbHRlckNvbmRpdGlvbnM/LmRlZmF1bHRTZW1hbnRpY0RhdGVzIHx8IHt9O1xuXHRjb25zdCBkZWZhdWx0RmlsdGVycyA9IGdldERlZmF1bHRWYWx1ZUZpbHRlcnMob0NvbnRleHQsIGVudGl0eVR5cGVQcm9wZXJ0aWVzKTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMgPSBnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyhvQ29udGV4dCwgZW50aXR5VHlwZVByb3BlcnRpZXMsIGRlZmF1bHRTZW1hbnRpY0RhdGVzKTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRmaWx0ZXJDb25kaXRpb25zID0gZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudChlbnRpdHlTZXRQYXRoLCBvTWV0YU1vZGVsLCBzZWxlY3Rpb25WYXJpYW50KTtcblx0fSBlbHNlIGlmIChkZWZhdWx0RmlsdGVycykge1xuXHRcdGZpbHRlckNvbmRpdGlvbnMgPSBkZWZhdWx0RmlsdGVycztcblx0fVxuXHRpZiAoZGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMpIHtcblx0XHQvLyBvbmx5IGZvciBzZW1hbnRpYyBkYXRlOlxuXHRcdC8vIDEuIHZhbHVlIGZyb20gbWFuaWZlc3QgZ2V0IG1lcmdlZCB3aXRoIFNWXG5cdFx0Ly8gMi4gbWFuaWZlc3QgdmFsdWUgaXMgZ2l2ZW4gcHJlZmVyZW5jZSB3aGVuIHRoZXJlIGlzIHNhbWUgc2VtYW50aWMgZGF0ZSBwcm9wZXJ0eSBpbiBTViBhbmQgbWFuaWZlc3Rcblx0XHRmaWx0ZXJDb25kaXRpb25zID0geyAuLi5maWx0ZXJDb25kaXRpb25zLCAuLi5kZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyB9O1xuXHR9XG5cdGlmIChlZGl0U3RhdGVGaWx0ZXIpIHtcblx0XHRmaWx0ZXJDb25kaXRpb25zID0geyAuLi5maWx0ZXJDb25kaXRpb25zLCAuLi5lZGl0U3RhdGVGaWx0ZXIgfTtcblx0fVxuXHRyZXR1cm4gKE9iamVjdC5rZXlzKGZpbHRlckNvbmRpdGlvbnMpLmxlbmd0aCA+IDAgPyBKU09OLnN0cmluZ2lmeShmaWx0ZXJDb25kaXRpb25zKS5yZXBsYWNlKC8oW1xce1xcfV0pL2csIFwiXFxcXCQxXCIpIDogdW5kZWZpbmVkKSBhcyBhbnk7XG59XG5cbmdldEZpbHRlckNvbmRpdGlvbnMucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4iXX0=
394
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbHRlckhlbHBlci50cyJdLCJuYW1lcyI6WyJhVmFsaWRUeXBlcyIsIm9FeGNsdWRlTWFwIiwiX2dldERhdGVUaW1lT2Zmc2V0Q29tcGxpYW50VmFsdWUiLCJzVmFsdWUiLCJvVmFsdWUiLCJtYXRjaCIsImluZGV4T2YiLCJsZW5ndGgiLCJzcGxpdCIsInVuZGVmaW5lZCIsIl9nZXREYXRlQ29tcGxpYW50VmFsdWUiLCJnZXRUeXBlQ29tcGxpYW50VmFsdWUiLCJzVHlwZSIsImlzTmFOIiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwicmVzb2x2ZUNvbmRpdGlvblZhbHVlcyIsInNPcHRpb24iLCJvVjEiLCJvVjIiLCJzU2lnbiIsIm9WYWx1ZTIiLCJzSW50ZXJuYWxPcGVyYXRpb24iLCJvQ29uZGl0aW9uIiwidmFsdWVzIiwiaXNFbXB0eSIsIm5JbmRleE9mIiwibkxhc3RJbmRleCIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwiTG9nIiwid2FybmluZyIsIm9wZXJhdG9yIiwicHVzaCIsImdldFJhbmdlUHJvcGVydHkiLCJzUHJvcGVydHkiLCJfYnVpbGRDb25kaXRpb25zRnJvbVNlbGVjdGlvblJhbmdlcyIsIlJhbmdlcyIsIm9Qcm9wZXJ0eSIsInNQcm9wZXJ0eU5hbWUiLCJnZXRDdXN0b21Db25kaXRpb25zIiwiYUNvbmRpdGlvbnMiLCJmb3JFYWNoIiwiUmFuZ2UiLCJnZXRDb25kaXRpb25zIiwiX2dldFByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwibWV0YU1vZGVsIiwiZW50aXR5U2V0UGF0aCIsImxhc3RTbGFzaEluZGV4IiwibmF2aWdhdGlvblBhdGgiLCJjb2xsZWN0aW9uIiwiZ2V0T2JqZWN0IiwicmVwbGFjZSIsIl9idWlsZEZpbHRlcnNDb25kaXRpb25zRnJvbVNlbGVjdE9wdGlvbiIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsImZpbHRlckNvbmRpdGlvbnMiLCJwcm9wZXJ0eVBhdGgiLCJ2YWx1ZSIsIiRQcm9wZXJ0eVBhdGgiLCJ0YXJnZXRQcm9wZXJ0eSIsImNvbmRpdGlvbnMiLCJjb25jYXQiLCJnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50Iiwic0VudGl0eVNldFBhdGgiLCJvTWV0YU1vZGVsIiwic2VsZWN0aW9uVmFyaWFudCIsIm9GaWx0ZXJDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwiYVBhcmFtZXRlcnMiLCJQYXJhbWV0ZXJzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwicGFyYW1ldGVyIiwic1Byb3BlcnR5UGF0aCIsInZhbHVlMSIsIlByb3BlcnR5VmFsdWUiLCJ2YWx1ZTIiLCJwYXRoIiwiaXNQYXJhbWV0ZXIiLCJ2YWxpZGF0ZWQiLCJDb25kaXRpb25WYWxpZGF0ZWQiLCJWYWxpZGF0ZWQiLCJvVmFsaWRQcm9wZXJ0eSIsInNpZ24iLCJTaWduIiwiT3B0aW9uIiwib1ZhbHVlMSIsIkxvdyIsIiRUeXBlIiwidHlwZSIsIkhpZ2giLCJvQ29uZGl0aW9uVmFsdWVzIiwiQ29uZGl0aW9uIiwiY3JlYXRlQ29uZGl0aW9uIiwiZ2V0RGVmYXVsdFZhbHVlRmlsdGVycyIsIm9Db250ZXh0IiwicHJvcGVydGllcyIsImdldEludGVyZmFjZSIsImdldFBhdGgiLCJnZXRNb2RlbCIsImtleSIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsImdldERlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzIiwiZGVmYXVsdFNlbWFudGljRGF0ZXMiLCJnZXRFZGl0U3RhdHVzRmlsdGVyIiwib2ZpbHRlckNvbmRpdGlvbnMiLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwiZWRpdFN0YXRlRmlsdGVyIiwiZW50aXR5VHlwZUFubm90YXRpb25zIiwiZW50aXR5VHlwZVByb3BlcnRpZXMiLCJkZWZhdWx0RmlsdGVycyIsImRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlcXVpcmVzSUNvbnRleHQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNB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LEdBQTJDNkcsSUFBSSxDQUFDQyxTQUFMLENBQWU1RCxnQkFBZixFQUFpQ0osT0FBakMsQ0FBeUMsV0FBekMsRUFBc0QsTUFBdEQsQ0FBM0MsR0FBMkc1QyxTQUFuSDtBQUNBOzs7QUFFRHFHLEVBQUFBLG1CQUFtQixDQUFDUSxnQkFBcEIsR0FBdUMsSUFBdkMiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VsZWN0aW9uUmFuZ2VUeXBlVHlwZXMsIFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXMsIFNlbGVjdE9wdGlvblR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IENvbmRpdGlvbiBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgQ29uZGl0aW9uVmFsaWRhdGVkIGZyb20gXCJzYXAvdWkvbWRjL2VudW0vQ29uZGl0aW9uVmFsaWRhdGVkXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5leHBvcnQgdHlwZSBGaWx0ZXJDb25kaXRpb25zID0ge1xuXHRvcGVyYXRvcjogc3RyaW5nO1xuXHR2YWx1ZXM6IEFycmF5PHN0cmluZz47XG5cdGlzRW1wdHk/OiBib29sZWFuIHwgbnVsbDtcblx0dmFsaWRhdGVkPzogc3RyaW5nO1xufTtcblxuY29uc3QgYVZhbGlkVHlwZXMgPSBbXG5cdFwiRWRtLkJvb2xlYW5cIixcblx0XCJFZG0uQnl0ZVwiLFxuXHRcIkVkbS5EYXRlXCIsXG5cdFwiRWRtLkRhdGVUaW1lXCIsXG5cdFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsXG5cdFwiRWRtLkRlY2ltYWxcIixcblx0XCJFZG0uRG91YmxlXCIsXG5cdFwiRWRtLkZsb2F0XCIsXG5cdFwiRWRtLkd1aWRcIixcblx0XCJFZG0uSW50MTZcIixcblx0XCJFZG0uSW50MzJcIixcblx0XCJFZG0uSW50NjRcIixcblx0XCJFZG0uU0J5dGVcIixcblx0XCJFZG0uU2luZ2xlXCIsXG5cdFwiRWRtLlN0cmluZ1wiLFxuXHRcIkVkbS5UaW1lXCIsXG5cdFwiRWRtLlRpbWVPZkRheVwiXG5dO1xuXG5jb25zdCBvRXhjbHVkZU1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcblx0XCJDb250YWluc1wiOiBcIk5vdENvbnRhaW5zXCIsXG5cdFwiU3RhcnRzV2l0aFwiOiBcIk5vdFN0YXJ0c1dpdGhcIixcblx0XCJFbmRzV2l0aFwiOiBcIk5vdEVuZHNXaXRoXCIsXG5cdFwiRW1wdHlcIjogXCJOb3RFbXB0eVwiLFxuXHRcIk5vdEVtcHR5XCI6IFwiRW1wdHlcIixcblx0XCJMRVwiOiBcIk5PVExFXCIsXG5cdFwiR0VcIjogXCJOT1RHRVwiLFxuXHRcIkxUXCI6IFwiTk9UTFRcIixcblx0XCJHVFwiOiBcIk5PVEdUXCIsXG5cdFwiQlRcIjogXCJOT1RCVFwiLFxuXHRcIk5FXCI6IFwiRVFcIixcblx0XCJFUVwiOiBcIk5FXCJcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfZ2V0RGF0ZVRpbWVPZmZzZXRDb21wbGlhbnRWYWx1ZShzVmFsdWU6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBvVmFsdWU7XG5cdGlmIChzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSlUKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSlcXCsoXFxkezEsNH0pLykpIHtcblx0XHRvVmFsdWUgPSBzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSlUKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSlcXCsoXFxkezEsNH0pLylbMF07XG5cdH0gZWxzZSBpZiAoc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pVChcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pLykpIHtcblx0XHRvVmFsdWUgPSBgJHtzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSlUKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkvKVswXX0rMDAwMGA7XG5cdH0gZWxzZSBpZiAoc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pLykpIHtcblx0XHRvVmFsdWUgPSBgJHtzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkvKVswXX1UMDA6MDA6MDArMDAwMGA7XG5cdH0gZWxzZSBpZiAoc1ZhbHVlLmluZGV4T2YoXCJaXCIpID09PSBzVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdG9WYWx1ZSA9IGAke3NWYWx1ZS5zcGxpdChcIlpcIilbMF19KzAxMDBgO1xuXHR9IGVsc2Uge1xuXHRcdG9WYWx1ZSA9IHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gb1ZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2dldERhdGVDb21wbGlhbnRWYWx1ZShzVmFsdWU6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkvKVxuXHRcdD8gc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pLylbMF1cblx0XHQ6IHNWYWx1ZS5tYXRjaCgvXihcXGR7OH0pLykgJiYgc1ZhbHVlLm1hdGNoKC9eKFxcZHs4fSkvKVswXTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IHRoZSBjb21wbGlhbnQgdmFsdWUgdHlwZSBiYXNlZCBvbiB0aGUgZGF0YSB0eXBlLlxuICpcbiAqIEBwYXJhbSAgc1ZhbHVlIFJhdyB2YWx1ZVxuICogQHBhcmFtICBzVHlwZSBUaGUgcHJvcGVydHkgdHlwZVxuICogQHJldHVybnMgVmFsdWUgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29uZGl0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcGxpYW50VmFsdWUoc1ZhbHVlOiBhbnksIHNUeXBlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgb1ZhbHVlO1xuXHRpZiAoYVZhbGlkVHlwZXMuaW5kZXhPZihzVHlwZSkgPT09IC0xKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRvVmFsdWUgPSBzVmFsdWU7XG5cdHN3aXRjaCAoc1R5cGUpIHtcblx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdG9WYWx1ZSA9IHNWYWx1ZSA9PT0gXCJ0cnVlXCIgfHwgKHNWYWx1ZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiB1bmRlZmluZWQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVkbS5Eb3VibGVcIjpcblx0XHRjYXNlIFwiRWRtLlNpbmdsZVwiOlxuXHRcdFx0b1ZhbHVlID0gaXNOYU4oc1ZhbHVlKSA/IHVuZGVmaW5lZCA6IHBhcnNlRmxvYXQoc1ZhbHVlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdGNhc2UgXCJFZG0uSW50MTZcIjpcblx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0Y2FzZSBcIkVkbS5TQnl0ZVwiOlxuXHRcdFx0b1ZhbHVlID0gaXNOYU4oc1ZhbHVlKSA/IHVuZGVmaW5lZCA6IHBhcnNlSW50KHNWYWx1ZSwgMTApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRvVmFsdWUgPSBfZ2V0RGF0ZUNvbXBsaWFudFZhbHVlKHNWYWx1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRvVmFsdWUgPSBfZ2V0RGF0ZVRpbWVPZmZzZXRDb21wbGlhbnRWYWx1ZShzVmFsdWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkvKSA/IHNWYWx1ZS5tYXRjaCgvKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkvKVswXSA6IHVuZGVmaW5lZDtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRyZXR1cm4gb1ZhbHVlID09PSBudWxsID8gdW5kZWZpbmVkIDogb1ZhbHVlO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBjcmVhdGUgYSBjb25kaXRpb24uXG4gKlxuICogQHBhcmFtICBzT3B0aW9uIE9wZXJhdG9yIHRvIGJlIHVzZWQuXG4gKiBAcGFyYW0gIG9WMSBMb3dlciB2YWx1ZVxuICogQHBhcmFtICBvVjIgSGlnaGVyIHZhbHVlXG4gKiBAcGFyYW0gc1NpZ25cbiAqIEByZXR1cm5zIENvbmRpdGlvbiB0byBiZSBjcmVhdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ29uZGl0aW9uVmFsdWVzKHNPcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCwgb1YxOiBhbnksIG9WMjogYW55LCBzU2lnbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdGxldCBvVmFsdWUgPSBvVjEsXG5cdFx0b1ZhbHVlMixcblx0XHRzSW50ZXJuYWxPcGVyYXRpb246IGFueTtcblx0Y29uc3Qgb0NvbmRpdGlvbjogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRvQ29uZGl0aW9uLnZhbHVlcyA9IFtdO1xuXHRvQ29uZGl0aW9uLmlzRW1wdHkgPSBudWxsIGFzIGFueTtcblx0aWYgKG9WMSA9PT0gdW5kZWZpbmVkIHx8IG9WMSA9PT0gbnVsbCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHN3aXRjaCAoc09wdGlvbikge1xuXHRcdGNhc2UgXCJDUFwiOlxuXHRcdFx0c0ludGVybmFsT3BlcmF0aW9uID0gXCJDb250YWluc1wiO1xuXHRcdFx0aWYgKG9WYWx1ZSkge1xuXHRcdFx0XHRjb25zdCBuSW5kZXhPZiA9IG9WYWx1ZS5pbmRleE9mKFwiKlwiKTtcblx0XHRcdFx0Y29uc3Qgbkxhc3RJbmRleCA9IG9WYWx1ZS5sYXN0SW5kZXhPZihcIipcIik7XG5cblx0XHRcdFx0Ly8gb25seSB3aGVuIHRoZXJlIGFyZSAnKicgYXQgYWxsXG5cdFx0XHRcdGlmIChuSW5kZXhPZiA+IC0xKSB7XG5cdFx0XHRcdFx0aWYgKG5JbmRleE9mID09PSAwICYmIG5MYXN0SW5kZXggIT09IG9WYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBcIkVuZHNXaXRoXCI7XG5cdFx0XHRcdFx0XHRvVmFsdWUgPSBvVmFsdWUuc3Vic3RyaW5nKDEsIG9WYWx1ZS5sZW5ndGgpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAobkluZGV4T2YgIT09IDAgJiYgbkxhc3RJbmRleCA9PT0gb1ZhbHVlLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IFwiU3RhcnRzV2l0aFwiO1xuXHRcdFx0XHRcdFx0b1ZhbHVlID0gb1ZhbHVlLnN1YnN0cmluZygwLCBvVmFsdWUubGVuZ3RoIC0gMSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9WYWx1ZSA9IG9WYWx1ZS5zdWJzdHJpbmcoMSwgb1ZhbHVlLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRMb2cud2FybmluZyhcIkNvbnRhaW5zIE9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0ICcqJy5cIik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRVFcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IG9WMSA9PT0gXCJcIiA/IFwiRW1wdHlcIiA6IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTkVcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IG9WMSA9PT0gXCJcIiA/IFwiTm90RW1wdHlcIiA6IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQlRcIjpcblx0XHRcdGlmIChvVjIgPT09IHVuZGVmaW5lZCB8fCBvVjIgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0b1ZhbHVlMiA9IG9WMjtcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTEVcIjpcblx0XHRjYXNlIFwiR0VcIjpcblx0XHRjYXNlIFwiR1RcIjpcblx0XHRjYXNlIFwiTFRcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0TG9nLndhcm5pbmcoYFNlbGVjdGlvbiBPcHRpb24gaXMgbm90IHN1cHBvcnRlZCA6ICcke3NPcHRpb259J2ApO1xuXHRcdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzU2lnbiA9PT0gXCJFXCIpIHtcblx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBvRXhjbHVkZU1hcFtzSW50ZXJuYWxPcGVyYXRpb25dO1xuXHR9XG5cdG9Db25kaXRpb24ub3BlcmF0b3IgPSBzSW50ZXJuYWxPcGVyYXRpb247XG5cdGlmIChzSW50ZXJuYWxPcGVyYXRpb24gIT09IFwiRW1wdHlcIikge1xuXHRcdG9Db25kaXRpb24udmFsdWVzLnB1c2gob1ZhbHVlKTtcblx0XHRpZiAob1ZhbHVlMikge1xuXHRcdFx0b0NvbmRpdGlvbi52YWx1ZXMucHVzaChvVmFsdWUyKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9Db25kaXRpb247XG59XG5cbi8qIE1ldGhvZCB0byBnZXQgdGhlIFJhbmdlIHByb3BlcnR5IGZyb20gdGhlIFNlbGVjdGlvbiBPcHRpb24gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5nZVByb3BlcnR5KHNQcm9wZXJ0eTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHNQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA+IDAgPyBzUHJvcGVydHkuc3BsaXQoXCIvXCIpWzFdIDogc1Byb3BlcnR5O1xufVxuXG5mdW5jdGlvbiBfYnVpbGRDb25kaXRpb25zRnJvbVNlbGVjdGlvblJhbmdlcyhcblx0UmFuZ2VzOiBTZWxlY3Rpb25SYW5nZVR5cGVUeXBlc1tdLFxuXHRvUHJvcGVydHk6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4sXG5cdHNQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0Z2V0Q3VzdG9tQ29uZGl0aW9ucz86IEZ1bmN0aW9uXG4pOiBhbnlbXSB7XG5cdGNvbnN0IGFDb25kaXRpb25zOiBhbnlbXSA9IFtdO1xuXHRSYW5nZXM/LmZvckVhY2goKFJhbmdlOiBhbnkpID0+IHtcblx0XHRjb25zdCBvQ29uZGl0aW9uID0gZ2V0Q3VzdG9tQ29uZGl0aW9ucyA/IGdldEN1c3RvbUNvbmRpdGlvbnMoUmFuZ2UsIG9Qcm9wZXJ0eSwgc1Byb3BlcnR5TmFtZSkgOiBnZXRDb25kaXRpb25zKFJhbmdlLCBvUHJvcGVydHkpO1xuXHRcdGlmIChvQ29uZGl0aW9uKSB7XG5cdFx0XHRhQ29uZGl0aW9ucy5wdXNoKG9Db25kaXRpb24pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhQ29uZGl0aW9ucztcbn1cblxuZnVuY3Rpb24gX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXRQYXRoOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+IHtcblx0Y29uc3QgbGFzdFNsYXNoSW5kZXggPSBwcm9wZXJ0eU5hbWUubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IGxhc3RTbGFzaEluZGV4ID4gLTEgPyBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5TmFtZS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSA6IFwiXCI7XG5cdGNvbnN0IGNvbGxlY3Rpb24gPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9LyR7bmF2aWdhdGlvblBhdGh9YCk7XG5cdHJldHVybiBjb2xsZWN0aW9uPy5bcHJvcGVydHlOYW1lLnJlcGxhY2UobmF2aWdhdGlvblBhdGgsIFwiXCIpXTtcbn1cblxuZnVuY3Rpb24gX2J1aWxkRmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0T3B0aW9uKFxuXHRzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUsXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0Z2V0Q3VzdG9tQ29uZGl0aW9ucz86IEZ1bmN0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3QgcHJvcGVydHlOYW1lOiBhbnkgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLFxuXHRcdGZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fSxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5TmFtZS52YWx1ZSB8fCBwcm9wZXJ0eU5hbWUuJFByb3BlcnR5UGF0aCxcblx0XHRSYW5nZXM6IFNlbGVjdGlvblJhbmdlVHlwZVR5cGVzW10gPSBzZWxlY3RPcHRpb24uUmFuZ2VzO1xuXHRjb25zdCB0YXJnZXRQcm9wZXJ0eSA9IF9nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgsIG1ldGFNb2RlbCwgZW50aXR5U2V0UGF0aCk7XG5cdGlmICh0YXJnZXRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IGNvbmRpdGlvbnM6IGFueVtdID0gX2J1aWxkQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25SYW5nZXMoUmFuZ2VzLCB0YXJnZXRQcm9wZXJ0eSwgcHJvcGVydHlQYXRoLCBnZXRDdXN0b21Db25kaXRpb25zKTtcblx0XHRpZiAoY29uZGl0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGZpbHRlckNvbmRpdGlvbnNbcHJvcGVydHlQYXRoXSA9IChmaWx0ZXJDb25kaXRpb25zW3Byb3BlcnR5UGF0aF0gfHwgW10pLmNvbmNhdChjb25kaXRpb25zKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZpbHRlckNvbmRpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50KFxuXHRzRW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0Z2V0Q3VzdG9tQ29uZGl0aW9ucz86IEZ1bmN0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0bGV0IG9GaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdGlmICghc2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdHJldHVybiBvRmlsdGVyQ29uZGl0aW9ucztcblx0fVxuXHRjb25zdCBhU2VsZWN0T3B0aW9ucyA9IHNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucyxcblx0XHRhUGFyYW1ldGVycyA9IHNlbGVjdGlvblZhcmlhbnQuUGFyYW1ldGVycztcblx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZSxcblx0XHRcdHNQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IHByb3BlcnR5TmFtZS52YWx1ZSB8fCBwcm9wZXJ0eU5hbWUuJFByb3BlcnR5UGF0aDtcblx0XHRpZiAoT2JqZWN0LmtleXMob0ZpbHRlckNvbmRpdGlvbnMpLmluY2x1ZGVzKHNQcm9wZXJ0eU5hbWUpKSB7XG5cdFx0XHRvRmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXSA9IG9GaWx0ZXJDb25kaXRpb25zW3NQcm9wZXJ0eU5hbWVdLmNvbmNhdChcblx0XHRcdFx0X2J1aWxkRmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0T3B0aW9uKHNlbGVjdE9wdGlvbiwgb01ldGFNb2RlbCwgc0VudGl0eVNldFBhdGgsIGdldEN1c3RvbUNvbmRpdGlvbnMpW3NQcm9wZXJ0eU5hbWVdXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvRmlsdGVyQ29uZGl0aW9ucyA9IHtcblx0XHRcdFx0Li4ub0ZpbHRlckNvbmRpdGlvbnMsXG5cdFx0XHRcdC4uLl9idWlsZEZpbHRlcnNDb25kaXRpb25zRnJvbVNlbGVjdE9wdGlvbihzZWxlY3RPcHRpb24sIG9NZXRhTW9kZWwsIHNFbnRpdHlTZXRQYXRoLCBnZXRDdXN0b21Db25kaXRpb25zKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0pO1xuXHRhUGFyYW1ldGVycz8uZm9yRWFjaCgocGFyYW1ldGVyOiBhbnkpID0+IHtcblx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcGFyYW1ldGVyLlByb3BlcnR5TmFtZS52YWx1ZSB8fCBwYXJhbWV0ZXIuUHJvcGVydHlOYW1lLiRQcm9wZXJ0eVBhdGg7XG5cdFx0Y29uc3Qgb0NvbmRpdGlvbjogYW55ID0gZ2V0Q3VzdG9tQ29uZGl0aW9uc1xuXHRcdFx0PyB7IG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogcGFyYW1ldGVyLlByb3BlcnR5VmFsdWUsIHZhbHVlMjogbnVsbCwgcGF0aDogc1Byb3BlcnR5UGF0aCwgaXNQYXJhbWV0ZXI6IHRydWUgfVxuXHRcdFx0OiB7XG5cdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIixcblx0XHRcdFx0XHR2YWx1ZXM6IFtwYXJhbWV0ZXIuUHJvcGVydHlWYWx1ZV0sXG5cdFx0XHRcdFx0aXNFbXB0eTogbnVsbCxcblx0XHRcdFx0XHR2YWxpZGF0ZWQ6IENvbmRpdGlvblZhbGlkYXRlZC5WYWxpZGF0ZWQsXG5cdFx0XHRcdFx0aXNQYXJhbWV0ZXI6IHRydWVcblx0XHRcdCAgfTtcblx0XHRvRmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlQYXRoXSA9IFtvQ29uZGl0aW9uXTtcblx0fSk7XG5cblx0cmV0dXJuIG9GaWx0ZXJDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZGl0aW9ucyhSYW5nZTogYW55LCBvVmFsaWRQcm9wZXJ0eTogYW55KTogQ29uZGl0aW9uT2JqZWN0IHwgdW5kZWZpbmVkIHtcblx0bGV0IG9Db25kaXRpb247XG5cdGNvbnN0IHNpZ246IHN0cmluZyB8IHVuZGVmaW5lZCA9IFJhbmdlLlNpZ24gPyBnZXRSYW5nZVByb3BlcnR5KFJhbmdlLlNpZ24pIDogdW5kZWZpbmVkO1xuXHRjb25zdCBzT3B0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBSYW5nZS5PcHRpb24gPyBnZXRSYW5nZVByb3BlcnR5KFJhbmdlLk9wdGlvbikgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WYWx1ZTE6IGFueSA9IGdldFR5cGVDb21wbGlhbnRWYWx1ZShSYW5nZS5Mb3csIG9WYWxpZFByb3BlcnR5LiRUeXBlIHx8IG9WYWxpZFByb3BlcnR5LnR5cGUpO1xuXHRjb25zdCBvVmFsdWUyOiBhbnkgPSBSYW5nZS5IaWdoID8gZ2V0VHlwZUNvbXBsaWFudFZhbHVlKFJhbmdlLkhpZ2gsIG9WYWxpZFByb3BlcnR5LiRUeXBlIHx8IG9WYWxpZFByb3BlcnR5LnR5cGUpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvQ29uZGl0aW9uVmFsdWVzID0gcmVzb2x2ZUNvbmRpdGlvblZhbHVlcyhzT3B0aW9uLCBvVmFsdWUxLCBvVmFsdWUyLCBzaWduKSBhcyBhbnk7XG5cdGlmIChvQ29uZGl0aW9uVmFsdWVzKSB7XG5cdFx0b0NvbmRpdGlvbiA9IENvbmRpdGlvbi5jcmVhdGVDb25kaXRpb24oXG5cdFx0XHRvQ29uZGl0aW9uVmFsdWVzLm9wZXJhdG9yLFxuXHRcdFx0b0NvbmRpdGlvblZhbHVlcy52YWx1ZXMsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdENvbmRpdGlvblZhbGlkYXRlZC5WYWxpZGF0ZWRcblx0XHQpO1xuXHR9XG5cdHJldHVybiBvQ29uZGl0aW9uO1xufVxuXG5jb25zdCBnZXREZWZhdWx0VmFsdWVGaWx0ZXJzID0gZnVuY3Rpb24gKG9Db250ZXh0OiBhbnksIHByb3BlcnRpZXM6IGFueSk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4ge1xuXHRjb25zdCBmaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0UGF0aCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0TW9kZWwoKTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0RmlsdGVyVmFsdWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtlbnRpdHlTZXRQYXRofS8ke2tleX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZWApO1xuXHRcdFx0aWYgKGRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IFByb3BlcnR5TmFtZSA9IGtleTtcblx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1tQcm9wZXJ0eU5hbWVdID0gW1xuXHRcdFx0XHRcdENvbmRpdGlvbi5jcmVhdGVDb25kaXRpb24oXCJFUVwiLCBbZGVmYXVsdEZpbHRlclZhbHVlXSwgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZCkgYXMgRmlsdGVyQ29uZGl0aW9uc1xuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmlsdGVyQ29uZGl0aW9ucztcbn07XG5cbmNvbnN0IGdldERlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzID0gZnVuY3Rpb24gKFxuXHRvQ29udGV4dDogYW55LFxuXHRwcm9wZXJ0aWVzOiBhbnksXG5cdGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBhbnlcbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4ge1xuXHRjb25zdCBmaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuXHRcdFx0Ly8gY3VycmVudGx5IGRlZmF1bHRTZW1hbnRpY0RhdGVzIGNhbiBzdXBwb3J0IG9ubHkgb25lIGVudHJ5LCB3ZSBwaWNrIHRoZSBmaXJzdCBvbmUgZGlyZWN0bHkgdXNpbmcgMCBpbmRleFxuXHRcdFx0aWYgKGRlZmF1bHRTZW1hbnRpY0RhdGVzW2tleV0gJiYgZGVmYXVsdFNlbWFudGljRGF0ZXNba2V5XVswXSkge1xuXHRcdFx0XHRmaWx0ZXJDb25kaXRpb25zW2tleV0gPSBbXG5cdFx0XHRcdFx0Q29uZGl0aW9uLmNyZWF0ZUNvbmRpdGlvbihkZWZhdWx0U2VtYW50aWNEYXRlc1trZXldWzBdLm9wZXJhdG9yLCBbXSwgbnVsbCwgbnVsbCwgbnVsbCkgYXMgRmlsdGVyQ29uZGl0aW9uc1xuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmlsdGVyQ29uZGl0aW9ucztcbn07XG5cbmZ1bmN0aW9uIGdldEVkaXRTdGF0dXNGaWx0ZXIoKTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGNvbnN0IG9maWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdG9maWx0ZXJDb25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXSA9IFtcblx0XHRDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKFwiRFJBRlRfRURJVF9TVEFURVwiLCBbXCJBTExcIl0sIG51bGwsIG51bGwsIENvbmRpdGlvblZhbGlkYXRlZC5WYWxpZGF0ZWQpIGFzIEZpbHRlckNvbmRpdGlvbnNcblx0XTtcblx0cmV0dXJuIG9maWx0ZXJDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyQ29uZGl0aW9ucyhvQ29udGV4dDogYW55LCBmaWx0ZXJDb25kaXRpb25zOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0bGV0IGVkaXRTdGF0ZUZpbHRlcjtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IG9Db250ZXh0LmdldEludGVyZmFjZSgxKS5nZXRQYXRoKCksXG5cdFx0b01ldGFNb2RlbCA9IG9Db250ZXh0LmdldEludGVyZmFjZSgxKS5nZXRNb2RlbCgpLFxuXHRcdGVudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9QGApLFxuXHRcdGVudGl0eVR5cGVQcm9wZXJ0aWVzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH0vYCk7XG5cdGlmIChcblx0XHRlbnRpdHlUeXBlQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXSB8fFxuXHRcdGVudGl0eVR5cGVBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlXCJdXG5cdCkge1xuXHRcdGVkaXRTdGF0ZUZpbHRlciA9IGdldEVkaXRTdGF0dXNGaWx0ZXIoKTtcblx0fVxuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZmlsdGVyQ29uZGl0aW9ucz8uc2VsZWN0aW9uVmFyaWFudDtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmaWx0ZXJDb25kaXRpb25zPy5kZWZhdWx0U2VtYW50aWNEYXRlcyB8fCB7fTtcblx0Y29uc3QgZGVmYXVsdEZpbHRlcnMgPSBnZXREZWZhdWx0VmFsdWVGaWx0ZXJzKG9Db250ZXh0LCBlbnRpdHlUeXBlUHJvcGVydGllcyk7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzID0gZ2V0RGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMob0NvbnRleHQsIGVudGl0eVR5cGVQcm9wZXJ0aWVzLCBkZWZhdWx0U2VtYW50aWNEYXRlcyk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IGdldEZpbHRlcnNDb25kaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQoZW50aXR5U2V0UGF0aCwgb01ldGFNb2RlbCwgc2VsZWN0aW9uVmFyaWFudCk7XG5cdH0gZWxzZSBpZiAoZGVmYXVsdEZpbHRlcnMpIHtcblx0XHRmaWx0ZXJDb25kaXRpb25zID0gZGVmYXVsdEZpbHRlcnM7XG5cdH1cblx0aWYgKGRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzKSB7XG5cdFx0Ly8gb25seSBmb3Igc2VtYW50aWMgZGF0ZTpcblx0XHQvLyAxLiB2YWx1ZSBmcm9tIG1hbmlmZXN0IGdldCBtZXJnZWQgd2l0aCBTVlxuXHRcdC8vIDIuIG1hbmlmZXN0IHZhbHVlIGlzIGdpdmVuIHByZWZlcmVuY2Ugd2hlbiB0aGVyZSBpcyBzYW1lIHNlbWFudGljIGRhdGUgcHJvcGVydHkgaW4gU1YgYW5kIG1hbmlmZXN0XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IHsgLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMgfTtcblx0fVxuXHRpZiAoZWRpdFN0YXRlRmlsdGVyKSB7XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IHsgLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZWRpdFN0YXRlRmlsdGVyIH07XG5cdH1cblx0cmV0dXJuIChPYmplY3Qua2V5cyhmaWx0ZXJDb25kaXRpb25zKS5sZW5ndGggPiAwID8gSlNPTi5zdHJpbmdpZnkoZmlsdGVyQ29uZGl0aW9ucykucmVwbGFjZSgvKFtcXHtcXH1dKS9nLCBcIlxcXFwkMVwiKSA6IHVuZGVmaW5lZCkgYXMgYW55O1xufVxuXG5nZXRGaWx0ZXJDb25kaXRpb25zLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuIl19