@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
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/CommonUtils", "sap/fe/core/TemplateModel", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/ListReport/FilterBar", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/PropertyFormatters", "sap/fe/core/type/EDM", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/internal/valuehelp/ValueHelpTemplating", "sap/fe/macros/mdc/adapter/StateHelper", "sap/ui/mdc/FilterBarDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/model/json/JSONModel"], function (Log, mergeObjects, jsx, CommonUtils, TemplateModel, MetaModelConverter, FilterBar, Key, MetaModelFunction, ModelHelper, ResourceModelHelper, StableIdHelper, PropertyFormatters, EDM, CommonHelper, DelegateUtil, FieldHelper, FilterUtils, ValueHelpTemplating, StateHelper, FilterBarDelegate, TypeMap, JSONModel) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/CommonUtils", "sap/fe/core/TemplateModel", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/filter/FilterRestrictions", "sap/fe/core/converters/controls/ListReport/FilterBar", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/PropertyFormatters", "sap/fe/core/type/EDM", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/internal/valuehelp/ValueHelpTemplating", "sap/fe/macros/mdc/adapter/StateHelper", "sap/ui/mdc/FilterBarDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/model/json/JSONModel"], function (Log, mergeObjects, jsx, CommonUtils, TemplateModel, MetaModelConverter, FilterRestrictions, FilterBar, Key, MetaModelFunction, ModelHelper, ResourceModelHelper, StableIdHelper, PropertyFormatters, EDM, CommonHelper, DelegateUtil, FieldHelper, FilterUtils, ValueHelpTemplating, StateHelper, FilterBarDelegate, TypeMap, JSONModel) {
6
6
  "use strict";
7
7
 
8
8
  var getValueHelpTemplate = ValueHelpTemplating.getValueHelpTemplate;
@@ -441,7 +441,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/j
441
441
  aFetchedProperties = aFetchedProperties.filter(function (oProp) {
442
442
  return processedFieldsKeys.includes(oProp.key);
443
443
  });
444
- const oFR = CommonUtils.getFilterRestrictionsByPath(sEntitySetPath, oMetaModel),
444
+ const dataModel = getInvolvedDataModelObjects(oMetaModel.getContext(sEntitySetPath));
445
+ const oFR = FilterRestrictions.getFilterRestrictionsByDataModel(dataModel),
445
446
  mAllowedExpressions = oFR.FilterAllowedExpressions;
446
447
  //Object.keys(processedFields).forEach(function (sFilterFieldKey: string) {
447
448
  processedFields.forEach(function (oProp, iFilterFieldIndex) {
@@ -715,4 +716,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/j
715
716
  };
716
717
  return ODataFilterBarDelegate;
717
718
  }, false);
