@sapui5/sap.fe.macros 1.141.1 → 1.142.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/Field.js +30 -13
  14. package/src/sap/fe/macros/Field.ts +60 -30
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +6 -3
  17. package/src/sap/fe/macros/KPITag.js +1 -1
  18. package/src/sap/fe/macros/KPITag.tsx +3 -1
  19. package/src/sap/fe/macros/MacroAPI.js +3 -2
  20. package/src/sap/fe/macros/MacroAPI.ts +2 -2
  21. package/src/sap/fe/macros/MessageButton.js +3 -2
  22. package/src/sap/fe/macros/MessageButton.tsx +5 -2
  23. package/src/sap/fe/macros/MicroChart.js +10 -6
  24. package/src/sap/fe/macros/MicroChart.tsx +8 -2
  25. package/src/sap/fe/macros/MultiValueField.js +22 -36
  26. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  29. package/src/sap/fe/macros/Status.js +35 -8
  30. package/src/sap/fe/macros/Status.tsx +23 -2
  31. package/src/sap/fe/macros/ValueHelp.js +5 -2
  32. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  33. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  34. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  35. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  36. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  37. package/src/sap/fe/macros/chart/Action.js +25 -2
  38. package/src/sap/fe/macros/chart/Action.ts +13 -0
  39. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  40. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  41. package/src/sap/fe/macros/chart/ChartDelegate.js +8 -8
  42. package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -12
  43. package/src/sap/fe/macros/chart/MdcChartTemplate.js +54 -11
  44. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +70 -11
  45. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  46. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  47. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  48. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  49. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  50. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +37 -9
  54. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +45 -6
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  57. package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
  58. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  59. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  60. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  64. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  65. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  66. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  67. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  68. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  69. package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
  70. package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
  71. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  72. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  73. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  74. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  75. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
  76. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
  77. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
  78. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  79. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  80. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  81. package/src/sap/fe/macros/form/Form.block.js +27 -2
  82. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  83. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  84. package/src/sap/fe/macros/form/FormContainer.block.js +96 -65
  85. package/src/sap/fe/macros/form/FormContainer.block.ts +104 -65
  86. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  87. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  88. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  89. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  90. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  91. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  92. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  93. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  94. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  95. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  96. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  97. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  98. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  99. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  100. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  101. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  102. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  103. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  104. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  105. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  106. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  107. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  108. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  109. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  110. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  111. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  112. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  113. package/src/sap/fe/macros/library.js +3 -3
  114. package/src/sap/fe/macros/library.ts +2 -0
  115. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  116. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  117. package/src/sap/fe/macros/messagebundle.properties +7 -5
  118. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  119. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  120. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  121. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  122. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  123. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  124. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  125. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  126. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  127. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  128. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  129. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
  130. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  131. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  132. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  133. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  134. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  135. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  136. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  137. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  138. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  140. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  143. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  144. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  145. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  146. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  147. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  148. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  149. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  150. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  155. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  158. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  159. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  160. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  162. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  164. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  167. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  168. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  169. package/src/sap/fe/macros/table/Action.js +15 -2
  170. package/src/sap/fe/macros/table/Action.ts +11 -1
  171. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  172. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  173. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  174. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  175. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  176. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  177. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  178. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  179. package/src/sap/fe/macros/table/MdcTableTemplate.js +91 -10
  180. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +131 -10
  181. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  182. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  183. package/src/sap/fe/macros/table/Table.block.js +70 -29
  184. package/src/sap/fe/macros/table/Table.block.tsx +65 -12
  185. package/src/sap/fe/macros/table/TableAPI.js +169 -131
  186. package/src/sap/fe/macros/table/TableAPI.ts +58 -28
  187. package/src/sap/fe/macros/table/TableDefinition.js +19 -2
  188. package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
  189. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +4 -3
  190. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +8 -9
  191. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  192. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  193. package/src/sap/fe/macros/table/TableRuntime.js +2 -2
  194. package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
  195. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  196. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  197. package/src/sap/fe/macros/table/delegates/TableDelegate.js +67 -26
  198. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +108 -118
  199. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
  200. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
  201. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  202. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  203. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
  204. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
  205. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  206. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  207. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  208. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  209. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  210. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  211. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  212. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  213. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  214. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  215. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  216. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  217. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -374,7 +374,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
374
374
  descriptionPath: getAssociatedTextPropertyPath(propertyDataModel.targetObject),
375
375
  textBinding: {
376
376
  expression: getTextBinding(propertyDataModel, {
377
- displayMode: getDisplayMode(targetProperty, propertyDataModel)
377
+ displayMode: getDisplayMode(targetProperty, propertyDataModel.targetEntityType)
378
378
  }),
379
379
  type: targetProperty.type === "Edm.DateTimeOffset" || targetProperty?.annotations?.Common?.IsTimezone ? "anyText" : "any"
380
380
  },
@@ -703,4 +703,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/base/BindingTo
703
703
  _exports = MassEditDialogHelper;
704
704
  return _exports;
705
705
  }, false);
