@sapui5/sap.fe.core 1.141.2 → 1.142.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +94 -8
  7. package/src/sap/fe/core/AppStateHandler.js +9 -8
  8. package/src/sap/fe/core/AppStateHandler.ts +13 -9
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +2 -14
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +20 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +24 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
  70. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
  71. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  72. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  73. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  74. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
  77. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  78. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  79. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  80. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  81. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  82. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  83. package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
  84. package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
  85. package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
  86. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  87. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  88. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  89. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  90. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
  91. package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
  92. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  93. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  94. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  95. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
  96. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  98. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  100. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  101. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  102. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  103. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  104. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  105. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  106. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  107. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  108. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  110. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  112. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  113. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  114. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  115. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  118. package/src/sap/fe/core/fpm/Component.js +8 -1
  119. package/src/sap/fe/core/fpm/Component.ts +8 -0
  120. package/src/sap/fe/core/fpm/manifest.json +1 -1
  121. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  122. package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
  123. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  124. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  125. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  126. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  127. package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
  128. package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
  129. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  130. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  131. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  132. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  133. package/src/sap/fe/core/library.js +30 -3
  134. package/src/sap/fe/core/library.ts +28 -1
  135. package/src/sap/fe/core/messagebundle.properties +8 -1
  136. package/src/sap/fe/core/messagebundle_ar.properties +7 -0
  137. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  138. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  139. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  140. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  141. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  143. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  144. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  146. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
  148. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  149. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  152. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  153. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  154. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  159. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  167. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_no.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  175. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  184. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  185. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  186. package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
  187. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  188. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  189. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  190. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  191. package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
  192. package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
  193. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  194. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  195. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
  196. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
  197. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  198. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  200. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  201. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  202. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  203. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  204. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  205. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  206. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  207. package/ui5.yaml +2 -0
@@ -20,6 +20,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
20
20
  var getSemanticObjectMapping = Action.getSemanticObjectMapping;
21
21
  var getEnabledForAnnotationActionExpression = Action.getEnabledForAnnotationActionExpression;
22
22
  var getEnabledForAnnotationAction = Action.getEnabledForAnnotationAction;
23
+ var getCreateNextButtonVisibility = Action.getCreateNextButtonVisibility;
23
24
  var getCopyAction = Action.getCopyAction;
24
25
  var dataFieldIsCopyAction = Action.dataFieldIsCopyAction;
25
26
  var ButtonType = Action.ButtonType;
@@ -367,9 +368,11 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
367
368
  return getDataFieldAnnotationAction(dataField, converterContext);
368
369
  });
369
370
  if (conditionCreateNext) {
371
+ const ifFCLEnabled = converterContext.getManifestWrapper().isFclEnabled();
370
372
  footerActions.push({
371
373
  type: ActionType.CreateNext,
372
- key: "CreateNextAction"
374
+ key: "CreateNextAction",
375
+ visible: compileExpression(getCreateNextButtonVisibility(!!conditionCreateNext, ifFCLEnabled))
373
376
  });
374
377
  }
375
378
  // Then the save action if it exists
@@ -459,4 +462,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
459
462
  }
460
463
  return _exports;
461
464
  }, false);