718
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YUZpbHRlckJhckRlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiRmlsdGVyQmFyRGVsZWdhdGUiLCJhcGlWZXJzaW9uIiwiRURJVF9TVEFURV9QUk9QRVJUWV9OQU1FIiwiU0VBUkNIX1BST1BFUlRZX05BTUUiLCJWQUxVRV9IRUxQX1RZUEUiLCJGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVkiLCJfdGVtcGxhdGVFZGl0U3RhdGUiLCJzSWRQcmVmaXgiLCJtZXRhTW9kZWwiLCJvTW9kaWZpZXIiLCJvVGhpcyIsIkpTT05Nb2RlbCIsImlkIiwiaXNEcmFmdENvbGxhYm9yYXRpdmUiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwidGhpcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibW9kZWxzIiwiRGVsZWdhdGVVdGlsIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJ1bmRlZmluZWQiLCJmaW5hbGx5IiwiZGVzdHJveSIsIl90ZW1wbGF0ZUN1c3RvbUZpbHRlciIsIm9GaWx0ZXJCYXIiLCJvU2VsZWN0aW9uRmllbGRJbmZvIiwib01ldGFNb2RlbCIsInNFbnRpdHlUeXBlUGF0aCIsImdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXIiLCJhbm5vdGF0aW9uUGF0aCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiZGF0YU1vZGVsUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRvY3VtZW50UmVmVGV4dCIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRG9jdW1lbnRhdGlvblJlZiIsInRvU3RyaW5nIiwib0l0ZW1Nb2RlbCIsIlRlbXBsYXRlTW9kZWwiLCJjb250ZXh0UGF0aCIsIml0ZW0iLCJvVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsIm9PcHRpb25zIiwiY29udHJvbGxlciIsInZpZXciLCJfZ2V0UHJvcGVydHlQYXRoIiwic0NvbmRpdGlvblBhdGgiLCJGaWx0ZXJVdGlscyIsImdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoIiwiX2ZpbmRTZWxlY3Rpb25GaWVsZCIsImFTZWxlY3Rpb25GaWVsZHMiLCJzRmxleE5hbWUiLCJmaW5kIiwib1NlbGVjdGlvbkZpZWxkIiwiY29uZGl0aW9uUGF0aCIsInJlcGxhY2VBbGwiLCJhdmFpbGFiaWxpdHkiLCJfZ2VuZXJhdGVJZFByZWZpeCIsInNGaWx0ZXJCYXJJZCIsInNDb250cm9sVHlwZSIsInNOYXZpZ2F0aW9uUHJlZml4IiwiZ2VuZXJhdGUiLCJfdGVtcGxhdGVWYWx1ZUhlbHAiLCJvU2V0dGluZ3MiLCJvUGFyYW1ldGVycyIsImlkUHJlZml4Iiwic1ZoSWRQcmVmaXgiLCJjb25kaXRpb25Nb2RlbCIsIm5hdmlnYXRpb25QcmVmaXgiLCJmaWx0ZXJGaWVsZFZhbHVlSGVscCIsInVzZVNlbWFudGljRGF0ZVJhbmdlIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwibWV0YVBhdGgiLCJ1c2VNdWx0aVZhbHVlRmllbGQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJjb2xsYWJvcmF0aW9uRW5hYmxlZCIsInJlcXVlc3RHcm91cElkIiwianNvbk1vZGVsIiwibWVyZ2VPYmplY3RzIiwidGFyZ2V0UGF0aCIsIkZpZWxkSGVscGVyIiwidmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZCIsImlzWE1MIiwidmFsdWVIZWxwWE1MU3RyaW5nIiwianN4IiwicmVuZGVyQXNYTUwiLCJnZXRWYWx1ZUhlbHBUZW1wbGF0ZSIsImdldE1vZGVsIiwidmFsdWVIZWxwWE1MIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInRoZW4iLCJhVkhFbGVtZW50cyIsInNBZ2dyZWdhdGlvbk5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiZWx0IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJvQ29udHJvbCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJ2YWx1ZUhlbHAiLCJfYWRkWE1MQ3VzdG9tRmlsdGVyRmllbGQiLCJzUHJvcGVydHlQYXRoIiwiYURlcGVuZGVudHMiLCJnZXRBZ2dyZWdhdGlvbiIsImkiLCJsZW5ndGgiLCJvRmlsdGVyRmllbGQiLCJpc0EiLCJzRGF0YVByb3BlcnR5IiwiZ2V0UHJvcGVydHlLZXkiLCJzRmlsdGVyRmllbGRJZCIsImdldElkIiwiaW5kZXhPZiIsIl90ZW1wbGF0ZUZpbHRlckZpZWxkIiwic0luRmlsdGVyQmFySWQiLCJwYWdlTW9kZWwiLCJ2aElkUHJlZml4IiwicHJvcGVydHlQYXRoIiwic1Byb3BlcnR5TmFtZSIsInNldHRpbmdzIiwidmlzdWFsRmlsdGVyIiwiZWRpdE1vZGUiLCJsYWJlbCIsIm9WaXN1YWxGaWx0ZXIiLCJjb252ZXJ0ZXJDb250ZXh0IiwiX2FkZFByb3BlcnR5SW5mbyIsIm9QYXJlbnRDb250cm9sIiwibVByb3BlcnR5QmFnIiwic1Byb3BlcnR5SW5mb05hbWUiLCJzUHJvcGVydHlJbmZvS2V5IiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsInJlcGxhY2UiLCJtb2RpZmllciIsImRlbGVnYXRlIiwiZ2V0UHJvcGVydHkiLCJhUHJvcGVydHlJbmZvIiwiaGFzUHJvcGVydHlJbmZvIiwic29tZSIsInByb3AiLCJrZXkiLCJuYW1lIiwiZW50aXR5VHlwZVBhdGgiLCJwYXlsb2FkIiwiY3JlYXRlQ29udmVydGVyQ29udGV4dCIsImFwcENvbXBvbmVudCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJnZXRGaWx0ZXJGaWVsZCIsInByb3BlcnR5SW5mbyIsImJ1aWxkUHJvcGVyeUluZm8iLCJfdXBkYXRlUHJvcGVydHlJbmZvIiwiZXJyb3JNc2ciLCJ3YXJuaW5nIiwicHJvcGVydHlCYWciLCJwYXJlbnRDb250cm9sIiwicHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyIiwicHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyT2JqIiwiSlNPTiIsInBhcnNlIiwicHVzaCIsInN0cmluZ2lmeSIsImN1c3RvbURhdGFOb2RlIiwicmV0cmlldmVDdXN0b21EYXRhTm9kZSIsInNldEF0dHJpYnV0ZSIsIl9wcm9wZXJ0eUluZm8iLCJmb3JtYXRQcm9wZXJ0eUluZm8iLCJzZXRQcm9wZXJ0eSIsImFkZEl0ZW0iLCJfYWRkUDEzbkl0ZW0iLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsInRhcmdldHMiLCJfYWRkRmxleEl0ZW0iLCJyZW1vdmVJdGVtIiwib0ZpbHRlckZpZWxkUHJvcGVydHkiLCJkb1JlbW92ZUl0ZW0iLCJmaWx0ZXJGaWVsZFByb3BlcnR5IiwiZGF0YSIsImFkZENvbmRpdGlvbiIsInJlbW92ZUNvbmRpdGlvbiIsInByb3BlcnR5SW5mb0Zyb21DRCIsImNsZWFyRmlsdGVycyIsIm9GaWx0ZXJDb250cm9sIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwiU3RhdGVIZWxwZXIiLCJjbGVhckZpbHRlclZhbHVlcyIsImZldGNoTW9kZWwiLCJvTW9kZWwiLCJmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJvRW50aXR5VHlwZSIsImdldE9iamVjdCIsImluY2x1ZGVIaWRkZW4iLCJvQ29udmVydGVyQ29udGV4dCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0RW50aXR5U2V0UGF0aCIsIm1GaWx0ZXJGaWVsZHMiLCJnZXRDb252ZXJ0ZWRGaWx0ZXJGaWVsZHMiLCJnZXRBcHBDb21wb25lbnQiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJvRmlsdGVyRmllbGRJbmZvIiwic0Fubm90YXRpb25QYXRoIiwidGVtcGxhdGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsImdldENvbnZlcnRlZFR5cGVzIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJzVGFyZ2V0UHJvcGVydHlQcmVmaXgiLCJDb21tb25IZWxwZXIiLCJnZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aCIsInNQcm9wZXJ0eSIsInNlbGVjdGlvbkZpZWxkcyIsIlVJIiwiU2VsZWN0aW9uRmllbGRzIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiX2lzRmlsdGVyQWRhcHRhYmxlIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJhUGFyYW1ldGVyRmllbGRzIiwicHJvY2Vzc2VkRmllbGRzIiwicHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyIsInByb2Nlc3NlZEZpZWxkc0tleXMiLCJvUHJvcHMiLCJmaWx0ZXIiLCJvUHJvcCIsImluY2x1ZGVzIiwib0ZSIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsImlGaWx0ZXJGaWVsZEluZGV4Iiwib1NlbEZpZWxkIiwiZ3JvdXAiLCJncm91cExhYmVsIiwicGF0aCIsInRvb2x0aXAiLCJyZW1vdmVGcm9tQXBwU3RhdGUiLCJoYXNWYWx1ZUhlbHAiLCJvUHJvcGVydHkiLCJvUHJvcGVydHlDb250ZXh0IiwiYlJlbW92ZUZyb21BcHBTdGF0ZSIsIm9GaWx0ZXJEZWZhdWx0VmFsdWVBbm5vdGF0aW9uIiwib0ZpbHRlckRlZmF1bHRWYWx1ZSIsImdldE1vZGVsVHlwZSIsIiRUeXBlIiwiZGVmYXVsdEZpbHRlckNvbmRpdGlvbnMiLCJmaWVsZFBhdGgiLCJvcGVyYXRvciIsInZhbHVlcyIsImZpbHRlckV4cHJlc3Npb24iLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwidmlzaWJsZSIsInByb3BJbmZvIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJ0eXBlQ29uZmlnIiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsImdldExvY2FsaXplZFRleHQiLCJpc1BhcmFtZXRlciIsInNldEN1c3RvbURhdGEiLCJnZXRMaW5lSXRlbVF1YWxpZmllckZyb21UYWJsZSIsImFubm90YXRpb25QYXRocyIsImdldE1ldGFQYXRoIiwic3BsaXQiLCJWaXN1YWxpemF0aW9ucyIsInZpc3VhbGl6YXRpb24iLCIkQW5ub3RhdGlvblBhdGgiLCJtZXRhUGF0aHMiLCJmaWx0ZXJGaWVsZEluZm8iLCJwcm9wZXJ0eUFubm90YXRpb25zIiwiaXNJbkZpbHRlckZhY2V0cyIsImlzU2VsZWN0aW9uRmllbGQiLCJfaXNGaWx0ZXJJblNlbGVjdGlvbkZpZWxkcyIsImZpbHRlckZhY2V0IiwiZmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJEYXRhIiwiZGF0YUZpZWxkIiwiVmFsdWUiLCJBZGFwdGF0aW9uSGlkZGVuIiwiZmlsdGVyRmllbGRLZXkiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwic0ZsZXhQcm9wZXJ0eU5hbWUiLCJvQXBwQ29tcG9uZW50IiwiYklzWE1MIiwidHlwZSIsInNOYXZpZ2F0aW9uUGF0aCIsImdldE5hdmlnYXRpb25QYXRoIiwic1VzZVNlbWFudGljRGF0ZVJhbmdlIiwic0JpbmRpbmdQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJzUmV0cmlldmVkRW50aXR5VHlwZVBhdGgiLCJzUmV0cmlldmVkVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJlbmRzV2l0aCIsInByb3BlcnR5IiwiZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmciLCJqb2luIiwiZ2V0UGF0aCIsInNWYWx1ZUhlbHBUeXBlIiwiZG9lc1ZhbHVlSGVscEV4aXN0IiwiYlZhbHVlSGVscEV4aXN0cyIsImxvY2FsSWQiLCJfZ2V0UGFnZU1vZGVsIiwiX2dldENhY2hlZFByb3BlcnRpZXMiLCJ3aW5kb3ciLCJFbGVtZW50IiwiZ2V0Q3VzdG9tRGF0YSIsIl9zZXRDYWNoZWRQcm9wZXJ0aWVzIiwiX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwibG9jYWxHcm91cExhYmVsIiwib0dyb3VwIiwic29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwiLCJmZXRjaFByb3BlcnRpZXMiLCJmaWx0ZXJCYXIiLCJwcm9wZXJ0eUluZm9zIiwiZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzIiwiZ2V0VHlwZU1hcCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyRGVsZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RmllbGRHcm91cFR5cGUsXG5cdEZpbHRlckZhY2V0cyxcblx0UmVmZXJlbmNlRmFjZXQsXG5cdFNlbGVjdGlvbkZpZWxkc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZVRyZWVNb2RpZmllciwgUHJlcHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0UHJvcGVydHlJbmZvIGFzIEZFUHJvcGVydHlJbmZvLFxuXHRGaWx0ZXJGaWVsZCxcblx0UHJvcGVydHlJbmZvRXh0ZXJuYWxcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMsIHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldExvY2FsaXplZFRleHQsIGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldE1vZGVsVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvUHJvcGVydHlJbmZvXCI7XG5pbXBvcnQgeyBnZXRWYWx1ZUhlbHBUZW1wbGF0ZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuaW1wb3J0IFN0YXRlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJCYXJEZWxlZ2F0ZSBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJEZWxlZ2F0ZVwiO1xuaW1wb3J0IHR5cGUgTURDRmlsdGVyRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCIuLi9NYWNyb0FQSVwiO1xuXG50eXBlIE1vZGlmaWVyRWxlbWVudCA9IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10gfCBFbGVtZW50IHwgRWxlbWVudFtdO1xudHlwZSBOdWxsYWJsZU1vZGlmaWVyRWxlbWVudCA9IHZvaWQgfCBNb2RpZmllckVsZW1lbnQgfCBudWxsO1xuY29uc3QgT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIEZpbHRlckJhckRlbGVnYXRlKSBhcyB0eXBlb2YgRmlsdGVyQmFyRGVsZWdhdGUgJiB7XG5cdGFwaVZlcnNpb246IG51bWJlcjtcblx0X2lzRmlsdGVySW5TZWxlY3Rpb25GaWVsZHMoc2VsZWN0aW9uRmllbGRzOiBTZWxlY3Rpb25GaWVsZHMsIGZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQpOiBib29sZWFuO1xuXHRfZmluZFNlbGVjdGlvbkZpZWxkKGFTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNGbGV4TmFtZTogc3RyaW5nKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQ7XG5cdGNsZWFyRmlsdGVycyhvRmlsdGVyQ29udHJvbDogRmlsdGVyQmFyKTogUHJvbWlzZTx2b2lkPjtcblx0Z2V0VHlwZU1hcCgpOiB0eXBlb2YgVHlwZU1hcDtcblx0ZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzKGZpbHRlckJhcjogSUZpbHRlckNvbnRyb2wpOiBQcm9taXNlPENvbnRyb2xQcm9wZXJ0eUluZm9bXSB8IFByb3BlcnR5SW5mb0V4dGVybmFsW10+O1xuXHRmZXRjaFByb3BlcnRpZXMoZmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiBQcm9taXNlPFByb3BlcnR5SW5mb0V4dGVybmFsW10+O1xuXHRfaXNGaWx0ZXJBZGFwdGFibGUoXG5cdFx0ZmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eSxcblx0XHRzZWxlY3Rpb25GaWVsZHM/OiBTZWxlY3Rpb25GaWVsZHMsXG5cdFx0ZmlsdGVyRmFjZXRzPzogRmlsdGVyRmFjZXRzXG5cdCk6IGJvb2xlYW47XG5cdGZldGNoUHJvcGVydGllc0ZvckVudGl0eShzRW50aXR5VHlwZVBhdGg6IHN0cmluZywgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIG9GaWx0ZXJDb250cm9sOiBJRmlsdGVyQ29udHJvbCk6IFByb3BlcnR5SW5mb1tdO1xuXHRfdGVtcGxhdGVDdXN0b21GaWx0ZXIoXG5cdFx0b0ZpbHRlckJhcjogSUZpbHRlckNvbnRyb2wsXG5cdFx0c0lkUHJlZml4OiBzdHJpbmcsXG5cdFx0b1NlbGVjdGlvbkZpZWxkSW5mbzogRmlsdGVyRmllbGQsXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyXG5cdCk6IFByb21pc2U8TW9kaWZpZXJFbGVtZW50Pjtcblx0X2FkZFAxM25JdGVtKHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsIG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIpOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50Pjtcblx0X2FkZEZsZXhJdGVtKFxuXHRcdHNGbGV4UHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfCB1bmRlZmluZWQsXG5cdFx0b0FwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCxcblx0XHR2aWV3PzogVmlld1xuXHQpOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50Pjtcblx0YWRkSXRlbShcblx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdFx0bVByb3BlcnR5QmFnPzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuXHQpOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50Pjtcblx0YWRkQ29uZGl0aW9uKFxuXHRcdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdFx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0XHRtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIH1cblx0KTogUHJvbWlzZTx2b2lkIHwgbnVsbD47XG5cdHJlbW92ZUl0ZW0oXG5cdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRvRmlsdGVyRmllbGRQcm9wZXJ0eTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0bVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbiB8IG51bGw+O1xuXHRyZW1vdmVDb25kaXRpb24oXG5cdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjtcblx0XHR9XG5cdCk6IFByb21pc2U8dm9pZCB8IG51bGw+O1xufTtcbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuYXBpVmVyc2lvbiA9IDI7XG5jb25zdCBFRElUX1NUQVRFX1BST1BFUlRZX05BTUUgPSBcIiRlZGl0U3RhdGVcIixcblx0U0VBUkNIX1BST1BFUlRZX05BTUUgPSBcIiRzZWFyY2hcIixcblx0VkFMVUVfSEVMUF9UWVBFID0gXCJGaWx0ZXJGaWVsZFZhbHVlSGVscFwiLFxuXHRGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVkgPSBcInNhcF9mZV9GaWx0ZXJCYXJEZWxlZ2F0ZV9wcm9wZXJ0eUluZm9NYXBcIjtcblxuLy8gRm9yIG9uZSBzaW5nbGUgZW50cnkgaW4gVUkuU2VsZWN0aW9uRmllbGRzXG50eXBlIEFubm90YXRpb25TZWxlY3Rpb25GaWVsZCA9IHtcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIF90ZW1wbGF0ZUVkaXRTdGF0ZShcblx0c0lkUHJlZml4OiBzdHJpbmcsXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IHVuZGVmaW5lZFxuKTogUHJvbWlzZTxNb2RpZmllckVsZW1lbnQ+IHtcblx0Y29uc3Qgb1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGlkOiBzSWRQcmVmaXgsXG5cdFx0XHRpc0RyYWZ0Q29sbGFib3JhdGl2ZTogTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsKVxuXHRcdH0pLFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdH0sXG5cdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0Ly9cInRoaXMuaTE4blwiOiBSZXNvdXJjZU1vZGVsLmdldE1vZGVsKCksIFRPRE86IFRvIGJlIGNoZWNrZWQgd2h5IHRoaXMgaXMgbmVlZGVkLCBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCBhbGxcblx0XHRcdFx0dGhpczogb1RoaXNcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXG5cdFx0XCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5EcmFmdEVkaXRTdGF0ZVwiLFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHR1bmRlZmluZWQsXG5cdFx0b01vZGlmaWVyXG5cdCkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0b1RoaXMuZGVzdHJveSgpO1xuXHR9KTtcbn1cblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fdGVtcGxhdGVDdXN0b21GaWx0ZXIgPSBhc3luYyBmdW5jdGlvbiAoXG5cdG9GaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sLFxuXHRzSWRQcmVmaXg6IHN0cmluZyxcblx0b1NlbGVjdGlvbkZpZWxkSW5mbzogRmlsdGVyRmllbGQsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXJcbik6IFByb21pc2U8TW9kaWZpZXJFbGVtZW50PiB7XG5cdGNvbnN0IHNFbnRpdHlUeXBlUGF0aCA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob0ZpbHRlckJhciwgXCJlbnRpdHlUeXBlXCIsIG9Nb2RpZmllcik7XG5cblx0aWYgKG9TZWxlY3Rpb25GaWVsZEluZm8uYW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIGlmIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdHR5cGUgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb25fZXh0ZW5kZWQgPSBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiAmIHsgRG9jdW1lbnRhdGlvblJlZj86IHN0cmluZyB9O1xuXHRcdGNvbnN0IGNvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQob1NlbGVjdGlvbkZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRkYXRhTW9kZWxQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFByb3BlcnR5Pihjb250ZXh0KSxcblx0XHRcdGRvY3VtZW50UmVmVGV4dCA9IChcblx0XHRcdFx0ZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zLkNvbW1vbiBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbl9leHRlbmRlZFxuXHRcdFx0KT8uRG9jdW1lbnRhdGlvblJlZj8udG9TdHJpbmcoKTtcblx0XHRvU2VsZWN0aW9uRmllbGRJbmZvLmRvY3VtZW50UmVmVGV4dCA9IGRvY3VtZW50UmVmVGV4dDtcblx0fVxuXG5cdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogc0lkUHJlZml4XG5cdFx0fSksXG5cdFx0b0l0ZW1Nb2RlbCA9IG5ldyBUZW1wbGF0ZU1vZGVsKG9TZWxlY3Rpb25GaWVsZEluZm8sIG9NZXRhTW9kZWwpLFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5VHlwZVBhdGghKSxcblx0XHRcdFx0dGhpczogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRpdGVtOiBvSXRlbU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdFx0fSxcblx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdGl0ZW06IG9JdGVtTW9kZWxcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvRmlsdGVyQmFyKSxcblx0XHRvQ29udHJvbGxlciA9IG9WaWV3ID8gb1ZpZXcuZ2V0Q29udHJvbGxlcigpIDogdW5kZWZpbmVkLFxuXHRcdG9PcHRpb25zID0ge1xuXHRcdFx0Y29udHJvbGxlcjogb0NvbnRyb2xsZXIgPyBvQ29udHJvbGxlciA6IHVuZGVmaW5lZCxcblx0XHRcdHZpZXc6IG9WaWV3XG5cdFx0fTtcblxuXHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXIuQ3VzdG9tRmlsdGVyXCIsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMsIG9Nb2RpZmllcikuZmluYWxseShcblx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRvVGhpcy5kZXN0cm95KCk7XG5cdFx0XHRvSXRlbU1vZGVsLmRlc3Ryb3koKTtcblx0XHR9XG5cdCk7XG59O1xuZnVuY3Rpb24gX2dldFByb3BlcnR5UGF0aChzQ29uZGl0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIEZpbHRlclV0aWxzLmdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoKHNDb25kaXRpb25QYXRoKTtcbn1cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2ZpbmRTZWxlY3Rpb25GaWVsZCA9IGZ1bmN0aW9uIChhU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdLCBzRmxleE5hbWU6IHN0cmluZyk6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGFTZWxlY3Rpb25GaWVsZHMuZmluZChmdW5jdGlvbiAob1NlbGVjdGlvbkZpZWxkOiBGaWx0ZXJGaWVsZCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQob1NlbGVjdGlvbkZpZWxkLmNvbmRpdGlvblBhdGggPT09IHNGbGV4TmFtZSB8fCBvU2VsZWN0aW9uRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlQWxsKC9cXCovZywgXCJcIikgPT09IHNGbGV4TmFtZSkgJiZcblx0XHRcdG9TZWxlY3Rpb25GaWVsZC5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCJcblx0XHQpO1xuXHR9KTtcbn07XG5mdW5jdGlvbiBfZ2VuZXJhdGVJZFByZWZpeChzRmlsdGVyQmFySWQ6IHN0cmluZywgc0NvbnRyb2xUeXBlOiBzdHJpbmcsIHNOYXZpZ2F0aW9uUHJlZml4Pzogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHNOYXZpZ2F0aW9uUHJlZml4ID8gZ2VuZXJhdGUoW3NGaWx0ZXJCYXJJZCwgc0NvbnRyb2xUeXBlLCBzTmF2aWdhdGlvblByZWZpeF0pIDogZ2VuZXJhdGUoW3NGaWx0ZXJCYXJJZCwgc0NvbnRyb2xUeXBlXSk7XG59XG5hc3luYyBmdW5jdGlvbiBfdGVtcGxhdGVWYWx1ZUhlbHAoXG5cdG9TZXR0aW5nczoge1xuXHRcdGlzWE1MOiBib29sZWFuO1xuXHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0bWV0YVBhdGg6IENvbnRleHQ7XG5cdFx0XHRjb250ZXh0UGF0aDogQ29udGV4dDtcblx0XHR9O1xuXHRcdG1vZGVsczoge1xuXHRcdFx0bWV0YVBhdGg6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0Y29udGV4dFBhdGg6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdH07XG5cdH0sXG5cdG9QYXJhbWV0ZXJzOiB7XG5cdFx0c1ZoSWRQcmVmaXg6IHN0cmluZztcblx0XHRzTmF2aWdhdGlvblByZWZpeD86IHN0cmluZztcblx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U6IGJvb2xlYW47XG5cdFx0b01vZGlmaWVyPzogQmFzZVRyZWVNb2RpZmllcjtcblx0XHRvQ29udHJvbDogVUk1RWxlbWVudDtcblx0XHR2aWV3PzogVmlldztcblx0fVxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG9UaGlzID0ge1xuXHRcdGlkUHJlZml4OiBvUGFyYW1ldGVycy5zVmhJZFByZWZpeCxcblx0XHRjb25kaXRpb25Nb2RlbDogXCIkZmlsdGVyc1wiLFxuXHRcdG5hdmlnYXRpb25QcmVmaXg6IG9QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4ID8gYC8ke29QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4fWAgOiBcIlwiLFxuXHRcdGZpbHRlckZpZWxkVmFsdWVIZWxwOiB0cnVlLFxuXHRcdHVzZVNlbWFudGljRGF0ZVJhbmdlOiBvUGFyYW1ldGVycy5iVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0bWV0YVBhdGg6IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGgsXG5cdFx0Y29udGV4dFBhdGg6IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuY29udGV4dFBhdGgsXG5cdFx0dXNlTXVsdGlWYWx1ZUZpZWxkOiBmYWxzZSxcblx0XHRyZXF1aXJlc1ZhbGlkYXRpb246IGZhbHNlLFxuXHRcdGNvbGxhYm9yYXRpb25FbmFibGVkOiBmYWxzZSxcblx0XHRyZXF1ZXN0R3JvdXBJZDogdW5kZWZpbmVkXG5cdH07XG5cdGNvbnN0IGpzb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwob1RoaXMpO1xuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSBtZXJnZU9iamVjdHMoe30sIG9TZXR0aW5ncywge1xuXHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0dGhpczoganNvbk1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdH0sXG5cdFx0bW9kZWxzOiB7XG5cdFx0XHR0aGlzOiBvVGhpc1xuXHRcdH1cblx0fSkgYXMgUHJlcHJvY2Vzc29yU2V0dGluZ3M7XG5cdGNvbnN0IHRhcmdldFBhdGggPSBGaWVsZEhlbHBlci52YWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkKG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGgpO1xuXG5cdGlmIChvU2V0dGluZ3MuaXNYTUwpIHtcblx0XHRsZXQgdmFsdWVIZWxwWE1MU3RyaW5nID0ganN4LnJlbmRlckFzWE1MPHN0cmluZyB8IHVuZGVmaW5lZD4oXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHRnZXRWYWx1ZUhlbHBUZW1wbGF0ZShvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLm1ldGFQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQodGFyZ2V0UGF0aCksIG9UaGlzKSBhc1xuXHRcdFx0XHRcdHwgc3RyaW5nXG5cdFx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpO1xuXHRcdGlmICh2YWx1ZUhlbHBYTUxTdHJpbmcpIHtcblx0XHRcdGlmIChvU2V0dGluZ3MuaXNYTUwpIHtcblx0XHRcdFx0dmFsdWVIZWxwWE1MU3RyaW5nID0gYDxyb290PiR7dmFsdWVIZWxwWE1MU3RyaW5nfTwvcm9vdD5gO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdmFsdWVIZWxwWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZUhlbHBYTUxTdHJpbmcsIFwidGV4dC94bWxcIik7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQodmFsdWVIZWxwWE1MLmZpcnN0RWxlbWVudENoaWxkLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIHtcblx0XHRcdFx0XHRpc1hNTDogb1NldHRpbmdzLmlzWE1MXG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChhVkhFbGVtZW50czogTW9kaWZpZXJFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdFx0aWYgKGFWSEVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzQWdncmVnYXRpb25OYW1lID0gXCJkZXBlbmRlbnRzXCI7XG5cdFx0XHRcdFx0XHQvL1NvbWUgZmlsdGVyIGZpZWxkcyBoYXZlIHRoZSBQZXJzaXN0ZW5jZVByb3ZpZGVyIGFnZ3JlZ2F0aW9uIGJlc2lkZXMgdGhlIEZWSCA6XG5cdFx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShhVkhFbGVtZW50cykpIHtcblx0XHRcdFx0XHRcdFx0YVZIRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWx0OiBFbGVtZW50IHwgVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyYW1ldGVycy5vQ29udHJvbCwgc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0LCAwKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0IGFzIFVJNUVsZW1lbnQsIDAsIGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVycy5vQ29udHJvbCxcblx0XHRcdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdGFWSEVsZW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMudmlldyBhcyB1bmtub3duIGFzIEVsZW1lbnRcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLmluc2VydEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUsIGFWSEVsZW1lbnRzIGFzIFVJNUVsZW1lbnQsIDAsIGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBEZWxlZ2F0ZVV0aWwuaXNWYWx1ZUhlbHBSZXF1aXJlZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGpzb25Nb2RlbC5kZXN0cm95KCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCB2YWx1ZUhlbHAgPSBnZXRWYWx1ZUhlbHBUZW1wbGF0ZShvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLm1ldGFQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQodGFyZ2V0UGF0aCksIG9UaGlzKSBhc1xuXHRcdFx0fCBWYWx1ZUhlbHBcblx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdGlmICh2YWx1ZUhlbHApIHtcblx0XHRcdGNvbnN0IHNBZ2dyZWdhdGlvbk5hbWUgPSBcImRlcGVuZGVudHNcIjtcblx0XHRcdC8vU29tZSBmaWx0ZXIgZmllbGRzIGhhdmUgdGhlIFBlcnNpc3RlbmNlUHJvdmlkZXIgYWdncmVnYXRpb24gYmVzaWRlcyB0aGUgRlZIIDpcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlSGVscCkpIHtcblx0XHRcdFx0dmFsdWVIZWxwLmZvckVhY2goZnVuY3Rpb24gKGVsdDogRWxlbWVudCB8IFVJNUVsZW1lbnQpIHtcblx0XHRcdFx0XHRpZiAob1BhcmFtZXRlcnMub01vZGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRvUGFyYW1ldGVycy5vTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1BhcmFtZXRlcnMub0NvbnRyb2wsIHNBZ2dyZWdhdGlvbk5hbWUsIGVsdCwgMCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLmluc2VydEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUsIGVsdCBhcyBVSTVFbGVtZW50LCAwLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAob1BhcmFtZXRlcnMub01vZGlmaWVyKSB7XG5cdFx0XHRcdG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyYW1ldGVycy5vQ29udHJvbCwgc0FnZ3JlZ2F0aW9uTmFtZSwgdmFsdWVIZWxwLCAwKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLmluc2VydEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUsIHZhbHVlSGVscCwgMCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuYXN5bmMgZnVuY3Rpb24gX2FkZFhNTEN1c3RvbUZpbHRlckZpZWxkKFxuXHRvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCxcblx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRzUHJvcGVydHlQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8VUk1RWxlbWVudCB8IEVsZW1lbnQgfCB2b2lkPiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgYURlcGVuZGVudHMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUob01vZGlmaWVyLmdldEFnZ3JlZ2F0aW9uKG9GaWx0ZXJCYXIsIFwiZGVwZW5kZW50c1wiKSk7XG5cdFx0bGV0IGk7XG5cdFx0aWYgKGFEZXBlbmRlbnRzICYmIGFEZXBlbmRlbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGZvciAoaSA9IDA7IGkgPD0gYURlcGVuZGVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgb0ZpbHRlckZpZWxkID0gYURlcGVuZGVudHNbaV07XG5cdFx0XHRcdGlmIChvRmlsdGVyRmllbGQgJiYgKG9GaWx0ZXJGaWVsZCBhcyBVSTVFbGVtZW50KS5pc0E8TURDRmlsdGVyRmllbGQ+KFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IHNEYXRhUHJvcGVydHkgPSAob0ZpbHRlckZpZWxkIGFzIE1EQ0ZpbHRlckZpZWxkKS5nZXRQcm9wZXJ0eUtleSgpLFxuXHRcdFx0XHRcdFx0c0ZpbHRlckZpZWxkSWQgPSAob0ZpbHRlckZpZWxkIGFzIE1EQ0ZpbHRlckZpZWxkKS5nZXRJZCgpO1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHlQYXRoID09PSBzRGF0YVByb3BlcnR5ICYmIHNGaWx0ZXJGaWVsZElkLmluZGV4T2YoXCJDdXN0b21GaWx0ZXJGaWVsZFwiKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9GaWx0ZXJGaWVsZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdExvZy5lcnJvcihcIkZpbHRlciBDYW5ub3QgYmUgYWRkZWRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3RlbXBsYXRlRmlsdGVyRmllbGQoXG5cdG9TZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdG9QYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0c0luRmlsdGVyQmFySWQ/OiBzdHJpbmcsXG5cdHBhZ2VNb2RlbD86IEpTT05Nb2RlbFxuKTogUHJvbWlzZTxVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudCB8IEVsZW1lbnRbXT4ge1xuXHRjb25zdCBvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdGlkUHJlZml4OiBvUGFyYW1ldGVycy5zSWRQcmVmaXgsXG5cdFx0dmhJZFByZWZpeDogb1BhcmFtZXRlcnMuc1ZoSWRQcmVmaXgsXG5cdFx0cHJvcGVydHlQYXRoOiBvUGFyYW1ldGVycy5zUHJvcGVydHlOYW1lLFxuXHRcdG5hdmlnYXRpb25QcmVmaXg6IG9QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4ID8gYC8ke29QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4fWAgOiBcIlwiLFxuXHRcdHVzZVNlbWFudGljRGF0ZVJhbmdlOiBvUGFyYW1ldGVycy5iVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0c2V0dGluZ3M6IG9QYXJhbWV0ZXJzLm9TZXR0aW5ncyxcblx0XHR2aXN1YWxGaWx0ZXI6IG9QYXJhbWV0ZXJzLnZpc3VhbEZpbHRlcixcblx0XHRlZGl0TW9kZTogYHtpbnRlcm5hbD4vJHtzSW5GaWx0ZXJCYXJJZH0vZmlsdGVyRmllbGRzLyR7b1BhcmFtZXRlcnMuc1Byb3BlcnR5TmFtZX0vZWRpdE1vZGV9YCxcblx0XHRsYWJlbDogb1BhcmFtZXRlcnMubGFiZWxcblx0fSk7XG5cdHRyeSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYXJhbWV0ZXJzLm9NZXRhTW9kZWwgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3Qgb1Zpc3VhbEZpbHRlciA9IG5ldyBUZW1wbGF0ZU1vZGVsKG9QYXJhbWV0ZXJzLnZpc3VhbEZpbHRlciBhcyBvYmplY3QsIG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IG1lcmdlT2JqZWN0cyh7fSwgb1NldHRpbmdzLCB7XG5cdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0dGhpczogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXI6IG9WaXN1YWxGaWx0ZXIuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHR9LFxuXHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdHRoaXM6IG9UaGlzLFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXI6IG9WaXN1YWxGaWx0ZXIsXG5cdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogcGFnZU1vZGVsXG5cdFx0XHR9XG5cdFx0fSkgYXMgUHJlcHJvY2Vzc29yU2V0dGluZ3M7XG5cblx0XHRyZXR1cm4gYXdhaXQgRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5maWx0ZXJGaWVsZC5GaWx0ZXJGaWVsZFRlbXBsYXRlXCIsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywge1xuXHRcdFx0aXNYTUw6ICEhb1NldHRpbmdzLmlzWE1MXG5cdFx0fSk7XG5cdH0gZmluYWxseSB7XG5cdFx0b1RoaXMuZGVzdHJveSgpO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9hZGRQcm9wZXJ0eUluZm8oXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfSxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuXHR0cnkge1xuXHRcdC8vIGtleSBzaG91bGQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBuYW1lXG5cdFx0Y29uc3Qgc1Byb3BlcnR5SW5mb0tleSA9IEtleUhlbHBlci5nZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoKHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0XHRzUHJvcGVydHlJbmZvTmFtZSA9IHNQcm9wZXJ0eUluZm9OYW1lLnJlcGxhY2UoXCIqXCIsIFwiXCIpO1xuXHRcdGlmIChtUHJvcGVydHlCYWcgJiYgIW1Qcm9wZXJ0eUJhZy5tb2RpZmllcikge1xuXHRcdFx0dGhyb3cgXCJGaWx0ZXJCYXIgRGVsZWdhdGUgbWV0aG9kIGNhbGxlZCB3aXRob3V0IG1vZGlmaWVyLlwiO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRlbGVnYXRlID0gYXdhaXQgbVByb3BlcnR5QmFnLm1vZGlmaWVyLmdldFByb3BlcnR5PEZpbHRlckJhckRlbGVnYXRlPihvUGFyZW50Q29udHJvbCwgXCJkZWxlZ2F0ZVwiKTtcblx0XHRjb25zdCBhUHJvcGVydHlJbmZvID0gYXdhaXQgbVByb3BlcnR5QmFnLm1vZGlmaWVyLmdldFByb3BlcnR5PEZFUHJvcGVydHlJbmZvW10+KG9QYXJlbnRDb250cm9sLCBcInByb3BlcnR5SW5mb1wiKTtcblx0XHQvL1dlIGRvIG5vdCBnZXQgcHJvcGVydHlJbmZvIGluIGNhc2Ugb2YgdGFibGUgZmlsdGVyc1xuXHRcdGlmIChhUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRjb25zdCBoYXNQcm9wZXJ0eUluZm8gPSBhUHJvcGVydHlJbmZvLnNvbWUoZnVuY3Rpb24gKHByb3A6IEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdHJldHVybiBwcm9wLmtleSA9PT0gc1Byb3BlcnR5SW5mb0tleSB8fCBwcm9wLm5hbWUgPT09IHNQcm9wZXJ0eUluZm9LZXk7XG5cdFx0XHR9KTtcblx0XHRcdGlmICghaGFzUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gZGVsZWdhdGUucGF5bG9hZC5lbnRpdHlUeXBlUGF0aDtcblx0XHRcdFx0Y29uc3QgY29udmVydGVyQ29udGV4dCA9IEZpbHRlclV0aWxzLmNyZWF0ZUNvbnZlcnRlckNvbnRleHQoXG5cdFx0XHRcdFx0b1BhcmVudENvbnRyb2wgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlUGF0aCxcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnRcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IEZpbHRlclV0aWxzLmdldEZpbHRlckZpZWxkKHNQcm9wZXJ0eUluZm9OYW1lLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gRmlsdGVyVXRpbHMuYnVpbGRQcm9wZXJ5SW5mbyhmaWx0ZXJGaWVsZCEsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHRhd2FpdCBfdXBkYXRlUHJvcGVydHlJbmZvKFxuXHRcdFx0XHRcdGFQcm9wZXJ0eUluZm8gYXMgUHJvcGVydHlJbmZvW10sXG5cdFx0XHRcdFx0bVByb3BlcnR5QmFnLFxuXHRcdFx0XHRcdHByb3BlcnR5SW5mbyBhcyB1bmtub3duIGFzIFByb3BlcnR5SW5mbyxcblx0XHRcdFx0XHRvUGFyZW50Q29udHJvbFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3JNc2cpIHtcblx0XHRMb2cud2FybmluZyhgJHtvUGFyZW50Q29udHJvbC5nZXRJZCgpfSA6ICR7ZXJyb3JNc2d9YCk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3VwZGF0ZVByb3BlcnR5SW5mbyhcblx0cHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm9bXSxcblx0cHJvcGVydHlCYWc6IHsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IH0sXG5cdGZpbHRlckZpZWxkOiBQcm9wZXJ0eUluZm8sXG5cdHBhcmVudENvbnRyb2w6IEZpbHRlckJhclxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGxldCBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KFxuXHRcdHBhcmVudENvbnRyb2wsXG5cdFx0XCJmZUZpbHRlckluZm9cIixcblx0XHRwcm9wZXJ0eUJhZy5tb2RpZmllclxuXHQpO1xuXHRpZiAocHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyICYmIHByb3BlcnR5SW5mb0ZvckZpbHRlckJhci5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyT2JqID0gSlNPTi5wYXJzZShwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIpIGFzIFByb3BlcnR5SW5mb1tdO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhck9iai5wdXNoKGZpbHRlckZpZWxkKTtcblx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXJPYmopO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhci5yZXBsYWNlKC9cXHsvZywgXCJcXFxce1wiKTtcblx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdFx0Y29uc3QgY3VzdG9tRGF0YU5vZGUgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwucmV0cmlldmVDdXN0b21EYXRhTm9kZShwYXJlbnRDb250cm9sLCBcImZlRmlsdGVySW5mb1wiLCBwcm9wZXJ0eUJhZy5tb2RpZmllcik7XG5cdFx0Y3VzdG9tRGF0YU5vZGVbMF0uc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyKTtcblx0XHRwcm9wZXJ0eUJhZy5tb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihwYXJlbnRDb250cm9sLCBcImN1c3RvbURhdGFcIiwgY3VzdG9tRGF0YU5vZGVbMF0sIDApO1xuXHR9XG5cblx0Ly8gQ3VzdG9tIGRhdGEgaXMgc2V0IHRvIHRoZSBwYXJlbnQgY29udHJvbCB0byBzdG9yZSB0aGUgcHJvcGVydHlJbmZvXG5cdHByb3BlcnR5SW5mby5wdXNoKGZpbHRlckZpZWxkKTtcblx0Ly9yZW1vdmUgdW53YW50ZWQgcHJvcGVydHkgZnJvbSB0aGUgcHJvcGVydHlJbmZvXG5cdGNvbnN0IF9wcm9wZXJ0eUluZm8gPSBGaWx0ZXJVdGlscy5mb3JtYXRQcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvIGFzIEZFUHJvcGVydHlJbmZvW10pO1xuXHQvL1VwZGF0ZSB0aGUgcHJvcGVydHlJbmZvIGluIHRoZSBwYXJlbnQgY29udHJvbFxuXHRwcm9wZXJ0eUJhZy5tb2RpZmllci5zZXRQcm9wZXJ0eShwYXJlbnRDb250cm9sLCBcInByb3BlcnR5SW5mb1wiLCBfcHJvcGVydHlJbmZvKTtcbn1cbi8qKlxuICogTWV0aG9kIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBmaWx0ZXIgZmllbGQgaW4gc3RhbmRhbG9uZSBtb2RlIC8gaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXR0aW5ncyBvZiB0aGUgZmlsdGVyIGJhci5cbiAqIEBwYXJhbSBvUGFyZW50Q29udHJvbCBQYXJlbnQgY29udHJvbCBpbnN0YW5jZSB0byB3aGljaCB0aGUgZmlsdGVyIGZpZWxkIGlzIGFkZGVkXG4gKiBAcGFyYW0gc1Byb3BlcnR5SW5mb05hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgYWRkZWQgYXMgdGhlIGZpbHRlciBmaWVsZFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiB0aGUgcHJvcGVydHkgYmFnIGZyb20gRmxleCBBUElcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50IEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBNb2RpZmllciBmcm9tIEZsZXggQVBJXG4gKiBAcmV0dXJucyBPbmNlIHJlc29sdmVkLCBhIGZpbHRlciBmaWVsZCBkZWZpbml0aW9uIGlzIHJldHVybmVkXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuYWRkSXRlbSA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0bVByb3BlcnR5QmFnPzogeyB2aWV3OiBWaWV3OyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuKTogUHJvbWlzZTxOdWxsYWJsZU1vZGlmaWVyRWxlbWVudD4ge1xuXHRpZiAoIW1Qcm9wZXJ0eUJhZykge1xuXHRcdC8vIEludm9rZWQgZHVyaW5nIHJ1bnRpbWUuXG5cdFx0cmV0dXJuIE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZFAxM25JdGVtKHNQcm9wZXJ0eUluZm9OYW1lLCBvUGFyZW50Q29udHJvbCk7XG5cdH1cblx0Y29uc3QgbW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdGNvbnN0IG1vZGVsID0gbVByb3BlcnR5QmFnICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRjb25zdCBvTWV0YU1vZGVsID0gbW9kZWwgJiYgbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGlmICghb01ldGFNb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblx0Y29uc3QgaXNYTUwgPSBtb2RpZmllciAmJiBtb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIjtcblx0aWYgKGlzWE1MKSB7XG5cdFx0YXdhaXQgX2FkZFByb3BlcnR5SW5mbyhvUGFyZW50Q29udHJvbCwgbVByb3BlcnR5QmFnLCBvTWV0YU1vZGVsLCBzUHJvcGVydHlJbmZvTmFtZSk7XG5cdH1cblx0cmV0dXJuIE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZEZsZXhJdGVtKFxuXHRcdHNQcm9wZXJ0eUluZm9OYW1lLFxuXHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdG9NZXRhTW9kZWwsXG5cdFx0bW9kaWZpZXIsXG5cdFx0bVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCxcblx0XHRtUHJvcGVydHlCYWcudmlld1xuXHQpO1xufTtcblxuLyoqXG4gKiBNZXRob2QgcmVzcG9uc2libGUgZm9yIHJlbW92aW5nIGZpbHRlciBmaWVsZCBpbiBzdGFuZGFsb25lIC8gcGVyc29uYWxpemF0aW9uIGZpbHRlciBiYXIuXG4gKiBAcGFyYW0gb1BhcmVudENvbnRyb2wgUGFyZW50IGNvbnRyb2wgaW5zdGFuY2UgZnJvbSB3aGljaCB0aGUgZmlsdGVyIGZpZWxkIGlzIHJlbW92ZWRcbiAqIEBwYXJhbSBvRmlsdGVyRmllbGRQcm9wZXJ0eSBPYmplY3Qgb2YgdGhlIGZpbHRlciBmaWVsZCBwcm9wZXJ0eSBiZWluZyByZW1vdmVkIGFzIGZpbHRlciBmaWVsZFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiBwcm9wZXJ0eSBiYWcgZnJvbSBGbGV4IEFQSVxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIE1vZGlmaWVyIGZyb20gRmxleCBBUElcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwcm9taXNlXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUucmVtb3ZlSXRlbSA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0b0ZpbHRlckZpZWxkUHJvcGVydHk6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIH1cbik6IFByb21pc2U8Ym9vbGVhbiB8IG51bGw+IHtcblx0bGV0IGRvUmVtb3ZlSXRlbSA9IHRydWU7XG5cdGNvbnN0IG1vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRjb25zdCBpc1hNTCA9IG1vZGlmaWVyICYmIG1vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoaXNYTUwpIHtcblx0XHRjb25zdCBtb2RlbCA9IG1Qcm9wZXJ0eUJhZyAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbW9kZWwgJiYgbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBmaWx0ZXJGaWVsZFByb3BlcnR5ID0gYXdhaXQgbVByb3BlcnR5QmFnLm1vZGlmaWVyLmdldFByb3BlcnR5KG9GaWx0ZXJGaWVsZFByb3BlcnR5LCBcInByb3BlcnR5S2V5XCIpO1xuXHRcdGF3YWl0IF9hZGRQcm9wZXJ0eUluZm8ob1BhcmVudENvbnRyb2wsIG1Qcm9wZXJ0eUJhZywgb01ldGFNb2RlbCwgZmlsdGVyRmllbGRQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuXHR9XG5cdGlmIChcblx0XHR0eXBlb2Ygb0ZpbHRlckZpZWxkUHJvcGVydHkgIT09IFwic3RyaW5nXCIgJiZcblx0XHQob0ZpbHRlckZpZWxkUHJvcGVydHkgYXMgVUk1RWxlbWVudCkuaXNBICYmXG5cdFx0KG9GaWx0ZXJGaWVsZFByb3BlcnR5IGFzIFVJNUVsZW1lbnQpLmlzQShcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIilcblx0KSB7XG5cdFx0aWYgKChvRmlsdGVyRmllbGRQcm9wZXJ0eSBhcyBVSTVFbGVtZW50KS5kYXRhKFwiaXNTbG90XCIpID09PSBcInRydWVcIiAmJiBtUHJvcGVydHlCYWcpIHtcblx0XHRcdC8vIEluc2VydGluZyBpbnRvIHRoZSBtb2RpZmllciBjcmVhdGVzIGEgY2hhbmdlIGZyb20gZmxleCBhbHNvIGZpbHRlciBpcyBiZWVuIHJlbW92ZWQgaGVuY2UgcHJvbWlzZSBpcyByZXNvbHZlZCB0byBmYWxzZVxuXHRcdFx0bW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1BhcmVudENvbnRyb2wsIFwiZGVwZW5kZW50c1wiLCBvRmlsdGVyRmllbGRQcm9wZXJ0eSk7XG5cdFx0XHRkb1JlbW92ZUl0ZW0gPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xufTtcblxuLyoqXG4gKiBNZXRob2QgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGZpbHRlciBmaWVsZCBjb25kaXRpb24gaW4gc3RhbmRhbG9uZSAvIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXIgYmFyLlxuICogQHBhcmFtIG9QYXJlbnRDb250cm9sIFBhcmVudCBjb250cm9sIGluc3RhbmNlIHRvIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgYWRkZWRcbiAqIEBwYXJhbSBzUHJvcGVydHlJbmZvTmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhZGRlZCBhcyBmaWx0ZXIgZmllbGRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gRmxleCBBUElcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50IEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBNb2RpZmllciBmcm9tIEZsZXggQVBJXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcHJvbWlzZVxuICovXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLmFkZENvbmRpdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0bVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB9XG4pOiBQcm9taXNlPHZvaWQgfCBudWxsPiB7XG5cdGNvbnN0IG1vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRjb25zdCBpc1hNTCA9IG1vZGlmaWVyICYmIG1vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoaXNYTUwpIHtcblx0XHRjb25zdCBtb2RlbCA9IG1Qcm9wZXJ0eUJhZyAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbW9kZWwgJiYgbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRhd2FpdCBfYWRkUHJvcGVydHlJbmZvKG9QYXJlbnRDb250cm9sLCBtUHJvcGVydHlCYWcsIG9NZXRhTW9kZWwsIHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgZmlsdGVyIGZpZWxkIGluIHN0YW5kYWxvbmUgLyBwZXJzb25hbGl6YXRpb24gZmlsdGVyIGJhci5cbiAqIEBwYXJhbSBvUGFyZW50Q29udHJvbCBQYXJlbnQgY29udHJvbCBpbnN0YW5jZSBmcm9tIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgcmVtb3ZlZFxuICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIHJlbW92ZWQgYXMgZmlsdGVyIGZpZWxkXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHByb3BlcnR5IGJhZyBmcm9tIEZsZXggQVBJXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcubW9kaWZpZXIgTW9kaWZpZXIgZnJvbSBGbGV4IEFQSVxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHByb21pc2VcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5yZW1vdmVDb25kaXRpb24gPSBhc3luYyBmdW5jdGlvbiAoXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdG1Qcm9wZXJ0eUJhZzoge1xuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRcdG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyO1xuXHR9XG4pOiBQcm9taXNlPHZvaWQgfCBudWxsPiB7XG5cdGNvbnN0IG1vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRjb25zdCBpc1hNTCA9IG1vZGlmaWVyICYmIG1vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoaXNYTUwpIHtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm9Gcm9tQ0QgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KFxuXHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcInNhcF9mZV9GaWx0ZXJCYXJEZWxlZ2F0ZV9wcm9wZXJ0eUluZm9NYXBcIixcblx0XHRcdG1vZGlmaWVyXG5cdFx0KTtcblx0XHRpZiAoIXByb3BlcnR5SW5mb0Zyb21DRCkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSBtUHJvcGVydHlCYWcgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCk7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gbW9kZWwgJiYgbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHRcdH1cblx0XHRcdGF3YWl0IF9hZGRQcm9wZXJ0eUluZm8ob1BhcmVudENvbnRyb2wsIG1Qcm9wZXJ0eUJhZywgb01ldGFNb2RlbCwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59O1xuLyoqXG4gKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIGZpbHRlciBiYXIuXG4gKiBAcGFyYW0gb0ZpbHRlckNvbnRyb2wgSW5zdGFuY2Ugb2YgdGhlIEZpbHRlckJhciBjb250cm9sXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcHJvbWlzZVxuICovXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLmNsZWFyRmlsdGVycyA9IGFzeW5jIGZ1bmN0aW9uIChvRmlsdGVyQ29udHJvbDogRmlsdGVyQmFyKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGZpbHRlckJhckFQSSA9IG9GaWx0ZXJDb250cm9sLmdldFBhcmVudCgpO1xuXHRyZXR1cm4gU3RhdGVIZWxwZXIuY2xlYXJGaWx0ZXJWYWx1ZXMoZmlsdGVyQmFyQVBJIGFzIE1hY3JvQVBJKTtcbn07XG4vKipcbiAqIENyZWF0ZXMgdGhlIGZpbHRlciBmaWVsZCBpbiB0aGUgdGFibGUgYWRhcHRhdGlvbiBvZiB0aGUgRmlsdGVyQmFyLlxuICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBlbnRpdHkgdHlwZSBmb3Igd2hpY2ggdGhlIGZpbHRlciBmaWVsZCBuZWVkcyB0byBiZSBjcmVhdGVkXG4gKiBAcGFyYW0gb1BhcmVudENvbnRyb2wgSW5zdGFuY2Ugb2YgdGhlIHBhcmVudCBjb250cm9sXG4gKiBAcmV0dXJucyBPbmNlIHJlc29sdmVkLCBhIGZpbHRlciBmaWVsZCBkZWZpbml0aW9uIGlzIHJldHVybmVkXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZFAxM25JdGVtID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyXG4pOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50PiB7XG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbChvUGFyZW50Q29udHJvbClcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAob01vZGVsOiBNb2RlbCkge1xuXHRcdFx0cmV0dXJuIE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZEZsZXhJdGVtKFxuXHRcdFx0XHRzUHJvcGVydHlJbmZvTmFtZSxcblx0XHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcdG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdFx0dW5kZWZpbmVkXG5cdFx0XHQpO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIk1vZGVsIGNvdWxkIG5vdCBiZSByZXNvbHZlZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0pO1xufTtcbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5ID0gZnVuY3Rpb24gKFxuXHRzRW50aXR5VHlwZVBhdGg6IHN0cmluZyxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9GaWx0ZXJDb250cm9sOiBJRmlsdGVyQ29udHJvbFxuKTogUHJvcGVydHlJbmZvW10ge1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlUeXBlUGF0aCk7XG5cdGNvbnN0IGluY2x1ZGVIaWRkZW4gPSBvRmlsdGVyQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLnZhbHVlaGVscC5GaWx0ZXJCYXJcIikgPyB0cnVlIDogdW5kZWZpbmVkO1xuXHRpZiAoIW9GaWx0ZXJDb250cm9sIHx8ICFvRW50aXR5VHlwZSkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRjb25zdCBvQ29udmVydGVyQ29udGV4dCA9IEZpbHRlclV0aWxzLmNyZWF0ZUNvbnZlcnRlckNvbnRleHQob0ZpbHRlckNvbnRyb2wsIHNFbnRpdHlUeXBlUGF0aCk7XG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChzRW50aXR5VHlwZVBhdGgpO1xuXG5cdGNvbnN0IG1GaWx0ZXJGaWVsZHMgPSBGaWx0ZXJVdGlscy5nZXRDb252ZXJ0ZWRGaWx0ZXJGaWVsZHMoXG5cdFx0b0ZpbHRlckNvbnRyb2wsXG5cdFx0c0VudGl0eVR5cGVQYXRoLFxuXHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0b01ldGFNb2RlbCxcblx0XHRDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob0ZpbHRlckNvbnRyb2wpXG5cdCk7XG5cdGxldCBhRmV0Y2hlZFByb3BlcnRpZXM6IEZFUHJvcGVydHlJbmZvW10gPSBbXTtcblx0bUZpbHRlckZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCkge1xuXHRcdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGg7XG5cdFx0aWYgKHNBbm5vdGF0aW9uUGF0aCAmJiAhb0ZpbHRlckZpZWxkSW5mby50ZW1wbGF0ZSkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBvQ29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLnJlc29sdmVQYXRoPFByb3BlcnR5PihzQW5ub3RhdGlvblBhdGgpLnRhcmdldDtcblx0XHRcdGNvbnN0IHNUYXJnZXRQcm9wZXJ0eVByZWZpeCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTWV0YU1vZGVsLCBzQW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5ID0gc0Fubm90YXRpb25QYXRoLnJlcGxhY2UoYCR7c1RhcmdldFByb3BlcnR5UHJlZml4fS9gLCBcIlwiKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBvQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uRmllbGRzO1xuXHRcdFx0Y29uc3QgZmlsdGVyRmFjZXRzID0gZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZpbHRlckZhY2V0cztcblx0XHRcdGlmIChcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0T0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5faXNGaWx0ZXJBZGFwdGFibGUob0ZpbHRlckZpZWxkSW5mbywgb1Byb3BlcnR5QW5ub3RhdGlvbnMsIHNlbGVjdGlvbkZpZWxkcywgZmlsdGVyRmFjZXRzKSAmJlxuXHRcdFx0XHRpc1Byb3BlcnR5RmlsdGVyYWJsZShvTWV0YU1vZGVsLCBzVGFyZ2V0UHJvcGVydHlQcmVmaXgsIF9nZXRQcm9wZXJ0eVBhdGgoc1Byb3BlcnR5KSwgdHJ1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChvRmlsdGVyRmllbGRJbmZvIGFzIFByb3BlcnR5SW5mbyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vQ3VzdG9tIEZpbHRlcnNcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9GaWx0ZXJGaWVsZEluZm8gYXMgUHJvcGVydHlJbmZvKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGFQYXJhbWV0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHByb2Nlc3NlZEZpZWxkcyA9IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMoYUZldGNoZWRQcm9wZXJ0aWVzIGFzIEZpbHRlckZpZWxkW10sIG9Db252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgcHJvY2Vzc2VkRmllbGRzS2V5czogc3RyaW5nW10gPSBbXTtcblx0cHJvY2Vzc2VkRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wczogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRpZiAob1Byb3BzLmtleSkge1xuXHRcdFx0cHJvY2Vzc2VkRmllbGRzS2V5cy5wdXNoKG9Qcm9wcy5rZXkpO1xuXHRcdH1cblx0fSk7XG5cblx0YUZldGNoZWRQcm9wZXJ0aWVzID0gYUZldGNoZWRQcm9wZXJ0aWVzLmZpbHRlcihmdW5jdGlvbiAob1Byb3A6IEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0cmV0dXJuIHByb2Nlc3NlZEZpZWxkc0tleXMuaW5jbHVkZXMob1Byb3Aua2V5ISk7XG5cdH0pO1xuXG5cdGNvbnN0IG9GUiA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aCwgb01ldGFNb2RlbCksXG5cdFx0bUFsbG93ZWRFeHByZXNzaW9ucyA9IG9GUi5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM7XG5cdC8vT2JqZWN0LmtleXMocHJvY2Vzc2VkRmllbGRzKS5mb3JFYWNoKGZ1bmN0aW9uIChzRmlsdGVyRmllbGRLZXk6IHN0cmluZykge1xuXHRwcm9jZXNzZWRGaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3AsIGlGaWx0ZXJGaWVsZEluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCBvU2VsRmllbGQgPSBhRmV0Y2hlZFByb3BlcnRpZXNbaUZpbHRlckZpZWxkSW5kZXhdO1xuXHRcdGlmICghb1NlbEZpZWxkIHx8ICFvU2VsRmllbGQuY29uZGl0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gX2dldFByb3BlcnR5UGF0aChvU2VsRmllbGQuY29uZGl0aW9uUGF0aCk7XG5cdFx0Ly9mZXRjaEJhc2ljXG5cdFx0b1Byb3AgPSBPYmplY3QuYXNzaWduKG9Qcm9wLCB7XG5cdFx0XHRncm91cDogb1NlbEZpZWxkLmdyb3VwLFxuXHRcdFx0Z3JvdXBMYWJlbDogb1NlbEZpZWxkLmdyb3VwTGFiZWwsXG5cdFx0XHRwYXRoOiBvU2VsRmllbGQuY29uZGl0aW9uUGF0aCxcblx0XHRcdHRvb2x0aXA6IG51bGwsXG5cdFx0XHRyZW1vdmVGcm9tQXBwU3RhdGU6IGZhbHNlLFxuXHRcdFx0aGFzVmFsdWVIZWxwOiBmYWxzZVxuXHRcdH0pO1xuXG5cdFx0Ly9mZXRjaFByb3BJbmZvXG5cdFx0aWYgKG9TZWxGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb1NlbEZpZWxkLmFubm90YXRpb25QYXRoO1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5ID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0Fubm90YXRpb25QYXRoKSxcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQW5ub3RhdGlvblBhdGh9QGApLFxuXHRcdFx0XHRvUHJvcGVydHlDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQW5ub3RhdGlvblBhdGgpO1xuXG5cdFx0XHRjb25zdCBiUmVtb3ZlRnJvbUFwcFN0YXRlID1cblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlTZW5zaXRpdmVcIl0gfHxcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dFwiXSB8fFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuTWVhc3VyZVwiXTtcblxuXHRcdFx0Y29uc3Qgc1RhcmdldFByb3BlcnR5UHJlZml4ID0gQ29tbW9uSGVscGVyLmdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoKG9NZXRhTW9kZWwsIG9TZWxGaWVsZC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBzUHJvcGVydHkgPSBzQW5ub3RhdGlvblBhdGgucmVwbGFjZShgJHtzVGFyZ2V0UHJvcGVydHlQcmVmaXh9L2AsIFwiXCIpO1xuXHRcdFx0bGV0IG9GaWx0ZXJEZWZhdWx0VmFsdWVBbm5vdGF0aW9uO1xuXHRcdFx0bGV0IG9GaWx0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRpZiAob1Byb3BlcnR5Q29udGV4dCAmJiBpc1Byb3BlcnR5RmlsdGVyYWJsZShvTWV0YU1vZGVsLCBzVGFyZ2V0UHJvcGVydHlQcmVmaXgsIF9nZXRQcm9wZXJ0eVBhdGgoc1Byb3BlcnR5KSwgdHJ1ZSkpIHtcblx0XHRcdFx0b0ZpbHRlckRlZmF1bHRWYWx1ZUFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRGVmYXVsdFZhbHVlXCJdO1xuXHRcdFx0XHRpZiAob0ZpbHRlckRlZmF1bHRWYWx1ZUFubm90YXRpb24pIHtcblx0XHRcdFx0XHRvRmlsdGVyRGVmYXVsdFZhbHVlID0gb0ZpbHRlckRlZmF1bHRWYWx1ZUFubm90YXRpb25bYCQke2dldE1vZGVsVHlwZShvUHJvcGVydHkuJFR5cGUpfWBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0b1Byb3AgPSBPYmplY3QuYXNzaWduKG9Qcm9wLCB7XG5cdFx0XHRcdFx0dG9vbHRpcDogb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlF1aWNrSW5mb1wiXSB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0cmVtb3ZlRnJvbUFwcFN0YXRlOiBiUmVtb3ZlRnJvbUFwcFN0YXRlLFxuXHRcdFx0XHRcdGhhc1ZhbHVlSGVscDogaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eUNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogb1Byb3BlcnR5Q29udGV4dCB9KSxcblx0XHRcdFx0XHRkZWZhdWx0RmlsdGVyQ29uZGl0aW9uczogb0ZpbHRlckRlZmF1bHRWYWx1ZVxuXHRcdFx0XHRcdFx0PyBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRQYXRoOiBvU2VsRmllbGQuY29uZGl0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZXM6IFtvRmlsdGVyRGVmYXVsdFZhbHVlXVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCAgXVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9iYXNlXG5cblx0XHRpZiAob1Byb3ApIHtcblx0XHRcdGlmIChtQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eVBhdGhdICYmIG1BbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5UGF0aF0ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvUHJvcC5maWx0ZXJFeHByZXNzaW9uID0gQ29tbW9uVXRpbHMuZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihtQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eVBhdGhdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Qcm9wLmZpbHRlckV4cHJlc3Npb24gPSBcImF1dG9cIjtcblx0XHRcdH1cblxuXHRcdFx0b1Byb3AgPSBPYmplY3QuYXNzaWduKG9Qcm9wLCB7XG5cdFx0XHRcdHZpc2libGU6IG9TZWxGaWVsZC5hdmFpbGFiaWxpdHkgPT09IFwiRGVmYXVsdFwiXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRwcm9jZXNzZWRGaWVsZHNbaUZpbHRlckZpZWxkSW5kZXhdID0gb1Byb3A7XG5cdH0pO1xuXHRwcm9jZXNzZWRGaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcEluZm86IEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0Ly8ga2V5IHNob3VsZCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIG5hbWVcblx0XHRwcm9wSW5mby5rZXkgPSBwcm9wSW5mby5uYW1lO1xuXHRcdGlmIChwcm9wSW5mby5wYXRoID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0cHJvcEluZm8ubGFiZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9GaWx0ZXJDb250cm9sKS5nZXRUZXh0KFwiRklMVEVSQkFSX0VESVRJTkdfU1RBVFVTXCIpO1xuXHRcdH1cblx0XHRwcm9wSW5mby50eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKHByb3BJbmZvLmRhdGFUeXBlLCBwcm9wSW5mby5mb3JtYXRPcHRpb25zLCBwcm9wSW5mby5jb25zdHJhaW50cyk7XG5cdFx0cHJvcEluZm8ubGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KHByb3BJbmZvLmxhYmVsISwgb0ZpbHRlckNvbnRyb2wpIHx8IFwiXCI7XG5cdFx0aWYgKHByb3BJbmZvLmlzUGFyYW1ldGVyKSB7XG5cdFx0XHRhUGFyYW1ldGVyRmllbGRzLnB1c2gocHJvcEluZm8ubmFtZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRhRmV0Y2hlZFByb3BlcnRpZXMgPSBwcm9jZXNzZWRGaWVsZHM7XG5cdERlbGVnYXRlVXRpbC5zZXRDdXN0b21EYXRhKG9GaWx0ZXJDb250cm9sLCBcInBhcmFtZXRlcnNcIiwgYVBhcmFtZXRlckZpZWxkcyBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cblx0cmV0dXJuIGFGZXRjaGVkUHJvcGVydGllcyBhcyBQcm9wZXJ0eUluZm9bXTtcbn07XG5cbmZ1bmN0aW9uIGdldExpbmVJdGVtUXVhbGlmaWVyRnJvbVRhYmxlKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChvQ29udHJvbC5pc0E8RW5oYW5jZVdpdGhVSTU8VGFibGVBUEk+PihcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aHMgPSBvQ29udHJvbC5nZXRNZXRhUGF0aCgpLnNwbGl0KFwiI1wiKVswXS5zcGxpdChcIi9cIik7XG5cdFx0c3dpdGNoIChhbm5vdGF0aW9uUGF0aHNbYW5ub3RhdGlvblBhdGhzLmxlbmd0aCAtIDFdKSB7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50fWA6XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50fWA6XG5cdFx0XHRcdHJldHVybiBvTWV0YU1vZGVsXG5cdFx0XHRcdFx0LmdldE9iamVjdChvQ29udHJvbC5nZXRNZXRhUGF0aCgpKVxuXHRcdFx0XHRcdC5WaXN1YWxpemF0aW9ucz8uZmluZCgodmlzdWFsaXphdGlvbjogeyAkQW5ub3RhdGlvblBhdGg6IHN0cmluZyB9KSA9PlxuXHRcdFx0XHRcdFx0dmlzdWFsaXphdGlvbi4kQW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtfWApXG5cdFx0XHRcdFx0KS4kQW5ub3RhdGlvblBhdGg7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbX1gOlxuXHRcdFx0XHRjb25zdCBtZXRhUGF0aHMgPSBvQ29udHJvbC5nZXRNZXRhUGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0cmV0dXJuIG1ldGFQYXRoc1ttZXRhUGF0aHMubGVuZ3RoIC0gMV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2lzRmlsdGVyQWRhcHRhYmxlID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkLFxuXHRwcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eSxcblx0c2VsZWN0aW9uRmllbGRzPzogU2VsZWN0aW9uRmllbGRzLFxuXHRmaWx0ZXJGYWNldHM/OiBGaWx0ZXJGYWNldHNcbik6IGJvb2xlYW4ge1xuXHRsZXQgaXNJbkZpbHRlckZhY2V0czogYm9vbGVhbjtcblx0Y29uc3QgaXNTZWxlY3Rpb25GaWVsZCA9IHNlbGVjdGlvbkZpZWxkcyA/IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2lzRmlsdGVySW5TZWxlY3Rpb25GaWVsZHMoc2VsZWN0aW9uRmllbGRzLCBmaWx0ZXJGaWVsZEluZm8pIDogZmFsc2U7XG5cdGlmIChmaWx0ZXJGYWNldHMpIHtcblx0XHRpc0luRmlsdGVyRmFjZXRzID0gZmlsdGVyRmFjZXRzLnNvbWUoZnVuY3Rpb24gKGZpbHRlckZhY2V0OiBSZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cCA9IGZpbHRlckZhY2V0LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdHJldHVybiBmaWVsZEdyb3VwPy5EYXRhLnNvbWUoZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHQvLyB3ZSBleHBlY3QgZGF0YUZpZWxkIHRvIGJlIERhdGFGaWVsZFR5cGVzIChoYXZpbmcgYSBWYWx1ZSkgaW5zaWRlIEZpZWxkR3JvdXBzIGluc2lkZSBGaWx0ZXJGYWNldHNcblx0XHRcdFx0aWYgKChkYXRhRmllbGQgYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlLnBhdGggPT09IGZpbHRlckZpZWxkSW5mby5rZXkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBkYXRhRmllbGQgdHlwZXMgaGF2aW5nIG5vIFZhbHVlIChEYXRhRmllbGRGb3JBbm5vdGF0aW9uVHlwZXMsIERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMsIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMpLCB0aGVyZSBpcyBub3RoaW5nIHRvIGNoZWNrLCBidXQgdGhpcyBzaG91bGQgbm90IG9jY3VyIGFueXdheVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRpc0luRmlsdGVyRmFjZXRzID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIGlzU2VsZWN0aW9uRmllbGQgfHwgaXNJbkZpbHRlckZhY2V0cyB8fCAhcHJvcGVydHlBbm5vdGF0aW9ucy5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW47XG59O1xuXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLl9pc0ZpbHRlckluU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKHNlbGVjdGlvbkZpZWxkczogU2VsZWN0aW9uRmllbGRzLCBmaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkKTogYm9vbGVhbiB7XG5cdGNvbnN0IGZpbHRlckZpZWxkS2V5ID0gZmlsdGVyRmllbGRJbmZvLmtleT8uaW5kZXhPZihcIjo6XCIpID4gMCA/IGZpbHRlckZpZWxkSW5mby5rZXk/LnJlcGxhY2UoXCI6OlwiLCBcIi9cIikgOiBmaWx0ZXJGaWVsZEluZm8ua2V5O1xuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzLnNvbWUoZnVuY3Rpb24gKHNlbGVjdGlvbkZpZWxkOiBBbm5vdGF0aW9uU2VsZWN0aW9uRmllbGQpIHtcblx0XHRpZiAoc2VsZWN0aW9uRmllbGQudmFsdWUgPT09IGZpbHRlckZpZWxkS2V5KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn07XG5cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZEZsZXhJdGVtID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRzRmxleFByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIHwgdW5kZWZpbmVkLFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfCB1bmRlZmluZWQsXG5cdHZpZXc/OiBWaWV3IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50PiB7XG5cdGNvbnN0IHNGaWx0ZXJCYXJJZCA9IG9Nb2RpZmllciA/IG9Nb2RpZmllci5nZXRJZChvUGFyZW50Q29udHJvbCkgOiBvUGFyZW50Q29udHJvbC5nZXRJZCgpLFxuXHRcdHNJZFByZWZpeCA9IG9Nb2RpZmllciA/IFwiXCIgOiBcIkFkYXB0YXRpb25cIixcblx0XHRhU2VsZWN0aW9uRmllbGRzID0gRmlsdGVyVXRpbHMuZ2V0Q29udmVydGVkRmlsdGVyRmllbGRzKFxuXHRcdFx0b1BhcmVudENvbnRyb2wgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0b01vZGlmaWVyLFxuXHRcdFx0b01vZGlmaWVyID8gdW5kZWZpbmVkIDogZ2V0TGluZUl0ZW1RdWFsaWZpZXJGcm9tVGFibGUob1BhcmVudENvbnRyb2wuZ2V0UGFyZW50KCkhLCBvTWV0YU1vZGVsKVxuXHRcdCksXG5cdFx0b1NlbGVjdGlvbkZpZWxkID0gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fZmluZFNlbGVjdGlvbkZpZWxkKGFTZWxlY3Rpb25GaWVsZHMsIHNGbGV4UHJvcGVydHlOYW1lKSxcblx0XHRzUHJvcGVydHlQYXRoID0gX2dldFByb3BlcnR5UGF0aChzRmxleFByb3BlcnR5TmFtZSksXG5cdFx0YklzWE1MID0gISFvTW9kaWZpZXIgJiYgb01vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoc0ZsZXhQcm9wZXJ0eU5hbWUgPT09IEVESVRfU1RBVEVfUFJPUEVSVFlfTkFNRSkge1xuXHRcdHJldHVybiBfdGVtcGxhdGVFZGl0U3RhdGUoX2dlbmVyYXRlSWRQcmVmaXgoc0ZpbHRlckJhcklkLCBgJHtzSWRQcmVmaXh9RmlsdGVyRmllbGRgKSwgb01ldGFNb2RlbCwgb01vZGlmaWVyKTtcblx0fSBlbHNlIGlmIChzRmxleFByb3BlcnR5TmFtZSA9PT0gU0VBUkNIX1BST1BFUlRZX05BTUUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHR9IGVsc2UgaWYgKG9TZWxlY3Rpb25GaWVsZD8udGVtcGxhdGUpIHtcblx0XHRyZXR1cm4gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fdGVtcGxhdGVDdXN0b21GaWx0ZXIoXG5cdFx0XHRvUGFyZW50Q29udHJvbCBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sLFxuXHRcdFx0X2dlbmVyYXRlSWRQcmVmaXgoc0ZpbHRlckJhcklkLCBgJHtzSWRQcmVmaXh9YCksXG5cdFx0XHRvU2VsZWN0aW9uRmllbGQsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0b01vZGlmaWVyIVxuXHRcdCk7XG5cdH1cblxuXHRpZiAob1NlbGVjdGlvbkZpZWxkPy50eXBlID09PSBcIlNsb3RcIiAmJiBvTW9kaWZpZXIpIHtcblx0XHRyZXR1cm4gX2FkZFhNTEN1c3RvbUZpbHRlckZpZWxkKG9QYXJlbnRDb250cm9sIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2wsIG9Nb2RpZmllciwgc1Byb3BlcnR5UGF0aCk7XG5cdH1cblxuXHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCk7XG5cdGxldCBzRW50aXR5VHlwZVBhdGg6IHN0cmluZztcblx0bGV0IHNVc2VTZW1hbnRpY0RhdGVSYW5nZTtcblx0bGV0IG9TZXR0aW5nczoge1xuXHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0Y29udGV4dFBhdGg6IENvbnRleHQ7XG5cdFx0XHRwcm9wZXJ0eTogQ29udGV4dDtcblx0XHR9O1xuXHRcdG1vZGVsczoge1xuXHRcdFx0Y29udGV4dFBhdGg6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0cHJvcGVydHk/OiBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdG1ldGFQYXRoPzogT0RhdGFNZXRhTW9kZWw7XG5cdFx0fTtcblx0XHRpc1hNTDogYm9vbGVhbjtcblx0fTtcblx0bGV0IHNCaW5kaW5nUGF0aDtcblx0bGV0IG9QYXJhbWV0ZXJzOiB7XG5cdFx0bWV0YVBhdGg6IHN0cmluZztcblx0XHRzUHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0c0JpbmRpbmdQYXRoOiBzdHJpbmc7XG5cdFx0c1ZhbHVlSGVscFR5cGU6IHN0cmluZztcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblx0XHRzSWRQcmVmaXg6IHN0cmluZztcblx0XHRvU2V0dGluZ3M6IHVua25vd247XG5cdFx0c1ZoSWRQcmVmaXg6IHN0cmluZztcblx0XHRzTmF2aWdhdGlvblByZWZpeD86IHN0cmluZztcblx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U6IGJvb2xlYW47XG5cdFx0b01vZGlmaWVyPzogQmFzZVRyZWVNb2RpZmllcjtcblx0XHRvQ29udHJvbDogVUk1RWxlbWVudDtcblx0XHR2aXN1YWxGaWx0ZXI/OiB1bmtub3duO1xuXHRcdHZpZXc/OiBWaWV3O1xuXHRcdGxhYmVsPzogc3RyaW5nO1xuXHR9O1xuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChvU2VsZWN0aW9uRmllbGQ/LmlzUGFyYW1ldGVyKSB7XG5cdFx0XHRcdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IG9TZWxlY3Rpb25GaWVsZC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0cmV0dXJuIHNBbm5vdGF0aW9uUGF0aC5zdWJzdHJpbmcoMCwgc0Fubm90YXRpb25QYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob1BhcmVudENvbnRyb2wsIFwiZW50aXR5VHlwZVwiLCBvTW9kaWZpZXIpO1xuXHRcdH0pXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKHNSZXRyaWV2ZWRFbnRpdHlUeXBlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRzRW50aXR5VHlwZVBhdGggPSBzUmV0cmlldmVkRW50aXR5VHlwZVBhdGghO1xuXHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob1BhcmVudENvbnRyb2wsIFwidXNlU2VtYW50aWNEYXRlUmFuZ2VcIiwgb01vZGlmaWVyKTtcblx0XHR9KVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChzUmV0cmlldmVkVXNlU2VtYW50aWNEYXRlUmFuZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdFx0c1VzZVNlbWFudGljRGF0ZVJhbmdlID0gc1JldHJpZXZlZFVzZVNlbWFudGljRGF0ZVJhbmdlO1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5Q29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0VudGl0eVR5cGVQYXRoICsgc1Byb3BlcnR5UGF0aCkhO1xuXHRcdFx0bGV0IHNJbkZpbHRlckJhcklkID0gb01vZGlmaWVyID8gb01vZGlmaWVyLmdldElkKG9QYXJlbnRDb250cm9sKSA6IG9QYXJlbnRDb250cm9sLmdldElkKCk7XG5cdFx0XHRpZiAoc0luRmlsdGVyQmFySWQuZW5kc1dpdGgoXCItY29udGVudFwiKSkge1xuXHRcdFx0XHQvLyAtY29udGVudCBpcyBvbmx5IGFkZGVkIHdoZW4gdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgZGlyZWN0bHkgaW4gdGhlIGZpbHRlciBiYXJcblx0XHRcdFx0c0luRmlsdGVyQmFySWQgPSBzSW5GaWx0ZXJCYXJJZC5zdWJzdHJpbmcoMCwgc0luRmlsdGVyQmFySWQubGFzdEluZGV4T2YoXCItY29udGVudFwiKSk7XG5cdFx0XHRcdC8vIEJ5IHVzaW5nIHRoZSBpZCBvZiB0aGUgcGFyZW50IGNvbnRyb2wsIHdlIGNhbiBnZXQgdGhlIGNvcnJlY3QgaWRQcmVmaXggZm9yIHRoZSB2YWx1ZSBoZWxwXG5cdFx0XHR9XG5cdFx0XHRvU2V0dGluZ3MgPSB7XG5cdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCkhLFxuXHRcdFx0XHRcdHByb3BlcnR5OiBvUHJvcGVydHlDb250ZXh0XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5OiBvTWV0YU1vZGVsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGlzWE1MOiBiSXNYTUxcblx0XHRcdH07XG5cdFx0XHRzQmluZGluZ1BhdGggPSBgLyR7TW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChzRW50aXR5VHlwZVBhdGgpXG5cdFx0XHRcdC5zcGxpdChcIi9cIilcblx0XHRcdFx0LmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZylcblx0XHRcdFx0LmpvaW4oXCIvXCIpfWA7XG5cdFx0XHRvUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0bWV0YVBhdGg6IG9Qcm9wZXJ0eUNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0XHRzUHJvcGVydHlOYW1lOiBzUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRzQmluZGluZ1BhdGg6IHNCaW5kaW5nUGF0aCxcblx0XHRcdFx0c1ZhbHVlSGVscFR5cGU6IHNJZFByZWZpeCArIFZBTFVFX0hFTFBfVFlQRSxcblx0XHRcdFx0b0NvbnRyb2w6IG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRvTWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRvTW9kaWZpZXI6IG9Nb2RpZmllcixcblx0XHRcdFx0c0lkUHJlZml4OiBfZ2VuZXJhdGVJZFByZWZpeChzSW5GaWx0ZXJCYXJJZCwgYCR7c0lkUHJlZml4fUZpbHRlckZpZWxkYCwgc05hdmlnYXRpb25QYXRoKSxcblx0XHRcdFx0c1ZoSWRQcmVmaXg6IF9nZW5lcmF0ZUlkUHJlZml4KHNJbkZpbHRlckJhcklkLCBzSWRQcmVmaXggKyBWQUxVRV9IRUxQX1RZUEUpLFxuXHRcdFx0XHRzTmF2aWdhdGlvblByZWZpeDogc05hdmlnYXRpb25QYXRoLFxuXHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U6IHNVc2VTZW1hbnRpY0RhdGVSYW5nZSBhcyB1bmtub3duIGFzIGJvb2xlYW4sXG5cdFx0XHRcdG9TZXR0aW5nczogb1NlbGVjdGlvbkZpZWxkPy5zZXR0aW5ncyA/PyB7fSxcblx0XHRcdFx0dmlzdWFsRmlsdGVyOiBvU2VsZWN0aW9uRmllbGQ/LnZpc3VhbEZpbHRlcixcblx0XHRcdFx0dmlldyxcblx0XHRcdFx0bGFiZWw6IG9TZWxlY3Rpb25GaWVsZD8ubGFiZWxcblx0XHRcdH07XG5cblx0XHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZG9lc1ZhbHVlSGVscEV4aXN0KG9QYXJhbWV0ZXJzKTtcblx0XHR9KVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChiVmFsdWVIZWxwRXhpc3RzOiBib29sZWFuKSB7XG5cdFx0XHRpZiAoIWJWYWx1ZUhlbHBFeGlzdHMpIHtcblx0XHRcdFx0cmV0dXJuIF90ZW1wbGF0ZVZhbHVlSGVscChcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0VudGl0eVR5cGVQYXRoKSEsXG5cdFx0XHRcdFx0XHRcdG1ldGFQYXRoOiBvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLnByb3BlcnR5XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhUGF0aDogb01ldGFNb2RlbFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlzWE1MOiBiSXNYTUxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9QYXJhbWV0ZXJzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPihvUGFyZW50Q29udHJvbCwgXCJsb2NhbElkXCIsIG9Nb2RpZmllcik7XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAobG9jYWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRsZXQgcGFnZU1vZGVsO1xuXHRcdFx0aWYgKG9QYXJhbWV0ZXJzLnZpc3VhbEZpbHRlcikge1xuXHRcdFx0XHQvL05lZWQgdG8gc2V0IHRoZSBjb252ZXJ0ZXJjb250ZXh0IGFzIHBhZ2VNb2RlbCBpbiBzZXR0aW5ncyBmb3IgQnVpbGRpbmdCbG9jayAyLjBcblx0XHRcdFx0cGFnZU1vZGVsID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvUGFyZW50Q29udHJvbCkuZ2V0Q29udHJvbGxlcigpLl9nZXRQYWdlTW9kZWwoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBfdGVtcGxhdGVGaWx0ZXJGaWVsZChvU2V0dGluZ3MsIG9QYXJhbWV0ZXJzLCBsb2NhbElkLCBwYWdlTW9kZWwpO1xuXHRcdH0pO1xufTtcbmZ1bmN0aW9uIF9nZXRDYWNoZWRQcm9wZXJ0aWVzKG9GaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sIHwgRWxlbWVudCk6IG51bGwgfCBQcm9wZXJ0eUluZm9bXSB8IHVuZGVmaW5lZCB7XG5cdC8vIHByb3BlcnRpZXMgYXJlIG5vdCBjYWNoZWQgZHVyaW5nIHRlbXBsYXRpbmdcblx0aWYgKG9GaWx0ZXJCYXIgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxQcm9wZXJ0eUluZm9bXT4ob0ZpbHRlckJhciwgRkVUQ0hFRF9QUk9QRVJUSUVTX0RBVEFfS0VZKTtcbn1cbmZ1bmN0aW9uIF9zZXRDYWNoZWRQcm9wZXJ0aWVzKG9GaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sIHwgRWxlbWVudCwgYUZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSk6IHZvaWQge1xuXHQvLyBkbyBub3QgY2FjaGUgZHVyaW5nIHRlbXBsYXRpbmcsIGVsc2UgaXQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjYWNoZWQgdmlld1xuXHRpZiAob0ZpbHRlckJhciBpbnN0YW5jZW9mIHdpbmRvdy5FbGVtZW50KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdERlbGVnYXRlVXRpbC5zZXRDdXN0b21EYXRhKG9GaWx0ZXJCYXIsIEZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWSwgYUZldGNoZWRQcm9wZXJ0aWVzIGFzIHVua25vd24gYXMgc3RyaW5nKTtcbn1cbmZ1bmN0aW9uIF9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShcblx0c0VudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbFxuKTogQ29udHJvbFByb3BlcnR5SW5mb1tdIHwgUHJvcGVydHlJbmZvRXh0ZXJuYWxbXSB7XG5cdGxldCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBfZ2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyKTtcblx0bGV0IGxvY2FsR3JvdXBMYWJlbDtcblxuXHRpZiAoIWFGZXRjaGVkUHJvcGVydGllcykge1xuXHRcdGFGZXRjaGVkUHJvcGVydGllcyA9IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHNFbnRpdHlUeXBlUGF0aCwgb01ldGFNb2RlbCwgb0ZpbHRlckJhcik7XG5cdFx0YUZldGNoZWRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG9Hcm91cDogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRcdGxvY2FsR3JvdXBMYWJlbCA9IG51bGw7XG5cdFx0XHRpZiAob0dyb3VwLmdyb3VwTGFiZWwpIHtcblx0XHRcdFx0bG9jYWxHcm91cExhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChvR3JvdXAuZ3JvdXBMYWJlbCwgb0ZpbHRlckJhcik7XG5cdFx0XHRcdG9Hcm91cC5ncm91cExhYmVsID0gbG9jYWxHcm91cExhYmVsID09PSBudWxsID8gb0dyb3VwLmdyb3VwTGFiZWwgOiBsb2NhbEdyb3VwTGFiZWw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHRfc2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyLCBhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHR9XG5cdHJldHVybiBhRmV0Y2hlZFByb3BlcnRpZXM7XG59XG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLmZldGNoUHJvcGVydGllcyA9IGFzeW5jIGZ1bmN0aW9uIChmaWx0ZXJCYXI6IEZpbHRlckJhcik6IFByb21pc2U8UHJvcGVydHlJbmZvRXh0ZXJuYWxbXT4ge1xuXHRjb25zdCBwcm9wZXJ0eUluZm9zID0gYXdhaXQgT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5mZXRjaEZpbHRlclByb3BlcnRpZXMoZmlsdGVyQmFyIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2wpO1xuXHREZWxlZ2F0ZVV0aWwuc2V0Q3VzdG9tRGF0YShmaWx0ZXJCYXIsIFwiZmVGaWx0ZXJJbmZvXCIsIHByb3BlcnR5SW5mb3MpO1xuXHRpZiAocHJvcGVydHlJbmZvcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLmZvcm1hdFByb3BlcnR5SW5mbyhwcm9wZXJ0eUluZm9zIGFzIFByb3BlcnR5SW5mb1tdKSBhcyBQcm9wZXJ0eUluZm9FeHRlcm5hbFtdO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBbXTtcblx0fVxufTtcblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5mZXRjaEZpbHRlclByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAoXG5cdGZpbHRlckJhcjogSUZpbHRlckNvbnRyb2xcbik6IFByb21pc2U8Q29udHJvbFByb3BlcnR5SW5mb1tdIHwgUHJvcGVydHlJbmZvRXh0ZXJuYWxbXT4ge1xuXHRjb25zdCBlbnRpdHlUeXBlUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4oZmlsdGVyQmFyLCBcImVudGl0eVR5cGVcIikhO1xuXHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwoZmlsdGVyQmFyIGFzIEZpbHRlckJhcikudGhlbihmdW5jdGlvbiAobW9kZWw6IE1vZGVsKSB7XG5cdFx0aWYgKCFtb2RlbCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KGVudGl0eVR5cGVQYXRoLCBtb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCwgZmlsdGVyQmFyKTtcblx0fSk7XG59O1xuXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLmdldFR5cGVNYXAgPSBmdW5jdGlvbiAoKTogdHlwZW9mIFR5cGVNYXAge1xuXHRyZXR1cm4gVHlwZU1hcDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJEQSxNQUFNQSxzQkFBc0IsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMs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
719
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YUZpbHRlckJhckRlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiRmlsdGVyQmFyRGVsZWdhdGUiLCJhcGlWZXJzaW9uIiwiRURJVF9TVEFURV9QUk9QRVJUWV9OQU1FIiwiU0VBUkNIX1BST1BFUlRZX05BTUUiLCJWQUxVRV9IRUxQX1RZUEUiLCJGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVkiLCJfdGVtcGxhdGVFZGl0U3RhdGUiLCJzSWRQcmVmaXgiLCJtZXRhTW9kZWwiLCJvTW9kaWZpZXIiLCJvVGhpcyIsIkpTT05Nb2RlbCIsImlkIiwiaXNEcmFmdENvbGxhYm9yYXRpdmUiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwidGhpcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibW9kZWxzIiwiRGVsZWdhdGVVdGlsIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJ1bmRlZmluZWQiLCJmaW5hbGx5IiwiZGVzdHJveSIsIl90ZW1wbGF0ZUN1c3RvbUZpbHRlciIsIm9GaWx0ZXJCYXIiLCJvU2VsZWN0aW9uRmllbGRJbmZvIiwib01ldGFNb2RlbCIsInNFbnRpdHlUeXBlUGF0aCIsImdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXIiLCJhbm5vdGF0aW9uUGF0aCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiZGF0YU1vZGVsUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRvY3VtZW50UmVmVGV4dCIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRG9jdW1lbnRhdGlvblJlZiIsInRvU3RyaW5nIiwib0l0ZW1Nb2RlbCIsIlRlbXBsYXRlTW9kZWwiLCJjb250ZXh0UGF0aCIsIml0ZW0iLCJvVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsIm9PcHRpb25zIiwiY29udHJvbGxlciIsInZpZXciLCJfZ2V0UHJvcGVydHlQYXRoIiwic0NvbmRpdGlvblBhdGgiLCJGaWx0ZXJVdGlscyIsImdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoIiwiX2ZpbmRTZWxlY3Rpb25GaWVsZCIsImFTZWxlY3Rpb25GaWVsZHMiLCJzRmxleE5hbWUiLCJmaW5kIiwib1NlbGVjdGlvbkZpZWxkIiwiY29uZGl0aW9uUGF0aCIsInJlcGxhY2VBbGwiLCJhdmFpbGFiaWxpdHkiLCJfZ2VuZXJhdGVJZFByZWZpeCIsInNGaWx0ZXJCYXJJZCIsInNDb250cm9sVHlwZSIsInNOYXZpZ2F0aW9uUHJlZml4IiwiZ2VuZXJhdGUiLCJfdGVtcGxhdGVWYWx1ZUhlbHAiLCJvU2V0dGluZ3MiLCJvUGFyYW1ldGVycyIsImlkUHJlZml4Iiwic1ZoSWRQcmVmaXgiLCJjb25kaXRpb25Nb2RlbCIsIm5hdmlnYXRpb25QcmVmaXgiLCJmaWx0ZXJGaWVsZFZhbHVlSGVscCIsInVzZVNlbWFudGljRGF0ZVJhbmdlIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwibWV0YVBhdGgiLCJ1c2VNdWx0aVZhbHVlRmllbGQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJjb2xsYWJvcmF0aW9uRW5hYmxlZCIsInJlcXVlc3RHcm91cElkIiwianNvbk1vZGVsIiwibWVyZ2VPYmplY3RzIiwidGFyZ2V0UGF0aCIsIkZpZWxkSGVscGVyIiwidmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZCIsImlzWE1MIiwidmFsdWVIZWxwWE1MU3RyaW5nIiwianN4IiwicmVuZGVyQXNYTUwiLCJnZXRWYWx1ZUhlbHBUZW1wbGF0ZSIsImdldE1vZGVsIiwidmFsdWVIZWxwWE1MIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInRoZW4iLCJhVkhFbGVtZW50cyIsInNBZ2dyZWdhdGlvbk5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiZWx0IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJvQ29udHJvbCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJ2YWx1ZUhlbHAiLCJfYWRkWE1MQ3VzdG9tRmlsdGVyRmllbGQiLCJzUHJvcGVydHlQYXRoIiwiYURlcGVuZGVudHMiLCJnZXRBZ2dyZWdhdGlvbiIsImkiLCJsZW5ndGgiLCJvRmlsdGVyRmllbGQiLCJpc0EiLCJzRGF0YVByb3BlcnR5IiwiZ2V0UHJvcGVydHlLZXkiLCJzRmlsdGVyRmllbGRJZCIsImdldElkIiwiaW5kZXhPZiIsIl90ZW1wbGF0ZUZpbHRlckZpZWxkIiwic0luRmlsdGVyQmFySWQiLCJwYWdlTW9kZWwiLCJ2aElkUHJlZml4IiwicHJvcGVydHlQYXRoIiwic1Byb3BlcnR5TmFtZSIsInNldHRpbmdzIiwidmlzdWFsRmlsdGVyIiwiZWRpdE1vZGUiLCJsYWJlbCIsIm9WaXN1YWxGaWx0ZXIiLCJjb252ZXJ0ZXJDb250ZXh0IiwiX2FkZFByb3BlcnR5SW5mbyIsIm9QYXJlbnRDb250cm9sIiwibVByb3BlcnR5QmFnIiwic1Byb3BlcnR5SW5mb05hbWUiLCJzUHJvcGVydHlJbmZvS2V5IiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsInJlcGxhY2UiLCJtb2RpZmllciIsImRlbGVnYXRlIiwiZ2V0UHJvcGVydHkiLCJhUHJvcGVydHlJbmZvIiwiaGFzUHJvcGVydHlJbmZvIiwic29tZSIsInByb3AiLCJrZXkiLCJuYW1lIiwiZW50aXR5VHlwZVBhdGgiLCJwYXlsb2FkIiwiY3JlYXRlQ29udmVydGVyQ29udGV4dCIsImFwcENvbXBvbmVudCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJnZXRGaWx0ZXJGaWVsZCIsInByb3BlcnR5SW5mbyIsImJ1aWxkUHJvcGVyeUluZm8iLCJfdXBkYXRlUHJvcGVydHlJbmZvIiwiZXJyb3JNc2ciLCJ3YXJuaW5nIiwicHJvcGVydHlCYWciLCJwYXJlbnRDb250cm9sIiwicHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyIiwicHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyT2JqIiwiSlNPTiIsInBhcnNlIiwicHVzaCIsInN0cmluZ2lmeSIsImN1c3RvbURhdGFOb2RlIiwicmV0cmlldmVDdXN0b21EYXRhTm9kZSIsInNldEF0dHJpYnV0ZSIsIl9wcm9wZXJ0eUluZm8iLCJmb3JtYXRQcm9wZXJ0eUluZm8iLCJzZXRQcm9wZXJ0eSIsImFkZEl0ZW0iLCJfYWRkUDEzbkl0ZW0iLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsInRhcmdldHMiLCJfYWRkRmxleEl0ZW0iLCJyZW1vdmVJdGVtIiwib0ZpbHRlckZpZWxkUHJvcGVydHkiLCJkb1JlbW92ZUl0ZW0iLCJmaWx0ZXJGaWVsZFByb3BlcnR5IiwiZGF0YSIsImFkZENvbmRpdGlvbiIsInJlbW92ZUNvbmRpdGlvbiIsInByb3BlcnR5SW5mb0Zyb21DRCIsImNsZWFyRmlsdGVycyIsIm9GaWx0ZXJDb250cm9sIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwiU3RhdGVIZWxwZXIiLCJjbGVhckZpbHRlclZhbHVlcyIsImZldGNoTW9kZWwiLCJvTW9kZWwiLCJmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJvRW50aXR5VHlwZSIsImdldE9iamVjdCIsImluY2x1ZGVIaWRkZW4iLCJvQ29udmVydGVyQ29udGV4dCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0RW50aXR5U2V0UGF0aCIsIm1GaWx0ZXJGaWVsZHMiLCJnZXRDb252ZXJ0ZWRGaWx0ZXJGaWVsZHMiLCJnZXRBcHBDb21wb25lbnQiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJvRmlsdGVyRmllbGRJbmZvIiwic0Fubm90YXRpb25QYXRoIiwidGVtcGxhdGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsImdldENvbnZlcnRlZFR5cGVzIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJzVGFyZ2V0UHJvcGVydHlQcmVmaXgiLCJDb21tb25IZWxwZXIiLCJnZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aCIsInNQcm9wZXJ0eSIsInNlbGVjdGlvbkZpZWxkcyIsIlVJIiwiU2VsZWN0aW9uRmllbGRzIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiX2lzRmlsdGVyQWRhcHRhYmxlIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJhUGFyYW1ldGVyRmllbGRzIiwicHJvY2Vzc2VkRmllbGRzIiwicHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyIsInByb2Nlc3NlZEZpZWxkc0tleXMiLCJvUHJvcHMiLCJmaWx0ZXIiLCJvUHJvcCIsImluY2x1ZGVzIiwiZGF0YU1vZGVsIiwib0ZSIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlEYXRhTW9kZWwiLCJtQWxsb3dlZEV4cHJlc3Npb25zIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwiaUZpbHRlckZpZWxkSW5kZXgiLCJvU2VsRmllbGQiLCJncm91cCIsImdyb3VwTGFiZWwiLCJwYXRoIiwidG9vbHRpcCIsInJlbW92ZUZyb21BcHBTdGF0ZSIsImhhc1ZhbHVlSGVscCIsIm9Qcm9wZXJ0eSIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJiUmVtb3ZlRnJvbUFwcFN0YXRlIiwib0ZpbHRlckRlZmF1bHRWYWx1ZUFubm90YXRpb24iLCJvRmlsdGVyRGVmYXVsdFZhbHVlIiwiZ2V0TW9kZWxUeXBlIiwiJFR5cGUiLCJkZWZhdWx0RmlsdGVyQ29uZGl0aW9ucyIsImZpZWxkUGF0aCIsIm9wZXJhdG9yIiwidmFsdWVzIiwiZmlsdGVyRXhwcmVzc2lvbiIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJ2aXNpYmxlIiwicHJvcEluZm8iLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsInR5cGVDb25maWciLCJUeXBlTWFwIiwiZ2V0VHlwZUNvbmZpZyIsImRhdGFUeXBlIiwiZm9ybWF0T3B0aW9ucyIsImNvbnN0cmFpbnRzIiwiZ2V0TG9jYWxpemVkVGV4dCIsImlzUGFyYW1ldGVyIiwic2V0Q3VzdG9tRGF0YSIsImdldExpbmVJdGVtUXVhbGlmaWVyRnJvbVRhYmxlIiwiYW5ub3RhdGlvblBhdGhzIiwiZ2V0TWV0YVBhdGgiLCJzcGxpdCIsIlZpc3VhbGl6YXRpb25zIiwidmlzdWFsaXphdGlvbiIsIiRBbm5vdGF0aW9uUGF0aCIsIm1ldGFQYXRocyIsImZpbHRlckZpZWxkSW5mbyIsInByb3BlcnR5QW5ub3RhdGlvbnMiLCJpc0luRmlsdGVyRmFjZXRzIiwiaXNTZWxlY3Rpb25GaWVsZCIsIl9pc0ZpbHRlckluU2VsZWN0aW9uRmllbGRzIiwiZmlsdGVyRmFjZXQiLCJmaWVsZEdyb3VwIiwiVGFyZ2V0IiwiJHRhcmdldCIsIkRhdGEiLCJkYXRhRmllbGQiLCJWYWx1ZSIsIkFkYXB0YXRpb25IaWRkZW4iLCJmaWx0ZXJGaWVsZEtleSIsInNlbGVjdGlvbkZpZWxkIiwidmFsdWUiLCJzRmxleFByb3BlcnR5TmFtZSIsIm9BcHBDb21wb25lbnQiLCJiSXNYTUwiLCJ0eXBlIiwic05hdmlnYXRpb25QYXRoIiwiZ2V0TmF2aWdhdGlvblBhdGgiLCJzVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJzQmluZGluZ1BhdGgiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInNSZXRyaWV2ZWRFbnRpdHlUeXBlUGF0aCIsInNSZXRyaWV2ZWRVc2VTZW1hbnRpY0RhdGVSYW5nZSIsImVuZHNXaXRoIiwicHJvcGVydHkiLCJmaWx0ZXJPdXROYXZQcm9wQmluZGluZyIsImpvaW4iLCJnZXRQYXRoIiwic1ZhbHVlSGVscFR5cGUiLCJkb2VzVmFsdWVIZWxwRXhpc3QiLCJiVmFsdWVIZWxwRXhpc3RzIiwibG9jYWxJZCIsIl9nZXRQYWdlTW9kZWwiLCJfZ2V0Q2FjaGVkUHJvcGVydGllcyIsIndpbmRvdyIsIkVsZW1lbnQiLCJnZXRDdXN0b21EYXRhIiwiX3NldENhY2hlZFByb3BlcnRpZXMiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJsb2NhbEdyb3VwTGFiZWwiLCJvR3JvdXAiLCJzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbCIsImZldGNoUHJvcGVydGllcyIsImZpbHRlckJhciIsInByb3BlcnR5SW5mb3MiLCJmZXRjaEZpbHRlclByb3BlcnRpZXMiLCJnZXRUeXBlTWFwIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXJEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHRGaWVsZEdyb3VwVHlwZSxcblx0RmlsdGVyRmFjZXRzLFxuXHRSZWZlcmVuY2VGYWNldCxcblx0U2VsZWN0aW9uRmllbGRzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyLCBQcmVwcm9jZXNzb3JTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IEZpbHRlclJlc3RyaWN0aW9ucyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vZmlsdGVyL0ZpbHRlclJlc3RyaWN0aW9uc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRQcm9wZXJ0eUluZm8gYXMgRkVQcm9wZXJ0eUluZm8sXG5cdEZpbHRlckZpZWxkLFxuXHRQcm9wZXJ0eUluZm9FeHRlcm5hbFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0IHsgcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcywgc29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IGlzUHJvcGVydHlGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0TG9jYWxpemVkVGV4dCwgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5Rm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0TW9kZWxUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJRmlsdGVyQ29udHJvbCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9Qcm9wZXJ0eUluZm9cIjtcbmltcG9ydCB7IGdldFZhbHVlSGVscFRlbXBsYXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlSGVscFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgU3RhdGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvbWRjL2FkYXB0ZXIvU3RhdGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlckJhckRlbGVnYXRlIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgdHlwZSBNRENGaWx0ZXJGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcIi4uL01hY3JvQVBJXCI7XG5cbnR5cGUgTW9kaWZpZXJFbGVtZW50ID0gVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXSB8IEVsZW1lbnQgfCBFbGVtZW50W107XG50eXBlIE51bGxhYmxlTW9kaWZpZXJFbGVtZW50ID0gdm9pZCB8IE1vZGlmaWVyRWxlbWVudCB8IG51bGw7XG5jb25zdCBPRGF0YUZpbHRlckJhckRlbGVnYXRlID0gT2JqZWN0LmFzc2lnbih7fSwgRmlsdGVyQmFyRGVsZWdhdGUpIGFzIHR5cGVvZiBGaWx0ZXJCYXJEZWxlZ2F0ZSAmIHtcblx0YXBpVmVyc2lvbjogbnVtYmVyO1xuXHRfaXNGaWx0ZXJJblNlbGVjdGlvbkZpZWxkcyhzZWxlY3Rpb25GaWVsZHM6IFNlbGVjdGlvbkZpZWxkcywgZmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCk6IGJvb2xlYW47XG5cdF9maW5kU2VsZWN0aW9uRmllbGQoYVNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSwgc0ZsZXhOYW1lOiBzdHJpbmcpOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZDtcblx0Y2xlYXJGaWx0ZXJzKG9GaWx0ZXJDb250cm9sOiBGaWx0ZXJCYXIpOiBQcm9taXNlPHZvaWQ+O1xuXHRnZXRUeXBlTWFwKCk6IHR5cGVvZiBUeXBlTWFwO1xuXHRmZXRjaEZpbHRlclByb3BlcnRpZXMoZmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCk6IFByb21pc2U8Q29udHJvbFByb3BlcnR5SW5mb1tdIHwgUHJvcGVydHlJbmZvRXh0ZXJuYWxbXT47XG5cdGZldGNoUHJvcGVydGllcyhmaWx0ZXJCYXI6IEZpbHRlckJhcik6IFByb21pc2U8UHJvcGVydHlJbmZvRXh0ZXJuYWxbXT47XG5cdF9pc0ZpbHRlckFkYXB0YWJsZShcblx0XHRmaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkLFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IFByb3BlcnR5LFxuXHRcdHNlbGVjdGlvbkZpZWxkcz86IFNlbGVjdGlvbkZpZWxkcyxcblx0XHRmaWx0ZXJGYWNldHM/OiBGaWx0ZXJGYWNldHNcblx0KTogYm9vbGVhbjtcblx0ZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgb0ZpbHRlckNvbnRyb2w6IElGaWx0ZXJDb250cm9sKTogUHJvcGVydHlJbmZvW107XG5cdF90ZW1wbGF0ZUN1c3RvbUZpbHRlcihcblx0XHRvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCxcblx0XHRzSWRQcmVmaXg6IHN0cmluZyxcblx0XHRvU2VsZWN0aW9uRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXJcblx0KTogUHJvbWlzZTxNb2RpZmllckVsZW1lbnQ+O1xuXHRfYWRkUDEzbkl0ZW0oc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZywgb1BhcmVudENvbnRyb2w6IEZpbHRlckJhcik6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+O1xuXHRfYWRkRmxleEl0ZW0oXG5cdFx0c0ZsZXhQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IHVuZGVmaW5lZCxcblx0XHRvQXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50LFxuXHRcdHZpZXc/OiBWaWV3XG5cdCk6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+O1xuXHRhZGRJdGVtKFxuXHRcdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdFx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0XHRtUHJvcGVydHlCYWc/OiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9XG5cdCk6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+O1xuXHRhZGRDb25kaXRpb24oXG5cdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfVxuXHQpOiBQcm9taXNlPHZvaWQgfCBudWxsPjtcblx0cmVtb3ZlSXRlbShcblx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdG9GaWx0ZXJGaWVsZFByb3BlcnR5OiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIH1cblx0KTogUHJvbWlzZTxib29sZWFuIHwgbnVsbD47XG5cdHJlbW92ZUNvbmRpdGlvbihcblx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdFx0bVByb3BlcnR5QmFnOiB7XG5cdFx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0XHRcdG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyO1xuXHRcdH1cblx0KTogUHJvbWlzZTx2b2lkIHwgbnVsbD47XG59O1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5hcGlWZXJzaW9uID0gMjtcbmNvbnN0IEVESVRfU1RBVEVfUFJPUEVSVFlfTkFNRSA9IFwiJGVkaXRTdGF0ZVwiLFxuXHRTRUFSQ0hfUFJPUEVSVFlfTkFNRSA9IFwiJHNlYXJjaFwiLFxuXHRWQUxVRV9IRUxQX1RZUEUgPSBcIkZpbHRlckZpZWxkVmFsdWVIZWxwXCIsXG5cdEZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWSA9IFwic2FwX2ZlX0ZpbHRlckJhckRlbGVnYXRlX3Byb3BlcnR5SW5mb01hcFwiO1xuXG4vLyBGb3Igb25lIHNpbmdsZSBlbnRyeSBpbiBVSS5TZWxlY3Rpb25GaWVsZHNcbnR5cGUgQW5ub3RhdGlvblNlbGVjdGlvbkZpZWxkID0ge1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gX3RlbXBsYXRlRWRpdFN0YXRlKFxuXHRzSWRQcmVmaXg6IHN0cmluZyxcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPE1vZGlmaWVyRWxlbWVudD4ge1xuXHRjb25zdCBvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0aWQ6IHNJZFByZWZpeCxcblx0XHRcdGlzRHJhZnRDb2xsYWJvcmF0aXZlOiBNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpXG5cdFx0fSksXG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdHRoaXM6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdFx0fSxcblx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHQvL1widGhpcy5pMThuXCI6IFJlc291cmNlTW9kZWwuZ2V0TW9kZWwoKSwgVE9ETzogVG8gYmUgY2hlY2tlZCB3aHkgdGhpcyBpcyBuZWVkZWQsIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IGFsbFxuXHRcdFx0XHR0aGlzOiBvVGhpc1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkRyYWZ0RWRpdFN0YXRlXCIsXG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRvTW9kaWZpZXJcblx0KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRvVGhpcy5kZXN0cm95KCk7XG5cdH0pO1xufVxuXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLl90ZW1wbGF0ZUN1c3RvbUZpbHRlciA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b0ZpbHRlckJhcjogSUZpbHRlckNvbnRyb2wsXG5cdHNJZFByZWZpeDogc3RyaW5nLFxuXHRvU2VsZWN0aW9uRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllclxuKTogUHJvbWlzZTxNb2RpZmllckVsZW1lbnQ+IHtcblx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPihvRmlsdGVyQmFyLCBcImVudGl0eVR5cGVcIiwgb01vZGlmaWVyKTtcblxuXHRpZiAob1NlbGVjdGlvbkZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gaWYgcHJvcGVydHkgaXMgbm90IGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0dHlwZSBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbl9leHRlbmRlZCA9IFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uICYgeyBEb2N1bWVudGF0aW9uUmVmPzogc3RyaW5nIH07XG5cdFx0Y29uc3QgY29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChvU2VsZWN0aW9uRmllbGRJbmZvLmFubm90YXRpb25QYXRoKSxcblx0XHRcdGRhdGFNb2RlbFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UHJvcGVydHk+KGNvbnRleHQpLFxuXHRcdFx0ZG9jdW1lbnRSZWZUZXh0ID0gKFxuXHRcdFx0XHRkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnMuQ29tbW9uIGFzIFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uX2V4dGVuZGVkXG5cdFx0XHQpPy5Eb2N1bWVudGF0aW9uUmVmPy50b1N0cmluZygpO1xuXHRcdG9TZWxlY3Rpb25GaWVsZEluZm8uZG9jdW1lbnRSZWZUZXh0ID0gZG9jdW1lbnRSZWZUZXh0O1xuXHR9XG5cblx0Y29uc3Qgb1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGlkOiBzSWRQcmVmaXhcblx0XHR9KSxcblx0XHRvSXRlbU1vZGVsID0gbmV3IFRlbXBsYXRlTW9kZWwob1NlbGVjdGlvbkZpZWxkSW5mbywgb01ldGFNb2RlbCksXG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCEpLFxuXHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdGl0ZW06IG9JdGVtTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHR9LFxuXHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHR0aGlzOiBvVGhpcyxcblx0XHRcdFx0aXRlbTogb0l0ZW1Nb2RlbFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9GaWx0ZXJCYXIpLFxuXHRcdG9Db250cm9sbGVyID0gb1ZpZXcgPyBvVmlldy5nZXRDb250cm9sbGVyKCkgOiB1bmRlZmluZWQsXG5cdFx0b09wdGlvbnMgPSB7XG5cdFx0XHRjb250cm9sbGVyOiBvQ29udHJvbGxlciA/IG9Db250cm9sbGVyIDogdW5kZWZpbmVkLFxuXHRcdFx0dmlldzogb1ZpZXdcblx0XHR9O1xuXG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXCJzYXAuZmUubWFjcm9zLmZpbHRlci5DdXN0b21GaWx0ZXJcIiwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCBvT3B0aW9ucywgb01vZGlmaWVyKS5maW5hbGx5KFxuXHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdG9UaGlzLmRlc3Ryb3koKTtcblx0XHRcdG9JdGVtTW9kZWwuZGVzdHJveSgpO1xuXHRcdH1cblx0KTtcbn07XG5mdW5jdGlvbiBfZ2V0UHJvcGVydHlQYXRoKHNDb25kaXRpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gRmlsdGVyVXRpbHMuZ2V0UHJvcGVydHlQYXRoRnJvbUNvbmRpdGlvblBhdGgoc0NvbmRpdGlvblBhdGgpO1xufVxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fZmluZFNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKGFTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNGbGV4TmFtZTogc3RyaW5nKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gYVNlbGVjdGlvbkZpZWxkcy5maW5kKGZ1bmN0aW9uIChvU2VsZWN0aW9uRmllbGQ6IEZpbHRlckZpZWxkKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdChvU2VsZWN0aW9uRmllbGQuY29uZGl0aW9uUGF0aCA9PT0gc0ZsZXhOYW1lIHx8IG9TZWxlY3Rpb25GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2VBbGwoL1xcKi9nLCBcIlwiKSA9PT0gc0ZsZXhOYW1lKSAmJlxuXHRcdFx0b1NlbGVjdGlvbkZpZWxkLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIlxuXHRcdCk7XG5cdH0pO1xufTtcbmZ1bmN0aW9uIF9nZW5lcmF0ZUlkUHJlZml4KHNGaWx0ZXJCYXJJZDogc3RyaW5nLCBzQ29udHJvbFR5cGU6IHN0cmluZywgc05hdmlnYXRpb25QcmVmaXg/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gc05hdmlnYXRpb25QcmVmaXggPyBnZW5lcmF0ZShbc0ZpbHRlckJhcklkLCBzQ29udHJvbFR5cGUsIHNOYXZpZ2F0aW9uUHJlZml4XSkgOiBnZW5lcmF0ZShbc0ZpbHRlckJhcklkLCBzQ29udHJvbFR5cGVdKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIF90ZW1wbGF0ZVZhbHVlSGVscChcblx0b1NldHRpbmdzOiB7XG5cdFx0aXNYTUw6IGJvb2xlYW47XG5cdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRtZXRhUGF0aDogQ29udGV4dDtcblx0XHRcdGNvbnRleHRQYXRoOiBDb250ZXh0O1xuXHRcdH07XG5cdFx0bW9kZWxzOiB7XG5cdFx0XHRtZXRhUGF0aDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRjb250ZXh0UGF0aDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0fTtcblx0fSxcblx0b1BhcmFtZXRlcnM6IHtcblx0XHRzVmhJZFByZWZpeDogc3RyaW5nO1xuXHRcdHNOYXZpZ2F0aW9uUHJlZml4Pzogc3RyaW5nO1xuXHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZTogYm9vbGVhbjtcblx0XHRvTW9kaWZpZXI/OiBCYXNlVHJlZU1vZGlmaWVyO1xuXHRcdG9Db250cm9sOiBVSTVFbGVtZW50O1xuXHRcdHZpZXc/OiBWaWV3O1xuXHR9XG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb1RoaXMgPSB7XG5cdFx0aWRQcmVmaXg6IG9QYXJhbWV0ZXJzLnNWaElkUHJlZml4LFxuXHRcdGNvbmRpdGlvbk1vZGVsOiBcIiRmaWx0ZXJzXCIsXG5cdFx0bmF2aWdhdGlvblByZWZpeDogb1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXggPyBgLyR7b1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXh9YCA6IFwiXCIsXG5cdFx0ZmlsdGVyRmllbGRWYWx1ZUhlbHA6IHRydWUsXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2U6IG9QYXJhbWV0ZXJzLmJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRtZXRhUGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5tZXRhUGF0aCxcblx0XHRjb250ZXh0UGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5jb250ZXh0UGF0aCxcblx0XHR1c2VNdWx0aVZhbHVlRmllbGQ6IGZhbHNlLFxuXHRcdHJlcXVpcmVzVmFsaWRhdGlvbjogZmFsc2UsXG5cdFx0Y29sbGFib3JhdGlvbkVuYWJsZWQ6IGZhbHNlLFxuXHRcdHJlcXVlc3RHcm91cElkOiB1bmRlZmluZWRcblx0fTtcblx0Y29uc3QganNvbk1vZGVsID0gbmV3IEpTT05Nb2RlbChvVGhpcyk7XG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IG1lcmdlT2JqZWN0cyh7fSwgb1NldHRpbmdzLCB7XG5cdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHR0aGlzOiBqc29uTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0fSxcblx0XHRtb2RlbHM6IHtcblx0XHRcdHRoaXM6IG9UaGlzXG5cdFx0fVxuXHR9KSBhcyBQcmVwcm9jZXNzb3JTZXR0aW5ncztcblx0Y29uc3QgdGFyZ2V0UGF0aCA9IEZpZWxkSGVscGVyLnZhbHVlSGVscFByb3BlcnR5Rm9yRmlsdGVyRmllbGQob1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5tZXRhUGF0aCk7XG5cblx0aWYgKG9TZXR0aW5ncy5pc1hNTCkge1xuXHRcdGxldCB2YWx1ZUhlbHBYTUxTdHJpbmcgPSBqc3gucmVuZGVyQXNYTUw8c3RyaW5nIHwgdW5kZWZpbmVkPihcblx0XHRcdCgpID0+XG5cdFx0XHRcdGdldFZhbHVlSGVscFRlbXBsYXRlKG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YXJnZXRQYXRoKSwgb1RoaXMpIGFzXG5cdFx0XHRcdFx0fCBzdHJpbmdcblx0XHRcdFx0XHR8IHVuZGVmaW5lZFxuXHRcdCk7XG5cdFx0aWYgKHZhbHVlSGVscFhNTFN0cmluZykge1xuXHRcdFx0aWYgKG9TZXR0aW5ncy5pc1hNTCkge1xuXHRcdFx0XHR2YWx1ZUhlbHBYTUxTdHJpbmcgPSBgPHJvb3Q+JHt2YWx1ZUhlbHBYTUxTdHJpbmd9PC9yb290PmA7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBYTUwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlSGVscFhNTFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCh2YWx1ZUhlbHBYTUwuZmlyc3RFbGVtZW50Q2hpbGQsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywge1xuXHRcdFx0XHRcdGlzWE1MOiBvU2V0dGluZ3MuaXNYTUxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKGFWSEVsZW1lbnRzOiBNb2RpZmllckVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHRpZiAoYVZIRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNBZ2dyZWdhdGlvbk5hbWUgPSBcImRlcGVuZGVudHNcIjtcblx0XHRcdFx0XHRcdC8vU29tZSBmaWx0ZXIgZmllbGRzIGhhdmUgdGhlIFBlcnNpc3RlbmNlUHJvdmlkZXIgYWdncmVnYXRpb24gYmVzaWRlcyB0aGUgRlZIIDpcblx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFWSEVsZW1lbnRzKSkge1xuXHRcdFx0XHRcdFx0XHRhVkhFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbHQ6IEVsZW1lbnQgfCBVSTVFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9QYXJhbWV0ZXJzLm9Nb2RpZmllcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9QYXJhbWV0ZXJzLm9Db250cm9sLCBzQWdncmVnYXRpb25OYW1lLCBlbHQsIDApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVycy5vQ29udHJvbC5pbnNlcnRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lLCBlbHQgYXMgVUk1RWxlbWVudCwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9QYXJhbWV0ZXJzLm9Nb2RpZmllcikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlcnMub01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdHNBZ2dyZWdhdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0YVZIRWxlbWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVycy52aWV3IGFzIHVua25vd24gYXMgRWxlbWVudFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgYVZIRWxlbWVudHMgYXMgVUk1RWxlbWVudCwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBldmFsdWF0aW5nIERlbGVnYXRlVXRpbC5pc1ZhbHVlSGVscFJlcXVpcmVkXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0anNvbk1vZGVsLmRlc3Ryb3koKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHZhbHVlSGVscCA9IGdldFZhbHVlSGVscFRlbXBsYXRlKG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YXJnZXRQYXRoKSwgb1RoaXMpIGFzXG5cdFx0XHR8IFZhbHVlSGVscFxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdFx0aWYgKHZhbHVlSGVscCkge1xuXHRcdFx0Y29uc3Qgc0FnZ3JlZ2F0aW9uTmFtZSA9IFwiZGVwZW5kZW50c1wiO1xuXHRcdFx0Ly9Tb21lIGZpbHRlciBmaWVsZHMgaGF2ZSB0aGUgUGVyc2lzdGVuY2VQcm92aWRlciBhZ2dyZWdhdGlvbiBiZXNpZGVzIHRoZSBGVkggOlxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWVIZWxwKSkge1xuXHRcdFx0XHR2YWx1ZUhlbHAuZm9yRWFjaChmdW5jdGlvbiAoZWx0OiBFbGVtZW50IHwgVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyYW1ldGVycy5vQ29udHJvbCwgc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0LCAwKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0IGFzIFVJNUVsZW1lbnQsIDAsIGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0b1BhcmFtZXRlcnMub01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9QYXJhbWV0ZXJzLm9Db250cm9sLCBzQWdncmVnYXRpb25OYW1lLCB2YWx1ZUhlbHAsIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgdmFsdWVIZWxwLCAwLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5hc3luYyBmdW5jdGlvbiBfYWRkWE1MQ3VzdG9tRmlsdGVyRmllbGQoXG5cdG9GaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sLFxuXHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTxVSTVFbGVtZW50IHwgRWxlbWVudCB8IHZvaWQ+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBhRGVwZW5kZW50cyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShvTW9kaWZpZXIuZ2V0QWdncmVnYXRpb24ob0ZpbHRlckJhciwgXCJkZXBlbmRlbnRzXCIpKTtcblx0XHRsZXQgaTtcblx0XHRpZiAoYURlcGVuZGVudHMgJiYgYURlcGVuZGVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8PSBhRGVwZW5kZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBvRmlsdGVyRmllbGQgPSBhRGVwZW5kZW50c1tpXTtcblx0XHRcdFx0aWYgKG9GaWx0ZXJGaWVsZCAmJiAob0ZpbHRlckZpZWxkIGFzIFVJNUVsZW1lbnQpLmlzQTxNRENGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eSA9IChvRmlsdGVyRmllbGQgYXMgTURDRmlsdGVyRmllbGQpLmdldFByb3BlcnR5S2V5KCksXG5cdFx0XHRcdFx0XHRzRmlsdGVyRmllbGRJZCA9IChvRmlsdGVyRmllbGQgYXMgTURDRmlsdGVyRmllbGQpLmdldElkKCk7XG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eVBhdGggPT09IHNEYXRhUHJvcGVydHkgJiYgc0ZpbHRlckZpZWxkSWQuaW5kZXhPZihcIkN1c3RvbUZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0ZpbHRlckZpZWxkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0TG9nLmVycm9yKFwiRmlsdGVyIENhbm5vdCBiZSBhZGRlZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0fVxufVxuXG5hc3luYyBmdW5jdGlvbiBfdGVtcGxhdGVGaWx0ZXJGaWVsZChcblx0b1NldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0b1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzSW5GaWx0ZXJCYXJJZD86IHN0cmluZyxcblx0cGFnZU1vZGVsPzogSlNPTk1vZGVsXG4pOiBQcm9taXNlPFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10gfCBFbGVtZW50IHwgRWxlbWVudFtdPiB7XG5cdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0aWRQcmVmaXg6IG9QYXJhbWV0ZXJzLnNJZFByZWZpeCxcblx0XHR2aElkUHJlZml4OiBvUGFyYW1ldGVycy5zVmhJZFByZWZpeCxcblx0XHRwcm9wZXJ0eVBhdGg6IG9QYXJhbWV0ZXJzLnNQcm9wZXJ0eU5hbWUsXG5cdFx0bmF2aWdhdGlvblByZWZpeDogb1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXggPyBgLyR7b1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXh9YCA6IFwiXCIsXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2U6IG9QYXJhbWV0ZXJzLmJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRzZXR0aW5nczogb1BhcmFtZXRlcnMub1NldHRpbmdzLFxuXHRcdHZpc3VhbEZpbHRlcjogb1BhcmFtZXRlcnMudmlzdWFsRmlsdGVyLFxuXHRcdGVkaXRNb2RlOiBge2ludGVybmFsPi8ke3NJbkZpbHRlckJhcklkfS9maWx0ZXJGaWVsZHMvJHtvUGFyYW1ldGVycy5zUHJvcGVydHlOYW1lfS9lZGl0TW9kZX1gLFxuXHRcdGxhYmVsOiBvUGFyYW1ldGVycy5sYWJlbFxuXHR9KTtcblx0dHJ5IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhcmFtZXRlcnMub01ldGFNb2RlbCBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCBvVmlzdWFsRmlsdGVyID0gbmV3IFRlbXBsYXRlTW9kZWwob1BhcmFtZXRlcnMudmlzdWFsRmlsdGVyIGFzIG9iamVjdCwgb01ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0gbWVyZ2VPYmplY3RzKHt9LCBvU2V0dGluZ3MsIHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdHZpc3VhbEZpbHRlcjogb1Zpc3VhbEZpbHRlci5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdH0sXG5cdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdHZpc3VhbEZpbHRlcjogb1Zpc3VhbEZpbHRlcixcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBwYWdlTW9kZWxcblx0XHRcdH1cblx0XHR9KSBhcyBQcmVwcm9jZXNzb3JTZXR0aW5ncztcblxuXHRcdHJldHVybiBhd2FpdCBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXCJzYXAuZmUubWFjcm9zLmludGVybmFsLmZpbHRlckZpZWxkLkZpbHRlckZpZWxkVGVtcGxhdGVcIiwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCB7XG5cdFx0XHRpc1hNTDogISFvU2V0dGluZ3MuaXNYTUxcblx0XHR9KTtcblx0fSBmaW5hbGx5IHtcblx0XHRvVGhpcy5kZXN0cm95KCk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX2FkZFByb3BlcnR5SW5mbyhcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9LFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG5cdHRyeSB7XG5cdFx0Ly8ga2V5IHNob3VsZCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIG5hbWVcblx0XHRjb25zdCBzUHJvcGVydHlJbmZvS2V5ID0gS2V5SGVscGVyLmdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIipcIiwgXCJcIik7XG5cdFx0aWYgKG1Qcm9wZXJ0eUJhZyAmJiAhbVByb3BlcnR5QmFnLm1vZGlmaWVyKSB7XG5cdFx0XHR0aHJvdyBcIkZpbHRlckJhciBEZWxlZ2F0ZSBtZXRob2QgY2FsbGVkIHdpdGhvdXQgbW9kaWZpZXIuXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGVsZWdhdGUgPSBhd2FpdCBtUHJvcGVydHlCYWcubW9kaWZpZXIuZ2V0UHJvcGVydHk8RmlsdGVyQmFyRGVsZWdhdGU+KG9QYXJlbnRDb250cm9sLCBcImRlbGVnYXRlXCIpO1xuXHRcdGNvbnN0IGFQcm9wZXJ0eUluZm8gPSBhd2FpdCBtUHJvcGVydHlCYWcubW9kaWZpZXIuZ2V0UHJvcGVydHk8RkVQcm9wZXJ0eUluZm9bXT4ob1BhcmVudENvbnRyb2wsIFwicHJvcGVydHlJbmZvXCIpO1xuXHRcdC8vV2UgZG8gbm90IGdldCBwcm9wZXJ0eUluZm8gaW4gY2FzZSBvZiB0YWJsZSBmaWx0ZXJzXG5cdFx0aWYgKGFQcm9wZXJ0eUluZm8pIHtcblx0XHRcdGNvbnN0IGhhc1Byb3BlcnR5SW5mbyA9IGFQcm9wZXJ0eUluZm8uc29tZShmdW5jdGlvbiAocHJvcDogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0cmV0dXJuIHByb3Aua2V5ID09PSBzUHJvcGVydHlJbmZvS2V5IHx8IHByb3AubmFtZSA9PT0gc1Byb3BlcnR5SW5mb0tleTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBkZWxlZ2F0ZS5wYXlsb2FkLmVudGl0eVR5cGVQYXRoO1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gRmlsdGVyVXRpbHMuY3JlYXRlQ29udmVydGVyQ29udGV4dChcblx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sLFxuXHRcdFx0XHRcdGVudGl0eVR5cGVQYXRoLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0bVByb3BlcnR5QmFnLmFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkID0gRmlsdGVyVXRpbHMuZ2V0RmlsdGVyRmllbGQoc1Byb3BlcnR5SW5mb05hbWUsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBGaWx0ZXJVdGlscy5idWlsZFByb3BlcnlJbmZvKGZpbHRlckZpZWxkISwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdGF3YWl0IF91cGRhdGVQcm9wZXJ0eUluZm8oXG5cdFx0XHRcdFx0YVByb3BlcnR5SW5mbyBhcyBQcm9wZXJ0eUluZm9bXSxcblx0XHRcdFx0XHRtUHJvcGVydHlCYWcsXG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvIGFzIHVua25vd24gYXMgUHJvcGVydHlJbmZvLFxuXHRcdFx0XHRcdG9QYXJlbnRDb250cm9sXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvck1zZykge1xuXHRcdExvZy53YXJuaW5nKGAke29QYXJlbnRDb250cm9sLmdldElkKCl9IDogJHtlcnJvck1zZ31gKTtcblx0fVxufVxuXG5hc3luYyBmdW5jdGlvbiBfdXBkYXRlUHJvcGVydHlJbmZvKFxuXHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mb1tdLFxuXHRwcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfSxcblx0ZmlsdGVyRmllbGQ6IFByb3BlcnR5SW5mbyxcblx0cGFyZW50Q29udHJvbDogRmlsdGVyQmFyXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0bGV0IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4oXG5cdFx0cGFyZW50Q29udHJvbCxcblx0XHRcImZlRmlsdGVySW5mb1wiLFxuXHRcdHByb3BlcnR5QmFnLm1vZGlmaWVyXG5cdCk7XG5cdGlmIChwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgJiYgcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXJPYmogPSBKU09OLnBhcnNlKHByb3BlcnR5SW5mb0ZvckZpbHRlckJhcikgYXMgUHJvcGVydHlJbmZvW107XG5cdFx0cHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyT2JqLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IEpTT04uc3RyaW5naWZ5KHByb3BlcnR5SW5mb0ZvckZpbHRlckJhck9iaik7XG5cdFx0cHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyID0gcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyLnJlcGxhY2UoL1xcey9nLCBcIlxcXFx7XCIpO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhci5yZXBsYWNlKC9cXH0vZywgXCJcXFxcfVwiKTtcblx0XHRjb25zdCBjdXN0b21EYXRhTm9kZSA9IGF3YWl0IERlbGVnYXRlVXRpbC5yZXRyaWV2ZUN1c3RvbURhdGFOb2RlKHBhcmVudENvbnRyb2wsIFwiZmVGaWx0ZXJJbmZvXCIsIHByb3BlcnR5QmFnLm1vZGlmaWVyKTtcblx0XHRjdXN0b21EYXRhTm9kZVswXS5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIpO1xuXHRcdHByb3BlcnR5QmFnLm1vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKHBhcmVudENvbnRyb2wsIFwiY3VzdG9tRGF0YVwiLCBjdXN0b21EYXRhTm9kZVswXSwgMCk7XG5cdH1cblxuXHQvLyBDdXN0b20gZGF0YSBpcyBzZXQgdG8gdGhlIHBhcmVudCBjb250cm9sIHRvIHN0b3JlIHRoZSBwcm9wZXJ0eUluZm9cblx0cHJvcGVydHlJbmZvLnB1c2goZmlsdGVyRmllbGQpO1xuXHQvL3JlbW92ZSB1bndhbnRlZCBwcm9wZXJ0eSBmcm9tIHRoZSBwcm9wZXJ0eUluZm9cblx0Y29uc3QgX3Byb3BlcnR5SW5mbyA9IEZpbHRlclV0aWxzLmZvcm1hdFByb3BlcnR5SW5mbyhwcm9wZXJ0eUluZm8gYXMgRkVQcm9wZXJ0eUluZm9bXSk7XG5cdC8vVXBkYXRlIHRoZSBwcm9wZXJ0eUluZm8gaW4gdGhlIHBhcmVudCBjb250cm9sXG5cdHByb3BlcnR5QmFnLm1vZGlmaWVyLnNldFByb3BlcnR5KHBhcmVudENvbnRyb2wsIFwicHJvcGVydHlJbmZvXCIsIF9wcm9wZXJ0eUluZm8pO1xufVxuLyoqXG4gKiBNZXRob2QgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGZpbHRlciBmaWVsZCBpbiBzdGFuZGFsb25lIG1vZGUgLyBpbiB0aGUgcGVyc29uYWxpemF0aW9uIHNldHRpbmdzIG9mIHRoZSBmaWx0ZXIgYmFyLlxuICogQHBhcmFtIG9QYXJlbnRDb250cm9sIFBhcmVudCBjb250cm9sIGluc3RhbmNlIHRvIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgYWRkZWRcbiAqIEBwYXJhbSBzUHJvcGVydHlJbmZvTmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhZGRlZCBhcyB0aGUgZmlsdGVyIGZpZWxkXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHRoZSBwcm9wZXJ0eSBiYWcgZnJvbSBGbGV4IEFQSVxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIE1vZGlmaWVyIGZyb20gRmxleCBBUElcbiAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgZmlsdGVyIGZpZWxkIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5hZGRJdGVtID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRtUHJvcGVydHlCYWc/OiB7IHZpZXc6IFZpZXc7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9XG4pOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50PiB7XG5cdGlmICghbVByb3BlcnR5QmFnKSB7XG5cdFx0Ly8gSW52b2tlZCBkdXJpbmcgcnVudGltZS5cblx0XHRyZXR1cm4gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkUDEzbkl0ZW0oc1Byb3BlcnR5SW5mb05hbWUsIG9QYXJlbnRDb250cm9sKTtcblx0fVxuXHRjb25zdCBtb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcjtcblx0Y29uc3QgbW9kZWwgPSBtUHJvcGVydHlCYWcgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCk7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fVxuXHRjb25zdCBpc1hNTCA9IG1vZGlmaWVyICYmIG1vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoaXNYTUwpIHtcblx0XHRhd2FpdCBfYWRkUHJvcGVydHlJbmZvKG9QYXJlbnRDb250cm9sLCBtUHJvcGVydHlCYWcsIG9NZXRhTW9kZWwsIHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0fVxuXHRyZXR1cm4gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkRmxleEl0ZW0oXG5cdFx0c1Byb3BlcnR5SW5mb05hbWUsXG5cdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0b01ldGFNb2RlbCxcblx0XHRtb2RpZmllcixcblx0XHRtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LFxuXHRcdG1Qcm9wZXJ0eUJhZy52aWV3XG5cdCk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgZmlsdGVyIGZpZWxkIGluIHN0YW5kYWxvbmUgLyBwZXJzb25hbGl6YXRpb24gZmlsdGVyIGJhci5cbiAqIEBwYXJhbSBvUGFyZW50Q29udHJvbCBQYXJlbnQgY29udHJvbCBpbnN0YW5jZSBmcm9tIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgcmVtb3ZlZFxuICogQHBhcmFtIG9GaWx0ZXJGaWVsZFByb3BlcnR5IE9iamVjdCBvZiB0aGUgZmlsdGVyIGZpZWxkIHByb3BlcnR5IGJlaW5nIHJlbW92ZWQgYXMgZmlsdGVyIGZpZWxkXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHByb3BlcnR5IGJhZyBmcm9tIEZsZXggQVBJXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcubW9kaWZpZXIgTW9kaWZpZXIgZnJvbSBGbGV4IEFQSVxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHByb21pc2VcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5yZW1vdmVJdGVtID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRvRmlsdGVyRmllbGRQcm9wZXJ0eTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfVxuKTogUHJvbWlzZTxib29sZWFuIHwgbnVsbD4ge1xuXHRsZXQgZG9SZW1vdmVJdGVtID0gdHJ1ZTtcblx0Y29uc3QgbW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdGNvbnN0IGlzWE1MID0gbW9kaWZpZXIgJiYgbW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGlmIChpc1hNTCkge1xuXHRcdGNvbnN0IG1vZGVsID0gbVByb3BlcnR5QmFnICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IGZpbHRlckZpZWxkUHJvcGVydHkgPSBhd2FpdCBtUHJvcGVydHlCYWcubW9kaWZpZXIuZ2V0UHJvcGVydHkob0ZpbHRlckZpZWxkUHJvcGVydHksIFwicHJvcGVydHlLZXlcIik7XG5cdFx0YXdhaXQgX2FkZFByb3BlcnR5SW5mbyhvUGFyZW50Q29udHJvbCwgbVByb3BlcnR5QmFnLCBvTWV0YU1vZGVsLCBmaWx0ZXJGaWVsZFByb3BlcnR5IGFzIHN0cmluZyk7XG5cdH1cblx0aWYgKFxuXHRcdHR5cGVvZiBvRmlsdGVyRmllbGRQcm9wZXJ0eSAhPT0gXCJzdHJpbmdcIiAmJlxuXHRcdChvRmlsdGVyRmllbGRQcm9wZXJ0eSBhcyBVSTVFbGVtZW50KS5pc0EgJiZcblx0XHQob0ZpbHRlckZpZWxkUHJvcGVydHkgYXMgVUk1RWxlbWVudCkuaXNBKFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKVxuXHQpIHtcblx0XHRpZiAoKG9GaWx0ZXJGaWVsZFByb3BlcnR5IGFzIFVJNUVsZW1lbnQpLmRhdGEoXCJpc1Nsb3RcIikgPT09IFwidHJ1ZVwiICYmIG1Qcm9wZXJ0eUJhZykge1xuXHRcdFx0Ly8gSW5zZXJ0aW5nIGludG8gdGhlIG1vZGlmaWVyIGNyZWF0ZXMgYSBjaGFuZ2UgZnJvbSBmbGV4IGFsc28gZmlsdGVyIGlzIGJlZW4gcmVtb3ZlZCBoZW5jZSBwcm9taXNlIGlzIHJlc29sdmVkIHRvIGZhbHNlXG5cdFx0XHRtb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyZW50Q29udHJvbCwgXCJkZXBlbmRlbnRzXCIsIG9GaWx0ZXJGaWVsZFByb3BlcnR5KTtcblx0XHRcdGRvUmVtb3ZlSXRlbSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvUmVtb3ZlSXRlbSk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgZmlsdGVyIGZpZWxkIGNvbmRpdGlvbiBpbiBzdGFuZGFsb25lIC8gcGVyc29uYWxpemF0aW9uIGZpbHRlciBiYXIuXG4gKiBAcGFyYW0gb1BhcmVudENvbnRyb2wgUGFyZW50IGNvbnRyb2wgaW5zdGFuY2UgdG8gd2hpY2ggdGhlIGZpbHRlciBmaWVsZCBpcyBhZGRlZFxuICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFkZGVkIGFzIGZpbHRlciBmaWVsZFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiBwcm9wZXJ0eSBiYWcgZnJvbSBGbGV4IEFQSVxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIE1vZGlmaWVyIGZyb20gRmxleCBBUElcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwcm9taXNlXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuYWRkQ29uZGl0aW9uID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIH1cbik6IFByb21pc2U8dm9pZCB8IG51bGw+IHtcblx0Y29uc3QgbW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdGNvbnN0IGlzWE1MID0gbW9kaWZpZXIgJiYgbW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGlmIChpc1hNTCkge1xuXHRcdGNvbnN0IG1vZGVsID0gbVByb3BlcnR5QmFnICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGF3YWl0IF9hZGRQcm9wZXJ0eUluZm8ob1BhcmVudENvbnRyb2wsIG1Qcm9wZXJ0eUJhZywgb01ldGFNb2RlbCwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHR9XG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn07XG5cbi8qKlxuICogTWV0aG9kIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBmaWx0ZXIgZmllbGQgaW4gc3RhbmRhbG9uZSAvIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXIgYmFyLlxuICogQHBhcmFtIG9QYXJlbnRDb250cm9sIFBhcmVudCBjb250cm9sIGluc3RhbmNlIGZyb20gd2hpY2ggdGhlIGZpbHRlciBmaWVsZCBpcyByZW1vdmVkXG4gKiBAcGFyYW0gc1Byb3BlcnR5SW5mb05hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgcmVtb3ZlZCBhcyBmaWx0ZXIgZmllbGRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gRmxleCBBUElcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50IEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBNb2RpZmllciBmcm9tIEZsZXggQVBJXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcHJvbWlzZVxuICovXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLnJlbW92ZUNvbmRpdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0bVByb3BlcnR5QmFnOiB7XG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0bW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7XG5cdH1cbik6IFByb21pc2U8dm9pZCB8IG51bGw+IHtcblx0Y29uc3QgbW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdGNvbnN0IGlzWE1MID0gbW9kaWZpZXIgJiYgbW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGlmIChpc1hNTCkge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb0Zyb21DRCA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4oXG5cdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFwic2FwX2ZlX0ZpbHRlckJhckRlbGVnYXRlX3Byb3BlcnR5SW5mb01hcFwiLFxuXHRcdFx0bW9kaWZpZXJcblx0XHQpO1xuXHRcdGlmICghcHJvcGVydHlJbmZvRnJvbUNEKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IG1Qcm9wZXJ0eUJhZyAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgX2FkZFByb3BlcnR5SW5mbyhvUGFyZW50Q29udHJvbCwgbVByb3BlcnR5QmFnLCBvTWV0YU1vZGVsLCBzUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn07XG4vKipcbiAqIENsZWFycyBhbGwgaW5wdXQgdmFsdWVzIG9mIHZpc2libGUgZmlsdGVyIGZpZWxkcyBpbiB0aGUgZmlsdGVyIGJhci5cbiAqIEBwYXJhbSBvRmlsdGVyQ29udHJvbCBJbnN0YW5jZSBvZiB0aGUgRmlsdGVyQmFyIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwcm9taXNlXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuY2xlYXJGaWx0ZXJzID0gYXN5bmMgZnVuY3Rpb24gKG9GaWx0ZXJDb250cm9sOiBGaWx0ZXJCYXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgZmlsdGVyQmFyQVBJID0gb0ZpbHRlckNvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdHJldHVybiBTdGF0ZUhlbHBlci5jbGVhckZpbHRlclZhbHVlcyhmaWx0ZXJCYXJBUEkgYXMgTWFjcm9BUEkpO1xufTtcbi8qKlxuICogQ3JlYXRlcyB0aGUgZmlsdGVyIGZpZWxkIGluIHRoZSB0YWJsZSBhZGFwdGF0aW9uIG9mIHRoZSBGaWx0ZXJCYXIuXG4gKiBAcGFyYW0gc1Byb3BlcnR5SW5mb05hbWUgVGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIGVudGl0eSB0eXBlIGZvciB3aGljaCB0aGUgZmlsdGVyIGZpZWxkIG5lZWRzIHRvIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSBvUGFyZW50Q29udHJvbCBJbnN0YW5jZSBvZiB0aGUgcGFyZW50IGNvbnRyb2xcbiAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgZmlsdGVyIGZpZWxkIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkUDEzbkl0ZW0gPSBhc3luYyBmdW5jdGlvbiAoXG5cdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXJcbik6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+IHtcblx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKG9QYXJlbnRDb250cm9sKVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChvTW9kZWw6IE1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkRmxleEl0ZW0oXG5cdFx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lLFxuXHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0b01vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHR1bmRlZmluZWRcblx0XHRcdCk7XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiTW9kZWwgY291bGQgbm90IGJlIHJlc29sdmVkXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSk7XG59O1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkgPSBmdW5jdGlvbiAoXG5cdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b0ZpbHRlckNvbnRyb2w6IElGaWx0ZXJDb250cm9sXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdGNvbnN0IG9FbnRpdHlUeXBlID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVR5cGVQYXRoKTtcblx0Y29uc3QgaW5jbHVkZUhpZGRlbiA9IG9GaWx0ZXJDb250cm9sLmlzQShcInNhcC51aS5tZGMudmFsdWVoZWxwLkZpbHRlckJhclwiKSA/IHRydWUgOiB1bmRlZmluZWQ7XG5cdGlmICghb0ZpbHRlckNvbnRyb2wgfHwgIW9FbnRpdHlUeXBlKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGNvbnN0IG9Db252ZXJ0ZXJDb250ZXh0ID0gRmlsdGVyVXRpbHMuY3JlYXRlQ29udmVydGVyQ29udGV4dChvRmlsdGVyQ29udHJvbCwgc0VudGl0eVR5cGVQYXRoKTtcblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNFbnRpdHlUeXBlUGF0aCk7XG5cblx0Y29uc3QgbUZpbHRlckZpZWxkcyA9IEZpbHRlclV0aWxzLmdldENvbnZlcnRlZEZpbHRlckZpZWxkcyhcblx0XHRvRmlsdGVyQ29udHJvbCxcblx0XHRzRW50aXR5VHlwZVBhdGgsXG5cdFx0aW5jbHVkZUhpZGRlbixcblx0XHRvTWV0YU1vZGVsLFxuXHRcdENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvRmlsdGVyQ29udHJvbClcblx0KTtcblx0bGV0IGFGZXRjaGVkUHJvcGVydGllczogRkVQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRtRmlsdGVyRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG9GaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkKSB7XG5cdFx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblx0XHRpZiAoc0Fubm90YXRpb25QYXRoICYmICFvRmlsdGVyRmllbGRJbmZvLnRlbXBsYXRlKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IG9Db252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCkucmVzb2x2ZVBhdGg8UHJvcGVydHk+KHNBbm5vdGF0aW9uUGF0aCkudGFyZ2V0O1xuXHRcdFx0Y29uc3Qgc1RhcmdldFByb3BlcnR5UHJlZml4ID0gQ29tbW9uSGVscGVyLmdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoKG9NZXRhTW9kZWwsIHNBbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBzUHJvcGVydHkgPSBzQW5ub3RhdGlvblBhdGgucmVwbGFjZShgJHtzVGFyZ2V0UHJvcGVydHlQcmVmaXh9L2AsIFwiXCIpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IG9Db252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHM7XG5cdFx0XHRjb25zdCBmaWx0ZXJGYWNldHMgPSBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRPRGF0YUZpbHRlckJhckRlbGVnYXRlLl9pc0ZpbHRlckFkYXB0YWJsZShvRmlsdGVyRmllbGRJbmZvLCBvUHJvcGVydHlBbm5vdGF0aW9ucywgc2VsZWN0aW9uRmllbGRzLCBmaWx0ZXJGYWNldHMpICYmXG5cdFx0XHRcdGlzUHJvcGVydHlGaWx0ZXJhYmxlKG9NZXRhTW9kZWwsIHNUYXJnZXRQcm9wZXJ0eVByZWZpeCwgX2dldFByb3BlcnR5UGF0aChzUHJvcGVydHkpLCB0cnVlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9GaWx0ZXJGaWVsZEluZm8gYXMgUHJvcGVydHlJbmZvKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9DdXN0b20gRmlsdGVyc1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2gob0ZpbHRlckZpZWxkSW5mbyBhcyBQcm9wZXJ0eUluZm8pO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgYVBhcmFtZXRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgcHJvY2Vzc2VkRmllbGRzID0gcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyhhRmV0Y2hlZFByb3BlcnRpZXMgYXMgRmlsdGVyRmllbGRbXSwgb0NvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBwcm9jZXNzZWRGaWVsZHNLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcm9jZXNzZWRGaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BzOiBGRVByb3BlcnR5SW5mbykge1xuXHRcdGlmIChvUHJvcHMua2V5KSB7XG5cdFx0XHRwcm9jZXNzZWRGaWVsZHNLZXlzLnB1c2gob1Byb3BzLmtleSk7XG5cdFx0fVxuXHR9KTtcblxuXHRhRmV0Y2hlZFByb3BlcnRpZXMgPSBhRmV0Y2hlZFByb3BlcnRpZXMuZmlsdGVyKGZ1bmN0aW9uIChvUHJvcDogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRyZXR1cm4gcHJvY2Vzc2VkRmllbGRzS2V5cy5pbmNsdWRlcyhvUHJvcC5rZXkhKTtcblx0fSk7XG5cdGNvbnN0IGRhdGFNb2RlbCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQoc0VudGl0eVNldFBhdGgpKTtcblx0Y29uc3Qgb0ZSID0gRmlsdGVyUmVzdHJpY3Rpb25zLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5RGF0YU1vZGVsKGRhdGFNb2RlbCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pLFxuXHRcdG1BbGxvd2VkRXhwcmVzc2lvbnMgPSBvRlIuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zO1xuXHQvL09iamVjdC5rZXlzKHByb2Nlc3NlZEZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAoc0ZpbHRlckZpZWxkS2V5OiBzdHJpbmcpIHtcblx0cHJvY2Vzc2VkRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wLCBpRmlsdGVyRmllbGRJbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgb1NlbEZpZWxkID0gYUZldGNoZWRQcm9wZXJ0aWVzW2lGaWx0ZXJGaWVsZEluZGV4XTtcblx0XHRpZiAoIW9TZWxGaWVsZCB8fCAhb1NlbEZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IF9nZXRQcm9wZXJ0eVBhdGgob1NlbEZpZWxkLmNvbmRpdGlvblBhdGgpO1xuXHRcdC8vZmV0Y2hCYXNpY1xuXHRcdG9Qcm9wID0gT2JqZWN0LmFzc2lnbihvUHJvcCwge1xuXHRcdFx0Z3JvdXA6IG9TZWxGaWVsZC5ncm91cCxcblx0XHRcdGdyb3VwTGFiZWw6IG9TZWxGaWVsZC5ncm91cExhYmVsLFxuXHRcdFx0cGF0aDogb1NlbEZpZWxkLmNvbmRpdGlvblBhdGgsXG5cdFx0XHR0b29sdGlwOiBudWxsLFxuXHRcdFx0cmVtb3ZlRnJvbUFwcFN0YXRlOiBmYWxzZSxcblx0XHRcdGhhc1ZhbHVlSGVscDogZmFsc2Vcblx0XHR9KTtcblxuXHRcdC8vZmV0Y2hQcm9wSW5mb1xuXHRcdGlmIChvU2VsRmllbGQuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IG9TZWxGaWVsZC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNBbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0Fubm90YXRpb25QYXRofUBgKSxcblx0XHRcdFx0b1Byb3BlcnR5Q29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Fubm90YXRpb25QYXRoKTtcblxuXHRcdFx0Y29uc3QgYlJlbW92ZUZyb21BcHBTdGF0ZSA9XG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCJdIHx8XG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHRcIl0gfHxcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLk1lYXN1cmVcIl07XG5cblx0XHRcdGNvbnN0IHNUYXJnZXRQcm9wZXJ0eVByZWZpeCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTWV0YU1vZGVsLCBvU2VsRmllbGQuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5ID0gc0Fubm90YXRpb25QYXRoLnJlcGxhY2UoYCR7c1RhcmdldFByb3BlcnR5UHJlZml4fS9gLCBcIlwiKTtcblx0XHRcdGxldCBvRmlsdGVyRGVmYXVsdFZhbHVlQW5ub3RhdGlvbjtcblx0XHRcdGxldCBvRmlsdGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eUNvbnRleHQgJiYgaXNQcm9wZXJ0eUZpbHRlcmFibGUob01ldGFNb2RlbCwgc1RhcmdldFByb3BlcnR5UHJlZml4LCBfZ2V0UHJvcGVydHlQYXRoKHNQcm9wZXJ0eSksIHRydWUpKSB7XG5cdFx0XHRcdG9GaWx0ZXJEZWZhdWx0VmFsdWVBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZVwiXTtcblx0XHRcdFx0aWYgKG9GaWx0ZXJEZWZhdWx0VmFsdWVBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0b0ZpbHRlckRlZmF1bHRWYWx1ZSA9IG9GaWx0ZXJEZWZhdWx0VmFsdWVBbm5vdGF0aW9uW2AkJHtnZXRNb2RlbFR5cGUob1Byb3BlcnR5LiRUeXBlKX1gXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9Qcm9wID0gT2JqZWN0LmFzc2lnbihvUHJvcCwge1xuXHRcdFx0XHRcdHRvb2x0aXA6IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5RdWlja0luZm9cIl0gfHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHJlbW92ZUZyb21BcHBTdGF0ZTogYlJlbW92ZUZyb21BcHBTdGF0ZSxcblx0XHRcdFx0XHRoYXNWYWx1ZUhlbHA6IGhhc1ZhbHVlSGVscChvUHJvcGVydHlDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IG9Qcm9wZXJ0eUNvbnRleHQgfSksXG5cdFx0XHRcdFx0ZGVmYXVsdEZpbHRlckNvbmRpdGlvbnM6IG9GaWx0ZXJEZWZhdWx0VmFsdWVcblx0XHRcdFx0XHRcdD8gW1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkUGF0aDogb1NlbEZpZWxkLmNvbmRpdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWVzOiBbb0ZpbHRlckRlZmF1bHRWYWx1ZV1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQgIF1cblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vYmFzZVxuXG5cdFx0aWYgKG9Qcm9wKSB7XG5cdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHlQYXRoXSAmJiBtQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eVBhdGhdLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b1Byb3AuZmlsdGVyRXhwcmVzc2lvbiA9IENvbW1vblV0aWxzLmdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24obUFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHlQYXRoXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvUHJvcC5maWx0ZXJFeHByZXNzaW9uID0gXCJhdXRvXCI7XG5cdFx0XHR9XG5cblx0XHRcdG9Qcm9wID0gT2JqZWN0LmFzc2lnbihvUHJvcCwge1xuXHRcdFx0XHR2aXNpYmxlOiBvU2VsRmllbGQuYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIlxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cHJvY2Vzc2VkRmllbGRzW2lGaWx0ZXJGaWVsZEluZGV4XSA9IG9Qcm9wO1xuXHR9KTtcblx0cHJvY2Vzc2VkRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHByb3BJbmZvOiBGRVByb3BlcnR5SW5mbykge1xuXHRcdC8vIGtleSBzaG91bGQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBuYW1lXG5cdFx0cHJvcEluZm8ua2V5ID0gcHJvcEluZm8ubmFtZTtcblx0XHRpZiAocHJvcEluZm8ucGF0aCA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdHByb3BJbmZvLmxhYmVsID0gZ2V0UmVzb3VyY2VNb2RlbChvRmlsdGVyQ29udHJvbCkuZ2V0VGV4dChcIkZJTFRFUkJBUl9FRElUSU5HX1NUQVRVU1wiKTtcblx0XHR9XG5cdFx0cHJvcEluZm8udHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhwcm9wSW5mby5kYXRhVHlwZSwgcHJvcEluZm8uZm9ybWF0T3B0aW9ucywgcHJvcEluZm8uY29uc3RyYWludHMpO1xuXHRcdHByb3BJbmZvLmxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChwcm9wSW5mby5sYWJlbCEsIG9GaWx0ZXJDb250cm9sKSB8fCBcIlwiO1xuXHRcdGlmIChwcm9wSW5mby5pc1BhcmFtZXRlcikge1xuXHRcdFx0YVBhcmFtZXRlckZpZWxkcy5wdXNoKHByb3BJbmZvLm5hbWUpO1xuXHRcdH1cblx0fSk7XG5cblx0YUZldGNoZWRQcm9wZXJ0aWVzID0gcHJvY2Vzc2VkRmllbGRzO1xuXHREZWxlZ2F0ZVV0aWwuc2V0Q3VzdG9tRGF0YShvRmlsdGVyQ29udHJvbCwgXCJwYXJhbWV0ZXJzXCIsIGFQYXJhbWV0ZXJGaWVsZHMgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXG5cdHJldHVybiBhRmV0Y2hlZFByb3BlcnRpZXMgYXMgUHJvcGVydHlJbmZvW107XG59O1xuXG5mdW5jdGlvbiBnZXRMaW5lSXRlbVF1YWxpZmllckZyb21UYWJsZShvQ29udHJvbDogTWFuYWdlZE9iamVjdCwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAob0NvbnRyb2wuaXNBPEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPj4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvblBhdGhzID0gb0NvbnRyb2wuZ2V0TWV0YVBhdGgoKS5zcGxpdChcIiNcIilbMF0uc3BsaXQoXCIvXCIpO1xuXHRcdHN3aXRjaCAoYW5ub3RhdGlvblBhdGhzW2Fubm90YXRpb25QYXRocy5sZW5ndGggLSAxXSkge1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudH1gOlxuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudH1gOlxuXHRcdFx0XHRyZXR1cm4gb01ldGFNb2RlbFxuXHRcdFx0XHRcdC5nZXRPYmplY3Qob0NvbnRyb2wuZ2V0TWV0YVBhdGgoKSlcblx0XHRcdFx0XHQuVmlzdWFsaXphdGlvbnM/LmZpbmQoKHZpc3VhbGl6YXRpb246IHsgJEFubm90YXRpb25QYXRoOiBzdHJpbmcgfSkgPT5cblx0XHRcdFx0XHRcdHZpc3VhbGl6YXRpb24uJEFubm90YXRpb25QYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbX1gKVxuXHRcdFx0XHRcdCkuJEFubm90YXRpb25QYXRoO1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW19YDpcblx0XHRcdFx0Y29uc3QgbWV0YVBhdGhzID0gb0NvbnRyb2wuZ2V0TWV0YVBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0XHRcdHJldHVybiBtZXRhUGF0aHNbbWV0YVBhdGhzLmxlbmd0aCAtIDFdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLl9pc0ZpbHRlckFkYXB0YWJsZSA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0cHJvcGVydHlBbm5vdGF0aW9uczogUHJvcGVydHksXG5cdHNlbGVjdGlvbkZpZWxkcz86IFNlbGVjdGlvbkZpZWxkcyxcblx0ZmlsdGVyRmFjZXRzPzogRmlsdGVyRmFjZXRzXG4pOiBib29sZWFuIHtcblx0bGV0IGlzSW5GaWx0ZXJGYWNldHM6IGJvb2xlYW47XG5cdGNvbnN0IGlzU2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHMgPyBPRGF0YUZpbHRlckJhckRlbGVnYXRlLl9pc0ZpbHRlckluU2VsZWN0aW9uRmllbGRzKHNlbGVjdGlvbkZpZWxkcywgZmlsdGVyRmllbGRJbmZvKSA6IGZhbHNlO1xuXHRpZiAoZmlsdGVyRmFjZXRzKSB7XG5cdFx0aXNJbkZpbHRlckZhY2V0cyA9IGZpbHRlckZhY2V0cy5zb21lKGZ1bmN0aW9uIChmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXAgPSBmaWx0ZXJGYWNldC5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cFR5cGU7XG5cdFx0XHRyZXR1cm4gZmllbGRHcm91cD8uRGF0YS5zb21lKGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0XHRcdFx0Ly8gd2UgZXhwZWN0IGRhdGFGaWVsZCB0byBiZSBEYXRhRmllbGRUeXBlcyAoaGF2aW5nIGEgVmFsdWUpIGluc2lkZSBGaWVsZEdyb3VwcyBpbnNpZGUgRmlsdGVyRmFjZXRzXG5cdFx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZS5wYXRoID09PSBmaWx0ZXJGaWVsZEluZm8ua2V5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZGF0YUZpZWxkIHR5cGVzIGhhdmluZyBubyBWYWx1ZSAoRGF0YUZpZWxkRm9yQW5ub3RhdGlvblR5cGVzLCBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzLCBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cFR5cGVzKSwgdGhlcmUgaXMgbm90aGluZyB0byBjaGVjaywgYnV0IHRoaXMgc2hvdWxkIG5vdCBvY2N1ciBhbnl3YXlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0aXNJbkZpbHRlckZhY2V0cyA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBpc1NlbGVjdGlvbkZpZWxkIHx8IGlzSW5GaWx0ZXJGYWNldHMgfHwgIXByb3BlcnR5QW5ub3RhdGlvbnMuYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuO1xufTtcblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5faXNGaWx0ZXJJblNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChzZWxlY3Rpb25GaWVsZHM6IFNlbGVjdGlvbkZpZWxkcywgZmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGaWVsZEtleSA9IGZpbHRlckZpZWxkSW5mby5rZXk/LmluZGV4T2YoXCI6OlwiKSA+IDAgPyBmaWx0ZXJGaWVsZEluZm8ua2V5Py5yZXBsYWNlKFwiOjpcIiwgXCIvXCIpIDogZmlsdGVyRmllbGRJbmZvLmtleTtcblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcy5zb21lKGZ1bmN0aW9uIChzZWxlY3Rpb25GaWVsZDogQW5ub3RhdGlvblNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0aWYgKHNlbGVjdGlvbkZpZWxkLnZhbHVlID09PSBmaWx0ZXJGaWVsZEtleSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59O1xuXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLl9hZGRGbGV4SXRlbSA9IGFzeW5jIGZ1bmN0aW9uIChcblx0c0ZsZXhQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IHVuZGVmaW5lZCxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IHwgdW5kZWZpbmVkLFxuXHR2aWV3PzogVmlldyB8IHVuZGVmaW5lZFxuKTogUHJvbWlzZTxOdWxsYWJsZU1vZGlmaWVyRWxlbWVudD4ge1xuXHRjb25zdCBzRmlsdGVyQmFySWQgPSBvTW9kaWZpZXIgPyBvTW9kaWZpZXIuZ2V0SWQob1BhcmVudENvbnRyb2wpIDogb1BhcmVudENvbnRyb2wuZ2V0SWQoKSxcblx0XHRzSWRQcmVmaXggPSBvTW9kaWZpZXIgPyBcIlwiIDogXCJBZGFwdGF0aW9uXCIsXG5cdFx0YVNlbGVjdGlvbkZpZWxkcyA9IEZpbHRlclV0aWxzLmdldENvbnZlcnRlZEZpbHRlckZpZWxkcyhcblx0XHRcdG9QYXJlbnRDb250cm9sIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2wsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdG9Nb2RpZmllcixcblx0XHRcdG9Nb2RpZmllciA/IHVuZGVmaW5lZCA6IGdldExpbmVJdGVtUXVhbGlmaWVyRnJvbVRhYmxlKG9QYXJlbnRDb250cm9sLmdldFBhcmVudCgpISwgb01ldGFNb2RlbClcblx0XHQpLFxuXHRcdG9TZWxlY3Rpb25GaWVsZCA9IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2ZpbmRTZWxlY3Rpb25GaWVsZChhU2VsZWN0aW9uRmllbGRzLCBzRmxleFByb3BlcnR5TmFtZSksXG5cdFx0c1Byb3BlcnR5UGF0aCA9IF9nZXRQcm9wZXJ0eVBhdGgoc0ZsZXhQcm9wZXJ0eU5hbWUpLFxuXHRcdGJJc1hNTCA9ICEhb01vZGlmaWVyICYmIG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIjtcblx0aWYgKHNGbGV4UHJvcGVydHlOYW1lID09PSBFRElUX1NUQVRFX1BST1BFUlRZX05BTUUpIHtcblx0XHRyZXR1cm4gX3RlbXBsYXRlRWRpdFN0YXRlKF9nZW5lcmF0ZUlkUHJlZml4KHNGaWx0ZXJCYXJJZCwgYCR7c0lkUHJlZml4fUZpbHRlckZpZWxkYCksIG9NZXRhTW9kZWwsIG9Nb2RpZmllcik7XG5cdH0gZWxzZSBpZiAoc0ZsZXhQcm9wZXJ0eU5hbWUgPT09IFNFQVJDSF9QUk9QRVJUWV9OQU1FKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fSBlbHNlIGlmIChvU2VsZWN0aW9uRmllbGQ/LnRlbXBsYXRlKSB7XG5cdFx0cmV0dXJuIE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX3RlbXBsYXRlQ3VzdG9tRmlsdGVyKFxuXHRcdFx0b1BhcmVudENvbnRyb2wgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCxcblx0XHRcdF9nZW5lcmF0ZUlkUHJlZml4KHNGaWx0ZXJCYXJJZCwgYCR7c0lkUHJlZml4fWApLFxuXHRcdFx0b1NlbGVjdGlvbkZpZWxkLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdG9Nb2RpZmllciFcblx0XHQpO1xuXHR9XG5cblx0aWYgKG9TZWxlY3Rpb25GaWVsZD8udHlwZSA9PT0gXCJTbG90XCIgJiYgb01vZGlmaWVyKSB7XG5cdFx0cmV0dXJuIF9hZGRYTUxDdXN0b21GaWx0ZXJGaWVsZChvUGFyZW50Q29udHJvbCBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sLCBvTW9kaWZpZXIsIHNQcm9wZXJ0eVBhdGgpO1xuXHR9XG5cblx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gQ29tbW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpO1xuXHRsZXQgc0VudGl0eVR5cGVQYXRoOiBzdHJpbmc7XG5cdGxldCBzVXNlU2VtYW50aWNEYXRlUmFuZ2U7XG5cdGxldCBvU2V0dGluZ3M6IHtcblx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdGNvbnRleHRQYXRoOiBDb250ZXh0O1xuXHRcdFx0cHJvcGVydHk6IENvbnRleHQ7XG5cdFx0fTtcblx0XHRtb2RlbHM6IHtcblx0XHRcdGNvbnRleHRQYXRoOiBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdHByb3BlcnR5PzogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRtZXRhUGF0aD86IE9EYXRhTWV0YU1vZGVsO1xuXHRcdH07XG5cdFx0aXNYTUw6IGJvb2xlYW47XG5cdH07XG5cdGxldCBzQmluZGluZ1BhdGg7XG5cdGxldCBvUGFyYW1ldGVyczoge1xuXHRcdG1ldGFQYXRoOiBzdHJpbmc7XG5cdFx0c1Byb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdHNCaW5kaW5nUGF0aDogc3RyaW5nO1xuXHRcdHNWYWx1ZUhlbHBUeXBlOiBzdHJpbmc7XG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0c0lkUHJlZml4OiBzdHJpbmc7XG5cdFx0b1NldHRpbmdzOiB1bmtub3duO1xuXHRcdHNWaElkUHJlZml4OiBzdHJpbmc7XG5cdFx0c05hdmlnYXRpb25QcmVmaXg/OiBzdHJpbmc7XG5cdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlOiBib29sZWFuO1xuXHRcdG9Nb2RpZmllcj86IEJhc2VUcmVlTW9kaWZpZXI7XG5cdFx0b0NvbnRyb2w6IFVJNUVsZW1lbnQ7XG5cdFx0dmlzdWFsRmlsdGVyPzogdW5rbm93bjtcblx0XHR2aWV3PzogVmlldztcblx0XHRsYWJlbD86IHN0cmluZztcblx0fTtcblxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAob1NlbGVjdGlvbkZpZWxkPy5pc1BhcmFtZXRlcikge1xuXHRcdFx0XHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvU2VsZWN0aW9uRmllbGQuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdHJldHVybiBzQW5ub3RhdGlvblBhdGguc3Vic3RyaW5nKDAsIHNBbm5vdGF0aW9uUGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KG9QYXJlbnRDb250cm9sLCBcImVudGl0eVR5cGVcIiwgb01vZGlmaWVyKTtcblx0XHR9KVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChzUmV0cmlldmVkRW50aXR5VHlwZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdFx0c0VudGl0eVR5cGVQYXRoID0gc1JldHJpZXZlZEVudGl0eVR5cGVQYXRoITtcblx0XHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KG9QYXJlbnRDb250cm9sLCBcInVzZVNlbWFudGljRGF0ZVJhbmdlXCIsIG9Nb2RpZmllcik7XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoc1JldHJpZXZlZFVzZVNlbWFudGljRGF0ZVJhbmdlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRcdHNVc2VTZW1hbnRpY0RhdGVSYW5nZSA9IHNSZXRyaWV2ZWRVc2VTZW1hbnRpY0RhdGVSYW5nZTtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCArIHNQcm9wZXJ0eVBhdGgpITtcblx0XHRcdGxldCBzSW5GaWx0ZXJCYXJJZCA9IG9Nb2RpZmllciA/IG9Nb2RpZmllci5nZXRJZChvUGFyZW50Q29udHJvbCkgOiBvUGFyZW50Q29udHJvbC5nZXRJZCgpO1xuXHRcdFx0aWYgKHNJbkZpbHRlckJhcklkLmVuZHNXaXRoKFwiLWNvbnRlbnRcIikpIHtcblx0XHRcdFx0Ly8gLWNvbnRlbnQgaXMgb25seSBhZGRlZCB3aGVuIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGRpcmVjdGx5IGluIHRoZSBmaWx0ZXIgYmFyXG5cdFx0XHRcdHNJbkZpbHRlckJhcklkID0gc0luRmlsdGVyQmFySWQuc3Vic3RyaW5nKDAsIHNJbkZpbHRlckJhcklkLmxhc3RJbmRleE9mKFwiLWNvbnRlbnRcIikpO1xuXHRcdFx0XHQvLyBCeSB1c2luZyB0aGUgaWQgb2YgdGhlIHBhcmVudCBjb250cm9sLCB3ZSBjYW4gZ2V0IHRoZSBjb3JyZWN0IGlkUHJlZml4IGZvciB0aGUgdmFsdWUgaGVscFxuXHRcdFx0fVxuXHRcdFx0b1NldHRpbmdzID0ge1xuXHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5VHlwZVBhdGgpISxcblx0XHRcdFx0XHRwcm9wZXJ0eTogb1Byb3BlcnR5Q29udGV4dFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRwcm9wZXJ0eTogb01ldGFNb2RlbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpc1hNTDogYklzWE1MXG5cdFx0XHR9O1xuXHRcdFx0c0JpbmRpbmdQYXRoID0gYC8ke01vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc0VudGl0eVR5cGVQYXRoKVxuXHRcdFx0XHQuc3BsaXQoXCIvXCIpXG5cdFx0XHRcdC5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpXG5cdFx0XHRcdC5qb2luKFwiL1wiKX1gO1xuXHRcdFx0b1BhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdG1ldGFQYXRoOiBvUHJvcGVydHlDb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0c1Byb3BlcnR5TmFtZTogc1Byb3BlcnR5UGF0aCxcblx0XHRcdFx0c0JpbmRpbmdQYXRoOiBzQmluZGluZ1BhdGgsXG5cdFx0XHRcdHNWYWx1ZUhlbHBUeXBlOiBzSWRQcmVmaXggKyBWQUxVRV9IRUxQX1RZUEUsXG5cdFx0XHRcdG9Db250cm9sOiBvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0b01ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0b01vZGlmaWVyOiBvTW9kaWZpZXIsXG5cdFx0XHRcdHNJZFByZWZpeDogX2dlbmVyYXRlSWRQcmVmaXgoc0luRmlsdGVyQmFySWQsIGAke3NJZFByZWZpeH1GaWx0ZXJGaWVsZGAsIHNOYXZpZ2F0aW9uUGF0aCksXG5cdFx0XHRcdHNWaElkUHJlZml4OiBfZ2VuZXJhdGVJZFByZWZpeChzSW5GaWx0ZXJCYXJJZCwgc0lkUHJlZml4ICsgVkFMVUVfSEVMUF9UWVBFKSxcblx0XHRcdFx0c05hdmlnYXRpb25QcmVmaXg6IHNOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlOiBzVXNlU2VtYW50aWNEYXRlUmFuZ2UgYXMgdW5rbm93biBhcyBib29sZWFuLFxuXHRcdFx0XHRvU2V0dGluZ3M6IG9TZWxlY3Rpb25GaWVsZD8uc2V0dGluZ3MgPz8ge30sXG5cdFx0XHRcdHZpc3VhbEZpbHRlcjogb1NlbGVjdGlvbkZpZWxkPy52aXN1YWxGaWx0ZXIsXG5cdFx0XHRcdHZpZXcsXG5cdFx0XHRcdGxhYmVsOiBvU2VsZWN0aW9uRmllbGQ/LmxhYmVsXG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmRvZXNWYWx1ZUhlbHBFeGlzdChvUGFyYW1ldGVycyk7XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoYlZhbHVlSGVscEV4aXN0czogYm9vbGVhbikge1xuXHRcdFx0aWYgKCFiVmFsdWVIZWxwRXhpc3RzKSB7XG5cdFx0XHRcdHJldHVybiBfdGVtcGxhdGVWYWx1ZUhlbHAoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCkhLFxuXHRcdFx0XHRcdFx0XHRtZXRhUGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5wcm9wZXJ0eVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YVBhdGg6IG9NZXRhTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRpc1hNTDogYklzWE1MXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvUGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob1BhcmVudENvbnRyb2wsIFwibG9jYWxJZFwiLCBvTW9kaWZpZXIpO1xuXHRcdH0pXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKGxvY2FsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IHBhZ2VNb2RlbDtcblx0XHRcdGlmIChvUGFyYW1ldGVycy52aXN1YWxGaWx0ZXIpIHtcblx0XHRcdFx0Ly9OZWVkIHRvIHNldCB0aGUgY29udmVydGVyY29udGV4dCBhcyBwYWdlTW9kZWwgaW4gc2V0dGluZ3MgZm9yIEJ1aWxkaW5nQmxvY2sgMi4wXG5cdFx0XHRcdHBhZ2VNb2RlbCA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob1BhcmVudENvbnRyb2wpLmdldENvbnRyb2xsZXIoKS5fZ2V0UGFnZU1vZGVsKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gX3RlbXBsYXRlRmlsdGVyRmllbGQob1NldHRpbmdzLCBvUGFyYW1ldGVycywgbG9jYWxJZCwgcGFnZU1vZGVsKTtcblx0XHR9KTtcbn07XG5mdW5jdGlvbiBfZ2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCB8IEVsZW1lbnQpOiBudWxsIHwgUHJvcGVydHlJbmZvW10gfCB1bmRlZmluZWQge1xuXHQvLyBwcm9wZXJ0aWVzIGFyZSBub3QgY2FjaGVkIGR1cmluZyB0ZW1wbGF0aW5nXG5cdGlmIChvRmlsdGVyQmFyIGluc3RhbmNlb2Ygd2luZG93LkVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8UHJvcGVydHlJbmZvW10+KG9GaWx0ZXJCYXIsIEZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWSk7XG59XG5mdW5jdGlvbiBfc2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCB8IEVsZW1lbnQsIGFGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW10pOiB2b2lkIHtcblx0Ly8gZG8gbm90IGNhY2hlIGR1cmluZyB0ZW1wbGF0aW5nLCBlbHNlIGl0IGJlY29tZXMgcGFydCBvZiB0aGUgY2FjaGVkIHZpZXdcblx0aWYgKG9GaWx0ZXJCYXIgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkge1xuXHRcdHJldHVybjtcblx0fVxuXHREZWxlZ2F0ZVV0aWwuc2V0Q3VzdG9tRGF0YShvRmlsdGVyQmFyLCBGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVksIGFGZXRjaGVkUHJvcGVydGllcyBhcyB1bmtub3duIGFzIHN0cmluZyk7XG59XG5mdW5jdGlvbiBfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoXG5cdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b0ZpbHRlckJhcjogSUZpbHRlckNvbnRyb2xcbik6IENvbnRyb2xQcm9wZXJ0eUluZm9bXSB8IFByb3BlcnR5SW5mb0V4dGVybmFsW10ge1xuXHRsZXQgYUZldGNoZWRQcm9wZXJ0aWVzID0gX2dldENhY2hlZFByb3BlcnRpZXMob0ZpbHRlckJhcik7XG5cdGxldCBsb2NhbEdyb3VwTGFiZWw7XG5cblx0aWYgKCFhRmV0Y2hlZFByb3BlcnRpZXMpIHtcblx0XHRhRmV0Y2hlZFByb3BlcnRpZXMgPSBPRGF0YUZpbHRlckJhckRlbGVnYXRlLmZldGNoUHJvcGVydGllc0ZvckVudGl0eShzRW50aXR5VHlwZVBhdGgsIG9NZXRhTW9kZWwsIG9GaWx0ZXJCYXIpO1xuXHRcdGFGZXRjaGVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChvR3JvdXA6IEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRsb2NhbEdyb3VwTGFiZWwgPSBudWxsO1xuXHRcdFx0aWYgKG9Hcm91cC5ncm91cExhYmVsKSB7XG5cdFx0XHRcdGxvY2FsR3JvdXBMYWJlbCA9IGdldExvY2FsaXplZFRleHQob0dyb3VwLmdyb3VwTGFiZWwsIG9GaWx0ZXJCYXIpO1xuXHRcdFx0XHRvR3JvdXAuZ3JvdXBMYWJlbCA9IGxvY2FsR3JvdXBMYWJlbCA9PT0gbnVsbCA/IG9Hcm91cC5ncm91cExhYmVsIDogbG9jYWxHcm91cExhYmVsO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsKGFGZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0X3NldENhY2hlZFByb3BlcnRpZXMob0ZpbHRlckJhciwgYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0fVxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufVxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAoZmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiBQcm9taXNlPFByb3BlcnR5SW5mb0V4dGVybmFsW10+IHtcblx0Y29uc3QgcHJvcGVydHlJbmZvcyA9IGF3YWl0IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzKGZpbHRlckJhciBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sKTtcblx0RGVsZWdhdGVVdGlsLnNldEN1c3RvbURhdGEoZmlsdGVyQmFyLCBcImZlRmlsdGVySW5mb1wiLCBwcm9wZXJ0eUluZm9zKTtcblx0aWYgKHByb3BlcnR5SW5mb3MubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5mb3JtYXRQcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvcyBhcyBQcm9wZXJ0eUluZm9bXSkgYXMgUHJvcGVydHlJbmZvRXh0ZXJuYWxbXTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn07XG5cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRmaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sXG4pOiBQcm9taXNlPENvbnRyb2xQcm9wZXJ0eUluZm9bXSB8IFByb3BlcnR5SW5mb0V4dGVybmFsW10+IHtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KGZpbHRlckJhciwgXCJlbnRpdHlUeXBlXCIpITtcblx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKGZpbHRlckJhciBhcyBGaWx0ZXJCYXIpLnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdGlmICghbW9kZWwpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIF9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShlbnRpdHlUeXBlUGF0aCwgbW9kZWwuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsIGZpbHRlckJhcik7XG5cdH0pO1xufTtcblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5nZXRUeXBlTWFwID0gZnVuY3Rpb24gKCk6IHR5cGVvZiBUeXBlTWFwIHtcblx0cmV0dXJuIFR5cGVNYXA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBPRGF0YUZpbHRlckJhckRlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE4REEsTUFBTUEsc0JBQXNCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsQ0FzRGpFO0VBQ0RILHNCQUFzQixDQUFDSSxVQUFVLEdBQUcsQ0FBQztFQUNyQyxNQUFNQyx3QkFBd0IsR0FBRyxZQUFZO0lBQzVDQyxvQkFBb0IsR0FBRyxTQUFTO0lBQ2hDQyxlQUFlLEdBQUcsc0JBQXNCO0lBQ3hDQywyQkFBMkIsR0FBRywwQ0FBMEM7O0VBRXpFOztFQUtBLGVBQWVDLGtCQUFrQkEsQ0FDaENDLFNBQWlCLEVBQ2pCQyxTQUF5QixFQUN6QkMsU0FBdUMsRUFDWjtJQUMzQixNQUFNQyxLQUFLLEdBQUcsSUFBSUMsU0FBUyxDQUFDO1FBQzFCQyxFQUFFLEVBQUVMLFNBQVM7UUFDYk0sb0JBQW9CLEVBQUVDLFdBQVcsQ0FBQ0MsNkJBQTZCLENBQUNQLFNBQVM7TUFDMUUsQ0FBQyxDQUFDO01BQ0ZRLHFCQUFxQixHQUFHO1FBQ3ZCQyxlQUFlLEVBQUU7VUFDaEJDLElBQUksRUFBRVIsS0FBSyxDQUFDUyxvQkFBb0IsQ0FBQyxHQUFHO1FBQ3JDLENB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
@@ -18,6 +18,8 @@ import type { BaseTreeModifier, PreprocessorSettings } from "sap/fe/core/CommonU
18
18
  import CommonUtils from "sap/fe/core/CommonUtils";