706
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdERpYWxvZ0hlbHBlciIsInByb3BzIiwibWF4QW5hbHl6ZWRSb3dzIiwiYW5hbHl6ZWRDb250ZXh0cyIsImZpZWxkUHJvcGVydGllcyIsImVudGl0eVR5cGVQYXRoIiwidGFibGUiLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnRyb2wiLCJtYXNzRWRpdCIsIm9uQ29udGV4dE1lbnUiLCJvbkRpYWxvZ0Nsb3NlIiwib25DbG9zZSIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJjb250ZXh0cyIsImZldGNoQ29udGV4dHNGb3JFZGl0IiwiZGVncmFkZWRNb2RlIiwibGVuZ3RoIiwic2xpY2UiLCJpc0FkYXB0YXRpb24iLCJnZXRBcHBDb21wb25lbnQiLCJpc0FkYXB0YXRpb25Nb2RlIiwiaGVhZGVySW5mbyIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckluZm8iLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsIm9wZW4iLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImludGVybmFsTW9kZWxQcm9wZXJ0eSIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRQcm9wZXJ0eSIsImdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyIsImdldEZpZWxkc0luZm8iLCJzb21lIiwiZmllbGQiLCJ2aXNpYmxlIiwibm9GaWVsZEluZm9ybWF0aW9uIiwiY29uZmlybVNlbGVjdGlvbiIsInJ1bkFzT3duZXIiLCJtYXNzRWRpdERpYWxvZyIsIk1hc3NFZGl0RGlhbG9nIiwiZGlhbG9nIiwiY3JlYXRlIiwiYXR0YWNoQmVmb3JlQ2xvc2UiLCJyZXF1aXJlZERhdGFQcm9taXNlIiwiZ2V0UmVxdWlyZWREYXRhUHJvbWlzZSIsImdldERhdGFBZnRlck9wZW5pbmdEaWFsb2ciLCJyZXNvbHZlIiwiZXJyb3IiLCJMb2ciLCJyZWplY3QiLCJ2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0IiwidmlzaWJsZUZpZWxkcyIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwibWVzc2FnZSIsIm1lc3NhZ2VEZXRhaWwiLCJnZXRUZXh0IiwiZ2V0UmVzb3VyY2VUZXh0IiwiVHlwZU5hbWUiLCJyZWR1Y2UiLCJmaWVsZHMiLCJmaWVsZFByb3BlcnR5IiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUluZm8iLCJyZWxhdGl2ZVBhdGgiLCJwdXNoIiwibGFiZWwiLCJqb2luIiwiTWVzc2FnZUJveCIsImluZm9ybWF0aW9uIiwiZGV0YWlscyIsInJlc291cmNlTW9kZWwiLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImNvcmVSZXNvdXJjZUJ1bmRsZSIsInVwZGF0YWJsZUNvbnRleHRzIiwiUHJvbWlzZSIsInRhYmxlQVBJIiwiZWRpdEJ1dHRvbiIsImNhbmNlbEJ1dHRvbiIsInR5cGVOYW1lIiwidHlwZU5hbWVQbHVyYWwiLCJUeXBlTmFtZVBsdXJhbCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImRhdGEiLCJyZWFkT25seSIsImdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSIsIndhcm5pbmciLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsInNlbGVjdGlvbiIsInVuZGVmaW5lZCIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0RW50aXR5RmllbGRzSW5mbyIsImNvbHVtbnNEYXRhIiwiY29sdW1ucyIsInByb3BlcnRpZXNLZXlzIiwiU2V0IiwiY29sdW1uIiwidHlwZSIsIm5hbWUiLCJ0cmFuc2Zvcm1QYXRoc1RvSW5mbyIsImdldENvbHVtbnMiLCJtYXAiLCJnZXRQcm9wZXJ0eUtleSIsImlnbm9yZWRGaWVsZHMiLCJpZ25vcmVkRmllbGQiLCJkZWxldGUiLCJwcm9wZXJ0aWVzUGF0aHMiLCJBcnJheSIsImZyb20iLCJjb2x1bW5JbmZvcyIsInByb3BlcnR5UGF0aCIsImNvbHVtbkluZm8iLCJnZXRGaWVsZEluZm8iLCJlbnRpdHlQYXRoIiwiZ2V0TWV0YVBhdGgiLCJlbnRpdHlTZXREYXRhTW9kZWwiLCJyZWxhdGVkQ29sdW1uSW5mbyIsImZpbmQiLCJmaWVsZEluZm8iLCJhbm5vdGF0aW9uUGF0aCIsInByb3BlcnR5RGF0YU1vZGVsIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJjb252ZXJ0ZWRBbm5vdGF0aW9uIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRQcm9wZXJ0eSIsImdldENvbXBsaWFudFByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImtleSIsInRhcmdldE9iamVjdCIsImlzUHJvcGVydHkiLCJJc0ltYWdlVVJMIiwiaXNEYXRhRmllbGRUeXBlcyIsImhhc093blByb3BlcnR5IiwiVmFsdWUiLCIkdGFyZ2V0IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiaGFzVmFsdWVIZWxwIiwiQ29tbW9uIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiaXNIaWRkZW5Gb3JDb250ZXh0cyIsImV4cEJpbmRpbmciLCJhbnlPYmplY3QiLCJfanN4IiwiQW55IiwiYW55Qm9vbGVhbiIsInNldE1vZGVsIiwiaXNIaWRkZW4iLCJjb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nIiwiZ2V0RXh0ZXJuYWxWYWx1ZSIsImRlc3Ryb3kiLCJ1cGRhdGFibGVDb250ZXh0UHJvcGVydHkiLCJnZXRGaWVsZFByb3BlcnRpZXMiLCJkZWVwQ2xvbmUiLCJmaWVsZHNJbmZvIiwiZGF0YVByb3BlcnR5UGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJ1bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoIiwiaW5wdXRUeXBlIiwiZ2V0SW5wdXRUeXBlIiwiZ2V0UmVsYXRpdmVQYXRocyIsImZpZWxkRGF0YSIsInZpc2liaWxpdHlCaW5kaW5ncyIsImlzVmlzaWJsZSIsImVkaXRNb2RlIiwiZ2V0RWRpdE1vZGUiLCJjb25zdGFudCIsIkxhYmVsIiwiaXNGaWVsZFJlcXVpcmVkIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwiZGVzY3JpcHRpb25QYXRoIiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJ0ZXh0QmluZGluZyIsImV4cHJlc3Npb24iLCJnZXRUZXh0QmluZGluZyIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJJc1RpbWV6b25lIiwicmVhZE9ubHlFeHByZXNzaW9uIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJjbGVhcmFibGUiLCJpc1Byb3BlcnR5Q2xlYXJhYmxlIiwiZW1wdHlWYWx1ZSIsImdldEVtcHR5VmFsdWVGb3JQcm9wZXJ0eSIsInNlbGVjdEl0ZW1zIiwiZ2V0RGF0YUZvck9wZW5pbmdEaWFsb2ciLCJhbGwiLCJpc0ZpZWxkVmlzaWJsZSIsInJ1bnRpbWVTZWxlY3Rpb24iLCJnZXRSdW50aW1lU2VsZWN0aW9uIiwiZ2V0RGVmYXVsdFNlbGVjdE9wdGlvbnMiLCJnZW5lcmF0ZUZpZWxkc1Byb3BlcnRpZXMiLCJnZW5lcmF0ZUVudGl0eUZpZWxkc1Byb3BlcnRpZXMiLCJtaXNzaW5nQ29udGV4dHMiLCJiaW5kaW5nc1RvRmV0Y2giLCJjb25jYXQiLCJwYXRoSW5Nb2RlbCIsImdldE1pc3NpbmdEYXRhIiwiYmluZGluZ3NUb1Jlc29sdmUiLCJiaW5kaW5ncyIsImdldFZpZXdEYXRhIiwiY29udmVydGVyVHlwZSIsImRpc3BsYXllZFByb3BlcnRpZXMiLCJldmVyeSIsInByb21pc2VzIiwiY29udHJvbHMiLCJtb2RlbCIsImJpbmRpbmciLCJmaWx0ZXIiLCJzdGFydHNXaXRoIiwicGFyYW1ldGVycyIsImJpbmRpbmdUeXBlIiwiY29udHJvbEJpbmRpbmciLCJzZXRCaW5kaW5nTW9kZSIsIkJpbmRpbmdNb2RlIiwiT25lVGltZSIsImlzQSIsImdldEJpbmRpbmdzIiwibmVzdGVkQmluZGluZyIsInJlcXVlc3RWYWx1ZSIsInByb21pc2UiLCJwcm9wZXJ0eSIsIm51bGxhYmxlIiwiYW55IiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsInZhbHVlIiwiZ2V0QmluZGluZ0luZm8iLCJnZXRUeXBlIiwicGFyc2VWYWx1ZSIsImRpc3RpbmN0TWFwIiwic2VsZWN0T3B0aW9ucyIsImFueVRleHQiLCJzZWxlY3RlZENvbnRleHQiLCJwcm9wZXJ0eVRleHQiLCJoYXMiLCJhZGQiLCJ0ZXh0IiwidW5pdE9yQ3VycmVuY3lWYWx1ZSIsImdldE9iamVjdCIsInByb3BlcnR5VmFsdWUiLCJrZWVwRW50cnkiLCJTcGVjaWZpY1NlbGVjdEtleXMiLCJLZWVwS2V5IiwiZGVmYXVsdE9wdGlvbnMiLCJSZXBsYWNlS2V5IiwiQ2xlYXJGaWVsZFZhbHVlS2V5IiwiZ2V0RmllbGRFZGl0YWJsZSIsIkZpZWxkRWRpdE1vZGUiLCJFZGl0YWJsZSIsIk9iamVjdCIsImtleXMiLCJhbnlDb250cm9sIiwiZGF0YUZpZWxkQ29udmVydGVkIiwiZGF0YU1vZGVsUGF0aCIsImVkaXRTdHlsZVByb3BlcnRpZXMiLCJzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzIiwiZWRpdFN0eWxlIiwiaXNTdGF0aWNFZGl0TW9kZSIsImlzRWRpdGFibGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1hc3NFZGl0RGlhbG9nSGVscGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5LCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIERhdGFGaWVsZEZvckFjdGlvbiwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiwgSGVhZGVySW5mbyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQW55IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9BbnlcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkVHlwZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgTWFzc0VkaXRUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRhYmxlQ29sdW1uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsIGdldFJlbGF0aXZlUGF0aHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBpc1JlYWRPbmx5RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgsXG5cdGhhc1ZhbHVlSGVscFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0RWRpdE1vZGUsIGdldFJlcXVpcmVkRXhwcmVzc2lvbiwgaXNNdWx0aVZhbHVlRmllbGQsIGlzVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0VGV4dEJpbmRpbmcsIHNldEVkaXRTdHlsZVByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgQmluZGluZ01vZGUgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nTW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIFByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL1Byb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IE1hc3NFZGl0RGlhbG9nIGZyb20gXCIuL01hc3NFZGl0RGlhbG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdJbmZvLCBNYXNzRmllbGRQcm9wZXJ0aWVzLCBTZWxlY3RJbmZvIH0gZnJvbSBcIi4vbGlicmFyeVwiO1xuaW1wb3J0IHsgU3BlY2lmaWNTZWxlY3RLZXlzIH0gZnJvbSBcIi4vbGlicmFyeVwiO1xuXG50eXBlIERhdGFGaWVsZFR5cGVzID0gRGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbjtcbnR5cGUgRmllbGRJbmZvID0ge1xuXHRrZXk6IHN0cmluZztcblx0cHJvcGVydHlEYXRhTW9kZWw6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+O1xuXHR0YXJnZXRQcm9wZXJ0eTogUHJvcGVydHk7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGNvbnZlcnRlZEFubm90YXRpb246IERhdGFGaWVsZFR5cGVzO1xufTtcblxudHlwZSBCaW5kaW5nVG9GZXRjaCA9IEJpbmRpbmdJbmZvICYgeyBjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W10gfTtcblxuLyoqXG4gKiBEaXNwbGF5IHRoZSBtYXNzRWRpdCBkaWFsb2cuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hc3NFZGl0RGlhbG9nSGVscGVyIHtcblx0cHJpdmF0ZSByZWFkb25seSB0YWJsZTogVGFibGU7XG5cblx0cHJpdmF0ZSByZWFkb25seSBvbkNvbnRleHRNZW51OiBib29sZWFuO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgb25EaWFsb2dDbG9zZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgdmlldzogRkVWaWV3O1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWF4QW5hbHl6ZWRSb3dzID0gMzA7XG5cblx0cHJpdmF0ZSBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFuYWx5emVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGRlZ3JhZGVkTW9kZTogYm9vbGVhbjtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG1hbmlmZXN0U2V0dGluZ3M6IE1hc3NFZGl0VGFibGVDb25maWd1cmF0aW9uO1xuXG5cdHByaXZhdGUgZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzW10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGlzQWRhcHRhdGlvbjogYm9vbGVhbjtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGhlYWRlckluZm86IEhlYWRlckluZm8gfCB1bmRlZmluZWQ7XG5cblx0bWFzc0VkaXREaWFsb2c6IE1hc3NFZGl0RGlhbG9nIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiB7IHRhYmxlOiBUYWJsZTsgb25Db250ZXh0TWVudTogYm9vbGVhbjsgb25DbG9zZT86ICgpID0+IHZvaWQgfSkge1xuXHRcdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gKHByb3BzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLmNvbGxlY3Rpb24sXG5cdFx0XHRtZXRhTW9kZWwgPSAocHJvcHMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdHRoaXMudGFibGUgPSBwcm9wcy50YWJsZTtcblx0XHR0aGlzLm1hbmlmZXN0U2V0dGluZ3MgPSAodGhpcy50YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5tYXNzRWRpdDtcblx0XHR0aGlzLm9uQ29udGV4dE1lbnUgPSBwcm9wcy5vbkNvbnRleHRNZW51O1xuXHRcdHRoaXMub25EaWFsb2dDbG9zZSA9IHByb3BzLm9uQ2xvc2U7XG5cdFx0dGhpcy52aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzLnRhYmxlKTtcblx0XHR0aGlzLmNvbnRleHRzID0gdGhpcy5mZXRjaENvbnRleHRzRm9yRWRpdCgpO1xuXHRcdHRoaXMuZGVncmFkZWRNb2RlID0gdGhpcy5jb250ZXh0cy5sZW5ndGggPiB0aGlzLm1heEFuYWx5emVkUm93cztcblx0XHR0aGlzLmFuYWx5emVkQ29udGV4dHMgPSB0aGlzLmRlZ3JhZGVkTW9kZSA/IHRoaXMuY29udGV4dHMuc2xpY2UoMCwgdGhpcy5tYXhBbmFseXplZFJvd3MpIDogdGhpcy5jb250ZXh0cztcblx0XHR0aGlzLmlzQWRhcHRhdGlvbiA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLnRhYmxlKS5pc0FkYXB0YXRpb25Nb2RlKCk7XG5cdFx0dGhpcy5oZWFkZXJJbmZvID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVR5cGVQYXRoKSkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uSGVhZGVySW5mbztcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgbWFzcyBlZGl0IGRpYWxvZyBpZiBhbGwgc2VsZWN0ZWQgY29udGV4dHMgYXJlIGVkaXRhYmxlLFxuXHQgKiBvdGhlcndpc2UgYSBtZXNzYWdlIGJveCB0byBjb25maXJtIHRoZSBzZWxlY3Rpb24uXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uIG9wZW4gb2YgdGhlIG1hc3MgZWRpdCBkaWFsb2cuXG5cdCAqL1xuXHRhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLnZpZXcpIGFzIFRlbXBsYXRlQ29tcG9uZW50O1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLnRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdGludGVybmFsTW9kZWxQcm9wZXJ0eSA9ICF0aGlzLm9uQ29udGV4dE1lbnUgPyBcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIixcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGludGVybmFsTW9kZWxQcm9wZXJ0eSkgfHwgMDtcblx0XHRcdHRoaXMuZmllbGRQcm9wZXJ0aWVzID0gYXdhaXQgdGhpcy5nZXRGaWVsZHNQcm9wZXJ0aWVzRnJvbUluZm8odGhpcy5nZXRGaWVsZHNJbmZvKCkpO1xuXHRcdFx0aWYgKCF0aGlzLmlzQWRhcHRhdGlvbikge1xuXHRcdFx0XHQvLyBubyBmaWVsZCB0byBlZGl0XG5cdFx0XHRcdGlmICghdGhpcy5maWVsZFByb3BlcnRpZXMuc29tZSgoZmllbGQpID0+IGZpZWxkLnZpc2libGUpKSB7XG5cdFx0XHRcdFx0dGhpcy5ub0ZpZWxkSW5mb3JtYXRpb24oKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9Tb21lIHJvd3MgYXJlIG5vdCBlZGl0YWJsZSAtPiBkbyB3ZSB3YW50IHRvIGNvbnRpbnVlP1xuXHRcdFx0XHRpZiAodGhpcy5jb250ZXh0cy5sZW5ndGggIT09IHNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdFx0XHR0aGlzLmNvbnRleHRzID0gYXdhaXQgdGhpcy5jb25maXJtU2VsZWN0aW9uKHRoaXMuY29udGV4dHMsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRcdGlmICghdGhpcy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIHRoZSB1c2VyIGRvZXNuJ3Qgd2FudCB0byBjb250aW51ZVxuXHRcdFx0XHRcdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlPy4oKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGF3YWl0IHRlbXBsYXRlQ29tcG9uZW50LnJ1bkFzT3duZXIoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLm1hc3NFZGl0RGlhbG9nID0gbmV3IE1hc3NFZGl0RGlhbG9nKHtcblx0XHRcdFx0XHR0YWJsZTogdGhpcy50YWJsZSxcblx0XHRcdFx0XHRjb250ZXh0czogdGhpcy5jb250ZXh0cyxcblx0XHRcdFx0XHRmaWVsZFByb3BlcnRpZXM6IHRoaXMuZmllbGRQcm9wZXJ0aWVzXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBkaWFsb2cgPSBhd2FpdCB0aGlzLm1hc3NFZGl0RGlhbG9nLmNyZWF0ZSgpO1xuXHRcdFx0XHRkaWFsb2cuYXR0YWNoQmVmb3JlQ2xvc2UoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub25EaWFsb2dDbG9zZT8uKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRkaWFsb2cub3BlbigpO1xuXHRcdFx0XHRjb25zdCByZXF1aXJlZERhdGFQcm9taXNlID0gdGhpcy5tYXNzRWRpdERpYWxvZy5nZXRSZXF1aXJlZERhdGFQcm9taXNlKCk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5nZXREYXRhQWZ0ZXJPcGVuaW5nRGlhbG9nKHRoaXMuZmllbGRQcm9wZXJ0aWVzKTtcblx0XHRcdFx0XHRyZXF1aXJlZERhdGFQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJNYXNzIEVkaXQ6IFNvbWV0aGluZyB3ZW50IHdyb25nIGluIG1hc3MgZWRpdCBkaWFsb2cgdG8gZ2V0IHJlcXVpcmVkIGRhdGEuXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0cmVxdWlyZWREYXRhUHJvbWlzZS5yZWplY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIk1hc3MgRWRpdDogU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gbWFzcyBlZGl0IGRpYWxvZyBjcmVhdGlvbi5cIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIG1lc3NhZ2UgYm94IHRvIG5vdGlmeSBubyBmaWVsZHMgYXJlIGVkaXRhYmxlLlxuXHQgKi9cblx0cHJpdmF0ZSBub0ZpZWxkSW5mb3JtYXRpb24oKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlzaWJsZUZpZWxkc0Zyb21NYW5pZmVzdCA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLm1hc3NFZGl0LnZpc2libGVGaWVsZHM7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRsZXQgbWVzc2FnZSA9IFwiXCIsXG5cdFx0XHRtZXNzYWdlRGV0YWlsO1xuXHRcdGlmICh2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdG1lc3NhZ2UgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfTk9fRURJVEFCTEVfRklFTERTX1dJVEhfTUFOSUZFU1RcIiwgW1xuXHRcdFx0XHR0aGlzLmdldFJlc291cmNlVGV4dCh0aGlzLmhlYWRlckluZm8/LlR5cGVOYW1lKSA/PyByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfRElBTE9HX0RFRkFVTFRfVFlQRU5BTUVcIilcblx0XHRcdF0pO1xuXHRcdFx0bWVzc2FnZURldGFpbCA9IGA8dWw+XG5cdFx0XHQke3RoaXMuZmllbGRQcm9wZXJ0aWVzXG5cdFx0XHRcdC5yZWR1Y2UoKGZpZWxkczogc3RyaW5nW10sIGZpZWxkUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRpZiAodmlzaWJsZUZpZWxkc0Zyb21NYW5pZmVzdC5pbmNsdWRlcyhmaWVsZFByb3BlcnR5LnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGgpKSB7XG5cdFx0XHRcdFx0XHRmaWVsZHMucHVzaChgPGxpPiR7ZmllbGRQcm9wZXJ0eS5sYWJlbH08L2xpPmApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdFx0XHR9LCBbXSlcblx0XHRcdFx0LmpvaW4oXCJcIil9IDwvdWw+YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19FRElUQUJMRV9GSUVMRFNfREVGQVVMVFwiKTtcblx0XHR9XG5cblx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKG1lc3NhZ2UsIHtcblx0XHRcdGRldGFpbHM6IG1lc3NhZ2VEZXRhaWwsXG5cdFx0XHRvbkNsb3NlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMub25EaWFsb2dDbG9zZT8uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdmFsaWRhdGUgdGhlIHNlbGVjdGVkIGNvbnRleHRzLlxuXHQgKiBAcGFyYW0gY29udGV4dHMgVGhlIGNvbnRleHRzIHNldCBhcyB1cGRhdGFibGVcblx0ICogQHBhcmFtIHNlbGVjdGVkQ29udGV4dHMgIFRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgY29udGV4dHNcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdGhlIGNvbnRleHRzIHRvIGJlIGZpbmFsbHkgbWFuYWdlZC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY29uZmlybVNlbGVjdGlvbihjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSwgc2VsZWN0ZWRDb250ZXh0czogbnVtYmVyKTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dFtdPiB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnRhYmxlKTtcblx0XHRjb25zdCBjb3JlUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cblx0XHRjb25zdCB1cGRhdGFibGVDb250ZXh0cyA9IGNvbnRleHRzLmxlbmd0aDtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy50YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Y29uc3QgZWRpdEJ1dHRvbiA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fQlVUVE9OX1RFWFRcIiksXG5cdFx0XHRcdFx0Y2FuY2VsQnV0dG9uID0gY29yZVJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9DQU5DRUxcIiksXG5cdFx0XHRcdFx0bWV0YU1vZGVsID0gKHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHR0eXBlTmFtZSA9XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJlc291cmNlVGV4dCh0aGlzLmhlYWRlckluZm8/LlR5cGVOYW1lKSA/PyByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX01BU1NfRURJVF9ESUFMT0dfREVGQVVMVF9UWVBFTkFNRVwiKSxcblx0XHRcdFx0XHR0eXBlTmFtZVBsdXJhbCA9XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJlc291cmNlVGV4dCh0aGlzLmhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsKSA/P1xuXHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19NQVNTX0VESVRfRElBTE9HX0RFRkFVTFRfVFlQRU5BTUVfUExVUkFMXCIpLFxuXHRcdFx0XHRcdG1lc3NhZ2VEZXRhaWwgPVxuXHRcdFx0XHRcdFx0TW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwsIHRoaXMudGFibGUuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpKSAmJiB0YWJsZUFQSS5yZWFkT25seVxuXHRcdFx0XHRcdFx0XHQ/IHRoaXMuZ2V0TWVzc2FnZURldGFpbEZvck5vbkVkaXRhYmxlKHR5cGVOYW1lLCB0eXBlTmFtZVBsdXJhbClcblx0XHRcdFx0XHRcdFx0OiBcIlwiO1xuXG5cdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhcblx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VcIiwgW1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyAtIHVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRcdHVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0dHlwZU5hbWVQbHVyYWxcblx0XHRcdFx0XHRdKSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRkZXRhaWxzOiBtZXNzYWdlRGV0YWlsLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW2VkaXRCdXR0b24sIGNhbmNlbEJ1dHRvbl0sXG5cdFx0XHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiBlZGl0QnV0dG9uLFxuXHRcdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24gKHNlbGVjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoc2VsZWN0aW9uID09PSBlZGl0QnV0dG9uID8gY29udGV4dHMgOiBbXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdGV4dCBhY2NvcmRpbmcgdG8gYW4gYW5ub3RhdGlvbi5cblx0ICogQHBhcmFtIGFubm90YXRpb24gVGhlIGFubm90YXRpb25cblx0ICogQHJldHVybnMgVGhlIHRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdldFJlc291cmNlVGV4dChhbm5vdGF0aW9uOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWFubm90YXRpb24pIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKFxuXHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFubm90YXRpb24pKSBhcyBzdHJpbmcsXG5cdFx0XHR0aGlzLnZpZXdcblx0XHQpPy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1lc3NhZ2UgZGV0YWlsIG9mIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLlxuXHQgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIHR5cGUgbmFtZSBvZiB0aGUgZW50aXR5IHNldFxuXHQgKiBAcGFyYW0gdHlwZU5hbWVQbHVyYWwgVGhlIHR5cGUgbmFtZSBwbHVyYWwgb2YgdGhlIGVudGl0eSBzZXRcblx0ICogQHJldHVybnMgVGhlIHRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSh0eXBlTmFtZTogc3RyaW5nLCB0eXBlTmFtZVBsdXJhbDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdHJldHVybiBgPHA+PHN0cm9uZz4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX0hFQURFUlwiKX08L3N0cm9uZz48L3A+XFxuXG5cdFx0XHQ8cD4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTlwiLCBbdHlwZU5hbWVQbHVyYWxdKX08L3A+XFxuXG5cdFx0XHQ8dWw+XG5cdFx0XHRcdDxsaT4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTl9EUkFGVFwiLCBbdHlwZU5hbWVdKX08L2xpPlxuXHRcdFx0XHQ8bGk+JHtyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9NRVNTQUdFX0RFVEFJTF9SRUFTT05fTk9OX0VESVRBQkxFXCIsIFt0eXBlTmFtZV0pfTwvbGk+XG5cdFx0XHQ8L3VsPmA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW50aXR5IHdoaWNoIGlzIGNvbXBsaWFudCBmb3IgYSBNYXNzIEVkaXQuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHRoZSBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cblx0cHJpdmF0ZSBnZXRFbnRpdHlGaWVsZHNJbmZvKCk6IEZpZWxkSW5mb1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29sdW1uc0RhdGEgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXG5cdFx0Y29uc3QgcHJvcGVydGllc0tleXMgPSBuZXcgU2V0KFxuXHRcdFx0Y29sdW1uc0RhdGEucmVkdWNlKChmaWVsZHM6IHN0cmluZ1tdLCBjb2x1bW4pID0+IHtcblx0XHRcdFx0aWYgKGNvbHVtbi50eXBlID09PSBcIkFubm90YXRpb25cIikge1xuXHRcdFx0XHRcdGZpZWxkcy5wdXNoKGNvbHVtbi5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdFx0fSwgW10pXG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1QYXRoc1RvSW5mbyhwcm9wZXJ0aWVzS2V5cyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvcGVydGllcyBvZiB0aGUgdGFibGUgd2hpY2ggYXJlIGNvbXBsaWFudCBmb3IgYSBNYXNzIEVkaXQuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHRoZSBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRzSW5mbygpOiBGaWVsZEluZm9bXSB7XG5cdFx0Y29uc3QgcHJvcGVydGllc0tleXMgPVxuXHRcdFx0dGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoID4gMFxuXHRcdFx0XHQ/IG5ldyBTZXQodGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMpXG5cdFx0XHRcdDogbmV3IFNldCh0aGlzLnRhYmxlLmdldENvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpKTtcblxuXHRcdGlmICh0aGlzLm1hbmlmZXN0U2V0dGluZ3MuaWdub3JlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGlnbm9yZWRGaWVsZCBvZiB0aGlzLm1hbmlmZXN0U2V0dGluZ3MuaWdub3JlZEZpZWxkcykge1xuXHRcdFx0XHRwcm9wZXJ0aWVzS2V5cy5kZWxldGUoaWdub3JlZEZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNmb3JtUGF0aHNUb0luZm8ocHJvcGVydGllc0tleXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybXMgYSBzZXQgb2YgcHJvcGVydHkgcGF0aHMgdG8gYW4gYXJyYXkgb2YgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzUGF0aHMgVGhlIHNldCBvZiBwcm9wZXJ0eSBwYXRoc1xuXHQgKiBAcmV0dXJucyBBcnJheSBvZiB0aGUgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIHRyYW5zZm9ybVBhdGhzVG9JbmZvKHByb3BlcnRpZXNQYXRoczogU2V0PHN0cmluZz4pOiBGaWVsZEluZm9bXSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllc1BhdGhzKS5yZWR1Y2UoKGNvbHVtbkluZm9zOiBGaWVsZEluZm9bXSwgcHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRGaWVsZEluZm8ocHJvcGVydHlQYXRoKTtcblx0XHRcdGlmIChjb2x1bW5JbmZvKSB7XG5cdFx0XHRcdGNvbHVtbkluZm9zLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29sdW1uSW5mb3M7XG5cdFx0fSwgW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aFxuXHQgKiBAcmV0dXJucyBGaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRJbmZvKHByb3BlcnR5UGF0aDogc3RyaW5nKTogRmllbGRJbmZvIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb2x1bW5zRGF0YSA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0aGlzLnRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0aGlzLnRhYmxlLmRhdGEoXCJtZXRhUGF0aFwiKSk7XG5cdFx0Y29uc3QgZW50aXR5U2V0RGF0YU1vZGVsID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpKTtcblx0XHRjb25zdCByZWxhdGVkQ29sdW1uSW5mbyA9IGNvbHVtbnNEYXRhLmZpbmQoKGZpZWxkSW5mbykgPT4gZmllbGRJbmZvLm5hbWUgPT09IHByb3BlcnR5UGF0aCAmJiBmaWVsZEluZm8udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCIpO1xuXHRcdGlmIChyZWxhdGVkQ29sdW1uSW5mbykge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSAocmVsYXRlZENvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdGlmIChhbm5vdGF0aW9uUGF0aCAmJiBwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWwgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZW50aXR5U2V0RGF0YU1vZGVsLCBwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZWRBbm5vdGF0aW9uID0gY29udmVydE1ldGFNb2RlbENvbnRleHQobWV0YU1vZGVsLmdldENvbnRleHQoYW5ub3RhdGlvblBhdGgpKSBhc1xuXHRcdFx0XHRcdHwgRGF0YUZpZWxkXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBY3Rpb247XG5cdFx0XHRcdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gdGhpcy5nZXRDb21wbGlhbnRQcm9wZXJ0eShwcm9wZXJ0eURhdGFNb2RlbCwgY29udmVydGVkQW5ub3RhdGlvbik7XG5cdFx0XHRcdGlmICh0YXJnZXRQcm9wZXJ0eSAmJiBlbnRpdHlTZXREYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmluY2x1ZGVzKHRhcmdldFByb3BlcnR5KSlcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0a2V5OiByZWxhdGVkQ29sdW1uSW5mby5rZXksXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eURhdGFNb2RlbCxcblx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0bGFiZWw6IHJlbGF0ZWRDb2x1bW5JbmZvLmxhYmVsID8/IHJlbGF0ZWRDb2x1bW5JbmZvLmtleSxcblx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb25cblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgb24gdGhlIERpYWxvZy5cblx0ICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBjb2x1bW5cblx0ICogQHBhcmFtIGFubm90YXRpb24gIFRoZSBjb252ZXJ0ZWQgYW5ub3RhdGlvbiBvZiB0aGUgY29sdW1uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBpZiBpdCBpcyBjb21wbGlhbnQsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgZ2V0Q29tcGxpYW50UHJvcGVydHkocHJvcGVydHlEYXRhTW9kZWw6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBhbm5vdGF0aW9uOiBEYXRhRmllbGRUeXBlcyk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSBwcm9wZXJ0eURhdGFNb2RlbC50YXJnZXRPYmplY3Q7XG5cdFx0bGV0IHRhcmdldFByb3BlcnR5OiBQcm9wZXJ0eTtcblx0XHRpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHR0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldE9iamVjdDtcblx0XHRcdGlmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnMuVUk/LklzSW1hZ2VVUkwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhhbm5vdGF0aW9uKSAmJiAhYW5ub3RhdGlvbi5oYXNPd25Qcm9wZXJ0eShcIkFjdGlvblwiKSkge1xuXHRcdFx0dGFyZ2V0UHJvcGVydHkgPSBhbm5vdGF0aW9uLlZhbHVlLiR0YXJnZXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgZmllbGQgaXMgY29tcGxpYW50IGZvciB0aGUgTWFzc0VkaXRcblx0XHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHRhcmdldFByb3BlcnR5KTtcblx0XHRpZiAoXG5cdFx0XHRpc011bHRpVmFsdWVGaWVsZChwcm9wZXJ0eURhdGFNb2RlbCkgfHxcblx0XHRcdChoYXNWYWx1ZUhlbHAodGFyZ2V0UHJvcGVydHkpICYmIHRhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycykgfHwgLy8gY29udGV4dCBkZXBlbmRlbnQgVkggaXMgbm90IHN1cHBvcnRlZCBmb3IgTWFzcyBFZGl0LlxuXHRcdFx0KHVuaXRQcm9wZXJ0eSAmJiBoYXNWYWx1ZUhlbHAodW5pdFByb3BlcnR5KSAmJiB1bml0UHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0UHJvcGVydHk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBpcyBoaWRkZW4gZm9yIHRoZSBwcm92aWRlZCBjb250ZXh0cy5cblx0ICogQHBhcmFtIGV4cEJpbmRpbmcgVGhlIGV4cHJlc3Npb24gYmluZGluZyBvZiB0aGUgcHJvcGVydHkuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGlzIGhpZGRlbiBmb3IgYWxsIGNvbnRleHRzLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgaXNIaWRkZW5Gb3JDb250ZXh0cyhleHBCaW5kaW5nOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChleHBCaW5kaW5nID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoZXhwQmluZGluZyA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYW55T2JqZWN0ID0gPEFueSBhbnlCb29sZWFuPXtleHBCaW5kaW5nfSAvPjtcblx0XHRhbnlPYmplY3Quc2V0TW9kZWwodGhpcy5hbmFseXplZENvbnRleHRzWzBdLmdldE1vZGVsKCkpO1xuXHRcdGNvbnN0IGlzSGlkZGVuID0gIXRoaXMuYW5hbHl6ZWRDb250ZXh0cy5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRyZXR1cm4gKGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55Qm9vbGVhblwiKSBhcyBQcm9wZXJ0eUJpbmRpbmcpLmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHR9KTtcblx0XHRhbnlPYmplY3QuZGVzdHJveSgpO1xuXHRcdHJldHVybiBpc0hpZGRlbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzZWxlY3RlZCBjb250ZXh0IHNldCBhcyB1cGRhdGFibGUuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0cy5cblx0ICovXG5cdHByaXZhdGUgZmV0Y2hDb250ZXh0c0ZvckVkaXQoKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLnRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIiksXG5cdFx0XHR1cGRhdGFibGVDb250ZXh0UHJvcGVydHkgPSAhdGhpcy5vbkNvbnRleHRNZW51ID8gXCJ1cGRhdGFibGVDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS91cGRhdGFibGVDb250ZXh0c1wiO1xuXHRcdHJldHVybiBpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkodXBkYXRhYmxlQ29udGV4dFByb3BlcnR5KSA/PyBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkLlxuXHQgKi9cblx0Z2V0RmllbGRQcm9wZXJ0aWVzKCk6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSB7XG5cdFx0cmV0dXJuIGRlZXBDbG9uZSh0aGlzLmZpZWxkUHJvcGVydGllcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkcyBmcm9tIGFuIGFycmF5IG9mIGZpZWxkIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gZmllbGRzSW5mbyBUaGUgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRGaWVsZHNQcm9wZXJ0aWVzRnJvbUluZm8oZmllbGRzSW5mbzogRmllbGRJbmZvW10pOiBQcm9taXNlPE1hc3NGaWVsZFByb3BlcnRpZXNbXT4ge1xuXHRcdGNvbnN0IGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGZpZWxkSW5mbyBvZiBmaWVsZHNJbmZvKSB7XG5cdFx0XHRjb25zdCB7IHRhcmdldFByb3BlcnR5LCBwcm9wZXJ0eURhdGFNb2RlbCwgY29udmVydGVkQW5ub3RhdGlvbiB9ID0gZmllbGRJbmZvO1xuXHRcdFx0Y29uc3QgZGF0YVByb3BlcnR5UGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocHJvcGVydHlEYXRhTW9kZWwpO1xuXHRcdFx0aWYgKGRhdGFQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGggPVxuXHRcdFx0XHRcdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpO1xuXHRcdFx0XHRjb25zdCBpbnB1dFR5cGUgPSB0aGlzLmdldElucHV0VHlwZShjb252ZXJ0ZWRBbm5vdGF0aW9uLCBwcm9wZXJ0eURhdGFNb2RlbCk7XG5cdFx0XHRcdGlmIChpbnB1dFR5cGUgJiYgcHJvcGVydHlEYXRhTW9kZWwudGFyZ2V0T2JqZWN0KSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhwcm9wZXJ0eURhdGFNb2RlbCk7XG5cdFx0XHRcdFx0Y29uc3QgZmllbGREYXRhID0ge1xuXHRcdFx0XHRcdFx0dmlzaWJpbGl0eUJpbmRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdGlzVmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlKGNvbnZlcnRlZEFubm90YXRpb24pKSxcblx0XHRcdFx0XHRcdFx0ZWRpdE1vZGU6IGdldEVkaXRNb2RlKFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5RGF0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3RhbnQodHJ1ZSlcblx0XHRcdFx0XHRcdFx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsIC8vYnkgZGVmYXVsdCB0aGUgZmllbGQgaXMgdmlzaWJsZVxuXHRcdFx0XHRcdFx0bGFiZWw6IGZpZWxkSW5mby5sYWJlbCB8fCAodGFyZ2V0UHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbCBhcyBzdHJpbmcgfCB1bmRlZmluZWQpIHx8IGRhdGFQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRpc0ZpZWxkUmVxdWlyZWQ6IGdldFJlcXVpcmVkRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0dGFyZ2V0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlEYXRhTW9kZWxcblx0XHRcdFx0XHRcdCkgYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvblBhdGg6IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHByb3BlcnR5RGF0YU1vZGVsLnRhcmdldE9iamVjdCksXG5cdFx0XHRcdFx0XHR0ZXh0QmluZGluZzoge1xuXHRcdFx0XHRcdFx0XHRleHByZXNzaW9uOiBnZXRUZXh0QmluZGluZyhwcm9wZXJ0eURhdGFNb2RlbCwge1xuXHRcdFx0XHRcdFx0XHRcdGRpc3BsYXlNb2RlOiBnZXREaXNwbGF5TW9kZSh0YXJnZXRQcm9wZXJ0eSwgcHJvcGVydHlEYXRhTW9kZWwpXG5cdFx0XHRcdFx0XHRcdH0pIGFzIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0XHR0eXBlOlxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIgfHwgdGFyZ2V0UHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmVcblx0XHRcdFx0XHRcdFx0XHRcdD8gXCJhbnlUZXh0XCJcblx0XHRcdFx0XHRcdFx0XHRcdDogXCJhbnlcIlxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHJlYWRPbmx5RXhwcmVzc2lvbjogaXNSZWFkT25seUV4cHJlc3Npb24odGFyZ2V0UHJvcGVydHksIHJlbGF0aXZlUGF0aCksXG5cdFx0XHRcdFx0XHRpbnB1dFR5cGUsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm86IHtcblx0XHRcdFx0XHRcdFx0Y2xlYXJhYmxlOiB0aGlzLmlzUHJvcGVydHlDbGVhcmFibGUodGFyZ2V0UHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0XHRlbXB0eVZhbHVlOiB0aGlzLmdldEVtcHR5VmFsdWVGb3JQcm9wZXJ0eSh0YXJnZXRQcm9wZXJ0eSwgZGF0YVByb3BlcnR5UGF0aCksXG5cdFx0XHRcdFx0XHRcdGtleTogZmllbGRJbmZvLmtleSxcblx0XHRcdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiBkYXRhUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0XHR1bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNlbGVjdEl0ZW1zOiBbXSBhcyBTZWxlY3RJbmZvW11cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGZpZWxkUHJvcGVydGllcy5wdXNoKGZpZWxkRGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5nZXREYXRhRm9yT3BlbmluZ0RpYWxvZyhmaWVsZFByb3BlcnRpZXMpO1xuXHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0ZmllbGRQcm9wZXJ0aWVzLm1hcChhc3luYyAoZmllbGREYXRhKSA9PiB7XG5cdFx0XHRcdGZpZWxkRGF0YS52aXNpYmxlID0gdGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoID09PSAwID8gdGhpcy5pc0ZpZWxkVmlzaWJsZShmaWVsZERhdGEpIDogdHJ1ZTtcblx0XHRcdFx0Y29uc3QgcnVudGltZVNlbGVjdGlvbiA9ICF0aGlzLmlzQWRhcHRhdGlvbiA/IGF3YWl0IHRoaXMuZ2V0UnVudGltZVNlbGVjdGlvbihmaWVsZERhdGEpIDogW107XG5cdFx0XHRcdGZpZWxkRGF0YS5zZWxlY3RJdGVtcyA9IFsuLi50aGlzLmdldERlZmF1bHRTZWxlY3RPcHRpb25zKGZpZWxkRGF0YSksIC4uLnJ1bnRpbWVTZWxlY3Rpb25dO1xuXHRcdFx0fSlcblx0XHQpO1xuXHRcdHJldHVybiBmaWVsZFByb3BlcnRpZXM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiBkaWFsb2cgZmllbGRzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcy5cblx0ICovXG5cdGFzeW5jIGdlbmVyYXRlRmllbGRzUHJvcGVydGllcygpOiBQcm9taXNlPE1hc3NGaWVsZFByb3BlcnRpZXNbXT4ge1xuXHRcdHJldHVybiB0aGlzLmdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyh0aGlzLmdldEZpZWxkc0luZm8oKSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgZW50aXR5LlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcy5cblx0ICovXG5cdGFzeW5jIGdlbmVyYXRlRW50aXR5RmllbGRzUHJvcGVydGllcygpOiBQcm9taXNlPE1hc3NGaWVsZFByb3BlcnRpZXNbXT4ge1xuXHRcdHJldHVybiB0aGlzLmdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyh0aGlzLmdldEVudGl0eUZpZWxkc0luZm8oKSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcmVsZXZhbnQgZGF0YSBmcm9tIHRoZSBtb2RlbCBuZWVkZWQgYWZ0ZXIgdGhlIG9wZW5pbmcgb2YgdGhlIGRpYWxvZy5cblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9ubHkgaW4gdGhlIGRlZ3JhZGVkIG1vZGUgc2luY2UgdGhlIGRhdGEgaXMgYWxyZWFkeSBmZXRjaGVkIGluIHRoZSBub3JtYWwgbW9kZS5cblx0ICogdGhlIGRlZ3JhZGVkIG1vZGUgaXMgc2V0IHdoZW4gdGhlIG51bWJlciBvZiBzZWxlY3RlZCBjb250ZXh0cyBpcyBncmVhdGVyIHRoYW4gdGhlIG1heCBhbmFseXplZCByb3dzLlxuXHQgKiBAcGFyYW0gZmllbGRQcm9wZXJ0aWVzIFRoZSBmaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRhdGEgaXMgZmV0Y2hlZC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0RGF0YUFmdGVyT3BlbmluZ0RpYWxvZyhmaWVsZFByb3BlcnRpZXM6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmRlZ3JhZGVkTW9kZSkge1xuXHRcdFx0Y29uc3QgbWlzc2luZ0NvbnRleHRzID0gdGhpcy5jb250ZXh0cy5zbGljZSh0aGlzLm1heEFuYWx5emVkUm93cywgdGhpcy5jb250ZXh0cy5sZW5ndGgpO1xuXHRcdFx0Y29uc3QgYmluZGluZ3NUb0ZldGNoID0gKFtdIGFzIEJpbmRpbmdUb0ZldGNoW10pLmNvbmNhdChcblx0XHRcdFx0Li4uZmllbGRQcm9wZXJ0aWVzLm1hcCgoZmllbGREYXRhKSA9PiBbXG5cdFx0XHRcdFx0eyBleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihmaWVsZERhdGEucmVhZE9ubHlFeHByZXNzaW9uKSwgY29udGV4dHM6IHRoaXMuY29udGV4dHMgfSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihwYXRoSW5Nb2RlbChmaWVsZERhdGEucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aCkpLFxuXHRcdFx0XHRcdFx0Y29udGV4dHM6IG1pc3NpbmdDb250ZXh0cyxcblx0XHRcdFx0XHRcdHR5cGU6IGZpZWxkRGF0YS50ZXh0QmluZGluZy50eXBlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihwYXRoSW5Nb2RlbChmaWVsZERhdGEucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoKSksXG5cdFx0XHRcdFx0XHRjb250ZXh0czogbWlzc2luZ0NvbnRleHRzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdKVxuXHRcdFx0KTtcblx0XHRcdGF3YWl0IHRoaXMuZ2V0TWlzc2luZ0RhdGEoYmluZGluZ3NUb0ZldGNoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcmVsZXZhbnQgZGF0YSBmcm9tIHRoZSBtb2RlbCBuZWVkZWQgdG8gb3BlbiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gZmllbGRQcm9wZXJ0aWVzIFRoZSBmaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRhdGEgaXMgZmV0Y2hlZC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0RGF0YUZvck9wZW5pbmdEaWFsb2coZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBiaW5kaW5nc1RvUmVzb2x2ZSA9IChbXSBhcyBCaW5kaW5nVG9GZXRjaFtdKS5jb25jYXQoXG5cdFx0XHRmaWVsZFByb3BlcnRpZXMucmVkdWNlKChiaW5kaW5nczogQmluZGluZ1RvRmV0Y2hbXSwgZmllbGREYXRhKSA9PiB7XG5cdFx0XHRcdGJpbmRpbmdzID0gYmluZGluZ3MuY29uY2F0KFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRleHByZXNzaW9uOiBmaWVsZERhdGEudGV4dEJpbmRpbmcuZXhwcmVzc2lvbixcblx0XHRcdFx0XHRcdHR5cGU6IGZpZWxkRGF0YS50ZXh0QmluZGluZy50eXBlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihwYXRoSW5Nb2RlbChmaWVsZERhdGEucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aCkpLFxuXHRcdFx0XHRcdFx0dHlwZTogZmllbGREYXRhLnRleHRCaW5kaW5nLnR5cGVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHsgZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24ocGF0aEluTW9kZWwoZmllbGREYXRhLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aCkpIH1cblx0XHRcdFx0XSk7XG5cdFx0XHRcdGlmICghdGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0YmluZGluZ3MgPSBiaW5kaW5ncy5jb25jYXQoW1xuXHRcdFx0XHRcdFx0eyBleHByZXNzaW9uOiBmaWVsZERhdGEudmlzaWJpbGl0eUJpbmRpbmdzLmlzVmlzaWJsZSB9LFxuXHRcdFx0XHRcdFx0eyBleHByZXNzaW9uOiBmaWVsZERhdGEudmlzaWJpbGl0eUJpbmRpbmdzLmVkaXRNb2RlIH1cblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRoaXMuZGVncmFkZWRNb2RlKSB7XG5cdFx0XHRcdFx0YmluZGluZ3MucHVzaCh7IGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKGZpZWxkRGF0YS5yZWFkT25seUV4cHJlc3Npb24pIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBiaW5kaW5ncztcblx0XHRcdH0sIFtdKVxuXHRcdCk7XG5cdFx0YXdhaXQgdGhpcy5nZXRNaXNzaW5nRGF0YShiaW5kaW5nc1RvUmVzb2x2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbWlzc2luZyBkYXRhIGZvciB0aGUgZmllbGRzLlxuXHQgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgY29udHJvbHMgd2l0aCB0aGUgcHJvdmlkZWQgYmluZGluZ3MgdG8gZmV0Y2ggdGhlIG1pc3NpbmcgZGF0YS5cblx0ICogVGhlIG1vZGVsIHJlcXVlc3RzIHRoZSBkYXRhIHRvIHRoZSBiYWNrZW5kIHdoZW4gdGhlIGNvbnRleHRzIGRvZXNuJ3QgY29udGFpbnMgdGhlIHJlbGF0ZWQgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIGJpbmRpbmdzVG9GZXRjaCBUaGUgYmluZGluZyB0byByZXNvbHZlIGFuZCBpdHMgcHJvcGVydHkgcGF0aCByZWZlcmVuY2Vcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGF0YSBpcyBmZXRjaGVkLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRNaXNzaW5nRGF0YShiaW5kaW5nc1RvRmV0Y2g6IEJpbmRpbmdUb0ZldGNoW10pOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuXHRcdGlmICh0aGlzLmlzQWRhcHRhdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy52aWV3LmdldFZpZXdEYXRhKCkuY29udmVydGVyVHlwZSA9PT0gXCJPYmplY3RQYWdlXCIpIHtcblx0XHRcdGNvbnN0IGRpc3BsYXllZFByb3BlcnRpZXMgPSB0aGlzLnRhYmxlLmdldENvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpO1xuXHRcdFx0aWYgKHRoaXMubWFuaWZlc3RTZXR0aW5ncy52aXNpYmxlRmllbGRzLmV2ZXJ5KChmaWVsZCkgPT4gZGlzcGxheWVkUHJvcGVydGllcy5pbmNsdWRlcyhmaWVsZCkpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvbWlzZXMgPSBbXTtcblx0XHRjb25zdCBjb250cm9scyA9IFtdO1xuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5jb250ZXh0c1swXS5nZXRNb2RlbCgpO1xuXHRcdGZvciAoY29uc3QgYmluZGluZyBvZiBiaW5kaW5nc1RvRmV0Y2guZmlsdGVyKChiaW5kaW5nKSA9PiBiaW5kaW5nLmV4cHJlc3Npb24/LnN0YXJ0c1dpdGgoXCJ7XCIpKSkge1xuXHRcdFx0Ly8gQXZvaWQgdG8gZmV0Y2ggY29uc3RhbnQgYmluZGluZ3Ncblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbj47XG5cdFx0XHRjb25zdCBhbmFseXplZENvbnRleHRzID0gYmluZGluZy5jb250ZXh0cyA/PyB0aGlzLmFuYWx5emVkQ29udGV4dHM7XG5cdFx0XHRjb25zdCBiaW5kaW5nVHlwZSA9IGJpbmRpbmcudHlwZSA/PyBcImFueVwiO1xuXHRcdFx0cGFyYW1ldGVyc1tiaW5kaW5nVHlwZV0gPSBiaW5kaW5nLmV4cHJlc3Npb247XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnRleHQgb2YgYW5hbHl6ZWRDb250ZXh0cykge1xuXHRcdFx0XHRjb25zdCBjb250cm9sID0gPEFueSB7Li4ucGFyYW1ldGVyc30gLz47XG5cdFx0XHRcdGNvbnRyb2wuc2V0TW9kZWwobW9kZWwpO1xuXHRcdFx0XHRjb250cm9sLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRjb250cm9scy5wdXNoKGNvbnRyb2wpO1xuXHRcdFx0XHRwcm9taXNlcy5wdXNoKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sQmluZGluZyA9IGNvbnRyb2wuZ2V0QmluZGluZyhiaW5kaW5nVHlwZSkgYXMgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2xCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sQmluZGluZy5zZXRCaW5kaW5nTW9kZShCaW5kaW5nTW9kZS5PbmVUaW1lKTtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sQmluZGluZy5pc0E8Q29tcG9zaXRlQmluZGluZz4oXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiKSkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChjb250cm9sQmluZGluZy5nZXRCaW5kaW5ncygpLm1hcCgobmVzdGVkQmluZGluZykgPT4gbmVzdGVkQmluZGluZy5yZXF1ZXN0VmFsdWU/LigpKSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBjb250cm9sQmluZGluZy5yZXF1ZXN0VmFsdWU/LigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzLm1hcChhc3luYyAocHJvbWlzZSkgPT4gcHJvbWlzZSgpKSk7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG5cdFx0XHRjb250cm9sLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgd2hlbiB0aGUgcmVsYXRlZCBmaWVsZCBpcyBlbXB0eS5cblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHZhbHVlLlxuXHQgKi9cblx0Z2V0RW1wdHlWYWx1ZUZvclByb3BlcnR5KHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcmltaXRpdmVUeXBlIHtcblx0XHRpZiAocHJvcGVydHkubnVsbGFibGUgIT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dHNbMF07XG5cdFx0XHRjb25zdCBhbnlPYmplY3QgPSA8QW55IGFueT17Y29tcGlsZUV4cHJlc3Npb24oZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihwcm9wZXJ0eSwgcGF0aEluTW9kZWwocHJvcGVydHlQYXRoKSkpfSAvPjtcblx0XHRcdGFueU9iamVjdC5zZXRNb2RlbChjb250ZXh0LmdldE1vZGVsKCkpO1xuXHRcdFx0YW55T2JqZWN0LnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBhbnlPYmplY3QuZ2V0QmluZGluZ0luZm8oXCJhbnlcIikuYmluZGluZy5nZXRUeXBlKCkucGFyc2VWYWx1ZShcIlwiLCBcInN0cmluZ1wiKTtcblx0XHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgcHJvcGVydHkgaXMgY2xlYXJhYmxlLlxuXHQgKiBTb21lIE9EYXRhIHR5cGVzIGRvbid0IGFjY2VzcyBlbXB0eSBzdHJpbmcgb3IgMCBhcyBhIHZhbGlkIHZhbHVlIHdoZW4gaXQncyBub3QgbnVsbGFibGUuXG5cdCAqIEZvciBleGFtcGxlLCBFZG0uRGF0ZVRpbWUgZG9lc24ndCBhY2NlcHQgYW4gZW1wdHkgc3RyaW5nIGFzIGEgdmFsaWQgdmFsdWUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHlcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgY2xlYXJhYmxlLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRpc1Byb3BlcnR5Q2xlYXJhYmxlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IFByaW1pdGl2ZVR5cGUge1xuXHRcdGlmIChwcm9wZXJ0eS5udWxsYWJsZSAhPT0gZmFsc2UpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gIVtcIkVkbS5EYXRlVGltZVwiLCBcIkVkbS5EYXRlVGltZU9mZnNldFwiLCBcIkVkbS5UaW1lT2ZEYXlcIiwgXCJFZG0uVGltZVwiLCBcIkVkbS5EYXRlXCIsIFwiRWRtLkRhdGVUaW1lV2l0aFRpbWV6b25lXCJdLmluY2x1ZGVzKFxuXHRcdFx0XHRwcm9wZXJ0eS50eXBlXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzZWxlY3Rpb24gb3B0aW9ucyBvZiBhIGZpZWxkIGdlbmVyYXRlZCBieSB0aGUgc2VsZWN0ZWQgY29udGV4dHMuXG5cdCAqIEBwYXJhbSBmaWVsZERhdGEgRGF0YSBvZiB0aGUgZmllbGQgdXNlZCBieSBib3RoIHRoZSBzdGF0aWMgYW5kIHRoZSBydW50aW1lIG1vZGVsXG5cdCAqIEByZXR1cm5zIFRoZSBzZWxlY3Qgb3B0aW9ucyBvZiB0aGUgZmllbGRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0UnVudGltZVNlbGVjdGlvbihmaWVsZERhdGE6IE1hc3NGaWVsZFByb3BlcnRpZXMpOiBQcm9taXNlPFNlbGVjdEluZm9bXT4ge1xuXHRcdGNvbnN0IGRpc3RpbmN0TWFwID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0Y29uc3Qgc2VsZWN0T3B0aW9uczogU2VsZWN0SW5mb1tdID0gW107XG5cdFx0aWYgKGZpZWxkRGF0YS5pbnB1dFR5cGUgPT09IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRjb25zdCBhbnlPYmplY3QgPSAoPEFueSBhbnlUZXh0PXtmaWVsZERhdGEudGV4dEJpbmRpbmcuZXhwcmVzc2lvbn0gLz4pIGFzIHR5cGVvZiBBbnk7XG5cdFx0YW55T2JqZWN0LnNldE1vZGVsKHRoaXMuY29udGV4dHNbMF0uZ2V0TW9kZWwoKSk7XG5cdFx0Zm9yIChjb25zdCBzZWxlY3RlZENvbnRleHQgb2YgdGhpcy5hbmFseXplZENvbnRleHRzKSB7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdGNvbnN0IHRleHRCaW5kaW5nID0gYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlUZXh0XCIpO1xuXHRcdFx0aWYgKHRleHRCaW5kaW5nPy5pc0E8Q29tcG9zaXRlQmluZGluZz4oXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiKSkge1xuXHRcdFx0XHQvLyBJZiB0aGUgdGV4dCBiaW5kaW5nIGlzIGEgY29tcG9zaXRlIGJpbmRpbmcsIHdlIG5lZWQgdG8gcmVxdWVzdCB0aGUgdmFsdWUgb2YgZWFjaCBiaW5kaW5nXG5cdFx0XHRcdC8vIHRvIHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGdldHRpbmcgdGhlIHZhbHVlIG9mIHJlcXVlc3RVbml0c09mTWVhc3VyZS9yZXF1ZXN0Q3VycmVuY3lDb2Rlc1xuXHRcdFx0XHQvLyBmb3IgdGhlIGN1c3RvbSB1bml0cyBvZiBtZWFzdXJlIGFuZCBjdXJyZW5jeSBjb2Rlcy5cblx0XHRcdFx0Ly8gV2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgbW9kZSB0byBPbmVUaW1lIHRvIGF2b2lkIHRoZSBiaW5kaW5nIHRvIGJlIHVwZGF0ZWQgd2hlbiB0aGUgY29udGV4dCBjaGFuZ2VzLlxuXHRcdFx0XHQvLyBJbmRlZWQgZXZlbiBpZiB0aGUgcmVxdWVzdFVuaXRzT2ZNZWFzdXJlL3JlcXVlc3RDdXJyZW5jeUNvZGVzIGRvZXNuJ3QgY2hhbmdlIGl0J3MgdHJpZ2dlciBhIFBBVENIIHJlcXVlc3Rcblx0XHRcdFx0dGV4dEJpbmRpbmcuc2V0QmluZGluZ01vZGUoQmluZGluZ01vZGUuT25lVGltZSk7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHRleHRCaW5kaW5nLmdldEJpbmRpbmdzKCkubWFwKChiaW5kaW5nKSA9PiBiaW5kaW5nLnJlcXVlc3RWYWx1ZT8uKCkpKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHByb3BlcnR5VGV4dCA9IChhbnlPYmplY3QuZ2V0QmluZGluZyhcImFueVRleHRcIikgYXMgUHJvcGVydHlCaW5kaW5nIHwgdW5kZWZpbmVkKT8uZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdFx0aWYgKHByb3BlcnR5VGV4dCAmJiAhZGlzdGluY3RNYXAuaGFzKHByb3BlcnR5VGV4dCkpIHtcblx0XHRcdFx0ZGlzdGluY3RNYXAuYWRkKHByb3BlcnR5VGV4dCk7XG5cdFx0XHRcdHNlbGVjdE9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dGV4dDogcHJvcGVydHlUZXh0LFxuXHRcdFx0XHRcdGtleTogcHJvcGVydHlUZXh0LFxuXHRcdFx0XHRcdHVuaXRPckN1cnJlbmN5VmFsdWU6IGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGhcblx0XHRcdFx0XHRcdD8gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChmaWVsZERhdGEucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoKVxuXHRcdFx0XHRcdFx0OiBcIlwiLFxuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWU6IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoZmllbGREYXRhLnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhbnlPYmplY3QuZGVzdHJveSgpO1xuXHRcdHJldHVybiBzZWxlY3RPcHRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9wdGlvbnMgb2YgYSBmaWVsZC5cblx0ICogQHBhcmFtIGZpZWxkRGF0YSBUaGUgcHJvcGVydHkgaW5mb3JtYXRpb25cblx0ICogQHJldHVybnMgVGhlIGRlZmF1bHQgc2VsZWN0IG9wdGlvbnMuXG5cdCAqL1xuXHRwcml2YXRlIGdldERlZmF1bHRTZWxlY3RPcHRpb25zKGZpZWxkRGF0YTogTWFzc0ZpZWxkUHJvcGVydGllcyk6IFNlbGVjdEluZm9bXSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRjb25zdCBrZWVwRW50cnkgPSB7XG5cdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09NQk9CT1hfS0VFUF9WQUxVRVNcIiksXG5cdFx0XHRrZXk6IFNwZWNpZmljU2VsZWN0S2V5cy5LZWVwS2V5XG5cdFx0fTtcblx0XHRjb25zdCBkZWZhdWx0T3B0aW9uczogU2VsZWN0SW5mb1tdID0gW107XG5cdFx0ZGVmYXVsdE9wdGlvbnMucHVzaChrZWVwRW50cnkpO1xuXHRcdGlmIChmaWVsZERhdGEuaW5wdXRUeXBlID09PSBcIkNoZWNrQm94XCIpIHtcblx0XHRcdGRlZmF1bHRPcHRpb25zLnB1c2goeyB0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwieWVzXCIpLCBrZXk6IFwidHJ1ZVwiIH0sIHsgdGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIm5vXCIpLCBrZXk6IFwiZmFsc2VcIiB9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVmYXVsdE9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT01CT0JPWF9SRVBMQUNFX1ZBTFVFU1wiKSxcblx0XHRcdFx0a2V5OiBTcGVjaWZpY1NlbGVjdEtleXMuUmVwbGFjZUtleVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoZmllbGREYXRhLmlzRmllbGRSZXF1aXJlZCAhPT0gXCJ0cnVlXCIgJiYgZmllbGREYXRhLnByb3BlcnR5SW5mby5jbGVhcmFibGUpIHtcblx0XHRcdFx0ZGVmYXVsdE9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTUJPQk9YX0NMRUFSX1ZBTFVFU1wiKSxcblx0XHRcdFx0XHRrZXk6IFNwZWNpZmljU2VsZWN0S2V5cy5DbGVhckZpZWxkVmFsdWVLZXlcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBkZWZhdWx0T3B0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIHRoZSBmaWVsZCBpcyBlZGl0YWJsZS5cblx0ICogQHBhcmFtIGV4cEJpbmRpbmcgVGhlIGV4cHJlc3Npb24gYmluZGluZyBvZiB0aGUgcHJvcGVydHkuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFzcyBlZGl0IGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaWVsZEVkaXRhYmxlKGV4cEJpbmRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKGV4cEJpbmRpbmcgPT09IEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoRmllbGRFZGl0TW9kZSkuaW5jbHVkZXMoZXhwQmluZGluZyBhcyBGaWVsZEVkaXRNb2RlKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoZXhwQmluZGluZykge1xuXHRcdFx0Y29uc3QgYW55Q29udHJvbCA9IDxBbnkgYW55PXtleHBCaW5kaW5nfSAvPjtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5hbmFseXplZENvbnRleHRzWzBdLmdldE1vZGVsKCk7XG5cdFx0XHRhbnlDb250cm9sLnNldE1vZGVsKG1vZGVsKTtcblx0XHRcdGNvbnN0IHZpc2libGUgPSB0aGlzLmFuYWx5emVkQ29udGV4dHMuc29tZSgoY29udGV4dCkgPT4ge1xuXHRcdFx0XHRhbnlDb250cm9sLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRyZXR1cm4gKGFueUNvbnRyb2wuZ2V0QmluZGluZyhcImFueVwiKSBhcyBQcm9wZXJ0eUJpbmRpbmcpLmdldEV4dGVybmFsVmFsdWUoKSA9PT0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZTtcblx0XHRcdH0pO1xuXHRcdFx0YW55Q29udHJvbC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gdmlzaWJsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGlucHV0IHR5cGUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQ29udmVydGVkIFRoZSBjb252ZXJ0ZWQgYW5ub3RhdGlvbiBmbyB0aGUgZmllbGRcblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGggVGhlIGRhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIFRoZSBpbnB1dCB0eXBlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRJbnB1dFR5cGUoZGF0YUZpZWxkQ29udmVydGVkOiBEYXRhRmllbGRUeXBlcywgZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHtcblx0XHRjb25zdCBlZGl0U3R5bGVQcm9wZXJ0aWVzID0ge30gYXMgRmllbGRCbG9ja1Byb3BlcnRpZXM7XG5cdFx0c2V0RWRpdFN0eWxlUHJvcGVydGllcyhlZGl0U3R5bGVQcm9wZXJ0aWVzLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbFBhdGgsIHRydWUpO1xuXHRcdHJldHVybiBlZGl0U3R5bGVQcm9wZXJ0aWVzPy5lZGl0U3R5bGU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmllbGRcblx0ICogVGhpcyB2aXNpYmlsaXR5IGlzIG5vdCBkZXBlbmRlbnQgb24gdGhlIGNvbnRleHQgd2hlblxuXHQgKiAgLSBlaXRoZXIgdGhlIGFkYXB0YXRpb24gbW9kZSBpcyBzZXQuXG5cdCAqICAtIG9yIHRoZSBmaWVsZCBpcyB2aXNpYmxlIGluIHRoZSBtYW5pZmVzdCBhbmQgdGhlIGRlZ3JhZGVkIG1vZGUgaXMgc2V0LlxuXHQgKiBAcGFyYW0gZmllbGRQcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGQgaXMgdmlzaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzRmllbGRWaXNpYmxlKGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllcyk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLmlzQWRhcHRhdGlvbiB8fCAodGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoICYmIHRoaXMuZGVncmFkZWRNb2RlKSkge1xuXHRcdFx0Y29uc3QgaXNTdGF0aWNFZGl0TW9kZSA9IE9iamVjdC5rZXlzKEZpZWxkRWRpdE1vZGUpLmluY2x1ZGVzKGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuZWRpdE1vZGUgYXMgRmllbGRFZGl0TW9kZSk7XG5cdFx0XHRjb25zdCBpc0VkaXRhYmxlID1cblx0XHRcdFx0IWlzU3RhdGljRWRpdE1vZGUgfHwgKGlzU3RhdGljRWRpdE1vZGUgJiYgZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5lZGl0TW9kZSA9PT0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdFx0XHRyZXR1cm4gaXNFZGl0YWJsZSAmJiBmaWVsZFByb3BlcnRpZXMudmlzaWJpbGl0eUJpbmRpbmdzLmlzVmlzaWJsZSAhPT0gXCJmYWxzZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5nZXRGaWVsZEVkaXRhYmxlKGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuZWRpdE1vZGUpICYmXG5cdFx0XHQhdGhpcy5pc0hpZGRlbkZvckNvbnRleHRzKGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuaXNWaXNpYmxlKVxuXHRcdCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtFQTtBQUNBO0FBQ0E7RUFGQSxJQUdxQkEsb0JBQW9CO0lBMkJ4QyxTQUFBQSxxQkFBWUMsS0FBcUUsRUFBRTtNQUFBLEtBbEJsRUMsZUFBZSxHQUFHLEVBQUU7TUFBQSxLQUlwQkMsZ0JBQWdCLEdBQXFCLEVBQUU7TUFBQSxLQU1oREMsZUFBZSxHQUEwQixFQUFFO01BU2xELE1BQU1DLGNBQWMsR0FBSUosS0FBSyxDQUFDSyxLQUFLLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQWNDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsVUFBVSxDQUFDQyxVQUFVO1FBQ3RHQyxTQUFTLEdBQUlWLEtBQUssQ0FBQ0ssS0FBSyxDQUFDTSxRQUFRLENBQUMsQ0FBQyxDQUFnQkMsWUFBWSxDQUFDLENBQUM7TUFFbEUsSUFBSSxDQUFDUCxLQUFLLEdBQUdMLEtBQUssQ0FB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
706
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdERpYWxvZ0hlbHBlciIsInByb3BzIiwibWF4QW5hbHl6ZWRSb3dzIiwiYW5hbHl6ZWRDb250ZXh0cyIsImZpZWxkUHJvcGVydGllcyIsImVudGl0eVR5cGVQYXRoIiwidGFibGUiLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnRyb2wiLCJtYXNzRWRpdCIsIm9uQ29udGV4dE1lbnUiLCJvbkRpYWxvZ0Nsb3NlIiwib25DbG9zZSIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJjb250ZXh0cyIsImZldGNoQ29udGV4dHNGb3JFZGl0IiwiZGVncmFkZWRNb2RlIiwibGVuZ3RoIiwic2xpY2UiLCJpc0FkYXB0YXRpb24iLCJnZXRBcHBDb21wb25lbnQiLCJpc0FkYXB0YXRpb25Nb2RlIiwiaGVhZGVySW5mbyIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckluZm8iLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsIm9wZW4iLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImludGVybmFsTW9kZWxQcm9wZXJ0eSIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRQcm9wZXJ0eSIsImdldEZpZWxkc1Byb3BlcnRpZXNGcm9tSW5mbyIsImdldEZpZWxkc0luZm8iLCJzb21lIiwiZmllbGQiLCJ2aXNpYmxlIiwibm9GaWVsZEluZm9ybWF0aW9uIiwiY29uZmlybVNlbGVjdGlvbiIsInJ1bkFzT3duZXIiLCJtYXNzRWRpdERpYWxvZyIsIk1hc3NFZGl0RGlhbG9nIiwiZGlhbG9nIiwiY3JlYXRlIiwiYXR0YWNoQmVmb3JlQ2xvc2UiLCJyZXF1aXJlZERhdGFQcm9taXNlIiwiZ2V0UmVxdWlyZWREYXRhUHJvbWlzZSIsImdldERhdGFBZnRlck9wZW5pbmdEaWFsb2ciLCJyZXNvbHZlIiwiZXJyb3IiLCJMb2ciLCJyZWplY3QiLCJ2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0IiwidmlzaWJsZUZpZWxkcyIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwibWVzc2FnZSIsIm1lc3NhZ2VEZXRhaWwiLCJnZXRUZXh0IiwiZ2V0UmVzb3VyY2VUZXh0IiwiVHlwZU5hbWUiLCJyZWR1Y2UiLCJmaWVsZHMiLCJmaWVsZFByb3BlcnR5IiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUluZm8iLCJyZWxhdGl2ZVBhdGgiLCJwdXNoIiwibGFiZWwiLCJqb2luIiwiTWVzc2FnZUJveCIsImluZm9ybWF0aW9uIiwiZGV0YWlscyIsInJlc291cmNlTW9kZWwiLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImNvcmVSZXNvdXJjZUJ1bmRsZSIsInVwZGF0YWJsZUNvbnRleHRzIiwiUHJvbWlzZSIsInRhYmxlQVBJIiwiZWRpdEJ1dHRvbiIsImNhbmNlbEJ1dHRvbiIsInR5cGVOYW1lIiwidHlwZU5hbWVQbHVyYWwiLCJUeXBlTmFtZVBsdXJhbCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImRhdGEiLCJyZWFkT25seSIsImdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSIsIndhcm5pbmciLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsInNlbGVjdGlvbiIsInVuZGVmaW5lZCIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0RW50aXR5RmllbGRzSW5mbyIsImNvbHVtbnNEYXRhIiwiY29sdW1ucyIsInByb3BlcnRpZXNLZXlzIiwiU2V0IiwiY29sdW1uIiwidHlwZSIsIm5hbWUiLCJ0cmFuc2Zvcm1QYXRoc1RvSW5mbyIsImdldENvbHVtbnMiLCJtYXAiLCJnZXRQcm9wZXJ0eUtleSIsImlnbm9yZWRGaWVsZHMiLCJpZ25vcmVkRmllbGQiLCJkZWxldGUiLCJwcm9wZXJ0aWVzUGF0aHMiLCJBcnJheSIsImZyb20iLCJjb2x1bW5JbmZvcyIsInByb3BlcnR5UGF0aCIsImNvbHVtbkluZm8iLCJnZXRGaWVsZEluZm8iLCJlbnRpdHlQYXRoIiwiZ2V0TWV0YVBhdGgiLCJlbnRpdHlTZXREYXRhTW9kZWwiLCJyZWxhdGVkQ29sdW1uSW5mbyIsImZpbmQiLCJmaWVsZEluZm8iLCJhbm5vdGF0aW9uUGF0aCIsInByb3BlcnR5RGF0YU1vZGVsIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJjb252ZXJ0ZWRBbm5vdGF0aW9uIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRQcm9wZXJ0eSIsImdldENvbXBsaWFudFByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImtleSIsInRhcmdldE9iamVjdCIsImlzUHJvcGVydHkiLCJJc0ltYWdlVVJMIiwiaXNEYXRhRmllbGRUeXBlcyIsImhhc093blByb3BlcnR5IiwiVmFsdWUiLCIkdGFyZ2V0IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiaGFzVmFsdWVIZWxwIiwiQ29tbW9uIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiaXNIaWRkZW5Gb3JDb250ZXh0cyIsImV4cEJpbmRpbmciLCJhbnlPYmplY3QiLCJfanN4IiwiQW55IiwiYW55Qm9vbGVhbiIsInNldE1vZGVsIiwiaXNIaWRkZW4iLCJjb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nIiwiZ2V0RXh0ZXJuYWxWYWx1ZSIsImRlc3Ryb3kiLCJ1cGRhdGFibGVDb250ZXh0UHJvcGVydHkiLCJnZXRGaWVsZFByb3BlcnRpZXMiLCJkZWVwQ2xvbmUiLCJmaWVsZHNJbmZvIiwiZGF0YVByb3BlcnR5UGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJ1bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoIiwiaW5wdXRUeXBlIiwiZ2V0SW5wdXRUeXBlIiwiZ2V0UmVsYXRpdmVQYXRocyIsImZpZWxkRGF0YSIsInZpc2liaWxpdHlCaW5kaW5ncyIsImlzVmlzaWJsZSIsImVkaXRNb2RlIiwiZ2V0RWRpdE1vZGUiLCJjb25zdGFudCIsIkxhYmVsIiwiaXNGaWVsZFJlcXVpcmVkIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwiZGVzY3JpcHRpb25QYXRoIiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJ0ZXh0QmluZGluZyIsImV4cHJlc3Npb24iLCJnZXRUZXh0QmluZGluZyIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJJc1RpbWV6b25lIiwicmVhZE9ubHlFeHByZXNzaW9uIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJjbGVhcmFibGUiLCJpc1Byb3BlcnR5Q2xlYXJhYmxlIiwiZW1wdHlWYWx1ZSIsImdldEVtcHR5VmFsdWVGb3JQcm9wZXJ0eSIsInNlbGVjdEl0ZW1zIiwiZ2V0RGF0YUZvck9wZW5pbmdEaWFsb2ciLCJhbGwiLCJpc0ZpZWxkVmlzaWJsZSIsInJ1bnRpbWVTZWxlY3Rpb24iLCJnZXRSdW50aW1lU2VsZWN0aW9uIiwiZ2V0RGVmYXVsdFNlbGVjdE9wdGlvbnMiLCJnZW5lcmF0ZUZpZWxkc1Byb3BlcnRpZXMiLCJnZW5lcmF0ZUVudGl0eUZpZWxkc1Byb3BlcnRpZXMiLCJtaXNzaW5nQ29udGV4dHMiLCJiaW5kaW5nc1RvRmV0Y2giLCJjb25jYXQiLCJwYXRoSW5Nb2RlbCIsImdldE1pc3NpbmdEYXRhIiwiYmluZGluZ3NUb1Jlc29sdmUiLCJiaW5kaW5ncyIsImdldFZpZXdEYXRhIiwiY29udmVydGVyVHlwZSIsImRpc3BsYXllZFByb3BlcnRpZXMiLCJldmVyeSIsInByb21pc2VzIiwiY29udHJvbHMiLCJtb2RlbCIsImJpbmRpbmciLCJmaWx0ZXIiLCJzdGFydHNXaXRoIiwicGFyYW1ldGVycyIsImJpbmRpbmdUeXBlIiwiY29udHJvbEJpbmRpbmciLCJzZXRCaW5kaW5nTW9kZSIsIkJpbmRpbmdNb2RlIiwiT25lVGltZSIsImlzQSIsImdldEJpbmRpbmdzIiwibmVzdGVkQmluZGluZyIsInJlcXVlc3RWYWx1ZSIsInByb21pc2UiLCJwcm9wZXJ0eSIsIm51bGxhYmxlIiwiYW55IiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsInZhbHVlIiwiZ2V0QmluZGluZ0luZm8iLCJnZXRUeXBlIiwicGFyc2VWYWx1ZSIsImRpc3RpbmN0TWFwIiwic2VsZWN0T3B0aW9ucyIsImFueVRleHQiLCJzZWxlY3RlZENvbnRleHQiLCJwcm9wZXJ0eVRleHQiLCJoYXMiLCJhZGQiLCJ0ZXh0IiwidW5pdE9yQ3VycmVuY3lWYWx1ZSIsImdldE9iamVjdCIsInByb3BlcnR5VmFsdWUiLCJrZWVwRW50cnkiLCJTcGVjaWZpY1NlbGVjdEtleXMiLCJLZWVwS2V5IiwiZGVmYXVsdE9wdGlvbnMiLCJSZXBsYWNlS2V5IiwiQ2xlYXJGaWVsZFZhbHVlS2V5IiwiZ2V0RmllbGRFZGl0YWJsZSIsIkZpZWxkRWRpdE1vZGUiLCJFZGl0YWJsZSIsIk9iamVjdCIsImtleXMiLCJhbnlDb250cm9sIiwiZGF0YUZpZWxkQ29udmVydGVkIiwiZGF0YU1vZGVsUGF0aCIsImVkaXRTdHlsZVByb3BlcnRpZXMiLCJzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzIiwiZWRpdFN0eWxlIiwiaXNTdGF0aWNFZGl0TW9kZSIsImlzRWRpdGFibGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1hc3NFZGl0RGlhbG9nSGVscGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5LCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIERhdGFGaWVsZEZvckFjdGlvbiwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiwgSGVhZGVySW5mbyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQW55IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9BbnlcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkVHlwZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgTWFzc0VkaXRUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRhYmxlQ29sdW1uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsIGdldFJlbGF0aXZlUGF0aHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBpc1JlYWRPbmx5RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgsXG5cdGhhc1ZhbHVlSGVscFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0RWRpdE1vZGUsIGdldFJlcXVpcmVkRXhwcmVzc2lvbiwgaXNNdWx0aVZhbHVlRmllbGQsIGlzVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0VGV4dEJpbmRpbmcsIHNldEVkaXRTdHlsZVByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgQmluZGluZ01vZGUgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nTW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIFByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL1Byb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IE1hc3NFZGl0RGlhbG9nIGZyb20gXCIuL01hc3NFZGl0RGlhbG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdJbmZvLCBNYXNzRmllbGRQcm9wZXJ0aWVzLCBTZWxlY3RJbmZvIH0gZnJvbSBcIi4vbGlicmFyeVwiO1xuaW1wb3J0IHsgU3BlY2lmaWNTZWxlY3RLZXlzIH0gZnJvbSBcIi4vbGlicmFyeVwiO1xuXG50eXBlIERhdGFGaWVsZFR5cGVzID0gRGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbjtcbnR5cGUgRmllbGRJbmZvID0ge1xuXHRrZXk6IHN0cmluZztcblx0cHJvcGVydHlEYXRhTW9kZWw6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+O1xuXHR0YXJnZXRQcm9wZXJ0eTogUHJvcGVydHk7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGNvbnZlcnRlZEFubm90YXRpb246IERhdGFGaWVsZFR5cGVzO1xufTtcblxudHlwZSBCaW5kaW5nVG9GZXRjaCA9IEJpbmRpbmdJbmZvICYgeyBjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W10gfTtcblxuLyoqXG4gKiBEaXNwbGF5IHRoZSBtYXNzRWRpdCBkaWFsb2cuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hc3NFZGl0RGlhbG9nSGVscGVyIHtcblx0cHJpdmF0ZSByZWFkb25seSB0YWJsZTogVGFibGU7XG5cblx0cHJpdmF0ZSByZWFkb25seSBvbkNvbnRleHRNZW51OiBib29sZWFuO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgb25EaWFsb2dDbG9zZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgdmlldzogRkVWaWV3O1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWF4QW5hbHl6ZWRSb3dzID0gMzA7XG5cblx0cHJpdmF0ZSBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFuYWx5emVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGRlZ3JhZGVkTW9kZTogYm9vbGVhbjtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG1hbmlmZXN0U2V0dGluZ3M6IE1hc3NFZGl0VGFibGVDb25maWd1cmF0aW9uO1xuXG5cdHByaXZhdGUgZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzW10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGlzQWRhcHRhdGlvbjogYm9vbGVhbjtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGhlYWRlckluZm86IEhlYWRlckluZm8gfCB1bmRlZmluZWQ7XG5cblx0bWFzc0VkaXREaWFsb2c6IE1hc3NFZGl0RGlhbG9nIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiB7IHRhYmxlOiBUYWJsZTsgb25Db250ZXh0TWVudTogYm9vbGVhbjsgb25DbG9zZT86ICgpID0+IHZvaWQgfSkge1xuXHRcdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gKHByb3BzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLmNvbGxlY3Rpb24sXG5cdFx0XHRtZXRhTW9kZWwgPSAocHJvcHMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdHRoaXMudGFibGUgPSBwcm9wcy50YWJsZTtcblx0XHR0aGlzLm1hbmlmZXN0U2V0dGluZ3MgPSAodGhpcy50YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5tYXNzRWRpdDtcblx0XHR0aGlzLm9uQ29udGV4dE1lbnUgPSBwcm9wcy5vbkNvbnRleHRNZW51O1xuXHRcdHRoaXMub25EaWFsb2dDbG9zZSA9IHByb3BzLm9uQ2xvc2U7XG5cdFx0dGhpcy52aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzLnRhYmxlKTtcblx0XHR0aGlzLmNvbnRleHRzID0gdGhpcy5mZXRjaENvbnRleHRzRm9yRWRpdCgpO1xuXHRcdHRoaXMuZGVncmFkZWRNb2RlID0gdGhpcy5jb250ZXh0cy5sZW5ndGggPiB0aGlzLm1heEFuYWx5emVkUm93cztcblx0XHR0aGlzLmFuYWx5emVkQ29udGV4dHMgPSB0aGlzLmRlZ3JhZGVkTW9kZSA/IHRoaXMuY29udGV4dHMuc2xpY2UoMCwgdGhpcy5tYXhBbmFseXplZFJvd3MpIDogdGhpcy5jb250ZXh0cztcblx0XHR0aGlzLmlzQWRhcHRhdGlvbiA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLnRhYmxlKS5pc0FkYXB0YXRpb25Nb2RlKCk7XG5cdFx0dGhpcy5oZWFkZXJJbmZvID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVR5cGVQYXRoKSkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uSGVhZGVySW5mbztcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgbWFzcyBlZGl0IGRpYWxvZyBpZiBhbGwgc2VsZWN0ZWQgY29udGV4dHMgYXJlIGVkaXRhYmxlLFxuXHQgKiBvdGhlcndpc2UgYSBtZXNzYWdlIGJveCB0byBjb25maXJtIHRoZSBzZWxlY3Rpb24uXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uIG9wZW4gb2YgdGhlIG1hc3MgZWRpdCBkaWFsb2cuXG5cdCAqL1xuXHRhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLnZpZXcpIGFzIFRlbXBsYXRlQ29tcG9uZW50O1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLnRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdGludGVybmFsTW9kZWxQcm9wZXJ0eSA9ICF0aGlzLm9uQ29udGV4dE1lbnUgPyBcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIixcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGludGVybmFsTW9kZWxQcm9wZXJ0eSkgfHwgMDtcblx0XHRcdHRoaXMuZmllbGRQcm9wZXJ0aWVzID0gYXdhaXQgdGhpcy5nZXRGaWVsZHNQcm9wZXJ0aWVzRnJvbUluZm8odGhpcy5nZXRGaWVsZHNJbmZvKCkpO1xuXHRcdFx0aWYgKCF0aGlzLmlzQWRhcHRhdGlvbikge1xuXHRcdFx0XHQvLyBubyBmaWVsZCB0byBlZGl0XG5cdFx0XHRcdGlmICghdGhpcy5maWVsZFByb3BlcnRpZXMuc29tZSgoZmllbGQpID0+IGZpZWxkLnZpc2libGUpKSB7XG5cdFx0XHRcdFx0dGhpcy5ub0ZpZWxkSW5mb3JtYXRpb24oKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9Tb21lIHJvd3MgYXJlIG5vdCBlZGl0YWJsZSAtPiBkbyB3ZSB3YW50IHRvIGNvbnRpbnVlP1xuXHRcdFx0XHRpZiAodGhpcy5jb250ZXh0cy5sZW5ndGggIT09IHNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdFx0XHR0aGlzLmNvbnRleHRzID0gYXdhaXQgdGhpcy5jb25maXJtU2VsZWN0aW9uKHRoaXMuY29udGV4dHMsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRcdGlmICghdGhpcy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIHRoZSB1c2VyIGRvZXNuJ3Qgd2FudCB0byBjb250aW51ZVxuXHRcdFx0XHRcdFx0dGhpcy5vbkRpYWxvZ0Nsb3NlPy4oKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGF3YWl0IHRlbXBsYXRlQ29tcG9uZW50LnJ1bkFzT3duZXIoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLm1hc3NFZGl0RGlhbG9nID0gbmV3IE1hc3NFZGl0RGlhbG9nKHtcblx0XHRcdFx0XHR0YWJsZTogdGhpcy50YWJsZSxcblx0XHRcdFx0XHRjb250ZXh0czogdGhpcy5jb250ZXh0cyxcblx0XHRcdFx0XHRmaWVsZFByb3BlcnRpZXM6IHRoaXMuZmllbGRQcm9wZXJ0aWVzXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBkaWFsb2cgPSBhd2FpdCB0aGlzLm1hc3NFZGl0RGlhbG9nLmNyZWF0ZSgpO1xuXHRcdFx0XHRkaWFsb2cuYXR0YWNoQmVmb3JlQ2xvc2UoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub25EaWFsb2dDbG9zZT8uKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRkaWFsb2cub3BlbigpO1xuXHRcdFx0XHRjb25zdCByZXF1aXJlZERhdGFQcm9taXNlID0gdGhpcy5tYXNzRWRpdERpYWxvZy5nZXRSZXF1aXJlZERhdGFQcm9taXNlKCk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5nZXREYXRhQWZ0ZXJPcGVuaW5nRGlhbG9nKHRoaXMuZmllbGRQcm9wZXJ0aWVzKTtcblx0XHRcdFx0XHRyZXF1aXJlZERhdGFQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJNYXNzIEVkaXQ6IFNvbWV0aGluZyB3ZW50IHdyb25nIGluIG1hc3MgZWRpdCBkaWFsb2cgdG8gZ2V0IHJlcXVpcmVkIGRhdGEuXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0cmVxdWlyZWREYXRhUHJvbWlzZS5yZWplY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIk1hc3MgRWRpdDogU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gbWFzcyBlZGl0IGRpYWxvZyBjcmVhdGlvbi5cIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIG1lc3NhZ2UgYm94IHRvIG5vdGlmeSBubyBmaWVsZHMgYXJlIGVkaXRhYmxlLlxuXHQgKi9cblx0cHJpdmF0ZSBub0ZpZWxkSW5mb3JtYXRpb24oKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlzaWJsZUZpZWxkc0Zyb21NYW5pZmVzdCA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLm1hc3NFZGl0LnZpc2libGVGaWVsZHM7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRsZXQgbWVzc2FnZSA9IFwiXCIsXG5cdFx0XHRtZXNzYWdlRGV0YWlsO1xuXHRcdGlmICh2aXNpYmxlRmllbGRzRnJvbU1hbmlmZXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdG1lc3NhZ2UgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfTk9fRURJVEFCTEVfRklFTERTX1dJVEhfTUFOSUZFU1RcIiwgW1xuXHRcdFx0XHR0aGlzLmdldFJlc291cmNlVGV4dCh0aGlzLmhlYWRlckluZm8/LlR5cGVOYW1lKSA/PyByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfRElBTE9HX0RFRkFVTFRfVFlQRU5BTUVcIilcblx0XHRcdF0pO1xuXHRcdFx0bWVzc2FnZURldGFpbCA9IGA8dWw+XG5cdFx0XHQke3RoaXMuZmllbGRQcm9wZXJ0aWVzXG5cdFx0XHRcdC5yZWR1Y2UoKGZpZWxkczogc3RyaW5nW10sIGZpZWxkUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRpZiAodmlzaWJsZUZpZWxkc0Zyb21NYW5pZmVzdC5pbmNsdWRlcyhmaWVsZFByb3BlcnR5LnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGgpKSB7XG5cdFx0XHRcdFx0XHRmaWVsZHMucHVzaChgPGxpPiR7ZmllbGRQcm9wZXJ0eS5sYWJlbH08L2xpPmApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdFx0XHR9LCBbXSlcblx0XHRcdFx0LmpvaW4oXCJcIil9IDwvdWw+YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19FRElUQUJMRV9GSUVMRFNfREVGQVVMVFwiKTtcblx0XHR9XG5cblx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKG1lc3NhZ2UsIHtcblx0XHRcdGRldGFpbHM6IG1lc3NhZ2VEZXRhaWwsXG5cdFx0XHRvbkNsb3NlOiAoKSA9PiB7XG5cdFx0XHRcdHRoaXMub25EaWFsb2dDbG9zZT8uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdmFsaWRhdGUgdGhlIHNlbGVjdGVkIGNvbnRleHRzLlxuXHQgKiBAcGFyYW0gY29udGV4dHMgVGhlIGNvbnRleHRzIHNldCBhcyB1cGRhdGFibGVcblx0ICogQHBhcmFtIHNlbGVjdGVkQ29udGV4dHMgIFRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgY29udGV4dHNcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdGhlIGNvbnRleHRzIHRvIGJlIGZpbmFsbHkgbWFuYWdlZC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY29uZmlybVNlbGVjdGlvbihjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSwgc2VsZWN0ZWRDb250ZXh0czogbnVtYmVyKTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dFtdPiB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnRhYmxlKTtcblx0XHRjb25zdCBjb3JlUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cblx0XHRjb25zdCB1cGRhdGFibGVDb250ZXh0cyA9IGNvbnRleHRzLmxlbmd0aDtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGhpcy50YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Y29uc3QgZWRpdEJ1dHRvbiA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fQlVUVE9OX1RFWFRcIiksXG5cdFx0XHRcdFx0Y2FuY2VsQnV0dG9uID0gY29yZVJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9DQU5DRUxcIiksXG5cdFx0XHRcdFx0bWV0YU1vZGVsID0gKHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHR0eXBlTmFtZSA9XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJlc291cmNlVGV4dCh0aGlzLmhlYWRlckluZm8/LlR5cGVOYW1lKSA/PyByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX01BU1NfRURJVF9ESUFMT0dfREVGQVVMVF9UWVBFTkFNRVwiKSxcblx0XHRcdFx0XHR0eXBlTmFtZVBsdXJhbCA9XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJlc291cmNlVGV4dCh0aGlzLmhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsKSA/P1xuXHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19NQVNTX0VESVRfRElBTE9HX0RFRkFVTFRfVFlQRU5BTUVfUExVUkFMXCIpLFxuXHRcdFx0XHRcdG1lc3NhZ2VEZXRhaWwgPVxuXHRcdFx0XHRcdFx0TW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwsIHRoaXMudGFibGUuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpKSAmJiB0YWJsZUFQSS5yZWFkT25seVxuXHRcdFx0XHRcdFx0XHQ/IHRoaXMuZ2V0TWVzc2FnZURldGFpbEZvck5vbkVkaXRhYmxlKHR5cGVOYW1lLCB0eXBlTmFtZVBsdXJhbClcblx0XHRcdFx0XHRcdFx0OiBcIlwiO1xuXG5cdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhcblx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VcIiwgW1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyAtIHVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRcdHVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0dHlwZU5hbWVQbHVyYWxcblx0XHRcdFx0XHRdKSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRkZXRhaWxzOiBtZXNzYWdlRGV0YWlsLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW2VkaXRCdXR0b24sIGNhbmNlbEJ1dHRvbl0sXG5cdFx0XHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiBlZGl0QnV0dG9uLFxuXHRcdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24gKHNlbGVjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoc2VsZWN0aW9uID09PSBlZGl0QnV0dG9uID8gY29udGV4dHMgOiBbXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdGV4dCBhY2NvcmRpbmcgdG8gYW4gYW5ub3RhdGlvbi5cblx0ICogQHBhcmFtIGFubm90YXRpb24gVGhlIGFubm90YXRpb25cblx0ICogQHJldHVybnMgVGhlIHRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdldFJlc291cmNlVGV4dChhbm5vdGF0aW9uOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWFubm90YXRpb24pIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKFxuXHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFubm90YXRpb24pKSBhcyBzdHJpbmcsXG5cdFx0XHR0aGlzLnZpZXdcblx0XHQpPy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1lc3NhZ2UgZGV0YWlsIG9mIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLlxuXHQgKiBAcGFyYW0gdHlwZU5hbWUgVGhlIHR5cGUgbmFtZSBvZiB0aGUgZW50aXR5IHNldFxuXHQgKiBAcGFyYW0gdHlwZU5hbWVQbHVyYWwgVGhlIHR5cGUgbmFtZSBwbHVyYWwgb2YgdGhlIGVudGl0eSBzZXRcblx0ICogQHJldHVybnMgVGhlIHRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSh0eXBlTmFtZTogc3RyaW5nLCB0eXBlTmFtZVBsdXJhbDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdHJldHVybiBgPHA+PHN0cm9uZz4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX0hFQURFUlwiKX08L3N0cm9uZz48L3A+XFxuXG5cdFx0XHQ8cD4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTlwiLCBbdHlwZU5hbWVQbHVyYWxdKX08L3A+XFxuXG5cdFx0XHQ8dWw+XG5cdFx0XHRcdDxsaT4ke3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTl9EUkFGVFwiLCBbdHlwZU5hbWVdKX08L2xpPlxuXHRcdFx0XHQ8bGk+JHtyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9NRVNTQUdFX0RFVEFJTF9SRUFTT05fTk9OX0VESVRBQkxFXCIsIFt0eXBlTmFtZV0pfTwvbGk+XG5cdFx0XHQ8L3VsPmA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW50aXR5IHdoaWNoIGlzIGNvbXBsaWFudCBmb3IgYSBNYXNzIEVkaXQuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHRoZSBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cblx0cHJpdmF0ZSBnZXRFbnRpdHlGaWVsZHNJbmZvKCk6IEZpZWxkSW5mb1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRoaXMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29sdW1uc0RhdGEgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXG5cdFx0Y29uc3QgcHJvcGVydGllc0tleXMgPSBuZXcgU2V0KFxuXHRcdFx0Y29sdW1uc0RhdGEucmVkdWNlKChmaWVsZHM6IHN0cmluZ1tdLCBjb2x1bW4pID0+IHtcblx0XHRcdFx0aWYgKGNvbHVtbi50eXBlID09PSBcIkFubm90YXRpb25cIikge1xuXHRcdFx0XHRcdGZpZWxkcy5wdXNoKGNvbHVtbi5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdFx0fSwgW10pXG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1QYXRoc1RvSW5mbyhwcm9wZXJ0aWVzS2V5cyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvcGVydGllcyBvZiB0aGUgdGFibGUgd2hpY2ggYXJlIGNvbXBsaWFudCBmb3IgYSBNYXNzIEVkaXQuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHRoZSBmaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRzSW5mbygpOiBGaWVsZEluZm9bXSB7XG5cdFx0Y29uc3QgcHJvcGVydGllc0tleXMgPVxuXHRcdFx0dGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMubGVuZ3RoID4gMFxuXHRcdFx0XHQ/IG5ldyBTZXQodGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMpXG5cdFx0XHRcdDogbmV3IFNldCh0aGlzLnRhYmxlLmdldENvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpKTtcblxuXHRcdGlmICh0aGlzLm1hbmlmZXN0U2V0dGluZ3MuaWdub3JlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGlnbm9yZWRGaWVsZCBvZiB0aGlzLm1hbmlmZXN0U2V0dGluZ3MuaWdub3JlZEZpZWxkcykge1xuXHRcdFx0XHRwcm9wZXJ0aWVzS2V5cy5kZWxldGUoaWdub3JlZEZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNmb3JtUGF0aHNUb0luZm8ocHJvcGVydGllc0tleXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybXMgYSBzZXQgb2YgcHJvcGVydHkgcGF0aHMgdG8gYW4gYXJyYXkgb2YgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzUGF0aHMgVGhlIHNldCBvZiBwcm9wZXJ0eSBwYXRoc1xuXHQgKiBAcmV0dXJucyBBcnJheSBvZiB0aGUgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIHRyYW5zZm9ybVBhdGhzVG9JbmZvKHByb3BlcnRpZXNQYXRoczogU2V0PHN0cmluZz4pOiBGaWVsZEluZm9bXSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllc1BhdGhzKS5yZWR1Y2UoKGNvbHVtbkluZm9zOiBGaWVsZEluZm9bXSwgcHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRGaWVsZEluZm8ocHJvcGVydHlQYXRoKTtcblx0XHRcdGlmIChjb2x1bW5JbmZvKSB7XG5cdFx0XHRcdGNvbHVtbkluZm9zLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29sdW1uSW5mb3M7XG5cdFx0fSwgW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aFxuXHQgKiBAcmV0dXJucyBGaWVsZCBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRJbmZvKHByb3BlcnR5UGF0aDogc3RyaW5nKTogRmllbGRJbmZvIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb2x1bW5zRGF0YSA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0aGlzLnRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0aGlzLnRhYmxlLmRhdGEoXCJtZXRhUGF0aFwiKSk7XG5cdFx0Y29uc3QgZW50aXR5U2V0RGF0YU1vZGVsID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpKTtcblx0XHRjb25zdCByZWxhdGVkQ29sdW1uSW5mbyA9IGNvbHVtbnNEYXRhLmZpbmQoKGZpZWxkSW5mbykgPT4gZmllbGRJbmZvLm5hbWUgPT09IHByb3BlcnR5UGF0aCAmJiBmaWVsZEluZm8udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCIpO1xuXHRcdGlmIChyZWxhdGVkQ29sdW1uSW5mbykge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSAocmVsYXRlZENvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdGlmIChhbm5vdGF0aW9uUGF0aCAmJiBwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWwgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZW50aXR5U2V0RGF0YU1vZGVsLCBwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZWRBbm5vdGF0aW9uID0gY29udmVydE1ldGFNb2RlbENvbnRleHQobWV0YU1vZGVsLmdldENvbnRleHQoYW5ub3RhdGlvblBhdGgpKSBhc1xuXHRcdFx0XHRcdHwgRGF0YUZpZWxkXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JBY3Rpb247XG5cdFx0XHRcdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gdGhpcy5nZXRDb21wbGlhbnRQcm9wZXJ0eShwcm9wZXJ0eURhdGFNb2RlbCwgY29udmVydGVkQW5ub3RhdGlvbik7XG5cdFx0XHRcdGlmICh0YXJnZXRQcm9wZXJ0eSAmJiBlbnRpdHlTZXREYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmluY2x1ZGVzKHRhcmdldFByb3BlcnR5KSlcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0a2V5OiByZWxhdGVkQ29sdW1uSW5mby5rZXksXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eURhdGFNb2RlbCxcblx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0bGFiZWw6IHJlbGF0ZWRDb2x1bW5JbmZvLmxhYmVsID8/IHJlbGF0ZWRDb2x1bW5JbmZvLmtleSxcblx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb25cblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgb24gdGhlIERpYWxvZy5cblx0ICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsIFRoZSBkYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBjb2x1bW5cblx0ICogQHBhcmFtIGFubm90YXRpb24gIFRoZSBjb252ZXJ0ZWQgYW5ub3RhdGlvbiBvZiB0aGUgY29sdW1uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBpZiBpdCBpcyBjb21wbGlhbnQsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgZ2V0Q29tcGxpYW50UHJvcGVydHkocHJvcGVydHlEYXRhTW9kZWw6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LCBhbm5vdGF0aW9uOiBEYXRhRmllbGRUeXBlcyk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSBwcm9wZXJ0eURhdGFNb2RlbC50YXJnZXRPYmplY3Q7XG5cdFx0bGV0IHRhcmdldFByb3BlcnR5OiBQcm9wZXJ0eTtcblx0XHRpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHR0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldE9iamVjdDtcblx0XHRcdGlmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnMuVUk/LklzSW1hZ2VVUkwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhhbm5vdGF0aW9uKSAmJiAhYW5ub3RhdGlvbi5oYXNPd25Qcm9wZXJ0eShcIkFjdGlvblwiKSkge1xuXHRcdFx0dGFyZ2V0UHJvcGVydHkgPSBhbm5vdGF0aW9uLlZhbHVlLiR0YXJnZXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgZmllbGQgaXMgY29tcGxpYW50IGZvciB0aGUgTWFzc0VkaXRcblx0XHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHRhcmdldFByb3BlcnR5KTtcblx0XHRpZiAoXG5cdFx0XHRpc011bHRpVmFsdWVGaWVsZChwcm9wZXJ0eURhdGFNb2RlbCkgfHxcblx0XHRcdChoYXNWYWx1ZUhlbHAodGFyZ2V0UHJvcGVydHkpICYmIHRhcmdldFByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycykgfHwgLy8gY29udGV4dCBkZXBlbmRlbnQgVkggaXMgbm90IHN1cHBvcnRlZCBmb3IgTWFzcyBFZGl0LlxuXHRcdFx0KHVuaXRQcm9wZXJ0eSAmJiBoYXNWYWx1ZUhlbHAodW5pdFByb3BlcnR5KSAmJiB1bml0UHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0UHJvcGVydHk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBpcyBoaWRkZW4gZm9yIHRoZSBwcm92aWRlZCBjb250ZXh0cy5cblx0ICogQHBhcmFtIGV4cEJpbmRpbmcgVGhlIGV4cHJlc3Npb24gYmluZGluZyBvZiB0aGUgcHJvcGVydHkuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGlzIGhpZGRlbiBmb3IgYWxsIGNvbnRleHRzLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgaXNIaWRkZW5Gb3JDb250ZXh0cyhleHBCaW5kaW5nOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuXHRcdGlmIChleHBCaW5kaW5nID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoZXhwQmluZGluZyA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYW55T2JqZWN0ID0gPEFueSBhbnlCb29sZWFuPXtleHBCaW5kaW5nfSAvPjtcblx0XHRhbnlPYmplY3Quc2V0TW9kZWwodGhpcy5hbmFseXplZENvbnRleHRzWzBdLmdldE1vZGVsKCkpO1xuXHRcdGNvbnN0IGlzSGlkZGVuID0gIXRoaXMuYW5hbHl6ZWRDb250ZXh0cy5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRyZXR1cm4gKGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55Qm9vbGVhblwiKSBhcyBQcm9wZXJ0eUJpbmRpbmcpLmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHR9KTtcblx0XHRhbnlPYmplY3QuZGVzdHJveSgpO1xuXHRcdHJldHVybiBpc0hpZGRlbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzZWxlY3RlZCBjb250ZXh0IHNldCBhcyB1cGRhdGFibGUuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0cy5cblx0ICovXG5cdHByaXZhdGUgZmV0Y2hDb250ZXh0c0ZvckVkaXQoKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLnRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIiksXG5cdFx0XHR1cGRhdGFibGVDb250ZXh0UHJvcGVydHkgPSAhdGhpcy5vbkNvbnRleHRNZW51ID8gXCJ1cGRhdGFibGVDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS91cGRhdGFibGVDb250ZXh0c1wiO1xuXHRcdHJldHVybiBpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkodXBkYXRhYmxlQ29udGV4dFByb3BlcnR5KSA/PyBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkLlxuXHQgKi9cblx0Z2V0RmllbGRQcm9wZXJ0aWVzKCk6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSB7XG5cdFx0cmV0dXJuIGRlZXBDbG9uZSh0aGlzLmZpZWxkUHJvcGVydGllcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkcyBmcm9tIGFuIGFycmF5IG9mIGZpZWxkIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gZmllbGRzSW5mbyBUaGUgZmllbGQgaW5mb3JtYXRpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRGaWVsZHNQcm9wZXJ0aWVzRnJvbUluZm8oZmllbGRzSW5mbzogRmllbGRJbmZvW10pOiBQcm9taXNlPE1hc3NGaWVsZFByb3BlcnRpZXNbXT4ge1xuXHRcdGNvbnN0IGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGZpZWxkSW5mbyBvZiBmaWVsZHNJbmZvKSB7XG5cdFx0XHRjb25zdCB7IHRhcmdldFByb3BlcnR5LCBwcm9wZXJ0eURhdGFNb2RlbCwgY29udmVydGVkQW5ub3RhdGlvbiB9ID0gZmllbGRJbmZvO1xuXHRcdFx0Y29uc3QgZGF0YVByb3BlcnR5UGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocHJvcGVydHlEYXRhTW9kZWwpO1xuXHRcdFx0aWYgKGRhdGFQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGggPVxuXHRcdFx0XHRcdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpO1xuXHRcdFx0XHRjb25zdCBpbnB1dFR5cGUgPSB0aGlzLmdldElucHV0VHlwZShjb252ZXJ0ZWRBbm5vdGF0aW9uLCBwcm9wZXJ0eURhdGFNb2RlbCk7XG5cdFx0XHRcdGlmIChpbnB1dFR5cGUgJiYgcHJvcGVydHlEYXRhTW9kZWwudGFyZ2V0T2JqZWN0KSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhwcm9wZXJ0eURhdGFNb2RlbCk7XG5cdFx0XHRcdFx0Y29uc3QgZmllbGREYXRhID0ge1xuXHRcdFx0XHRcdFx0dmlzaWJpbGl0eUJpbmRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdGlzVmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlKGNvbnZlcnRlZEFubm90YXRpb24pKSxcblx0XHRcdFx0XHRcdFx0ZWRpdE1vZGU6IGdldEVkaXRNb2RlKFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5RGF0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3RhbnQodHJ1ZSlcblx0XHRcdFx0XHRcdFx0KSBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsIC8vYnkgZGVmYXVsdCB0aGUgZmllbGQgaXMgdmlzaWJsZVxuXHRcdFx0XHRcdFx0bGFiZWw6IGZpZWxkSW5mby5sYWJlbCB8fCAodGFyZ2V0UHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbCBhcyBzdHJpbmcgfCB1bmRlZmluZWQpIHx8IGRhdGFQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRpc0ZpZWxkUmVxdWlyZWQ6IGdldFJlcXVpcmVkRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0dGFyZ2V0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlEYXRhTW9kZWxcblx0XHRcdFx0XHRcdCkgYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvblBhdGg6IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHByb3BlcnR5RGF0YU1vZGVsLnRhcmdldE9iamVjdCksXG5cdFx0XHRcdFx0XHR0ZXh0QmluZGluZzoge1xuXHRcdFx0XHRcdFx0XHRleHByZXNzaW9uOiBnZXRUZXh0QmluZGluZyhwcm9wZXJ0eURhdGFNb2RlbCwge1xuXHRcdFx0XHRcdFx0XHRcdGRpc3BsYXlNb2RlOiBnZXREaXNwbGF5TW9kZSh0YXJnZXRQcm9wZXJ0eSwgcHJvcGVydHlEYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZSlcblx0XHRcdFx0XHRcdFx0fSkgYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0XHRcdFx0XHRcdHR5cGU6XG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0UHJvcGVydHkudHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiB8fCB0YXJnZXRQcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNUaW1lem9uZVxuXHRcdFx0XHRcdFx0XHRcdFx0PyBcImFueVRleHRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0OiBcImFueVwiXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cmVhZE9ubHlFeHByZXNzaW9uOiBpc1JlYWRPbmx5RXhwcmVzc2lvbih0YXJnZXRQcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSxcblx0XHRcdFx0XHRcdGlucHV0VHlwZSxcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbzoge1xuXHRcdFx0XHRcdFx0XHRjbGVhcmFibGU6IHRoaXMuaXNQcm9wZXJ0eUNsZWFyYWJsZSh0YXJnZXRQcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRcdGVtcHR5VmFsdWU6IHRoaXMuZ2V0RW1wdHlWYWx1ZUZvclByb3BlcnR5KHRhcmdldFByb3BlcnR5LCBkYXRhUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0XHRcdFx0a2V5OiBmaWVsZEluZm8ua2V5LFxuXHRcdFx0XHRcdFx0XHRyZWxhdGl2ZVBhdGg6IGRhdGFQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRcdHVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0c2VsZWN0SXRlbXM6IFtdIGFzIFNlbGVjdEluZm9bXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ZmllbGRQcm9wZXJ0aWVzLnB1c2goZmllbGREYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRhd2FpdCB0aGlzLmdldERhdGFGb3JPcGVuaW5nRGlhbG9nKGZpZWxkUHJvcGVydGllcyk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRmaWVsZFByb3BlcnRpZXMubWFwKGFzeW5jIChmaWVsZERhdGEpID0+IHtcblx0XHRcdFx0ZmllbGREYXRhLnZpc2libGUgPSB0aGlzLm1hbmlmZXN0U2V0dGluZ3MudmlzaWJsZUZpZWxkcy5sZW5ndGggPT09IDAgPyB0aGlzLmlzRmllbGRWaXNpYmxlKGZpZWxkRGF0YSkgOiB0cnVlO1xuXHRcdFx0XHRjb25zdCBydW50aW1lU2VsZWN0aW9uID0gIXRoaXMuaXNBZGFwdGF0aW9uID8gYXdhaXQgdGhpcy5nZXRSdW50aW1lU2VsZWN0aW9uKGZpZWxkRGF0YSkgOiBbXTtcblx0XHRcdFx0ZmllbGREYXRhLnNlbGVjdEl0ZW1zID0gWy4uLnRoaXMuZ2V0RGVmYXVsdFNlbGVjdE9wdGlvbnMoZmllbGREYXRhKSwgLi4ucnVudGltZVNlbGVjdGlvbl07XG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0cmV0dXJuIGZpZWxkUHJvcGVydGllcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIGRpYWxvZyBmaWVsZHMuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0YXN5bmMgZ2VuZXJhdGVGaWVsZHNQcm9wZXJ0aWVzKCk6IFByb21pc2U8TWFzc0ZpZWxkUHJvcGVydGllc1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RmllbGRzUHJvcGVydGllc0Zyb21JbmZvKHRoaXMuZ2V0RmllbGRzSW5mbygpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBlbnRpdHkuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0YXN5bmMgZ2VuZXJhdGVFbnRpdHlGaWVsZHNQcm9wZXJ0aWVzKCk6IFByb21pc2U8TWFzc0ZpZWxkUHJvcGVydGllc1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RmllbGRzUHJvcGVydGllc0Zyb21JbmZvKHRoaXMuZ2V0RW50aXR5RmllbGRzSW5mbygpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWxldmFudCBkYXRhIGZyb20gdGhlIG1vZGVsIG5lZWRlZCBhZnRlciB0aGUgb3BlbmluZyBvZiB0aGUgZGlhbG9nLlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25seSBpbiB0aGUgZGVncmFkZWQgbW9kZSBzaW5jZSB0aGUgZGF0YSBpcyBhbHJlYWR5IGZldGNoZWQgaW4gdGhlIG5vcm1hbCBtb2RlLlxuXHQgKiB0aGUgZGVncmFkZWQgbW9kZSBpcyBzZXQgd2hlbiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGNvbnRleHRzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4IGFuYWx5emVkIHJvd3MuXG5cdCAqIEBwYXJhbSBmaWVsZFByb3BlcnRpZXMgVGhlIGZpZWxkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGF0YSBpcyBmZXRjaGVkLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXREYXRhQWZ0ZXJPcGVuaW5nRGlhbG9nKGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuZGVncmFkZWRNb2RlKSB7XG5cdFx0XHRjb25zdCBtaXNzaW5nQ29udGV4dHMgPSB0aGlzLmNvbnRleHRzLnNsaWNlKHRoaXMubWF4QW5hbHl6ZWRSb3dzLCB0aGlzLmNvbnRleHRzLmxlbmd0aCk7XG5cdFx0XHRjb25zdCBiaW5kaW5nc1RvRmV0Y2ggPSAoW10gYXMgQmluZGluZ1RvRmV0Y2hbXSkuY29uY2F0KFxuXHRcdFx0XHQuLi5maWVsZFByb3BlcnRpZXMubWFwKChmaWVsZERhdGEpID0+IFtcblx0XHRcdFx0XHR7IGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKGZpZWxkRGF0YS5yZWFkT25seUV4cHJlc3Npb24pLCBjb250ZXh0czogdGhpcy5jb250ZXh0cyB9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8ucmVsYXRpdmVQYXRoKSksXG5cdFx0XHRcdFx0XHRjb250ZXh0czogbWlzc2luZ0NvbnRleHRzLFxuXHRcdFx0XHRcdFx0dHlwZTogZmllbGREYXRhLnRleHRCaW5kaW5nLnR5cGVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGgpKSxcblx0XHRcdFx0XHRcdGNvbnRleHRzOiBtaXNzaW5nQ29udGV4dHNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0pXG5cdFx0XHQpO1xuXHRcdFx0YXdhaXQgdGhpcy5nZXRNaXNzaW5nRGF0YShiaW5kaW5nc1RvRmV0Y2gpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWxldmFudCBkYXRhIGZyb20gdGhlIG1vZGVsIG5lZWRlZCB0byBvcGVuIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBmaWVsZFByb3BlcnRpZXMgVGhlIGZpZWxkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGF0YSBpcyBmZXRjaGVkLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXREYXRhRm9yT3BlbmluZ0RpYWxvZyhmaWVsZFByb3BlcnRpZXM6IE1hc3NGaWVsZFByb3BlcnRpZXNbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJpbmRpbmdzVG9SZXNvbHZlID0gKFtdIGFzIEJpbmRpbmdUb0ZldGNoW10pLmNvbmNhdChcblx0XHRcdGZpZWxkUHJvcGVydGllcy5yZWR1Y2UoKGJpbmRpbmdzOiBCaW5kaW5nVG9GZXRjaFtdLCBmaWVsZERhdGEpID0+IHtcblx0XHRcdFx0YmluZGluZ3MgPSBiaW5kaW5ncy5jb25jYXQoW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGV4cHJlc3Npb246IGZpZWxkRGF0YS50ZXh0QmluZGluZy5leHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0dHlwZTogZmllbGREYXRhLnRleHRCaW5kaW5nLnR5cGVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGV4cHJlc3Npb246IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8ucmVsYXRpdmVQYXRoKSksXG5cdFx0XHRcdFx0XHR0eXBlOiBmaWVsZERhdGEudGV4dEJpbmRpbmcudHlwZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBleHByZXNzaW9uOiBjb21waWxlRXhwcmVzc2lvbihwYXRoSW5Nb2RlbChmaWVsZERhdGEucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoKSkgfVxuXHRcdFx0XHRdKTtcblx0XHRcdFx0aWYgKCF0aGlzLm1hbmlmZXN0U2V0dGluZ3MudmlzaWJsZUZpZWxkcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRiaW5kaW5ncyA9IGJpbmRpbmdzLmNvbmNhdChbXG5cdFx0XHRcdFx0XHR7IGV4cHJlc3Npb246IGZpZWxkRGF0YS52aXNpYmlsaXR5QmluZGluZ3MuaXNWaXNpYmxlIH0sXG5cdFx0XHRcdFx0XHR7IGV4cHJlc3Npb246IGZpZWxkRGF0YS52aXNpYmlsaXR5QmluZGluZ3MuZWRpdE1vZGUgfVxuXHRcdFx0XHRcdF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghdGhpcy5kZWdyYWRlZE1vZGUpIHtcblx0XHRcdFx0XHRiaW5kaW5ncy5wdXNoKHsgZXhwcmVzc2lvbjogY29tcGlsZUV4cHJlc3Npb24oZmllbGREYXRhLnJlYWRPbmx5RXhwcmVzc2lvbikgfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGJpbmRpbmdzO1xuXHRcdFx0fSwgW10pXG5cdFx0KTtcblx0XHRhd2FpdCB0aGlzLmdldE1pc3NpbmdEYXRhKGJpbmRpbmdzVG9SZXNvbHZlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBtaXNzaW5nIGRhdGEgZm9yIHRoZSBmaWVsZHMuXG5cdCAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBjb250cm9scyB3aXRoIHRoZSBwcm92aWRlZCBiaW5kaW5ncyB0byBmZXRjaCB0aGUgbWlzc2luZyBkYXRhLlxuXHQgKiBUaGUgbW9kZWwgcmVxdWVzdHMgdGhlIGRhdGEgdG8gdGhlIGJhY2tlbmQgd2hlbiB0aGUgY29udGV4dHMgZG9lc24ndCBjb250YWlucyB0aGUgcmVsYXRlZCBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gYmluZGluZ3NUb0ZldGNoIFRoZSBiaW5kaW5nIHRvIHJlc29sdmUgYW5kIGl0cyBwcm9wZXJ0eSBwYXRoIHJlZmVyZW5jZVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBkYXRhIGlzIGZldGNoZWQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldE1pc3NpbmdEYXRhKGJpbmRpbmdzVG9GZXRjaDogQmluZGluZ1RvRmV0Y2hbXSk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0aWYgKHRoaXMuaXNBZGFwdGF0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLnZpZXcuZ2V0Vmlld0RhdGEoKS5jb252ZXJ0ZXJUeXBlID09PSBcIk9iamVjdFBhZ2VcIikge1xuXHRcdFx0Y29uc3QgZGlzcGxheWVkUHJvcGVydGllcyA9IHRoaXMudGFibGUuZ2V0Q29sdW1ucygpLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSk7XG5cdFx0XHRpZiAodGhpcy5tYW5pZmVzdFNldHRpbmdzLnZpc2libGVGaWVsZHMuZXZlcnkoKGZpZWxkKSA9PiBkaXNwbGF5ZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGZpZWxkKSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xuXHRcdGNvbnN0IGNvbnRyb2xzID0gW107XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmNvbnRleHRzWzBdLmdldE1vZGVsKCk7XG5cdFx0Zm9yIChjb25zdCBiaW5kaW5nIG9mIGJpbmRpbmdzVG9GZXRjaC5maWx0ZXIoKGJpbmRpbmcpID0+IGJpbmRpbmcuZXhwcmVzc2lvbj8uc3RhcnRzV2l0aChcIntcIikpKSB7XG5cdFx0XHQvLyBBdm9pZCB0byBmZXRjaCBjb25zdGFudCBiaW5kaW5nc1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPjtcblx0XHRcdGNvbnN0IGFuYWx5emVkQ29udGV4dHMgPSBiaW5kaW5nLmNvbnRleHRzID8/IHRoaXMuYW5hbHl6ZWRDb250ZXh0cztcblx0XHRcdGNvbnN0IGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlID8/IFwiYW55XCI7XG5cdFx0XHRwYXJhbWV0ZXJzW2JpbmRpbmdUeXBlXSA9IGJpbmRpbmcuZXhwcmVzc2lvbjtcblx0XHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBhbmFseXplZENvbnRleHRzKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2wgPSA8QW55IHsuLi5wYXJhbWV0ZXJzfSAvPjtcblx0XHRcdFx0Y29udHJvbC5zZXRNb2RlbChtb2RlbCk7XG5cdFx0XHRcdGNvbnRyb2wuc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdGNvbnRyb2xzLnB1c2goY29udHJvbCk7XG5cdFx0XHRcdHByb21pc2VzLnB1c2goYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xCaW5kaW5nID0gY29udHJvbC5nZXRCaW5kaW5nKGJpbmRpbmdUeXBlKSBhcyBPRGF0YVByb3BlcnR5QmluZGluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAoY29udHJvbEJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xCaW5kaW5nLnNldEJpbmRpbmdNb2RlKEJpbmRpbmdNb2RlLk9uZVRpbWUpO1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRyb2xCaW5kaW5nLmlzQTxDb21wb3NpdGVCaW5kaW5nPihcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKGNvbnRyb2xCaW5kaW5nLmdldEJpbmRpbmdzKCkubWFwKChuZXN0ZWRCaW5kaW5nKSA9PiBuZXN0ZWRCaW5kaW5nLnJlcXVlc3RWYWx1ZT8uKCkpKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IGNvbnRyb2xCaW5kaW5nLnJlcXVlc3RWYWx1ZT8uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMubWFwKGFzeW5jIChwcm9taXNlKSA9PiBwcm9taXNlKCkpKTtcblx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcblx0XHRcdGNvbnRyb2wuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aGVuIHRoZSByZWxhdGVkIGZpZWxkIGlzIGVtcHR5LlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcblx0ICogQHJldHVybnMgVGhlIGRlZmF1bHQgdmFsdWUuXG5cdCAqL1xuXHRnZXRFbXB0eVZhbHVlRm9yUHJvcGVydHkocHJvcGVydHk6IFByb3BlcnR5LCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IFByaW1pdGl2ZVR5cGUge1xuXHRcdGlmIChwcm9wZXJ0eS5udWxsYWJsZSAhPT0gZmFsc2UpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0c1swXTtcblx0XHRcdGNvbnN0IGFueU9iamVjdCA9IDxBbnkgYW55PXtjb21waWxlRXhwcmVzc2lvbihmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHByb3BlcnR5LCBwYXRoSW5Nb2RlbChwcm9wZXJ0eVBhdGgpKSl9IC8+O1xuXHRcdFx0YW55T2JqZWN0LnNldE1vZGVsKGNvbnRleHQuZ2V0TW9kZWwoKSk7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGFueU9iamVjdC5nZXRCaW5kaW5nSW5mbyhcImFueVwiKS5iaW5kaW5nLmdldFR5cGUoKS5wYXJzZVZhbHVlKFwiXCIsIFwic3RyaW5nXCIpO1xuXHRcdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBwcm9wZXJ0eSBpcyBjbGVhcmFibGUuXG5cdCAqIFNvbWUgT0RhdGEgdHlwZXMgZG9uJ3QgYWNjZXNzIGVtcHR5IHN0cmluZyBvciAwIGFzIGEgdmFsaWQgdmFsdWUgd2hlbiBpdCdzIG5vdCBudWxsYWJsZS5cblx0ICogRm9yIGV4YW1wbGUsIEVkbS5EYXRlVGltZSBkb2Vzbid0IGFjY2VwdCBhbiBlbXB0eSBzdHJpbmcgYXMgYSB2YWxpZCB2YWx1ZS5cblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyBjbGVhcmFibGUsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGlzUHJvcGVydHlDbGVhcmFibGUocHJvcGVydHk6IFByb3BlcnR5KTogUHJpbWl0aXZlVHlwZSB7XG5cdFx0aWYgKHByb3BlcnR5Lm51bGxhYmxlICE9PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAhW1wiRWRtLkRhdGVUaW1lXCIsIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsIFwiRWRtLlRpbWVPZkRheVwiLCBcIkVkbS5UaW1lXCIsIFwiRWRtLkRhdGVcIiwgXCJFZG0uRGF0ZVRpbWVXaXRoVGltZXpvbmVcIl0uaW5jbHVkZXMoXG5cdFx0XHRcdHByb3BlcnR5LnR5cGVcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHNlbGVjdGlvbiBvcHRpb25zIG9mIGEgZmllbGQgZ2VuZXJhdGVkIGJ5IHRoZSBzZWxlY3RlZCBjb250ZXh0cy5cblx0ICogQHBhcmFtIGZpZWxkRGF0YSBEYXRhIG9mIHRoZSBmaWVsZCB1c2VkIGJ5IGJvdGggdGhlIHN0YXRpYyBhbmQgdGhlIHJ1bnRpbWUgbW9kZWxcblx0ICogQHJldHVybnMgVGhlIHNlbGVjdCBvcHRpb25zIG9mIHRoZSBmaWVsZFxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRSdW50aW1lU2VsZWN0aW9uKGZpZWxkRGF0YTogTWFzc0ZpZWxkUHJvcGVydGllcyk6IFByb21pc2U8U2VsZWN0SW5mb1tdPiB7XG5cdFx0Y29uc3QgZGlzdGluY3RNYXAgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRjb25zdCBzZWxlY3RPcHRpb25zOiBTZWxlY3RJbmZvW10gPSBbXTtcblx0XHRpZiAoZmllbGREYXRhLmlucHV0VHlwZSA9PT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdGNvbnN0IGFueU9iamVjdCA9ICg8QW55IGFueVRleHQ9e2ZpZWxkRGF0YS50ZXh0QmluZGluZy5leHByZXNzaW9ufSAvPikgYXMgdHlwZW9mIEFueTtcblx0XHRhbnlPYmplY3Quc2V0TW9kZWwodGhpcy5jb250ZXh0c1swXS5nZXRNb2RlbCgpKTtcblx0XHRmb3IgKGNvbnN0IHNlbGVjdGVkQ29udGV4dCBvZiB0aGlzLmFuYWx5emVkQ29udGV4dHMpIHtcblx0XHRcdGFueU9iamVjdC5zZXRCaW5kaW5nQ29udGV4dChzZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0Y29uc3QgdGV4dEJpbmRpbmcgPSBhbnlPYmplY3QuZ2V0QmluZGluZyhcImFueVRleHRcIik7XG5cdFx0XHRpZiAodGV4dEJpbmRpbmc/LmlzQTxDb21wb3NpdGVCaW5kaW5nPihcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdC8vIElmIHRoZSB0ZXh0IGJpbmRpbmcgaXMgYSBjb21wb3NpdGUgYmluZGluZywgd2UgbmVlZCB0byByZXF1ZXN0IHRoZSB2YWx1ZSBvZiBlYWNoIGJpbmRpbmdcblx0XHRcdFx0Ly8gdG8gd2FpdCBmb3IgdGhlIHByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgZ2V0dGluZyB0aGUgdmFsdWUgb2YgcmVxdWVzdFVuaXRzT2ZNZWFzdXJlL3JlcXVlc3RDdXJyZW5jeUNvZGVzXG5cdFx0XHRcdC8vIGZvciB0aGUgY3VzdG9tIHVuaXRzIG9mIG1lYXN1cmUgYW5kIGN1cnJlbmN5IGNvZGVzLlxuXHRcdFx0XHQvLyBXZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBtb2RlIHRvIE9uZVRpbWUgdG8gYXZvaWQgdGhlIGJpbmRpbmcgdG8gYmUgdXBkYXRlZCB3aGVuIHRoZSBjb250ZXh0IGNoYW5nZXMuXG5cdFx0XHRcdC8vIEluZGVlZCBldmVuIGlmIHRoZSByZXF1ZXN0VW5pdHNPZk1lYXN1cmUvcmVxdWVzdEN1cnJlbmN5Q29kZXMgZG9lc24ndCBjaGFuZ2UgaXQncyB0cmlnZ2VyIGEgUEFUQ0ggcmVxdWVzdFxuXHRcdFx0XHR0ZXh0QmluZGluZy5zZXRCaW5kaW5nTW9kZShCaW5kaW5nTW9kZS5PbmVUaW1lKTtcblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwodGV4dEJpbmRpbmcuZ2V0QmluZGluZ3MoKS5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcucmVxdWVzdFZhbHVlPy4oKSkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcHJvcGVydHlUZXh0ID0gKGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55VGV4dFwiKSBhcyBQcm9wZXJ0eUJpbmRpbmcgfCB1bmRlZmluZWQpPy5nZXRFeHRlcm5hbFZhbHVlKCk7XG5cdFx0XHRpZiAocHJvcGVydHlUZXh0ICYmICFkaXN0aW5jdE1hcC5oYXMocHJvcGVydHlUZXh0KSkge1xuXHRcdFx0XHRkaXN0aW5jdE1hcC5hZGQocHJvcGVydHlUZXh0KTtcblx0XHRcdFx0c2VsZWN0T3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0ZXh0OiBwcm9wZXJ0eVRleHQsXG5cdFx0XHRcdFx0a2V5OiBwcm9wZXJ0eVRleHQsXG5cdFx0XHRcdFx0dW5pdE9yQ3VycmVuY3lWYWx1ZTogZmllbGREYXRhLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0PyBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KGZpZWxkRGF0YS5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGgpXG5cdFx0XHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChmaWVsZERhdGEucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aClcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0cmV0dXJuIHNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb3B0aW9ucyBvZiBhIGZpZWxkLlxuXHQgKiBAcGFyYW0gZmllbGREYXRhIFRoZSBwcm9wZXJ0eSBpbmZvcm1hdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgZGVmYXVsdCBzZWxlY3Qgb3B0aW9ucy5cblx0ICovXG5cdHByaXZhdGUgZ2V0RGVmYXVsdFNlbGVjdE9wdGlvbnMoZmllbGREYXRhOiBNYXNzRmllbGRQcm9wZXJ0aWVzKTogU2VsZWN0SW5mb1tdIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdGNvbnN0IGtlZXBFbnRyeSA9IHtcblx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT01CT0JPWF9LRUVQX1ZBTFVFU1wiKSxcblx0XHRcdGtleTogU3BlY2lmaWNTZWxlY3RLZXlzLktlZXBLZXlcblx0XHR9O1xuXHRcdGNvbnN0IGRlZmF1bHRPcHRpb25zOiBTZWxlY3RJbmZvW10gPSBbXTtcblx0XHRkZWZhdWx0T3B0aW9ucy5wdXNoKGtlZXBFbnRyeSk7XG5cdFx0aWYgKGZpZWxkRGF0YS5pbnB1dFR5cGUgPT09IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0ZGVmYXVsdE9wdGlvbnMucHVzaCh7IHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJ5ZXNcIiksIGtleTogXCJ0cnVlXCIgfSwgeyB0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwibm9cIiksIGtleTogXCJmYWxzZVwiIH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWZhdWx0T3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTUJPQk9YX1JFUExBQ0VfVkFMVUVTXCIpLFxuXHRcdFx0XHRrZXk6IFNwZWNpZmljU2VsZWN0S2V5cy5SZXBsYWNlS2V5XG5cdFx0XHR9KTtcblx0XHRcdGlmIChmaWVsZERhdGEuaXNGaWVsZFJlcXVpcmVkICE9PSBcInRydWVcIiAmJiBmaWVsZERhdGEucHJvcGVydHlJbmZvLmNsZWFyYWJsZSkge1xuXHRcdFx0XHRkZWZhdWx0T3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09NQk9CT1hfQ0xFQVJfVkFMVUVTXCIpLFxuXHRcdFx0XHRcdGtleTogU3BlY2lmaWNTZWxlY3RLZXlzLkNsZWFyRmllbGRWYWx1ZUtleVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRlZmF1bHRPcHRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgdGhlIGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKiBAcGFyYW0gZXhwQmluZGluZyBUaGUgZXhwcmVzc2lvbiBiaW5kaW5nIG9mIHRoZSBwcm9wZXJ0eS5cblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBtYXNzIGVkaXQgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpZWxkRWRpdGFibGUoZXhwQmluZGluZzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pOiBib29sZWFuIHtcblx0XHRpZiAoZXhwQmluZGluZyA9PT0gRmllbGRFZGl0TW9kZS5FZGl0YWJsZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyhGaWVsZEVkaXRNb2RlKS5pbmNsdWRlcyhleHBCaW5kaW5nIGFzIEZpZWxkRWRpdE1vZGUpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChleHBCaW5kaW5nKSB7XG5cdFx0XHRjb25zdCBhbnlDb250cm9sID0gPEFueSBhbnk9e2V4cEJpbmRpbmd9IC8+O1xuXHRcdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmFuYWx5emVkQ29udGV4dHNbMF0uZ2V0TW9kZWwoKTtcblx0XHRcdGFueUNvbnRyb2wuc2V0TW9kZWwobW9kZWwpO1xuXHRcdFx0Y29uc3QgdmlzaWJsZSA9IHRoaXMuYW5hbHl6ZWRDb250ZXh0cy5zb21lKChjb250ZXh0KSA9PiB7XG5cdFx0XHRcdGFueUNvbnRyb2wuc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdHJldHVybiAoYW55Q29udHJvbC5nZXRCaW5kaW5nKFwiYW55XCIpIGFzIFByb3BlcnR5QmluZGluZykuZ2V0RXh0ZXJuYWxWYWx1ZSgpID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlO1xuXHRcdFx0fSk7XG5cdFx0XHRhbnlDb250cm9sLmRlc3Ryb3koKTtcblx0XHRcdHJldHVybiB2aXNpYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaW5wdXQgdHlwZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRDb252ZXJ0ZWQgVGhlIGNvbnZlcnRlZCBhbm5vdGF0aW9uIGZvIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsUGF0aCBUaGUgZGF0YU1vZGVsT2JqZWN0UGF0aCBvZiB0aGUgcHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIGlucHV0IHR5cGUuXG5cdCAqL1xuXHRwcml2YXRlIGdldElucHV0VHlwZShkYXRhRmllbGRDb252ZXJ0ZWQ6IERhdGFGaWVsZFR5cGVzLCBkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuXHRcdGNvbnN0IGVkaXRTdHlsZVByb3BlcnRpZXMgPSB7fSBhcyBGaWVsZEJsb2NrUHJvcGVydGllcztcblx0XHRzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzKGVkaXRTdHlsZVByb3BlcnRpZXMsIGRhdGFGaWVsZENvbnZlcnRlZCwgZGF0YU1vZGVsUGF0aCwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGVkaXRTdHlsZVByb3BlcnRpZXM/LmVkaXRTdHlsZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmaWVsZFxuXHQgKiBUaGlzIHZpc2liaWxpdHkgaXMgbm90IGRlcGVuZGVudCBvbiB0aGUgY29udGV4dCB3aGVuXG5cdCAqICAtIGVpdGhlciB0aGUgYWRhcHRhdGlvbiBtb2RlIGlzIHNldC5cblx0ICogIC0gb3IgdGhlIGZpZWxkIGlzIHZpc2libGUgaW4gdGhlIG1hbmlmZXN0IGFuZCB0aGUgZGVncmFkZWQgbW9kZSBpcyBzZXQuXG5cdCAqIEBwYXJhbSBmaWVsZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIG1hc3MgZWRpdCBmaWVsZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZCBpcyB2aXNpYmxlLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgaXNGaWVsZFZpc2libGUoZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuaXNBZGFwdGF0aW9uIHx8ICh0aGlzLm1hbmlmZXN0U2V0dGluZ3MudmlzaWJsZUZpZWxkcy5sZW5ndGggJiYgdGhpcy5kZWdyYWRlZE1vZGUpKSB7XG5cdFx0XHRjb25zdCBpc1N0YXRpY0VkaXRNb2RlID0gT2JqZWN0LmtleXMoRmllbGRFZGl0TW9kZSkuaW5jbHVkZXMoZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5lZGl0TW9kZSBhcyBGaWVsZEVkaXRNb2RlKTtcblx0XHRcdGNvbnN0IGlzRWRpdGFibGUgPVxuXHRcdFx0XHQhaXNTdGF0aWNFZGl0TW9kZSB8fCAoaXNTdGF0aWNFZGl0TW9kZSAmJiBmaWVsZFByb3BlcnRpZXMudmlzaWJpbGl0eUJpbmRpbmdzLmVkaXRNb2RlID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKTtcblx0XHRcdHJldHVybiBpc0VkaXRhYmxlICYmIGZpZWxkUHJvcGVydGllcy52aXNpYmlsaXR5QmluZGluZ3MuaXNWaXNpYmxlICE9PSBcImZhbHNlXCI7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLmdldEZpZWxkRWRpdGFibGUoZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5lZGl0TW9kZSkgJiZcblx0XHRcdCF0aGlzLmlzSGlkZGVuRm9yQ29udGV4dHMoZmllbGRQcm9wZXJ0aWVzLnZpc2liaWxpdHlCaW5kaW5ncy5pc1Zpc2libGUpXG5cdFx0KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa0VBO0FBQ0E7QUFDQTtFQUZBLElBR3FCQSxvQkFBb0I7SUEyQnhDLFNBQUFBLHFCQUFZQyxLQUFxRSxFQUFFO01BQUEsS0FsQmxFQyxlQUFlLEdBQUcsRUFBRTtNQUFBLEtBSXBCQyxnQkFBZ0IsR0FBcUIsRUFBRTtNQUFBLEtBTWhEQyxlQUFlLEdBQTBCLEVBQUU7TUFTbEQsTUFBTUMsY0FBYyxHQUFJSixLQUFLLENBQUNLLEtBQUssQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBY0Msa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxVQUFVLENBQUNDLFVBQVU7UUFDdEdDLFNBQVMsR0FBSVYsS0FBSyxDQUFDSyxLQUFLLENBQUNNLFFBQVEsQ0FBQyxDQUFDLENBQWdCQyxZQUFZLENBQUMsQ0FBQztNQUVsRSxJQUFJLENBQUNQLEtB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
@@ -475,7 +475,7 @@ export default class MassEditDialogHelper {
475
475
  descriptionPath: getAssociatedTextPropertyPath(propertyDataModel.targetObject),
476
476
  textBinding: {
477
477
  expression: getTextBinding(propertyDataModel, {
478
- displayMode: getDisplayMode(targetProperty, propertyDataModel)
478
+ displayMode: getDisplayMode(targetProperty, propertyDataModel.targetEntityType)
479
479
  }) as CompiledBindingToolkitExpression,
480
480
  type:
481
481
  targetProperty.type === "Edm.DateTimeOffset" || targetProperty?.annotations?.Common?.IsTimezone
@@ -200,4 +200,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/controls/Any", "sap/fe
200
200
  _exports = MassEditField;
201
201
  return _exports;
202
202
  }, false);
