@sapui5/sap.fe.core 1.136.0 → 1.136.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) 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 +4 -6
  4. package/src/sap/fe/core/AppComponent.ts +4 -4
  5. package/src/sap/fe/core/CommonUtils.js +41 -14
  6. package/src/sap/fe/core/CommonUtils.ts +47 -16
  7. package/src/sap/fe/core/IRowBindingInterface.js +1 -1
  8. package/src/sap/fe/core/IRowBindingInterface.ts +1 -1
  9. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +4 -1
  10. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +3 -0
  11. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +12 -4
  12. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +10 -3
  13. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +139 -5
  14. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +169 -4
  15. package/src/sap/fe/core/controllerextensions/EditFlow.js +48 -43
  16. package/src/sap/fe/core/controllerextensions/EditFlow.ts +54 -51
  17. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +39 -5
  18. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +38 -1
  19. package/src/sap/fe/core/controllerextensions/InternalRouting.js +12 -13
  20. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +10 -11
  21. package/src/sap/fe/core/controllerextensions/MessageHandler.js +32 -21
  22. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +31 -20
  23. package/src/sap/fe/core/controllerextensions/PageReady.js +6 -3
  24. package/src/sap/fe/core/controllerextensions/PageReady.ts +6 -2
  25. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -2
  26. package/src/sap/fe/core/controllerextensions/Recommendations.ts +7 -5
  27. package/src/sap/fe/core/controllerextensions/Share.js +6 -6
  28. package/src/sap/fe/core/controllerextensions/Share.ts +3 -4
  29. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +9 -11
  30. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +8 -13
  31. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +9 -9
  32. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +20 -10
  33. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +31 -8
  34. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +46 -9
  35. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
  36. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
  37. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +20 -18
  38. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +37 -23
  39. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +4 -3
  40. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +6 -1
  41. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +6 -3
  42. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +11 -3
  43. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -2
  44. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +3 -2
  45. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +2 -2
  46. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +1 -1
  47. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  48. package/src/sap/fe/core/controls/CommandExecution.ts +1 -1
  49. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +3 -2
  50. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +2 -0
  51. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -2
  52. package/src/sap/fe/core/converters/controls/Common/Action.ts +4 -1
  53. package/src/sap/fe/core/converters/controls/Common/Chart.js +7 -2
  54. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -1
  55. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +41 -58
  56. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +43 -111
  57. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +14 -6
  58. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +23 -6
  59. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -3
  60. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +5 -2
  61. package/src/sap/fe/core/formatters/ValueFormatter.js +21 -1
  62. package/src/sap/fe/core/formatters/ValueFormatter.ts +19 -0
  63. package/src/sap/fe/core/fpm/manifest.json +1 -1
  64. package/src/sap/fe/core/helpers/DeleteHelper.js +2 -2
  65. package/src/sap/fe/core/helpers/DeleteHelper.ts +1 -1
  66. package/src/sap/fe/core/helpers/ModelHelper.js +2 -2
  67. package/src/sap/fe/core/helpers/ModelHelper.ts +1 -1
  68. package/src/sap/fe/core/helpers/PasteHelper.js +2 -2
  69. package/src/sap/fe/core/helpers/PasteHelper.ts +1 -1
  70. package/src/sap/fe/core/helpers/StableIdHelper.js +2 -2
  71. package/src/sap/fe/core/helpers/StableIdHelper.ts +4 -1
  72. package/src/sap/fe/core/helpers/TitleHelper.js +13 -6
  73. package/src/sap/fe/core/helpers/TitleHelper.ts +19 -6
  74. package/src/sap/fe/core/library.js +1 -1
  75. package/src/sap/fe/core/messagebundle.properties +0 -1
  76. package/src/sap/fe/core/rootView/Fcl.controller.js +9 -15
  77. package/src/sap/fe/core/rootView/Fcl.controller.ts +9 -15
  78. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +9 -6
  79. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -6
  80. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
  81. package/src/sap/fe/core/templating/DataModelPathHelper.ts +1 -1
  82. package/src/sap/fe/core/templating/EntitySetHelper.js +60 -48
  83. package/src/sap/fe/core/templating/EntitySetHelper.ts +80 -58
  84. package/src/sap/fe/core/templating/SemanticObjectHelper.js +6 -4
  85. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +5 -5
  86. package/src/sap/fe/core/templating/UIFormatters.js +7 -1
  87. package/src/sap/fe/core/templating/UIFormatters.ts +4 -0
@@ -377,12 +377,17 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
377
377
  name: "$search",
378
378
  path: "$search",
379
379
  dataType: sStringDataType,
380
- maxConditions: 1
380
+ maxConditions: 1,
381
+ label: " ",
382
+ constraints: {
383
+ maxLength: 1000
384
+ }
381
385
  };
382
386
  };
383
387
  const getEditStateFilterPropertyInfo = function () {
384
388
  return {
385
389
  name: "$editState",
390
+ maxConditions: 1,
386
391
  path: "$editState",
387
392
  groupLabel: "",
388
393
  group: "",
@@ -605,11 +610,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
605
610
  };
606
611
  };
607
612
  const fetchTypeConfig = function (property) {
608
- const oTypeConfig = getTypeConfig(property, property?.type);
609
- if (property?.type === sEdmString && (oTypeConfig.constraints.nullable === undefined || oTypeConfig.constraints.nullable === true)) {
610
- oTypeConfig.formatOptions.parseKeepsEmptyString = false;
613
+ const typeConfig = getTypeConfig(property);
614
+ if (property?.type === sEdmString && typeConfig.constraints?.nullable !== false) {
615
+ typeConfig.formatOptions = {
616
+ ...typeConfig.formatOptions,
617
+ parseKeepsEmptyString: false
618
+ };
611
619
  }
612
- return oTypeConfig;
620
+ return typeConfig;
613
621
  };
614
622
  _exports.fetchTypeConfig = fetchTypeConfig;
615
623
  const assignDataTypeToPropertyInfo = function (propertyInfoField, converterContext, aRequiredProps, aTypeConfig) {
@@ -839,4 +847,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
839
847
  _exports.getExpandFilterFields = getExpandFilterFields;
840
848
  return _exports;
841
849
  }, false);