19
19
  import TemplateModel from "sap/fe/core/TemplateModel";
20
20
  import { getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
21
+ import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
22
+ import FilterRestrictions from "sap/fe/core/converters/controls/Common/filter/FilterRestrictions";
21
23
  import type {
22
24
  PropertyInfo as FEPropertyInfo,
23
25
  FilterField,
@@ -29,6 +31,7 @@ import { isPropertyFilterable } from "sap/fe/core/helpers/MetaModelFunction";
29
31
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
30
32
  import { getLocalizedText, getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
31
33
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
34
+ import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
32
35
  import { hasValueHelp } from "sap/fe/core/templating/PropertyFormatters";
33
36
  import { getModelType } from "sap/fe/core/type/EDM";
34
37
  import CommonHelper from "sap/fe/macros/CommonHelper";
@@ -704,8 +707,8 @@ ODataFilterBarDelegate.fetchPropertiesForEntity = function (
704
707
  aFetchedProperties = aFetchedProperties.filter(function (oProp: FEPropertyInfo) {
705
708
  return processedFieldsKeys.includes(oProp.key!);
706
709
  });
707
-
708
- const oFR = CommonUtils.getFilterRestrictionsByPath(sEntitySetPath, oMetaModel),
710
+ const dataModel = getInvolvedDataModelObjects(oMetaModel.getContext(sEntitySetPath));
711
+ const oFR = FilterRestrictions.getFilterRestrictionsByDataModel(dataModel as DataModelObjectPath<PageContextPathTarget>),
709
712
  mAllowedExpressions = oFR.FilterAllowedExpressions;
710
713
  //Object.keys(processedFields).forEach(function (sFilterFieldKey: string) {
711
714
  processedFields.forEach(function (oProp, iFilterFieldIndex: number) {