203
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdEZpZWxkIiwicHJvcGVydGllcyIsImNvbnRleHQiLCJpc1ZhbGlkIiwic2VsZWN0IiwiY3JlYXRlU2VsZWN0IiwiZmllbGQiLCJjcmVhdGVGaWVsZCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0Q29udHJvbHMiLCJjb250cm9scyIsInB1c2giLCJnZXRGaWVsZFZhbHVlcyIsInNlbGVjdGVkS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJzZWxlY3RlZEl0ZW0iLCJzZWxlY3RJdGVtcyIsImZpbmQiLCJpdGVtIiwia2V5IiwidmFsdWVzIiwicHJvcGVydHlWYWx1ZSIsInByb3BlcnR5VW5pdFZhbHVlIiwiYmluZGluZ1ZhbHVlIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsInByb3BlcnR5SW5mbyIsInJlbGF0aXZlUGF0aCIsImdldFBhcmVudCIsImdldFZpc2libGUiLCJTcGVjaWZpY1NlbGVjdEtleXMiLCJDbGVhckZpZWxkVmFsdWVLZXkiLCJnZXRGb3JtYXR0ZWRWYWx1ZSIsIlJlcGxhY2VLZXkiLCJ1bml0T3JDdXJyZW5jeVZhbHVlIiwidW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJ1bmRlZmluZWQiLCJzZWxlY3RPcHRpb25zIiwidGV4dCIsIm5ld1ZhbHVlIiwibmV3UHJvcGVydHlWYWx1ZSIsIktlZXBLZXkiLCJpbnB1dFR5cGUiLCJpc1JlYWRPbmx5T25Db250ZXh0IiwicmVhZE9ubHlJbmZvIiwicmVhZE9ubHlFeHByZXNzaW9uIiwiaXNSZWFkT25seSIsImlzQ29uc3RhbnQiLCJjb21waWxlQ29uc3RhbnQiLCJhbnlPYmplY3QiLCJBbnkiLCJhbnlCb29sZWFuIiwiY29tcGlsZUV4cHJlc3Npb24iLCJzZXRNb2RlbCIsImdldE1vZGVsIiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nIiwiZ2V0RXh0ZXJuYWxWYWx1ZSIsImRlc3Ryb3kiLCJ2YWx1ZSIsImVtcHR5VmFsdWUiLCJfanN4IiwiRmllbGQiLCJjb250ZXh0UGF0aCIsIm1ldGFQYXRoIiwiaWQiLCJJRCIsImdlbmVyYXRlIiwiZWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJ2aXNpYmxlIiwiY2hhbmdlIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJiaW5kIiwiZXZlbnQiLCJGaWVsZFJ1bnRpbWVIZWxwZXIiLCJnZXRGaWVsZFN0YXRlT25DaGFuZ2UiLCJzdGF0ZSIsImlzRmllbGRWYWxpZCIsIlNlbGVjdCIsIml0ZW1zIiwibWFwIiwic2VsZWN0SXRlbSIsIkl0ZW0iLCJyZXF1aXJlZCIsImlzRmllbGRSZXF1aXJlZCIsImhhbmRsZVNlbGVjdGlvbkNoYW5nZSIsIndpZHRoIiwiYXJpYUxhYmVsbGVkQnkiLCJnZXRTZWxlY3RlZEl0ZW0iLCJiaW5kaW5nQ29udGV4dCIsImdldEtleSIsInNlbGVjdGVkVmFsdWUiLCJzZXRWaXNpYmxlIiwiaW5jbHVkZXMiLCJzZXRTZWxlY3RlZEtleSIsInVuaVByb3BlcnR5UGF0aCIsInNldFByb3BlcnR5IiwiZGVzY3JpcHRpb25QYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNYXNzRWRpdEZpZWxkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVDb25zdGFudCwgY29tcGlsZUV4cHJlc3Npb24sIGlzQ29uc3RhbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBBbnkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0ICogYXMgSUQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNYXNzRmllbGRQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvbWFzc0VkaXQvbGlicmFyeVwiO1xuaW1wb3J0IHsgU3BlY2lmaWNTZWxlY3RLZXlzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvbWFzc0VkaXQvbGlicmFyeVwiO1xuaW1wb3J0IFNlbGVjdCBmcm9tIFwic2FwL20vU2VsZWN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBJdGVtIGZyb20gXCJzYXAvdWkvY29yZS9JdGVtXCI7XG5pbXBvcnQgdHlwZSBGb3JtRWxlbWVudCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IEZpZWxkUnVudGltZUhlbHBlciBmcm9tIFwiLi4vLi4vZmllbGQvRmllbGRSdW50aW1lSGVscGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hc3NFZGl0RmllbGQge1xuXHRwcml2YXRlIHJlYWRvbmx5IHNlbGVjdDogU2VsZWN0O1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgZmllbGQ6IEZpZWxkIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgaXNWYWxpZCA9IHRydWU7XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yIG9mIHRoZSBNYXNzRWRpdCBmaWVsZC5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgVGhlIGZpZWxkIHByb3BlcnRpZXNcblx0ICogQHBhcmFtIGNvbnRleHQgRGVmaW5lcyB0aGUgT2RhdGEgbWV0YW1vZGVsIGNvbnRleHQgdXNlZCBpbiB0aGUgY3VycmVudCBNYXNzRWRpdCBkaWFsb2dcblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHB1YmxpYyByZWFkb25seSBwcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogQmFzZUNvbnRleHRcblx0KSB7XG5cdFx0dGhpcy5jb250ZXh0ID0gY29udGV4dDtcblx0XHR0aGlzLnNlbGVjdCA9IHRoaXMuY3JlYXRlU2VsZWN0KCk7XG5cdFx0dGhpcy5maWVsZCA9IHRoaXMuY3JlYXRlRmllbGQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpbm5lciBjb250cm9scy5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2xzXG5cdCAqL1xuXHRnZXRDb250cm9scygpOiBDb250cm9sW10ge1xuXHRcdGNvbnN0IGNvbnRyb2xzOiBDb250cm9sW10gPSBbdGhpcy5zZWxlY3RdO1xuXHRcdGlmICh0aGlzLmZpZWxkKSB7XG5cdFx0XHRjb250cm9scy5wdXNoKHRoaXMuZmllbGQpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29udHJvbHM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydHkgYW5kIHVuaXQgdmFsdWVzIG9mIHRoZSBtYXNzIGVkaXQgZmllbGQuXG5cdCAqIEByZXR1cm5zIFRoZSB2YWx1ZXNcblx0ICovXG5cdGdldEZpZWxkVmFsdWVzKCk6IFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+IHtcblx0XHRjb25zdCBzZWxlY3RlZEtleSA9IHRoaXMuc2VsZWN0LmdldFNlbGVjdGVkS2V5KCk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5wcm9wZXJ0aWVzLnNlbGVjdEl0ZW1zLmZpbmQoKGl0ZW0pID0+IHNlbGVjdGVkS2V5ID09PSBpdGVtLmtleSk7XG5cdFx0Y29uc3QgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPiA9IHt9O1xuXHRcdGxldCBwcm9wZXJ0eVZhbHVlOiBQcmltaXRpdmVUeXBlID0gXCJcIjtcblx0XHRsZXQgcHJvcGVydHlVbml0VmFsdWUgPSBcIlwiO1xuXHRcdGNvbnN0IGJpbmRpbmdWYWx1ZSA9IHRoaXMuZmllbGQ/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFByb3BlcnR5KHRoaXMucHJvcGVydGllcy5wcm9wZXJ0eUluZm8ucmVsYXRpdmVQYXRoKTtcblxuXHRcdGlmICghKHRoaXMuc2VsZWN0LmdldFBhcmVudCgpIGFzIEZvcm1FbGVtZW50IHwgdW5kZWZpbmVkKT8uZ2V0VmlzaWJsZSgpIHx8ICFzZWxlY3RlZEl0ZW0pIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdFx0c3dpdGNoIChzZWxlY3RlZEl0ZW0ua2V5KSB7XG5cdFx0XHRjYXNlIFNwZWNpZmljU2VsZWN0S2V5cy5DbGVhckZpZWxkVmFsdWVLZXk6XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldEZvcm1hdHRlZFZhbHVlKGJpbmRpbmdWYWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTcGVjaWZpY1NlbGVjdEtleXMuUmVwbGFjZUtleTpcblx0XHRcdFx0aWYgKHRoaXMuZmllbGQpIHtcblx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHQgKiBJZiB0aGUgdmFsdWUgb24gdGhlIGZpZWxkIGNvbWVzIGZyb20gYW4gZXhpc3RpbmcgZW50cnkgaW50byB0aGUgc2VsZWN0XG5cdFx0XHRcdFx0ICogdGhlIHZhbHVlIHRvIHVzZSBpcyBub3QgdGhlIG9uZSBpbnRvIHRoZSBiaW5kaW5nQ29udGV4dCBzaW5jZSBpdCBjb3VsZCBjb250YWluIHRoZSBkZXNjcmlwdGlvblxuXHRcdFx0XHRcdCAqIHNvIEZFIGhhcyB0byByZXRyaWV2ZSB0aGUgdmFsdWUgZnJvbSB0aGUgc2VsZWN0IG9wdGlvbi5cblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRjb25zdCB1bml0T3JDdXJyZW5jeVZhbHVlID0gdGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0PyB0aGlzLmZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFByb3BlcnR5KHRoaXMucHJvcGVydGllcy5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGgpXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRjb25zdCBzZWxlY3RPcHRpb25zID0gdGhpcy5wcm9wZXJ0aWVzLnNlbGVjdEl0ZW1zLmZpbmQoXG5cdFx0XHRcdFx0XHQoaXRlbSkgPT5cblx0XHRcdFx0XHRcdFx0KHRoaXMucHJvcGVydGllcy5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGggJiZcblx0XHRcdFx0XHRcdFx0XHRpdGVtLnByb3BlcnR5VmFsdWUgPT09IGJpbmRpbmdWYWx1ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdGl0ZW0udW5pdE9yQ3VycmVuY3lWYWx1ZSA9PT0gdW5pdE9yQ3VycmVuY3lWYWx1ZSkgfHxcblx0XHRcdFx0XHRcdFx0KCF0aGlzLnByb3BlcnRpZXMucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoICYmIGl0ZW0udGV4dCA9PT0gYmluZGluZ1ZhbHVlKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgbmV3VmFsdWUgPSBzZWxlY3RPcHRpb25zPy5wcm9wZXJ0eVZhbHVlID8/IGJpbmRpbmdWYWx1ZTtcblx0XHRcdFx0XHRjb25zdCBuZXdQcm9wZXJ0eVZhbHVlID0gc2VsZWN0T3B0aW9ucz8udW5pdE9yQ3VycmVuY3lWYWx1ZSA/PyB1bml0T3JDdXJyZW5jeVZhbHVlO1xuXHRcdFx0XHRcdGlmIChuZXdWYWx1ZSA9PT0gbnVsbCAmJiBuZXdQcm9wZXJ0eVZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge307IC8vIElmIHRoZSBGaWVsZCBpcyBlbXB0eSB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSB0aGUgdmFsdWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRoaXMuZ2V0Rm9ybWF0dGVkVmFsdWUobmV3VmFsdWUpO1xuXHRcdFx0XHRcdHByb3BlcnR5VW5pdFZhbHVlID0gbmV3UHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU3BlY2lmaWNTZWxlY3RLZXlzLktlZXBLZXk6XG5cdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh0aGlzLnByb3BlcnRpZXMuaW5wdXRUeXBlID09PSBcIkNoZWNrQm94XCIpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGhpcy5nZXRGb3JtYXR0ZWRWYWx1ZShzZWxlY3RlZEl0ZW0ua2V5KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHZhbHVlc1t0aGlzLnByb3BlcnRpZXMucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aF0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdGlmICh0aGlzLnByb3BlcnRpZXMucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoKSB7XG5cdFx0XHR2YWx1ZXNbdGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aF0gPSBwcm9wZXJ0eVVuaXRWYWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIHRhcmdldGVkIHByb3BlcnR5IGlzIHJlYWQgb25seSBvbiB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSByb3cgY29udGV4dFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZCBpcyByZWFkb25seSBvbiB0aGlzIGNvbnRleHQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBpc1JlYWRPbmx5T25Db250ZXh0KGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCByZWFkT25seUluZm8gPSB0aGlzLnByb3BlcnRpZXMucmVhZE9ubHlFeHByZXNzaW9uO1xuXHRcdGxldCBpc1JlYWRPbmx5ID0gZmFsc2U7XG5cdFx0aWYgKGlzQ29uc3RhbnQocmVhZE9ubHlJbmZvKSkge1xuXHRcdFx0aXNSZWFkT25seSA9IGNvbXBpbGVDb25zdGFudChyZWFkT25seUluZm8sIGZhbHNlLCB1bmRlZmluZWQsIHRydWUpIGFzIGJvb2xlYW47XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlIGV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiB2aWEgYSBVSTUgbWFuYWdlZCBvYmplY3QgaW5zdGFuY2UuXG5cdFx0XHRjb25zdCBhbnlPYmplY3QgPSBuZXcgQW55KHsgYW55Qm9vbGVhbjogY29tcGlsZUV4cHJlc3Npb24ocmVhZE9ubHlJbmZvKSB9KTtcblx0XHRcdGFueU9iamVjdC5zZXRNb2RlbChjb250ZXh0LmdldE1vZGVsKCkpO1xuXHRcdFx0YW55T2JqZWN0LnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0aXNSZWFkT25seSA9IChhbnlPYmplY3QuZ2V0QmluZGluZyhcImFueUJvb2xlYW5cIikgYXMgUHJvcGVydHlCaW5kaW5nKT8uZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzUmVhZE9ubHk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZm9ybWF0dGVkIHZhbHVlLlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHJhdyB2YWx1ZVxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHZhbHVlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGb3JtYXR0ZWRWYWx1ZSh2YWx1ZT86IFByaW1pdGl2ZVR5cGUpOiBQcmltaXRpdmVUeXBlIHtcblx0XHRpZiAodGhpcy5wcm9wZXJ0aWVzLmlucHV0VHlwZSA9PT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWUgPz8gdGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby5lbXB0eVZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSB0aGUgaW5uZXIgZmllbGQuXG5cdCAqIEByZXR1cm5zIFRoZSBmaWVsZCBpZiBuZWVkZWQsIHVuZGVmaW5lZCBvdGhlcndpc2UuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUZpZWxkKCk6IEZpZWxkIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5wcm9wZXJ0aWVzLmlucHV0VHlwZSAhPT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8RmllbGRcblx0XHRcdFx0XHRjb250ZXh0UGF0aD17dGhpcy5jb250ZXh0IGFzIHVua25vd24gYXMgc3RyaW5nfVxuXHRcdFx0XHRcdG1ldGFQYXRoPXt0aGlzLnByb3BlcnRpZXMucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aCBhcyB1bmtub3duIGFzIHN0cmluZ31cblx0XHRcdFx0XHRpZD17SUQuZ2VuZXJhdGUoW1wiTUVEX1wiLCB0aGlzLnByb3BlcnRpZXMucHJvcGVydHlJbmZvLmtleSwgXCJfRmllbGRcIl0pfVxuXHRcdFx0XHRcdGVkaXRNb2RlPXtGaWVsZEVkaXRNb2RlLkVkaXRhYmxlfVxuXHRcdFx0XHRcdHZpc2libGU9e2ZhbHNlfVxuXHRcdFx0XHRcdGNoYW5nZT17dGhpcy5oYW5kbGVGaWVsZENoYW5nZS5iaW5kKHRoaXMpfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZUZpZWxkQ2hhbmdlKGV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMuaXNWYWxpZCA9ICEhRmllbGRSdW50aW1lSGVscGVyLmdldEZpZWxkU3RhdGVPbkNoYW5nZShldmVudCBhcyBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pikuc3RhdGVbXG5cdFx0XHRcInZhbGlkaXR5XCJcblx0XHRdO1xuXHR9XG5cblx0cHVibGljIGlzRmllbGRWYWxpZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pc1ZhbGlkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSB0aGUgaW5uZXIgc2VsZWN0LlxuXHQgKiBAcmV0dXJucyBUaGUgc2VsZWN0LlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVTZWxlY3QoKTogU2VsZWN0IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFNlbGVjdFxuXHRcdFx0XHRpZD17SUQuZ2VuZXJhdGUoW1wiTUVEX1wiLCB0aGlzLnByb3BlcnRpZXMucHJvcGVydHlJbmZvLmtleV0pfVxuXHRcdFx0XHRpdGVtcz17dGhpcy5wcm9wZXJ0aWVzLnNlbGVjdEl0ZW1zLm1hcCgoc2VsZWN0SXRlbSkgPT4gKFxuXHRcdFx0XHRcdDxJdGVtIGtleT17c2VsZWN0SXRlbS5rZXl9IHRleHQ9e3NlbGVjdEl0ZW0udGV4dH0gLz5cblx0XHRcdFx0KSl9XG5cdFx0XHRcdHJlcXVpcmVkPXt0aGlzLnByb3BlcnRpZXMuaXNGaWVsZFJlcXVpcmVkfVxuXHRcdFx0XHRjaGFuZ2U9e3RoaXMuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyl9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbSUQuZ2VuZXJhdGUoW1wiTUVEX1wiLCB0aGlzLnByb3BlcnRpZXMucHJvcGVydHlJbmZvLmtleSwgXCJMYWJlbFwiXSldfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHNlbGVjdGlvbiBjaGFuZ2UgdGhyb3VnaCB0aGUgZHJvcCBkb3duLlxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVTZWxlY3Rpb25DaGFuZ2UoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3QuZ2V0U2VsZWN0ZWRJdGVtKCk7XG5cdFx0aWYgKHRoaXMuZmllbGQgJiYgc2VsZWN0ZWRJdGVtKSB7XG5cdFx0XHR0aGlzLmlzVmFsaWQgPSB0cnVlO1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB0aGlzLmZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBrZXkgPSBzZWxlY3RlZEl0ZW0uZ2V0S2V5KCk7XG5cdFx0XHRsZXQgc2VsZWN0ZWRWYWx1ZTtcblx0XHRcdHRoaXMuZmllbGQuc2V0VmlzaWJsZShcblx0XHRcdFx0IVtTcGVjaWZpY1NlbGVjdEtleXMuS2VlcEtleSwgU3BlY2lmaWNTZWxlY3RLZXlzLkNsZWFyRmllbGRWYWx1ZUtleV0uaW5jbHVkZXMoc2VsZWN0ZWRJdGVtLmdldEtleSgpIGFzIFNwZWNpZmljU2VsZWN0S2V5cylcblx0XHRcdCk7XG5cblx0XHRcdGlmICghKGtleSBpbiBTcGVjaWZpY1NlbGVjdEtleXMpKSB7XG5cdFx0XHRcdHNlbGVjdGVkVmFsdWUgPSB0aGlzLnByb3BlcnRpZXMuc2VsZWN0SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5rZXkgPT09IGtleSk7XG5cdFx0XHRcdHRoaXMuc2VsZWN0LnNldFNlbGVjdGVkS2V5KFNwZWNpZmljU2VsZWN0S2V5cy5SZXBsYWNlS2V5KTtcblx0XHRcdH1cblx0XHRcdC8qKlxuXHRcdFx0ICogU2V0cyB0aGUgdmFsdWUgb24gdGhlIGZpZWxkLlxuXHRcdFx0ICogVGhpcyB2YWx1ZSBoYXMgdG8gaW5jbHVkZSB0aGUgZGVzY3JpcHRpb24gaWYgbmVlZGVkLlxuXHRcdFx0ICovXG5cdFx0XHRpZiAoYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgdW5pUHJvcGVydHlQYXRoID0gdGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aDtcblx0XHRcdFx0YmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0dGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGgsXG5cdFx0XHRcdFx0dGhpcy5wcm9wZXJ0aWVzLmRlc2NyaXB0aW9uUGF0aCA/IHNlbGVjdGVkVmFsdWU/LnRleHQgOiBzZWxlY3RlZFZhbHVlPy5wcm9wZXJ0eVZhbHVlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICh1bmlQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eSh1bmlQcm9wZXJ0eVBhdGgsIHNlbGVjdGVkVmFsdWU/LnVuaXRPckN1cnJlbmN5VmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztNQW1CcUJBLGFBQWE7SUFPakM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDLFNBQUFBLGNBQ2lCQyxVQUErQixFQUM5QkMsT0FBb0IsRUFDcEM7TUFBQSxLQVZNQyxPQUFPLEdBQUcsSUFBSTtNQUFBLEtBUUxGLFVBQStCLEdBQS9CQSxVQUErQjtNQUFBLEtBQzlCQyxPQUFvQixHQUFwQkEsT0FBb0I7TUFFckMsSUFBSSxDQUFDQSxPQUFPLEdBQUdBLE9BQU87TUFDdEIsSUFBSSxDQUFDRSxNQUFNLEdBQUcsSUFBSSxDQUFDQyxZQUFZLENBQUMsQ0FBQztNQUNqQyxJQUFJLENBQUNDLEtBQUssR0FBRyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0lBSENDLFFBQUEsR0FBQVIsYUFBQTtJQUFBLElBQUFTLE1B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
203
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdEZpZWxkIiwicHJvcGVydGllcyIsImNvbnRleHQiLCJpc1ZhbGlkIiwic2VsZWN0IiwiY3JlYXRlU2VsZWN0IiwiZmllbGQiLCJjcmVhdGVGaWVsZCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0Q29udHJvbHMiLCJjb250cm9scyIsInB1c2giLCJnZXRGaWVsZFZhbHVlcyIsInNlbGVjdGVkS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJzZWxlY3RlZEl0ZW0iLCJzZWxlY3RJdGVtcyIsImZpbmQiLCJpdGVtIiwia2V5IiwidmFsdWVzIiwicHJvcGVydHlWYWx1ZSIsInByb3BlcnR5VW5pdFZhbHVlIiwiYmluZGluZ1ZhbHVlIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsInByb3BlcnR5SW5mbyIsInJlbGF0aXZlUGF0aCIsImdldFBhcmVudCIsImdldFZpc2libGUiLCJTcGVjaWZpY1NlbGVjdEtleXMiLCJDbGVhckZpZWxkVmFsdWVLZXkiLCJnZXRGb3JtYXR0ZWRWYWx1ZSIsIlJlcGxhY2VLZXkiLCJ1bml0T3JDdXJyZW5jeVZhbHVlIiwidW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJ1bmRlZmluZWQiLCJzZWxlY3RPcHRpb25zIiwidGV4dCIsIm5ld1ZhbHVlIiwibmV3UHJvcGVydHlWYWx1ZSIsIktlZXBLZXkiLCJpbnB1dFR5cGUiLCJpc1JlYWRPbmx5T25Db250ZXh0IiwicmVhZE9ubHlJbmZvIiwicmVhZE9ubHlFeHByZXNzaW9uIiwiaXNSZWFkT25seSIsImlzQ29uc3RhbnQiLCJjb21waWxlQ29uc3RhbnQiLCJhbnlPYmplY3QiLCJBbnkiLCJhbnlCb29sZWFuIiwiY29tcGlsZUV4cHJlc3Npb24iLCJzZXRNb2RlbCIsImdldE1vZGVsIiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nIiwiZ2V0RXh0ZXJuYWxWYWx1ZSIsImRlc3Ryb3kiLCJ2YWx1ZSIsImVtcHR5VmFsdWUiLCJfanN4IiwiRmllbGQiLCJjb250ZXh0UGF0aCIsIm1ldGFQYXRoIiwiaWQiLCJJRCIsImdlbmVyYXRlIiwiZWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJ2aXNpYmxlIiwiY2hhbmdlIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJiaW5kIiwiZXZlbnQiLCJGaWVsZFJ1bnRpbWVIZWxwZXIiLCJnZXRGaWVsZFN0YXRlT25DaGFuZ2UiLCJzdGF0ZSIsImlzRmllbGRWYWxpZCIsIlNlbGVjdCIsIml0ZW1zIiwibWFwIiwic2VsZWN0SXRlbSIsIkl0ZW0iLCJyZXF1aXJlZCIsImlzRmllbGRSZXF1aXJlZCIsImhhbmRsZVNlbGVjdGlvbkNoYW5nZSIsIndpZHRoIiwiYXJpYUxhYmVsbGVkQnkiLCJnZXRTZWxlY3RlZEl0ZW0iLCJiaW5kaW5nQ29udGV4dCIsImdldEtleSIsInNlbGVjdGVkVmFsdWUiLCJzZXRWaXNpYmxlIiwiaW5jbHVkZXMiLCJzZXRTZWxlY3RlZEtleSIsInVuaVByb3BlcnR5UGF0aCIsInNldFByb3BlcnR5IiwiZGVzY3JpcHRpb25QYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNYXNzRWRpdEZpZWxkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVDb25zdGFudCwgY29tcGlsZUV4cHJlc3Npb24sIGlzQ29uc3RhbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBBbnkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0ICogYXMgSUQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNYXNzRmllbGRQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvbWFzc0VkaXQvbGlicmFyeVwiO1xuaW1wb3J0IHsgU3BlY2lmaWNTZWxlY3RLZXlzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvbWFzc0VkaXQvbGlicmFyeVwiO1xuaW1wb3J0IFNlbGVjdCBmcm9tIFwic2FwL20vU2VsZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgSXRlbSBmcm9tIFwic2FwL3VpL2NvcmUvSXRlbVwiO1xuaW1wb3J0IHR5cGUgRm9ybUVsZW1lbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtRWxlbWVudFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Qcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4uLy4uL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXNzRWRpdEZpZWxkIHtcblx0cHJpdmF0ZSByZWFkb25seSBzZWxlY3Q6IFNlbGVjdDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGZpZWxkOiBGaWVsZCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGlzVmFsaWQgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RvciBvZiB0aGUgTWFzc0VkaXQgZmllbGQuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzIFRoZSBmaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSBjb250ZXh0IERlZmluZXMgdGhlIE9kYXRhIG1ldGFtb2RlbCBjb250ZXh0IHVzZWQgaW4gdGhlIGN1cnJlbnQgTWFzc0VkaXQgZGlhbG9nXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRwdWJsaWMgcmVhZG9ubHkgcHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllcyxcblx0XHRwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IEJhc2VDb250ZXh0XG5cdCkge1xuXHRcdHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cdFx0dGhpcy5zZWxlY3QgPSB0aGlzLmNyZWF0ZVNlbGVjdCgpO1xuXHRcdHRoaXMuZmllbGQgPSB0aGlzLmNyZWF0ZUZpZWxkKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaW5uZXIgY29udHJvbHMuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sc1xuXHQgKi9cblx0Z2V0Q29udHJvbHMoKTogQ29udHJvbFtdIHtcblx0XHRjb25zdCBjb250cm9sczogQ29udHJvbFtdID0gW3RoaXMuc2VsZWN0XTtcblx0XHRpZiAodGhpcy5maWVsZCkge1xuXHRcdFx0Y29udHJvbHMucHVzaCh0aGlzLmZpZWxkKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnR5IGFuZCB1bml0IHZhbHVlcyBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWVzXG5cdCAqL1xuXHRnZXRGaWVsZFZhbHVlcygpOiBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPiB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRLZXkgPSB0aGlzLnNlbGVjdC5nZXRTZWxlY3RlZEtleSgpO1xuXHRcdGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMucHJvcGVydGllcy5zZWxlY3RJdGVtcy5maW5kKChpdGVtKSA9PiBzZWxlY3RlZEtleSA9PT0gaXRlbS5rZXkpO1xuXHRcdGNvbnN0IHZhbHVlczogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT4gPSB7fTtcblx0XHRsZXQgcHJvcGVydHlWYWx1ZTogUHJpbWl0aXZlVHlwZSA9IFwiXCI7XG5cdFx0bGV0IHByb3BlcnR5VW5pdFZhbHVlID0gXCJcIjtcblx0XHRjb25zdCBiaW5kaW5nVmFsdWUgPSB0aGlzLmZpZWxkPy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQcm9wZXJ0eSh0aGlzLnByb3BlcnRpZXMucHJvcGVydHlJbmZvLnJlbGF0aXZlUGF0aCk7XG5cblx0XHRpZiAoISh0aGlzLnNlbGVjdC5nZXRQYXJlbnQoKSBhcyBGb3JtRWxlbWVudCB8IHVuZGVmaW5lZCk/LmdldFZpc2libGUoKSB8fCAhc2VsZWN0ZWRJdGVtKSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXHRcdHN3aXRjaCAoc2VsZWN0ZWRJdGVtLmtleSkge1xuXHRcdFx0Y2FzZSBTcGVjaWZpY1NlbGVjdEtleXMuQ2xlYXJGaWVsZFZhbHVlS2V5OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGhpcy5nZXRGb3JtYXR0ZWRWYWx1ZShiaW5kaW5nVmFsdWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU3BlY2lmaWNTZWxlY3RLZXlzLlJlcGxhY2VLZXk6XG5cdFx0XHRcdGlmICh0aGlzLmZpZWxkKSB7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogSWYgdGhlIHZhbHVlIG9uIHRoZSBmaWVsZCBjb21lcyBmcm9tIGFuIGV4aXN0aW5nIGVudHJ5IGludG8gdGhlIHNlbGVjdFxuXHRcdFx0XHRcdCAqIHRoZSB2YWx1ZSB0byB1c2UgaXMgbm90IHRoZSBvbmUgaW50byB0aGUgYmluZGluZ0NvbnRleHQgc2luY2UgaXQgY291bGQgY29udGFpbiB0aGUgZGVzY3JpcHRpb25cblx0XHRcdFx0XHQgKiBzbyBGRSBoYXMgdG8gcmV0cmlldmUgdGhlIHZhbHVlIGZyb20gdGhlIHNlbGVjdCBvcHRpb24uXG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lWYWx1ZSA9IHRoaXMucHJvcGVydGllcy5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGhcblx0XHRcdFx0XHRcdD8gdGhpcy5maWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQcm9wZXJ0eSh0aGlzLnByb3BlcnRpZXMucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IHRoaXMucHJvcGVydGllcy5zZWxlY3RJdGVtcy5maW5kKFxuXHRcdFx0XHRcdFx0KGl0ZW0pID0+XG5cdFx0XHRcdFx0XHRcdCh0aGlzLnByb3BlcnRpZXMucHJvcGVydHlJbmZvLnVuaXRPckN1cnJlbmN5UHJvcGVydHlQYXRoICYmXG5cdFx0XHRcdFx0XHRcdFx0aXRlbS5wcm9wZXJ0eVZhbHVlID09PSBiaW5kaW5nVmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRpdGVtLnVuaXRPckN1cnJlbmN5VmFsdWUgPT09IHVuaXRPckN1cnJlbmN5VmFsdWUpIHx8XG5cdFx0XHRcdFx0XHRcdCghdGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aCAmJiBpdGVtLnRleHQgPT09IGJpbmRpbmdWYWx1ZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IG5ld1ZhbHVlID0gc2VsZWN0T3B0aW9ucz8ucHJvcGVydHlWYWx1ZSA/PyBiaW5kaW5nVmFsdWU7XG5cdFx0XHRcdFx0Y29uc3QgbmV3UHJvcGVydHlWYWx1ZSA9IHNlbGVjdE9wdGlvbnM/LnVuaXRPckN1cnJlbmN5VmFsdWUgPz8gdW5pdE9yQ3VycmVuY3lWYWx1ZTtcblx0XHRcdFx0XHRpZiAobmV3VmFsdWUgPT09IG51bGwgJiYgbmV3UHJvcGVydHlWYWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHt9OyAvLyBJZiB0aGUgRmllbGQgaXMgZW1wdHkgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgdGhlIHZhbHVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldEZvcm1hdHRlZFZhbHVlKG5ld1ZhbHVlKTtcblx0XHRcdFx0XHRwcm9wZXJ0eVVuaXRWYWx1ZSA9IG5ld1Byb3BlcnR5VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNwZWNpZmljU2VsZWN0S2V5cy5LZWVwS2V5OlxuXHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodGhpcy5wcm9wZXJ0aWVzLmlucHV0VHlwZSA9PT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRoaXMuZ2V0Rm9ybWF0dGVkVmFsdWUoc2VsZWN0ZWRJdGVtLmtleSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHR2YWx1ZXNbdGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGhdID0gcHJvcGVydHlWYWx1ZTtcblx0XHRpZiAodGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby51bml0T3JDdXJyZW5jeVByb3BlcnR5UGF0aCkge1xuXHRcdFx0dmFsdWVzW3RoaXMucHJvcGVydGllcy5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGhdID0gcHJvcGVydHlVbml0VmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSB0YXJnZXRlZCBwcm9wZXJ0eSBpcyByZWFkIG9ubHkgb24gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgcm93IGNvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGQgaXMgcmVhZG9ubHkgb24gdGhpcyBjb250ZXh0LCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRwdWJsaWMgaXNSZWFkT25seU9uQ29udGV4dChjb250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcmVhZE9ubHlJbmZvID0gdGhpcy5wcm9wZXJ0aWVzLnJlYWRPbmx5RXhwcmVzc2lvbjtcblx0XHRsZXQgaXNSZWFkT25seSA9IGZhbHNlO1xuXHRcdGlmIChpc0NvbnN0YW50KHJlYWRPbmx5SW5mbykpIHtcblx0XHRcdGlzUmVhZE9ubHkgPSBjb21waWxlQ29uc3RhbnQocmVhZE9ubHlJbmZvLCBmYWxzZSwgdW5kZWZpbmVkLCB0cnVlKSBhcyBib29sZWFuO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBXZSBldmFsdWF0ZSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gdmlhIGEgVUk1IG1hbmFnZWQgb2JqZWN0IGluc3RhbmNlLlxuXHRcdFx0Y29uc3QgYW55T2JqZWN0ID0gbmV3IEFueSh7IGFueUJvb2xlYW46IGNvbXBpbGVFeHByZXNzaW9uKHJlYWRPbmx5SW5mbykgfSk7XG5cdFx0XHRhbnlPYmplY3Quc2V0TW9kZWwoY29udGV4dC5nZXRNb2RlbCgpKTtcblx0XHRcdGFueU9iamVjdC5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0KTtcblx0XHRcdGlzUmVhZE9ubHkgPSAoYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlCb29sZWFuXCIpIGFzIFByb3BlcnR5QmluZGluZyk/LmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHJldHVybiBpc1JlYWRPbmx5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZvcm1hdHRlZCB2YWx1ZS5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSByYXcgdmFsdWVcblx0ICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCB2YWx1ZS5cblx0ICovXG5cdHByaXZhdGUgZ2V0Rm9ybWF0dGVkVmFsdWUodmFsdWU/OiBQcmltaXRpdmVUeXBlKTogUHJpbWl0aXZlVHlwZSB7XG5cdFx0aWYgKHRoaXMucHJvcGVydGllcy5pbnB1dFR5cGUgPT09IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSBcInRydWVcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlID8/IHRoaXMucHJvcGVydGllcy5wcm9wZXJ0eUluZm8uZW1wdHlWYWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgdGhlIGlubmVyIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUaGUgZmllbGQgaWYgbmVlZGVkLCB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGaWVsZCgpOiBGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMucHJvcGVydGllcy5pbnB1dFR5cGUgIT09IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEZpZWxkXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e3RoaXMuY29udGV4dCBhcyB1bmtub3duIGFzIHN0cmluZ31cblx0XHRcdFx0XHRtZXRhUGF0aD17dGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby5yZWxhdGl2ZVBhdGggYXMgdW5rbm93biBhcyBzdHJpbmd9XG5cdFx0XHRcdFx0aWQ9e0lELmdlbmVyYXRlKFtcIk1FRF9cIiwgdGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby5rZXksIFwiX0ZpZWxkXCJdKX1cblx0XHRcdFx0XHRlZGl0TW9kZT17RmllbGRFZGl0TW9kZS5FZGl0YWJsZX1cblx0XHRcdFx0XHR2aXNpYmxlPXtmYWxzZX1cblx0XHRcdFx0XHRjaGFuZ2U9e3RoaXMuaGFuZGxlRmllbGRDaGFuZ2UuYmluZCh0aGlzKX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVGaWVsZENoYW5nZShldmVudDogRXZlbnRUeXBlPHR5cGVvZiBGaWVsZC5wcm90b3R5cGUuY2hhbmdlPik6IHZvaWQge1xuXHRcdHRoaXMuaXNWYWxpZCA9ICEhRmllbGRSdW50aW1lSGVscGVyLmdldEZpZWxkU3RhdGVPbkNoYW5nZShldmVudCkuc3RhdGVbXCJ2YWxpZGl0eVwiXTtcblx0fVxuXG5cdHB1YmxpYyBpc0ZpZWxkVmFsaWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXNWYWxpZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgdGhlIGlubmVyIHNlbGVjdC5cblx0ICogQHJldHVybnMgVGhlIHNlbGVjdC5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlU2VsZWN0KCk6IFNlbGVjdCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxTZWxlY3Rcblx0XHRcdFx0aWQ9e0lELmdlbmVyYXRlKFtcIk1FRF9cIiwgdGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby5rZXldKX1cblx0XHRcdFx0aXRlbXM9e3RoaXMucHJvcGVydGllcy5zZWxlY3RJdGVtcy5tYXAoKHNlbGVjdEl0ZW0pID0+IChcblx0XHRcdFx0XHQ8SXRlbSBrZXk9e3NlbGVjdEl0ZW0ua2V5fSB0ZXh0PXtzZWxlY3RJdGVtLnRleHR9IC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0XHRyZXF1aXJlZD17dGhpcy5wcm9wZXJ0aWVzLmlzRmllbGRSZXF1aXJlZH1cblx0XHRcdFx0Y2hhbmdlPXt0aGlzLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpfVxuXHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W0lELmdlbmVyYXRlKFtcIk1FRF9cIiwgdGhpcy5wcm9wZXJ0aWVzLnByb3BlcnR5SW5mby5rZXksIFwiTGFiZWxcIl0pXX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBzZWxlY3Rpb24gY2hhbmdlIHRocm91Z2ggdGhlIGRyb3AgZG93bi5cblx0ICovXG5cdHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKCk6IHZvaWQge1xuXHRcdGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0LmdldFNlbGVjdGVkSXRlbSgpO1xuXHRcdGlmICh0aGlzLmZpZWxkICYmIHNlbGVjdGVkSXRlbSkge1xuXHRcdFx0dGhpcy5pc1ZhbGlkID0gdHJ1ZTtcblx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdGhpcy5maWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0Y29uc3Qga2V5ID0gc2VsZWN0ZWRJdGVtLmdldEtleSgpO1xuXHRcdFx0bGV0IHNlbGVjdGVkVmFsdWU7XG5cdFx0XHR0aGlzLmZpZWxkLnNldFZpc2libGUoXG5cdFx0XHRcdCFbU3BlY2lmaWNTZWxlY3RLZXlzLktlZXBLZXksIFNwZWNpZmljU2VsZWN0S2V5cy5DbGVhckZpZWxkVmFsdWVLZXldLmluY2x1ZGVzKHNlbGVjdGVkSXRlbS5nZXRLZXkoKSBhcyBTcGVjaWZpY1NlbGVjdEtleXMpXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoIShrZXkgaW4gU3BlY2lmaWNTZWxlY3RLZXlzKSkge1xuXHRcdFx0XHRzZWxlY3RlZFZhbHVlID0gdGhpcy5wcm9wZXJ0aWVzLnNlbGVjdEl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0ua2V5ID09PSBrZXkpO1xuXHRcdFx0XHR0aGlzLnNlbGVjdC5zZXRTZWxlY3RlZEtleShTcGVjaWZpY1NlbGVjdEtleXMuUmVwbGFjZUtleSk7XG5cdFx0XHR9XG5cdFx0XHQvKipcblx0XHRcdCAqIFNldHMgdGhlIHZhbHVlIG9uIHRoZSBmaWVsZC5cblx0XHRcdCAqIFRoaXMgdmFsdWUgaGFzIHRvIGluY2x1ZGUgdGhlIGRlc2NyaXB0aW9uIGlmIG5lZWRlZC5cblx0XHRcdCAqL1xuXHRcdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHVuaVByb3BlcnR5UGF0aCA9IHRoaXMucHJvcGVydGllcy5wcm9wZXJ0eUluZm8udW5pdE9yQ3VycmVuY3lQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdHRoaXMucHJvcGVydGllcy5wcm9wZXJ0eUluZm8ucmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRcdHRoaXMucHJvcGVydGllcy5kZXNjcmlwdGlvblBhdGggPyBzZWxlY3RlZFZhbHVlPy50ZXh0IDogc2VsZWN0ZWRWYWx1ZT8ucHJvcGVydHlWYWx1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodW5pUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkodW5pUHJvcGVydHlQYXRoLCBzZWxlY3RlZFZhbHVlPy51bml0T3JDdXJyZW5jeVZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7TUFrQnFCQSxhQUFhO0lBT2pDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQyxTQUFBQSxjQUNpQkMsVUFBK0IsRUFDOUJDLE9BQW9CLEVBQ3BDO01BQUEsS0FWTUMsT0FBTyxHQUFHLElBQUk7TUFBQSxLQVFMRixVQUErQixHQUEvQkEsVUFBK0I7TUFBQSxLQUM5QkMsT0FBb0IsR0FBcEJBLE9BQW9CO01BRXJDLElBQUksQ0FBQ0EsT0FBTyxHQUFHQSxPQUFPO01BQ3RCLElBQUksQ0FBQ0UsTUFBTSxHQUFHLElBQUksQ0FBQ0MsWUFBWSxDQUFDLENBQUM7TUFDakMsSUFBSSxDQUFDQyxLQUFLLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUMsQ0FBQztJQUNoQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtJQUhDQyxRQUFBLEdBQUFSLGFBQUE7SUFBQSxJQUFBUyxNQUFBLEdBQUFULGFBQUEsQ0FBQVUsU0FBQTtJQUFBRCxNQUFBLENBSUFFLFdBQVcsR0FBWCxTQUFBQSxXQUFXQSxDQUFBLEVBQWM7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
@@ -6,15 +6,14 @@ import Field from "sap/fe/macros/Field";
6
6
  import type { MassFieldProperties } from "sap/fe/macros/table/massEdit/library";
