@sapui5/sap.fe.core 1.136.7 → 1.136.9

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 (56) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +28 -16
  4. package/src/sap/fe/core/AppComponent.ts +36 -20
  5. package/src/sap/fe/core/AppStateHandler.js +6 -5
  6. package/src/sap/fe/core/AppStateHandler.ts +5 -5
  7. package/src/sap/fe/core/CommonUtils.js +22 -2
  8. package/src/sap/fe/core/CommonUtils.ts +22 -4
  9. package/src/sap/fe/core/ExtensionAPI.js +5 -2
  10. package/src/sap/fe/core/ExtensionAPI.ts +7 -1
  11. package/src/sap/fe/core/PageController.js +4 -4
  12. package/src/sap/fe/core/PageController.ts +3 -3
  13. package/src/sap/fe/core/TemplateComponent.js +3 -3
  14. package/src/sap/fe/core/TemplateComponent.ts +2 -2
  15. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +6 -2
  16. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +8 -1
  17. package/src/sap/fe/core/controllerextensions/EditFlow.js +159 -34
  18. package/src/sap/fe/core/controllerextensions/EditFlow.ts +177 -39
  19. package/src/sap/fe/core/controllerextensions/SideEffects.js +7 -3
  20. package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
  21. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +28 -17
  22. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +35 -18
  23. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +5 -2
  24. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +3 -1
  25. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +13 -9
  26. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +13 -9
  27. package/src/sap/fe/core/converters/annotations/DataField.js +6 -2
  28. package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
  29. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
  30. package/src/sap/fe/core/converters/controls/Common/Action.ts +7 -4
  31. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +6 -5
  32. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +5 -4
  33. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +2 -2
  34. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -1
  35. package/src/sap/fe/core/fpm/manifest.json +1 -1
  36. package/src/sap/fe/core/helpers/DeleteHelper.js +8 -9
  37. package/src/sap/fe/core/helpers/DeleteHelper.ts +10 -8
  38. package/src/sap/fe/core/library.js +3 -7
  39. package/src/sap/fe/core/library.ts +5 -21
  40. package/src/sap/fe/core/messagebundle_da.properties +3 -3
  41. package/src/sap/fe/core/messagebundle_es.properties +1 -1
  42. package/src/sap/fe/core/messagebundle_fr.properties +9 -9
  43. package/src/sap/fe/core/messagebundle_hu.properties +1 -1
  44. package/src/sap/fe/core/messagebundle_id.properties +1 -1
  45. package/src/sap/fe/core/messagebundle_ja.properties +1 -1
  46. package/src/sap/fe/core/messagebundle_lv.properties +1 -1
  47. package/src/sap/fe/core/messagebundle_uk.properties +1 -1
  48. package/src/sap/fe/core/messagebundle_zh_CN.properties +1 -1
  49. package/src/sap/fe/core/rootView/RootViewBaseController.js +17 -17
  50. package/src/sap/fe/core/rootView/RootViewBaseController.ts +24 -29
  51. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +13 -6
  52. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +17 -5
  53. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  54. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  55. package/src/sap/fe/core/templating/UIFormatters.js +2 -2
  56. package/src/sap/fe/core/templating/UIFormatters.ts +1 -1