842
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJjb252ZXJ0ZXJDb250ZXh0Iiwic2VsZWN0aW9uVmFyaWFudFBhdGhzIiwiU2V0IiwibWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVyRmllbGRzIiwic2VsZWN0aW9uRmllbGRQYXRocyIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJTZWxlY3Rpb25GaWVsZHMiLCJtYXAiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsInRlbXBsYXRlIiwidmlzdWFsaXphdGlvbiIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsImxlbmd0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJsaXN0UmVwb3J0VGFibGVzIiwiY2hhcnRzIiwibm9TZWFyY2hJbkNoYXJ0cyIsImV2ZXJ5IiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljcyIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJfZXhwb3J0cyIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwibWFuaWZlc3RXcmFwcGVyIiwic2V0dGluZ3NDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImZpbHRlckNvbmZpZ3VyYXRpb25QYXRoIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJmYkNvbmZpZyIsImRlZmluZWRGaWx0ZXJGaWVsZHMiLCJnZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5Iiwic0tleSIsIlNsb3QiLCJEZWZhdWx0IiwidmlzdWFsRmlsdGVyIiwiZ2V0VmlzdWFsRmlsdGVycyIsImlzQ3VzdG9tRmlsdGVyIiwic2xvdE5hbWUiLCJkb2N1bWVudFJlZlRleHQiLCJmZXRjaFRleHRGcm9tTWV0YU1vZGVsIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInJlcXVpcmVkIiwib2JqZWN0UGF0aCIsImZpbHRlckJhckNvbnRleHRQYXRoIiwibWV0YVBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwic1Jlc3RyaWN0aW9uIiwiYVByb3BzIiwib1Byb3BlcnR5IiwiZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvIiwiZGF0YVR5cGUiLCJtYXhDb25kaXRpb25zIiwiZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvIiwiaGlkZGVuRmlsdGVyIiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwiZW50aXR5U2V0IiwiaXNFbnRpdHlTZXQiLCJDYXBhYmlsaXRpZXMiLCJTZWFyY2hSZXN0cmljdGlvbnMiLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwic05hdmlnYXRpb25QYXRoIiwib05hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJvUmVzdHJpY3RlZFByb3BlcnR5IiwiTmF2aWdhdGlvblByb3BlcnR5IiwiX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8iLCJvRmlsdGVyRmllbGRJbmZvIiwiZGlzcGxheSIsImNhc2VTZW5zaXRpdmUiLCJtZW51IiwiX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzIiwiaGFzT3duUHJvcGVydHkiLCJkaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIlRleHQiLCJvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uIiwiVGV4dEFycmFuZ2VtZW50IiwiZmV0Y2hQcm9wZXJ0eUluZm8iLCJvVHlwZUNvbmZpZyIsIm9Qcm9wZXJ0eUluZm8iLCJzQW5ub3RhdGlvblBhdGgiLCJ0YXJnZXRQcm9wZXJ0eU9iamVjdCIsIm9Gb3JtYXRPcHRpb25zIiwiZm9ybWF0T3B0aW9ucyIsIm9Db25zdHJhaW50cyIsImNvbnN0cmFpbnRzIiwiYXNzaWduIiwiaXNNdWx0aVZhbHVlIiwiYklzTXVsdGlWYWx1ZSIsImZpbHRlckV4cHJlc3Npb24iLCJpbmRleE9mIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImVudHJ5IiwiaW5jbHVkZXMiLCJhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydGllcyIsInRhcmdldFByb3BlcnR5IiwiJHRhcmdldCIsImFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJUYXJnZXQiLCJpbm5lckRhdGFGaWVsZCIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJsclRhYmxlcyIsImFyZ3VtZW50cyIsImxpbmVJdGVtVGVybSIsImdldEVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJNb2RlbEhlbHBlciIsImlzRHJhZnRSb290Iiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3RPcHRpb25zIiwicHJvcGVydHlJbmZvRmllbGRzIiwicmVkdWNlIiwiZmlsdGVyUHJvcGVydHlQYXRoIiwiZGVmYXVsdEZpbHRlckZpZWxkcyIsImZldGNoVHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJudWxsYWJsZSIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8iLCJwcm9wZXJ0eUluZm9GaWVsZCIsImFSZXF1aXJlZFByb3BzIiwiYVR5cGVDb25maWciLCJnZXRNYXhDb25kaXRpb25zIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwicHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyIsImRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzIiwiY29uY2F0IiwicGFyYW1ldGVyRmllbGQiLCJwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0Iiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIm9SZXQiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNFbnRpdHlTZXRQYXRoIiwiYVBhdGhQYXJ0cyIsInNwbGljZSIsIm9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zIiwiYU5vbkZpbHRlcmFibGVQcm9wcyIsImFGZXRjaGVkUHJvcGVydGllcyIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJhcHAiLCJoaWRlRHJhZnQiLCJlbmFibGVkIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJzaG93RHJhZnRFZGl0U3RhdHVzIiwic2VhcmNoUmVzdHJpY3Rpb25zIiwiaGlkZUJhc2ljU2VhcmNoIiwiQm9vbGVhbiIsIlNlYXJjaGFibGUiLCJuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiRmlsdGVyYWJsZSIsImluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsInNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsIiwicHJvcGVydHlJbmZvcyIsInNvcnQiLCJhIiwiYiIsImFHcm91cExhYmVsSXNTZXQiLCJiR3JvdXBMYWJlbElzU2V0IiwibG9jYWxlQ29tcGFyZSIsImdldFNlbGVjdGlvbkZpZWxkcyIsIm9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJwYXJhbWV0ZXJGaWVsZHMiLCJzRmV0Y2hQcm9wZXJ0aWVzIiwiSlNPTiIsInN0cmluZ2lmeSIsInNQcm9wZXJ0eUluZm8iLCJwcm9wU2VsZWN0aW9uRmllbGRzIiwicGFyc2UiLCJmaWx0ZXJGYWNldHMiLCJGaWx0ZXJGYWNldHMiLCJhRmllbGRHcm91cHMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsImkiLCJwcmV2aW91c1ZhbHVlIiwiZmlsdGVyRmFjZXQiLCJJRCIsImFsbEZpbHRlcnMiLCJpc0Nhc2VTZW5zaXRpdmUiLCJnZXRFeHBhbmRGaWx0ZXJGaWVsZHMiLCJmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwidmFsdWVMaXN0IiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiRmV0Y2hWYWx1ZXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpbHRlckJhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFubm90YXRpb25UZXJtLCBFbnRpdHlTZXQsIEVudGl0eVR5cGUsIE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHksIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWx0ZXJSZXN0cmljdGlvbnMsXG5cdEZpbHRlclJlc3RyaWN0aW9uc1R5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uLFxuXHRTZWFyY2hSZXN0cmljdGlvbnNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgVmFsdWVMaXN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5VHlwZUFubm90YXRpb25zLCBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0U2VsZWN0T3B0aW9uVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlUeXBlQ29uZmlnIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IGdldFR5cGVDb25maWcsIGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBnZXRNYXhDb25kaXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgeyBnZXRWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCwgUG9zaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0NvbXBsZXhUeXBlLCBpc0VudGl0eVNldCwgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocywgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFR5cGVDb25maWcgZnJvbSBcInNhcC91aS9tZGMvVHlwZUNvbmZpZ1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJTZXR0aW5nc1xufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG4vL2ltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckZpZWxkID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGRvY3VtZW50UmVmVGV4dD86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdG1lbnU/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0dmlzdWFsRmlsdGVyPzogVmlzdWFsRmlsdGVycztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1hbmlmZXN0RmlsdGVyRmllbGQgPSBGaWx0ZXJGaWVsZCAmIHtcblx0c2xvdE5hbWU/OiBzdHJpbmc7XG59O1xuXG50eXBlIEZpbHRlckdyb3VwID0ge1xuXHRncm91cD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcbn07XG5cbmVudW0gZmlsdGVyRmllbGRUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxuY29uc3Qgc0VkbVN0cmluZyA9IFwiRWRtLlN0cmluZ1wiO1xuY29uc3Qgc1N0cmluZ0RhdGFUeXBlID0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkID0gQ3VzdG9tRWxlbWVudDxNYW5pZmVzdEZpbHRlckZpZWxkPjtcblxuLyoqXG4gKiBFbnRlciBhbGwgRGF0YUZpZWxkcyBvZiBhIGdpdmVuIEZpZWxkR3JvdXAgaW50byB0aGUgZmlsdGVyRmFjZXRNYXAuXG4gKiBAcGFyYW0gZmllbGRHcm91cFxuICogQHJldHVybnMgVGhlIG1hcCBvZiBmYWNldHMgZm9yIHRoZSBnaXZlbiBGaWVsZEdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoZmllbGRHcm91cDogRmllbGRHcm91cCk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiB7XG5cdGNvbnN0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblx0ZmllbGRHcm91cC5EYXRhLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwW2RhdGFGaWVsZC5WYWx1ZS5wYXRoXSA9IHtcblx0XHRcdFx0Z3JvdXA6IGZpZWxkR3JvdXAuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRncm91cExhYmVsOiBmaWVsZEdyb3VwLkxhYmVsPy50b1N0cmluZygpID8/IGZpZWxkR3JvdXAuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gZmllbGRHcm91cC5xdWFsaWZpZXJcblx0XHRcdH07XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZpbHRlckZhY2V0TWFwO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzIHVzZWQgaW4gdGhlIGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyB0aGF0IHNob3VsZCBiZSBleGNsdWRlZC5cbiAqIEBwYXJhbSBsclRhYmxlVmlzdWFsaXphdGlvbnMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZXhjbHVkZWQgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoXG5cdGxyVGFibGVWaXN1YWxpemF0aW9uczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogU2V0PHN0cmluZz4ge1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50UGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Y29uc3QgbWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKS5maWx0ZXJGaWVsZHMgPz8ge307XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oW1xuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgYW5ub3RhdGlvblxuXHRcdC4uLihjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcyA/PyBbXSkubWFwKFxuXHRcdFx0KHNlbGVjdGlvbkZpZWxkKSA9PiBzZWxlY3Rpb25GaWVsZC52YWx1ZVxuXHRcdCksXG5cdFx0Ly9TZWxlY3Rpb24gRmllbGRzIGNvbWluZyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgbm90IHdpdGggY3VzdG9tIHRlbXBsYXRlXG5cdFx0Li4uT2JqZWN0LmtleXMobWFuaWZlc3RGaWx0ZXJGaWVsZHMpLmZpbHRlcigoa2V5KSA9PiAhIW1hbmlmZXN0RmlsdGVyRmllbGRzW2tleV0udGVtcGxhdGUpXG5cdF0pO1xuXG5cdHJldHVybiBuZXcgU2V0KFxuXHRcdGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdFx0Lm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCB0YWJsZUZpbHRlcnMgPSB2aXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycztcblx0XHRcdFx0aWYgKCF0YWJsZUZpbHRlcnMpIHtcblx0XHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIFsuLi4odGFibGVGaWx0ZXJzLmhpZGRlbkZpbHRlcnM/LnBhdGhzID8/IFtdKSwgLi4uKHRhYmxlRmlsdGVycy5xdWlja0ZpbHRlcnM/LnBhdGhzID8/IFtdKV0ubWFwKChwYXRoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBwYXRoLmFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdGlmICghc2VsZWN0aW9uVmFyaWFudFBhdGhzLmhhcyhhbm5vdGF0aW9uUGF0aCkpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRocy5hZGQoYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudENvbmZpZyA9IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcyA9IHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0KHByb3BlcnR5TmFtZSkgPT4gIXNlbGVjdGlvbkZpZWxkUGF0aHMuaGFzKHByb3BlcnR5TmFtZSlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnRDb25maWcucHJvcGVydHlOYW1lcztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuZmxhdCgyKVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbmRpdGlvbiBwYXRoIHJlcXVpcmVkIGZvciB0aGUgY29uZGl0aW9uIG1vZGVsLiBJdCBsb29rcyBhcyBmb2xsb3dzOlxuICogPDE6Ti1Qcm9wZXJ0eU5hbWU+KlxcLzwxOjEtUHJvcGVydHlOYW1lPi88UHJvcGVydHlOYW1lPi5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSByb290IEVudGl0eVR5cGVcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGNvbmRpdGlvbiBwYXRoXG4gKi9cbmNvbnN0IF9nZXRDb25kaXRpb25QYXRoID0gZnVuY3Rpb24gKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIHByb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcGFydHMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRsZXQgcGFydGlhbFBhdGg7XG5cdGxldCBrZXkgPSBcIlwiO1xuXHR3aGlsZSAocGFydHMubGVuZ3RoKSB7XG5cdFx0bGV0IHBhcnQgPSBwYXJ0cy5zaGlmdCgpIGFzIHN0cmluZztcblx0XHRwYXJ0aWFsUGF0aCA9IHBhcnRpYWxQYXRoID8gYCR7cGFydGlhbFBhdGh9LyR7cGFydH1gIDogcGFydDtcblx0XHRjb25zdCBwcm9wZXJ0eTogUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhcnRpYWxQYXRoKTtcblx0XHRpZiAoaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdHBhcnQgKz0gXCIqXCI7XG5cdFx0fVxuXHRcdGtleSA9IGtleSA/IGAke2tleX0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHR9XG5cdHJldHVybiBrZXk7XG59O1xuXG5jb25zdCBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSxcblx0ZnVsbFByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0Ly8gaWdub3JlIGNvbXBsZXggcHJvcGVydHkgdHlwZXMgYW5kIGhpZGRlbiBhbm5vdGF0ZWQgb25lc1xuXHRpZiAocHJvcGVydHkgJiYgcHJvcGVydHkudGFyZ2V0VHlwZSA9PT0gdW5kZWZpbmVkICYmIChpbmNsdWRlSGlkZGVuIHx8IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgIT09IHRydWUpKSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUocHJvcGVydHkpLFxuXHRcdFx0ZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkID0ge1xuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRjb25kaXRpb25QYXRoOiBfZ2V0Q29uZGl0aW9uUGF0aChlbnRpdHlUeXBlLCBmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpID09PSB0cnVlID8gXCJIaWRkZW5cIiA6IFwiQWRhcHRhdGlvblwiLFxuXHRcdFx0XHRsYWJlbDogcHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRncm91cDogdGFyZ2V0RW50aXR5VHlwZS5uYW1lLFxuXHRcdFx0XHRncm91cExhYmVsOiB0YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyB0YXJnZXRFbnRpdHlUeXBlLm5hbWVcblx0XHRcdH07XG5cdFx0Z2V0U2V0dGluZ3NPZkRlZmF1bHRGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGQpO1xuXHRcdHJldHVybiBmaWx0ZXJGaWVsZDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRlY2huaWNhbCBwcm9wZXJ0eSBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS4gT25seSByZWxldmFudCBmb3IgQ3JlYXRpb25EYXRlVGltZVxuICogYW5kIExhc3RDaGFuZ2VEYXRlVGltZSwgYXMgdGhleSBhcmUgZGlzcGxheWluZyB0aGUgdGltZWZyYW1lIHJlbGF0ZWQgcHJvcGVydGllcyBhcyBhIFNlbWFudGljRGF0ZVJhbmdlLlxuICogQHBhcmFtIGZpbHRlckZpZWxkXG4gKi9cbmNvbnN0IGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0ZmlsdGVyRmllbGQua2V5ID09PSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhOjpDcmVhdGlvbkRhdGVUaW1lXCIgfHxcblx0XHRmaWx0ZXJGaWVsZC5rZXkgPT09IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGE6Okxhc3RDaGFuZ2VEYXRlVGltZVwiXG5cdCkge1xuXHRcdGNvbnN0IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMgPSBbXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLlRPLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5UT01PUlJPVyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFdFRUssXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRNT05USCxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuTkVYVFFVQVJURVIsXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRZRUFSXG5cdFx0XTtcblx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdG9wZXJhdG9yQ29uZmlndXJhdGlvbjogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0aDogXCJrZXlcIixcblx0XHRcdFx0XHRlcXVhbHM6IHN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuam9pbihcIixcIiksXG5cdFx0XHRcdFx0ZXhjbHVkZTogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0cHJvcGVydGllczogQXJyYXk8UHJvcGVydHk+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkTWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZnVsbFBhdGg6IHN0cmluZyA9IChuYXZpZ2F0aW9uUGF0aCA/IGAke25hdmlnYXRpb25QYXRofS9gIDogXCJcIikgKyBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBwcm9wZXJ0eSwgZnVsbFBhdGgsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKHNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0XHRcdHNlbGVjdGlvbkZpZWxkTWFwW2Z1bGxQYXRoXSA9IHNlbGVjdGlvbkZpZWxkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZE1hcDtcbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGggPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5UGF0aHM6IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0bGV0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0eVBhdGhzKSB7XG5cdFx0cHJvcGVydHlQYXRocy5mb3JFYWNoKChwcm9wZXJ0eVBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2FsU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0XHRcdGNvbnN0IGVuaGFuY2VkUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdHByb3BlcnR5UGF0aFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZW5oYW5jZWRQYXRoLnRhcmdldE9iamVjdDtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydHkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoIWluY2x1ZGVIaWRkZW4gJiZcblx0XHRcdFx0XHRlbmhhbmNlZFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZChcblx0XHRcdFx0XHRcdChuYXZpZ2F0aW9uUHJvcGVydHkpID0+IG5hdmlnYXRpb25Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlXG5cdFx0XHRcdFx0KSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUuZW50aXR5UHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSBpZiAoaXNDb21wbGV4VHlwZShwcm9wZXJ0eS50YXJnZXRUeXBlKSkge1xuXHRcdFx0XHQvLyBoYW5kbGUgQ29tcGxleFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0Z2V0VGFyZ2V0TmF2aWdhdGlvblBhdGgoZW5oYW5jZWRQYXRoLCB0cnVlKSxcblx0XHRcdFx0XHRbcHJvcGVydHldLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSB7XG5cdFx0XHRcdC4uLnNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdFx0Li4ubG9jYWxTZWxlY3Rpb25GaWVsZHNcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbmNvbnN0IF9nZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0bGV0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRkZWxldGUgZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpLCBwcm9wZXJ0eVBhdGgsIHRydWUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9XG5cdGlmICghZmlsdGVyRmllbGQpIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCk/LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUlTU0lOR19TRUxFQ1RJT05GSUVMRCk7XG5cdH1cblx0Ly8gZGVmaW5lZCBTZWxlY3Rpb25GaWVsZHMgYXJlIGF2YWlsYWJsZSBieSBkZWZhdWx0XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIiA/IFwiSGlkZGVuXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRmaWx0ZXJGaWVsZC5pc1BhcmFtZXRlciA9ICEhZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZDtcbn07XG5cbmNvbnN0IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRhU2VsZWN0T3B0aW9uczogU2VsZWN0T3B0aW9uVHlwZVtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogU2V0PHN0cmluZz4sXG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogUHJvcGVydHlQYXRoW11cbik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcblx0Y29uc3QgVUlTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdC8vIFVzaW5nIGVudGl0eVR5cGUgaW5zdGVhZCBvZiBlbnRpdHlTZXRcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFVJU2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdH0pO1xuXHRpZiAoYVNlbGVjdE9wdGlvbnMgJiYgYVNlbGVjdE9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlOYW1lPy52YWx1ZTtcblx0XHRcdGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHNQcm9wZXJ0eVBhdGggJiYgIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMoc1Byb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBjdXJyZW50U2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHNQcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmlsdGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGlmICghKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgJiYgIShwcm9wZXJ0eVBhdGggaW4gVUlTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQocHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuLyoqXG4gKiBHZXQgYWxsIHBhcmFtZXRlciBmaWx0ZXIgZmllbGRzIGluIGNhc2Ugb2YgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFyYW1ldGVyIEZpbHRlckZpZWxkc1xuICovXG5mdW5jdGlvbiBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZCA9ICEhcGFyYW1ldGVyRW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0ICYmICFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldDtcblx0Y29uc3QgcGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCA9XG5cdFx0aXNQYXJhbWV0ZXJpemVkICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxFbnRpdHlTZXQ+KGAvJHtkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWV9YCk7XG5cblx0cmV0dXJuIChcblx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0XHRcdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHQgIH0pXG5cdFx0XHQ6IFtdXG5cdCkgYXMgRmlsdGVyRmllbGRbXTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3QuXG4gKiBAcGFyYW0gbGlzdFJlcG9ydFRhYmxlcyBUaGUgbGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY2hhcnRzIFRoZSBBTFAgY2hhcnRzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2ggPSBmdW5jdGlvbiAoXG5cdGxpc3RSZXBvcnRUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjaGFydHM6IENoYXJ0VmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IGJvb2xlYW4ge1xuXHQvLyBDaGVjayBpZiBjaGFydHMgYWxsb3cgc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5DaGFydHMgPSBjaGFydHMubGVuZ3RoID09PSAwIHx8IGNoYXJ0cy5ldmVyeSgoY2hhcnQpID0+ICFjaGFydC5hcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2gpO1xuXG5cdC8vIENoZWNrIGlmIGFsbCB0YWJsZXMgYXJlIGFuYWx5dGljYWwgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdC8vIG9yIGFsbCB0YWJsZXMgYXJlIFRyZWVUYWJsZSBhbmQgbm9uZSBvZiB0aGVtIGFsbG93IGZvciBzZWFyY2hcblx0Y29uc3Qgbm9TZWFyY2hJblRhYmxlcyA9XG5cdFx0bGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPT09IDAgfHxcblx0XHRsaXN0UmVwb3J0VGFibGVzLmV2ZXJ5KCh0YWJsZSkgPT4gKHRhYmxlLmVuYWJsZUFuYWx5dGljcyB8fCB0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpICYmICF0YWJsZS5lbmFibGVCYXNpY1NlYXJjaCk7XG5cblx0Y29uc3QgY29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGlmIChjb250ZXh0UGF0aCAmJiBub1NlYXJjaEluQ2hhcnRzICYmIG5vU2VhcmNoSW5UYWJsZXMpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGZpbHRlciBmaWVsZHMgZnJvbSB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBBbm5vdGF0aW9uIHBhdGggb2YgdGhlIHNlbGVjdGlvbiBmaWVsZHNcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgZmllbGRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZ1xuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cblx0Y29uc3Qgc2V0dGluZ3NDb250ZXh0UGF0aCA9XG5cdFx0bWFuaWZlc3RXcmFwcGVyLmdldENvbnRleHRQYXRoKCkgfHwgKG1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSA/IGAvJHttYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCl9YCA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IGZpbHRlckNvbmZpZ3VyYXRpb25QYXRoID0gZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgoY29udmVydGVyQ29udGV4dCwgc2V0dGluZ3NDb250ZXh0UGF0aCwgYW5ub3RhdGlvblBhdGgpO1xuXHRsZXQgZmJDb25maWc6IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IHt9O1xuXHRmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKGZpbHRlckNvbmZpZ3VyYXRpb25QYXRoKTtcblxuXHRjb25zdCBkZWZpbmVkRmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj4gPSBmYkNvbmZpZz8uZmlsdGVyRmllbGRzIHx8IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRPYmplY3Qua2V5cyhkZWZpbmVkRmlsdGVyRmllbGRzKS5tYXAoKGtleSkgPT4gZGVmaW5lZEZpbHRlckZpZWxkc1trZXldLnByb3BlcnR5ID8/IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KGtleSkpLFxuXHRcdHRydWUsXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHQpO1xuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gZGVmaW5lZEZpbHRlckZpZWxkcykge1xuXHRcdGNvbnN0IGZpbHRlckZpZWxkID0gZGVmaW5lZEZpbHRlckZpZWxkc1tzS2V5XTtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBmaWx0ZXJGaWVsZC5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KTtcblx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IHNlbGVjdGlvbkZpZWxkc1twcm9wZXJ0eU5hbWVdO1xuXHRcdGNvbnN0IHR5cGUgPSBmaWx0ZXJGaWVsZC50eXBlID09PSBcIlNsb3RcIiA/IGZpbHRlckZpZWxkVHlwZS5TbG90IDogZmlsdGVyRmllbGRUeXBlLkRlZmF1bHQ7XG5cdFx0Y29uc3QgdmlzdWFsRmlsdGVyID1cblx0XHRcdGZpbHRlckZpZWxkICYmIGZpbHRlckZpZWxkPy52aXN1YWxGaWx0ZXJcblx0XHRcdFx0PyBnZXRWaXN1YWxGaWx0ZXJzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHNLZXksIGRlZmluZWRGaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChmaWx0ZXJGaWVsZC50ZW1wbGF0ZSB8fCBmaWx0ZXJGaWVsZC50eXBlID09PSBmaWx0ZXJGaWVsZFR5cGUuU2xvdCkge1xuXHRcdFx0aWYgKGZpbHRlckZpZWxkLnNldHRpbmdzKSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzLmlzQ3VzdG9tRmlsdGVyID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpbHRlckZpZWxkLnNldHRpbmdzID0ge1xuXHRcdFx0XHRcdGlzQ3VzdG9tRmlsdGVyOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZpbHRlckZpZWxkc1tzS2V5XSA9IHtcblx0XHRcdGtleTogc0tleSxcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRzbG90TmFtZTogZmlsdGVyRmllbGQ/LnNsb3ROYW1lIHx8IHNLZXksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmFubm90YXRpb25QYXRoLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogZmlsdGVyRmllbGQucHJvcGVydHlcblx0XHRcdFx0PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KVxuXHRcdFx0XHQ6IHNlbGVjdGlvbkZpZWxkPy5jb25kaXRpb25QYXRoIHx8IHByb3BlcnR5TmFtZSxcblx0XHRcdGRvY3VtZW50UmVmVGV4dDpcblx0XHRcdFx0ZmlsdGVyRmllbGQucHJvcGVydHkgJiZcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKFxuXHRcdFx0XHRcdFwie21ldGFNb2RlbD5cIiArIGZpbHRlckZpZWxkLnByb3BlcnR5ICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRvY3VtZW50YXRpb25SZWZ9XCJcblx0XHRcdFx0KSxcblx0XHRcdHRlbXBsYXRlOiBmaWx0ZXJGaWVsZC50ZW1wbGF0ZSxcblx0XHRcdGxhYmVsOiBjb252ZXJ0ZXJDb250ZXh0LmZldGNoVGV4dEZyb21NZXRhTW9kZWwoZmlsdGVyRmllbGQubGFiZWwpLFxuXHRcdFx0cG9zaXRpb246IGZpbHRlckZpZWxkLnBvc2l0aW9uIHx8IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIgfSxcblx0XHRcdGF2YWlsYWJpbGl0eTogZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5IHx8IFwiRGVmYXVsdFwiLFxuXHRcdFx0c2V0dGluZ3M6IGZpbHRlckZpZWxkLnNldHRpbmdzLFxuXHRcdFx0dmlzdWFsRmlsdGVyOiB2aXN1YWxGaWx0ZXIsXG5cdFx0XHRyZXF1aXJlZDogZmlsdGVyRmllbGQucmVxdWlyZWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZHM7XG59O1xuXG4vKipcbiAqIFJldHVybnMgY29uZmlndXJhdGlvbiBwYXRoIHRvIGZldGNoIHRoZSBjdXN0b20gZmlsdGVyIGZpZWxkcyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gc2V0dGluZ3NDb250ZXh0UGF0aCBNYW5pZmVzdCBlbnRpdHkgc2V0IHBhdGggYW5kIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGFubm90YXRpb25QYXRoIFRoZSBhbm5vdGF0aW9uIHBhdGhcbiAqIEByZXR1cm5zIFBhdGggdG8gZmV0Y2ggdGhlIGN1c3RvbSBmaWx0ZXJzIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmNvbnN0IGdldEZpbHRlckNvbmZpZ3VyYXRpb25QYXRoID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNldHRpbmdzQ29udGV4dFBhdGg/OiBzdHJpbmcsXG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgb2JqZWN0UGF0aDtcblx0Y29uc3QgZmlsdGVyQmFyQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IG1ldGFQYXRoID0gYCR7ZmlsdGVyQmFyQ29udGV4dFBhdGh9LyR7YW5ub3RhdGlvblBhdGh9YDtcblx0aWYgKHNldHRpbmdzQ29udGV4dFBhdGggJiYgbWV0YVBhdGg/LnN0YXJ0c1dpdGgoc2V0dGluZ3NDb250ZXh0UGF0aCkgJiYgYW5ub3RhdGlvblBhdGgpIHtcblx0XHRvYmplY3RQYXRoID0gbWV0YVBhdGgucmVwbGFjZShgJHtzZXR0aW5nc0NvbnRleHRQYXRofS9gLCBcIlwiKTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RQYXRoID0gYW5ub3RhdGlvblBhdGg7XG5cdH1cblx0cmV0dXJuIG9iamVjdFBhdGggPyBvYmplY3RQYXRoIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoe30sIHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zVHlwZSB8IHVuZGVmaW5lZCxcblx0c1Jlc3RyaWN0aW9uOiBcIlJlcXVpcmVkUHJvcGVydGllc1wiIHwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiXG4pOiBzdHJpbmdbXSB7XG5cdGxldCBhUHJvcHM6IHN0cmluZ1tdID0gW107XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dKSB7XG5cdFx0YVByb3BzID0gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS52YWx1ZTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVByb3BzO1xufTtcblxuY29uc3QgZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkc2VhcmNoXCIsXG5cdFx0cGF0aDogXCIkc2VhcmNoXCIsXG5cdFx0ZGF0YVR5cGU6IHNTdHJpbmdEYXRhVHlwZSxcblx0XHRtYXhDb25kaXRpb25zOiAxXG5cdH07XG59O1xuXG5jb25zdCBnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKTogUHJvcGVydHlJbmZvIHtcblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdGdyb3VwOiBcIlwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0aGlkZGVuRmlsdGVyOiBmYWxzZVxuXHR9O1xufTtcblxuY29uc3QgZ2V0U2VhcmNoUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFNlYXJjaFJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uU2VhcmNoUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c05hdmlnYXRpb25QYXRoOiBzdHJpbmdcbik6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuLy8gVGhlIHByb3BlcnR5SW5mbyB1c2VkIGludGVybmFsbHkgd2l0aGluIEZFXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm8gPSB7XG5cdGtleT86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG5cdGRpc3BsYXk/OiBzdHJpbmc7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG5cdHR5cGU/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGZpbHRlckV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGlzQ3VzdG9tRmlsdGVyPzogYm9vbGVhbjtcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdHR5cGVDb25maWc/OiBUeXBlQ29uZmlnO1xuXHRmaWx0ZXJhYmxlPzogYm9vbGVhbjtcbn07XG5cbi8vIFRoZSBwcm9wZXJ0eUluZm8gd2Ugc2hhcmUgd2l0aCBNRENcbmV4cG9ydCB0eXBlIFByb3BlcnR5SW5mb0V4dGVybmFsID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0ZGF0YVR5cGU6IHN0cmluZztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IG9iamVjdDtcblx0Zm9ybWF0T3B0aW9ucz86IG9iamVjdDtcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0aGlkZGVuRmlsdGVyPzogYm9vbGVhbjtcbn07XG5jb25zdCBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0a2V5OiBvRmlsdGVyRmllbGRJbmZvLmtleSxcblx0XHRhbm5vdGF0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRjb25kaXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bmFtZTogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoISxcblx0XHRsYWJlbDogb0ZpbHRlckZpZWxkSW5mby5sYWJlbCxcblx0XHRoaWRkZW5GaWx0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdGRpc3BsYXk6IFwiVmFsdWVcIixcblx0XHRpc1BhcmFtZXRlcjogb0ZpbHRlckZpZWxkSW5mby5pc1BhcmFtZXRlcixcblx0XHRjYXNlU2Vuc2l0aXZlOiBvRmlsdGVyRmllbGRJbmZvLmNhc2VTZW5zaXRpdmUsXG5cdFx0YXZhaWxhYmlsaXR5OiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSxcblx0XHRwb3NpdGlvbjogb0ZpbHRlckZpZWxkSW5mby5wb3NpdGlvbixcblx0XHR0eXBlOiBvRmlsdGVyRmllbGRJbmZvLnR5cGUsXG5cdFx0dGVtcGxhdGU6IG9GaWx0ZXJGaWVsZEluZm8udGVtcGxhdGUsXG5cdFx0bWVudTogb0ZpbHRlckZpZWxkSW5mby5tZW51LFxuXHRcdHJlcXVpcmVkOiBvRmlsdGVyRmllbGRJbmZvLnJlcXVpcmVkLFxuXHRcdGlzQ3VzdG9tRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLnNldHRpbmdzPy5pc0N1c3RvbUZpbHRlclxuXHR9O1xufTtcblxuY29uc3QgX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0bWFuaWZlc3RGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IHZvaWQge1xuXHRmaWx0ZXJGaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRpZiAobWFuaWZlc3RGaWx0ZXJGaWVsZHMuaGFzT3duUHJvcGVydHkoZmlsdGVyRmllbGQua2V5KSAmJiAhbWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCkge1xuXHRcdFx0bWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCA9IGZpbHRlckZpZWxkLmxhYmVsO1xuXHRcdH1cblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgdW5kZWZpbmVkLFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zOiBFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0b1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpKTtcblxuXHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiOyAvL1RleHRGaXJzdFxuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyxcblx0b1R5cGVDb25maWc6IFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyhvRmlsdGVyRmllbGRJbmZvKTtcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblxuXHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5T2JqZWN0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihzQW5ub3RhdGlvblBhdGgpLmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cblx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSB0YXJnZXRQcm9wZXJ0eU9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdGNvbnN0IG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblxuXHRjb25zdCBvRm9ybWF0T3B0aW9ucyA9IG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnM7XG5cdGNvbnN0IG9Db25zdHJhaW50cyA9IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzO1xuXHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50cyxcblx0XHRkaXNwbGF5OiBkaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9ucywgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucylcblx0fSk7XG5cdHJldHVybiBvUHJvcGVydHlJbmZvO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5SW5mbyk6IGJvb2xlYW4ge1xuXHRsZXQgYklzTXVsdGlWYWx1ZSA9IHRydWU7XG5cdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0c3dpdGNoIChvUHJvcGVydHkuZmlsdGVyRXhwcmVzc2lvbikge1xuXHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS50eXBlICYmIG9Qcm9wZXJ0eS50eXBlLmluZGV4T2YoXCJCb29sZWFuXCIpID4gMCkge1xuXHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gYklzTXVsdGlWYWx1ZTtcbn07XG5cbmNvbnN0IF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudHJ5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG4pOiBlbnRyeSBpcyBBbm5vdGF0aW9uVGVybTxEYXRhRmllbGQgfCBEYXRhRmllbGRXaXRoVXJsIHwgRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoPiB7XG5cdHJldHVybiAoXG5cdFx0KGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKSAmJlxuXHRcdGVudHJ5LlZhbHVlLnBhdGg/LmluY2x1ZGVzKFwiL1wiKVxuXHQpO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHdoaWNoIHJlZmVyZW5jZXMgdG8gdGhlIHVuaXQsIHRpbWV6b25lLCB0ZXh0QXJyYW5nZW1lbnQgb3IgY3VycmVuY3kgZnJvbSBhIGRhdGEgZmllbGQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdlByb3BlcnRpZXMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0O1xuXHRpZiAodGFyZ2V0UHJvcGVydHkpIHtcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoID1cblx0XHRcdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGhcblx0XHRcdD8gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5Py5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlbMF0ubmFtZTtcblx0XHRcdGlmICghbmF2UHJvcGVydGllcy5pbmNsdWRlcyhuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEdldHMgdXNlZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgZm9yIGF2YWlsYWJsZSBkYXRhRmllbGQuXG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0bmF2UHJvcGVydGllczogc3RyaW5nW10sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmdbXSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkge1xuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGlubmVyRGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRpZiAoX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKFxuXHRcdFx0XHRcdGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCksXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMobmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEFkZGl0aW9uYWwgcHJvcGVydHkgZnJvbSB0ZXh0IGFycmFuZ2VtZW50L3VuaXRzL2N1cnJlbmNpZXMvdGltZXpvbmUuLi5cblx0XHRcdGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMoZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZQcm9wZXJ0aWVzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBPdGhlciB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIG5hdlByb3BlcnRpZXM7XG59O1xuXG5jb25zdCBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbiA9IGZhbHNlLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHtcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPjtcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXTtcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cdHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0ZGVmYXVsdEZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXTtcbn0ge1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50cyBkZWZpbmVkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgYW5kIGRpZmZlcmVudCB2aWV3cyAobXVsdGkgdGFibGUgbW9kZSlcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHQvL0ZpbHRlcnMgd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHdoaWNoIGlzIHBhcnQgb2YgU1YvRGVmYXVsdCBhbm5vdGF0aW9ucyBidXQgbm90IHByZXNlbnQgaW4gdGhlIFNlbGVjdGlvbkZpZWxkc1xuXHRjb25zdCBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMgPSAoKGFubm90YXRpb25QYXRoICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uKSB8fFxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgfHxcblx0XHRbXSkgYXMgUHJvcGVydHlQYXRoW107XG5cblx0bGV0IG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChsclRhYmxlcy5sZW5ndGggPT09IDAgJiYgISFsaW5lSXRlbVRlcm0pIHtcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihsaW5lSXRlbVRlcm0pLmFubm90YXRpb24gYXMgTGluZUl0ZW0pPy5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdG5hdlByb3BlcnRpZXMgPSBnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRuYXZQcm9wZXJ0aWVzLnB1c2goXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvQ3JlYXRlZEJ5VXNlclwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIlxuXHRcdCk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge1xuXHRcdC8vIC4uLm5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiB0aGUgZW50aXR5XG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkcyhlbnRpdHlUeXBlLCBcIlwiLCBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLiBub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChlbnRpdHlUeXBlLCBuYXZQcm9wZXJ0aWVzLCBmYWxzZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdClcblx0fTtcblx0bGV0IGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10gPSBbXTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPVxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8ucmVkdWNlKChzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdGlmICghZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGxldCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGg/LnN0YXJ0c1dpdGgoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGg/LnNwbGl0KFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIilbMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aCA/IG5hdmlnYXRpb25QYXRoICsgXCIvXCIgKyBwcm9wZXJ0eVBhdGggOiBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZHMsXG5cdFx0XHRcdFx0ZmlsdGVyUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cCA9IFwiXCI7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXBMYWJlbCA9IFwiXCI7XG5cdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xuXHRcdH0sIFtdKSB8fCBbXTtcblxuXHRjb25zdCBkZWZhdWx0RmlsdGVyRmllbGRzID0gX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMoXG5cdFx0YVNlbGVjdE9wdGlvbnMsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHNcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMsXG5cdFx0ZmlsdGVyRmllbGRzOiBmaWx0ZXJGaWVsZHMsXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0ZGVmYXVsdEZpbHRlckZpZWxkczogZGVmYXVsdEZpbHRlckZpZWxkc1xuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoVHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChwcm9wZXJ0eT86IFByb3BlcnR5KTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0Y29uc3Qgb1R5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5LCBwcm9wZXJ0eT8udHlwZSk7XG5cdGlmIChwcm9wZXJ0eT8udHlwZSA9PT0gc0VkbVN0cmluZyAmJiAob1R5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IHVuZGVmaW5lZCB8fCBvVHlwZUNvbmZpZy5jb25zdHJhaW50cy5udWxsYWJsZSA9PT0gdHJ1ZSkpIHtcblx0XHRvVHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLnBhcnNlS2VlcHNFbXB0eVN0cmluZyA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBvVHlwZUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZDogRmlsdGVyRmllbGQgfCBQcm9wZXJ0eUluZm8sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YVJlcXVpcmVkUHJvcHM6IHVua25vd25bXSxcblx0YVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj5cbik6IFByb3BlcnR5SW5mbyB7XG5cdGxldCBvUHJvcGVydHlJbmZvID0gZmV0Y2hQcm9wZXJ0eUluZm8oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHlJbmZvRmllbGQsIGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleSFdKSxcblx0XHRzUHJvcGVydHlQYXRoID0gXCJcIjtcblx0aWYgKHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9cXCt8XFwqL2csIFwiXCIpO1xuXHR9XG5cdGlmIChvUHJvcGVydHlJbmZvKSB7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdFx0bWF4Q29uZGl0aW9uczogb1Byb3BlcnR5SW5mby5pc1BhcmFtZXRlclxuXHRcdFx0XHQ/IDFcblx0XHRcdFx0OiBnZXRNYXhDb25kaXRpb25zKGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgc1Byb3BlcnR5UGF0aCkpLFxuXHRcdFx0cmVxdWlyZWQ6IHByb3BlcnR5SW5mb0ZpZWxkLnJlcXVpcmVkID8/IChvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyIHx8IGFSZXF1aXJlZFByb3BzLmluY2x1ZGVzKHNQcm9wZXJ0eVBhdGgpKSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGRhdGFUeXBlOiBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXkhXS50eXBlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzPzogRmlsdGVyRmllbGRbXVxuKTogUHJvcGVydHlJbmZvW10ge1xuXHQvL2dldCBUeXBlQ29uZmlnIGZ1bmN0aW9uXG5cdGNvbnN0IGFUeXBlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPFByb3BlcnR5VHlwZUNvbmZpZz4+ID0ge307XG5cblx0aWYgKGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKSB7XG5cdFx0cHJvcGVydHlJbmZvRmllbGRzID0gcHJvcGVydHlJbmZvRmllbGRzLmNvbmNhdChkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyk7XG5cdH1cblx0Ly9hZGQgdHlwZUNvbmZpZ1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1ldGVyRmllbGQpIHtcblx0XHRpZiAocGFyYW1ldGVyRmllbGQuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5Q29udmVydHlDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdCA9IHByb3BlcnR5Q29udmVydHlDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cdFx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IGZldGNoVHlwZUNvbmZpZyhwcm9wZXJ0eVRhcmdldE9iamVjdCk7XG5cdFx0XHRhVHlwZUNvbmZpZ1twYXJhbWV0ZXJGaWVsZC5rZXldID0gb1R5cGVDb25maWc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSB7IHR5cGU6IHNTdHJpbmdEYXRhVHlwZSB9O1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gZmlsdGVyUmVzdHJpY3Rpb25zXG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uRmlsdGVyUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvUmV0OiB7XG5cdFx0UmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fSA9IHt9O1xuXHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBhUGF0aFBhcnRzID0gc0VudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpO1xuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVBhdGhQYXJ0c1thUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW11cblx0XHQpO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdH1cblx0Y29uc3QgYVJlcXVpcmVkUHJvcHMgPSBvUmV0LlJlcXVpcmVkUHJvcGVydGllcztcblx0Y29uc3QgYU5vbkZpbHRlcmFibGVQcm9wcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW10gPSBbXTtcblxuXHQvLyBwcm9jZXNzIHRoZSBmaWVsZHMgdG8gYWRkIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm9GaWVsZCkge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2UoL1srKl0vZywgXCJcIik7XG5cdFx0aWYgKCFhTm9uRmlsdGVyYWJsZVByb3BzLmluY2x1ZGVzKHNQcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlJbmZvID0gYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyhwcm9wZXJ0eUluZm9GaWVsZCwgY29udmVydGVyQ29udGV4dCwgYVJlcXVpcmVkUHJvcHMsIGFUeXBlQ29uZmlnKTtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9Qcm9wZXJ0eUluZm8pO1xuXHRcdH1cblx0fSk7XG5cblx0Ly9hZGQgZWRpdFxuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGlzSGlkZGVuRHJhZnRFbmFibGVkID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpPy5hcHA/LmhpZGVEcmFmdD8uZW5hYmxlZDtcblx0aWYgKE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0aWYgKHNob3dEcmFmdEVkaXRTdGF0dXMoY29udmVydGVyQ29udGV4dCkgJiYgIWlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdFx0fVxuXHR9XG5cdC8vIGFkZCBzZWFyY2hcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAoc0VudGl0eVNldFBhdGggJiYgaGlkZUJhc2ljU2VhcmNoICE9PSB0cnVlKSB7XG5cdFx0aWYgKCFzZWFyY2hSZXN0cmljdGlvbnMgfHwgc2VhcmNoUmVzdHJpY3Rpb25zPy5TZWFyY2hhYmxlKSB7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFGZXRjaGVkUHJvcGVydGllcztcbn07XG5cbmV4cG9ydCBjb25zdCBzaG93RHJhZnRFZGl0U3RhdHVzID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRjb25zdCBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRyZXR1cm4gbmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uRmlsdGVyUmVzdHJpY3Rpb25zPy5GaWx0ZXJhYmxlID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nXG4pOiBNYW5pZmVzdEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBtYW5pZmVzdEZpbHRlckZpZWxkcyA9IGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblx0X2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkcywgbWFuaWZlc3RGaWx0ZXJGaWVsZHMpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoZmlsdGVyRmllbGRzLCBtYW5pZmVzdEZpbHRlckZpZWxkcywge1xuXHRcdGF2YWlsYWJpbGl0eTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRsYWJlbDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0eXBlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNsb3ROYW1lOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGRvY3VtZW50UmVmVGV4dDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0ZW1wbGF0ZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzZXR0aW5nczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXN1YWxGaWx0ZXI6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cmVxdWlyZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwgPSAocHJvcGVydHlJbmZvczogUHJvcGVydHlJbmZvW10pOiB2b2lkID0+IHtcblx0cHJvcGVydHlJbmZvcy5zb3J0KGZ1bmN0aW9uIChhOiBGaWx0ZXJHcm91cCwgYjogRmlsdGVyR3JvdXApIHtcblx0XHRjb25zdCBhR3JvdXBMYWJlbElzU2V0ID0gYS5ncm91cExhYmVsICE9PSB1bmRlZmluZWQgJiYgYS5ncm91cExhYmVsICE9PSBudWxsO1xuXHRcdGNvbnN0IGJHcm91cExhYmVsSXNTZXQgPSBiLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBiLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmICFiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdFx0aWYgKGFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmIGJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gYS5ncm91cExhYmVsIS5sb2NhbGVDb21wYXJlKGIuZ3JvdXBMYWJlbCEpO1xuXHR9KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgZmlsdGVyIGJhclxuICogVGhpcyBjb25maWd1cmF0aW9uIHRha2VzIGludG8gYWNjb3VudCB0aGUgYW5ub3RhdGlvbiBhbmQgdGhlIHNlbGVjdGlvbiB2YXJpYW50cy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbHJUYWJsZXNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuICogQHBhcmFtIFtpbmNsdWRlSGlkZGVuXVxuICogQHBhcmFtIFtsaW5lSXRlbVRlcm1dXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzZWxlY3Rpb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbj86IGJvb2xlYW4sXG5cdGxpbmVJdGVtVGVybT86IHN0cmluZ1xuKTogeyBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW107IHNQcm9wZXJ0eUluZm86IHN0cmluZyB9IHtcblx0Y29uc3Qgb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSA9IGdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YShcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGxyVGFibGVzLFxuXHRcdGFubm90YXRpb25QYXRoLFxuXHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0bGluZUl0ZW1UZXJtXG5cdCk7XG5cdGNvbnN0IHBhcmFtZXRlckZpZWxkcyA9IF9nZXRQYXJhbWV0ZXJGaWVsZHMoY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcztcblx0Y29uc3QgZW50aXR5VHlwZSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZW50aXR5VHlwZTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BlcnR5SW5mb0ZpZWxkcyk7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhwcm9wZXJ0eUluZm9GaWVsZHMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblxuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBwcm9jZXNzU2VsZWN0aW9uRmllbGRzKFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZGVmYXVsdEZpbHRlckZpZWxkc1xuXHQpO1xuXHRzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbChhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXG5cdGxldCBzRmV0Y2hQcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcfS9nLCBcIlxcXFx9XCIpO1xuXHRjb25zdCBzUHJvcGVydHlJbmZvID0gc0ZldGNoUHJvcGVydGllcztcblx0Ly8gZW5kIG9mIHByb3BlcnR5RmllbGRzIHByb2Nlc3NpbmdcblxuXHQvLyB0byBwb3B1bGF0ZSBzZWxlY3Rpb24gZmllbGRzXG5cdGxldCBwcm9wU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRwcm9wU2VsZWN0aW9uRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wU2VsZWN0aW9uRmllbGRzKTtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5leGNsdWRlZEZpbHRlclByb3BlcnRpZXM7XG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRsZXQgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXG5cdGNvbnN0IGFGaWVsZEdyb3VwcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKSBhcyBGaWVsZEdyb3VwW107XG5cblx0aWYgKGZpbHRlckZhY2V0cyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlckZhY2V0cy5sZW5ndGggPCAwKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFGaWVsZEdyb3Vwcykge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXAgPSB7XG5cdFx0XHRcdC4uLmZpbHRlckZhY2V0TWFwLFxuXHRcdFx0XHQuLi5nZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGFGaWVsZEdyb3Vwc1tpXSlcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZhY2V0TWFwID0gZmlsdGVyRmFjZXRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+LCBmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXRUeXBlcykgPT4ge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YT8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cHJldmlvdXNWYWx1ZVsoKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGFbaV0gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aF0gPSB7XG5cdFx0XHRcdFx0Z3JvdXA6IGZpbHRlckZhY2V0Py5JRD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRncm91cExhYmVsOiBmaWx0ZXJGYWNldD8uTGFiZWw/LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmZpbHRlckZpZWxkcztcblxuXHQvLyBmaW5hbGx5IGNyZWF0ZSBmaW5hbCBsaXN0IG9mIGZpbHRlciBmaWVsZHMgYnkgYWRkaW5nIHRoZSBTZWxlY3Rpb25GaWVsZHMgZmlyc3QgKG9yZGVyIG1hdHRlcnMpLi4uXG5cdGNvbnN0IGFsbEZpbHRlcnMgPSBwcm9wU2VsZWN0aW9uRmllbGRzXG5cblx0XHQvLyAuLi5hbmQgYWRkaW5nIHJlbWFpbmluZyBmaWx0ZXIgZmllbGRzLCB0aGF0IGFyZSBub3QgdXNlZCBpbiBhIFNlbGVjdGlvblZhcmlhbnQgKG9yZGVyIGRvZXNuJ3QgbWF0dGVyKVxuXHRcdC5jb25jYXQoXG5cdFx0XHRPYmplY3Qua2V5cyhmaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BlcnR5UGF0aCkgPT4gIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMocHJvcGVydHlQYXRoKSlcblx0XHRcdFx0Lm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF0sIGZpbHRlckZhY2V0TWFwW3Byb3BlcnR5UGF0aF0pO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhhbGxGaWx0ZXJzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBhbm5vdGF0aW9uUGF0aCk7XG5cblx0Ly8gQWRkIGNhc2VTZW5zaXRpdmUgcHJvcGVydHkgdG8gYWxsIHNlbGVjdGlvbiBmaWVsZHMuXG5cdGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZSA9IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KTtcblx0c2VsZWN0aW9uRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0ZmlsdGVyRmllbGQuY2FzZVNlbnNpdGl2ZSA9IGlzQ2FzZVNlbnNpdGl2ZTtcblx0fSk7XG5cblx0cmV0dXJuIHsgc2VsZWN0aW9uRmllbGRzLCBzUHJvcGVydHlJbmZvIH07XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIGJhciBpbnNpZGUgYSB2YWx1ZSBoZWxwIGRpYWxvZyBzaG91bGQgYmUgZXhwYW5kZWQuIFRoaXMgaXMgdHJ1ZSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGQ6XG4gKiAoMSkgYSBmaWx0ZXIgcHJvcGVydHkgaXMgbWFuZGF0b3J5LFxuICogKDIpIG5vIHNlYXJjaCBmaWVsZCBleGlzdHMgKGVudGl0eSBpc24ndCBzZWFyY2ggZW5hYmxlZCksXG4gKiAoMykgd2hlbiB0aGUgZGF0YSBpc24ndCBsb2FkZWQgYnkgZGVmYXVsdCAoYW5ub3RhdGlvbiBGZXRjaFZhbHVlcyA9IDIpLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiBUaGUgRmlsdGVyUmVzdHJpY3Rpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgZXhwYW5kRmlsdGVyRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zIHwgdW5kZWZpbmVkLFxuXHR2YWx1ZUxpc3Q6IE1ldGFNb2RlbFR5cGU8VmFsdWVMaXN0PlxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKTtcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgfHwgaGlkZUJhc2ljU2VhcmNoIHx8IHZhbHVlTGlzdD8uRmV0Y2hWYWx1ZXMgPT09IDIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF1REE7RUFBQSxJQWdDS0EsZUFBZSwwQkFBZkEsZUFBZTtJQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBQSxPQUFmQSxlQUFlO0VBQUEsRUFBZkEsZUFBZTtFQUtwQixNQUFNQyxVQUFV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
850
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJjb252ZXJ0ZXJDb250ZXh0Iiwic2VsZWN0aW9uVmFyaWFudFBhdGhzIiwiU2V0IiwibWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVyRmllbGRzIiwic2VsZWN0aW9uRmllbGRQYXRocyIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJTZWxlY3Rpb25GaWVsZHMiLCJtYXAiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsInRlbXBsYXRlIiwidmlzdWFsaXphdGlvbiIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsImxlbmd0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJsaXN0UmVwb3J0VGFibGVzIiwiY2hhcnRzIiwibm9TZWFyY2hJbkNoYXJ0cyIsImV2ZXJ5IiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljcyIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJfZXhwb3J0cyIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwibWFuaWZlc3RXcmFwcGVyIiwic2V0dGluZ3NDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImZpbHRlckNvbmZpZ3VyYXRpb25QYXRoIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJmYkNvbmZpZyIsImRlZmluZWRGaWx0ZXJGaWVsZHMiLCJnZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5Iiwic0tleSIsIlNsb3QiLCJEZWZhdWx0IiwidmlzdWFsRmlsdGVyIiwiZ2V0VmlzdWFsRmlsdGVycyIsImlzQ3VzdG9tRmlsdGVyIiwic2xvdE5hbWUiLCJkb2N1bWVudFJlZlRleHQiLCJmZXRjaFRleHRGcm9tTWV0YU1vZGVsIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInJlcXVpcmVkIiwib2JqZWN0UGF0aCIsImZpbHRlckJhckNvbnRleHRQYXRoIiwibWV0YVBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwic1Jlc3RyaWN0aW9uIiwiYVByb3BzIiwib1Byb3BlcnR5IiwiZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvIiwiZGF0YVR5cGUiLCJtYXhDb25kaXRpb25zIiwiY29uc3RyYWludHMiLCJtYXhMZW5ndGgiLCJnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8iLCJoaWRkZW5GaWx0ZXIiLCJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJpc0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJzTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyIsIm9GaWx0ZXJGaWVsZEluZm8iLCJkaXNwbGF5IiwiY2FzZVNlbnNpdGl2ZSIsIm1lbnUiLCJfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJoYXNPd25Qcm9wZXJ0eSIsImRpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwiVGV4dCIsIm9UZXh0QXJyYW5nbWVudEFubm90YXRpb24iLCJUZXh0QXJyYW5nZW1lbnQiLCJmZXRjaFByb3BlcnR5SW5mbyIsIm9UeXBlQ29uZmlnIiwib1Byb3BlcnR5SW5mbyIsInNBbm5vdGF0aW9uUGF0aCIsInRhcmdldFByb3BlcnR5T2JqZWN0Iiwib0Zvcm1hdE9wdGlvbnMiLCJmb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiYXNzaWduIiwiaXNNdWx0aVZhbHVlIiwiYklzTXVsdGlWYWx1ZSIsImZpbHRlckV4cHJlc3Npb24iLCJpbmRleE9mIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImVudHJ5IiwiaW5jbHVkZXMiLCJhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydGllcyIsInRhcmdldFByb3BlcnR5IiwiJHRhcmdldCIsImFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJUYXJnZXQiLCJpbm5lckRhdGFGaWVsZCIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJsclRhYmxlcyIsImFyZ3VtZW50cyIsImxpbmVJdGVtVGVybSIsImdldEVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJNb2RlbEhlbHBlciIsImlzRHJhZnRSb290Iiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3RPcHRpb25zIiwicHJvcGVydHlJbmZvRmllbGRzIiwicmVkdWNlIiwiZmlsdGVyUHJvcGVydHlQYXRoIiwiZGVmYXVsdEZpbHRlckZpZWxkcyIsImZldGNoVHlwZUNvbmZpZyIsInR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwibnVsbGFibGUiLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciLCJhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvIiwicHJvcGVydHlJbmZvRmllbGQiLCJhUmVxdWlyZWRQcm9wcyIsImFUeXBlQ29uZmlnIiwiZ2V0TWF4Q29uZGl0aW9ucyIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsInByb2Nlc3NTZWxlY3Rpb25GaWVsZHMiLCJkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyIsImNvbmNhdCIsInBhcmFtZXRlckZpZWxkIiwicHJvcGVydHlDb252ZXJ0eUNvbnRleHQiLCJwcm9wZXJ0eVRhcmdldE9iamVjdCIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJvUmV0IiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzRW50aXR5U2V0UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpY2UiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsImFOb25GaWx0ZXJhYmxlUHJvcHMiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsImdldFNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwiYXBwIiwiaGlkZURyYWZ0IiwiZW5hYmxlZCIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwic2hvd0RyYWZ0RWRpdFN0YXR1cyIsInNlYXJjaFJlc3RyaWN0aW9ucyIsImhpZGVCYXNpY1NlYXJjaCIsIkJvb2xlYW4iLCJTZWFyY2hhYmxlIiwibmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIkZpbHRlcmFibGUiLCJpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJPdmVycmlkZVR5cGUiLCJvdmVyd3JpdGUiLCJzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbCIsInByb3BlcnR5SW5mb3MiLCJzb3J0IiwiYSIsImIiLCJhR3JvdXBMYWJlbElzU2V0IiwiYkdyb3VwTGFiZWxJc1NldCIsImxvY2FsZUNvbXBhcmUiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwicGFyYW1ldGVyRmllbGRzIiwic0ZldGNoUHJvcGVydGllcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzUHJvcGVydHlJbmZvIiwicHJvcFNlbGVjdGlvbkZpZWxkcyIsInBhcnNlIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiYUZpZWxkR3JvdXBzIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJpIiwicHJldmlvdXNWYWx1ZSIsImZpbHRlckZhY2V0IiwiSUQiLCJhbGxGaWx0ZXJzIiwiaXNDYXNlU2Vuc2l0aXZlIiwiZ2V0RXhwYW5kRmlsdGVyRmllbGRzIiwiZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInZhbHVlTGlzdCIsInJlcXVpcmVkUHJvcGVydGllcyIsIkZldGNoVmFsdWVzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRGaWx0ZXJSZXN0cmljdGlvbnNUeXBlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbixcblx0U2VhcmNoUmVzdHJpY3Rpb25zXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7IFZhbHVlTGlzdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVR5cGVBbm5vdGF0aW9ucywgUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRWRtX1R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCxcblx0RGF0YUZpZWxkV2l0aFVybCxcblx0RmllbGRHcm91cCxcblx0TGluZUl0ZW0sXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdFNlbGVjdE9wdGlvblR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzLCBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IGdldFR5cGVDb25maWcsIGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBnZXRNYXhDb25kaXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgeyBnZXRWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCwgUG9zaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0NvbXBsZXhUeXBlLCBpc0VudGl0eVNldCwgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocywgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHsgU3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cyB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIFNpbXBsZVR5cGUgZnJvbSBcInNhcC91aS9tb2RlbC9TaW1wbGVUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEF2YWlsYWJpbGl0eVR5cGUsXG5cdEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZpbHRlclNldHRpbmdzXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbi8vaW1wb3J0IHsgaGFzVmFsdWVIZWxwIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcblx0Y29uZGl0aW9uUGF0aDogc3RyaW5nO1xuXHRhdmFpbGFiaWxpdHk6IEF2YWlsYWJpbGl0eVR5cGU7XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0ZG9jdW1lbnRSZWZUZXh0Pzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncztcblx0aXNQYXJhbWV0ZXI/OiBib29sZWFuO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RGaWx0ZXJGaWVsZCA9IEZpbHRlckZpZWxkICYge1xuXHRzbG90TmFtZT86IHN0cmluZztcbn07XG5cbnR5cGUgRmlsdGVyR3JvdXAgPSB7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xufTtcblxuZW51bSBmaWx0ZXJGaWVsZFR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG50eXBlIFByb3BlcnR5VHlwZUNvbmZpZyA9IHtcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM6IFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zO1xuXHRiYXNlVHlwZT86IHN0cmluZztcblx0Y2xhc3NOYW1lPzoga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZTtcblx0dHlwZUluc3RhbmNlPzogU2ltcGxlVHlwZTtcbn07XG5cbmNvbnN0IHNFZG1TdHJpbmcgPSBcIkVkbS5TdHJpbmdcIjtcbmNvbnN0IHNTdHJpbmdEYXRhVHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCI7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCA9IEN1c3RvbUVsZW1lbnQ8TWFuaWZlc3RGaWx0ZXJGaWVsZD47XG5cbi8qKlxuICogRW50ZXIgYWxsIERhdGFGaWVsZHMgb2YgYSBnaXZlbiBGaWVsZEdyb3VwIGludG8gdGhlIGZpbHRlckZhY2V0TWFwLlxuICogQHBhcmFtIGZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIFRoZSBtYXAgb2YgZmFjZXRzIGZvciB0aGUgZ2l2ZW4gRmllbGRHcm91cFxuICovXG5mdW5jdGlvbiBnZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXApOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4ge1xuXHRjb25zdCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cdGZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcFtkYXRhRmllbGQuVmFsdWUucGF0aF0gPSB7XG5cdFx0XHRcdGdyb3VwOiBmaWVsZEdyb3VwLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogZmllbGRHcm91cC5MYWJlbD8udG9TdHJpbmcoKSA/PyBmaWVsZEdyb3VwLmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IGZpZWxkR3JvdXAucXVhbGlmaWVyXG5cdFx0XHR9O1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBmaWx0ZXJGYWNldE1hcDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGlvbiB2YXJpYW50cyB1c2VkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQuXG4gKiBAcGFyYW0gbHJUYWJsZVZpc3VhbGl6YXRpb25zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGV4Y2x1ZGVkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKFxuXHRsclRhYmxlVmlzdWFsaXphdGlvbnM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNldDxzdHJpbmc+IHtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkuZmlsdGVyRmllbGRzID8/IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtcblx0XHQvL1NlbGVjdGlvbiBGaWVsZHMgY29taW5nIGZyb20gdGhlIGFubm90YXRpb25cblx0XHQuLi4oY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgPz8gW10pLm1hcChcblx0XHRcdChzZWxlY3Rpb25GaWVsZCkgPT4gc2VsZWN0aW9uRmllbGQudmFsdWVcblx0XHQpLFxuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIG5vdCB3aXRoIGN1c3RvbSB0ZW1wbGF0ZVxuXHRcdC4uLk9iamVjdC5rZXlzKG1hbmlmZXN0RmlsdGVyRmllbGRzKS5maWx0ZXIoKGtleSkgPT4gISFtYW5pZmVzdEZpbHRlckZpZWxkc1trZXldLnRlbXBsYXRlKVxuXHRdKTtcblxuXHRyZXR1cm4gbmV3IFNldChcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgdGFibGVGaWx0ZXJzID0gdmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnM7XG5cdFx0XHRcdGlmICghdGFibGVGaWx0ZXJzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBbLi4uKHRhYmxlRmlsdGVycy5oaWRkZW5GaWx0ZXJzPy5wYXRocyA/PyBbXSksIC4uLih0YWJsZUZpbHRlcnMucXVpY2tGaWx0ZXJzPy5wYXRocyA/PyBbXSldLm1hcCgocGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gcGF0aC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRpZiAoIXNlbGVjdGlvblZhcmlhbnRQYXRocy5oYXMoYW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aHMuYWRkKGFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRDb25maWcgPSBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMgPSBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdChwcm9wZXJ0eU5hbWUpID0+ICFzZWxlY3Rpb25GaWVsZFBhdGhzLmhhcyhwcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZsYXQoMilcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgcm9vdCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBjb25kaXRpb24gcGF0aFxuICovXG5jb25zdCBfZ2V0Q29uZGl0aW9uUGF0aCA9IGZ1bmN0aW9uIChlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0bGV0IHBhcnRpYWxQYXRoO1xuXHRsZXQga2V5ID0gXCJcIjtcblx0d2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuXHRcdGxldCBwYXJ0ID0gcGFydHMuc2hpZnQoKSBhcyBzdHJpbmc7XG5cdFx0cGFydGlhbFBhdGggPSBwYXJ0aWFsUGF0aCA/IGAke3BhcnRpYWxQYXRofS8ke3BhcnR9YCA6IHBhcnQ7XG5cdFx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXJ0aWFsUGF0aCk7XG5cdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdH1cblx0XHRrZXkgPSBrZXkgPyBgJHtrZXl9LyR7cGFydH1gIDogcGFydDtcblx0fVxuXHRyZXR1cm4ga2V5O1xufTtcblxuY29uc3QgX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdC8vIGlnbm9yZSBjb21wbGV4IHByb3BlcnR5IHR5cGVzIGFuZCBoaWRkZW4gYW5ub3RhdGVkIG9uZXNcblx0aWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LnRhcmdldFR5cGUgPT09IHVuZGVmaW5lZCAmJiAoaW5jbHVkZUhpZGRlbiB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSkge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKHByb3BlcnR5KSxcblx0XHRcdGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCA9IHtcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0Y29uZGl0aW9uUGF0aDogX2dldENvbmRpdGlvblBhdGgoZW50aXR5VHlwZSwgZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKSA9PT0gdHJ1ZSA/IFwiSGlkZGVuXCIgOiBcIkFkYXB0YXRpb25cIixcblx0XHRcdFx0bGFiZWw6IHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcGVydHkubmFtZSxcblx0XHRcdFx0Z3JvdXA6IHRhcmdldEVudGl0eVR5cGUubmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogdGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gdGFyZ2V0RW50aXR5VHlwZS5uYW1lXG5cdFx0XHR9O1xuXHRcdGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkKTtcblx0XHRyZXR1cm4gZmlsdGVyRmllbGQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0ZWNobmljYWwgcHJvcGVydHkgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuIE9ubHkgcmVsZXZhbnQgZm9yIENyZWF0aW9uRGF0ZVRpbWVcbiAqIGFuZCBMYXN0Q2hhbmdlRGF0ZVRpbWUsIGFzIHRoZXkgYXJlIGRpc3BsYXlpbmcgdGhlIHRpbWVmcmFtZSByZWxhdGVkIHByb3BlcnRpZXMgYXMgYSBTZW1hbnRpY0RhdGVSYW5nZS5cbiAqIEBwYXJhbSBmaWx0ZXJGaWVsZFxuICovXG5jb25zdCBnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQpOiB2b2lkIHtcblx0aWYgKFxuXHRcdGZpbHRlckZpZWxkLmtleSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YTo6Q3JlYXRpb25EYXRlVGltZVwiIHx8XG5cdFx0ZmlsdGVyRmllbGQua2V5ID09PSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhOjpMYXN0Q2hhbmdlRGF0ZVRpbWVcIlxuXHQpIHtcblx0XHRjb25zdCBzdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzID0gW1xuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5UTyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuVE9NT1JST1csXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRXRUVLLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUTU9OVEgsXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRRVUFSVEVSLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUWUVBUlxuXHRcdF07XG5cdFx0ZmlsdGVyRmllbGQuc2V0dGluZ3MgPSB7XG5cdFx0XHRvcGVyYXRvckNvbmZpZ3VyYXRpb246IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHBhdGg6IFwia2V5XCIsXG5cdFx0XHRcdFx0ZXF1YWxzOiBzdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLmpvaW4oXCIsXCIpLFxuXHRcdFx0XHRcdGV4Y2x1ZGU6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdH1cbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmcsXG5cdHByb3BlcnRpZXM6IEFycmF5PFByb3BlcnR5PiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoOiBzdHJpbmcgPSAobmF2aWdhdGlvblBhdGggPyBgJHtuYXZpZ2F0aW9uUGF0aH0vYCA6IFwiXCIpICsgcHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgcHJvcGVydHksIGZ1bGxQYXRoLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmIChzZWxlY3Rpb25GaWVsZCkge1xuXHRcdFx0XHRzZWxlY3Rpb25GaWVsZE1hcFtmdWxsUGF0aF0gPSBzZWxlY3Rpb25GaWVsZDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRNYXA7XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eVBhdGhzOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGxldCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydHlQYXRocykge1xuXHRcdHByb3BlcnR5UGF0aHMuZm9yRWFjaCgocHJvcGVydHlQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdGxldCBsb2NhbFNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdFx0XHRjb25zdCBlbmhhbmNlZFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eT4oXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGhcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IGVuaGFuY2VkUGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3BlcnR5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCFpbmNsdWRlSGlkZGVuICYmXG5cdFx0XHRcdFx0ZW5oYW5jZWRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoXG5cdFx0XHRcdFx0XHQobmF2aWdhdGlvblByb3BlcnR5KSA9PiBuYXZpZ2F0aW9uUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZVxuXHRcdFx0XHRcdCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0XHQvLyBoYW5kbGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzQ29tcGxleFR5cGUocHJvcGVydHkudGFyZ2V0VHlwZSkpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIENvbXBsZXhUeXBlIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUucHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGdldFRhcmdldE5hdmlnYXRpb25QYXRoKGVuaGFuY2VkUGF0aCwgdHJ1ZSksXG5cdFx0XHRcdFx0W3Byb3BlcnR5XSxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0ge1xuXHRcdFx0XHQuLi5zZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRcdC4uLmxvY2FsU2VsZWN0aW9uRmllbGRzXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG5jb25zdCBfZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdGxldCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZGVsZXRlIGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKSwgcHJvcGVydHlQYXRoLCB0cnVlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fVxuXHRpZiAoIWZpbHRlckZpZWxkKSB7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpPy5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1JU1NJTkdfU0VMRUNUSU9ORklFTEQpO1xuXHR9XG5cdC8vIGRlZmluZWQgU2VsZWN0aW9uRmllbGRzIGFyZSBhdmFpbGFibGUgYnkgZGVmYXVsdFxuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPSBmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIgPyBcIkhpZGRlblwiIDogXCJEZWZhdWx0XCI7XG5cdFx0ZmlsdGVyRmllbGQuaXNQYXJhbWV0ZXIgPSAhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGQ7XG59O1xuXG5jb25zdCBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0YVNlbGVjdE9wdGlvbnM6IFNlbGVjdE9wdGlvblR5cGVbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFNldDxzdHJpbmc+LFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IFByb3BlcnR5UGF0aFtdXG4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gW107XG5cdGNvbnN0IFVJU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzO1xuXHQvLyBVc2luZyBlbnRpdHlUeXBlIGluc3RlYWQgb2YgZW50aXR5U2V0XG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaCgoU2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRVSVNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHR9KTtcblx0aWYgKGFTZWxlY3RPcHRpb25zICYmIGFTZWxlY3RPcHRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRhU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5TmFtZT8udmFsdWU7XG5cdFx0XHRjb25zdCBjdXJyZW50U2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRcdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChzUHJvcGVydHlQYXRoICYmICFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHNQcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGlmICghKHNQcm9wZXJ0eVBhdGggaW4gY3VycmVudFNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChzUHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IGRlZmF1bHRGaWx0ZXJWYWx1ZSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkZpbHRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRpZiAoIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRpZiAoZGVmYXVsdEZpbHRlclZhbHVlICYmICEocHJvcGVydHlQYXRoIGluIFVJU2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbi8qKlxuICogR2V0IGFsbCBwYXJhbWV0ZXIgZmlsdGVyIGZpZWxkcyBpbiBjYXNlIG9mIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcmFtZXRlciBGaWx0ZXJGaWVsZHNcbiAqL1xuZnVuY3Rpb24gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dCAmJiAhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQgPVxuXHRcdGlzUGFyYW1ldGVyaXplZCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0PihgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWApO1xuXG5cdHJldHVybiAoXG5cdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dFxuXHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXVxuXHQpIGFzIEZpbHRlckZpZWxkW107XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90LlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNoYXJ0cyBUaGUgQUxQIGNoYXJ0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoID0gZnVuY3Rpb24gKFxuXHRsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgY2hhcnRzIGFsbG93IHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluQ2hhcnRzID0gY2hhcnRzLmxlbmd0aCA9PT0gMCB8fCBjaGFydHMuZXZlcnkoKGNoYXJ0KSA9PiAhY2hhcnQuYXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoKTtcblxuXHQvLyBDaGVjayBpZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHQvLyBvciBhbGwgdGFibGVzIGFyZSBUcmVlVGFibGUgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5UYWJsZXMgPVxuXHRcdGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID09PSAwIHx8XG5cdFx0bGlzdFJlcG9ydFRhYmxlcy5ldmVyeSgodGFibGUpID0+ICh0YWJsZS5lbmFibGVBbmFseXRpY3MgfHwgdGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSAmJiAhdGFibGUuZW5hYmxlQmFzaWNTZWFyY2gpO1xuXG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRpZiAoY29udGV4dFBhdGggJiYgbm9TZWFyY2hJbkNoYXJ0cyAmJiBub1NlYXJjaEluVGFibGVzKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBmaWx0ZXIgZmllbGRzIGZyb20gdGhlIG1hbmlmZXN0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggQW5ub3RhdGlvbiBwYXRoIG9mIHRoZSBzZWxlY3Rpb24gZmllbGRzXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyIGZpZWxkcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXG5cdGNvbnN0IHNldHRpbmdzQ29udGV4dFBhdGggPVxuXHRcdG1hbmlmZXN0V3JhcHBlci5nZXRDb250ZXh0UGF0aCgpIHx8IChtYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCkgPyBgLyR7bWFuaWZlc3RXcmFwcGVyLmdldEVudGl0eVNldCgpfWAgOiB1bmRlZmluZWQpO1xuXHRjb25zdCBmaWx0ZXJDb25maWd1cmF0aW9uUGF0aCA9IGdldEZpbHRlckNvbmZpZ3VyYXRpb25QYXRoKGNvbnZlcnRlckNvbnRleHQsIHNldHRpbmdzQ29udGV4dFBhdGgsIGFubm90YXRpb25QYXRoKTtcblx0bGV0IGZiQ29uZmlnOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSB7fTtcblx0ZmJDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihmaWx0ZXJDb25maWd1cmF0aW9uUGF0aCk7XG5cblx0Y29uc3QgZGVmaW5lZEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+ID0gZmJDb25maWc/LmZpbHRlckZpZWxkcyB8fCB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0T2JqZWN0LmtleXMoZGVmaW5lZEZpbHRlckZpZWxkcykubWFwKChrZXkpID0+IGRlZmluZWRGaWx0ZXJGaWVsZHNba2V5XS5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShrZXkpKSxcblx0XHR0cnVlLFxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0KTtcblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIGRlZmluZWRGaWx0ZXJGaWVsZHMpIHtcblx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IGRlZmluZWRGaWx0ZXJGaWVsZHNbc0tleV07XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gZmlsdGVyRmllbGQucHJvcGVydHkgPz8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbcHJvcGVydHlOYW1lXTtcblx0XHRjb25zdCB0eXBlID0gZmlsdGVyRmllbGQudHlwZSA9PT0gXCJTbG90XCIgPyBmaWx0ZXJGaWVsZFR5cGUuU2xvdCA6IGZpbHRlckZpZWxkVHlwZS5EZWZhdWx0O1xuXHRcdGNvbnN0IHZpc3VhbEZpbHRlciA9XG5cdFx0XHRmaWx0ZXJGaWVsZCAmJiBmaWx0ZXJGaWVsZD8udmlzdWFsRmlsdGVyXG5cdFx0XHRcdD8gZ2V0VmlzdWFsRmlsdGVycyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBzS2V5LCBkZWZpbmVkRmlsdGVyRmllbGRzKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoZmlsdGVyRmllbGQudGVtcGxhdGUgfHwgZmlsdGVyRmllbGQudHlwZSA9PT0gZmlsdGVyRmllbGRUeXBlLlNsb3QpIHtcblx0XHRcdGlmIChmaWx0ZXJGaWVsZC5zZXR0aW5ncykge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncy5pc0N1c3RvbUZpbHRlciA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRpc0N1c3RvbUZpbHRlcjogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmaWx0ZXJGaWVsZHNbc0tleV0gPSB7XG5cdFx0XHRrZXk6IHNLZXksXG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0c2xvdE5hbWU6IGZpbHRlckZpZWxkPy5zbG90TmFtZSB8fCBzS2V5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvbkZpZWxkPy5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGNvbmRpdGlvblBhdGg6IGZpbHRlckZpZWxkLnByb3BlcnR5XG5cdFx0XHRcdD8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSlcblx0XHRcdFx0OiBzZWxlY3Rpb25GaWVsZD8uY29uZGl0aW9uUGF0aCB8fCBwcm9wZXJ0eU5hbWUsXG5cdFx0XHRkb2N1bWVudFJlZlRleHQ6XG5cdFx0XHRcdGZpbHRlckZpZWxkLnByb3BlcnR5ICYmXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChcblx0XHRcdFx0XHRcInttZXRhTW9kZWw+XCIgKyBmaWx0ZXJGaWVsZC5wcm9wZXJ0eSArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Eb2N1bWVudGF0aW9uUmVmfVwiXG5cdFx0XHRcdCksXG5cdFx0XHR0ZW1wbGF0ZTogZmlsdGVyRmllbGQudGVtcGxhdGUsXG5cdFx0XHRsYWJlbDogY29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKGZpbHRlckZpZWxkLmxhYmVsKSxcblx0XHRcdHBvc2l0aW9uOiBmaWx0ZXJGaWVsZC5wb3NpdGlvbiB8fCB7IHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyIH0sXG5cdFx0XHRhdmFpbGFiaWxpdHk6IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSB8fCBcIkRlZmF1bHRcIixcblx0XHRcdHNldHRpbmdzOiBmaWx0ZXJGaWVsZC5zZXR0aW5ncyxcblx0XHRcdHZpc3VhbEZpbHRlcjogdmlzdWFsRmlsdGVyLFxuXHRcdFx0cmVxdWlyZWQ6IGZpbHRlckZpZWxkLnJlcXVpcmVkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGRzO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGNvbmZpZ3VyYXRpb24gcGF0aCB0byBmZXRjaCB0aGUgY3VzdG9tIGZpbHRlciBmaWVsZHMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHNldHRpbmdzQ29udGV4dFBhdGggTWFuaWZlc3QgZW50aXR5IHNldCBwYXRoIGFuZCBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoXG4gKiBAcmV0dXJucyBQYXRoIHRvIGZldGNoIHRoZSBjdXN0b20gZmlsdGVycyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRGaWx0ZXJDb25maWd1cmF0aW9uUGF0aCA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzZXR0aW5nc0NvbnRleHRQYXRoPzogc3RyaW5nLFxuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IG9iamVjdFBhdGg7XG5cdGNvbnN0IGZpbHRlckJhckNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBtZXRhUGF0aCA9IGAke2ZpbHRlckJhckNvbnRleHRQYXRofS8ke2Fubm90YXRpb25QYXRofWA7XG5cdGlmIChzZXR0aW5nc0NvbnRleHRQYXRoICYmIG1ldGFQYXRoPy5zdGFydHNXaXRoKHNldHRpbmdzQ29udGV4dFBhdGgpICYmIGFubm90YXRpb25QYXRoKSB7XG5cdFx0b2JqZWN0UGF0aCA9IG1ldGFQYXRoLnJlcGxhY2UoYCR7c2V0dGluZ3NDb250ZXh0UGF0aH0vYCwgXCJcIik7XG5cdH0gZWxzZSB7XG5cdFx0b2JqZWN0UGF0aCA9IGFubm90YXRpb25QYXRoO1xuXHR9XG5cdHJldHVybiBvYmplY3RQYXRoID8gb2JqZWN0UGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKHt9LCBwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlclJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfCB1bmRlZmluZWQsXG5cdHNSZXN0cmljdGlvbjogXCJSZXF1aXJlZFByb3BlcnRpZXNcIiB8IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIlxuKTogc3RyaW5nW10ge1xuXHRsZXQgYVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXSkge1xuXHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkudmFsdWU7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFQcm9wcztcbn07XG5cbmNvbnN0IGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uICgpOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJHNlYXJjaFwiLFxuXHRcdHBhdGg6IFwiJHNlYXJjaFwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0bWF4Q29uZGl0aW9uczogMSxcblx0XHRsYWJlbDogXCLigIhcIixcblx0XHRjb25zdHJhaW50czogeyBtYXhMZW5ndGg6IDEwMDAgfVxuXHR9O1xufTtcblxuY29uc3QgZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0bWF4Q29uZGl0aW9uczogMSxcblx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdGdyb3VwOiBcIlwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0aGlkZGVuRmlsdGVyOiBmYWxzZVxuXHR9O1xufTtcblxuY29uc3QgZ2V0U2VhcmNoUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFNlYXJjaFJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uU2VhcmNoUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c05hdmlnYXRpb25QYXRoOiBzdHJpbmdcbik6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuLy8gVGhlIHByb3BlcnR5SW5mbyB1c2VkIGludGVybmFsbHkgd2l0aGluIEZFXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm8gPSB7XG5cdGtleT86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG5cdGRpc3BsYXk/OiBzdHJpbmc7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG5cdHR5cGU/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGZpbHRlckV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGlzQ3VzdG9tRmlsdGVyPzogYm9vbGVhbjtcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdHR5cGVDb25maWc/OiBUeXBlQ29uZmlnO1xuXHRmaWx0ZXJhYmxlPzogYm9vbGVhbjtcbn07XG5cbi8vIFRoZSBwcm9wZXJ0eUluZm8gd2Ugc2hhcmUgd2l0aCBNRENcbmV4cG9ydCB0eXBlIFByb3BlcnR5SW5mb0V4dGVybmFsID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0ZGF0YVR5cGU6IHN0cmluZztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IG9iamVjdDtcblx0Zm9ybWF0T3B0aW9ucz86IG9iamVjdDtcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0aGlkZGVuRmlsdGVyPzogYm9vbGVhbjtcbn07XG5jb25zdCBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0a2V5OiBvRmlsdGVyRmllbGRJbmZvLmtleSxcblx0XHRhbm5vdGF0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRjb25kaXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bmFtZTogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoISxcblx0XHRsYWJlbDogb0ZpbHRlckZpZWxkSW5mby5sYWJlbCxcblx0XHRoaWRkZW5GaWx0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdGRpc3BsYXk6IFwiVmFsdWVcIixcblx0XHRpc1BhcmFtZXRlcjogb0ZpbHRlckZpZWxkSW5mby5pc1BhcmFtZXRlcixcblx0XHRjYXNlU2Vuc2l0aXZlOiBvRmlsdGVyRmllbGRJbmZvLmNhc2VTZW5zaXRpdmUsXG5cdFx0YXZhaWxhYmlsaXR5OiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSxcblx0XHRwb3NpdGlvbjogb0ZpbHRlckZpZWxkSW5mby5wb3NpdGlvbixcblx0XHR0eXBlOiBvRmlsdGVyRmllbGRJbmZvLnR5cGUsXG5cdFx0dGVtcGxhdGU6IG9GaWx0ZXJGaWVsZEluZm8udGVtcGxhdGUsXG5cdFx0bWVudTogb0ZpbHRlckZpZWxkSW5mby5tZW51LFxuXHRcdHJlcXVpcmVkOiBvRmlsdGVyRmllbGRJbmZvLnJlcXVpcmVkLFxuXHRcdGlzQ3VzdG9tRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLnNldHRpbmdzPy5pc0N1c3RvbUZpbHRlclxuXHR9O1xufTtcblxuY29uc3QgX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0bWFuaWZlc3RGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IHZvaWQge1xuXHRmaWx0ZXJGaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRpZiAobWFuaWZlc3RGaWx0ZXJGaWVsZHMuaGFzT3duUHJvcGVydHkoZmlsdGVyRmllbGQua2V5KSAmJiAhbWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCkge1xuXHRcdFx0bWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCA9IGZpbHRlckZpZWxkLmxhYmVsO1xuXHRcdH1cblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgdW5kZWZpbmVkLFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zOiBFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0b1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpKTtcblxuXHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiOyAvL1RleHRGaXJzdFxuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyxcblx0b1R5cGVDb25maWc6IFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyhvRmlsdGVyRmllbGRJbmZvKTtcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblxuXHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5T2JqZWN0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihzQW5ub3RhdGlvblBhdGgpLmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cblx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSB0YXJnZXRQcm9wZXJ0eU9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdGNvbnN0IG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblxuXHRjb25zdCBvRm9ybWF0T3B0aW9ucyA9IG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnM7XG5cdGNvbnN0IG9Db25zdHJhaW50cyA9IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzO1xuXHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50cyxcblx0XHRkaXNwbGF5OiBkaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9ucywgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucylcblx0fSk7XG5cdHJldHVybiBvUHJvcGVydHlJbmZvO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5SW5mbyk6IGJvb2xlYW4ge1xuXHRsZXQgYklzTXVsdGlWYWx1ZSA9IHRydWU7XG5cdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0c3dpdGNoIChvUHJvcGVydHkuZmlsdGVyRXhwcmVzc2lvbikge1xuXHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS50eXBlICYmIG9Qcm9wZXJ0eS50eXBlLmluZGV4T2YoXCJCb29sZWFuXCIpID4gMCkge1xuXHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gYklzTXVsdGlWYWx1ZTtcbn07XG5cbmNvbnN0IF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudHJ5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG4pOiBlbnRyeSBpcyBBbm5vdGF0aW9uVGVybTxEYXRhRmllbGQgfCBEYXRhRmllbGRXaXRoVXJsIHwgRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoPiB7XG5cdHJldHVybiAoXG5cdFx0KGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKSAmJlxuXHRcdGVudHJ5LlZhbHVlLnBhdGg/LmluY2x1ZGVzKFwiL1wiKVxuXHQpO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHdoaWNoIHJlZmVyZW5jZXMgdG8gdGhlIHVuaXQsIHRpbWV6b25lLCB0ZXh0QXJyYW5nZW1lbnQgb3IgY3VycmVuY3kgZnJvbSBhIGRhdGEgZmllbGQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdlByb3BlcnRpZXMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0O1xuXHRpZiAodGFyZ2V0UHJvcGVydHkpIHtcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoID1cblx0XHRcdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGhcblx0XHRcdD8gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5Py5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlbMF0ubmFtZTtcblx0XHRcdGlmICghbmF2UHJvcGVydGllcy5pbmNsdWRlcyhuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEdldHMgdXNlZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgZm9yIGF2YWlsYWJsZSBkYXRhRmllbGQuXG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0bmF2UHJvcGVydGllczogc3RyaW5nW10sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmdbXSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkge1xuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGlubmVyRGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRpZiAoX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKFxuXHRcdFx0XHRcdGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCksXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMobmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEFkZGl0aW9uYWwgcHJvcGVydHkgZnJvbSB0ZXh0IGFycmFuZ2VtZW50L3VuaXRzL2N1cnJlbmNpZXMvdGltZXpvbmUuLi5cblx0XHRcdGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMoZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZQcm9wZXJ0aWVzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBPdGhlciB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIG5hdlByb3BlcnRpZXM7XG59O1xuXG5jb25zdCBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbiA9IGZhbHNlLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHtcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPjtcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXTtcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cdHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0ZGVmYXVsdEZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXTtcbn0ge1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50cyBkZWZpbmVkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgYW5kIGRpZmZlcmVudCB2aWV3cyAobXVsdGkgdGFibGUgbW9kZSlcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHQvL0ZpbHRlcnMgd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHdoaWNoIGlzIHBhcnQgb2YgU1YvRGVmYXVsdCBhbm5vdGF0aW9ucyBidXQgbm90IHByZXNlbnQgaW4gdGhlIFNlbGVjdGlvbkZpZWxkc1xuXHRjb25zdCBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMgPSAoKGFubm90YXRpb25QYXRoICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uKSB8fFxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgfHxcblx0XHRbXSkgYXMgUHJvcGVydHlQYXRoW107XG5cblx0bGV0IG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChsclRhYmxlcy5sZW5ndGggPT09IDAgJiYgISFsaW5lSXRlbVRlcm0pIHtcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihsaW5lSXRlbVRlcm0pLmFubm90YXRpb24gYXMgTGluZUl0ZW0pPy5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdG5hdlByb3BlcnRpZXMgPSBnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRuYXZQcm9wZXJ0aWVzLnB1c2goXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvQ3JlYXRlZEJ5VXNlclwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIlxuXHRcdCk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge1xuXHRcdC8vIC4uLm5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiB0aGUgZW50aXR5XG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkcyhlbnRpdHlUeXBlLCBcIlwiLCBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLiBub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChlbnRpdHlUeXBlLCBuYXZQcm9wZXJ0aWVzLCBmYWxzZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdClcblx0fTtcblx0bGV0IGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10gPSBbXTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPVxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8ucmVkdWNlKChzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdGlmICghZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGxldCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGg/LnN0YXJ0c1dpdGgoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGg/LnNwbGl0KFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIilbMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aCA/IG5hdmlnYXRpb25QYXRoICsgXCIvXCIgKyBwcm9wZXJ0eVBhdGggOiBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZHMsXG5cdFx0XHRcdFx0ZmlsdGVyUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cCA9IFwiXCI7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXBMYWJlbCA9IFwiXCI7XG5cdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xuXHRcdH0sIFtdKSB8fCBbXTtcblxuXHRjb25zdCBkZWZhdWx0RmlsdGVyRmllbGRzID0gX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMoXG5cdFx0YVNlbGVjdE9wdGlvbnMsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHNcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMsXG5cdFx0ZmlsdGVyRmllbGRzOiBmaWx0ZXJGaWVsZHMsXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0ZGVmYXVsdEZpbHRlckZpZWxkczogZGVmYXVsdEZpbHRlckZpZWxkc1xuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoVHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChwcm9wZXJ0eT86IFByb3BlcnR5KTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0Y29uc3QgdHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcGVydHkpIGFzIFByb3BlcnR5VHlwZUNvbmZpZztcblx0aWYgKHByb3BlcnR5Py50eXBlID09PSBzRWRtU3RyaW5nICYmIHR5cGVDb25maWcuY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSkge1xuXHRcdHR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdC4uLnR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogZmFsc2Vcblx0XHR9O1xuXHR9XG5cdHJldHVybiB0eXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5SW5mb0ZpZWxkOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhUmVxdWlyZWRQcm9wczogdW5rbm93bltdLFxuXHRhVHlwZUNvbmZpZzogUmVjb3JkPHN0cmluZywgUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+PlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBmZXRjaFByb3BlcnR5SW5mbyhjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eUluZm9GaWVsZCwgYVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5IV0pLFxuXHRcdHNQcm9wZXJ0eVBhdGggPSBcIlwiO1xuXHRpZiAocHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aCkge1xuXHRcdHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2UoL1xcK3xcXCovZywgXCJcIik7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eUluZm8pIHtcblx0XHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0XHRtYXhDb25kaXRpb25zOiBvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyXG5cdFx0XHRcdD8gMVxuXHRcdFx0XHQ6IGdldE1heENvbmRpdGlvbnMoZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBzUHJvcGVydHlQYXRoKSksXG5cdFx0XHRyZXF1aXJlZDogcHJvcGVydHlJbmZvRmllbGQucmVxdWlyZWQgPz8gKG9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgfHwgYVJlcXVpcmVkUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5UGF0aCkpLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0ZGF0YVR5cGU6IGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleSFdLnR5cGVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHM/OiBGaWx0ZXJGaWVsZFtdXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdC8vZ2V0IFR5cGVDb25maWcgZnVuY3Rpb25cblx0Y29uc3QgYVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj4gPSB7fTtcblxuXHRpZiAoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpIHtcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwcm9wZXJ0eUluZm9GaWVsZHMuY29uY2F0KGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKTtcblx0fVxuXHQvL2FkZCB0eXBlQ29uZmlnXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbWV0ZXJGaWVsZCkge1xuXHRcdGlmIChwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlDb252ZXJ0eUNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gZmV0Y2hUeXBlQ29uZmlnKHByb3BlcnR5VGFyZ2V0T2JqZWN0KTtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSBvVHlwZUNvbmZpZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IHsgdHlwZTogc1N0cmluZ0RhdGFUeXBlIH07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBmaWx0ZXJSZXN0cmljdGlvbnNcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnMgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9SZXQ6IHtcblx0XHRSZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9ID0ge307XG5cdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChhUGF0aFBhcnRzLmxlbmd0aCA+IDIpIHtcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdXG5cdFx0KTtcblx0fVxuXHRjb25zdCBhUmVxdWlyZWRQcm9wcyA9IG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRjb25zdCBhTm9uRmlsdGVyYWJsZVByb3BzID0gb1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXG5cdC8vIHByb2Nlc3MgdGhlIGZpZWxkcyB0byBhZGQgbmVjZXNzYXJ5IHByb3BlcnRpZXNcblx0cHJvcGVydHlJbmZvRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5SW5mb0ZpZWxkKSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgucmVwbGFjZSgvWysqXS9nLCBcIlwiKTtcblx0XHRpZiAoIWFOb25GaWx0ZXJhYmxlUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5UGF0aCkpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvKHByb3BlcnR5SW5mb0ZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBhUmVxdWlyZWRQcm9wcywgYVR5cGVDb25maWcpO1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2gob1Byb3BlcnR5SW5mbyk7XG5cdFx0fVxuXHR9KTtcblxuXHQvL2FkZCBlZGl0XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNIaWRkZW5EcmFmdEVuYWJsZWQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uKCk/LmFwcD8uaGlkZURyYWZ0Py5lbmFibGVkO1xuXHRpZiAoTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCkpIHtcblx0XHRpZiAoc2hvd0RyYWZ0RWRpdFN0YXR1cyhjb252ZXJ0ZXJDb250ZXh0KSAmJiAhaXNIaWRkZW5EcmFmdEVuYWJsZWQpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblx0Ly8gYWRkIHNlYXJjaFxuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChzRW50aXR5U2V0UGF0aCAmJiBoaWRlQmFzaWNTZWFyY2ggIT09IHRydWUpIHtcblx0XHRpZiAoIXNlYXJjaFJlc3RyaWN0aW9ucyB8fCBzZWFyY2hSZXN0cmljdGlvbnM/LlNlYXJjaGFibGUpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3dEcmFmdEVkaXRTdGF0dXMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogYm9vbGVhbiB7XG5cdGNvbnN0IG5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQsIFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFcIik7XG5cdHJldHVybiBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5GaWx0ZXJSZXN0cmljdGlvbnM/LkZpbHRlcmFibGUgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogTWFuaWZlc3RGaWx0ZXJGaWVsZFtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmdcbik6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXHRfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBtYW5pZmVzdEZpbHRlckZpZWxkcyk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhmaWx0ZXJGaWVsZHMsIG1hbmlmZXN0RmlsdGVyRmllbGRzLCB7XG5cdFx0YXZhaWxhYmlsaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGxhYmVsOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHR5cGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0c2xvdE5hbWU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZG9jdW1lbnRSZWZUZXh0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHRlbXBsYXRlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc3VhbEZpbHRlcjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRyZXF1aXJlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbCA9IChwcm9wZXJ0eUluZm9zOiBQcm9wZXJ0eUluZm9bXSk6IHZvaWQgPT4ge1xuXHRwcm9wZXJ0eUluZm9zLnNvcnQoZnVuY3Rpb24gKGE6IEZpbHRlckdyb3VwLCBiOiBGaWx0ZXJHcm91cCkge1xuXHRcdGNvbnN0IGFHcm91cExhYmVsSXNTZXQgPSBhLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBhLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0Y29uc3QgYkdyb3VwTGFiZWxJc1NldCA9IGIuZ3JvdXBMYWJlbCAhPT0gdW5kZWZpbmVkICYmIGIuZ3JvdXBMYWJlbCAhPT0gbnVsbDtcblx0XHRpZiAoIWFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblx0XHRpZiAoYUdyb3VwTGFiZWxJc1NldCAmJiAhYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpZiAoIWFHcm91cExhYmVsSXNTZXQgJiYgYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdHJldHVybiBhLmdyb3VwTGFiZWwhLmxvY2FsZUNvbXBhcmUoYi5ncm91cExhYmVsISk7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiBmaWVsZHMgdGhhdCB3aWxsIGJlIHVzZWQgd2l0aGluIHRoZSBmaWx0ZXIgYmFyXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gdGFrZXMgaW50byBhY2NvdW50IHRoZSBhbm5vdGF0aW9uIGFuZCB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBsclRhYmxlc1xuICogQHBhcmFtIGFubm90YXRpb25QYXRoXG4gKiBAcGFyYW0gW2luY2x1ZGVIaWRkZW5dXG4gKiBAcGFyYW0gW2xpbmVJdGVtVGVybV1cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlbGVjdGlvbiBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGggPSBcIlwiLFxuXHRpbmNsdWRlSGlkZGVuPzogYm9vbGVhbixcblx0bGluZUl0ZW1UZXJtPzogc3RyaW5nXG4pOiB7IHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXTsgc1Byb3BlcnR5SW5mbzogc3RyaW5nIH0ge1xuXHRjb25zdCBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhKFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bHJUYWJsZXMsXG5cdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0aW5jbHVkZUhpZGRlbixcblx0XHRsaW5lSXRlbVRlcm1cblx0KTtcblx0Y29uc3QgcGFyYW1ldGVyRmllbGRzID0gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5lbnRpdHlUeXBlO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IHBhcmFtZXRlckZpZWxkcy5jb25jYXQocHJvcGVydHlJbmZvRmllbGRzKTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKHByb3BlcnR5SW5mb0ZpZWxkcywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllcyA9IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMoXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0b0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5kZWZhdWx0RmlsdGVyRmllbGRzXG5cdCk7XG5cdHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsKGFGZXRjaGVkUHJvcGVydGllcyk7XG5cblx0bGV0IHNGZXRjaFByb3BlcnRpZXMgPSBKU09OLnN0cmluZ2lmeShhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRzRmV0Y2hQcm9wZXJ0aWVzID0gc0ZldGNoUHJvcGVydGllcy5yZXBsYWNlKC9cXHsvZywgXCJcXFxce1wiKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdGNvbnN0IHNQcm9wZXJ0eUluZm8gPSBzRmV0Y2hQcm9wZXJ0aWVzO1xuXHQvLyBlbmQgb2YgcHJvcGVydHlGaWVsZHMgcHJvY2Vzc2luZ1xuXG5cdC8vIHRvIHBvcHVsYXRlIHNlbGVjdGlvbiBmaWVsZHNcblx0bGV0IHByb3BTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzKSk7XG5cdHByb3BTZWxlY3Rpb25GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BTZWxlY3Rpb25GaWVsZHMpO1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50c1xuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMgPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcztcblx0Y29uc3QgZmlsdGVyRmFjZXRzID0gZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5GaWx0ZXJGYWNldHM7XG5cdGxldCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cblx0Y29uc3QgYUZpZWxkR3JvdXBzID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIlVJXCIsIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApIGFzIEZpZWxkR3JvdXBbXTtcblxuXHRpZiAoZmlsdGVyRmFjZXRzID09PSB1bmRlZmluZWQgfHwgZmlsdGVyRmFjZXRzLmxlbmd0aCA8IDApIHtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYUZpZWxkR3JvdXBzKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcCA9IHtcblx0XHRcdFx0Li4uZmlsdGVyRmFjZXRNYXAsXG5cdFx0XHRcdC4uLmdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoYUZpZWxkR3JvdXBzW2ldKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmFjZXRNYXAgPSBmaWx0ZXJGYWNldHMucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4sIGZpbHRlckZhY2V0OiBSZWZlcmVuY2VGYWNldFR5cGVzKSA9PiB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChmaWx0ZXJGYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApPy5EYXRhPy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRwcmV2aW91c1ZhbHVlWygoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YVtpXSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoXSA9IHtcblx0XHRcdFx0XHRncm91cDogZmlsdGVyRmFjZXQ/LklEPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGdyb3VwTGFiZWw6IGZpbHRlckZhY2V0Py5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0fSwge30pO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZmlsdGVyRmllbGRzO1xuXG5cdC8vIGZpbmFsbHkgY3JlYXRlIGZpbmFsIGxpc3Qgb2YgZmlsdGVyIGZpZWxkcyBieSBhZGRpbmcgdGhlIFNlbGVjdGlvbkZpZWxkcyBmaXJzdCAob3JkZXIgbWF0dGVycykuLi5cblx0Y29uc3QgYWxsRmlsdGVycyA9IHByb3BTZWxlY3Rpb25GaWVsZHNcblxuXHRcdC8vIC4uLmFuZCBhZGRpbmcgcmVtYWluaW5nIGZpbHRlciBmaWVsZHMsIHRoYXQgYXJlIG5vdCB1c2VkIGluIGEgU2VsZWN0aW9uVmFyaWFudCAob3JkZXIgZG9lc24ndCBtYXR0ZXIpXG5cdFx0LmNvbmNhdChcblx0XHRcdE9iamVjdC5rZXlzKGZpbHRlckZpZWxkcylcblx0XHRcdFx0LmZpbHRlcigocHJvcGVydHlQYXRoKSA9PiAhZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHQubWFwKChwcm9wZXJ0eVBhdGgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXSwgZmlsdGVyRmFjZXRNYXBbcHJvcGVydHlQYXRoXSk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKGFsbEZpbHRlcnMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblxuXHQvLyBBZGQgY2FzZVNlbnNpdGl2ZSBwcm9wZXJ0eSB0byBhbGwgc2VsZWN0aW9uIGZpZWxkcy5cblx0Y29uc3QgaXNDYXNlU2Vuc2l0aXZlID0gaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpO1xuXHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRmaWx0ZXJGaWVsZC5jYXNlU2Vuc2l0aXZlID0gaXNDYXNlU2Vuc2l0aXZlO1xuXHR9KTtcblxuXHRyZXR1cm4geyBzZWxlY3Rpb25GaWVsZHMsIHNQcm9wZXJ0eUluZm8gfTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgYmFyIGluc2lkZSBhIHZhbHVlIGhlbHAgZGlhbG9nIHNob3VsZCBiZSBleHBhbmRlZC4gVGhpcyBpcyB0cnVlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZDpcbiAqICgxKSBhIGZpbHRlciBwcm9wZXJ0eSBpcyBtYW5kYXRvcnksXG4gKiAoMikgbm8gc2VhcmNoIGZpZWxkIGV4aXN0cyAoZW50aXR5IGlzbid0IHNlYXJjaCBlbmFibGVkKSxcbiAqICgzKSB3aGVuIHRoZSBkYXRhIGlzbid0IGxvYWRlZCBieSBkZWZhdWx0IChhbm5vdGF0aW9uIEZldGNoVmFsdWVzID0gMikuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIFRoZSBGaWx0ZXJSZXN0cmljdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmFsdWVMaXN0IFRoZSBWYWx1ZUxpc3QgYW5ub3RhdGlvblxuICogQHJldHVybnMgVGhlIHZhbHVlIGZvciBleHBhbmRGaWx0ZXJGaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cGFuZEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBGaWx0ZXJSZXN0cmljdGlvbnMgfCB1bmRlZmluZWQsXG5cdHZhbHVlTGlzdDogTWV0YU1vZGVsVHlwZTxWYWx1ZUxpc3Q+XG4pOiBib29sZWFuIHtcblx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24sIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpO1xuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChyZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCB8fCBoaWRlQmFzaWNTZWFyY2ggfHwgdmFsdWVMaXN0Py5GZXRjaFZhbHVlcyA9PT0gMikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXlEQTtFQUFBLElBZ0NLQSxlQUFlLDBCQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBZkEsZUFBZTtJQUFBLE9BQWZBLGVBQWU7RUFBQSxFQUFmQSxlQUFlO0VBY3BCLE1BQU1DLFVBQVUsR0FBRyxZQUFZO0VBQy9CLE1BQU1DLGVBQWUsR0FBRyxnQ0FBZ0M7RUFJeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLHlCQUF5QkEsQ0FBQ0MsVUFBc0IsRUFBK0I7SUFDdkYsTUFBTUMsY0FBMkMsR0FBRyxDQUFDLENBQUM7SUFDdERELFVBQVUsQ0FBQ0UsSUFBSSxDQUFDQyxPQUFPLENBQUVDLFNBQWlDLElBQUs7TUFDOUQsSUFBSUEsU0FBUyxDQUFDQyxLQUFLLEtBQUssc0NBQXNDLEVBQUU7UUFDL0RKLGNBQWMsQ0FBQ0csU0FBUyxDQUFDRSxLQUFLLENBQUNDLElBQUksQ0FBQyxHQUFHO1VBQ3RDQyxLQUFLLEVBQUVSLFVBQVUsQ0FBQ1Msa0JBQWtCO1VBQ3BDQyxVQUFVLEVBQUVWLFVBQVUsQ0FBQ1csS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQyxJQUFJWixV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