7
7
  import { SpecificSelectKeys } from "sap/fe/macros/table/massEdit/library";
8
8
  import Select from "sap/m/Select";
9
- import type UI5Event from "sap/ui/base/Event";
10
9
  import type Control from "sap/ui/core/Control";
11
10
  import Item from "sap/ui/core/Item";
12
11
  import type FormElement from "sap/ui/layout/form/FormElement";
13
- import type { Field$ChangeEvent } from "sap/ui/mdc/Field";
14
12
  import FieldEditMode from "sap/ui/mdc/enums/FieldEditMode";
15
13
  import type BaseContext from "sap/ui/model/Context";
16
14
  import type PropertyBinding from "sap/ui/model/PropertyBinding";
17
15
  import type Context from "sap/ui/model/odata/v4/Context";
16
+ import type { EventType } from "../../../../../../../../types/extension_types";
18
17
  import FieldRuntimeHelper from "../../field/FieldRuntimeHelper";
19
18
 
20
19
  export default class MassEditField {
@@ -164,10 +163,8 @@ export default class MassEditField {
164
163
  }
165
164
  }
166
165
 
167
- private handleFieldChange(event: Field$ChangeEvent): void {
168
- this.isValid = !!FieldRuntimeHelper.getFieldStateOnChange(event as Field$ChangeEvent & UI5Event<{ isValid: boolean }>).state[
169
- "validity"
170
- ];
166
+ private handleFieldChange(event: EventType<typeof Field.prototype.change>): void {
167
+ this.isValid = !!FieldRuntimeHelper.getFieldStateOnChange(event).state["validity"];
171
168
  }
172
169
 
173
170
  public isFieldValid(): boolean {