462
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMiLCJlbnRpdHlUeXBlIiwiaXNEZXRlcm1pbmluZ0FjdGlvbiIsImFubm90YXRpb25zIiwiVUkiLCJJZGVudGlmaWNhdGlvbiIsImZpbHRlciIsImlkZW50aWZpY2F0aW9uRGF0YUZpZWxkIiwiJFR5cGUiLCJCb29sZWFuIiwiRGV0ZXJtaW5pbmciLCJ2YWx1ZU9mIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJfZXhwb3J0cyIsImdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzIiwiZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMiLCJnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5IiwiY29udmVydGVyQ29udGV4dCIsImRlbGV0ZUhpZGRlbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2UHJvcCIsIm5hbWUiLCJkZWxldGVIaWRkZW5FeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJ2aWV3TGV2ZWwiLCJnZXRWaWV3TGV2ZWwiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJJc0VkaXRhYmxlIiwibm90IiwiaWZFbHNlIiwidW5kZWZpbmVkIiwiYW5kIiwiZXF1YWwiLCJnZXREZWxldGVCdXR0b25FbmFibGVkIiwiaXNEZWxldGFibGUiLCJpc1BhcmVudERlbGV0YWJsZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzRHJhZnRSb290IiwiTW9kZWxIZWxwZXIiLCJyZXQiLCJjb25zdGFudCIsInBhdGhJbk1vZGVsIiwiZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkiLCJyb290VXBkYXRlSGlkZGVuIiwicm9vdENvbnZlcnRlckNvbnRleHQiLCJ1cGRhdGVIaWRkZW4iLCJjYXBhYmlsaXRpZXMiLCJyb290RW50aXR5U2V0IiwiaXNGQ0xFbmFibGVkIiwiaXNGY2xFbmFibGVkIiwiaXNEcmFmdEVuYWJsZWQiLCJyb290VXBkYXRlSGlkZGVuRXhwcmVzc2lvbiIsImdldEhpZGRlbkV4cHJlc3Npb24iLCJoaWRkZW5EcmFmdCIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsImlzRHJhZnROb2RlIiwidXBkYXRlSGlkZGVuRXhwcmVzc2lvbiIsIm5vdEVkaXRhYmxlRXhwcmVzc2lvbiIsInJlc3VsdGFudEV4cHJlc3Npb24iLCJEcmFmdCIsIkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciIsImdldEVkaXRCdXR0b25FbmFibGVkRXhwcmVzc2lvbiIsInVwZGF0ZVJlc3RyaWN0aW9ucyIsImlzU3RpY2t5IiwiZWRpdEFjdGlvbk5hbWUiLCJpc0VudGl0eVNldCIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsIkVkaXRBY3Rpb24iLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJlZGl0QWN0aW9uIiwicmVzb2x2ZUFic29sdXRlUGF0aCIsInRhcmdldCIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbiIsImdldEVkaXRCdXR0b25FbmFibGVkIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsInNDb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwicm9vdEVudGl0eVNldFBhdGgiLCJnZXRSb290RW50aXR5U2V0UGF0aCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRFbnRpdHlUeXBlIiwicm9vdEVudGl0eVR5cGUiLCJzdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0U3RpY2t5U2Vzc2lvbiIsImRyYWZ0Um9vdCIsImdldERyYWZ0Um9vdCIsImNvbGxhYm9yYXRpb25PblJvb3QiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0IiwiZHJhZnROb2RlIiwiZ2V0RHJhZnROb2RlIiwiZW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zIiwiQ2FwYWJpbGl0aWVzIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiaXNVcGRhdGVIaWRkZW4iLCJpc1BhdGhEZWxldGFibGUiLCJwYXRoVmlzaXRvciIsIm5hdmlnYXRpb25QYXRocyIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsImlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyIsImNvcHlEYXRhRmllbGQiLCJnZXRDb3B5QWN0aW9uIiwiZGF0YUZpZWxkIiwiZGF0YUZpZWxkSXNDb3B5QWN0aW9uIiwiaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucyIsImhlYWRlckFjdGlvbnMiLCJwdXNoIiwidHlwZSIsIkFjdGlvblR5cGUiLCJEcmFmdEFjdGlvbnMiLCJrZXkiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJDb2xsYWJvcmF0aW9uQXZhdGFycyIsImNvbXB1dGVBY3Rpb25zQW5kQWN0aW9uR3JvdXBzIiwidmlzaWJsZSIsImhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uIiwiUHJpbWFyeSIsIkRlbGV0YWJsZSIsImdldERlbGV0ZUhpZGRlbiIsIlNlY29uZGFyeSIsInBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQiLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiQ29weSIsInRleHQiLCJMYWJlbCIsInRvU3RyaW5nIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsImhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnMiLCJjcml0aWNhbGl0eSIsIkNyaXRpY2FsaXR5IiwiaW5jbHVkZXMiLCJmb3JFYWNoIiwiUmVxdWlyZXNDb250ZXh0IiwiRXJyb3IiLCJJbmxpbmUiLCJvTmF2aWdhdGlvblBhcmFtcyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIk1hcHBpbmciLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJidXR0b25UeXBlIiwiQnV0dG9uVHlwZSIsIkdob3N0IiwiSGlkZGVuIiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzTmF2aWdhYmxlIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwiZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyIsImhpZGRlbkFjdGlvbnMiLCJEZWZhdWx0IiwiZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnMiLCJlbnRpdHlTZXREcmFmdFJvb3QiLCJ0ZXJtIiwiY29uZGl0aW9uU2F2ZSIsIlNhdmVBY3Rpb24iLCJjb25kaXRpb25BcHBseSIsImNvbmRpdGlvbkNhbmNlbCIsIkRpc2NhcmRBY3Rpb24iLCJjb25kaXRpb25DcmVhdGVOZXh0IiwiaGlkZUNyZWF0ZU5leHQiLCJmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zIiwiZm9vdGVyQWN0aW9ucyIsIkNyZWF0ZU5leHQiLCJlbnRpdHlUeXBlTmFtZSIsIkRlZmF1bHRBcHBseSIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiRW5kIiwiaXNWaXNpYmxlRXhwIiwiaXNWaXNpYmxlIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJpc0FJT3BlcmF0aW9uIiwiaXNBY3Rpb25BSU9wZXJhdGlvbiIsInByaW9yaXRpemVDcml0aWNhbGl0eSIsImhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnNPckdyb3VwcyIsIk1lbnUiLCJpZCIsIm1lbnUiLCJBY3Rpb25zIiwiaXNNZW51QUlPcGVyYXRpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkhlYWRlckFuZEZvb3RlckFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgRW50aXR5VHlwZSwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblR5cGVzLFxuXHREZWxldGVIaWRkZW4sXG5cdFVwZGF0ZUhpZGRlblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdG5vdCxcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uQWN0aW9uLCBCYXNlQWN0aW9uLCBEYXRhRmllbGRGb3JBY3Rpb25PckFjdGlvbkdyb3VwIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHtcblx0QnV0dG9uVHlwZSxcblx0ZGF0YUZpZWxkSXNDb3B5QWN0aW9uLFxuXHRnZXRDb3B5QWN0aW9uLFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbixcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25FeHByZXNzaW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdGlzQWN0aW9uQUlPcGVyYXRpb24sXG5cdGlzTWVudUFJT3BlcmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGlzUGF0aERlbGV0YWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHsgRHJhZnQsIFVJLCBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9ucyBmcm9tIHRoZSBJZGVudGlmaWNhdGlvbiBhbm5vdGF0aW9uXG4gKiBUaGV5IG11c3QgYmVcbiAqIC0gRWl0aGVyIGxpbmtlZCB0byBhbiB1bmJvdW5kIGFjdGlvbiBvciB0byBhbiBhY3Rpb24gd2hpY2ggaGFzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSB0aGF0IGlzIG5vdCBzZXQgdG8gZmFsc2Ugc3RhdGljYWxseS5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0gaXNEZXRlcm1pbmluZ0FjdGlvbiBUaGUgZmxhZyB3aGljaCBkZW5vdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gaXMgYSBkZXRlcm1pbmluZyBhY3Rpb25cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIERhdGFGaWVsZEZvckFjdGlvbiByZXNwZWN0aW5nIHRoZSBpbnB1dCBwYXJhbWV0ZXIgJ2lzRGV0ZXJtaW5pbmdBY3Rpb24nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgaXNEZXRlcm1pbmluZ0FjdGlvbjogYm9vbGVhbik6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzW10ge1xuXHRyZXR1cm4gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZCkgPT4ge1xuXHRcdHJldHVybiBpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRCb29sZWFuKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkpID09PSBpc0RldGVybWluaW5nQWN0aW9uICYmXG5cdFx0XHQoaWRlbnRpZmljYXRpb25EYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kPy52YWx1ZU9mKCkgIT09IHRydWUgfHxcblx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSlcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0fSkgfHwgW10pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW107XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCB0aGUgZGF0YSBmaWVsZCBmb3IgYWN0aW9ucyBmb3IgdGhlIGlkZW50aWZpY2F0aW9uIGFubm90YXRpb25cbiAqIFRoZXkgbXVzdCBiZVxuICogLSBFaXRoZXIgbGlua2VkIHRvIGFuIFVuYm91bmQgYWN0aW9uIG9yIHRvIGFuIGFjdGlvbiB3aGljaCBoYXMgYW4gT3BlcmF0aW9uQXZhaWxhYmxlIHRoYXQgaXMgbm90IHNldCB0byBmYWxzZSBzdGF0aWNhbGx5LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBpc0RldGVybWluaW5nQWN0aW9uIFRoZSBmbGFnIHdoaWNoIGRlbm90ZXMgd2hldGhlciBvciBub3QgdGhlIGFjdGlvbiBpcyBhIGRldGVybWluaW5nIGFjdGlvblxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgRGF0YUZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgaW5wdXQgcGFyYW1ldGVyICdpc0RldGVybWluaW5nQWN0aW9uJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zT3JHcm91cHMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGlzRGV0ZXJtaW5pbmdBY3Rpb246IGJvb2xlYW5cbik6IERhdGFGaWVsZEZvckFjdGlvbk9yQWN0aW9uR3JvdXBbXSB7XG5cdHJldHVybiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uPy5maWx0ZXIoKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuIChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRCb29sZWFuKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkpID09PSBpc0RldGVybWluaW5nQWN0aW9uICYmXG5cdFx0XHQoaWRlbnRpZmljYXRpb25EYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kPy52YWx1ZU9mKCkgIT09IHRydWUgfHxcblx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSkpIHx8XG5cdFx0XHRpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0fSkgfHwgW10pIGFzIERhdGFGaWVsZEZvckFjdGlvbk9yQWN0aW9uR3JvdXBbXTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbGwgdGhlIElCTiBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eXR5cGVcbiAqIEBwYXJhbSBpc0RldGVybWluaW5nQWN0aW9uIFdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gc2hvdWxkIGJlIGRldGVybWluaW5nXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkYXRhIGZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgaXNEZXRlcm1pbmluZ0FjdGlvbiBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRpc0RldGVybWluaW5nQWN0aW9uOiBib29sZWFuXG4pOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25UeXBlc1tdIHtcblx0cmV0dXJuIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSWRlbnRpZmljYXRpb24/LmZpbHRlcigoaWRlbnRpZmljYXRpb25EYXRhRmllbGQpID0+IHtcblx0XHRyZXR1cm4gaWRlbnRpZmljYXRpb25EYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0Qm9vbGVhbihpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpKSA9PT0gaXNEZXRlcm1pbmluZ0FjdGlvblxuXHRcdFx0PyB0cnVlXG5cdFx0XHQ6IGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXTtcbn1cblxuZXhwb3J0IGNvbnN0IElNUE9SVEFOVF9DUklUSUNBTElUSUVTID0gW1xuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9WZXJ5UG9zaXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvUG9zaXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvVmVyeU5lZ2F0aXZlXCJcbl07XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBEZWxldGUgYnV0dG9uIG9uIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGRlbGV0ZUhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIFVJLkRlbGV0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIHRoZSBlbnRpdHkgc2V0IC8gdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIERlbGV0ZSBidXR0b24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRlbGV0ZUhpZGRlbjogRGVsZXRlSGlkZGVuIHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUpLFxuXHRcdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0XHQvLyBGb3IgZS5nLiAvY29tLnNhcC5uYW1lc3BhY2UuRW50aXR5Q29udGFpbmVyL1NpbmdsZXRvbi9Qcm9wZXJ0eSB0byAvU2luZ2xldG9uL1Byb3BlcnR5XG5cdFx0ZGVsZXRlSGlkZGVuRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkZWxldGVIaWRkZW4sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIGZhbHNlLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBbXSlcblx0XHQpLCAvLyBkZWZhdWx0IHRvIGZhbHNlXG5cdFx0bWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSxcblx0XHR2aWV3TGV2ZWwgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0xldmVsKCksXG5cdFx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlXG5cdFx0Ly8gSW4gT1AgXHRcdC0tPiAgd2hlbiBub3QgaW4gZWRpdCBtb2RlXG5cdFx0Ly8gSW4gc3ViLU9QIFx0LS0+ICB3aGVuIGluIGVkaXQgbW9kZVxuXHRcdGVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gdmlld0xldmVsID4gMSA/IFVJLklzRWRpdGFibGUgOiBub3QoVUkuSXNFZGl0YWJsZSk7XG5cblx0Ly8gSWYgVUkuRGVsZXRlSGlkZGVuIGFubm90YXRpb24gb24gZW50aXR5IHNldCBvciB0eXBlIGlzIGVpdGhlciBub3QgZGVmaW5lZCBvciBleHBsaWNpdGx5IHNldCB0byBmYWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGVkaXRhYmxlRXhwcmVzc2lvbi5cblx0Ly8gZWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGJvdGggYW5ub3RhdGlvbiBwYXRoIGFuZCBlZGl0YWJsZUV4cHJlc3Npb24uXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0ZGVsZXRlSGlkZGVuID09PSB1bmRlZmluZWQgfHwgZGVsZXRlSGlkZGVuLnZhbHVlT2YoKSA9PT0gZmFsc2UsXG5cdFx0ZWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGVxdWFsKGRlbGV0ZUhpZGRlbkV4cHJlc3Npb24sIGZhbHNlKSlcblx0KTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gaXNEZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkXG4gKiBAcGFyYW0gaXNQYXJlbnREZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkIG9uIHRoZSBwYXJlbnQgZW50aXR5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlQnV0dG9uRW5hYmxlZChcblx0aXNEZWxldGFibGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+IHwgdW5kZWZpbmVkLFxuXHRpc1BhcmVudERlbGV0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0aXNEcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChlbnRpdHlTZXQpO1xuXG5cdGxldCByZXQgPSBpZkVsc2UoXG5cdFx0aXNQYXJlbnREZWxldGFibGUgIT09IHVuZGVmaW5lZCxcblx0XHRpc1BhcmVudERlbGV0YWJsZSxcblx0XHRpZkVsc2UoaXNEZWxldGFibGUgIT09IHVuZGVmaW5lZCwgZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGlzRGVsZXRhYmxlKSwgdHJ1ZSksIGNvbnN0YW50KHRydWUpKVxuXHQpO1xuXG5cdC8vIGRlbGV0ZSBzaG91bGQgYmUgZGlzYWJsZWQgZm9yIExvY2tlZCBvYmplY3RzXG5cdHJldCA9IGlzRHJhZnRSb290ID8gYW5kKHJldCwgbm90KHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpKSkgOiByZXQ7XG5cblx0cmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAndmlzaWJsZScgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIEVkaXQgYnV0dG9uIG9uIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHJvb3RVcGRhdGVIaWRkZW4gVGhlIHZhbHVlIG9mIHRoZSBVSS5VcGRhdGVIaWRkZW4gYW5ub3RhdGlvbiBvbiB0aGUgZW50aXR5IHNldCAvIHR5cGUuXG4gKiBAcGFyYW0gcm9vdENvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB1cGRhdGVIaWRkZW5cbiAqIEBwYXJhbSB2aWV3TGV2ZWxcbiAqIEBwYXJhbSBjYXBhYmlsaXRpZXNcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cm9vdFVwZGF0ZUhpZGRlbjogVXBkYXRlSGlkZGVuIHwgdW5kZWZpbmVkLFxuXHRyb290Q29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR1cGRhdGVIaWRkZW4/OiBVcGRhdGVIaWRkZW4gfCB1bmRlZmluZWQsXG5cdHZpZXdMZXZlbD86IG51bWJlciB8IHVuZGVmaW5lZCxcblx0Y2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHJvb3RFbnRpdHlTZXQgPSByb290Q29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCksXG5cdFx0ZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRpc0ZDTEVuYWJsZWQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRmNsRW5hYmxlZCgpO1xuXHRsZXQgaXNEcmFmdEVuYWJsZWQ7XG5cdGNvbnN0IHJvb3RVcGRhdGVIaWRkZW5FeHByZXNzaW9uID0gZ2V0SGlkZGVuRXhwcmVzc2lvbihyb290Q29udmVydGVyQ29udGV4dCwgcm9vdFVwZGF0ZUhpZGRlbik7XG5cdGNvbnN0IGhpZGRlbkRyYWZ0ID0gKGNhcGFiaWxpdGllcz8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkO1xuXHRpZiAodmlld0xldmVsICYmIHZpZXdMZXZlbCA+IDEpIHtcblx0XHQvLyBpZiB2aWV3bGV2ZWwgPiAxIGNoZWNrIGlmIG5vZGUgaXMgZHJhZnQgZW5hYmxlZFxuXHRcdGlzRHJhZnRFbmFibGVkID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoZW50aXR5U2V0KTtcblx0fSBlbHNlIHtcblx0XHRpc0RyYWZ0RW5hYmxlZCA9IE1vZGVsSGVscGVyLmlzRHJhZnRSb290KHJvb3RFbnRpdHlTZXQpO1xuXHR9XG5cdGNvbnN0IHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24gPSBnZXRIaWRkZW5FeHByZXNzaW9uKHJvb3RDb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGVIaWRkZW4pO1xuXG5cdGNvbnN0IG5vdEVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gbm90KFVJLklzRWRpdGFibGUpO1xuXG5cdC8vIElmIFVJLlVwZGF0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIGVudGl0eSBzZXQgb3IgdHlwZSBpcyBlaXRoZXIgbm90IGRlZmluZWQgb3IgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsXG5cdC8vIEVkaXQgYnV0dG9uIGlzIHZpc2libGUgaW4gZGlzcGxheSBtb2RlLlxuXHQvLyBlbHNlLFxuXHQvLyBFZGl0IGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGJvdGggYW5ub3RhdGlvbiBwYXRoIGFuZCBpbiBkaXNwbGF5IG1vZGUuXG5cdGNvbnN0IHJlc3VsdGFudEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGlmRWxzZShcblx0XHQodmlld0xldmVsIGFzIG51bWJlcikgPiAxIHx8IGhpZGRlbkRyYWZ0LFxuXHRcdGlmRWxzZShcblx0XHRcdHVwZGF0ZUhpZGRlbiA9PT0gdW5kZWZpbmVkIHx8IHVwZGF0ZUhpZGRlbi52YWx1ZU9mKCkgPT09IGZhbHNlLFxuXHRcdFx0YW5kKFxuXHRcdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwicm9vdEVkaXRWaXNpYmxlXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRpZkVsc2UoaXNGQ0xFbmFibGVkLCBlcXVhbChwYXRoSW5Nb2RlbChcIi9zaG93RWRpdEJ1dHRvblwiLCBcImZjbGhlbHBlclwiKSwgdHJ1ZSksIHRydWUpXG5cdFx0XHQpLFxuXHRcdFx0YW5kKFxuXHRcdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdGVxdWFsKHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24sIGZhbHNlKSxcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJyb290RWRpdFZpc2libGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGlmRWxzZShpc0ZDTEVuYWJsZWQsIGVxdWFsKHBhdGhJbk1vZGVsKFwiL3Nob3dFZGl0QnV0dG9uXCIsIFwiZmNsaGVscGVyXCIpLCB0cnVlKSwgdHJ1ZSlcblx0XHRcdClcblx0XHQpLFxuXHRcdGlmRWxzZShcblx0XHRcdHJvb3RVcGRhdGVIaWRkZW4gPT09IHVuZGVmaW5lZCB8fCByb290VXBkYXRlSGlkZGVuLnZhbHVlT2YoKSA9PT0gZmFsc2UsXG5cdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRhbmQobm90RWRpdGFibGVFeHByZXNzaW9uLCBlcXVhbChyb290VXBkYXRlSGlkZGVuRXhwcmVzc2lvbiwgZmFsc2UpKVxuXHRcdClcblx0KTtcblx0cmV0dXJuIGlmRWxzZShpc0RyYWZ0RW5hYmxlZCwgYW5kKHJlc3VsdGFudEV4cHJlc3Npb24sIERyYWZ0Lkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciksIHJlc3VsdGFudEV4cHJlc3Npb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuRXhwcmVzc2lvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR1cGRhdGVIaWRkZW46IFVwZGF0ZUhpZGRlbiB8IHVuZGVmaW5lZFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lKSxcblx0XHQvLyBTZXQgYWJzb2x1dGUgYmluZGluZyBwYXRoIGZvciBTaW5nbGV0b24gcmVmZXJlbmNlcywgb3RoZXJ3aXNlIHRoZSBjb25maWd1cmVkIGFubm90YXRpb24gcGF0aCBpdHNlbGYuXG5cdFx0Ly8gRm9yIGUuZy4gL2NvbS5zYXAubmFtZXNwYWNlLkVudGl0eUNvbnRhaW5lci9TaW5nbGV0b24vUHJvcGVydHkgdG8gL1NpbmdsZXRvbi9Qcm9wZXJ0eVxuXHRcdHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odXBkYXRlSGlkZGVuLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBmYWxzZSwgKHBhdGg6IHN0cmluZykgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0XHQpO1xuXHRyZXR1cm4gdXBkYXRlSGlkZGVuRXhwcmVzc2lvbjtcbn1cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB1cGRhdGVSZXN0cmljdGlvbnNcbiAqIEBwYXJhbSB2aWV3TGV2ZWxcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvbkVuYWJsZWRFeHByZXNzaW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHVwZGF0ZVJlc3RyaWN0aW9ucz86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHR2aWV3TGV2ZWw/OiBudW1iZXIgfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0aXNEcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChlbnRpdHlTZXQpLFxuXHRcdGlzU3RpY2t5ID0gTW9kZWxIZWxwZXIuaXNTdGlja3koZW50aXR5U2V0KTtcblx0bGV0IGVkaXRBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChpc0RyYWZ0Um9vdCAmJiBpc0VudGl0eVNldChlbnRpdHlTZXQpKSB7XG5cdFx0ZWRpdEFjdGlvbk5hbWUgPSBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/LkVkaXRBY3Rpb24gYXMgc3RyaW5nO1xuXHR9IGVsc2UgaWYgKGlzU3RpY2t5ICYmIGlzRW50aXR5U2V0KGVudGl0eVNldCkpIHtcblx0XHRlZGl0QWN0aW9uTmFtZSA9IGVudGl0eVNldC5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5FZGl0QWN0aW9uIGFzIHN0cmluZztcblx0fVxuXHRpZiAoZWRpdEFjdGlvbk5hbWUpIHtcblx0XHRjb25zdCBlZGl0QWN0aW9uQW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoZWRpdEFjdGlvbk5hbWUpO1xuXHRcdGNvbnN0IGVkaXRBY3Rpb24gPSBjb252ZXJ0ZXJDb250ZXh0LnJlc29sdmVBYnNvbHV0ZVBhdGgoZWRpdEFjdGlvbkFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgQWN0aW9uIHwgbnVsbDtcblx0XHRpZiAoZWRpdEFjdGlvbj8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gV2UgZGlzYWJsZWQgYWN0aW9uIGFkdmVydGlzZW1lbnQgYnV0IGtlcHQgaXQgaW4gdGhlIGNvZGUgZm9yIHRoZSB0aW1lIGJlaW5nXG5cdFx0XHQvL3JldHVybiBcIns9ICR7I1wiICsgZWRpdEFjdGlvbk5hbWUgKyBcIn0gPyB0cnVlIDogZmFsc2UgfVwiO1xuXHRcdH0gZWxzZSBpZiAoKHZpZXdMZXZlbCBhcyBudW1iZXIpID4gMSkge1xuXHRcdFx0Ly8gRWRpdCBidXR0b24gaXMgZW5hYmxlZCBiYXNlZCBvbiB0aGUgdXBkYXRlIHJlc3RyaWN0aW9ucyBvZiB0aGUgc3ViLU9QXG5cdFx0XHRpZiAodXBkYXRlUmVzdHJpY3Rpb25zICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0XHRlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odXBkYXRlUmVzdHJpY3Rpb25zKSwgdHJ1ZSksXG5cdFx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJyb290RWRpdEVuYWJsZWRcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBlcXVhbChwYXRoSW5Nb2RlbChcInJvb3RFZGl0RW5hYmxlZFwiLCBcImludGVybmFsXCIpLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCBlZGl0QWN0aW9uID8/IHVuZGVmaW5lZCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb25zdGFudCh0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRCdXR0b25FbmFibGVkKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHVwZGF0ZVJlc3RyaWN0aW9ucz86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHR2aWV3TGV2ZWw/OiBudW1iZXIgfCB1bmRlZmluZWRcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEVkaXRCdXR0b25FbmFibGVkRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGVSZXN0cmljdGlvbnMsIHZpZXdMZXZlbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3Qgcm9vdEVudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRSb290RW50aXR5U2V0UGF0aChzQ29udGV4dFBhdGgpO1xuXHRjb25zdCByb290Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KFwiL1wiICsgcm9vdEVudGl0eVNldFBhdGgpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRyb290RW50aXR5U2V0ID0gcm9vdENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0cm9vdEVudGl0eVR5cGUgPSByb290Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0c3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmdldFN0aWNreVNlc3Npb24ocm9vdEVudGl0eVNldCksIC8vZm9yIHN0aWNreSBhcHBcblx0XHRkcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3Qocm9vdEVudGl0eVNldCksIC8vZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCxcblx0XHRjb2xsYWJvcmF0aW9uT25Sb290ID0gTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRGcm9tQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZXJDb250ZXh0KSAmJiBkcmFmdFJvb3QsXG5cdFx0ZHJhZnROb2RlID0gTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHJvb3RFbnRpdHlTZXQpLFxuXHRcdGVudGl0eURlbGV0ZVJlc3RyaWN0aW9ucyA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRGVsZXRlUmVzdHJpY3Rpb25zLFxuXHRcdHJvb3RVcGRhdGVIaWRkZW4gPSBNb2RlbEhlbHBlci5pc1VwZGF0ZUhpZGRlbihyb290RW50aXR5U2V0LCByb290RW50aXR5VHlwZSksXG5cdFx0dXBkYXRlSGlkZGVuID0gcm9vdEVudGl0eVNldCAmJiBpc0VudGl0eVNldChyb290RW50aXR5U2V0KSAmJiByb290VXBkYXRlSGlkZGVuPy52YWx1ZU9mKCksXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIG5hdmlnYXRpb25QYXRocylcblx0XHR9KSxcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVFeHByZXNzaW9uKGlzUGFyZW50RGVsZXRhYmxlKSA6IGlzUGFyZW50RGVsZXRhYmxlLFxuXHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBmYWxzZSk7XG5cblx0Y29uc3QgY29weURhdGFGaWVsZCA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRWaWV3TGV2ZWwoKSA9PT0gMVxuXHRcdFx0PyBnZXRDb3B5QWN0aW9uKFxuXHRcdFx0XHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucy5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSBhcyBEYXRhRmllbGRGb3JBY3Rpb25bXVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zID0gaWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zLmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuICFkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzKTtcblx0fSk7XG5cblx0Ly8gSW5pdGlhbGl6ZSBhY3Rpb25zIGFuZCBzdGFydCB3aXRoIGRyYWZ0IGFjdGlvbnMgaWYgYXZhaWxhYmxlIHNpbmNlIHRoZXkgc2hvdWxkIGFwcGVhciBpbiB0aGUgZmlyc3Rcblx0Ly8gbGVmdG1vc3QgcG9zaXRpb24gaW4gdGhlIGFjdGlvbnMgYXJlYSBvZiB0aGUgT1AgaGVhZGVyXG5cdC8vIFRoaXMgaXMgbW9yZSBsaWtlIGEgcGxhY2Vob2xkZXIgdGhhbiBhIHNpbmdsZSBhY3Rpb24sIHNpbmNlIHRoaXMgY29udHJvbHMgbm90IG9ubHkgdGhlIHRlbXBsYXRpbmcgb2Zcblx0Ly8gdGhlIGJ1dHRvbiBmb3Igc3dpdGNoaW5nIGJldHdlZW4gZHJhZnQgYW5kIGFjdGl2ZSBkb2N1bWVudCB2ZXJzaW9ucyBidXQgYWxzbyB0aGUgY29udHJvbHMgZm9yXG5cdC8vIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGZyYWdtZW50LlxuXHRjb25zdCBoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0aWYgKGlzRW50aXR5U2V0KGVudGl0eVNldCkgJiYgZHJhZnRSb290Py5FZGl0QWN0aW9uICYmIHVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuRHJhZnRBY3Rpb25zLCBrZXk6IFwiRHJhZnRBY3Rpb25zXCIgfSk7XG5cdH1cblxuXHRjb25zdCB2aWV3TGV2ZWwgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFZpZXdMZXZlbCgpO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSB2aWV3TGV2ZWwgPiAxID8gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlIDogdW5kZWZpbmVkO1xuXHRpZiAoZHJhZnRSb290IHx8IGRyYWZ0Tm9kZSkge1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuQ29sbGFib3JhdGlvbkF2YXRhcnMsIGtleTogXCJDb2xsYWJvcmF0aW9uQXZhdGFyc1wiIH0pO1xuXHR9XG5cdC8vIFRoZW4gYWRkIHRoZSBcIkNyaXRpY2FsXCIgRGF0YUZpZWxkRm9yQWN0aW9ucyBhbmQgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBzXG5cdC8vIFByaW9yaXRpemVzIGFjdGlvbnMgYW5kIGFjdGlvbiBncm91cHMgdGhhdCBoYXZlIHRoZSBDcml0aWNhbGl0eSBhbm5vdGF0aW9uLCBwbGFjaW5nIHRoZW0gYmVmb3JlIHRob3NlIHdpdGhvdXQgdGhlIGFubm90YXRpb25cblx0Y29tcHV0ZUFjdGlvbnNBbmRBY3Rpb25Hcm91cHMoaGVhZGVyQWN0aW9ucywgdHJ1ZSwgaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gVGhlbiB0aGUgZWRpdCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmICgoZHJhZnRSb290Py5FZGl0QWN0aW9uIHx8IHN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LkVkaXRBY3Rpb24pICYmIHVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGxldCB2aXNpYmxlID0gZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0cm9vdFVwZGF0ZUhpZGRlbixcblx0XHRcdHJvb3RDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0TW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKSxcblx0XHRcdHZpZXdMZXZlbCxcblx0XHRcdGNhcGFiaWxpdGllc1xuXHRcdCk7XG5cdFx0aWYgKGNvbGxhYm9yYXRpb25PblJvb3QpIHtcblx0XHRcdHZpc2libGUgPSBhbmQodmlzaWJsZSwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKTtcblx0XHR9XG5cdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuUHJpbWFyeSxcblx0XHRcdGtleTogXCJFZGl0QWN0aW9uXCIsXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbih2aXNpYmxlKSxcblx0XHRcdGVuYWJsZWQ6IGdldEVkaXRCdXR0b25FbmFibGVkKHJvb3RDb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGFibGVQcm9wZXJ0eVBhdGgsIHZpZXdMZXZlbClcblx0XHR9KTtcblx0fVxuXHQvLyBUaGVuIHRoZSBkZWxldGUgYWN0aW9uIGlmIHdlJ3JlIG5vdCBzdGF0aWNhbGx5IG5vdCBkZWxldGFibGVcblx0aWYgKFxuXHRcdChwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgJiYgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIpIHx8XG5cdFx0KGVudGl0eURlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlPy52YWx1ZU9mKCkgIT09IGZhbHNlICYmIHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKVxuXHQpIHtcblx0XHRjb25zdCBkZWxldGVIaWRkZW4gPSBNb2RlbEhlbHBlci5nZXREZWxldGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKTtcblx0XHRsZXQgdmlzaWJsZSA9IGdldERlbGV0ZUJ1dHRvblZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgZGVsZXRlSGlkZGVuKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk9uUm9vdCkge1xuXHRcdFx0dmlzaWJsZSA9IGFuZCh2aXNpYmxlLCBub3QoZXF1YWwoVUkuaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb24sIGZhbHNlKSkpO1xuXHRcdH1cblxuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLlNlY29uZGFyeSxcblx0XHRcdGtleTogXCJEZWxldGVBY3Rpb25cIixcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGUpLFxuXHRcdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlQnV0dG9uRW5hYmxlZChlbnRpdHlEZWxldGVSZXN0cmljdGlvbnM/LkRlbGV0YWJsZSwgaXNQYXJlbnREZWxldGFibGUsIGNvbnZlcnRlckNvbnRleHQpKSxcblx0XHRcdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ6IHBhcmVudEVudGl0eVNldERlbGV0YWJsZVxuXHRcdH0pO1xuXHR9XG5cblx0aWYgKGNvcHlEYXRhRmllbGQpIHtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0Li4uZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihjb3B5RGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuQ29weSxcblx0XHRcdHRleHQ6IGNvcHlEYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCkgPz8gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiQ19DT01NT05fQ09QWVwiKVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3QgaGVhZGVyRGF0YUZpZWxkRm9ySUJOQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9ySUJOQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgZmFsc2UpO1xuXG5cdGhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5ID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkpKTtcblx0XHRcdHJldHVybiAhSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5jbHVkZXMoY3JpdGljYWxpdHkhKTtcblx0XHR9KVxuXHRcdC5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlc0NvbnRleHQgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB0cnVlIGZvciBoZWFkZXIgSUJOIGFjdGlvbiA6ICR7ZGF0YUZpZWxkLkxhYmVsfWApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGRhdGFGaWVsZC5JbmxpbmU/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYElubGluZSBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHRydWUgZm9yIGhlYWRlciBJQk4gYWN0aW9uIDogJHtkYXRhRmllbGQuTGFiZWx9YCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvTmF2aWdhdGlvblBhcmFtcyA9IHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcoZGF0YUZpZWxkLk1hcHBpbmcpXG5cdFx0XHR9O1xuXG5cdFx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRidXR0b25UeXBlOiBCdXR0b25UeXBlLkdob3N0LFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRhbmQoXG5cdFx0XHRcdFx0XHRub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdFx0XHRcdG5vdChlcXVhbChwYXRoSW5Nb2RlbChcInNoZWxsTmF2aWdhdGlvbk5vdEF2YWlsYWJsZVwiLCBcImludGVybmFsXCIpLCB0cnVlKSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCksXG5cdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0ZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUpLCB0cnVlKSlcblx0XHRcdFx0XHRcdDogdHJ1ZSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRwcmVzczogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0Zm4oXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLCBbXG5cdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuQWN0aW9uKSxcblx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uUGFyYW1zXG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0KSxcblx0XHRcdFx0Y3VzdG9tRGF0YTogY29tcGlsZUV4cHJlc3Npb24oe1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRhY3Rpb246IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuQWN0aW9uKVxuXHRcdFx0XHR9KVxuXHRcdFx0fSBhcyBBbm5vdGF0aW9uQWN0aW9uKTtcblx0XHR9KTtcblx0Ly8gRmluYWxseSB0aGUgbm9uIGNyaXRpY2FsIERhdGFGaWVsZEZvckFjdGlvbnMgYW5kIERhdGFGaWVsZEZvckFjdGlvbkdyb3Vwc1xuXHRjb21wdXRlQWN0aW9uc0FuZEFjdGlvbkdyb3VwcyhoZWFkZXJBY3Rpb25zLCBmYWxzZSwgaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIGhlYWRlckFjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIaWRkZW5IZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgaGlkZGVuQWN0aW9ucyA9IChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSWRlbnRpZmljYXRpb24/LmZpbHRlcigoaWRlbnRpZmljYXRpb25EYXRhRmllbGQpID0+IHtcblx0XHRyZXR1cm4gaWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWU7XG5cdH0pIHx8IFtdKSBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdO1xuXHRyZXR1cm4gaGlkZGVuQWN0aW9ucy5tYXAoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRlZmF1bHQsXG5cdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKVxuXHRcdH07XG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnMoXG5cdHZpZXdMZXZlbDogbnVtYmVyLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IHN0aWNreVNlc3Npb25TdXBwb3J0ZWQgPSBNb2RlbEhlbHBlci5nZXRTdGlja3lTZXNzaW9uKGVudGl0eVNldCksIC8vZm9yIHN0aWNreSBhcHBcblx0XHRlbnRpdHlTZXREcmFmdFJvb3QgPVxuXHRcdFx0aXNFbnRpdHlTZXQoZW50aXR5U2V0KSAmJlxuXHRcdFx0KGVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8udGVybSA/PyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8udGVybSksXG5cdFx0Y29uZGl0aW9uU2F2ZSA9IEJvb2xlYW4oXG5cdFx0XHRlbnRpdHlTZXREcmFmdFJvb3QgPT09IENvbW1vbkFubm90YXRpb25UZXJtcy5EcmFmdFJvb3QgfHxcblx0XHRcdFx0KGNhcGFiaWxpdGllcz8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkIHx8XG5cdFx0XHRcdChzdGlja3lTZXNzaW9uU3VwcG9ydGVkICYmIHN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LlNhdmVBY3Rpb24pXG5cdFx0KSxcblx0XHRjb25kaXRpb25BcHBseSA9IHZpZXdMZXZlbCA+IDEgJiYgIShjYXBhYmlsaXRpZXM/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCxcblx0XHRjb25kaXRpb25DYW5jZWwgPSBCb29sZWFuKFxuXHRcdFx0ZW50aXR5U2V0RHJhZnRSb290ID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuRHJhZnRSb290IHx8XG5cdFx0XHRcdChjYXBhYmlsaXRpZXM/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCB8fFxuXHRcdFx0XHQoc3RpY2t5U2Vzc2lvblN1cHBvcnRlZCAmJiBzdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5EaXNjYXJkQWN0aW9uKVxuXHRcdCksXG5cdFx0Y29uZGl0aW9uQ3JlYXRlTmV4dCA9XG5cdFx0XHR2aWV3TGV2ZWwgPiAxICYmXG5cdFx0XHQoY2FwYWJpbGl0aWVzPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgJiZcblx0XHRcdCEoY2FwYWJpbGl0aWVzPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmhpZGVDcmVhdGVOZXh0O1xuXG5cdC8vIFJldHJpZXZlIGFsbCBkZXRlcm1pbmluZyBhY3Rpb25zXG5cdGNvbnN0IGZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnMgPSBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIHRydWUpO1xuXG5cdC8vIEZpcnN0IGFkZCB0aGUgXCJDcml0aWNhbFwiIERhdGFGaWVsZEZvckFjdGlvbnNcblx0Y29uc3QgZm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdID0gZm9vdGVyRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRcdC5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3QgY3JpdGljYWxpdHkgPSBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkPy5Dcml0aWNhbGl0eSkpO1xuXHRcdFx0cmV0dXJuIGNyaXRpY2FsaXR5ICYmIElNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluY2x1ZGVzKGNyaXRpY2FsaXR5KTtcblx0XHR9KVxuXHRcdC5tYXAoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHR9KTtcblx0aWYgKGNvbmRpdGlvbkNyZWF0ZU5leHQpIHtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLkNyZWF0ZU5leHQsIGtleTogXCJDcmVhdGVOZXh0QWN0aW9uXCIgfSk7XG5cdH1cblx0Ly8gVGhlbiB0aGUgc2F2ZSBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChlbnRpdHlTZXQ/LmVudGl0eVR5cGVOYW1lID09PSBlbnRpdHlUeXBlPy5mdWxseVF1YWxpZmllZE5hbWUgJiYgY29uZGl0aW9uU2F2ZSkge1xuXHRcdGZvb3RlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuUHJpbWFyeSwga2V5OiBcIlNhdmVBY3Rpb25cIiB9KTtcblx0fVxuXG5cdC8vIFRoZW4gdGhlIGFwcGx5IGFjdGlvbiBpZiBpdCBleGlzdHNcblx0aWYgKGNvbmRpdGlvbkFwcGx5KSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHsgdHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0QXBwbHksIGtleTogXCJBcHBseUFjdGlvblwiIH0pO1xuXHR9XG5cdC8vIFRoZW4gdGhlIG5vbiBjcml0aWNhbCBEYXRhRmllbGRGb3JBY3Rpb25zXG5cdGZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5ID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkpKTtcblx0XHRcdHJldHVybiBjcml0aWNhbGl0eSAmJiAhSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5jbHVkZXMoY3JpdGljYWxpdHkpO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSk7XG5cdFx0fSk7XG5cblx0Ly8gVGhlbiB0aGUgY2FuY2VsIGFjdGlvbiBpZiBpdCBleGlzdHNcblx0aWYgKGNvbmRpdGlvbkNhbmNlbCkge1xuXHRcdGZvb3RlckFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLlNlY29uZGFyeSxcblx0XHRcdGtleTogXCJDYW5jZWxBY3Rpb25cIixcblx0XHRcdHBvc2l0aW9uOiB7IHBsYWNlbWVudDogUGxhY2VtZW50LkVuZCB9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZvb3RlckFjdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQW5ub3RhdGlvbkFjdGlvbiB7XG5cdGxldCBpc1Zpc2libGVFeHAgPSBpc1Zpc2libGUoZGF0YUZpZWxkKTtcblx0Y29uc3QgY29sbGFib3JhdGlvbk9uUm9vdCA9XG5cdFx0TW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRGcm9tQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZXJDb250ZXh0KSAmJlxuXHRcdE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKTtcblx0aWYgKGNvbGxhYm9yYXRpb25PblJvb3QpIHtcblx0XHRpc1Zpc2libGVFeHAgPSBhbmQoaXNWaXNpYmxlRXhwLCBub3QoZXF1YWwoVUkuaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb24sIGZhbHNlKSkpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGVFeHApLFxuXHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdGlzQUlPcGVyYXRpb246IGlzQWN0aW9uQUlPcGVyYXRpb24oZGF0YUZpZWxkKSA9PT0gdHJ1ZSB8fCB1bmRlZmluZWRcblx0fTtcbn1cblxuLyoqXG4gKiBBZGRzIGFjdGlvbnMgYW5kIGFjdGlvbiBncm91cHMgdG8gdGhlIGhlYWRlckFjdGlvbnMgYXJyYXksIHByaW9yaXRpemluZyB0aGVtIGFjY29yZGluZyB0byB0aGVpciBjcml0aWNhbGl0eS5cbiAqIEBwYXJhbSBoZWFkZXJBY3Rpb25zIEFycmF5IHdpdGggYWxsIHRoZSBjdXJyZW50IGhlYWRlciBhY3Rpb25zIGluIGl0XG4gKiBAcGFyYW0gcHJpb3JpdGl6ZUNyaXRpY2FsaXR5IEZsYWcgdG8gZGV0ZXJtaW5lIHRoZSBwcmlvcml0eSBvZiB0aGUgY3JpdGljYWxpdHkgYWN0aW9uIG9yIGFjdGlvbkdyb3VwcyBpbnNpZGUgaGVhZGVyQWN0aW9uc1xuICogQHBhcmFtIGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnNPckdyb3VwcyBBbGwgYWN0aW9ucyBhbmQgYWN0aW9uIGdyb3VwcyBmcm9tIHRoZSBpZGVudGlmaWNhdGlvbiBhbm5vdGF0aW9uIHdpdGggQ29weUFjdGlvbiBmaWx0ZXJlZCBvdXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICovXG5mdW5jdGlvbiBjb21wdXRlQWN0aW9uc0FuZEFjdGlvbkdyb3Vwcyhcblx0aGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdLFxuXHRwcmlvcml0aXplQ3JpdGljYWxpdHk6IGJvb2xlYW4sXG5cdGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnNPckdyb3VwczogKERhdGFGaWVsZEZvckFjdGlvblR5cGVzIHwgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcylbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiB2b2lkIHtcblx0aGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5KSk7XG5cdFx0XHRyZXR1cm4gcHJpb3JpdGl6ZUNyaXRpY2FsaXR5ID8gSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5jbHVkZXMoY3JpdGljYWxpdHkhKSA6ICFJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmNsdWRlcyhjcml0aWNhbGl0eSEpO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdGhlYWRlckFjdGlvbnMucHVzaChnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCkpO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwKSB7XG5cdFx0XHRcdGxldCBpc1Zpc2libGVFeHAgPSBub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKTtcblx0XHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk9uUm9vdCA9XG5cdFx0XHRcdFx0TW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRGcm9tQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZXJDb250ZXh0KSAmJlxuXHRcdFx0XHRcdE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKTtcblx0XHRcdFx0aWYgKGNvbGxhYm9yYXRpb25PblJvb3QpIHtcblx0XHRcdFx0XHRpc1Zpc2libGVFeHAgPSBhbmQoaXNWaXNpYmxlRXhwLCBub3QoZXF1YWwoVUkuaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb24sIGZhbHNlKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGhlYWRlckFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5NZW51LFxuXHRcdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0aWQ6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGVFeHApLFxuXHRcdFx0XHRcdG1lbnU6IGRhdGFGaWVsZC5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PlxuXHRcdFx0XHRcdFx0Z2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihhY3Rpb24gYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRpc0FJT3BlcmF0aW9uOiBpc01lbnVBSU9wZXJhdGlvbihkYXRhRmllbGQuQWN0aW9ucykgPT09IHRydWUgfHwgdW5kZWZpbmVkXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBZ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQSxvQ0FBb0NBLENBQUNDLFVBQXNCLEVBQUVDLG1CQUE0QixFQUE2QjtJQUNySSxPQUFRRCxVQUFVLENBQUNFLFdBQVcsRUFBRUMsRUFBRSxFQUFFQyxjQUFjLEVBQUVDLE1BQU0sQ0FBRUMsdUJBQXVCLElBQUs7TUFDdkYsT0FBT0EsdUJBQXVCLENBQUNDLEtBQUssb0RBQXlDLElBQzVFQyxPQUFPLENBQUNGLHVCQUF1QixDQUFDRyxXQUFXLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBS1QsbUJBQW1CLEtBQzlFSyx1QkFBdUIsQ0FBQ0ssWUFBWSxFQUFFQyxPQUFPLEVBQUVGLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUNqRUosdUJBQXVCLEVBQUVLLFlBQVksRUFBRVQsV0FBVyxFQUFFVyxJQUFJLEVBQUVDLGtCQUFrQixFQUFFSixPQUFPLENBQUMsQ0FB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
465
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMiLCJlbnRpdHlUeXBlIiwiaXNEZXRlcm1pbmluZ0FjdGlvbiIsImFubm90YXRpb25zIiwiVUkiLCJJZGVudGlmaWNhdGlvbiIsImZpbHRlciIsImlkZW50aWZpY2F0aW9uRGF0YUZpZWxkIiwiJFR5cGUiLCJCb29sZWFuIiwiRGV0ZXJtaW5pbmciLCJ2YWx1ZU9mIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJfZXhwb3J0cyIsImdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzIiwiZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMiLCJnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5IiwiY29udmVydGVyQ29udGV4dCIsImRlbGV0ZUhpZGRlbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2UHJvcCIsIm5hbWUiLCJkZWxldGVIaWRkZW5FeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJ2aWV3TGV2ZWwiLCJnZXRWaWV3TGV2ZWwiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJJc0VkaXRhYmxlIiwibm90IiwiaWZFbHNlIiwidW5kZWZpbmVkIiwiYW5kIiwiZXF1YWwiLCJnZXREZWxldGVCdXR0b25FbmFibGVkIiwiaXNEZWxldGFibGUiLCJpc1BhcmVudERlbGV0YWJsZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzRHJhZnRSb290IiwiTW9kZWxIZWxwZXIiLCJyZXQiLCJjb25zdGFudCIsInBhdGhJbk1vZGVsIiwiZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkiLCJyb290VXBkYXRlSGlkZGVuIiwicm9vdENvbnZlcnRlckNvbnRleHQiLCJ1cGRhdGVIaWRkZW4iLCJjYXBhYmlsaXRpZXMiLCJyb290RW50aXR5U2V0IiwiaXNGQ0xFbmFibGVkIiwiaXNGY2xFbmFibGVkIiwiaXNEcmFmdEVuYWJsZWQiLCJyb290VXBkYXRlSGlkZGVuRXhwcmVzc2lvbiIsImdldEhpZGRlbkV4cHJlc3Npb24iLCJoaWRkZW5EcmFmdCIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsImlzRHJhZnROb2RlIiwidXBkYXRlSGlkZGVuRXhwcmVzc2lvbiIsIm5vdEVkaXRhYmxlRXhwcmVzc2lvbiIsInJlc3VsdGFudEV4cHJlc3Npb24iLCJEcmFmdCIsIkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciIsImdldEVkaXRCdXR0b25FbmFibGVkRXhwcmVzc2lvbiIsInVwZGF0ZVJlc3RyaWN0aW9ucyIsImlzU3RpY2t5IiwiZWRpdEFjdGlvbk5hbWUiLCJpc0VudGl0eVNldCIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsIkVkaXRBY3Rpb24iLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJlZGl0QWN0aW9uIiwicmVzb2x2ZUFic29sdXRlUGF0aCIsInRhcmdldCIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbiIsImdldEVkaXRCdXR0b25FbmFibGVkIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsInNDb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwicm9vdEVudGl0eVNldFBhdGgiLCJnZXRSb290RW50aXR5U2V0UGF0aCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRFbnRpdHlUeXBlIiwicm9vdEVudGl0eVR5cGUiLCJzdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0U3RpY2t5U2Vzc2lvbiIsImRyYWZ0Um9vdCIsImdldERyYWZ0Um9vdCIsImNvbGxhYm9yYXRpb25PblJvb3QiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0IiwiZHJhZnROb2RlIiwiZ2V0RHJhZnROb2RlIiwiZW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zIiwiQ2FwYWJpbGl0aWVzIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiaXNVcGRhdGVIaWRkZW4iLCJpc1BhdGhEZWxldGFibGUiLCJwYXRoVmlzaXRvciIsIm5hdmlnYXRpb25QYXRocyIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsImlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyIsImNvcHlEYXRhRmllbGQiLCJnZXRDb3B5QWN0aW9uIiwiZGF0YUZpZWxkIiwiZGF0YUZpZWxkSXNDb3B5QWN0aW9uIiwiaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucyIsImhlYWRlckFjdGlvbnMiLCJwdXNoIiwidHlwZSIsIkFjdGlvblR5cGUiLCJEcmFmdEFjdGlvbnMiLCJrZXkiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJDb2xsYWJvcmF0aW9uQXZhdGFycyIsImNvbXB1dGVBY3Rpb25zQW5kQWN0aW9uR3JvdXBzIiwidmlzaWJsZSIsImhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uIiwiUHJpbWFyeSIsIkRlbGV0YWJsZSIsImdldERlbGV0ZUhpZGRlbiIsIlNlY29uZGFyeSIsInBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQiLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiQ29weSIsInRleHQiLCJMYWJlbCIsInRvU3RyaW5nIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsImhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnMiLCJjcml0aWNhbGl0eSIsIkNyaXRpY2FsaXR5IiwiaW5jbHVkZXMiLCJmb3JFYWNoIiwiUmVxdWlyZXNDb250ZXh0IiwiRXJyb3IiLCJJbmxpbmUiLCJvTmF2aWdhdGlvblBhcmFtcyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIk1hcHBpbmciLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJidXR0b25UeXBlIiwiQnV0dG9uVHlwZSIsIkdob3N0IiwiSGlkZGVuIiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzTmF2aWdhYmxlIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwiZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyIsImhpZGRlbkFjdGlvbnMiLCJEZWZhdWx0IiwiZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnMiLCJlbnRpdHlTZXREcmFmdFJvb3QiLCJ0ZXJtIiwiY29uZGl0aW9uU2F2ZSIsIlNhdmVBY3Rpb24iLCJjb25kaXRpb25BcHBseSIsImNvbmRpdGlvbkNhbmNlbCIsIkRpc2NhcmRBY3Rpb24iLCJjb25kaXRpb25DcmVhdGVOZXh0IiwiaGlkZUNyZWF0ZU5leHQiLCJmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zIiwiZm9vdGVyQWN0aW9ucyIsImlmRkNMRW5hYmxlZCIsIkNyZWF0ZU5leHQiLCJnZXRDcmVhdGVOZXh0QnV0dG9uVmlzaWJpbGl0eSIsImVudGl0eVR5cGVOYW1lIiwiRGVmYXVsdEFwcGx5IiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJFbmQiLCJpc1Zpc2libGVFeHAiLCJpc1Zpc2libGUiLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiIsImlzQUlPcGVyYXRpb24iLCJpc0FjdGlvbkFJT3BlcmF0aW9uIiwicHJpb3JpdGl6ZUNyaXRpY2FsaXR5IiwiaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzIiwiTWVudSIsImlkIiwibWVudSIsIkFjdGlvbnMiLCJpc01lbnVBSU9wZXJhdGlvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSGVhZGVyQW5kRm9vdGVyQWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uLCBFbnRpdHlUeXBlLCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBY3Rpb25Hcm91cFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXMsXG5cdERlbGV0ZUhpZGRlbixcblx0VXBkYXRlSGlkZGVuXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGZuLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0bm90LFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIERhdGFGaWVsZEZvckFjdGlvbk9yQWN0aW9uR3JvdXAgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRCdXR0b25UeXBlLFxuXHRkYXRhRmllbGRJc0NvcHlBY3Rpb24sXG5cdGdldENvcHlBY3Rpb24sXG5cdGdldENyZWF0ZU5leHRCdXR0b25WaXNpYmlsaXR5LFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbixcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25FeHByZXNzaW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdGlzQWN0aW9uQUlPcGVyYXRpb24sXG5cdGlzTWVudUFJT3BlcmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGlzUGF0aERlbGV0YWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHsgRHJhZnQsIFVJLCBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9ucyBmcm9tIHRoZSBJZGVudGlmaWNhdGlvbiBhbm5vdGF0aW9uXG4gKiBUaGV5IG11c3QgYmVcbiAqIC0gRWl0aGVyIGxpbmtlZCB0byBhbiB1bmJvdW5kIGFjdGlvbiBvciB0byBhbiBhY3Rpb24gd2hpY2ggaGFzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSB0aGF0IGlzIG5vdCBzZXQgdG8gZmFsc2Ugc3RhdGljYWxseS5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0gaXNEZXRlcm1pbmluZ0FjdGlvbiBUaGUgZmxhZyB3aGljaCBkZW5vdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gaXMgYSBkZXRlcm1pbmluZyBhY3Rpb25cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIERhdGFGaWVsZEZvckFjdGlvbiByZXNwZWN0aW5nIHRoZSBpbnB1dCBwYXJhbWV0ZXIgJ2lzRGV0ZXJtaW5pbmdBY3Rpb24nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgaXNEZXRlcm1pbmluZ0FjdGlvbjogYm9vbGVhbik6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzW10ge1xuXHRyZXR1cm4gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZCkgPT4ge1xuXHRcdHJldHVybiBpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRCb29sZWFuKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkpID09PSBpc0RldGVybWluaW5nQWN0aW9uICYmXG5cdFx0XHQoaWRlbnRpZmljYXRpb25EYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kPy52YWx1ZU9mKCkgIT09IHRydWUgfHxcblx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSlcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0fSkgfHwgW10pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW107XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCB0aGUgZGF0YSBmaWVsZCBmb3IgYWN0aW9ucyBmb3IgdGhlIGlkZW50aWZpY2F0aW9uIGFubm90YXRpb25cbiAqIFRoZXkgbXVzdCBiZVxuICogLSBFaXRoZXIgbGlua2VkIHRvIGFuIFVuYm91bmQgYWN0aW9uIG9yIHRvIGFuIGFjdGlvbiB3aGljaCBoYXMgYW4gT3BlcmF0aW9uQXZhaWxhYmxlIHRoYXQgaXMgbm90IHNldCB0byBmYWxzZSBzdGF0aWNhbGx5LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBpc0RldGVybWluaW5nQWN0aW9uIFRoZSBmbGFnIHdoaWNoIGRlbm90ZXMgd2hldGhlciBvciBub3QgdGhlIGFjdGlvbiBpcyBhIGRldGVybWluaW5nIGFjdGlvblxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgRGF0YUZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgaW5wdXQgcGFyYW1ldGVyICdpc0RldGVybWluaW5nQWN0aW9uJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zT3JHcm91cHMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGlzRGV0ZXJtaW5pbmdBY3Rpb246IGJvb2xlYW5cbik6IERhdGFGaWVsZEZvckFjdGlvbk9yQWN0aW9uR3JvdXBbXSB7XG5cdHJldHVybiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uPy5maWx0ZXIoKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuIChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRCb29sZWFuKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkpID09PSBpc0RldGVybWluaW5nQWN0aW9uICYmXG5cdFx0XHQoaWRlbnRpZmljYXRpb25EYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kPy52YWx1ZU9mKCkgIT09IHRydWUgfHxcblx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSkpIHx8XG5cdFx0XHRpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0fSkgfHwgW10pIGFzIERhdGFGaWVsZEZvckFjdGlvbk9yQWN0aW9uR3JvdXBbXTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbGwgdGhlIElCTiBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eXR5cGVcbiAqIEBwYXJhbSBpc0RldGVybWluaW5nQWN0aW9uIFdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gc2hvdWxkIGJlIGRldGVybWluaW5nXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkYXRhIGZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgaXNEZXRlcm1pbmluZ0FjdGlvbiBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRpc0RldGVybWluaW5nQWN0aW9uOiBib29sZWFuXG4pOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25UeXBlc1tdIHtcblx0cmV0dXJuIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSWRlbnRpZmljYXRpb24/LmZpbHRlcigoaWRlbnRpZmljYXRpb25EYXRhRmllbGQpID0+IHtcblx0XHRyZXR1cm4gaWRlbnRpZmljYXRpb25EYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0Qm9vbGVhbihpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpKSA9PT0gaXNEZXRlcm1pbmluZ0FjdGlvblxuXHRcdFx0PyB0cnVlXG5cdFx0XHQ6IGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXTtcbn1cblxuZXhwb3J0IGNvbnN0IElNUE9SVEFOVF9DUklUSUNBTElUSUVTID0gW1xuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9WZXJ5UG9zaXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvUG9zaXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIixcblx0XCJVSS5Dcml0aWNhbGl0eVR5cGUvVmVyeU5lZ2F0aXZlXCJcbl07XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBEZWxldGUgYnV0dG9uIG9uIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGRlbGV0ZUhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIFVJLkRlbGV0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIHRoZSBlbnRpdHkgc2V0IC8gdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIERlbGV0ZSBidXR0b24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRlbGV0ZUhpZGRlbjogRGVsZXRlSGlkZGVuIHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUpLFxuXHRcdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0XHQvLyBGb3IgZS5nLiAvY29tLnNhcC5uYW1lc3BhY2UuRW50aXR5Q29udGFpbmVyL1NpbmdsZXRvbi9Qcm9wZXJ0eSB0byAvU2luZ2xldG9uL1Byb3BlcnR5XG5cdFx0ZGVsZXRlSGlkZGVuRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkZWxldGVIaWRkZW4sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIGZhbHNlLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBbXSlcblx0XHQpLCAvLyBkZWZhdWx0IHRvIGZhbHNlXG5cdFx0bWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSxcblx0XHR2aWV3TGV2ZWwgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0xldmVsKCksXG5cdFx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlXG5cdFx0Ly8gSW4gT1AgXHRcdC0tPiAgd2hlbiBub3QgaW4gZWRpdCBtb2RlXG5cdFx0Ly8gSW4gc3ViLU9QIFx0LS0+ICB3aGVuIGluIGVkaXQgbW9kZVxuXHRcdGVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gdmlld0xldmVsID4gMSA/IFVJLklzRWRpdGFibGUgOiBub3QoVUkuSXNFZGl0YWJsZSk7XG5cblx0Ly8gSWYgVUkuRGVsZXRlSGlkZGVuIGFubm90YXRpb24gb24gZW50aXR5IHNldCBvciB0eXBlIGlzIGVpdGhlciBub3QgZGVmaW5lZCBvciBleHBsaWNpdGx5IHNldCB0byBmYWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGVkaXRhYmxlRXhwcmVzc2lvbi5cblx0Ly8gZWxzZSxcblx0Ly8gRGVsZXRlIGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGJvdGggYW5ub3RhdGlvbiBwYXRoIGFuZCBlZGl0YWJsZUV4cHJlc3Npb24uXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0ZGVsZXRlSGlkZGVuID09PSB1bmRlZmluZWQgfHwgZGVsZXRlSGlkZGVuLnZhbHVlT2YoKSA9PT0gZmFsc2UsXG5cdFx0ZWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGVxdWFsKGRlbGV0ZUhpZGRlbkV4cHJlc3Npb24sIGZhbHNlKSlcblx0KTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gaXNEZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkXG4gKiBAcGFyYW0gaXNQYXJlbnREZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkIG9uIHRoZSBwYXJlbnQgZW50aXR5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlQnV0dG9uRW5hYmxlZChcblx0aXNEZWxldGFibGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+IHwgdW5kZWZpbmVkLFxuXHRpc1BhcmVudERlbGV0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0aXNEcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChlbnRpdHlTZXQpO1xuXG5cdGxldCByZXQgPSBpZkVsc2UoXG5cdFx0aXNQYXJlbnREZWxldGFibGUgIT09IHVuZGVmaW5lZCxcblx0XHRpc1BhcmVudERlbGV0YWJsZSxcblx0XHRpZkVsc2UoaXNEZWxldGFibGUgIT09IHVuZGVmaW5lZCwgZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGlzRGVsZXRhYmxlKSwgdHJ1ZSksIGNvbnN0YW50KHRydWUpKVxuXHQpO1xuXG5cdC8vIGRlbGV0ZSBzaG91bGQgYmUgZGlzYWJsZWQgZm9yIExvY2tlZCBvYmplY3RzXG5cdHJldCA9IGlzRHJhZnRSb290ID8gYW5kKHJldCwgbm90KHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpKSkgOiByZXQ7XG5cblx0cmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAndmlzaWJsZScgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIEVkaXQgYnV0dG9uIG9uIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHJvb3RVcGRhdGVIaWRkZW4gVGhlIHZhbHVlIG9mIHRoZSBVSS5VcGRhdGVIaWRkZW4gYW5ub3RhdGlvbiBvbiB0aGUgZW50aXR5IHNldCAvIHR5cGUuXG4gKiBAcGFyYW0gcm9vdENvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB1cGRhdGVIaWRkZW5cbiAqIEBwYXJhbSB2aWV3TGV2ZWxcbiAqIEBwYXJhbSBjYXBhYmlsaXRpZXNcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cm9vdFVwZGF0ZUhpZGRlbjogVXBkYXRlSGlkZGVuIHwgdW5kZWZpbmVkLFxuXHRyb290Q29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR1cGRhdGVIaWRkZW4/OiBVcGRhdGVIaWRkZW4gfCB1bmRlZmluZWQsXG5cdHZpZXdMZXZlbD86IG51bWJlciB8IHVuZGVmaW5lZCxcblx0Y2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHJvb3RFbnRpdHlTZXQgPSByb290Q29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCksXG5cdFx0ZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRpc0ZDTEVuYWJsZWQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRmNsRW5hYmxlZCgpO1xuXHRsZXQgaXNEcmFmdEVuYWJsZWQ7XG5cdGNvbnN0IHJvb3RVcGRhdGVIaWRkZW5FeHByZXNzaW9uID0gZ2V0SGlkZGVuRXhwcmVzc2lvbihyb290Q29udmVydGVyQ29udGV4dCwgcm9vdFVwZGF0ZUhpZGRlbik7XG5cdGNvbnN0IGhpZGRlbkRyYWZ0ID0gKGNhcGFiaWxpdGllcz8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkO1xuXHRpZiAodmlld0xldmVsICYmIHZpZXdMZXZlbCA+IDEpIHtcblx0XHQvLyBpZiB2aWV3bGV2ZWwgPiAxIGNoZWNrIGlmIG5vZGUgaXMgZHJhZnQgZW5hYmxlZFxuXHRcdGlzRHJhZnRFbmFibGVkID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoZW50aXR5U2V0KTtcblx0fSBlbHNlIHtcblx0XHRpc0RyYWZ0RW5hYmxlZCA9IE1vZGVsSGVscGVyLmlzRHJhZnRSb290KHJvb3RFbnRpdHlTZXQpO1xuXHR9XG5cdGNvbnN0IHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24gPSBnZXRIaWRkZW5FeHByZXNzaW9uKHJvb3RDb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGVIaWRkZW4pO1xuXG5cdGNvbnN0IG5vdEVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gbm90KFVJLklzRWRpdGFibGUpO1xuXG5cdC8vIElmIFVJLlVwZGF0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIGVudGl0eSBzZXQgb3IgdHlwZSBpcyBlaXRoZXIgbm90IGRlZmluZWQgb3IgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsXG5cdC8vIEVkaXQgYnV0dG9uIGlzIHZpc2libGUgaW4gZGlzcGxheSBtb2RlLlxuXHQvLyBlbHNlLFxuXHQvLyBFZGl0IGJ1dHRvbiBpcyB2aXNpYmxlIGJhc2VkIG9uIGJvdGggYW5ub3RhdGlvbiBwYXRoIGFuZCBpbiBkaXNwbGF5IG1vZGUuXG5cdGNvbnN0IHJlc3VsdGFudEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGlmRWxzZShcblx0XHQodmlld0xldmVsIGFzIG51bWJlcikgPiAxIHx8IGhpZGRlbkRyYWZ0LFxuXHRcdGlmRWxzZShcblx0XHRcdHVwZGF0ZUhpZGRlbiA9PT0gdW5kZWZpbmVkIHx8IHVwZGF0ZUhpZGRlbi52YWx1ZU9mKCkgPT09IGZhbHNlLFxuXHRcdFx0YW5kKFxuXHRcdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwicm9vdEVkaXRWaXNpYmxlXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRpZkVsc2UoaXNGQ0xFbmFibGVkLCBlcXVhbChwYXRoSW5Nb2RlbChcIi9zaG93RWRpdEJ1dHRvblwiLCBcImZjbGhlbHBlclwiKSwgdHJ1ZSksIHRydWUpXG5cdFx0XHQpLFxuXHRcdFx0YW5kKFxuXHRcdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdGVxdWFsKHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24sIGZhbHNlKSxcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJyb290RWRpdFZpc2libGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGlmRWxzZShpc0ZDTEVuYWJsZWQsIGVxdWFsKHBhdGhJbk1vZGVsKFwiL3Nob3dFZGl0QnV0dG9uXCIsIFwiZmNsaGVscGVyXCIpLCB0cnVlKSwgdHJ1ZSlcblx0XHRcdClcblx0XHQpLFxuXHRcdGlmRWxzZShcblx0XHRcdHJvb3RVcGRhdGVIaWRkZW4gPT09IHVuZGVmaW5lZCB8fCByb290VXBkYXRlSGlkZGVuLnZhbHVlT2YoKSA9PT0gZmFsc2UsXG5cdFx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRhbmQobm90RWRpdGFibGVFeHByZXNzaW9uLCBlcXVhbChyb290VXBkYXRlSGlkZGVuRXhwcmVzc2lvbiwgZmFsc2UpKVxuXHRcdClcblx0KTtcblx0cmV0dXJuIGlmRWxzZShpc0RyYWZ0RW5hYmxlZCwgYW5kKHJlc3VsdGFudEV4cHJlc3Npb24sIERyYWZ0Lkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciksIHJlc3VsdGFudEV4cHJlc3Npb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuRXhwcmVzc2lvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR1cGRhdGVIaWRkZW46IFVwZGF0ZUhpZGRlbiB8IHVuZGVmaW5lZFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lKSxcblx0XHQvLyBTZXQgYWJzb2x1dGUgYmluZGluZyBwYXRoIGZvciBTaW5nbGV0b24gcmVmZXJlbmNlcywgb3RoZXJ3aXNlIHRoZSBjb25maWd1cmVkIGFubm90YXRpb24gcGF0aCBpdHNlbGYuXG5cdFx0Ly8gRm9yIGUuZy4gL2NvbS5zYXAubmFtZXNwYWNlLkVudGl0eUNvbnRhaW5lci9TaW5nbGV0b24vUHJvcGVydHkgdG8gL1NpbmdsZXRvbi9Qcm9wZXJ0eVxuXHRcdHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odXBkYXRlSGlkZGVuLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBmYWxzZSwgKHBhdGg6IHN0cmluZykgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0XHQpO1xuXHRyZXR1cm4gdXBkYXRlSGlkZGVuRXhwcmVzc2lvbjtcbn1cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB1cGRhdGVSZXN0cmljdGlvbnNcbiAqIEBwYXJhbSB2aWV3TGV2ZWxcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvbkVuYWJsZWRFeHByZXNzaW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHVwZGF0ZVJlc3RyaWN0aW9ucz86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHR2aWV3TGV2ZWw/OiBudW1iZXIgfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0aXNEcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChlbnRpdHlTZXQpLFxuXHRcdGlzU3RpY2t5ID0gTW9kZWxIZWxwZXIuaXNTdGlja3koZW50aXR5U2V0KTtcblx0bGV0IGVkaXRBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChpc0RyYWZ0Um9vdCAmJiBpc0VudGl0eVNldChlbnRpdHlTZXQpKSB7XG5cdFx0ZWRpdEFjdGlvbk5hbWUgPSBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/LkVkaXRBY3Rpb24gYXMgc3RyaW5nO1xuXHR9IGVsc2UgaWYgKGlzU3RpY2t5ICYmIGlzRW50aXR5U2V0KGVudGl0eVNldCkpIHtcblx0XHRlZGl0QWN0aW9uTmFtZSA9IGVudGl0eVNldC5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5FZGl0QWN0aW9uIGFzIHN0cmluZztcblx0fVxuXHRpZiAoZWRpdEFjdGlvbk5hbWUpIHtcblx0XHRjb25zdCBlZGl0QWN0aW9uQW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoZWRpdEFjdGlvbk5hbWUpO1xuXHRcdGNvbnN0IGVkaXRBY3Rpb24gPSBjb252ZXJ0ZXJDb250ZXh0LnJlc29sdmVBYnNvbHV0ZVBhdGgoZWRpdEFjdGlvbkFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgQWN0aW9uIHwgbnVsbDtcblx0XHRpZiAoZWRpdEFjdGlvbj8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gV2UgZGlzYWJsZWQgYWN0aW9uIGFkdmVydGlzZW1lbnQgYnV0IGtlcHQgaXQgaW4gdGhlIGNvZGUgZm9yIHRoZSB0aW1lIGJlaW5nXG5cdFx0XHQvL3JldHVybiBcIns9ICR7I1wiICsgZWRpdEFjdGlvbk5hbWUgKyBcIn0gPyB0cnVlIDogZmFsc2UgfVwiO1xuXHRcdH0gZWxzZSBpZiAoKHZpZXdMZXZlbCBhcyBudW1iZXIpID4gMSkge1xuXHRcdFx0Ly8gRWRpdCBidXR0b24gaXMgZW5hYmxlZCBiYXNlZCBvbiB0aGUgdXBkYXRlIHJlc3RyaWN0aW9ucyBvZiB0aGUgc3ViLU9QXG5cdFx0XHRpZiAodXBkYXRlUmVzdHJpY3Rpb25zICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0XHRlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odXBkYXRlUmVzdHJpY3Rpb25zKSwgdHJ1ZSksXG5cdFx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJyb290RWRpdEVuYWJsZWRcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBlcXVhbChwYXRoSW5Nb2RlbChcInJvb3RFZGl0RW5hYmxlZFwiLCBcImludGVybmFsXCIpLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCBlZGl0QWN0aW9uID8/IHVuZGVmaW5lZCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb25zdGFudCh0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRCdXR0b25FbmFibGVkKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHVwZGF0ZVJlc3RyaWN0aW9ucz86IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHR2aWV3TGV2ZWw/OiBudW1iZXIgfCB1bmRlZmluZWRcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEVkaXRCdXR0b25FbmFibGVkRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGVSZXN0cmljdGlvbnMsIHZpZXdMZXZlbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3Qgcm9vdEVudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRSb290RW50aXR5U2V0UGF0aChzQ29udGV4dFBhdGgpO1xuXHRjb25zdCByb290Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KFwiL1wiICsgcm9vdEVudGl0eVNldFBhdGgpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRyb290RW50aXR5U2V0ID0gcm9vdENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0cm9vdEVudGl0eVR5cGUgPSByb290Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0c3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmdldFN0aWNreVNlc3Npb24ocm9vdEVudGl0eVNldCksIC8vZm9yIHN0aWNreSBhcHBcblx0XHRkcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3Qocm9vdEVudGl0eVNldCksIC8vZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCxcblx0XHRjb2xsYWJvcmF0aW9uT25Sb290ID0gTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRGcm9tQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZXJDb250ZXh0KSAmJiBkcmFmdFJvb3QsXG5cdFx0ZHJhZnROb2RlID0gTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHJvb3RFbnRpdHlTZXQpLFxuXHRcdGVudGl0eURlbGV0ZVJlc3RyaWN0aW9ucyA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRGVsZXRlUmVzdHJpY3Rpb25zLFxuXHRcdHJvb3RVcGRhdGVIaWRkZW4gPSBNb2RlbEhlbHBlci5pc1VwZGF0ZUhpZGRlbihyb290RW50aXR5U2V0LCByb290RW50aXR5VHlwZSksXG5cdFx0dXBkYXRlSGlkZGVuID0gcm9vdEVudGl0eVNldCAmJiBpc0VudGl0eVNldChyb290RW50aXR5U2V0KSAmJiByb290VXBkYXRlSGlkZGVuPy52YWx1ZU9mKCksXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIG5hdmlnYXRpb25QYXRocylcblx0XHR9KSxcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVFeHByZXNzaW9uKGlzUGFyZW50RGVsZXRhYmxlKSA6IGlzUGFyZW50RGVsZXRhYmxlLFxuXHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9uc09yR3JvdXBzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBmYWxzZSk7XG5cblx0Y29uc3QgY29weURhdGFGaWVsZCA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRWaWV3TGV2ZWwoKSA9PT0gMVxuXHRcdFx0PyBnZXRDb3B5QWN0aW9uKFxuXHRcdFx0XHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucy5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSBhcyBEYXRhRmllbGRGb3JBY3Rpb25bXVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zID0gaWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zLmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuICFkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzKTtcblx0fSk7XG5cblx0Ly8gSW5pdGlhbGl6ZSBhY3Rpb25zIGFuZCBzdGFydCB3aXRoIGRyYWZ0IGFjdGlvbnMgaWYgYXZhaWxhYmxlIHNpbmNlIHRoZXkgc2hvdWxkIGFwcGVhciBpbiB0aGUgZmlyc3Rcblx0Ly8gbGVmdG1vc3QgcG9zaXRpb24gaW4gdGhlIGFjdGlvbnMgYXJlYSBvZiB0aGUgT1AgaGVhZGVyXG5cdC8vIFRoaXMgaXMgbW9yZSBsaWtlIGEgcGxhY2Vob2xkZXIgdGhhbiBhIHNpbmdsZSBhY3Rpb24sIHNpbmNlIHRoaXMgY29udHJvbHMgbm90IG9ubHkgdGhlIHRlbXBsYXRpbmcgb2Zcblx0Ly8gdGhlIGJ1dHRvbiBmb3Igc3dpdGNoaW5nIGJldHdlZW4gZHJhZnQgYW5kIGFjdGl2ZSBkb2N1bWVudCB2ZXJzaW9ucyBidXQgYWxzbyB0aGUgY29udHJvbHMgZm9yXG5cdC8vIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGZyYWdtZW50LlxuXHRjb25zdCBoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0aWYgKGlzRW50aXR5U2V0KGVudGl0eVNldCkgJiYgZHJhZnRSb290Py5FZGl0QWN0aW9uICYmIHVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuRHJhZnRBY3Rpb25zLCBrZXk6IFwiRHJhZnRBY3Rpb25zXCIgfSk7XG5cdH1cblxuXHRjb25zdCB2aWV3TGV2ZWwgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFZpZXdMZXZlbCgpO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSB2aWV3TGV2ZWwgPiAxID8gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlIDogdW5kZWZpbmVkO1xuXHRpZiAoZHJhZnRSb290IHx8IGRyYWZ0Tm9kZSkge1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuQ29sbGFib3JhdGlvbkF2YXRhcnMsIGtleTogXCJDb2xsYWJvcmF0aW9uQXZhdGFyc1wiIH0pO1xuXHR9XG5cdC8vIFRoZW4gYWRkIHRoZSBcIkNyaXRpY2FsXCIgRGF0YUZpZWxkRm9yQWN0aW9ucyBhbmQgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBzXG5cdC8vIFByaW9yaXRpemVzIGFjdGlvbnMgYW5kIGFjdGlvbiBncm91cHMgdGhhdCBoYXZlIHRoZSBDcml0aWNhbGl0eSBhbm5vdGF0aW9uLCBwbGFjaW5nIHRoZW0gYmVmb3JlIHRob3NlIHdpdGhvdXQgdGhlIGFubm90YXRpb25cblx0Y29tcHV0ZUFjdGlvbnNBbmRBY3Rpb25Hcm91cHMoaGVhZGVyQWN0aW9ucywgdHJ1ZSwgaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gVGhlbiB0aGUgZWRpdCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmICgoZHJhZnRSb290Py5FZGl0QWN0aW9uIHx8IHN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LkVkaXRBY3Rpb24pICYmIHVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGxldCB2aXNpYmxlID0gZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0cm9vdFVwZGF0ZUhpZGRlbixcblx0XHRcdHJvb3RDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0TW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKSxcblx0XHRcdHZpZXdMZXZlbCxcblx0XHRcdGNhcGFiaWxpdGllc1xuXHRcdCk7XG5cdFx0aWYgKGNvbGxhYm9yYXRpb25PblJvb3QpIHtcblx0XHRcdHZpc2libGUgPSBhbmQodmlzaWJsZSwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKTtcblx0XHR9XG5cdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuUHJpbWFyeSxcblx0XHRcdGtleTogXCJFZGl0QWN0aW9uXCIsXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbih2aXNpYmxlKSxcblx0XHRcdGVuYWJsZWQ6IGdldEVkaXRCdXR0b25FbmFibGVkKHJvb3RDb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGFibGVQcm9wZXJ0eVBhdGgsIHZpZXdMZXZlbClcblx0XHR9KTtcblx0fVxuXHQvLyBUaGVuIHRoZSBkZWxldGUgYWN0aW9uIGlmIHdlJ3JlIG5vdCBzdGF0aWNhbGx5IG5vdCBkZWxldGFibGVcblx0aWYgKFxuXHRcdChwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgJiYgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIpIHx8XG5cdFx0KGVudGl0eURlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlPy52YWx1ZU9mKCkgIT09IGZhbHNlICYmIHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKVxuXHQpIHtcblx0XHRjb25zdCBkZWxldGVIaWRkZW4gPSBNb2RlbEhlbHBlci5nZXREZWxldGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKTtcblx0XHRsZXQgdmlzaWJsZSA9IGdldERlbGV0ZUJ1dHRvblZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgZGVsZXRlSGlkZGVuKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk9uUm9vdCkge1xuXHRcdFx0dmlzaWJsZSA9IGFuZCh2aXNpYmxlLCBub3QoZXF1YWwoVUkuaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb24sIGZhbHNlKSkpO1xuXHRcdH1cblxuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLlNlY29uZGFyeSxcblx0XHRcdGtleTogXCJEZWxldGVBY3Rpb25cIixcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGUpLFxuXHRcdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlQnV0dG9uRW5hYmxlZChlbnRpdHlEZWxldGVSZXN0cmljdGlvbnM/LkRlbGV0YWJsZSwgaXNQYXJlbnREZWxldGFibGUsIGNvbnZlcnRlckNvbnRleHQpKSxcblx0XHRcdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ6IHBhcmVudEVudGl0eVNldERlbGV0YWJsZVxuXHRcdH0pO1xuXHR9XG5cblx0aWYgKGNvcHlEYXRhRmllbGQpIHtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0Li4uZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihjb3B5RGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuQ29weSxcblx0XHRcdHRleHQ6IGNvcHlEYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCkgPz8gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiQ19DT01NT05fQ09QWVwiKVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3QgaGVhZGVyRGF0YUZpZWxkRm9ySUJOQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9ySUJOQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgZmFsc2UpO1xuXG5cdGhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5ID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkpKTtcblx0XHRcdHJldHVybiAhSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5jbHVkZXMoY3JpdGljYWxpdHkhKTtcblx0XHR9KVxuXHRcdC5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlc0NvbnRleHQgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB0cnVlIGZvciBoZWFkZXIgSUJOIGFjdGlvbiA6ICR7ZGF0YUZpZWxkLkxhYmVsfWApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGRhdGFGaWVsZC5JbmxpbmU/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYElubGluZSBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHRydWUgZm9yIGhlYWRlciBJQk4gYWN0aW9uIDogJHtkYXRhRmllbGQuTGFiZWx9YCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvTmF2aWdhdGlvblBhcmFtcyA9IHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcoZGF0YUZpZWxkLk1hcHBpbmcpXG5cdFx0XHR9O1xuXG5cdFx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRidXR0b25UeXBlOiBCdXR0b25UeXBlLkdob3N0LFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRhbmQoXG5cdFx0XHRcdFx0XHRub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdFx0XHRcdG5vdChlcXVhbChwYXRoSW5Nb2RlbChcInNoZWxsTmF2aWdhdGlvbk5vdEF2YWlsYWJsZVwiLCBcImludGVybmFsXCIpLCB0cnVlKSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCksXG5cdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0ZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUpLCB0cnVlKSlcblx0XHRcdFx0XHRcdDogdHJ1ZSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRwcmVzczogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0Zm4oXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLCBbXG5cdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuQWN0aW9uKSxcblx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uUGFyYW1zXG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0KSxcblx0XHRcdFx0Y3VzdG9tRGF0YTogY29tcGlsZUV4cHJlc3Npb24oe1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRhY3Rpb246IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuQWN0aW9uKVxuXHRcdFx0XHR9KVxuXHRcdFx0fSBhcyBBbm5vdGF0aW9uQWN0aW9uKTtcblx0XHR9KTtcblx0Ly8gRmluYWxseSB0aGUgbm9uIGNyaXRpY2FsIERhdGFGaWVsZEZvckFjdGlvbnMgYW5kIERhdGFGaWVsZEZvckFjdGlvbkdyb3Vwc1xuXHRjb21wdXRlQWN0aW9uc0FuZEFjdGlvbkdyb3VwcyhoZWFkZXJBY3Rpb25zLCBmYWxzZSwgaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIGhlYWRlckFjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIaWRkZW5IZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgaGlkZGVuQWN0aW9ucyA9IChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSWRlbnRpZmljYXRpb24/LmZpbHRlcigoaWRlbnRpZmljYXRpb25EYXRhRmllbGQpID0+IHtcblx0XHRyZXR1cm4gaWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWU7XG5cdH0pIHx8IFtdKSBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdO1xuXHRyZXR1cm4gaGlkZGVuQWN0aW9ucy5tYXAoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRlZmF1bHQsXG5cdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKVxuXHRcdH07XG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnMoXG5cdHZpZXdMZXZlbDogbnVtYmVyLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IHN0aWNreVNlc3Npb25TdXBwb3J0ZWQgPSBNb2RlbEhlbHBlci5nZXRTdGlja3lTZXNzaW9uKGVudGl0eVNldCksIC8vZm9yIHN0aWNreSBhcHBcblx0XHRlbnRpdHlTZXREcmFmdFJvb3QgPVxuXHRcdFx0aXNFbnRpdHlTZXQoZW50aXR5U2V0KSAmJlxuXHRcdFx0KGVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8udGVybSA/PyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8udGVybSksXG5cdFx0Y29uZGl0aW9uU2F2ZSA9IEJvb2xlYW4oXG5cdFx0XHRlbnRpdHlTZXREcmFmdFJvb3QgPT09IENvbW1vbkFubm90YXRpb25UZXJtcy5EcmFmdFJvb3QgfHxcblx0XHRcdFx0KGNhcGFiaWxpdGllcz8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkIHx8XG5cdFx0XHRcdChzdGlja3lTZXNzaW9uU3VwcG9ydGVkICYmIHN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LlNhdmVBY3Rpb24pXG5cdFx0KSxcblx0XHRjb25kaXRpb25BcHBseSA9IHZpZXdMZXZlbCA+IDEgJiYgIShjYXBhYmlsaXRpZXM/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCxcblx0XHRjb25kaXRpb25DYW5jZWwgPSBCb29sZWFuKFxuXHRcdFx0ZW50aXR5U2V0RHJhZnRSb290ID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuRHJhZnRSb290IHx8XG5cdFx0XHRcdChjYXBhYmlsaXRpZXM/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCB8fFxuXHRcdFx0XHQoc3RpY2t5U2Vzc2lvblN1cHBvcnRlZCAmJiBzdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5EaXNjYXJkQWN0aW9uKVxuXHRcdCksXG5cdFx0Y29uZGl0aW9uQ3JlYXRlTmV4dCA9XG5cdFx0XHR2aWV3TGV2ZWwgPiAxICYmXG5cdFx0XHQoY2FwYWJpbGl0aWVzPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgJiZcblx0XHRcdCEoY2FwYWJpbGl0aWVzPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmhpZGVDcmVhdGVOZXh0O1xuXG5cdC8vIFJldHJpZXZlIGFsbCBkZXRlcm1pbmluZyBhY3Rpb25zXG5cdGNvbnN0IGZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnMgPSBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIHRydWUpO1xuXG5cdC8vIEZpcnN0IGFkZCB0aGUgXCJDcml0aWNhbFwiIERhdGFGaWVsZEZvckFjdGlvbnNcblx0Y29uc3QgZm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdID0gZm9vdGVyRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRcdC5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3QgY3JpdGljYWxpdHkgPSBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkPy5Dcml0aWNhbGl0eSkpO1xuXHRcdFx0cmV0dXJuIGNyaXRpY2FsaXR5ICYmIElNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluY2x1ZGVzKGNyaXRpY2FsaXR5KTtcblx0XHR9KVxuXHRcdC5tYXAoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHR9KTtcblx0aWYgKGNvbmRpdGlvbkNyZWF0ZU5leHQpIHtcblx0XHRjb25zdCBpZkZDTEVuYWJsZWQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRmNsRW5hYmxlZCgpO1xuXHRcdGZvb3RlckFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkNyZWF0ZU5leHQsXG5cdFx0XHRrZXk6IFwiQ3JlYXRlTmV4dEFjdGlvblwiLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlTmV4dEJ1dHRvblZpc2liaWxpdHkoISFjb25kaXRpb25DcmVhdGVOZXh0LCBpZkZDTEVuYWJsZWQpKVxuXHRcdH0pO1xuXHR9XG5cdC8vIFRoZW4gdGhlIHNhdmUgYWN0aW9uIGlmIGl0IGV4aXN0c1xuXHRpZiAoZW50aXR5U2V0Py5lbnRpdHlUeXBlTmFtZSA9PT0gZW50aXR5VHlwZT8uZnVsbHlRdWFsaWZpZWROYW1lICYmIGNvbmRpdGlvblNhdmUpIHtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLlByaW1hcnksIGtleTogXCJTYXZlQWN0aW9uXCIgfSk7XG5cdH1cblxuXHQvLyBUaGVuIHRoZSBhcHBseSBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChjb25kaXRpb25BcHBseSkge1xuXHRcdGZvb3RlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuRGVmYXVsdEFwcGx5LCBrZXk6IFwiQXBwbHlBY3Rpb25cIiB9KTtcblx0fVxuXHQvLyBUaGVuIHRoZSBub24gY3JpdGljYWwgRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5KSk7XG5cdFx0XHRyZXR1cm4gY3JpdGljYWxpdHkgJiYgIUlNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluY2x1ZGVzKGNyaXRpY2FsaXR5KTtcblx0XHR9KVxuXHRcdC5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGZvb3RlckFjdGlvbnMucHVzaChnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCkpO1xuXHRcdH0pO1xuXG5cdC8vIFRoZW4gdGhlIGNhbmNlbCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChjb25kaXRpb25DYW5jZWwpIHtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5TZWNvbmRhcnksXG5cdFx0XHRrZXk6IFwiQ2FuY2VsQWN0aW9uXCIsXG5cdFx0XHRwb3NpdGlvbjogeyBwbGFjZW1lbnQ6IFBsYWNlbWVudC5FbmQgfVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmb290ZXJBY3Rpb25zO1xufVxuXG5mdW5jdGlvbiBnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFubm90YXRpb25BY3Rpb24ge1xuXHRsZXQgaXNWaXNpYmxlRXhwID0gaXNWaXNpYmxlKGRhdGFGaWVsZCk7XG5cdGNvbnN0IGNvbGxhYm9yYXRpb25PblJvb3QgPVxuXHRcdE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkRnJvbUNvbnZlcnRlckNvbnRleHQoY29udmVydGVyQ29udGV4dCkgJiZcblx0XHRNb2RlbEhlbHBlci5nZXREcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSk7XG5cdGlmIChjb2xsYWJvcmF0aW9uT25Sb290KSB7XG5cdFx0aXNWaXNpYmxlRXhwID0gYW5kKGlzVmlzaWJsZUV4cCwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlRXhwKSxcblx0XHRlbmFibGVkOiBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRpc0FJT3BlcmF0aW9uOiBpc0FjdGlvbkFJT3BlcmF0aW9uKGRhdGFGaWVsZCkgPT09IHRydWUgfHwgdW5kZWZpbmVkXG5cdH07XG59XG5cbi8qKlxuICogQWRkcyBhY3Rpb25zIGFuZCBhY3Rpb24gZ3JvdXBzIHRvIHRoZSBoZWFkZXJBY3Rpb25zIGFycmF5LCBwcmlvcml0aXppbmcgdGhlbSBhY2NvcmRpbmcgdG8gdGhlaXIgY3JpdGljYWxpdHkuXG4gKiBAcGFyYW0gaGVhZGVyQWN0aW9ucyBBcnJheSB3aXRoIGFsbCB0aGUgY3VycmVudCBoZWFkZXIgYWN0aW9ucyBpbiBpdFxuICogQHBhcmFtIHByaW9yaXRpemVDcml0aWNhbGl0eSBGbGFnIHRvIGRldGVybWluZSB0aGUgcHJpb3JpdHkgb2YgdGhlIGNyaXRpY2FsaXR5IGFjdGlvbiBvciBhY3Rpb25Hcm91cHMgaW5zaWRlIGhlYWRlckFjdGlvbnNcbiAqIEBwYXJhbSBoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zT3JHcm91cHMgQWxsIGFjdGlvbnMgYW5kIGFjdGlvbiBncm91cHMgZnJvbSB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvbiB3aXRoIENvcHlBY3Rpb24gZmlsdGVyZWQgb3V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBJbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUFjdGlvbnNBbmRBY3Rpb25Hcm91cHMoXG5cdGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSxcblx0cHJpb3JpdGl6ZUNyaXRpY2FsaXR5OiBib29sZWFuLFxuXHRoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zT3JHcm91cHM6IChEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyB8IERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMpW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogdm9pZCB7XG5cdGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnNPckdyb3Vwc1xuXHRcdC5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3QgY3JpdGljYWxpdHkgPSBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkPy5Dcml0aWNhbGl0eSkpO1xuXHRcdFx0cmV0dXJuIHByaW9yaXRpemVDcml0aWNhbGl0eSA/IElNUE9SVEFOVF9DUklUSUNBTElUSUVTLmluY2x1ZGVzKGNyaXRpY2FsaXR5ISkgOiAhSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5jbHVkZXMoY3JpdGljYWxpdHkhKTtcblx0XHR9KVxuXHRcdC5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHRoZWFkZXJBY3Rpb25zLnB1c2goZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cCkge1xuXHRcdFx0XHRsZXQgaXNWaXNpYmxlRXhwID0gbm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSk7XG5cdFx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25PblJvb3QgPVxuXHRcdFx0XHRcdE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkRnJvbUNvbnZlcnRlckNvbnRleHQoY29udmVydGVyQ29udGV4dCkgJiZcblx0XHRcdFx0XHRNb2RlbEhlbHBlci5nZXREcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSk7XG5cdFx0XHRcdGlmIChjb2xsYWJvcmF0aW9uT25Sb290KSB7XG5cdFx0XHRcdFx0aXNWaXNpYmxlRXhwID0gYW5kKGlzVmlzaWJsZUV4cCwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuTWVudSxcblx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdGlkOiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlRXhwKSxcblx0XHRcdFx0XHRtZW51OiBkYXRhRmllbGQuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT5cblx0XHRcdFx0XHRcdGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oYWN0aW9uIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aXNBSU9wZXJhdGlvbjogaXNNZW51QUlPcGVyYXRpb24oZGF0YUZpZWxkLkFjdGlvbnMpID09PSB0cnVlIHx8IHVuZGVmaW5lZFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLG9DQUFvQ0EsQ0FBQ0MsVUFBc0IsRUFBRUMsbUJBQTRCLEVBQTZCO0lBQ3JJLE9BQVFELFVBQVUsQ0FBQ0UsV0FBVyxFQUFFQyxFQUFFLEVBQUVDLGNBQWMsRUFBRUMsTUFBTSxDQUFFQyx1QkFBdUIsSUFBSztNQUN2RixPQUFPQSx1QkFBdUIsQ0FBQ0MsS0FBSyxvREFBeUMsSUFDNUVDLE9BQU8sQ0FBQ0YsdUJBQXVCLENBQUNHLFdBQVcsRUFBRUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLVCxtQkFBbUIsS0FDOUVLLHVCQUF1QixDQUFDSyxZQUFZLEVBQUVDLE9BQU8sRUFBRUYsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQ2pFSix1QkFBdUIsRUFBRUssWUFBWSxFQUFFVCxXQUFXLEVBQUVXLElBQUksRUFBRUMsa0JBQWtCLEVBQUVKLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQ2pHLElBQUksR0FDSixLQUFLO0lBQ1QsQ0FBQyxDQUFDLElBQUksRUFBRTtFQUNUOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQUssUUFBQSxDQUFBaEIsb0NBQUEsR0FBQUEsb0NBQUE7RUFRTyxTQUFTaUIsNENBQTRDQSxDQUMzRGhCLFVBQXNCLEVBQ3RCQyxtQkFBNEIsRUFDUTtJQUNwQyxPQUFRRCxVQUFVLENBQUNFLFdBQVcsRUFBRUMsRUFBRSxFQUFFQyxjQUFjLEVBQUVDLE1BQU0sQ0FBRUMsdUJBQXVCLElBQUs7TUFDdkYsT0FBUUEsdUJBQXVCLENBQUNDLEtBQUssb0RBQXlDLElBQzdFQyxPQUFPLENBQUNGLHVCQUF1QixDQUFDRyxXQUFXLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBS1QsbUJBQW1CLEtBQzlFSyx1QkFBdUIsQ0FBQ0ssWUFBWSxFQUFFQyxPQUFPLEVBQUVGLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUNqRUosdUJBQXVCLEVBQUVLLFlBQVksRUFBRVQsV0FBVyxFQUFFVyxJQUFJLEVBQUVDLGtCQUFrQixFQUFFSixPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUNuR0osdUJBQXVCLENBQUNDLEtBQUsseURBQThDLEdBQ3pFLElBQUksR0FDSixLQUFLO0lBQ1QsQ0FBQyxDQUFDLElBQUksRUFBRTtFQUNUOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBUSxRQUFBLENBQUFDLDRDQUFBLEdBQUFBLDRDQUFBO0VBTUEsU0FBU0MsdUNBQXVDQSxDQUMvQ2pCLFVBQXNCLEVBQ3RCQyxtQkFBNEIsRUFDZTtJQUMzQyxPQUFRRCxVQUFVLENBQUNFLFdBQVcsRUFBRUMsRUFBRSxFQUFFQyxjQUFjLEVBQUVDLE1BQU0sQ0FBRUMsdUJBQXVCLElBQUs7TUFDdkYsT0FBT0EsdUJBQXVCLENBQUNDLEtBQUssbUVBQXdELElBQzNGQyxPQUFPLENBQUNGLHVCQUF1QixDQUFDRyxXQUFXLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBS1QsbUJBQW1CLEdBQzdFLElBQUksR0FDSixLQUFLO0lBQ1QsQ0FBQyxDQUFDLElBQUksRUFBRTtFQUNUO0VBRU8sTUFBTWlCLHVCQUF1QixHQUFHLENBQ3RDLGlDQUFpQyxFQUNqQyw2QkFBNkIsRUFDN0IsNkJBQTZCLEVBQzdCLGlDQUFpQyxDQUNqQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQUgsUUFBQSxDQUFBRyx1QkFBQSxHQUFBQSx1QkFBQTtFQU1PLFNBQVNDLHlCQUF5QkEsQ0FDeENDLGdCQUF5RCxFQUN6REMsWUFBc0MsRUFDRjtJQUNwQyxNQUFNQyxtQkFBbUIsR0FBR0YsZ0JBQWdCLENBQUNHLHNCQUFzQixDQUFDLENBQUM7TUFDcEVDLHNCQUFzQixHQUFHRixtQkFBbUIsQ0FBQ0csb0JBQW9CLENBQUNDLEdBQUcsQ0FBRUMsT0FBTyxJQUFLQSxPQUFPLENBQUNDLElBQUksQ0FBQztNQUNoRztNQUNBO01BQ0FDLHNCQUFzQixHQUFHQywyQkFBMkIsQ0FBQ1QsWUFBWSxFQUFFRyxzQkFBc0IsRUFBRSxLQUFLLEVBQUdPLElBQVksSUFDOUdDLG9CQUFvQixDQUFDRCxJQUFJLEVBQUVYLGdCQUFnQixDQUFDYSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNwRSxDQUFDO01BQUU7TUFDSEMsZUFBZSxHQUFHZCxnQkFBZ0IsQ0FBQ2Usa0JBQWtCLENBQUMsQ0FBQztNQUN2REMsU0FBUyxHQUFHRixlQUFlLENBQUNHLFlBQVksQ0FBQyxDQUFDO01BQzFDO01BQ0E7TUFDQTtNQUNBQyxrQkFBcUQsR0FBR0YsU0FBUyxHQUFHLENBQUMsR0FBR2pDLEVBQUUsQ0FBQ29DLFVBQVUsR0FBR0MsR0FBRyxDQUFDckMsRUFBRSxDQUFDb0MsVUFBVSxDQUFDOztJQUUzRztJQUNBO0lBQ0E7SUFDQTtJQUNBLE9BQU9FLE1BQU0sQ0FDWnBCLFlBQVksS0FBS3FCLFNBQVMsSUFBSXJCLFlBQVksQ0FBQ1gsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQzlENEIsa0JBQWtCLEVBQ2xCSyxHQUFHLENBQUNMLGtCQUFrQixFQUFFTSxLQUFLLENBQUNmLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUM3RCxDQUFDO0VBQ0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQWQsUUFBQSxDQUFBSSx5QkFBQSxHQUFBQSx5QkFBQTtFQU9PLFNBQVMwQixzQkFBc0JBLENBQ3JDQyxXQUF5RCxFQUN6REMsaUJBQW9ELEVBQ3BEM0IsZ0JBQXlELEVBQ3JCO0lBQ3BDLE1BQU00QixTQUFTLEdBQUc1QixnQkFBZ0IsQ0FBQzZCLFlBQVksQ0FBQyxDQUFDO01BQ2hEQyxXQUFXLEdBQUdDLFdBQVcsQ0FBQ0QsV0FBVyxDQUFDRixTQUFTLENBQUM7SUFFakQsSUFBSUksR0FBRyxHQUFHWCxNQUFNLENBQ2ZNLGlCQUFpQixLQUFLTCxTQUFTLEVBQy9CSyxpQkFBaUIsRUFDakJOLE1BQU0sQ0FBQ0ssV0FBVyxLQUFLSixTQUFTLEVBQUVFLEtBQUssQ0FBQ2QsMkJBQTJCLENBQUNnQixXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUN4RyxDQUFDOztJQUVEO0lBQ0FELEdBQUcsR0FBR0YsV0FBVyxHQUFHUCxHQUFHLENBQUNTLEdBQUcsRUFBRVosR0FBRyxDQUFDYyxXQUFXLENBQUMseUNBQXlDLENBQUMsQ0FBQyxDQUFDLEdBQUdGLEdBQUc7SUFFL0YsT0FBT0EsR0FBRztFQUNYOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBVEFyQyxRQUFBLENBQUE4QixzQkFBQSxHQUFBQSxzQkFBQTtFQVVPLFNBQVNVLHVCQUF1QkEsQ0FDdENuQyxnQkFBeUQsRUFDekRvQyxnQkFBMEMsRUFDMUNDLG9CQUE2RCxFQUM3REMsWUFBdUMsRUFDdkN0QixTQUE4QixFQUM5QnVCLFlBQXNDLEVBQ0Y7SUFDcEMsTUFBTUMsYUFBYSxHQUFHSCxvQkFBb0IsRUFBRVIsWUFBWSxDQUFDLENBQUM7TUFDekRELFNBQVMsR0FBRzVCLGdCQUFnQixDQUFDNkIsWUFBWSxDQUFDLENBQUM7TUFDM0NZLFlBQVksR0FBR3pDLGdCQUFnQixDQUFDZSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMyQixZQUFZLENBQUMsQ0FBQztJQUNwRSxJQUFJQyxjQUFjO0lBQ2xCLE1BQU1DLDBCQUEwQixHQUFHQyxtQkFBbUIsQ0FBQ1Isb0JBQW9CLEVBQUVELGdCQUFnQixDQUFDO0lBQzlGLE1BQU1VLFdBQVcsR0FBSVAsWUFBWSxFQUFFUSxXQUFXLEVBQWtCQyxPQUFPO0lBQ3ZFLElBQUloQyxTQUFTLElBQUlBLFNBQVMsR0FBRyxDQUFDLEVBQUU7TUFDL0I7TUFDQTJCLGNBQWMsR0FBR1osV0FBVyxDQUFDa0IsV0FBVyxDQUFDckIsU0FBUyxDQUFDO0lBQ3BELENBQUMsTUFBTTtNQUNOZSxjQUFjLEdBQUdaLFdBQVcsQ0FBQ0QsV0FBVyxDQUFDVSxhQUFhLENBQUM7SUFDeEQ7SUFDQSxNQUFNVSxzQkFBc0IsR0FBR0wsbUJBQW1CLENBQUNSLG9CQUFvQixFQUFFQyxZQUFZLENBQUM7SUFFdEYsTUFBTWEscUJBQXdELEdBQUcvQixHQUFHLENBQUNyQyxFQUFFLENBQUNvQyxVQUFVLENBQUM7O0lBRW5GO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsTUFBTWlDLG1CQUFzRCxHQUFHL0IsTUFBTSxDQUNuRUwsU0FBUyxHQUFjLENBQUMsSUFBSThCLFdBQVcsRUFDeEN6QixNQUFNLENBQ0xpQixZQUFZLEtBQUtoQixTQUFTLElBQUlnQixZQUFZLENBQUNoRCxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFDOURpQyxHQUFHLENBQ0Y0QixxQkFBcUIsRUFDckIzQixLQUFLLENBQUNVLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsRUFDdkRiLE1BQU0sQ0FBQ29CLFlBQVksRUFBRWpCLEtBQUssQ0FBQ1UsV0FBVyxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FDcEYsQ0FBQyxFQUNEWCxHQUFHLENBQ0Y0QixxQkFBcUIsRUFDckIzQixLQUFLLENBQUMwQixzQkFBc0IsRUFBRSxLQUFLLENBQUMsRUFDcEMxQixLQUFLLENBQUNVLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsRUFDdkRiLE1BQU0sQ0FBQ29CLFlBQVksRUFBRWpCLEtBQUssQ0FBQ1UsV0FBVyxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FDcEYsQ0FDRCxDQUFDLEVBQ0RiLE1BQU0sQ0FDTGUsZ0JBQWdCLEtBQUtkLFNBQVMsSUFBSWMsZ0JBQWdCLENBQUM5QyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFDdEU2RCxxQkFBcUIsRUFDckI1QixHQUFHLENBQUM0QixxQkFBcUIsRUFBRTNCLEtBQUssQ0FBQ29CLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUNwRSxDQUNELENBQUM7SUFDRCxPQUFPdkIsTUFBTSxDQUFDc0IsY0FBYyxFQUFFcEIsR0FBRyxDQUFDNkIsbUJBQW1CLEVBQUVDLEtBQUssQ0FBQ0Msd0JBQXdCLENBQUMsRUFBRUYsbUJBQW1CLENBQUM7RUFDN0c7RUFBQ3pELFFBQUEsQ0FBQXdDLHVCQUFBLEdBQUFBLHVCQUFBO0VBRU0sU0FBU1UsbUJBQW1CQSxDQUNsQzdDLGdCQUF5RCxFQUN6RHNDLFlBQXNDLEVBQ0Y7SUFDcEMsTUFBTXBDLG1CQUFtQixHQUFHRixnQkFBZ0IsQ0FBQ0csc0JBQXNCLENBQUMsQ0FBQztNQUNwRUMsc0JBQXNCLEdBQUdGLG1CQUFtQixDQUFDRyxvQkFBb0IsQ0FBQ0MsR0FBRyxDQUFFQyxPQUFPLElBQUtBLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDO01BQ2hHO01BQ0E7TUFDQTBDLHNCQUFzQixHQUFHeEMsMkJBQTJCLENBQUM0QixZQUFZLEVBQUVsQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUdPLElBQVksSUFDOUdDLG9CQUFvQixDQUFDRCxJQUFJLEVBQUVYLGdCQUFnQixDQUFDYSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUVULHNCQUFzQixDQUN4RixDQUFDO0lBQ0YsT0FBTzhDLHNCQUFzQjtFQUM5QjtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkF2RCxRQUFBLENBQUFrRCxtQkFBQSxHQUFBQSxtQkFBQTtFQU9PLFNBQVNVLDhCQUE4QkEsQ0FDN0N2RCxnQkFBeUQsRUFDekR3RCxrQkFBcUQsRUFDckR4QyxTQUE4QixFQUNNO0lBQ3BDLE1BQU1ZLFNBQVMsR0FBRzVCLGdCQUFnQixDQUFDNkIsWUFBWSxDQUFDLENBQUM7TUFDaERDLFdBQVcsR0FBR0MsV0FBVyxDQUFDRCxXQUFXLENBQUNGLFNBQVMsQ0FBQztNQUNoRDZCLFFBQVEsR0FBRzFCLFdBQVcsQ0FBQzBCLFFBQVEsQ0FBQzdCLFNBQVMsQ0FBQztJQUMzQyxJQUFJOEIsY0FBa0M7SUFDdEMsSUFBSTVCLFdBQVcsSUFBSTZCLFdBQVcsQ0FBQy9CLFNBQVMsQ0FBQyxFQUFFO01BQzFDOEIsY0FBYyxHQUFHOUIsU0FBUyxDQUFDOUMsV0FBVyxDQUFDOEUsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFVBQW9CO0lBQy9FLENBQUMsTUFBTSxJQUFJTCxRQUFRLElBQUlFLFdBQVcsQ0FBQy9CLFNBQVMsQ0FBQyxFQUFFO01BQzlDOEIsY0FBYyxHQUFHOUIsU0FBUyxDQUFDOUMsV0FBVyxDQUFDaUYsT0FBTyxFQUFFQyxzQkFBc0IsRUFBRUYsVUFBb0I7SUFDN0Y7SUFDQSxJQUFJSixjQUFjLEVBQUU7TUFDbkIsTUFBTU8sd0JBQXdCLEdBQUdqRSxnQkFBZ0IsQ0FBQ2tFLHlCQUF5QixDQUFDUixjQUFjLENBQUM7TUFDM0YsTUFBTVMsVUFBVSxHQUFHbkUsZ0JBQWdCLENBQUNvRSxtQkFBbUIsQ0FBQ0gsd0JBQXdCLENBQUMsQ0FBQ0ksTUFBdUI7TUFDekcsSUFBSUYsVUFBVSxFQUFFckYsV0FBVyxFQUFFVyxJQUFJLEVBQUVDLGtCQUFrQixLQUFLLElBQUksRUFBRTtRQUMvRDtRQUNBO01BQUEsQ0FDQSxNQUFNLElBQUtzQixTQUFTLEdBQWMsQ0FBQyxFQUFFO1FBQ3JDO1FBQ0EsSUFBSXdDLGtCQUFrQixLQUFLbEMsU0FBUyxFQUFFO1VBQ3JDLE9BQU9DLEdBQUcsQ0FDVEMsS0FBSyxDQUFDZCwyQkFBMkIsQ0FBQzhDLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQzVEaEMsS0FBSyxDQUFDVSxXQUFXLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUN2RCxDQUFDO1FBQ0YsQ0FBQyxNQUFNO1VBQ04sT0FBT1YsS0FBSyxDQUFDVSxXQUFXLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQy9EO01BQ0QsQ0FBQyxNQUFNO1FBQ04sT0FBT29DLHVDQUF1QyxDQUFDdEUsZ0JBQWdCLEVBQUVtRSxVQUFVLElBQUk3QyxTQUFTLENBQUM7TUFDMUY7SUFDRDtJQUNBLE9BQU9XLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDdEI7RUFBQ3RDLFFBQUEsQ0FBQTRELDhCQUFBLEdBQUFBLDhCQUFBO0VBRU0sU0FBU2dCLG9CQUFvQkEsQ0FDbkN2RSxnQkFBeUQsRUFDekR3RCxrQkFBcUQsRUFDckR4QyxTQUE4QixFQUNLO0lBQ25DLE9BQU93RCxpQkFBaUIsQ0FBQ2pCLDhCQUE4QixDQUFDdkQsZ0JBQWdCLEVBQUV3RCxrQkFBa0IsRUFBRXhDLFNBQVMsQ0FBQyxDQUFDO0VBQzFHO0VBQUNyQixRQUFBLENBQUE0RSxvQkFBQSxHQUFBQSxvQkFBQTtFQUVNLFNBQVNFLHVCQUF1QkEsQ0FDdEN6RSxnQkFBeUQsRUFDekR1QyxZQUFzQyxFQUN2QjtJQUNmLE1BQU1tQyxZQUFZLEdBQUcxRSxnQkFBZ0IsQ0FBQzJFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELE1BQU1DLGlCQUFpQixHQUFHN0MsV0FBVyxDQUFDOEMsb0JBQW9CLENBQUNILFlBQVksQ0FBQztJQUN4RSxNQUFNckMsb0JBQW9CLEdBQUdyQyxnQkFBZ0IsQ0FBQzhFLHNCQUFzQixDQUF3QixHQUFHLEdBQUdGLGlCQUFpQixDQUFDO0lBQ3BILE1BQU1oRCxTQUFTLEdBQUc1QixnQkFBZ0IsQ0FBQzZCLFlBQVksQ0FBQyxDQUFDO01BQ2hEakQsVUFBVSxHQUFHb0IsZ0JBQWdCLENBQUMrRSxhQUFhLENBQUMsQ0FBQztNQUM3Q3ZDLGFBQWEsR0FBR0gsb0JBQW9CLENBQUNSLFlBQVksQ0FBQyxDQUFDO01BQ25EbUQsY0FBYyxHQUFHM0Msb0JBQW9CLENBQUMwQyxhQUFhLENBQUMsQ0FBQztNQUNyREUsc0JBQXNCLEdBQUdsRCxXQUFXLENBQUNtRCxnQkFBZ0IsQ0FBQzFDLGFBQWEsQ0FBQztNQUFFO01BQ3RFMkMsU0FBUyxHQUFHcEQsV0FBVyxDQUFDcUQsWUFBWSxDQUFDNUMsYUFBYSxDQUFDO01BQUU7TUFDckQ2QyxtQkFBbUIsR0FBR3RELFdBQVcsQ0FBQ3VELGlEQUFpRCxDQUFDdEYsZ0JBQWdCLENBQUMsSUFBSW1GLFNBQVM7TUFDbEhJLFNBQVMsR0FBR3hELFdBQVcsQ0FBQ3lELFlBQVksQ0FBQ2hELGFBQWEsQ0FBQztNQUNuRGlELHdCQUF3QixHQUFHN0QsU0FBUyxJQUFJQSxTQUFTLENBQUM5QyxXQUFXLEVBQUU0RyxZQUFZLEVBQUVDLGtCQUFrQjtNQUMvRnZELGdCQUFnQixHQUFHTCxXQUFXLENBQUM2RCxjQUFjLENBQUNwRCxhQUFhLEVBQUV3QyxjQUFjLENBQUM7TUFDNUUxQyxZQUFZLEdBQUdFLGFBQWEsSUFBSW1CLFdBQVcsQ0FBQ25CLGFBQWEsQ0FBQyxJQUFJSixnQkFBZ0IsRUFBRTlDLE9BQU8sQ0FBQyxDQUFDO01BQ3pGWSxtQkFBbUIsR0FBR0YsZ0JBQWdCLENBQUNHLHNCQUFzQixDQUFDLENBQUM7TUFDL0R3QixpQkFBaUIsR0FBR2tFLGVBQWUsQ0FBQzNGLG1CQUFtQixFQUFFO1FBQ3hENEYsV0FBVyxFQUFFQSxDQUFDbkYsSUFBWSxFQUFFb0YsZUFBeUIsS0FDcERuRixvQkFBb0IsQ0FBQ0QsSUFBSSxFQUFFWCxnQkFBZ0IsQ0FBQ2EsaUJBQWlCLENBQUMsQ0FBQyxFQUFFa0YsZUFBZTtNQUNsRixDQUFDLENBQUM7TUFDRkMsd0JBQXdCLEdBQUdyRSxpQkFBaUIsR0FBRzZDLGlCQUFpQixDQUFDN0MsaUJBQWlCLENBQUMsR0FBR0EsaUJBQWlCO01BQ3ZHc0UsaUNBQWlDLEdBQUdyRyw0Q0FBNEMsQ0FBQ0ksZ0JBQWdCLENBQUMrRSxhQUFhLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUUxSCxNQUFNbUIsYUFBYSxHQUNsQmxHLGdCQUFnQixDQUFDZSxrQkFBa0IsQ0FBQyxDQUFDLENBQUNFLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUN2RGtGLGFBQWEsQ0FDYkYsaUNBQWlDLENBQUNoSCxNQUFNLENBQUVtSCxTQUFTLElBQUs7TUFDdkQsSUFBSUEsU0FBUyxDQUFDakgsS0FBSyxvREFBeUMsRUFBRTtRQUM3RCxPQUFPa0gscUJBQXFCLENBQUNELFNBQVMsQ0FBQztNQUN4QztJQUNELENBQUMsQ0FDRCxDQUFDLEdBQ0Q5RSxTQUFTO0lBRWIsTUFBTWdGLHlCQUF5QixHQUFHTCxpQ0FBaUMsQ0FBQ2hILE1BQU0sQ0FBRW1ILFNBQVMsSUFBSztNQUN6RixPQUFPLENBQUNDLHFCQUFxQixDQUFDRCxTQUFvQyxDQUFDO0lBQ3BFLENBQUMsQ0FBQzs7SUFFRjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsTUFBTUcsYUFBMkIsR0FBRyxFQUFFO0lBQ3RDLElBQUk1QyxXQUFXLENBQUMvQixTQUFTLENBQUMsSUFBSXVELFNBQVMsRUFBRXJCLFVBQVUsSUFBSXhCLFlBQVksS0FBSyxJQUFJLEVBQUU7TUFDN0VpRSxhQUFhLENBQUNDLElBQUksQ0FBQztRQUFFQyxJQUFJLEVBQUVDLFVBQVUsQ0FBQ0MsWUFBWTtRQUFFQyxHQUFHLEVBQUU7TUFBZSxDQUFDLENBQUM7SUFDM0U7SUFFQSxNQUFNNUYsU0FBUyxHQUFHaEIsZ0JBQWdCLENBQUNlLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0UsWUFBWSxDQUFDLENBQUM7SUFDdEUsTUFBTTRGLHFCQUFxQixHQUFHN0YsU0FBUyxHQUFHLENBQUMsR0FBR1ksU0FBUyxFQUFFOUMsV0FBVyxDQUFDNEcsWUFBWSxFQUFFb0Isa0JBQWtCLEVBQUVDLFNBQVMsR0FBR3pGLFNBQVM7SUFDNUgsSUFBSTZELFNBQVMsSUFBSUksU0FBUyxFQUFFO01BQzNCZ0IsYUFBYSxDQUFDQyxJQUFJLENBQUM7UUFBRUMsSUFBSSxFQUFFQyxVQUFVLENBQUNNLG9CQUFvQjtRQUFFSixHQUFHLEVBQUU7TUFBdUIsQ0FBQyxDQUFDO0lBQzNGO0lBQ0E7SUFDQTtJQUNBSyw2QkFBNkIsQ0FBQ1YsYUFBYSxFQUFFLElBQUksRUFBRUQseUJBQXlCLEVBQUV0RyxnQkFBZ0IsQ0FBQzs7SUFFL0Y7SUFDQSxJQUFJLENBQUNtRixTQUFTLEVBQUVyQixVQUFVLElBQUltQixzQkFBc0IsRUFBRW5CLFVBQVUsS0FBS3hCLFlBQVksS0FBSyxJQUFJLEVBQUU7TUFDM0YsSUFBSTRFLE9BQU8sR0FBRy9FLHVCQUF1QixDQUNwQ25DLGdCQUFnQixFQUNoQm9DLGdCQUFnQixFQUNoQkMsb0JBQW9CLEVBQ3BCTixXQUFXLENBQUM2RCxjQUFjLENBQUNoRSxTQUFTLEVBQUVoRCxVQUFVLENBQUMsRUFDakRvQyxTQUFTLEVBQ1R1QixZQUNELENBQUM7TUFDRCxJQUFJOEMsbUJBQW1CLEVBQUU7UUFDeEI2QixPQUFPLEdBQUczRixHQUFHLENBQUMyRixPQUFPLEVBQUU5RixHQUFHLENBQUNJLEtBQUssQ0FBQ3pDLEVBQUUsQ0FBQ29JLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDNUU7TUFDQVosYUFBYSxDQUFDQyxJQUFJLENBQUM7UUFDbEJDLElBQUksRUFBRUMsVUFBVSxDQUFDVSxPQUFPO1FBQ3hCUixHQUFHLEVBQUUsWUFBWTtRQUNqQk0sT0FBTyxFQUFFMUMsaUJBQWlCLENBQUMwQyxPQUFPLENBQUM7UUFDbkNsRSxPQUFPLEVBQUV1QixvQkFBb0IsQ0FBQ2xDLG9CQUFvQixFQUFFd0UscUJBQXFCLEVBQUU3RixTQUFTO01BQ3JGLENBQUMsQ0FBQztJQUNIO0lBQ0E7SUFDQSxJQUNFZ0Ysd0JBQXdCLElBQUlBLHdCQUF3QixLQUFLLE9BQU8sSUFDaEVQLHdCQUF3QixFQUFFNEIsU0FBUyxFQUFFL0gsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUkwRyx3QkFBd0IsS0FBSyxPQUFRLEVBQ2pHO01BQ0QsTUFBTS9GLFlBQVksR0FBRzhCLFdBQVcsQ0FBQ3VGLGVBQWUsQ0FBQzFGLFNBQVMsRUFBRWhELFVBQVUsQ0FBQztNQUN2RSxJQUFJc0ksT0FBTyxHQUFHbkgseUJBQXlCLENBQUNDLGdCQUFnQixFQUFFQyxZQUFZLENBQUM7TUFDdkUsSUFBSW9GLG1CQUFtQixFQUFFO1FBQ3hCNkIsT0FBTyxHQUFHM0YsR0FBRyxDQUFDMkYsT0FBTyxFQUFFOUYsR0FBRyxDQUFDSSxLQUFLLENBQUN6QyxFQUFFLENBQUNvSSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQzVFO01BRUFaLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDO1FBQ2xCQyxJQUFJLEVBQUVDLFVBQVUsQ0FBQ2EsU0FBUztRQUMxQlgsR0FBRyxFQUFFLGNBQWM7UUFDbkJNLE9BQU8sRUFBRTFDLGlCQUFpQixDQUFDMEMsT0FBTyxDQUFDO1FBQ25DbEUsT0FBTyxFQUFFd0IsaUJBQWlCLENBQUMvQyxzQkFBc0IsQ0FBQ2dFLHdCQUF3QixFQUFFNEIsU0FBUyxFQUFFMUYsaUJBQWlCLEVBQUUzQixnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVId0gseUJBQXlCLEVBQUV4QjtNQUM1QixDQUFDLENBQUM7SUFDSDtJQUVBLElBQUlFLGFBQWEsRUFBRTtNQUNsQkssYUFBYSxDQUFDQyxJQUFJLENBQUM7UUFDbEIsR0FBR2lCLDRCQUE0QixDQUFDdkIsYUFBYSxFQUFFbEcsZ0JBQWdCLENBQUM7UUFDaEV5RyxJQUFJLEVBQUVDLFVBQVUsQ0FBQ2dCLElBQUk7UUFDckJDLElBQUksRUFBRXpCLGFBQWEsQ0FBQzBCLEtBQUssRUFBRUMsUUFBUSxDQUFDLENBQUMsSUFBSUMsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBRUMsT0FBTyxDQUFDLGVBQWU7TUFDOUcsQ0FBQyxDQUFDO0lBQ0g7SUFFQSxNQUFNQyw0QkFBNEIsR0FBR3BJLHVDQUF1QyxDQUFDRyxnQkFBZ0IsQ0FBQytFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBRXJIa0QsNEJBQTRCLENBQzFCaEosTUFBTSxDQUFFbUgsU0FBUyxJQUFLO01BQ3RCLE1BQU04QixXQUFXLEdBQUcxRCxpQkFBaUIsQ0FBQzlELDJCQUEyQixDQUFDMEYsU0FBUyxFQUFFK0IsV0FBVyxDQUFDLENBQUM7TUFDMUYsT0FBTyxDQUFDckksdUJBQXVCLENBQUNzSSxRQUFRLENBQUNGLFdBQVksQ0FBQztJQUN2RCxDQUFDLENBQUMsQ0FDREcsT0FBTyxDQUFFakMsU0FBUyxJQUFLO01BQ3ZCLElBQUlBLFNBQVMsQ0FBQ2tDLGVBQWUsRUFBRWhKLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2xELE1BQU0sSUFBSWlKLEtBQUssQ0FBQyx1RUFBdUVuQyxTQUFTLENBQUN3QixLQUFLLEVBQUUsQ0FBQztNQUMxRztNQUNBLElBQUl4QixTQUFTLENBQUNvQyxNQUFNLEVBQUVsSixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUN6QyxNQUFNLElBQUlpSixLQUFLLENBQUMsOERBQThEbkMsU0FBUyxDQUFDd0IsS0FBSyxFQUFFLENBQUM7TUFDakc7TUFDQSxNQUFNYSxpQkFBaUIsR0FBRztRQUN6QkMscUJBQXFCLEVBQUVDLHdCQUF3QixDQUFDdkMsU0FBUyxDQUFDd0MsT0FBTztNQUNsRSxDQUFDO01BRURyQyxhQUFhLENBQUNDLElBQUksQ0FBQztRQUNsQkMsSUFBSSxFQUFFQyxVQUFVLENBQUNtQyxpQ0FBaUM7UUFDbERsQixJQUFJLEVBQUV2QixTQUFTLENBQUN3QixLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDaUIsY0FBYyxFQUFFOUksZ0JBQWdCLENBQUMrSSwrQkFBK0IsQ0FBQzNDLFNBQVMsQ0FBQzRDLGtCQUFrQixDQUFDO1FBQzlGQyxVQUFVLEVBQUVDLFVBQVUsQ0FBQ0MsS0FBSztRQUM1QmpDLE9BQU8sRUFBRTFDLGlCQUFpQixDQUN6QmpELEdBQUcsQ0FDRkgsR0FBRyxDQUFDSSxLQUFLLENBQUNkLDJCQUEyQixDQUFDMEYsU0FBUyxDQUFDdEgsV0FBVyxFQUFFQyxFQUFFLEVBQUVxSyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUNoRmhJLEdBQUcsQ0FBQ0ksS0FBSyxDQUFDVSxXQUFXLENBQUMsNkJBQTZCLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQ3hFLENBQ0QsQ0FBQztRQUNEYyxPQUFPLEVBQ05vRCxTQUFTLENBQUNpRCxtQkFBbUIsS0FBSy9ILFNBQVMsR0FDeENrRCxpQkFBaUIsQ0FBQ2hELEtBQUssQ0FBQ2QsMkJBQTJCLENBQUMwRixTQUFTLENBQUNpRCxtQkFBbUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQzFGLElBQUk7UUFDUnpDLEdBQUcsRUFBRTBDLFNBQVMsQ0FBQ0Msd0JBQXdCLENBQUNuRCxTQUFTLENBQUM7UUFDbERvRCxXQUFXLEVBQUUsSUFBSTtRQUNqQkMsS0FBSyxFQUFFakYsaUJBQWlCLENBQ3ZCa0YsRUFBRSxDQUFDLGtDQUFrQyxFQUFFLENBQ3RDaEosMkJBQTJCLENBQUMwRixTQUFTLENBQUN1RCxjQUFjLENBQUMsRUFDckRqSiwyQkFBMkIsQ0FBQzBGLFNBQVMsQ0FBQ3dELE1BQU0sQ0FBQyxFQUM3Q25CLGlCQUFpQixDQUNqQixDQUNGLENBQUM7UUFDRG9CLFVBQVUsRUFBRXJGLGlCQUFpQixDQUFDO1VBQzdCc0YsY0FBYyxFQUFFcEosMkJBQTJCLENBQUMwRixTQUFTLENBQUN1RCxjQUFjLENBQUM7VUFDckVJLE1BQU0sRUFBRXJKLDJCQUEyQixDQUFDMEYsU0FBUyxDQUFDd0QsTUFBTTtRQUNyRCxDQUFDO01BQ0YsQ0FBcUIsQ0FBQztJQUN2QixDQUFDLENBQUM7SUFDSDtJQUNBM0MsNkJBQTZCLENBQUNWLGFBQWEsRUFBRSxLQUFLLEVBQUVELHlCQUF5QixFQUFFdEcsZ0JBQWdCLENBQUM7SUFFaEcsT0FBT3VHLGFBQWE7RUFDckI7RUFBQzVHLFFBQUEsQ0FBQThFLHVCQUFBLEdBQUFBLHVCQUFBO0VBRU0sU0FBU3VGLHNCQUFzQkEsQ0FBQ2hLLGdCQUF5RCxFQUFnQjtJQUMvRyxNQUFNcEIsVUFBVSxHQUFHb0IsZ0JBQWdCLENBQUMrRSxhQUFhLENBQUMsQ0FBQztJQUNuRCxNQUFNa0YsYUFBYSxHQUFJckwsVUFBVSxDQUFDRSxXQUFXLEVBQUVDLEVBQUUsRUFBRUMsY0FBYyxFQUFFQyxNQUFNLENBQUVDLHVCQUF1QixJQUFLO01BQ3RHLE9BQU9BLHVCQUF1QixFQUFFSixXQUFXLEVBQUVDLEVBQUUsRUFBRXFLLE1BQU0sRUFBRTlKLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSTtJQUM1RSxDQUFDLENBQUMsSUFBSSxFQUFnQztJQUN0QyxPQUFPMkssYUFBYSxDQUFDM0osR0FBRyxDQUFFOEYsU0FBUyxJQUFLO01BQ3ZDLE9BQU87UUFDTkssSUFBSSxFQUFFQyxVQUFVLENBQUN3RCxPQUFPO1FBQ3hCdEQsR0FBRyxFQUFFMEMsU0FBUyxDQUFDQyx3QkFBd0IsQ0FBQ25ELFNBQVM7TUFDbEQsQ0FBQztJQUNGLENBQUMsQ0FBQztFQUNIO0VBQUN6RyxRQUFBLENBQUFxSyxzQkFBQSxHQUFBQSxzQkFBQTtFQUVNLFNBQVNHLHVCQUF1QkEsQ0FDdENuSixTQUFpQixFQUNqQmhCLGdCQUF5RCxFQUN6RHVDLFlBQXNDLEVBQ3ZCO0lBQ2YsTUFBTVgsU0FBUyxHQUFHNUIsZ0JBQWdCLENBQUM2QixZQUFZLENBQUMsQ0FBQztJQUNqRCxNQUFNakQsVUFBVSxHQUFHb0IsZ0JBQWdCLENBQUMrRSxhQUFhLENBQUMsQ0FBQztJQUNuRCxNQUFNRSxzQkFBc0IsR0FBR2xELFdBQVcsQ0FBQ21ELGdCQUFnQixDQUFDdEQsU0FBUyxDQUFDO01BQUU7TUFDdkV3SSxrQkFBa0IsR0FDakJ6RyxXQUFXLENBQUMvQixTQUFTLENBQUMsS0FDckJBLFNBQVMsQ0FBQzlDLFdBQVcsQ0FBQzhFLE1BQU0sRUFBRUMsU0FBUyxFQUFFd0csSUFBSSxJQUFJekksU0FBUyxDQUFDOUMsV0FBVyxDQUFDaUYsT0FBTyxFQUFFQyxzQkFBc0IsRUFBRXFHLElBQUksQ0FBQztNQUMvR0MsYUFBYSxHQUFHbEwsT0FBTyxDQUN0QmdMLGtCQUFrQiwrQ0FBb0MsSUFDcEQ3SCxZQUFZLEVBQUVRLFdBQVcsRUFBa0JDLE9BQU8sSUFDbERpQyxzQkFBc0IsSUFBSUEsc0JBQXNCLEVBQUVzRixVQUNyRCxDQUFDO01BQ0RDLGNBQWMsR0FBR3hKLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBRXVCLFlBQVksRUFBRVEsV0FBVyxFQUFrQkMsT0FBTztNQUN0RnlILGVBQWUsR0FBR3JMLE9BQU8sQ0FDeEJnTCxrQkFBa0IsK0NBQW9DLElBQ3BEN0gsWUFBWSxFQUFFUSxXQUFXLEVBQWtCQyxPQUFPLElBQ2xEaUMsc0JBQXNCLElBQUlBLHNCQUFzQixFQUFFeUYsYUFDckQsQ0FBQztNQUNEQyxtQkFBbUIsR0FDbEIzSixTQUFTLEdBQUcsQ0FBQyxJQUNadUIsWUFBWSxFQUFFUSxXQUFXLEVBQWtCQyxPQUFPLElBQ25ELENBQUVULFlBQVksRUFBRVEsV0FBVyxFQUFrQjZILGNBQWM7O0lBRTdEO0lBQ0EsTUFBTUMseUJBQXlCLEdBQUdsTSxvQ0FBb0MsQ0FBQ3FCLGdCQUFnQixDQUFDK0UsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7O0lBRTlHO0lBQ0EsTUFBTStGLGFBQTJCLEdBQUdELHlCQUF5QixDQUMzRDVMLE1BQU0sQ0FBRW1ILFNBQVMsSUFBSztNQUN0QixNQUFNOEIsV0FBVyxHQUFHMUQsaUJBQWlCLENBQUM5RCwyQkFBMkIsQ0FBQzBGLFNBQVMsRUFBRStCLFdBQVcsQ0FBQyxDQUFDO01BQzFGLE9BQU9ELFdBQVcsSUFBSXBJLHVCQUF1QixDQUFDc0ksUUFBUSxDQUFDRixXQUFXLENBQUM7SUFDcEUsQ0FBQyxDQUFDLENBQ0Q1SCxHQUFHLENBQUU4RixTQUFTLElBQUs7TUFDbkIsT0FBT3FCLDRCQUE0QixDQUFDckIsU0FBUyxFQUFFcEcsZ0JBQWdCLENBQUM7SUFDakUsQ0FBQyxDQUFDO0lBQ0gsSUFBSTJLLG1CQUFtQixFQUFFO01BQ3hCLE1BQU1JLFlBQVksR0FBRy9LLGdCQUFnQixDQUFDZSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMyQixZQUFZLENBQUMsQ0FBQztNQUN6RW9JLGFBQWEsQ0FBQ3RFLElBQUksQ0FBQztRQUNsQkMsSUFBSSxFQUFFQyxVQUFVLENBQUNzRSxVQUFVO1FBQzNCcEUsR0FBRyxFQUFFLGtCQUFrQjtRQUN2Qk0sT0FBTyxFQUFFMUMsaUJBQWlCLENBQUN5Ryw2QkFBNkIsQ0FBQyxDQUFDLENBQUNOLG1CQUFtQixFQUFFSSxZQUFZLENBQUM7TUFDOUYsQ0FBQyxDQUFDO0lBQ0g7SUFDQTtJQUNBLElBQUluSixTQUFTLEVBQUVzSixjQUFjLEtBQUt0TSxVQUFVLEVBQUVvSyxrQkFBa0IsSUFBSXNCLGFBQWEsRUFBRTtNQUNsRlEsYUFBYSxDQUFDdEUsSUFBSSxDQUFDO1FBQUVDLElBQUksRUFBRUMsVUFBVSxDQUFDVSxPQUFPO1FBQUVSLEdBQUcsRUFBRTtNQUFhLENBQUMsQ0FBQztJQUNwRTs7SUFFQTtJQUNBLElBQUk0RCxjQUFjLEVBQUU7TUFDbkJNLGFBQWEsQ0FBQ3RFLElBQUksQ0FBQztRQUFFQyxJQUFJLEVBQUVDLFVBQVUsQ0FBQ3lFLFlBQVk7UUFBRXZFLEdBQUcsRUFBRTtNQUFjLENBQUMsQ0FBQztJQUMxRTtJQUNBO0lBQ0FpRSx5QkFBeUIsQ0FDdkI1TCxNQUFNLENBQUVtSCxTQUFTLElBQUs7TUFDdEIsTUFBTThCLFdBQVcsR0FBRzFELGlCQUFpQixDQUFDOUQsMkJBQTJCLENBQUMwRixTQUFTLEVBQUUrQixXQUFXLENBQUMsQ0FBQztNQUMxRixPQUFPRCxXQUFXLElBQUksQ0FBQ3BJLHVCQUF1QixDQUFDc0ksUUFBUSxDQUFDRixXQUFXLENBQUM7SUFDckUsQ0FBQyxDQUFDLENBQ0RHLE9BQU8sQ0FBRWpDLFNBQVMsSUFBSztNQUN2QjBFLGFBQWEsQ0FBQ3RFLElBQUksQ0FBQ2lCLDRCQUE0QixDQUFDckIsU0FBUyxFQUFFcEcsZ0JBQWdCLENBQUMsQ0FBQztJQUM5RSxDQUFDLENBQUM7O0lBRUg7SUFDQSxJQUFJeUssZUFBZSxFQUFFO01BQ3BCSyxhQUFhLENBQUN0RSxJQUFJLENBQUM7UUFDbEJDLElBQUksRUFBRUMsVUFBVSxDQUFDYSxTQUFTO1FBQzFCWCxHQUFHLEVBQUUsY0FBYztRQUNuQndFLFFBQVEsRUFBRTtVQUFFQyxTQUFTLEVBQUVDLFNBQVMsQ0FBQ0M7UUFBSTtNQUN0QyxDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU9ULGFBQWE7RUFDckI7RUFBQ25MLFFBQUEsQ0FBQXdLLHVCQUFBLEdBQUFBLHVCQUFBO0VBRUQsU0FBUzFDLDRCQUE0QkEsQ0FDcENyQixTQUFrQyxFQUNsQ3BHLGdCQUF5RCxFQUN0QztJQUNuQixJQUFJd0wsWUFBWSxHQUFHQyxTQUFTLENBQUNyRixTQUFTLENBQUM7SUFDdkMsTUFBTWYsbUJBQW1CLEdBQ3hCdEQsV0FBVyxDQUFDdUQsaURBQWlELENBQUN0RixnQkFBZ0IsQ0FBQyxJQUMvRStCLFdBQVcsQ0FBQ3FELFlBQVksQ0FBQ3BGLGdCQUFnQixDQUFDNkIsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUMxRCxJQUFJd0QsbUJBQW1CLEVBQUU7TUFDeEJtRyxZQUFZLEdBQUdqSyxHQUFHLENBQUNpSyxZQUFZLEVBQUVwSyxHQUFHLENBQUNJLEtBQUssQ0FBQ3pDLEVBQUUsQ0FBQ29JLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEY7SUFDQSxPQUFPO01BQ05WLElBQUksRUFBRUMsVUFBVSxDQUFDZ0Ysa0JBQWtCO01BQ25DNUMsY0FBYyxFQUFFOUksZ0JBQWdCLENBQUMrSSwrQkFBK0IsQ0FBQzNDLFNBQVMsQ0FBQzRDLGtCQUFrQixDQUFDO01BQzlGcEMsR0FBRyxFQUFFMEMsU0FBUyxDQUFDQyx3QkFBd0IsQ0FBQ25ELFNBQVMsQ0FBQztNQUNsRGMsT0FBTyxFQUFFMUMsaUJBQWlCLENBQUNnSCxZQUFZLENBQUM7TUFDeEN4SSxPQUFPLEVBQUUySSw2QkFBNkIsQ0FBQzNMLGdCQUFnQixFQUFFb0csU0FBUyxDQUFDN0csWUFBWSxDQUFDO01BQ2hGaUssV0FBVyxFQUFFLElBQUk7TUFDakJvQyxhQUFhLEVBQUVDLG1CQUFtQixDQUFDekYsU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJOUU7SUFDM0QsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzJGLDZCQUE2QkEsQ0FDckNWLGFBQTJCLEVBQzNCdUYscUJBQThCLEVBQzlCQyxpQ0FBNkYsRUFDN0YvTCxnQkFBeUQsRUFDbEQ7SUFDUCtMLGlDQUFpQyxDQUMvQjlNLE1BQU0sQ0FBRW1ILFNBQVMsSUFBSztNQUN0QixNQUFNOEIsV0FBVyxHQUFHMUQsaUJBQWlCLENBQUM5RCwyQkFBMkIsQ0FBQzBGLFNBQVMsRUFBRStCLFdBQVcsQ0FBQyxDQUFDO01BQzFGLE9BQU8yRCxxQkFBcUIsR0FBR2hNLHVCQUF1QixDQUFDc0ksUUFBUSxDQUFDRixXQUFZLENBQUMsR0FBRyxDQUFDcEksdUJBQXVCLENBQUNzSSxRQUFRLENBQUNGLFdBQVksQ0FBQztJQUNoSSxDQUFDLENBQUMsQ0FDREcsT0FBTyxDQUFFakMsU0FBUyxJQUFLO01BQ3ZCLElBQUlBLFNBQVMsQ0FBQ2pILEtBQUssb0RBQXlDLEVBQUU7UUFDN0RvSCxhQUFhLENBQUNDLElBQUksQ0FBQ2lCLDRCQUE0QixDQUFDckIsU0FBUyxFQUFFcEcsZ0JBQWdCLENBQUMsQ0FBQztNQUM5RSxDQUFDLE1BQU0sSUFBSW9HLFNBQVMsQ0FBQ2pILEtBQUsseURBQThDLEVBQUU7UUFDekUsSUFBSXFNLFlBQVksR0FBR3BLLEdBQUcsQ0FBQ0ksS0FBSyxDQUFDZCwyQkFBMkIsQ0FBQzBGLFNBQVMsQ0FBQ3RILFdBQVcsRUFBRUMsRUFBRSxFQUFFcUssTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkcsTUFBTS9ELG1CQUFtQixHQUN4QnRELFdBQVcsQ0FBQ3VELGlEQUFpRCxDQUFDdEYsZ0JBQWdCLENBQUMsSUFDL0UrQixXQUFXLENBQUNxRCxZQUFZLENBQUNwRixnQkFBZ0IsQ0FBQzZCLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSXdELG1CQUFtQixFQUFFO1VBQ3hCbUcsWUFBWSxHQUFHakssR0FBRyxDQUFDaUssWUFBWSxFQUFFcEssR0FBRyxDQUFDSSxLQUFLLENBQUN6QyxFQUFFLENBQUNvSSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RGO1FBQ0FaLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDO1VBQ2xCQyxJQUFJLEVBQUVDLFVBQVUsQ0FBQ3NGLElBQUk7VUFDckJyRSxJQUFJLEVBQUV2QixTQUFTLENBQUN3QixLQUFlO1VBQy9CaEIsR0FBRyxFQUFFMEMsU0FBUyxDQUFDQyx3QkFBd0IsQ0FBQ25ELFNBQVMsQ0FBQztVQUNsRDZGLEVBQUUsRUFBRTNDLFNBQVMsQ0FBQ0Msd0JBQXdCLENBQUNuRCxTQUFTLENBQUM7VUFDakRjLE9BQU8sRUFBRTFDLGlCQUFpQixDQUFDZ0gsWUFBWSxDQUFDO1VBQ3hDVSxJQUFJLEVBQUU5RixTQUFTLENBQUMrRixPQUFPLENBQUM3TCxHQUFHLENBQUV5SixNQUFNLElBQ2xDdEMsNEJBQTRCLENBQUNzQyxNQUFNLEVBQTZCL0osZ0JBQWdCLENBQ2pGLENBQUM7VUFDRDRMLGFBQWEsRUFBRVEsaUJBQWlCLENBQUNoRyxTQUFTLENBQUMrRixPQUFPLENBQUMsS0FBSyxJQUFJLElBQUk3SztRQUNqRSxDQUFDLENBQUM7TUFDSDtJQUNELENBQUMsQ0FBQztFQUNKO0VBQUMsT0FBQTNCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -28,6 +28,7 @@ import {
28
28
  ButtonType,
29
29
  dataFieldIsCopyAction,
30
30
  getCopyAction,
31
+ getCreateNextButtonVisibility,
31
32
  getEnabledForAnnotationAction,
32
33
  getEnabledForAnnotationActionExpression,
33
34
  getSemanticObjectMapping,
@@ -518,7 +519,12 @@ export function getFooterDefaultActions(
518
519
  return getDataFieldAnnotationAction(dataField, converterContext);
519
520
  });
520
521
  if (conditionCreateNext) {
521
- footerActions.push({ type: ActionType.CreateNext, key: "CreateNextAction" });
522
+ const ifFCLEnabled = converterContext.getManifestWrapper().isFclEnabled();
523
+ footerActions.push({
524
+ type: ActionType.CreateNext,
525
+ key: "CreateNextAction",
526
+ visible: compileExpression(getCreateNextButtonVisibility(!!conditionCreateNext, ifFCLEnabled))
527
+ });
522
528
  }
523
529
  // Then the save action if it exists
524
530
  if (entitySet?.entityTypeName === entityType?.fullyQualifiedName && conditionSave) {