@@ -361,7 +361,7 @@ function addTextArrangentInfoToProperty(
361
361
  tableColumns: TableColumn[],
362
362
  tableColumn: AnnotationTableColumn
363
363
  ): void {
364
- const displayMode = getDisplayMode(property),
364
+ const displayMode = getDisplayMode(property, propertyDataModelObjectPath.targetEntityType),
365
365
  textPropertyPath = getAssociatedTextPropertyPath(property);
366
366
  if (textPropertyPath && displayMode !== "Value") {
367
367
  const textPropertyDataModelObjectPath = enhanceDataModelPath<Property>(propertyDataModelObjectPath, textPropertyPath);
@@ -479,7 +479,7 @@ export const getColumnsFromEntityType = function (
479
479
  // In case a property has defined a #TextOnly text arrangement that points to a text property (and not a 'hard coded text') don't only create the complex property with the text property as a child property,
480
480
  // but also the property itself as it can be used as within the sortConditions or on custom columns.
481
481
  // This step must be valid also from the columns added via LineItems or from a column available on the p13n.
482
- if (getDisplayMode(property) === "Description") {
482
+ if (getDisplayMode(property, entityType) === "Description") {
483
483
  restrictionsOnProperties?.nonSortableProperties.push(property.name);
484
484
  if (isPathAnnotationExpression(property?.annotations?.Common?.Text)) {
485
485
  annotationColumns.push(
@@ -664,7 +664,8 @@ const createColumnExportSettings = function (
664
664
  template: relatedPropertiesInfo?.exportSettings.template,
665
665
  //only in case of complex properties, wrap the cell content on the excel exported file
666
666
  wrap: relatedPropertiesInfo?.exportSettings.wrap,
667
- utc: utc
667
+ utc: utc,
668
+ property: relatedPropertiesInfo?.exportSettings.property
668
669
  };
669
670
  if (exportSettings.unitProperty || exportSettings.unit) {
670
671
  exportSettings.autoScale = true;
@@ -2174,7 +2175,7 @@ function createPropertyAnnotatedTextOnly(
2174
2175
  restrictionsOnProperties.nonSortableProperties.push(relativePath);
2175
2176
  } else if (isDataFieldForAnnotation(lineItem) && hasFieldGroupTarget(lineItem)) {
2176
2177
  (lineItem.Target.$target as FieldGroup).Data.forEach((field) => {
2177
- if (isDataField(field) && getDisplayMode(field.Value.$target) === "Description") {
2178
+ if (isDataField(field) && getDisplayMode(field.Value.$target, propertyDataModelObjectPath.targetEntityType) === "Description") {
2178
2179
  const inheredPropertyDataModelObjectPath = enhanceDataModelPath(
2179
2180
  converterContext.getDataModelObjectPath(),
2180
2181
  field.Value.path
@@ -162,7 +162,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
162
162
  * @returns The current custom section
163
163
  */
164
164
  function getSectionFromManifest(customSectionDefinition, sectionKey, converterContext) {
165
- const customSectionID = customSectionDefinition.id || getCustomSectionID(sectionKey);
165
+ const customSectionID = customSectionDefinition.id ? getCustomSectionID(customSectionDefinition.id) : getCustomSectionID(sectionKey);
166
166
  let position = customSectionDefinition.position;
167
167
  if (!position) {
168
168
  position = {
@@ -527,4 +527,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
527
527
  _exports.convertPage = convertPage;
528
528
  return _exports;
529
529
  }, false);
530
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTZWN0aW9uS2V5IiwiZmFjZXREZWZpbml0aW9uIiwiZmFsbGJhY2siLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiYWxsSGVhZGVyRmFjZXRzIiwiZWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCIsImhlYWRlckZhY2V0cyIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVyRmFjZXRzIiwiaGVhZGVyZmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyIsImxlbmd0aCIsImkiLCJmb3JFYWNoIiwiaXRlbSIsInZpc2libGUiLCJwdXNoIiwia2V5Iiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsImN1c3RvbUl0ZW0iLCJoZWFkZXJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiSXNFZGl0YWJsZSIsInN1YlNlY3Rpb25zIiwiX2V4cG9ydHMiLCJnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uIiwiZW50aXR5VHlwZSIsIm9iamVjdFBhZ2VTZWN0aW9ucyIsIkZhY2V0cyIsIm1hcCIsImdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbiIsImdldFVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIiwibWFuaWZlc3RXcmFwcGVyIiwic2VjdGlvbktleSIsInNlY3Rpb25zSW5NYW5pZmVzdCIsImdldFNlY3Rpb25zIiwic2VjdGlvblNldHRpbmdzIiwidXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMiLCJmYWNldCIsInNlY3Rpb25JRCIsImdldFNlY3Rpb25JRCIsImhpZGRlbkV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJIaWRkZW4iLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImdldE1hbmlmZXN0V3JhcHBlciIsInNlY3Rpb24iLCJ1bmRlZmluZWQiLCJzaG93VGl0bGUiLCJub3QiLCJlcXVhbCIsImdldFNlY3Rpb25zRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RTZWN0aW9ucyIsInNlY3Rpb25zIiwiT2JqZWN0Iiwia2V5cyIsIm1hbmlmZXN0U2VjdGlvbktleSIsImdldFNlY3Rpb25Gcm9tTWFuaWZlc3QiLCJjdXN0b21TZWN0aW9uRGVmaW5pdGlvbiIsImN1c3RvbVNlY3Rpb25JRCIsImdldEN1c3RvbVNlY3Rpb25JRCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwiYXBwbHlTdGF0ZSIsInJldHJpZXZlU3RhdGUiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsImN1c3RvbVNlY3Rpb24iLCJvblNlY3Rpb25Mb2FkZWQiLCJnZXRIZWFkZXJBY3Rpb25zIiwiY2FwYWJpbGl0aWVzIiwiYW5ub3RhdGlvbkhlYWRlckFjdGlvbnMiLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImlzTmF2aWdhYmxlIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlZCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImNvbW1hbmQiLCJtZW51IiwibWFuaWZlc3RBY3Rpb25zIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImdldEhpZGRlbkhlYWRlckFjdGlvbnMiLCJhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zIiwiZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsIm1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zIiwiZ2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbiIsImFjdGlvbnMiLCJvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiaGVhZGVyQWN0aW9ucyIsInByZXBhcmVNZW51QWN0aW9ucyIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zIiwiY29tbWFuZEFjdGlvbnMiLCJnZXRGb290ZXJBY3Rpb25zIiwiYUFubm90YXRpb25Gb290ZXJBY3Rpb25zIiwiZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnMiLCJnZXRWaWV3TGV2ZWwiLCJmb290ZXJBY3Rpb25zIiwiX2dldFN1YlNlY3Rpb25WaXN1YWxpemF0aW9uIiwic3ViU2VjdGlvbiIsInByZXNlbnRhdGlvbiIsInZpc3VhbGl6YXRpb25zIiwiX2lzRmFjZXRIYXNOb25SZXNwb25zaXZlVGFibGVWaXNpYmxlIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwic3ViU2VjdGlvblZpc3VhbGl6YXRpb24iLCJ0eXBlIiwiY29udHJvbCIsIl9zZXROb25SZXNwb25zaXZlVGFibGVWaXN1YWxpemF0aW9uSW5mb3JtYXRpb24iLCJzZWN0aW9uTGF5b3V0IiwidGFibGVDb250cm9sQ29uZmlndXJhdGlvbiIsImRhdGFWaXN1YWxpemF0aW9uT3B0aW9ucyIsInJvd0NvdW50TW9kZSIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX3NldE5vblJlc3BvbnNpdmVUYWJsZVdpdGhNaXhGYWNldHNJbmZvcm1hdGlvbiIsImZpcnN0U2VjdGlvbiIsImNvbnRlbnQiLCJTdWJTZWN0aW9uVHlwZSIsIkRhdGFWaXN1YWxpemF0aW9uIiwidGFibGVDb250cm9sIiwiX3NldE5vblJlc3BvbnNpdmVUYWJsZVN1YlNlY3Rpb25Db250cm9sQ29uZmlndXJhdGlvbiIsIl9yZW1vdmVDb25kZW5zZWRGcm9tU3ViU2VjdGlvbnMiLCJzaW5nbGVWaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsInNpbmdsZUNvbnRlbnQiLCJtZXJnZSIsInNpZGVDb250ZW50Iiwib2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkIiwiZ2V0U2VjdGlvbkxheW91dCIsImZpcnN0Rm9ybSIsImZpbmQiLCJlbGVtZW50IiwiRm9ybSIsImhhc0hlYWRlckNvbnRlbnQiLCJnZXRIZWFkZXJGYWNldHMiLCJnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24iLCJpZkVsc2UiLCJjb25zdGFudCIsImlzSGVhZGVyRWRpdGFibGUiLCJnZXRTaG93SGVhZGVyQ29udGVudCIsImdldEVhc3lGaWxsVmlzaWJsZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzVXBkYXRlSGlkZGVuIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0RW5hYmxlZCIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzU3RpY2t5Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ2aWV3TGV2ZWwiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJDYXBhYmlsaXRpZXMiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJpc0VkaXRFbmFibGVkIiwiZ2V0RWRpdEJ1dHRvbkVuYWJsZWRFeHByZXNzaW9uIiwiYW5kIiwiZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUiLCJjb252ZXJ0UGFnZSIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdCIsIkhlYWRlckluZm8iLCJ0ZW1wbGF0ZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJoZWFkZXIiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImZhY2V0cyIsImVhc3lGaWxsVmlzaWJsZSIsInNob3dDb250ZW50IiwiaGFzQ29udGVudCIsImF2YXRhciIsImdldEF2YXRhciIsImV4cGFuZGVkSW1hZ2VWaXNpYmxlIiwiaGVhZGVyQ29tbWFuZEFjdGlvbnMiLCJmb290ZXJDb21tYW5kQWN0aW9ucyIsInNob3dBbmNob3JCYXIiLCJnZXRTaG93QW5jaG9yQmFyIiwidXNlSWNvblRhYkJhciIsInRyYW5zcG9ydFNlbGVjdGlvbiIsImdldFRyYW5zcG9ydFNlbGVjdGlvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRmFjZXRUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYW5kLCBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGVxdWFsLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIGlmRWxzZSwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24sIENvbWJpbmVkQWN0aW9uLCBDdXN0b21BY3Rpb24sIE92ZXJyaWRlVHlwZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsXG5cdGdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24sXG5cdGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMsXG5cdHByZXBhcmVNZW51QWN0aW9ucyxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHtcblx0Z2V0RWRpdEJ1dHRvbkVuYWJsZWRFeHByZXNzaW9uLFxuXHRnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMsXG5cdGdldEhpZGRlbkhlYWRlckFjdGlvbnNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvb2JqZWN0UGFnZS9IZWFkZXJBbmRGb290ZXJBY3Rpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgVUksIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudENhcGFiaWxpdGllcyB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0U2VjdGlvbiwgTWFuaWZlc3RTdWJTZWN0aW9uLCBUcmFuc3BvcnRTZWxlY3Rpb25EZWZpbml0aW9uIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSwgVmlzdWFsaXphdGlvblR5cGUgfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCIuLi9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0LCBQYWdlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBBdmF0YXIgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9BdmF0YXJcIjtcbmltcG9ydCB7IGdldEF2YXRhciB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL0F2YXRhclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zLCBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHR5cGUge1xuXHRDdXN0b21PYmplY3RQYWdlU2VjdGlvbixcblx0RGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRGb3JtU3ViU2VjdGlvbixcblx0TWl4ZWRTdWJTZWN0aW9uLFxuXHRPYmplY3RQYWdlU2VjdGlvbixcblx0T2JqZWN0UGFnZVN1YlNlY3Rpb25cbn0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvU3ViU2VjdGlvblwiO1xuaW1wb3J0IHtcblx0U3ViU2VjdGlvblR5cGUsXG5cdGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMsXG5cdGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zLFxuXHRjcmVhdGVTdWJTZWN0aW9uc1xufSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9TdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZVJlY29yZCwgUG9zaXRpb24gfSBmcm9tIFwiLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCIuLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgZ2V0Q3VzdG9tU2VjdGlvbklELCBnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCwgZ2V0U2VjdGlvbklEIH0gZnJvbSBcIi4uL2hlbHBlcnMvSURcIjtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZURlZmluaXRpb24gPSBQYWdlRGVmaW5pdGlvbiAmIHtcblx0aGVhZGVyOiB7XG5cdFx0dmlzaWJsZTogYm9vbGVhbjtcblx0XHRzZWN0aW9uPzogT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0ZmFjZXRzOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXTtcblx0XHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdFx0ZWFzeUZpbGxWaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHRzaG93Q29udGVudDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0aGFzQ29udGVudDogYm9vbGVhbjtcblx0XHRhdmF0YXI/OiBBdmF0YXI7XG5cdFx0dGl0bGU6IHtcblx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR9O1xuXHR9O1xuXHRzZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Zm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRoZWFkZXJDb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0Zm9vdGVyQ29tbWFuZEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG5cdHNob3dBbmNob3JCYXI6IGJvb2xlYW47XG5cdHVzZUljb25UYWJCYXI6IGJvb2xlYW47XG5cdHRyYW5zcG9ydFNlbGVjdGlvbj86IFRyYW5zcG9ydFNlbGVjdGlvbkRlZmluaXRpb247XG59O1xuXG5jb25zdCBnZXRTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VjdGlvbiB0aGF0IHJlcHJlc2VudHMgdGhlIGVkaXRhYmxlIGhlYWRlciBwYXJ0OyBpdCBpcyBvbmx5IHZpc2libGUgaW4gZWRpdCBtb2RlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYWxsSGVhZGVyRmFjZXRzIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHNlY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbGxIZWFkZXJGYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdXG4pOiBPYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklEID0gZ2V0RWRpdGFibGVIZWFkZXJTZWN0aW9uSUQoKTtcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJGYWNldHM7XG5cdGNvbnN0IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnMgPSBoZWFkZXJGYWNldHMgPyBjcmVhdGVTdWJTZWN0aW9ucyhoZWFkZXJGYWNldHMsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpIDogW107XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMgPSBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblx0aWYgKGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdC8vIG1lcmdlIGFubm90YXRpb24gYmFzZWQgaGVhZGVyIGZhY2V0cyBhbmQgY3VzdG9tIGhlYWRlciBmYWNldHMgaW4gdGhlIHJpZ2h0IG9yZGVyXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGFsbEhlYWRlckZhY2V0cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHQvLyBoaWRkZW4gaGVhZGVyIGZhY2V0cyBhcmUgbm90IGluY2x1ZGVkIGluIGFsbEhlYWRlckZhY2V0cyBhcnJheSA9PiBhZGQgdGhlbSBhbnl3YXlcblx0XHRcdHdoaWxlIChoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiYgaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS52aXNpYmxlID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMucHVzaChoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldKTtcblx0XHRcdFx0aSsrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiZcblx0XHRcdFx0KGl0ZW0ua2V5ID09PSBoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldLmtleSB8fFxuXHRcdFx0XHRcdC8vIGZvciBoZWFkZXIgZmFjZXRzIHdpdGggbm8gaWQgdGhlIGtleXMgb2YgaGVhZGVyIGZhY2V0IGFuZCBzdWJzZWN0aW9uIGFyZSBkaWZmZXJlbnQgPT4gY2hlY2sgb25seSB0aGUgbGFzdCBwYXJ0XG5cdFx0XHRcdFx0aXRlbS5rZXkuc2xpY2UoaXRlbS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpID09PVxuXHRcdFx0XHRcdFx0aGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkuc2xpY2UoaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoY3VzdG9tSXRlbSkge1xuXHRcdFx0XHRcdGlmIChpdGVtLmtleSA9PT0gY3VzdG9tSXRlbS5rZXkpIHtcblx0XHRcdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goY3VzdG9tSXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyA9IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnM7XG5cdH1cblx0Y29uc3QgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklELFxuXHRcdGtleTogXCJFZGl0YWJsZUhlYWRlckNvbnRlbnRcIixcblx0XHR0aXRsZTogXCJ7c2FwLmZlLmkxOG4+VF9DT01NT05fT0JKRUNUX1BBR0VfSEVBREVSX1NFQ1RJT059XCIsXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oVUkuSXNFZGl0YWJsZSksXG5cdFx0c3ViU2VjdGlvbnM6IGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zXG5cdH07XG5cdHJldHVybiBoZWFkZXJTZWN0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkZWZpbml0aW9uIGZvciBhIHNlY3Rpb24gYmFzZWQgb24gdGhlIEZhY2V0IGFubm90YXRpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFsbCBzZWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IG9iamVjdFBhZ2VTZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXSA9XG5cdFx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubWFwKChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpID0+XG5cdFx0XHRnZXRTZWN0aW9uRnJvbUFubm90YXRpb24oZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdCkgfHwgW107XG5cdHJldHVybiBvYmplY3RQYWdlU2VjdGlvbnM7XG59XG5cbi8qKlxuICogQ2hlY2sgbWFuaWZlc3QgZm9yIHNldHRpbmcgJ3VzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzJy5cbiAqIElmIHRoaXMgc2V0dGluZyBpcyB0cnVlLCB0aGVuIHRoZSBsYWJlbCBvZiB0aGUgc2luZ2xlIHRleHQtYXJlYSBmaWVsZCBpbiBhIGZvcm0gY29udGFpbmVyIHdpbGwgYmUgaGlkZGVuLlxuICogQHBhcmFtIG1hbmlmZXN0V3JhcHBlclxuICogQHBhcmFtIHNlY3Rpb25LZXlcbiAqIEByZXR1cm5zIElmIHRoZSBmb3JtIGVsZW1lbnQncyBsYWJlbCBuZWVkcyB0byBiZSBoaWRkZW4uXG4gKi9cbmZ1bmN0aW9uIGdldFVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzKG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyLCBzZWN0aW9uS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcblx0Y29uc3Qgc2VjdGlvbnNJbk1hbmlmZXN0ID0gbWFuaWZlc3RXcmFwcGVyLmdldFNlY3Rpb25zKCk7XG5cdGNvbnN0IHNlY3Rpb25TZXR0aW5ncyA9IHNlY3Rpb25zSW5NYW5pZmVzdD8uW3NlY3Rpb25LZXldO1xuXHRyZXR1cm4gc2VjdGlvblNldHRpbmdzPy51c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyA/PyBmYWxzZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYW5ub3RhdGlvbiBiYXNlZCBzZWN0aW9uLlxuICogQHBhcmFtIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgc2VjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uRnJvbUFubm90YXRpb24oZmFjZXQ6IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IE9iamVjdFBhZ2VTZWN0aW9uIHtcblx0Y29uc3Qgc2VjdGlvbklEID0gZ2V0U2VjdGlvbklEKGZhY2V0KTtcblx0Y29uc3Qgc2VjdGlvbktleSA9IGdldFNlY3Rpb25LZXkoZmFjZXQsIHNlY3Rpb25JRCk7XG5cdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0Y29uc3QgaGlkZGVuRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiwgW10sIGZhbHNlLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdCk7XG5cdGNvbnN0IHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzID0gZ2V0VXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSwgc2VjdGlvbktleSk7XG5cdGNvbnN0IHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBzZWN0aW9uSUQsXG5cdFx0a2V5OiBzZWN0aW9uS2V5LFxuXHRcdHRpdGxlOiBmYWNldC5MYWJlbCA/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldC5MYWJlbCkpIDogdW5kZWZpbmVkLFxuXHRcdHNob3dUaXRsZTogISFmYWNldC5MYWJlbCxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoaGlkZGVuRXhwcmVzc2lvbiwgdHJ1ZSkpKSxcblx0XHRzdWJTZWN0aW9uczogY3JlYXRlU3ViU2VjdGlvbnMoW2ZhY2V0XSwgY29udmVydGVyQ29udGV4dCwgdW5kZWZpbmVkLCB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyksXG5cdFx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM6IHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzXG5cdH07XG5cdHJldHVybiBzZWN0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgc2VjdGlvbiBkZWZpbml0aW9ucyBiYXNlZCBvbiB0aGUgbWFuaWZlc3QgZGVmaW5pdGlvbnMuXG4gKiBAcGFyYW0gbWFuaWZlc3RTZWN0aW9ucyBUaGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdG1hbmlmZXN0U2VjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uPiB7XG5cdGNvbnN0IHNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU2VjdGlvbj4gPSB7fTtcblx0T2JqZWN0LmtleXMobWFuaWZlc3RTZWN0aW9ucykuZm9yRWFjaCgobWFuaWZlc3RTZWN0aW9uS2V5KSA9PiB7XG5cdFx0c2VjdGlvbnNbbWFuaWZlc3RTZWN0aW9uS2V5XSA9IGdldFNlY3Rpb25Gcm9tTWFuaWZlc3QobWFuaWZlc3RTZWN0aW9uc1ttYW5pZmVzdFNlY3Rpb25LZXldLCBtYW5pZmVzdFNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9KTtcblx0cmV0dXJuIHNlY3Rpb25zO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG1hbmlmZXN0LWJhc2VkIGN1c3RvbSBzZWN0aW9uLlxuICogQHBhcmFtIGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uXG4gKiBAcGFyYW0gc2VjdGlvbktleVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGN1c3RvbSBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25Gcm9tTWFuaWZlc3QoXG5cdGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uOiBNYW5pZmVzdFNlY3Rpb24sXG5cdHNlY3Rpb25LZXk6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGN1c3RvbVNlY3Rpb25JRCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLmlkIHx8IGdldEN1c3RvbVNlY3Rpb25JRChzZWN0aW9uS2V5KTtcblx0bGV0IHBvc2l0aW9uOiBQb3NpdGlvbiB8IHVuZGVmaW5lZCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0bGV0IG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj47XG5cdGlmICghY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uc3ViU2VjdGlvbnMpIHtcblx0XHQvLyBJZiB0aGVyZSBpcyBubyBzdWJTZWN0aW9uIGRlZmluZWQsIHdlIGFkZCB0aGUgY29udGVudCBvZiB0aGUgY3VzdG9tIHNlY3Rpb24gYXMgc3Vic2VjdGlvbnNcblx0XHQvLyBhbmQgbWFrZSBzdXJlIHRvIHNldCB0aGUgdmlzaWJpbGl0eSB0byAndHJ1ZScsIGFzIHRoZSBhY3R1YWwgdmlzaWJpbGl0eSBpcyBoYW5kbGVkIGJ5IHRoZSBzZWN0aW9uIGl0c2VsZlxuXHRcdG1hbmlmZXN0U3ViU2VjdGlvbnMgPSB7XG5cdFx0XHRbc2VjdGlvbktleV06IHtcblx0XHRcdFx0Li4uY3VzdG9tU2VjdGlvbkRlZmluaXRpb24sXG5cdFx0XHRcdHBvc2l0aW9uOiB1bmRlZmluZWQsXG5cdFx0XHRcdHZpc2libGU6IFwidHJ1ZVwiLFxuXHRcdFx0XHRhcHBseVN0YXRlOiB1bmRlZmluZWQsXG5cdFx0XHRcdHJldHJpZXZlU3RhdGU6IHVuZGVmaW5lZFxuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0bWFuaWZlc3RTdWJTZWN0aW9ucyA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMobWFuaWZlc3RTdWJTZWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgY3VzdG9tU2VjdGlvbjogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGN1c3RvbVNlY3Rpb25JRCxcblx0XHRrZXk6IHNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnRpdGxlLFxuXHRcdHNob3dUaXRsZTogISFjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi50aXRsZSxcblx0XHR2aXNpYmxlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlIDogXCJ0cnVlXCIsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHN1YlNlY3Rpb25zOiBzdWJTZWN0aW9ucyxcblx0XHRvblNlY3Rpb25Mb2FkZWQ6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLm9uU2VjdGlvbkxvYWRlZCxcblx0XHRhcHBseVN0YXRlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5hcHBseVN0YXRlLFxuXHRcdHJldHJpZXZlU3RhdGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnJldHJpZXZlU3RhdGVcblx0fTtcblx0cmV0dXJuIGN1c3RvbVNlY3Rpb247XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBPYmplY3RQYWdlIGhlYWRlciBhY3Rpb25zIChib3RoIHRoZSBkZWZhdWx0IG9uZXMgYW5kIHRoZSBjdXN0b20gb25lcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjYXBhYmlsaXRpZXNcbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGlzIE9iamVjdFBhZ2UgaGVhZGVyXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJBY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdC8vIDEuIEdldCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnNcblx0Y29uc3QgYW5ub3RhdGlvbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQsIGNhcGFiaWxpdGllcyk7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRtZW51OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH07XG5cdC8vIDIuIEdldCBhY3Rpb25zIGZyb20gbWFuaWZlc3Rcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyQWN0aW9ucygpLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0YW5ub3RhdGlvbkhlYWRlckFjdGlvbnMsXG5cdFx0dW5kZWZpbmVkLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRnZXRIaWRkZW5IZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpXG5cdCk7XG5cdC8vIDMuIEdldCBhbGwgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMgPSBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFubm90YXRpb25IZWFkZXJBY3Rpb25zKTtcblx0Ly8gNC4gRmluZCBtYW5pZmVzdCBhY3Rpb25zIHdoaWNoIG92ZXJyaWRlIGFueSBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0Y29uc3QgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMgPSBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblx0Ly8gNS4gR2V0IG92ZXJyaWRkZW4gYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcywgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdC8vIDYuIE92ZXJyaWRlIGFsbCBhY3Rpb25zXG5cdGxldCBoZWFkZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkhlYWRlckFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpIGFzIEN1c3RvbUFjdGlvbltdO1xuXHQvLyA3LiBSZXBsYWNlIG9yaWdpbmFsIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIG92ZXJyaWRkZW4gbWVudSBpdGVtc1xuXHRwcmVwYXJlTWVudUFjdGlvbnMoaGVhZGVyQWN0aW9ucywgb3ZlcndyaXR0ZW5NZW51QWN0aW9uSXRlbXMpO1xuXHQvLyA4LiBSZW1vdmUgZHVwbGljYXRlIGFjdGlvbnMgd2hpY2ggYXJlIG1lbnUgaXRlbXNcblx0aGVhZGVyQWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoaGVhZGVyQWN0aW9ucyk7XG5cdC8vIDkuIEhpZGUgbWVudXMgd2hlcmUgYWxsIG1lbnUgaXRlbXMgYXJlIGhpZGRlblxuXHRoZWFkZXJBY3Rpb25zID0gZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyhoZWFkZXJBY3Rpb25zKTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBoZWFkZXJBY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBPYmplY3RQYWdlIGZvb3RlciBhY3Rpb25zIChib3RoIHRoZSBkZWZhdWx0IG9uZXMgYW5kIHRoZSBjdXN0b20gb25lcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjYXBhYmlsaXRpZXMgVGhlIHByZWRlZmluZWQgZW52aXJvbm1lbnQgY2FwYWJpbGl0aWVzXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGZvb3RlclxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9vdGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSwgY29udmVydGVyQ29udGV4dCwgY2FwYWJpbGl0aWVzKTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0Rm9vdGVyQWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0LCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMpO1xuXG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHRjb25zdCBmb290ZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYUFubm90YXRpb25Gb290ZXJBY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBmb290ZXJBY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn07XG5cbmZ1bmN0aW9uIF9nZXRTdWJTZWN0aW9uVmlzdWFsaXphdGlvbihzdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRyZXR1cm4gKHN1YlNlY3Rpb24/LnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gPyBzdWJTZWN0aW9uLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSA6IHVuZGVmaW5lZCkgYXMgVGFibGVWaXN1YWxpemF0aW9uO1xufVxuXG5mdW5jdGlvbiBfaXNGYWNldEhhc05vblJlc3BvbnNpdmVUYWJsZVZpc2libGUoXG5cdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgJiZcblx0XHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24/LnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnMgJiZcblx0XHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbj8udHlwZSA9PT0gXCJUYWJsZVwiICYmXG5cdFx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb24/LmNvbnRyb2w/LnR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJcblx0KTtcbn1cblxuZnVuY3Rpb24gX3NldE5vblJlc3BvbnNpdmVUYWJsZVZpc3VhbGl6YXRpb25JbmZvcm1hdGlvbihcblx0c2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRzZWN0aW9uTGF5b3V0OiBzdHJpbmdcbik6IHZvaWQge1xuXHRpZiAoX2lzRmFjZXRIYXNOb25SZXNwb25zaXZlVGFibGVWaXNpYmxlKGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiwgc3ViU2VjdGlvblZpc3VhbGl6YXRpb24pKSB7XG5cdFx0Y29uc3QgdGFibGVDb250cm9sQ29uZmlndXJhdGlvbiA9IHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uLmNvbnRyb2w7XG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLmRhdGFWaXN1YWxpemF0aW9uT3B0aW9ucyA/Pz0ge307XG5cdFx0aWYgKCEoc2VjdGlvbkxheW91dCA9PT0gXCJQYWdlXCIgJiYgc2VjdGlvbnMubGVuZ3RoID4gMSkpIHtcblx0XHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvbk9wdGlvbnNbXCJyb3dDb3VudE1vZGVcIl0gPSBcIkF1dG9cIjtcblx0XHRcdHRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24ucm93Q291bnRNb2RlID0gXCJBdXRvXCI7XG5cdFx0fVxuXHRcdGlmIChzZWN0aW9uTGF5b3V0ICE9PSBcIlRhYnNcIikge1xuXHRcdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLmRhdGFWaXN1YWxpemF0aW9uT3B0aW9uc1tcInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0XCJdID0gZmFsc2U7XG5cdFx0XHR0YWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIF9zZXROb25SZXNwb25zaXZlVGFibGVXaXRoTWl4RmFjZXRzSW5mb3JtYXRpb24oc3ViU2VjdGlvbjogTWl4ZWRTdWJTZWN0aW9uLCBzZWN0aW9uTGF5b3V0OiBzdHJpbmcpOiB2b2lkIHtcblx0Y29uc3QgZmlyc3RTZWN0aW9uID0gc3ViU2VjdGlvbj8uY29udGVudD8ubGVuZ3RoID09PSAxID8gc3ViU2VjdGlvbi5jb250ZW50WzBdIDogdW5kZWZpbmVkO1xuXHRpZiAoZmlyc3RTZWN0aW9uPy50eXBlID09PSBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbikge1xuXHRcdGNvbnN0IHRhYmxlQ29udHJvbCA9IChmaXJzdFNlY3Rpb24ucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pLmNvbnRyb2w7XG5cdFx0aWYgKHRhYmxlQ29udHJvbC50eXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0XHRmaXJzdFNlY3Rpb24uZGF0YVZpc3VhbGl6YXRpb25PcHRpb25zID8/PSB7fTtcblx0XHRcdGZpcnN0U2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvbk9wdGlvbnNbXCJyb3dDb3VudE1vZGVcIl0gPSBcIkF1dG9cIjtcblx0XHRcdHRhYmxlQ29udHJvbC5yb3dDb3VudE1vZGUgPSBcIkF1dG9cIjtcblx0XHRcdGlmIChzZWN0aW9uTGF5b3V0ICE9PSBcIlRhYnNcIikge1xuXHRcdFx0XHRmaXJzdFNlY3Rpb24uZGF0YVZpc3VhbGl6YXRpb25PcHRpb25zW1widXNlQ29uZGVuc2VkVGFibGVMYXlvdXRcIl0gPSBmYWxzZTtcblx0XHRcdFx0dGFibGVDb250cm9sLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogU2V0IHRoZSBOb25SZXNwb25zaXZlIFRhYmxlIChncmlkLCB0cmVlLCBhbmFseXRpY2FsKSBkaXNwbGF5IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHNlY3Rpb25zIFRoZSBPYmplY3RQYWdlIHNlY3Rpb25zXG4gKiBAcGFyYW0gc2VjdGlvbiBUaGUgY3VycmVudCBPYmplY3RQYWdlIHNlY3Rpb24gcHJvY2Vzc2VkXG4gKiBAcGFyYW0gc2VjdGlvbkxheW91dFxuICovXG5mdW5jdGlvbiBfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlU3ViU2VjdGlvbkNvbnRyb2xDb25maWd1cmF0aW9uKFxuXHRzZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXSxcblx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdHNlY3Rpb25MYXlvdXQ6IHN0cmluZ1xuKTogdm9pZCB7XG5cdGxldCBzdWJTZWN0aW9uVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uO1xuXHRjb25zdCBzdWJTZWN0aW9ucyA9IHNlY3Rpb24uc3ViU2VjdGlvbnM7XG5cdGlmIChzdWJTZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCBzdWJTZWN0aW9uID0gc3ViU2VjdGlvbnNbMF07XG5cdFx0c3dpdGNoIChzdWJTZWN0aW9uLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJEYXRhVmlzdWFsaXphdGlvblwiOlxuXHRcdFx0XHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbiA9IF9nZXRTdWJTZWN0aW9uVmlzdWFsaXphdGlvbihzdWJTZWN0aW9uKTtcblx0XHRcdFx0X3NldE5vblJlc3BvbnNpdmVUYWJsZVZpc3VhbGl6YXRpb25JbmZvcm1hdGlvbihzZWN0aW9ucywgc3ViU2VjdGlvbiwgc3ViU2VjdGlvblZpc3VhbGl6YXRpb24sIHNlY3Rpb25MYXlvdXQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNaXhlZFwiOlxuXHRcdFx0XHRfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlV2l0aE1peEZhY2V0c0luZm9ybWF0aW9uKHN1YlNlY3Rpb24sIHNlY3Rpb25MYXlvdXQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblx0X3JlbW92ZUNvbmRlbnNlZEZyb21TdWJTZWN0aW9ucyhzdWJTZWN0aW9ucyk7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb25kZW5zZSBsYXlvdXQgbW9kZSBmcm9tIHRoZSBzdWJzZWN0aW9ucy5cbiAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3ViU2VjdGlvbnMgd2hlcmUgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNvbmRlbnNlZCBsYXlvdXRcbiAqL1xuZnVuY3Rpb24gX3JlbW92ZUNvbmRlbnNlZEZyb21TdWJTZWN0aW9ucyhzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IHZvaWQge1xuXHRsZXQgZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cdC8vIFdlIGNoZWNrIGluIGVhY2ggc3Vic2VjdGlvbiBpZiB0aGVyZSBpcyB2aXN1YWxpemF0aW9uc1xuXHRzdWJTZWN0aW9ucy5mb3JFYWNoKChzdWJTZWN0aW9uKSA9PiB7XG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0gc3ViU2VjdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cdFx0aWYgKGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbj8ucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucykge1xuXHRcdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uPy5wcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zLmZvckVhY2goKHNpbmdsZVZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0aWYgKHNpbmdsZVZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRzaW5nbGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIFRoZW4gd2UgY2hlY2sgdGhlIGNvbnRlbnQgb2YgdGhlIHN1YnNlY3Rpb24sIGFuZCBpbiBlYWNoIGNvbnRlbnQgd2UgY2hlY2sgaWYgdGhlcmUgaXMgYSB0YWJsZSB0byBzZXQgaXRzIGNvbmRlbnNlZCBsYXlvdXQgdG8gZmFsc2Vcblx0XHRpZiAoZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uPy5jb250ZW50KSB7XG5cdFx0XHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24uY29udGVudC5mb3JFYWNoKChzaW5nbGVDb250ZW50KSA9PiB7XG5cdFx0XHRcdChzaW5nbGVDb250ZW50IGFzIERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbikucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucy5mb3JFYWNoKChzaW5nbGVWaXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHNpbmdsZVZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRcdHNpbmdsZVZpc3VhbGl6YXRpb24uY29udHJvbC51c2VDb25kZW5zZWRUYWJsZUxheW91dCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuLyoqXG4gKiBSZXRyaWV2ZXMgYW5kIG1lcmdlcyB0aGUgT2JqZWN0UGFnZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uIGFuZCBpbiB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlY3Rpb25zLlxuICovXG5cbmV4cG9ydCBjb25zdCBnZXRTZWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgc2VjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldFNlY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRTZWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR7XG5cdFx0XHR0aXRsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRzdWJTZWN0aW9uczoge1xuXHRcdFx0XHRhY3Rpb25zOiBPdmVycmlkZVR5cGUubWVyZ2UsXG5cdFx0XHRcdHRpdGxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0XHRzaWRlQ29udGVudDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdFx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHQvLyBMZXZlbCBBZGp1c3RtZW50IGZvciBcIk1peGVkXCIgQ29sbGVjdGlvbiBGYWNldHM6XG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0Ly8gVGhlIG1hbmlmZXN0IGRlZmluaXRpb24gb2YgY3VzdG9tIHNpZGUgY29udGVudHMgYW5kIGFjdGlvbnMgc3RpbGwgbmVlZHMgdG8gYmUgYWxpZ25lZCBmb3IgXCJNaXhlZFwiIGNvbGxlY3Rpb24gZmFjZXRzOlxuXHQvLyBDb2xsZWN0aW9uIGZhY2V0cyBjb250YWluaW5nIHRhYmxlcyBnYWluIGFuIGV4dHJhIHJlZmVyZW5jZSBmYWNldCBhcyBhIHRhYmxlIHdyYXBwZXIgdG8gZW5zdXJlLCB0aGF0IHRoZSB0YWJsZSBpcyBhbHdheXNcblx0Ly8gcGxhY2VkIGluIGFuIG93biBpbmRpdmlkdWFsIE9iamVjdCBQYWdlIEJsb2NrOyB0aGlzIGFkZGl0aW9uYWwgaGllcmFyY2h5IGxldmVsIGlzIHVua25vd24gdG8gYXBwIGRldmVsb3BlcnMsIHdoaWNoIGFyZVxuXHQvLyBkZWZpbmluZyB0aGUgc2lkZSBjb250ZW50IGFuZCBhY3Rpb25zIGluIHRoZSBtYW5pZmVzdCBhdCBjb2xsZWN0aW9uIGZhY2V0IGxldmVsOyBub3csIHNpbmNlIHRoZSBzaWRlQ29udGVudCBhbHdheXMgbmVlZHNcblx0Ly8gdG8gYmUgYXNzaWduZWQgdG8gYSBibG9jaywgYW5kIGFjdGlvbnMgYWx3YXlzIG5lZWQgdG8gYmUgYXNzaWduZWQgdG8gYSBmb3JtLFxuXHQvLyB3ZSBuZWVkIHRvIG1vdmUgdGhlIHNpZGVDb250ZW50IGFuZCBhY3Rpb25zIGZyb20gYSBtaXhlZCBjb2xsZWN0aW9uIGZhY2V0IHRvIGl0cyBjb250ZW50LlxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdHNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHNlY3Rpb24pIHtcblx0XHRfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlU3ViU2VjdGlvbkNvbnRyb2xDb25maWd1cmF0aW9uKHNlY3Rpb25zLCBzZWN0aW9uLCBtYW5pZmVzdFdyYXBwZXIuZ2V0U2VjdGlvbkxheW91dCgpKTtcblx0XHRzZWN0aW9uLnN1YlNlY3Rpb25zPy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJTZWN0aW9uKSB7XG5cdFx0XHRzdWJTZWN0aW9uLnRpdGxlID0gc3ViU2VjdGlvbi50aXRsZSA9PT0gXCJ1bmRlZmluZWRcIiA/IHVuZGVmaW5lZCA6IHN1YlNlY3Rpb24udGl0bGU7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIpIHtcblx0XHRcdFx0c3ViU2VjdGlvbi5jb250ZW50Py5mb3JFYWNoKChjb250ZW50KSA9PiB7XG5cdFx0XHRcdFx0Y29udGVudC5vYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQgPSBzdWJTZWN0aW9uLm9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIgJiYgc3ViU2VjdGlvbi5jb250ZW50Py5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgZmlyc3RGb3JtID0gc3ViU2VjdGlvbi5jb250ZW50LmZpbmQoXG5cdFx0XHRcdFx0KGVsZW1lbnQpID0+IChlbGVtZW50IGFzIEZvcm1TdWJTZWN0aW9uKS50eXBlID09PSBTdWJTZWN0aW9uVHlwZS5Gb3JtXG5cdFx0XHRcdCkgYXMgRm9ybVN1YlNlY3Rpb247XG5cblx0XHRcdFx0Ly8gMS4gQ29weSBzaWRlQ29udGVudCB0byB0aGUgU3ViU2VjdGlvbidzIGZpcnN0IGZvcm07IG9yIC0tIGlmIHVuYXZhaWxhYmxlIC0tIHRvIGl0cyBmaXJzdCBjb250ZW50XG5cdFx0XHRcdC8vIDIuIENvcHkgYWN0aW9ucyB0byB0aGUgZmlyc3QgZm9ybSBvZiB0aGUgU3ViU2VjdGlvbidzIGNvbnRlbnRcblx0XHRcdFx0Ly8gMy4gRGVsZXRlIHNpZGVDb250ZW50IC8gYWN0aW9ucyBhdCB0aGUgKGludmFsaWQpIG1hbmlmZXN0IGxldmVsXG5cblx0XHRcdFx0aWYgKHN1YlNlY3Rpb24uc2lkZUNvbnRlbnQpIHtcblx0XHRcdFx0XHRpZiAoZmlyc3RGb3JtKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIGZvcm0sIGl0IGFsd2F5cyBuZWVkcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgZm9ybSwgYXMgdGhlIGZvcm0gaW5oZXJpdHMgdGhlIElEIG9mIHRoZSBTdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHRmaXJzdEZvcm0uc2lkZUNvbnRlbnQgPSBzdWJTZWN0aW9uLnNpZGVDb250ZW50O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdWJTZWN0aW9uLmNvbnRlbnRbMF0uc2lkZUNvbnRlbnQgPSBzdWJTZWN0aW9uLnNpZGVDb250ZW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzdWJTZWN0aW9uLnNpZGVDb250ZW50ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpcnN0Rm9ybSAmJiAoc3ViU2VjdGlvbiBhcyB1bmtub3duIGFzIEZvcm1TdWJTZWN0aW9uKS5hY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRmaXJzdEZvcm0uYWN0aW9ucyA9IChzdWJTZWN0aW9uIGFzIHVua25vd24gYXMgRm9ybVN1YlNlY3Rpb24pLmFjdGlvbnM7XG5cdFx0XHRcdFx0KHN1YlNlY3Rpb24gYXMgdW5rbm93biBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIE9iamVjdFBhZ2UgaGFzIGhlYWRlciBjb250ZW50LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uIGhlYWRlciBmYWNldFxuICovXG5mdW5jdGlvbiBoYXNIZWFkZXJDb250ZW50KGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gKFxuXHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckZhY2V0cyB8fCBbXSkubGVuZ3RoID4gMCB8fFxuXHRcdE9iamVjdC5rZXlzKG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJGYWNldHMoKSkubGVuZ3RoID4gMFxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGhlYWRlciBjb250ZW50LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0IWhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0Y29uc3RhbnQoZmFsc2UpLFxuXHRcdGlmRWxzZShlcXVhbChtYW5pZmVzdFdyYXBwZXIuaXNIZWFkZXJFZGl0YWJsZSgpLCBmYWxzZSksIGNvbnN0YW50KHRydWUpLCBub3QoVUkuSXNFZGl0YWJsZSkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWFkZXIgY29udGVudC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTaG93SGVhZGVyQ29udGVudCA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIEVhc3lGaWxsIGJ1dHRvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRWFzeUZpbGwgYnV0dG9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFYXN5RmlsbFZpc2libGUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKSxcblx0XHRlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0aXNVcGRhdGVIaWRkZW4gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oTW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKSk7XG5cdGNvbnN0IGlzRHJhZnRFbmFibGVkID0gTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBpc1N0aWNreSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5KGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnN0YXJ0aW5nRW50aXR5U2V0KTtcblx0Ly8gRWFzeUZpbGwgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIG9iamVjdCBwYXRoIGlzIGRyYWZ0IGVuYWJsZWQgYW5kIHN0aWNreVxuXHRpZiAoIWlzRHJhZnRFbmFibGVkICYmICFpc1N0aWNreSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmYWxzZSk7XG5cdH1cblx0Y29uc3Qgdmlld0xldmVsID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRWaWV3TGV2ZWwoKTtcblx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdmlld0xldmVsID4gMSA/IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5VcGRhdGVSZXN0cmljdGlvbnM/LlVwZGF0YWJsZSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNFZGl0RW5hYmxlZCA9IGdldEVkaXRCdXR0b25FbmFibGVkRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGFibGVQcm9wZXJ0eVBhdGgsIHZpZXdMZXZlbCk7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQobm90KGlzVXBkYXRlSGlkZGVuKSwgaXNFZGl0RW5hYmxlZCkpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGF2YXRhciB3aGVuIHRoZSBoZWFkZXIgaXMgaW4gZXhwYW5kZWQgc3RhdGUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24obm90KGdldFNob3dIZWFkZXJDb250ZW50RXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0KSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRQYWdlID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBPYmplY3RQYWdlRGVmaW5pdGlvbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGxldCBoZWFkZXJTZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZDtcblx0Y29uc3QgZW50aXR5VHlwZTogRW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXG5cdC8vIFJldHJpZXZlIGFsbCBoZWFkZXIgZmFjZXRzIChmcm9tIGFubm90YXRpb25zICYgY3VzdG9tKVxuXHRjb25zdCBoZWFkZXJGYWNldHMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRIZWFkZXJGYWNldHNGcm9tQW5ub3RhdGlvbnMoY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJGYWNldHMoKSlcblx0KTtcblxuXHQvLyBSZXRyaWV2ZSB0aGUgcGFnZSBoZWFkZXIgYWN0aW9uc1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gZ2V0SGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBjYXBhYmlsaXRpZXMpO1xuXG5cdC8vIFJldHJpZXZlIHRoZSBwYWdlIGZvb3RlciBhY3Rpb25zXG5cdGNvbnN0IGZvb3RlckFjdGlvbnMgPSBnZXRGb290ZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQsIGNhcGFiaWxpdGllcyk7XG5cblx0aWYgKG1hbmlmZXN0V3JhcHBlci5pc0hlYWRlckVkaXRhYmxlKCkgJiYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckZhY2V0cyB8fCBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvKSkge1xuXHRcdGhlYWRlclNlY3Rpb24gPSBjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24oY29udmVydGVyQ29udGV4dCwgaGVhZGVyRmFjZXRzKTtcblx0fVxuXG5cdGNvbnN0IHNlY3Rpb25zID0gZ2V0U2VjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsXG5cdFx0aGVhZGVyOiB7XG5cdFx0XHR2aXNpYmxlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKSxcblx0XHRcdHNlY3Rpb246IGhlYWRlclNlY3Rpb24sXG5cdFx0XHRmYWNldHM6IGhlYWRlckZhY2V0cyxcblx0XHRcdGFjdGlvbnM6IGhlYWRlckFjdGlvbnMuYWN0aW9ucyxcblx0XHRcdGVhc3lGaWxsVmlzaWJsZTogZ2V0RWFzeUZpbGxWaXNpYmxlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0c2hvd0NvbnRlbnQ6IGdldFNob3dIZWFkZXJDb250ZW50KGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0aGFzQ29udGVudDogaGFzSGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGF2YXRhcjogZ2V0QXZhdGFyKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0ZXhwYW5kZWRJbWFnZVZpc2libGU6IGdldEV4cGFuZGVkSW1hZ2VWaXNpYmxlKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWN0aW9uczogc2VjdGlvbnMsXG5cdFx0Zm9vdGVyQWN0aW9uczogZm9vdGVyQWN0aW9ucy5hY3Rpb25zLFxuXHRcdGhlYWRlckNvbW1hbmRBY3Rpb25zOiBoZWFkZXJBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdGZvb3RlckNvbW1hbmRBY3Rpb25zOiBmb290ZXJBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdHNob3dBbmNob3JCYXI6IG1hbmlmZXN0V3JhcHBlci5nZXRTaG93QW5jaG9yQmFyKCksXG5cdFx0dXNlSWNvblRhYkJhcjogbWFuaWZlc3RXcmFwcGVyLnVzZUljb25UYWJCYXIoKSxcblx0XHR0cmFuc3BvcnRTZWxlY3Rpb246IG1hbmlmZXN0V3JhcHBlci5nZXRUcmFuc3BvcnRTZWxlY3Rpb24oKVxuXHR9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
530
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTZWN0aW9uS2V5IiwiZmFjZXREZWZpbml0aW9uIiwiZmFsbGJhY2siLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiYWxsSGVhZGVyRmFjZXRzIiwiZWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCIsImhlYWRlckZhY2V0cyIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVyRmFjZXRzIiwiaGVhZGVyZmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyIsImxlbmd0aCIsImkiLCJmb3JFYWNoIiwiaXRlbSIsInZpc2libGUiLCJwdXNoIiwia2V5Iiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsImN1c3RvbUl0ZW0iLCJoZWFkZXJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiSXNFZGl0YWJsZSIsInN1YlNlY3Rpb25zIiwiX2V4cG9ydHMiLCJnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uIiwiZW50aXR5VHlwZSIsIm9iamVjdFBhZ2VTZWN0aW9ucyIsIkZhY2V0cyIsIm1hcCIsImdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbiIsImdldFVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIiwibWFuaWZlc3RXcmFwcGVyIiwic2VjdGlvbktleSIsInNlY3Rpb25zSW5NYW5pZmVzdCIsImdldFNlY3Rpb25zIiwic2VjdGlvblNldHRpbmdzIiwidXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMiLCJmYWNldCIsInNlY3Rpb25JRCIsImdldFNlY3Rpb25JRCIsImhpZGRlbkV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJIaWRkZW4iLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImdldE1hbmlmZXN0V3JhcHBlciIsInNlY3Rpb24iLCJ1bmRlZmluZWQiLCJzaG93VGl0bGUiLCJub3QiLCJlcXVhbCIsImdldFNlY3Rpb25zRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RTZWN0aW9ucyIsInNlY3Rpb25zIiwiT2JqZWN0Iiwia2V5cyIsIm1hbmlmZXN0U2VjdGlvbktleSIsImdldFNlY3Rpb25Gcm9tTWFuaWZlc3QiLCJjdXN0b21TZWN0aW9uRGVmaW5pdGlvbiIsImN1c3RvbVNlY3Rpb25JRCIsImdldEN1c3RvbVNlY3Rpb25JRCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwiYXBwbHlTdGF0ZSIsInJldHJpZXZlU3RhdGUiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsImN1c3RvbVNlY3Rpb24iLCJvblNlY3Rpb25Mb2FkZWQiLCJnZXRIZWFkZXJBY3Rpb25zIiwiY2FwYWJpbGl0aWVzIiwiYW5ub3RhdGlvbkhlYWRlckFjdGlvbnMiLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImlzTmF2aWdhYmxlIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlZCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImNvbW1hbmQiLCJtZW51IiwibWFuaWZlc3RBY3Rpb25zIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImdldEhpZGRlbkhlYWRlckFjdGlvbnMiLCJhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zIiwiZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsIm1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zIiwiZ2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbiIsImFjdGlvbnMiLCJvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiaGVhZGVyQWN0aW9ucyIsInByZXBhcmVNZW51QWN0aW9ucyIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zIiwiY29tbWFuZEFjdGlvbnMiLCJnZXRGb290ZXJBY3Rpb25zIiwiYUFubm90YXRpb25Gb290ZXJBY3Rpb25zIiwiZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnMiLCJnZXRWaWV3TGV2ZWwiLCJmb290ZXJBY3Rpb25zIiwiX2dldFN1YlNlY3Rpb25WaXN1YWxpemF0aW9uIiwic3ViU2VjdGlvbiIsInByZXNlbnRhdGlvbiIsInZpc3VhbGl6YXRpb25zIiwiX2lzRmFjZXRIYXNOb25SZXNwb25zaXZlVGFibGVWaXNpYmxlIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwic3ViU2VjdGlvblZpc3VhbGl6YXRpb24iLCJ0eXBlIiwiY29udHJvbCIsIl9zZXROb25SZXNwb25zaXZlVGFibGVWaXN1YWxpemF0aW9uSW5mb3JtYXRpb24iLCJzZWN0aW9uTGF5b3V0IiwidGFibGVDb250cm9sQ29uZmlndXJhdGlvbiIsImRhdGFWaXN1YWxpemF0aW9uT3B0aW9ucyIsInJvd0NvdW50TW9kZSIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX3NldE5vblJlc3BvbnNpdmVUYWJsZVdpdGhNaXhGYWNldHNJbmZvcm1hdGlvbiIsImZpcnN0U2VjdGlvbiIsImNvbnRlbnQiLCJTdWJTZWN0aW9uVHlwZSIsIkRhdGFWaXN1YWxpemF0aW9uIiwidGFibGVDb250cm9sIiwiX3NldE5vblJlc3BvbnNpdmVUYWJsZVN1YlNlY3Rpb25Db250cm9sQ29uZmlndXJhdGlvbiIsIl9yZW1vdmVDb25kZW5zZWRGcm9tU3ViU2VjdGlvbnMiLCJzaW5nbGVWaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsInNpbmdsZUNvbnRlbnQiLCJtZXJnZSIsInNpZGVDb250ZW50Iiwib2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkIiwiZ2V0U2VjdGlvbkxheW91dCIsImZpcnN0Rm9ybSIsImZpbmQiLCJlbGVtZW50IiwiRm9ybSIsImhhc0hlYWRlckNvbnRlbnQiLCJnZXRIZWFkZXJGYWNldHMiLCJnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24iLCJpZkVsc2UiLCJjb25zdGFudCIsImlzSGVhZGVyRWRpdGFibGUiLCJnZXRTaG93SGVhZGVyQ29udGVudCIsImdldEVhc3lGaWxsVmlzaWJsZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzVXBkYXRlSGlkZGVuIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0RW5hYmxlZCIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzU3RpY2t5Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ2aWV3TGV2ZWwiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJDYXBhYmlsaXRpZXMiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJpc0VkaXRFbmFibGVkIiwiZ2V0RWRpdEJ1dHRvbkVuYWJsZWRFeHByZXNzaW9uIiwiYW5kIiwiZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUiLCJjb252ZXJ0UGFnZSIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdCIsIkhlYWRlckluZm8iLCJ0ZW1wbGF0ZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJoZWFkZXIiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImZhY2V0cyIsImVhc3lGaWxsVmlzaWJsZSIsInNob3dDb250ZW50IiwiaGFzQ29udGVudCIsImF2YXRhciIsImdldEF2YXRhciIsImV4cGFuZGVkSW1hZ2VWaXNpYmxlIiwiaGVhZGVyQ29tbWFuZEFjdGlvbnMiLCJmb290ZXJDb21tYW5kQWN0aW9ucyIsInNob3dBbmNob3JCYXIiLCJnZXRTaG93QW5jaG9yQmFyIiwidXNlSWNvblRhYkJhciIsInRyYW5zcG9ydFNlbGVjdGlvbiIsImdldFRyYW5zcG9ydFNlbGVjdGlvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRmFjZXRUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYW5kLCBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGVxdWFsLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIGlmRWxzZSwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24sIENvbWJpbmVkQWN0aW9uLCBDdXN0b21BY3Rpb24sIE92ZXJyaWRlVHlwZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsXG5cdGdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24sXG5cdGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMsXG5cdHByZXBhcmVNZW51QWN0aW9ucyxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHtcblx0Z2V0RWRpdEJ1dHRvbkVuYWJsZWRFeHByZXNzaW9uLFxuXHRnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMsXG5cdGdldEhpZGRlbkhlYWRlckFjdGlvbnNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvb2JqZWN0UGFnZS9IZWFkZXJBbmRGb290ZXJBY3Rpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgVUksIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudENhcGFiaWxpdGllcyB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0U2VjdGlvbiwgTWFuaWZlc3RTdWJTZWN0aW9uLCBUcmFuc3BvcnRTZWxlY3Rpb25EZWZpbml0aW9uIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSwgVmlzdWFsaXphdGlvblR5cGUgfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCIuLi9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0LCBQYWdlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBBdmF0YXIgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9BdmF0YXJcIjtcbmltcG9ydCB7IGdldEF2YXRhciB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL0F2YXRhclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zLCBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHR5cGUge1xuXHRDdXN0b21PYmplY3RQYWdlU2VjdGlvbixcblx0RGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRGb3JtU3ViU2VjdGlvbixcblx0TWl4ZWRTdWJTZWN0aW9uLFxuXHRPYmplY3RQYWdlU2VjdGlvbixcblx0T2JqZWN0UGFnZVN1YlNlY3Rpb25cbn0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvU3ViU2VjdGlvblwiO1xuaW1wb3J0IHtcblx0U3ViU2VjdGlvblR5cGUsXG5cdGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMsXG5cdGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zLFxuXHRjcmVhdGVTdWJTZWN0aW9uc1xufSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9TdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZVJlY29yZCwgUG9zaXRpb24gfSBmcm9tIFwiLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCIuLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgZ2V0Q3VzdG9tU2VjdGlvbklELCBnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCwgZ2V0U2VjdGlvbklEIH0gZnJvbSBcIi4uL2hlbHBlcnMvSURcIjtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZURlZmluaXRpb24gPSBQYWdlRGVmaW5pdGlvbiAmIHtcblx0aGVhZGVyOiB7XG5cdFx0dmlzaWJsZTogYm9vbGVhbjtcblx0XHRzZWN0aW9uPzogT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0ZmFjZXRzOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXTtcblx0XHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdFx0ZWFzeUZpbGxWaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHRzaG93Q29udGVudDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0aGFzQ29udGVudDogYm9vbGVhbjtcblx0XHRhdmF0YXI/OiBBdmF0YXI7XG5cdFx0dGl0bGU6IHtcblx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR9O1xuXHR9O1xuXHRzZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Zm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRoZWFkZXJDb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0Zm9vdGVyQ29tbWFuZEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG5cdHNob3dBbmNob3JCYXI6IGJvb2xlYW47XG5cdHVzZUljb25UYWJCYXI6IGJvb2xlYW47XG5cdHRyYW5zcG9ydFNlbGVjdGlvbj86IFRyYW5zcG9ydFNlbGVjdGlvbkRlZmluaXRpb247XG59O1xuXG5jb25zdCBnZXRTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VjdGlvbiB0aGF0IHJlcHJlc2VudHMgdGhlIGVkaXRhYmxlIGhlYWRlciBwYXJ0OyBpdCBpcyBvbmx5IHZpc2libGUgaW4gZWRpdCBtb2RlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYWxsSGVhZGVyRmFjZXRzIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHNlY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbGxIZWFkZXJGYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdXG4pOiBPYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklEID0gZ2V0RWRpdGFibGVIZWFkZXJTZWN0aW9uSUQoKTtcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJGYWNldHM7XG5cdGNvbnN0IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnMgPSBoZWFkZXJGYWNldHMgPyBjcmVhdGVTdWJTZWN0aW9ucyhoZWFkZXJGYWNldHMsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpIDogW107XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMgPSBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblx0aWYgKGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdC8vIG1lcmdlIGFubm90YXRpb24gYmFzZWQgaGVhZGVyIGZhY2V0cyBhbmQgY3VzdG9tIGhlYWRlciBmYWNldHMgaW4gdGhlIHJpZ2h0IG9yZGVyXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGFsbEhlYWRlckZhY2V0cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHQvLyBoaWRkZW4gaGVhZGVyIGZhY2V0cyBhcmUgbm90IGluY2x1ZGVkIGluIGFsbEhlYWRlckZhY2V0cyBhcnJheSA9PiBhZGQgdGhlbSBhbnl3YXlcblx0XHRcdHdoaWxlIChoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiYgaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS52aXNpYmxlID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMucHVzaChoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldKTtcblx0XHRcdFx0aSsrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiZcblx0XHRcdFx0KGl0ZW0ua2V5ID09PSBoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldLmtleSB8fFxuXHRcdFx0XHRcdC8vIGZvciBoZWFkZXIgZmFjZXRzIHdpdGggbm8gaWQgdGhlIGtleXMgb2YgaGVhZGVyIGZhY2V0IGFuZCBzdWJzZWN0aW9uIGFyZSBkaWZmZXJlbnQgPT4gY2hlY2sgb25seSB0aGUgbGFzdCBwYXJ0XG5cdFx0XHRcdFx0aXRlbS5rZXkuc2xpY2UoaXRlbS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpID09PVxuXHRcdFx0XHRcdFx0aGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkuc2xpY2UoaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoY3VzdG9tSXRlbSkge1xuXHRcdFx0XHRcdGlmIChpdGVtLmtleSA9PT0gY3VzdG9tSXRlbS5rZXkpIHtcblx0XHRcdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goY3VzdG9tSXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyA9IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnM7XG5cdH1cblx0Y29uc3QgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklELFxuXHRcdGtleTogXCJFZGl0YWJsZUhlYWRlckNvbnRlbnRcIixcblx0XHR0aXRsZTogXCJ7c2FwLmZlLmkxOG4+VF9DT01NT05fT0JKRUNUX1BBR0VfSEVBREVSX1NFQ1RJT059XCIsXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oVUkuSXNFZGl0YWJsZSksXG5cdFx0c3ViU2VjdGlvbnM6IGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zXG5cdH07XG5cdHJldHVybiBoZWFkZXJTZWN0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkZWZpbml0aW9uIGZvciBhIHNlY3Rpb24gYmFzZWQgb24gdGhlIEZhY2V0IGFubm90YXRpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFsbCBzZWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IG9iamVjdFBhZ2VTZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXSA9XG5cdFx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubWFwKChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpID0+XG5cdFx0XHRnZXRTZWN0aW9uRnJvbUFubm90YXRpb24oZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdCkgfHwgW107XG5cdHJldHVybiBvYmplY3RQYWdlU2VjdGlvbnM7XG59XG5cbi8qKlxuICogQ2hlY2sgbWFuaWZlc3QgZm9yIHNldHRpbmcgJ3VzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzJy5cbiAqIElmIHRoaXMgc2V0dGluZyBpcyB0cnVlLCB0aGVuIHRoZSBsYWJlbCBvZiB0aGUgc2luZ2xlIHRleHQtYXJlYSBmaWVsZCBpbiBhIGZvcm0gY29udGFpbmVyIHdpbGwgYmUgaGlkZGVuLlxuICogQHBhcmFtIG1hbmlmZXN0V3JhcHBlclxuICogQHBhcmFtIHNlY3Rpb25LZXlcbiAqIEByZXR1cm5zIElmIHRoZSBmb3JtIGVsZW1lbnQncyBsYWJlbCBuZWVkcyB0byBiZSBoaWRkZW4uXG4gKi9cbmZ1bmN0aW9uIGdldFVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzKG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyLCBzZWN0aW9uS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcblx0Y29uc3Qgc2VjdGlvbnNJbk1hbmlmZXN0ID0gbWFuaWZlc3RXcmFwcGVyLmdldFNlY3Rpb25zKCk7XG5cdGNvbnN0IHNlY3Rpb25TZXR0aW5ncyA9IHNlY3Rpb25zSW5NYW5pZmVzdD8uW3NlY3Rpb25LZXldO1xuXHRyZXR1cm4gc2VjdGlvblNldHRpbmdzPy51c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyA/PyBmYWxzZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYW5ub3RhdGlvbiBiYXNlZCBzZWN0aW9uLlxuICogQHBhcmFtIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgc2VjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uRnJvbUFubm90YXRpb24oZmFjZXQ6IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IE9iamVjdFBhZ2VTZWN0aW9uIHtcblx0Y29uc3Qgc2VjdGlvbklEID0gZ2V0U2VjdGlvbklEKGZhY2V0KTtcblx0Y29uc3Qgc2VjdGlvbktleSA9IGdldFNlY3Rpb25LZXkoZmFjZXQsIHNlY3Rpb25JRCk7XG5cdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0Y29uc3QgaGlkZGVuRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiwgW10sIGZhbHNlLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdCk7XG5cdGNvbnN0IHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzID0gZ2V0VXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSwgc2VjdGlvbktleSk7XG5cdGNvbnN0IHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBzZWN0aW9uSUQsXG5cdFx0a2V5OiBzZWN0aW9uS2V5LFxuXHRcdHRpdGxlOiBmYWNldC5MYWJlbCA/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldC5MYWJlbCkpIDogdW5kZWZpbmVkLFxuXHRcdHNob3dUaXRsZTogISFmYWNldC5MYWJlbCxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoaGlkZGVuRXhwcmVzc2lvbiwgdHJ1ZSkpKSxcblx0XHRzdWJTZWN0aW9uczogY3JlYXRlU3ViU2VjdGlvbnMoW2ZhY2V0XSwgY29udmVydGVyQ29udGV4dCwgdW5kZWZpbmVkLCB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyksXG5cdFx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM6IHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzXG5cdH07XG5cdHJldHVybiBzZWN0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgc2VjdGlvbiBkZWZpbml0aW9ucyBiYXNlZCBvbiB0aGUgbWFuaWZlc3QgZGVmaW5pdGlvbnMuXG4gKiBAcGFyYW0gbWFuaWZlc3RTZWN0aW9ucyBUaGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdG1hbmlmZXN0U2VjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uPiB7XG5cdGNvbnN0IHNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU2VjdGlvbj4gPSB7fTtcblx0T2JqZWN0LmtleXMobWFuaWZlc3RTZWN0aW9ucykuZm9yRWFjaCgobWFuaWZlc3RTZWN0aW9uS2V5KSA9PiB7XG5cdFx0c2VjdGlvbnNbbWFuaWZlc3RTZWN0aW9uS2V5XSA9IGdldFNlY3Rpb25Gcm9tTWFuaWZlc3QobWFuaWZlc3RTZWN0aW9uc1ttYW5pZmVzdFNlY3Rpb25LZXldLCBtYW5pZmVzdFNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9KTtcblx0cmV0dXJuIHNlY3Rpb25zO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG1hbmlmZXN0LWJhc2VkIGN1c3RvbSBzZWN0aW9uLlxuICogQHBhcmFtIGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uXG4gKiBAcGFyYW0gc2VjdGlvbktleVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGN1c3RvbSBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25Gcm9tTWFuaWZlc3QoXG5cdGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uOiBNYW5pZmVzdFNlY3Rpb24sXG5cdHNlY3Rpb25LZXk6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGN1c3RvbVNlY3Rpb25JRCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLmlkID8gZ2V0Q3VzdG9tU2VjdGlvbklEKGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLmlkKSA6IGdldEN1c3RvbVNlY3Rpb25JRChzZWN0aW9uS2V5KTtcblx0bGV0IHBvc2l0aW9uOiBQb3NpdGlvbiB8IHVuZGVmaW5lZCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0bGV0IG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj47XG5cdGlmICghY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uc3ViU2VjdGlvbnMpIHtcblx0XHQvLyBJZiB0aGVyZSBpcyBubyBzdWJTZWN0aW9uIGRlZmluZWQsIHdlIGFkZCB0aGUgY29udGVudCBvZiB0aGUgY3VzdG9tIHNlY3Rpb24gYXMgc3Vic2VjdGlvbnNcblx0XHQvLyBhbmQgbWFrZSBzdXJlIHRvIHNldCB0aGUgdmlzaWJpbGl0eSB0byAndHJ1ZScsIGFzIHRoZSBhY3R1YWwgdmlzaWJpbGl0eSBpcyBoYW5kbGVkIGJ5IHRoZSBzZWN0aW9uIGl0c2VsZlxuXHRcdG1hbmlmZXN0U3ViU2VjdGlvbnMgPSB7XG5cdFx0XHRbc2VjdGlvbktleV06IHtcblx0XHRcdFx0Li4uY3VzdG9tU2VjdGlvbkRlZmluaXRpb24sXG5cdFx0XHRcdHBvc2l0aW9uOiB1bmRlZmluZWQsXG5cdFx0XHRcdHZpc2libGU6IFwidHJ1ZVwiLFxuXHRcdFx0XHRhcHBseVN0YXRlOiB1bmRlZmluZWQsXG5cdFx0XHRcdHJldHJpZXZlU3RhdGU6IHVuZGVmaW5lZFxuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0bWFuaWZlc3RTdWJTZWN0aW9ucyA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMobWFuaWZlc3RTdWJTZWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgY3VzdG9tU2VjdGlvbjogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGN1c3RvbVNlY3Rpb25JRCxcblx0XHRrZXk6IHNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnRpdGxlLFxuXHRcdHNob3dUaXRsZTogISFjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi50aXRsZSxcblx0XHR2aXNpYmxlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlIDogXCJ0cnVlXCIsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHN1YlNlY3Rpb25zOiBzdWJTZWN0aW9ucyxcblx0XHRvblNlY3Rpb25Mb2FkZWQ6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLm9uU2VjdGlvbkxvYWRlZCxcblx0XHRhcHBseVN0YXRlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5hcHBseVN0YXRlLFxuXHRcdHJldHJpZXZlU3RhdGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnJldHJpZXZlU3RhdGVcblx0fTtcblx0cmV0dXJuIGN1c3RvbVNlY3Rpb247XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBPYmplY3RQYWdlIGhlYWRlciBhY3Rpb25zIChib3RoIHRoZSBkZWZhdWx0IG9uZXMgYW5kIHRoZSBjdXN0b20gb25lcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjYXBhYmlsaXRpZXNcbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGlzIE9iamVjdFBhZ2UgaGVhZGVyXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJBY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdC8vIDEuIEdldCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnNcblx0Y29uc3QgYW5ub3RhdGlvbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQsIGNhcGFiaWxpdGllcyk7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRtZW51OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH07XG5cdC8vIDIuIEdldCBhY3Rpb25zIGZyb20gbWFuaWZlc3Rcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyQWN0aW9ucygpLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0YW5ub3RhdGlvbkhlYWRlckFjdGlvbnMsXG5cdFx0dW5kZWZpbmVkLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRnZXRIaWRkZW5IZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpXG5cdCk7XG5cdC8vIDMuIEdldCBhbGwgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMgPSBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFubm90YXRpb25IZWFkZXJBY3Rpb25zKTtcblx0Ly8gNC4gRmluZCBtYW5pZmVzdCBhY3Rpb25zIHdoaWNoIG92ZXJyaWRlIGFueSBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0Y29uc3QgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMgPSBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblx0Ly8gNS4gR2V0IG92ZXJyaWRkZW4gYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcywgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdC8vIDYuIE92ZXJyaWRlIGFsbCBhY3Rpb25zXG5cdGxldCBoZWFkZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkhlYWRlckFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpIGFzIEN1c3RvbUFjdGlvbltdO1xuXHQvLyA3LiBSZXBsYWNlIG9yaWdpbmFsIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIG92ZXJyaWRkZW4gbWVudSBpdGVtc1xuXHRwcmVwYXJlTWVudUFjdGlvbnMoaGVhZGVyQWN0aW9ucywgb3ZlcndyaXR0ZW5NZW51QWN0aW9uSXRlbXMpO1xuXHQvLyA4LiBSZW1vdmUgZHVwbGljYXRlIGFjdGlvbnMgd2hpY2ggYXJlIG1lbnUgaXRlbXNcblx0aGVhZGVyQWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoaGVhZGVyQWN0aW9ucyk7XG5cdC8vIDkuIEhpZGUgbWVudXMgd2hlcmUgYWxsIG1lbnUgaXRlbXMgYXJlIGhpZGRlblxuXHRoZWFkZXJBY3Rpb25zID0gZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyhoZWFkZXJBY3Rpb25zKTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBoZWFkZXJBY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBPYmplY3RQYWdlIGZvb3RlciBhY3Rpb25zIChib3RoIHRoZSBkZWZhdWx0IG9uZXMgYW5kIHRoZSBjdXN0b20gb25lcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjYXBhYmlsaXRpZXMgVGhlIHByZWRlZmluZWQgZW52aXJvbm1lbnQgY2FwYWJpbGl0aWVzXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGZvb3RlclxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9vdGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSwgY29udmVydGVyQ29udGV4dCwgY2FwYWJpbGl0aWVzKTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0Rm9vdGVyQWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0LCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMpO1xuXG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHRjb25zdCBmb290ZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYUFubm90YXRpb25Gb290ZXJBY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBmb290ZXJBY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn07XG5cbmZ1bmN0aW9uIF9nZXRTdWJTZWN0aW9uVmlzdWFsaXphdGlvbihzdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRyZXR1cm4gKHN1YlNlY3Rpb24/LnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gPyBzdWJTZWN0aW9uLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSA6IHVuZGVmaW5lZCkgYXMgVGFibGVWaXN1YWxpemF0aW9uO1xufVxuXG5mdW5jdGlvbiBfaXNGYWNldEhhc05vblJlc3BvbnNpdmVUYWJsZVZpc2libGUoXG5cdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgJiZcblx0XHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24/LnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnMgJiZcblx0XHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbj8udHlwZSA9PT0gXCJUYWJsZVwiICYmXG5cdFx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb24/LmNvbnRyb2w/LnR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJcblx0KTtcbn1cblxuZnVuY3Rpb24gX3NldE5vblJlc3BvbnNpdmVUYWJsZVZpc3VhbGl6YXRpb25JbmZvcm1hdGlvbihcblx0c2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRzZWN0aW9uTGF5b3V0OiBzdHJpbmdcbik6IHZvaWQge1xuXHRpZiAoX2lzRmFjZXRIYXNOb25SZXNwb25zaXZlVGFibGVWaXNpYmxlKGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiwgc3ViU2VjdGlvblZpc3VhbGl6YXRpb24pKSB7XG5cdFx0Y29uc3QgdGFibGVDb250cm9sQ29uZmlndXJhdGlvbiA9IHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uLmNvbnRyb2w7XG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLmRhdGFWaXN1YWxpemF0aW9uT3B0aW9ucyA/Pz0ge307XG5cdFx0aWYgKCEoc2VjdGlvbkxheW91dCA9PT0gXCJQYWdlXCIgJiYgc2VjdGlvbnMubGVuZ3RoID4gMSkpIHtcblx0XHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvbk9wdGlvbnNbXCJyb3dDb3VudE1vZGVcIl0gPSBcIkF1dG9cIjtcblx0XHRcdHRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24ucm93Q291bnRNb2RlID0gXCJBdXRvXCI7XG5cdFx0fVxuXHRcdGlmIChzZWN0aW9uTGF5b3V0ICE9PSBcIlRhYnNcIikge1xuXHRcdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLmRhdGFWaXN1YWxpemF0aW9uT3B0aW9uc1tcInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0XCJdID0gZmFsc2U7XG5cdFx0XHR0YWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIF9zZXROb25SZXNwb25zaXZlVGFibGVXaXRoTWl4RmFjZXRzSW5mb3JtYXRpb24oc3ViU2VjdGlvbjogTWl4ZWRTdWJTZWN0aW9uLCBzZWN0aW9uTGF5b3V0OiBzdHJpbmcpOiB2b2lkIHtcblx0Y29uc3QgZmlyc3RTZWN0aW9uID0gc3ViU2VjdGlvbj8uY29udGVudD8ubGVuZ3RoID09PSAxID8gc3ViU2VjdGlvbi5jb250ZW50WzBdIDogdW5kZWZpbmVkO1xuXHRpZiAoZmlyc3RTZWN0aW9uPy50eXBlID09PSBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbikge1xuXHRcdGNvbnN0IHRhYmxlQ29udHJvbCA9IChmaXJzdFNlY3Rpb24ucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pLmNvbnRyb2w7XG5cdFx0aWYgKHRhYmxlQ29udHJvbC50eXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0XHRmaXJzdFNlY3Rpb24uZGF0YVZpc3VhbGl6YXRpb25PcHRpb25zID8/PSB7fTtcblx0XHRcdGZpcnN0U2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvbk9wdGlvbnNbXCJyb3dDb3VudE1vZGVcIl0gPSBcIkF1dG9cIjtcblx0XHRcdHRhYmxlQ29udHJvbC5yb3dDb3VudE1vZGUgPSBcIkF1dG9cIjtcblx0XHRcdGlmIChzZWN0aW9uTGF5b3V0ICE9PSBcIlRhYnNcIikge1xuXHRcdFx0XHRmaXJzdFNlY3Rpb24uZGF0YVZpc3VhbGl6YXRpb25PcHRpb25zW1widXNlQ29uZGVuc2VkVGFibGVMYXlvdXRcIl0gPSBmYWxzZTtcblx0XHRcdFx0dGFibGVDb250cm9sLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogU2V0IHRoZSBOb25SZXNwb25zaXZlIFRhYmxlIChncmlkLCB0cmVlLCBhbmFseXRpY2FsKSBkaXNwbGF5IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHNlY3Rpb25zIFRoZSBPYmplY3RQYWdlIHNlY3Rpb25zXG4gKiBAcGFyYW0gc2VjdGlvbiBUaGUgY3VycmVudCBPYmplY3RQYWdlIHNlY3Rpb24gcHJvY2Vzc2VkXG4gKiBAcGFyYW0gc2VjdGlvbkxheW91dFxuICovXG5mdW5jdGlvbiBfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlU3ViU2VjdGlvbkNvbnRyb2xDb25maWd1cmF0aW9uKFxuXHRzZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXSxcblx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdHNlY3Rpb25MYXlvdXQ6IHN0cmluZ1xuKTogdm9pZCB7XG5cdGxldCBzdWJTZWN0aW9uVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uO1xuXHRjb25zdCBzdWJTZWN0aW9ucyA9IHNlY3Rpb24uc3ViU2VjdGlvbnM7XG5cdGlmIChzdWJTZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCBzdWJTZWN0aW9uID0gc3ViU2VjdGlvbnNbMF07XG5cdFx0c3dpdGNoIChzdWJTZWN0aW9uLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJEYXRhVmlzdWFsaXphdGlvblwiOlxuXHRcdFx0XHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbiA9IF9nZXRTdWJTZWN0aW9uVmlzdWFsaXphdGlvbihzdWJTZWN0aW9uKTtcblx0XHRcdFx0X3NldE5vblJlc3BvbnNpdmVUYWJsZVZpc3VhbGl6YXRpb25JbmZvcm1hdGlvbihzZWN0aW9ucywgc3ViU2VjdGlvbiwgc3ViU2VjdGlvblZpc3VhbGl6YXRpb24sIHNlY3Rpb25MYXlvdXQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNaXhlZFwiOlxuXHRcdFx0XHRfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlV2l0aE1peEZhY2V0c0luZm9ybWF0aW9uKHN1YlNlY3Rpb24sIHNlY3Rpb25MYXlvdXQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblx0X3JlbW92ZUNvbmRlbnNlZEZyb21TdWJTZWN0aW9ucyhzdWJTZWN0aW9ucyk7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb25kZW5zZSBsYXlvdXQgbW9kZSBmcm9tIHRoZSBzdWJzZWN0aW9ucy5cbiAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3ViU2VjdGlvbnMgd2hlcmUgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNvbmRlbnNlZCBsYXlvdXRcbiAqL1xuZnVuY3Rpb24gX3JlbW92ZUNvbmRlbnNlZEZyb21TdWJTZWN0aW9ucyhzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IHZvaWQge1xuXHRsZXQgZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cdC8vIFdlIGNoZWNrIGluIGVhY2ggc3Vic2VjdGlvbiBpZiB0aGVyZSBpcyB2aXN1YWxpemF0aW9uc1xuXHRzdWJTZWN0aW9ucy5mb3JFYWNoKChzdWJTZWN0aW9uKSA9PiB7XG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0gc3ViU2VjdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cdFx0aWYgKGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbj8ucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucykge1xuXHRcdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uPy5wcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zLmZvckVhY2goKHNpbmdsZVZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0aWYgKHNpbmdsZVZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRzaW5nbGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIFRoZW4gd2UgY2hlY2sgdGhlIGNvbnRlbnQgb2YgdGhlIHN1YnNlY3Rpb24sIGFuZCBpbiBlYWNoIGNvbnRlbnQgd2UgY2hlY2sgaWYgdGhlcmUgaXMgYSB0YWJsZSB0byBzZXQgaXRzIGNvbmRlbnNlZCBsYXlvdXQgdG8gZmFsc2Vcblx0XHRpZiAoZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uPy5jb250ZW50KSB7XG5cdFx0XHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24uY29udGVudC5mb3JFYWNoKChzaW5nbGVDb250ZW50KSA9PiB7XG5cdFx0XHRcdChzaW5nbGVDb250ZW50IGFzIERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbikucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucy5mb3JFYWNoKChzaW5nbGVWaXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHNpbmdsZVZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRcdHNpbmdsZVZpc3VhbGl6YXRpb24uY29udHJvbC51c2VDb25kZW5zZWRUYWJsZUxheW91dCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuLyoqXG4gKiBSZXRyaWV2ZXMgYW5kIG1lcmdlcyB0aGUgT2JqZWN0UGFnZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uIGFuZCBpbiB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlY3Rpb25zLlxuICovXG5cbmV4cG9ydCBjb25zdCBnZXRTZWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgc2VjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldFNlY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRTZWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR7XG5cdFx0XHR0aXRsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRzdWJTZWN0aW9uczoge1xuXHRcdFx0XHRhY3Rpb25zOiBPdmVycmlkZVR5cGUubWVyZ2UsXG5cdFx0XHRcdHRpdGxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0XHRzaWRlQ29udGVudDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdFx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHQvLyBMZXZlbCBBZGp1c3RtZW50IGZvciBcIk1peGVkXCIgQ29sbGVjdGlvbiBGYWNldHM6XG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0Ly8gVGhlIG1hbmlmZXN0IGRlZmluaXRpb24gb2YgY3VzdG9tIHNpZGUgY29udGVudHMgYW5kIGFjdGlvbnMgc3RpbGwgbmVlZHMgdG8gYmUgYWxpZ25lZCBmb3IgXCJNaXhlZFwiIGNvbGxlY3Rpb24gZmFjZXRzOlxuXHQvLyBDb2xsZWN0aW9uIGZhY2V0cyBjb250YWluaW5nIHRhYmxlcyBnYWluIGFuIGV4dHJhIHJlZmVyZW5jZSBmYWNldCBhcyBhIHRhYmxlIHdyYXBwZXIgdG8gZW5zdXJlLCB0aGF0IHRoZSB0YWJsZSBpcyBhbHdheXNcblx0Ly8gcGxhY2VkIGluIGFuIG93biBpbmRpdmlkdWFsIE9iamVjdCBQYWdlIEJsb2NrOyB0aGlzIGFkZGl0aW9uYWwgaGllcmFyY2h5IGxldmVsIGlzIHVua25vd24gdG8gYXBwIGRldmVsb3BlcnMsIHdoaWNoIGFyZVxuXHQvLyBkZWZpbmluZyB0aGUgc2lkZSBjb250ZW50IGFuZCBhY3Rpb25zIGluIHRoZSBtYW5pZmVzdCBhdCBjb2xsZWN0aW9uIGZhY2V0IGxldmVsOyBub3csIHNpbmNlIHRoZSBzaWRlQ29udGVudCBhbHdheXMgbmVlZHNcblx0Ly8gdG8gYmUgYXNzaWduZWQgdG8gYSBibG9jaywgYW5kIGFjdGlvbnMgYWx3YXlzIG5lZWQgdG8gYmUgYXNzaWduZWQgdG8gYSBmb3JtLFxuXHQvLyB3ZSBuZWVkIHRvIG1vdmUgdGhlIHNpZGVDb250ZW50IGFuZCBhY3Rpb25zIGZyb20gYSBtaXhlZCBjb2xsZWN0aW9uIGZhY2V0IHRvIGl0cyBjb250ZW50LlxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdHNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHNlY3Rpb24pIHtcblx0XHRfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlU3ViU2VjdGlvbkNvbnRyb2xDb25maWd1cmF0aW9uKHNlY3Rpb25zLCBzZWN0aW9uLCBtYW5pZmVzdFdyYXBwZXIuZ2V0U2VjdGlvbkxheW91dCgpKTtcblx0XHRzZWN0aW9uLnN1YlNlY3Rpb25zPy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJTZWN0aW9uKSB7XG5cdFx0XHRzdWJTZWN0aW9uLnRpdGxlID0gc3ViU2VjdGlvbi50aXRsZSA9PT0gXCJ1bmRlZmluZWRcIiA/IHVuZGVmaW5lZCA6IHN1YlNlY3Rpb24udGl0bGU7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIpIHtcblx0XHRcdFx0c3ViU2VjdGlvbi5jb250ZW50Py5mb3JFYWNoKChjb250ZW50KSA9PiB7XG5cdFx0XHRcdFx0Y29udGVudC5vYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQgPSBzdWJTZWN0aW9uLm9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIgJiYgc3ViU2VjdGlvbi5jb250ZW50Py5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgZmlyc3RGb3JtID0gc3ViU2VjdGlvbi5jb250ZW50LmZpbmQoXG5cdFx0XHRcdFx0KGVsZW1lbnQpID0+IChlbGVtZW50IGFzIEZvcm1TdWJTZWN0aW9uKS50eXBlID09PSBTdWJTZWN0aW9uVHlwZS5Gb3JtXG5cdFx0XHRcdCkgYXMgRm9ybVN1YlNlY3Rpb247XG5cblx0XHRcdFx0Ly8gMS4gQ29weSBzaWRlQ29udGVudCB0byB0aGUgU3ViU2VjdGlvbidzIGZpcnN0IGZvcm07IG9yIC0tIGlmIHVuYXZhaWxhYmxlIC0tIHRvIGl0cyBmaXJzdCBjb250ZW50XG5cdFx0XHRcdC8vIDIuIENvcHkgYWN0aW9ucyB0byB0aGUgZmlyc3QgZm9ybSBvZiB0aGUgU3ViU2VjdGlvbidzIGNvbnRlbnRcblx0XHRcdFx0Ly8gMy4gRGVsZXRlIHNpZGVDb250ZW50IC8gYWN0aW9ucyBhdCB0aGUgKGludmFsaWQpIG1hbmlmZXN0IGxldmVsXG5cblx0XHRcdFx0aWYgKHN1YlNlY3Rpb24uc2lkZUNvbnRlbnQpIHtcblx0XHRcdFx0XHRpZiAoZmlyc3RGb3JtKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIGZvcm0sIGl0IGFsd2F5cyBuZWVkcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgZm9ybSwgYXMgdGhlIGZvcm0gaW5oZXJpdHMgdGhlIElEIG9mIHRoZSBTdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHRmaXJzdEZvcm0uc2lkZUNvbnRlbnQgPSBzdWJTZWN0aW9uLnNpZGVDb250ZW50O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdWJTZWN0aW9uLmNvbnRlbnRbMF0uc2lkZUNvbnRlbnQgPSBzdWJTZWN0aW9uLnNpZGVDb250ZW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzdWJTZWN0aW9uLnNpZGVDb250ZW50ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpcnN0Rm9ybSAmJiAoc3ViU2VjdGlvbiBhcyB1bmtub3duIGFzIEZvcm1TdWJTZWN0aW9uKS5hY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRmaXJzdEZvcm0uYWN0aW9ucyA9IChzdWJTZWN0aW9uIGFzIHVua25vd24gYXMgRm9ybVN1YlNlY3Rpb24pLmFjdGlvbnM7XG5cdFx0XHRcdFx0KHN1YlNlY3Rpb24gYXMgdW5rbm93biBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIE9iamVjdFBhZ2UgaGFzIGhlYWRlciBjb250ZW50LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uIGhlYWRlciBmYWNldFxuICovXG5mdW5jdGlvbiBoYXNIZWFkZXJDb250ZW50KGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gKFxuXHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckZhY2V0cyB8fCBbXSkubGVuZ3RoID4gMCB8fFxuXHRcdE9iamVjdC5rZXlzKG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJGYWNldHMoKSkubGVuZ3RoID4gMFxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGhlYWRlciBjb250ZW50LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0IWhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0Y29uc3RhbnQoZmFsc2UpLFxuXHRcdGlmRWxzZShlcXVhbChtYW5pZmVzdFdyYXBwZXIuaXNIZWFkZXJFZGl0YWJsZSgpLCBmYWxzZSksIGNvbnN0YW50KHRydWUpLCBub3QoVUkuSXNFZGl0YWJsZSkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWFkZXIgY29udGVudC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTaG93SGVhZGVyQ29udGVudCA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIEVhc3lGaWxsIGJ1dHRvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRWFzeUZpbGwgYnV0dG9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFYXN5RmlsbFZpc2libGUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKSxcblx0XHRlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0aXNVcGRhdGVIaWRkZW4gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oTW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKSk7XG5cdGNvbnN0IGlzRHJhZnRFbmFibGVkID0gTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBpc1N0aWNreSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5KGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnN0YXJ0aW5nRW50aXR5U2V0KTtcblx0Ly8gRWFzeUZpbGwgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIG9iamVjdCBwYXRoIGlzIGRyYWZ0IGVuYWJsZWQgYW5kIHN0aWNreVxuXHRpZiAoIWlzRHJhZnRFbmFibGVkICYmICFpc1N0aWNreSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmYWxzZSk7XG5cdH1cblx0Y29uc3Qgdmlld0xldmVsID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRWaWV3TGV2ZWwoKTtcblx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdmlld0xldmVsID4gMSA/IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5VcGRhdGVSZXN0cmljdGlvbnM/LlVwZGF0YWJsZSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNFZGl0RW5hYmxlZCA9IGdldEVkaXRCdXR0b25FbmFibGVkRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGFibGVQcm9wZXJ0eVBhdGgsIHZpZXdMZXZlbCk7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQobm90KGlzVXBkYXRlSGlkZGVuKSwgaXNFZGl0RW5hYmxlZCkpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGF2YXRhciB3aGVuIHRoZSBoZWFkZXIgaXMgaW4gZXhwYW5kZWQgc3RhdGUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24obm90KGdldFNob3dIZWFkZXJDb250ZW50RXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0KSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRQYWdlID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBPYmplY3RQYWdlRGVmaW5pdGlvbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGxldCBoZWFkZXJTZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZDtcblx0Y29uc3QgZW50aXR5VHlwZTogRW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXG5cdC8vIFJldHJpZXZlIGFsbCBoZWFkZXIgZmFjZXRzIChmcm9tIGFubm90YXRpb25zICYgY3VzdG9tKVxuXHRjb25zdCBoZWFkZXJGYWNldHMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRIZWFkZXJGYWNldHNGcm9tQW5ub3RhdGlvbnMoY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJGYWNldHMoKSlcblx0KTtcblxuXHQvLyBSZXRyaWV2ZSB0aGUgcGFnZSBoZWFkZXIgYWN0aW9uc1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gZ2V0SGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBjYXBhYmlsaXRpZXMpO1xuXG5cdC8vIFJldHJpZXZlIHRoZSBwYWdlIGZvb3RlciBhY3Rpb25zXG5cdGNvbnN0IGZvb3RlckFjdGlvbnMgPSBnZXRGb290ZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQsIGNhcGFiaWxpdGllcyk7XG5cblx0aWYgKG1hbmlmZXN0V3JhcHBlci5pc0hlYWRlckVkaXRhYmxlKCkgJiYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckZhY2V0cyB8fCBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvKSkge1xuXHRcdGhlYWRlclNlY3Rpb24gPSBjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24oY29udmVydGVyQ29udGV4dCwgaGVhZGVyRmFjZXRzKTtcblx0fVxuXG5cdGNvbnN0IHNlY3Rpb25zID0gZ2V0U2VjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsXG5cdFx0aGVhZGVyOiB7XG5cdFx0XHR2aXNpYmxlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKSxcblx0XHRcdHNlY3Rpb246IGhlYWRlclNlY3Rpb24sXG5cdFx0XHRmYWNldHM6IGhlYWRlckZhY2V0cyxcblx0XHRcdGFjdGlvbnM6IGhlYWRlckFjdGlvbnMuYWN0aW9ucyxcblx0XHRcdGVhc3lGaWxsVmlzaWJsZTogZ2V0RWFzeUZpbGxWaXNpYmxlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0c2hvd0NvbnRlbnQ6IGdldFNob3dIZWFkZXJDb250ZW50KGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0aGFzQ29udGVudDogaGFzSGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGF2YXRhcjogZ2V0QXZhdGFyKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0ZXhwYW5kZWRJbWFnZVZpc2libGU6IGdldEV4cGFuZGVkSW1hZ2VWaXNpYmxlKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWN0aW9uczogc2VjdGlvbnMsXG5cdFx0Zm9vdGVyQWN0aW9uczogZm9vdGVyQWN0aW9ucy5hY3Rpb25zLFxuXHRcdGhlYWRlckNvbW1hbmRBY3Rpb25zOiBoZWFkZXJBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdGZvb3RlckNvbW1hbmRBY3Rpb25zOiBmb290ZXJBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdHNob3dBbmNob3JCYXI6IG1hbmlmZXN0V3JhcHBlci5nZXRTaG93QW5jaG9yQmFyKCksXG5cdFx0dXNlSWNvblRhYkJhcjogbWFuaWZlc3RXcmFwcGVyLnVzZUljb25UYWJCYXIoKSxcblx0XHR0cmFuc3BvcnRTZWxlY3Rpb246IG1hbmlmZXN0V3JhcHBlci5nZXRUcmFuc3BvcnRTZWxlY3Rpb24oKVxuXHR9O1xufTtcbiJd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
@@ -211,7 +211,7 @@ function getSectionFromManifest(
211
211
  sectionKey: string,
212
212
  converterContext: ConverterContext<PageContextPathTarget>
213
213
  ): CustomObjectPageSection {
214
- const customSectionID = customSectionDefinition.id || getCustomSectionID(sectionKey);
214
+ const customSectionID = customSectionDefinition.id ? getCustomSectionID(customSectionDefinition.id) : getCustomSectionID(sectionKey);
215
215
  let position: Position | undefined = customSectionDefinition.position;
216
216
  if (!position) {
217
217
  position = {
@@ -4,7 +4,7 @@
4
4
  "id": "sap.fe.core.fpm",
5
5
  "type": "component",
6
6
  "applicationVersion": {
7
- "version": "1.136.7"
7
+ "version": "1.136.9"
8
8
  },
9
9
  "title": "Object Page",
10
10
  "tags": {