@sapui5/sap.fe.core 1.136.2 → 1.138.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +76 -28
- package/src/sap/fe/core/ActionRuntime.ts +106 -30
- package/src/sap/fe/core/AppComponent.js +11 -1
- package/src/sap/fe/core/AppComponent.ts +10 -0
- package/src/sap/fe/core/CommonUtils.js +15 -3
- package/src/sap/fe/core/CommonUtils.ts +13 -2
- package/src/sap/fe/core/PageController.controller.js +10 -0
- package/src/sap/fe/core/PageController.controller.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -4
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +2 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +42 -36
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +53 -44
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -15
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1 -14
- package/src/sap/fe/core/controllerextensions/Paginator.js +20 -5
- package/src/sap/fe/core/controllerextensions/Paginator.ts +19 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +4 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +155 -129
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +200 -175
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +11 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +11 -31
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +35 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +46 -10
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +17 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +88 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +106 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +15 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +25 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +24 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +3 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +2 -10
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +8 -15
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -19
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -4
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +7 -3
- package/src/sap/fe/core/controls/DataWatcher.js +2 -2
- package/src/sap/fe/core/controls/DataWatcher.tsx +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +11 -6
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +13 -9
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +3 -2
- package/src/sap/fe/core/converters/MetaModelConverter.ts +12 -4
- package/src/sap/fe/core/converters/controls/Common/Action.js +53 -21
- package/src/sap/fe/core/converters/controls/Common/Action.ts +53 -24
- package/src/sap/fe/core/converters/controls/Common/Chart.js +4 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +33 -12
- package/src/sap/fe/core/converters/controls/Common/Table.ts +37 -10
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +2 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +6 -11
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +10 -17
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +3 -28
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -26
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +2 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +8 -56
- package/src/sap/fe/core/helpers/ModelHelper.ts +11 -57
- package/src/sap/fe/core/helpers/PasteHelper.js +2 -2
- package/src/sap/fe/core/helpers/PasteHelper.ts +1 -1
- package/src/sap/fe/core/library.js +33 -4
- package/src/sap/fe/core/library.ts +33 -2
- package/src/sap/fe/core/messagebundle.properties +18 -2
- package/src/sap/fe/core/messagebundle_el.properties +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.js +3 -8
- package/src/sap/fe/core/rootView/Fcl.controller.ts +7 -14
- package/src/sap/fe/core/rootView/RootViewBaseController.js +6 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +5 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -0
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +1 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +0 -81
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +0 -126
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +0 -10
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +0 -2
- package/src/sap/fe/core/designtime/messagebundle_en_US_saprigi.properties +0 -7
|
@@ -281,6 +281,7 @@ export type TableControlConfiguration = {
|
|
|
281
281
|
enableExport: boolean;
|
|
282
282
|
enablePastingOfComputedProperties?: boolean;
|
|
283
283
|
frozenColumnCount?: number;
|
|
284
|
+
enableColumnFreeze?: boolean;
|
|
284
285
|
widthIncludingColumnHeader?: boolean;
|
|
285
286
|
header?: string;
|
|
286
287
|
headerVisible?: boolean;
|
|
@@ -289,6 +290,7 @@ export type TableControlConfiguration = {
|
|
|
289
290
|
rowCountMode?: TableRowCountMode;
|
|
290
291
|
rowCount?: number;
|
|
291
292
|
scrollThreshold?: number;
|
|
293
|
+
threshold?: number;
|
|
292
294
|
selectAll?: boolean;
|
|
293
295
|
selectionLimit: number;
|
|
294
296
|
multiSelectMode: string | undefined;
|
|
@@ -2109,15 +2111,7 @@ export function getTableAnnotationConfiguration(
|
|
|
2109
2111
|
standardActionsConfiguration.massEditButtonVisibilityExpression,
|
|
2110
2112
|
standardActionsConfiguration.cutButtonVisibilityExpression
|
|
2111
2113
|
);
|
|
2112
|
-
|
|
2113
|
-
if (presentationVariantAnnotation?.MaxItems) {
|
|
2114
|
-
threshold = presentationVariantAnnotation.MaxItems.valueOf();
|
|
2115
|
-
} else if (tableManifestConfiguration.type === "TreeTable") {
|
|
2116
|
-
// To make scrolling smooth, we set the threshold value higher for tree tables
|
|
2117
|
-
threshold = 200;
|
|
2118
|
-
} else if (tableManifestConfiguration.type === "GridTable" || tableManifestConfiguration.type === "AnalyticalTable") {
|
|
2119
|
-
threshold = 100;
|
|
2120
|
-
}
|
|
2114
|
+
const threshold = getThreshold(tableManifestConfiguration, navigationPropertyPath, presentationVariantAnnotation);
|
|
2121
2115
|
const variantManagement: VariantManagementType = pageManifestSettings.getVariantManagement();
|
|
2122
2116
|
const isSearchable = isPathSearchable(converterContext.getDataModelObjectPath());
|
|
2123
2117
|
return {
|
|
@@ -2156,6 +2150,29 @@ export function getTableAnnotationConfiguration(
|
|
|
2156
2150
|
};
|
|
2157
2151
|
}
|
|
2158
2152
|
|
|
2153
|
+
/**
|
|
2154
|
+
* Determines the threshold value for the table.
|
|
2155
|
+
* @param tableManifestConfiguration The table manifest configuration
|
|
2156
|
+
* @param navigationPropertyPath The navigation property path
|
|
2157
|
+
* @param presentationVariantAnnotation The presentation variant annotation
|
|
2158
|
+
* @returns The threshold value
|
|
2159
|
+
*/
|
|
2160
|
+
function getThreshold(
|
|
2161
|
+
tableManifestConfiguration: TableControlConfiguration,
|
|
2162
|
+
navigationPropertyPath: string,
|
|
2163
|
+
presentationVariantAnnotation?: PresentationVariantType
|
|
2164
|
+
): number {
|
|
2165
|
+
let threshold = navigationPropertyPath ? 10 : 30;
|
|
2166
|
+
if (presentationVariantAnnotation?.MaxItems) {
|
|
2167
|
+
threshold = presentationVariantAnnotation.MaxItems.valueOf();
|
|
2168
|
+
} else if (tableManifestConfiguration.type === "TreeTable") {
|
|
2169
|
+
// To make scrolling smooth, we set the threshold value higher for tree tables
|
|
2170
|
+
threshold = 200;
|
|
2171
|
+
} else if (tableManifestConfiguration.type === "GridTable" || tableManifestConfiguration.type === "AnalyticalTable") {
|
|
2172
|
+
threshold = 100;
|
|
2173
|
+
}
|
|
2174
|
+
return threshold;
|
|
2175
|
+
}
|
|
2159
2176
|
/**
|
|
2160
2177
|
* Splits the visualization path into navigation property path and annotation.
|
|
2161
2178
|
* @param visualizationPath
|
|
@@ -2287,6 +2304,14 @@ function _getEnableExport(
|
|
|
2287
2304
|
function _getFrozenColumnCount(tableSettings: TableManifestSettingsConfiguration): number | undefined {
|
|
2288
2305
|
return tableSettings.frozenColumnCount;
|
|
2289
2306
|
}
|
|
2307
|
+
/**
|
|
2308
|
+
* Returns whether the column freeze is enabled or not.
|
|
2309
|
+
* @param tableSettings TableSettings
|
|
2310
|
+
* @returns Returns true if column freeze should be enabled, false otherwise
|
|
2311
|
+
*/
|
|
2312
|
+
function getEnableColumnFreeze(tableSettings: TableManifestSettingsConfiguration): boolean | undefined {
|
|
2313
|
+
return tableSettings.disableColumnFreeze !== true;
|
|
2314
|
+
}
|
|
2290
2315
|
|
|
2291
2316
|
/**
|
|
2292
2317
|
* Get the widthIncludingColumnHeader value from the tableSettings if it exists.
|
|
@@ -2599,6 +2624,7 @@ export function getTableManifestConfiguration(
|
|
|
2599
2624
|
enableExport: _getEnableExport(tableSettings, converterContext, enablePaste),
|
|
2600
2625
|
analyticalConfiguration,
|
|
2601
2626
|
frozenColumnCount: _getFrozenColumnCount(tableSettings),
|
|
2627
|
+
enableColumnFreeze: getEnableColumnFreeze(tableSettings),
|
|
2602
2628
|
widthIncludingColumnHeader: _getWidthIncludingColumnHeader(tableSettings),
|
|
2603
2629
|
enableFullScreen: _getFullScreenBasedOnDevice(tableSettings, converterContext, _manifestWrapper.isPhone()),
|
|
2604
2630
|
massEdit: getMassEditSettings(tableSettings, converterContext),
|
|
@@ -2619,7 +2645,8 @@ export function getTableManifestConfiguration(
|
|
|
2619
2645
|
exportRequestSize: exportRequestSize,
|
|
2620
2646
|
enableUploadPlugin: !!converterContext.getAnnotationEntityType().annotations?.UI?.MediaResource?.Stream,
|
|
2621
2647
|
modeForNoDataMessage: useTextForNoDataMessages,
|
|
2622
|
-
scrollThreshold: tableSettings.scrollThreshold ?? defaultScrollThreshold
|
|
2648
|
+
scrollThreshold: tableSettings.scrollThreshold ?? defaultScrollThreshold,
|
|
2649
|
+
threshold: tableSettings.threshold
|
|
2623
2650
|
};
|
|
2624
2651
|
|
|
2625
2652
|
const tableConfiguration: TableControlConfiguration = { ...oConfiguration, ...tableRowMode, ...oFilterConfiguration };
|
|
@@ -67,7 +67,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
|
|
|
67
67
|
return SubSectionType;
|
|
68
68
|
}({});
|
|
69
69
|
_exports.SubSectionType = SubSectionType;
|
|
70
|
-
const visualizationTerms = ["com.sap.vocabularies.UI.v1.LineItem", "com.sap.vocabularies.UI.v1.Chart", "com.sap.vocabularies.UI.v1.PresentationVariant", "com.sap.vocabularies.UI.v1.SelectionPresentationVariant"];
|
|
70
|
+
const visualizationTerms = ["com.sap.vocabularies.UI.v1.LineItem", "com.sap.vocabularies.UI.v1.Chart", "com.sap.vocabularies.UI.v1.PresentationVariant", "com.sap.vocabularies.UI.v1.SelectionPresentationVariant", "com.sap.vocabularies.UI.v1.Note"];
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
73
|
* Create subsections based on facet definition.
|
|
@@ -688,4 +688,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
|
|
|
688
688
|
}
|
|
689
689
|
return _exports;
|
|
690
690
|
}, false);
|
|
691
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdWJTZWN0aW9uVHlwZSIsIl9leHBvcnRzIiwidmlzdWFsaXphdGlvblRlcm1zIiwiY3JlYXRlU3ViU2VjdGlvbnMiLCJmYWNldENvbGxlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiaXNIZWFkZXJTZWN0aW9uIiwidXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMiLCJmYWNldHNUb0NyZWF0ZSIsInJlZHVjZSIsImZhY2V0RGVmaW5pdGlvbiIsIiRUeXBlIiwicHVzaCIsIkZhY2V0cyIsImZpbmQiLCJmYWNldFR5cGUiLCJzcGxpY2UiLCJsZW5ndGgiLCJtYXAiLCJmYWNldCIsImNyZWF0ZVN1YlNlY3Rpb24iLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRzIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0SGVhZGVyRmFjZXRzIiwiYUN1c3RvbUhlYWRlckZhY2V0cyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiY3VzdG9tSGVhZGVyRmFjZXQiLCJ0ZW1wbGF0ZUVkaXQiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24iLCJzdWJTZWN0aW9uSUQiLCJnZXRDdXN0b21TdWJTZWN0aW9uSUQiLCJzdWJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsInR5cGUiLCJYTUxGcmFnbWVudCIsInRlbXBsYXRlIiwidmlzaWJsZSIsImxldmVsIiwic2lkZUNvbnRlbnQiLCJ1bmRlZmluZWQiLCJzdGFzaGVkIiwiZmxleFNldHRpbmdzIiwiYWN0aW9ucyIsIm9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZCIsImdldFN1YlNlY3Rpb25LZXkiLCJmYWxsYmFjayIsIklEIiwidG9TdHJpbmciLCJMYWJlbCIsImFkZEZvcm1NZW51QWN0aW9ucyIsInJldmVyc2VJbmRleCIsInN0YXJ0c1dpdGgiLCJoaWRkZW5BY3Rpb25zIiwiZ2V0Rm9ybUhpZGRlbkFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiY29tbWFuZCIsInBvc2l0aW9uIiwibWVudSIsImZvcm1BY3Rpb25zIiwiZ2V0Rm9ybUFjdGlvbnMiLCJtYW5pZmVzdEFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsImdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMiLCJtYXRjaGluZ01hbmlmZXN0QWN0aW9ucyIsImdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24iLCJvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwibWFuaWZlc3RBY3Rpb24iLCJmb3JtQWxsQWN0aW9ucyIsInByZXBhcmVNZW51QWN0aW9ucyIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zIiwiYWN0aW9uIiwiQWN0aW9uVHlwZSIsIk1lbnUiLCJkZWZhdWx0QWN0aW9uIiwiRGVmYXVsdCIsImNvbW1hbmRBY3Rpb25zIiwiZ2V0RmFjZXRBY3Rpb25zIiwiZmlsdGVyIiwic3ViRmFjZXREZWZpbml0aW9uIiwiaXNSZWZlcmVuY2VGYWNldCIsImFjdGlvblJlZHVjZXIiLCJyZWZlcmVuY2VGYWNldCIsImNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyIiwiZ2V0QnV0dG9uVHlwZSIsImVtcGhhc2l6ZWQiLCJidXR0b25UeXBlQ29uZGl0aW9uIiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkJ1dHRvblR5cGUiLCJHaG9zdCIsIlRyYW5zcGFyZW50IiwiaGFzU2luZ2xlQ29udGVudCIsImdldFN1YlNlY3Rpb25JRCIsImhpZGRlbkFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwiaXNWaXNpYmxlRXhwcmVzc2lvbiIsIm5vdCIsInBhdGgiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImdldENvbnZlcnRlZFR5cGVzIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImlzQ29uc3RhbnQiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIlVua25vd24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJ1bnN1cHBvcnRlZFRleHQiLCJmYWNldHMiLCJ2aXN1YWxpemF0aW9uRmFjZXRzIiwiaW5kZXgiLCJfcmVmIiwiVGFyZ2V0IiwiJHRhcmdldCIsImluY2x1ZGVzIiwidGVybSIsIm5vblZpc3VhbGl6YXRpb25GYWNldHMiLCJ2aXN1YWxpemF0aW9uIiwidmlzdWFsaXphdGlvbkNvbnRlbnQiLCJmb3JtQ29udGVudCIsIm1peGVkQ29udGVudCIsIkxvZyIsIndhcm5pbmciLCJmYWtlRm9ybUZhY2V0IiwiX3JlZjIiLCJtaXhlZFN1YlNlY3Rpb24iLCJNaXhlZCIsImNvbnRlbnQiLCJmYWNldEFjdGlvbnMiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwicHJlc2VudGF0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsImdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZSIsImRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCIsInNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwic3ViU2VjdGlvblRpdGxlIiwiY29udHJvbFRpdGxlIiwidmlzdWFsaXphdGlvbnMiLCJhbm5vdGF0aW9uIiwiaXNQYXJ0T2ZQcmV2aWV3IiwiUGFydE9mUHJldmlldyIsInZhbHVlT2YiLCJzaG93U3ViU2VjdGlvblRpdGxlIiwiZ2V0U2hvd1N1YlNlY3Rpb25UaXRsZSIsImRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlIiwiYW5kIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJmb3JtRWxlbWVudFN1YlNlY3Rpb24iLCJOb3RlcyIsInVuc3VwcG9ydGVkU3ViU2VjdGlvbiIsInRleHQiLCJvciIsIm5vdEVxdWFsIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJyZWZlcmVuY2VUYXJnZXQiLCJ0YXJnZXRWYWx1ZSIsImRhdGFGaWVsZENvbGxlY3Rpb24iLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsIkRhdGEiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwicXVhbGlmaWVyIiwiZGF0YUZpZWxkIiwiUmVxdWlyZXNDb250ZXh0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0Rm9ybUlEIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsImJ1dHRvblR5cGUiLCJFbXBoYXNpemVkIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiaXNBSU9wZXJhdGlvbiIsImlzTWVudUFJT3BlcmF0aW9uIiwiQWN0aW9ucyIsImZvcm1NYW5pZmVzdE1lbnVBY3Rpb25zQ29uZmlndXJhdGlvbiIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiQWN0aW9uVGFyZ2V0IiwiYmluZGluZyIsInJlcXVpcmVzRGlhbG9nIiwiaXNBY3Rpb25XaXRoRGlhbG9nIiwiaXNBY3Rpb25BSU9wZXJhdGlvbiIsImNvbnRleHRzIiwicGF0aEluTW9kZWwiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIm1vZGVsIiwiaXNOYXZpZ2FibGUiLCJpc0FjdGlvbk5hdmlnYWJsZSIsInJlZiIsImlzRGlhbG9nIiwiYWN0aW9uRGVmaW5pdGlvbiIsImJDcml0aWNhbCIsIkNvbW1vbiIsIklzQWN0aW9uQ3JpdGljYWwiLCJwYXJhbWV0ZXJzIiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbnMiLCJzdWJTZWN0aW9uS2V5IiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbiIsIm1hbmlmZXN0U3ViU2VjdGlvbiIsImdldFNpZGVDb250ZW50SUQiLCJlcXVhbFNwbGl0IiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc1Zpc2libGUiLCJpc0R5bmFtaWNFeHByZXNzaW9uIiwiaW5kZXhPZiIsInZhbHVlcyIsInByZXZpb3VzQWN0aW9uIiwiY3VycmVudEFjdGlvbiIsInN1YlNlY3Rpb25EZWZpbml0aW9uIiwiZW5hYmxlTGF6eUxvYWRpbmciLCJjb21wb25lbnROYW1lIiwic2V0dGluZ3MiLCJhcHBseVN0YXRlIiwicmV0cmlldmVTdGF0ZSIsIm5hbWUiLCJlbWJlZGRlZENvbXBvbmVudCIsIkVtYmVkZGVkQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIlBsYWNlaG9sZGVyIiwiY3VycmVudEZhY2V0IiwiZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24iLCJtYW5pZmVzdFdyYXBwZXIiLCJ1c2VJY29uVGFiQmFyIiwiaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZXZlcnkiLCJzdWJGYWNldCIsInJlZkZhY2V0Iiwic3ViQ29sbGVjdGlvbkZhY2V0Iiwic3ViUmVmRmFjZXQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbGxlY3Rpb25GYWNldCxcblx0Q29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHRFbXBoYXNpemVkLFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGVxdWFsLFxuXHRmbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdG5vdCxcblx0bm90RXF1YWwsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVmLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QmFzZUFjdGlvbixcblx0Q29tYmluZWRBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0T3ZlcnJpZGVUeXBlQWN0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdEJ1dHRvblR5cGUsXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLFxuXHRnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMsXG5cdGlzQWN0aW9uQUlPcGVyYXRpb24sXG5cdGlzQWN0aW9uTmF2aWdhYmxlLFxuXHRpc01lbnVBSU9wZXJhdGlvbixcblx0cHJlcGFyZU1lbnVBY3Rpb25zLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQsIEZsZXhTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB7XG5cdGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQsXG5cdGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdCxcblx0Z2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uLCBNYW5pZmVzdEFjdGlvbiwgTWFuaWZlc3RTdWJTZWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgaXNBY3Rpb25XaXRoRGlhbG9nIH0gZnJvbSBcIi4uLy4uL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIENvbmZpZ3VyYWJsZVJlY29yZCwgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBnZXRDdXN0b21TdWJTZWN0aW9uSUQsIGdldEZvcm1JRCwgZ2V0U2lkZUNvbnRlbnRJRCwgZ2V0U3ViU2VjdGlvbklEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IGdldEZvcm1BY3Rpb25zLCBnZXRGb3JtSGlkZGVuQWN0aW9ucyB9IGZyb20gXCIuLi8uLi9vYmplY3RQYWdlL0Zvcm1NZW51QWN0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgeyBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1EZWZpbml0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBjcmVhdGVGb3JtRGVmaW5pdGlvbiwgaXNSZWZlcmVuY2VGYWNldCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuXG5leHBvcnQgZW51bSBTdWJTZWN0aW9uVHlwZSB7XG5cdFVua25vd24gPSBcIlVua25vd25cIiwgLy8gRGVmYXVsdCBUeXBlXG5cdEZvcm0gPSBcIkZvcm1cIixcblx0Tm90ZXMgPSBcIk5vdGVzXCIsXG5cdERhdGFWaXN1YWxpemF0aW9uID0gXCJEYXRhVmlzdWFsaXphdGlvblwiLFxuXHRYTUxGcmFnbWVudCA9IFwiWE1MRnJhZ21lbnRcIixcblx0UGxhY2Vob2xkZXIgPSBcIlBsYWNlaG9sZGVyXCIsXG5cdE1peGVkID0gXCJNaXhlZFwiLFxuXHRFbWJlZGRlZENvbXBvbmVudCA9IFwiRW1iZWRkZWRDb21wb25lbnRcIlxufVxuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiA9XG5cdHwgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uXG5cdHwgRm9ybVN1YlNlY3Rpb25cblx0fCBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb25cblx0fCBDb250YWN0U3ViU2VjdGlvblxuXHR8IFhNTEZyYWdtZW50U3ViU2VjdGlvblxuXHR8IFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgTWl4ZWRTdWJTZWN0aW9uXG5cdHwgUmV1c2VDb21wb25lbnRTdWJTZWN0aW9uXG5cdHwgTm90ZVN1YlNlY3Rpb247XG5cbnR5cGUgQmFzZVN1YlNlY3Rpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xuXHR0aXRsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aXNWaXNpYmlsaXR5RHluYW1pYz86IGJvb2xlYW4gfCBcIlwiO1xuXHRmbGV4U2V0dGluZ3M/OiBGbGV4U2V0dGluZ3M7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRsZXZlbDogbnVtYmVyO1xuXHRjb250ZW50PzogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXHRzaWRlQ29udGVudD86IFNpZGVDb250ZW50RGVmO1xuXHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IGJvb2xlYW47XG5cdGNsYXNzPzogc3RyaW5nO1xuXHRhcHBseVN0YXRlPzogc3RyaW5nO1xuXHRyZXRyaWV2ZVN0YXRlPzogc3RyaW5nO1xufTtcblxudHlwZSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bjtcblx0dGV4dDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uO1xuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0aXNQYXJ0T2ZQcmV2aWV3PzogYm9vbGVhbjtcblx0c2hvd1N1YlNlY3Rpb25UaXRsZTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZT86IHN0cmluZyB8IGJvb2xlYW47XG5cdGRhdGFWaXN1YWxpemF0aW9uT3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufTtcblxudHlwZSBDb250YWN0U3ViU2VjdGlvbiA9IFVuc3VwcG9ydGVkU3ViU2VjdGlvbjtcbnR5cGUgTm90ZVN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuTm90ZXM7XG59O1xudHlwZSBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudDtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgUmV1c2VDb21wb25lbnRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkVtYmVkZGVkQ29tcG9uZW50O1xuXHRjb21wb25lbnROYW1lOiBzdHJpbmc7XG5cdHNldHRpbmdzOiBzdHJpbmc7XG59O1xuXG50eXBlIFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uID0gT21pdDxCYXNlU3ViU2VjdGlvbiwgXCJhbm5vdGF0aW9uUGF0aFwiPiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBNaXhlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuTWl4ZWQ7XG5cdGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm07XG5cdGZvcm1EZWZpbml0aW9uOiBGb3JtRGVmaW5pdGlvbjtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRpZDogc3RyaW5nO1xuXHR0aXRsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHNob3dUaXRsZT86IGJvb2xlYW47XG5cdHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuO1xuXHRhcHBseVN0YXRlPzogc3RyaW5nO1xuXHRyZXRyaWV2ZVN0YXRlPzogc3RyaW5nO1xufTtcblxudHlwZSBTaWRlQ29udGVudERlZiA9IHtcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGlkPzogc3RyaW5nO1xuXHRzaWRlQ29udGVudEZhbGxEb3duPzogc3RyaW5nO1xuXHRjb250YWluZXJRdWVyeT86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdGVxdWFsU3BsaXQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTZWN0aW9uPiAmIHtcblx0b25TZWN0aW9uTG9hZGVkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblxuY29uc3QgdmlzdWFsaXphdGlvblRlcm1zOiBzdHJpbmdbXSA9IFtcblx0VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0sXG5cdFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0LFxuXHRVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50LFxuXHRVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5dO1xuXG4vKipcbiAqIENyZWF0ZSBzdWJzZWN0aW9ucyBiYXNlZCBvbiBmYWNldCBkZWZpbml0aW9uLlxuICogQHBhcmFtIGZhY2V0Q29sbGVjdGlvbiBDb2xsZWN0aW9uIG9mIGZhY2V0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uIFRydWUgaWYgaGVhZGVyIHNlY3Rpb24gaXMgZ2VuZXJhdGVkIGluIHRoaXMgaXRlcmF0aW9uXG4gKiBAcGFyYW0gdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgSWYgdGhlIG9ubHkgZmllbGQgd2l0aGluIGEgZm9ybSBjb250YWluZXIgaXMgYSB0ZXh0LWFyZWEgZmllbGQsIHRoZSBsYWJlbCBpcyBoaWRkZW5cbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9ucyhcblx0ZmFjZXRDb2xsZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhbixcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Ly8gRmlyc3Qgd2UgZGV0ZXJtaW5lIHdoaWNoIHN1YiBzZWN0aW9uIHdlIG5lZWQgdG8gY3JlYXRlXG5cdGNvbnN0IGZhY2V0c1RvQ3JlYXRlID0gZmFjZXRDb2xsZWN0aW9uLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEZhY2V0VHlwZXNbXSwgZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdFx0Ly8gVE9ETyBJZiB0aGUgQ29sbGVjdGlvbiBGYWNldCBoYXMgYSBjaGlsZCBvZiB0eXBlIENvbGxlY3Rpb24gRmFjZXQgd2UgYnJpbmcgdGhlbSB1cCBvbmUgbGV2ZWwgKEZvcm0gKyBUYWJsZSB1c2UgY2FzZSkgP1xuXHRcdFx0XHQvLyBmaXJzdCBjYXNlIGZhY2V0IENvbGxlY3Rpb24gaXMgY29tYmluYXRpb24gb2YgY29sbGVjdGlvbiBhbmQgcmVmZXJlbmNlIGZhY2V0IG9yIG5vdCBhbGwgZmFjZXRzIGFyZSByZWZlcmVuY2UgZmFjZXRzLlxuXHRcdFx0XHRpZiAoZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maW5kKChmYWNldFR5cGUpID0+IGZhY2V0VHlwZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSkge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnNwbGljZShmYWNldHNUb0NyZWF0ZS5sZW5ndGgsIDAsIC4uLmZhY2V0RGVmaW5pdGlvbi5GYWNldHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHRcdC8vIE5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdC8vIFRoZW4gd2UgY3JlYXRlIHRoZSBhY3R1YWwgc3Vic2VjdGlvbnNcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlLm1hcCgoZmFjZXQpID0+XG5cdFx0Y3JlYXRlU3ViU2VjdGlvbihcblx0XHRcdGZhY2V0LFxuXHRcdFx0ZmFjZXRzVG9DcmVhdGUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0MCxcblx0XHRcdCEoZmFjZXQgYXMgQ29sbGVjdGlvbkZhY2V0KT8uRmFjZXRzPy5sZW5ndGgsXG5cdFx0XHRpc0hlYWRlclNlY3Rpb24sXG5cdFx0XHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlc1xuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHN1YnNlY3Rpb25zIGJhc2VkIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKClcblx0KTtcblx0Y29uc3QgYUN1c3RvbUhlYWRlckZhY2V0czogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0T2JqZWN0LmtleXMoY3VzdG9tSGVhZGVyRmFjZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRhQ3VzdG9tSGVhZGVyRmFjZXRzLnB1c2goY3VzdG9tSGVhZGVyRmFjZXRzW2tleV0pO1xuXHRcdHJldHVybiBhQ3VzdG9tSGVhZGVyRmFjZXRzO1xuXHR9KTtcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBhQ3VzdG9tSGVhZGVyRmFjZXRzLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldFtdLCBjdXN0b21IZWFkZXJGYWNldCkgPT4ge1xuXHRcdGlmIChjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQpIHtcblx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goY3VzdG9tSGVhZGVyRmFjZXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZXRzVG9DcmVhdGU7XG5cdH0sIFtdKTtcblxuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKChjdXN0b21IZWFkZXJGYWNldCkgPT4gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN1YnNlY3Rpb24gYmFzZWQgb24gYSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICogQHBhcmFtIGN1c3RvbUhlYWRlckZhY2V0IEEgY3VzdG9tIGhlYWRlciBmYWNldFxuICogQHJldHVybnMgQSBkZWZpbml0aW9uIGZvciBhIHN1YnNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0OiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldEN1c3RvbVN1YlNlY3Rpb25JRChjdXN0b21IZWFkZXJGYWNldC5rZXkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGN1c3RvbUhlYWRlckZhY2V0LmtleSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXQudGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQsXG5cdFx0dGVtcGxhdGU6IGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCB8fCBcIlwiLFxuXHRcdHZpc2libGU6IGN1c3RvbUhlYWRlckZhY2V0LnZpc2libGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRzdGFzaGVkOiBjdXN0b21IZWFkZXJGYWNldC5zdGFzaGVkLFxuXHRcdGZsZXhTZXR0aW5nczogY3VzdG9tSGVhZGVyRmFjZXQuZmxleFNldHRpbmdzLFxuXHRcdGFjdGlvbnM6IHt9LFxuXHRcdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogZmFsc2Vcblx0fTtcblx0cmV0dXJuIHN1YlNlY3Rpb247XG59XG5cbmNvbnN0IGdldFN1YlNlY3Rpb25LZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG59O1xuLyoqXG4gKiBBZGRzIEZvcm0gbWVudSBhY3Rpb24gdG8gYWxsIGZvcm0gYWN0aW9ucywgcmVtb3ZlcyBkdXBsaWNhdGUgYWN0aW9ucyBhbmQgaGlkZGVuIGFjdGlvbnMuXG4gKiBAcGFyYW0gYWN0aW9ucyBUaGUgYWN0aW9ucyBpbnZvbHZlZFxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBmb3IgdGhlIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBmb3JtIG1lbnUgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBhZGRGb3JtTWVudUFjdGlvbnMoXG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXSxcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IENvbWJpbmVkQWN0aW9uIHtcblx0Ly8gYW5ub3RhdGlvbiBhY3Rpb25zIHBvc3NpYmx5IGhhcyBDdXN0b21BY3Rpb25zLCB3aGljaCBhcmUgYWRkZWQgYXQgU3Vic2VjdGlvbi50cyNjcmVhdGVGb3JtQWN0aW9uUmVkdWNlclxuXHQvLyB0aG9zZSBhY3Rpb24gYXJlIGluY29ycmVjdCBhbmQgY2F1c2UgdW53YW50ZWQgcmVzdWx0cywgc28gd2UgbmVlZCB0byBjYXJlZnVsbHkgcmVtb3ZlIGluY29ycmVjdCBvbmVzIGhlcmVcblx0Zm9yIChsZXQgcmV2ZXJzZUluZGV4ID0gYWN0aW9ucy5sZW5ndGggLSAxOyByZXZlcnNlSW5kZXggPj0gMDsgcmV2ZXJzZUluZGV4LS0pIHtcblx0XHRpZiAoXG5cdFx0XHRhY3Rpb25zW3JldmVyc2VJbmRleF0uaWQ/LnN0YXJ0c1dpdGgoXCJDdXN0b21BY3Rpb246OlwiKSAmJlxuXHRcdFx0KGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5rZXkuc3RhcnRzV2l0aChcIkRhdGFGaWVsZEZvckFjdGlvbjo6XCIpIHx8XG5cdFx0XHRcdGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5rZXkuc3RhcnRzV2l0aChcIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjo6XCIpKVxuXHRcdCkge1xuXHRcdFx0YWN0aW9ucy5zcGxpY2UocmV2ZXJzZUluZGV4LCAxKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgaGlkZGVuQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0Rm9ybUhpZGRlbkFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSB8fCBbXSxcblx0XHRhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0bWVudTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHRcdH0sXG5cdFx0Zm9ybUFjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj4gPSBnZXRGb3JtQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIDEuIEdldCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMgLT4gYWN0aW9ucyBhcmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kXG5cdFx0Ly8gMi4gR2V0IGFjdGlvbnMgZnJvbSBtYW5pZmVzdFxuXHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoZm9ybUFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaWRkZW5BY3Rpb25zKSxcblx0XHQvLyAzLiBHZXQgYWxsIGFubm90YXRpb24gbWVudSBpdGVtc1xuXHRcdGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMgPSBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFjdGlvbnMpLFxuXHRcdC8vIDQuIEZpbmQgbWFuaWZlc3QgYWN0aW9ucyB3aGljaCBvdmVycmlkZSBhbnkgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdFx0bWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMgPSBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKSxcblx0XHQvLyA1LiBHZXQgb3ZlcnJpZGRlbiBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0XHRvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0YW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyxcblx0XHRcdG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zLFxuXHRcdFx0YWN0aW9uT3ZlcndyaXRlQ29uZmlnXG5cdFx0KSBhcyBDdXN0b21BY3Rpb25bXTtcblx0Ly8gSWYgdGhlcmUgaXMgYSBtYW5pZmVzdCBhY3Rpb24gZGVmaW5lZCBmb3IgYSBuZWlnaGJvdXJpbmcgcmVmZXJlbmNlIGZhY2V0LCBpdCB3b3VsZCBub3QgYmUgcGFydCBvZiBtYW5pZmVzdCBhY3Rpb25zIGhlcmVcblx0Ly8gSW4gdGhpcyBmb3ItbG9vcCwgZW5zdXJpbmcgYSBwdXJlIG1hbmlmZXN0IGFjdGlvbiBjb21pbmcgZnJvbSBhbm90aGVyIHJlZmVyZW5jZSBmYWNldCBpcyBub3QgbG9zdFxuXHRmb3IgKGxldCByZXZlcnNlSW5kZXggPSBhY3Rpb25zLmxlbmd0aCAtIDE7IHJldmVyc2VJbmRleCA+PSAwOyByZXZlcnNlSW5kZXgtLSkge1xuXHRcdGlmIChhY3Rpb25zW3JldmVyc2VJbmRleF0uaWQ/LnN0YXJ0c1dpdGgoXCJDdXN0b21BY3Rpb246OlwiKSkge1xuXHRcdFx0Zm9yIChjb25zdCBtYW5pZmVzdEFjdGlvbiBpbiBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykge1xuXHRcdFx0XHRpZiAobWFuaWZlc3RBY3Rpb24gPT09IGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5rZXkpIHtcblx0XHRcdFx0XHRhY3Rpb25zLnNwbGljZShyZXZlcnNlSW5kZXgsIDEpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIDYuIE92ZXJyaWRlIGFsbCBhY3Rpb25zXG5cdGxldCBmb3JtQWxsQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpIGFzIEN1c3RvbUFjdGlvbltdO1xuXHQvLyA3LiBSZXBsYWNlIG9yaWdpbmFsIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIG92ZXJyaWRkZW4gbWVudSBpdGVtc1xuXHRwcmVwYXJlTWVudUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMsIG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zKTtcblx0Ly8gOC4gUmVtb3ZlIGR1cGxpY2F0ZSBhY3Rpb25zIHdoaWNoIGFyZSBtZW51IGl0ZW1zXG5cdGZvcm1BbGxBY3Rpb25zID0gcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyhmb3JtQWxsQWN0aW9ucyk7XG5cdC8vIDkuIEhpZGUgbWVudXMgd2hlcmUgYWxsIG1lbnUgaXRlbXMgYXJlIGhpZGRlblxuXHRmb3JtQWxsQWN0aW9ucyA9IGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpO1xuXHQvLyAxMC4gKE9ubHkgZm9yIHRoaXMgc3Vic2VjdGlvbiBVSSBhcmVhKSBkZWZhdWx0QWN0aW9uIG9mIGEgbWVudSBtdXN0IGJlIG9mIHR5cGUgQWN0aW9uVHlwZS5EZWZhdWx0XG5cdGZvcm1BbGxBY3Rpb25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5NZW51ICYmICEhYWN0aW9uLmRlZmF1bHRBY3Rpb24pIHtcblx0XHRcdChhY3Rpb24uZGVmYXVsdEFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLnR5cGUgPSBBY3Rpb25UeXBlLkRlZmF1bHQ7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbnM6IGZvcm1BbGxBY3Rpb25zID8/IGFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0aW9uIGZvcm0gYSBmYWNldC5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBmYWNldCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldEZhY2V0QWN0aW9ucyhmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IENvbWJpbmVkQWN0aW9uIHtcblx0bGV0IGFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IChcblx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maWx0ZXIoKHN1YkZhY2V0RGVmaW5pdGlvbikgPT4gaXNSZWZlcmVuY2VGYWNldChzdWJGYWNldERlZmluaXRpb24pKSBhcyBSZWZlcmVuY2VGYWNldFR5cGVzW11cblx0XHRcdCkucmVkdWNlKFxuXHRcdFx0XHQoYWN0aW9uUmVkdWNlcjogQmFzZUFjdGlvbltdLCByZWZlcmVuY2VGYWNldCkgPT4gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoYWN0aW9uUmVkdWNlciwgcmVmZXJlbmNlRmFjZXQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRbXVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoW10sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBidXR0b24gdHlwZSBiYXNlZCBvbiBAVUkuRW1waGFzaXplZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIGVtcGhhc2l6ZWQgRW1waGFzaXplZCBhbm5vdGF0aW9uIHZhbHVlLlxuICogQHJldHVybnMgVGhlIGJ1dHRvbiB0eXBlIG9yIHBhdGggYmFzZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0QnV0dG9uVHlwZShlbXBoYXNpemVkOiBFbXBoYXNpemVkIHwgdW5kZWZpbmVkKTogQnV0dG9uVHlwZSB7XG5cdC8vIEVtcGhhc2l6ZWQgaXMgYSBib29sZWFuIHNvIGlmIGl0J3MgZXF1YWwgdG8gdHJ1ZSB3ZSBzaG93IHRoZSBidXR0b24gYXMgR2hvc3QsIG90aGVyd2lzZSBhcyBUcmFuc3BhcmVudFxuXHRjb25zdCBidXR0b25UeXBlQ29uZGl0aW9uID0gZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVtcGhhc2l6ZWQpLCB0cnVlKTtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShidXR0b25UeXBlQ29uZGl0aW9uLCBCdXR0b25UeXBlLkdob3N0LCBCdXR0b25UeXBlLlRyYW5zcGFyZW50KSkgYXMgQnV0dG9uVHlwZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIEZhY2V0VHlwZXMuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbGV2ZWxcbiAqIEBwYXJhbSBoYXNTaW5nbGVDb250ZW50XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uXG4gKiBAcGFyYW0gdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgSWYgdGhlIG9ubHkgZmllbGQgd2l0aGluIGEgZm9ybSBjb250YWluZXIgaXMgYSB0ZXh0LWFyZWEgZmllbGQsIHRoZSBsYWJlbCBpcyBoaWRkZW5cbiAqIEByZXR1cm5zIEEgc3Vic2VjdGlvbiBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9uKFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bGV2ZWw6IG51bWJlcixcblx0aGFzU2luZ2xlQ29udGVudDogYm9vbGVhbixcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhbixcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldFN1YlNlY3Rpb25JRChmYWNldERlZmluaXRpb24pO1xuXHRjb25zdCBoaWRkZW5Bbm5vdGF0aW9uID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHRjb25zdCBpc1Zpc2libGVFeHByZXNzaW9uID0gbm90KFxuXHRcdGVxdWFsKFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihoaWRkZW5Bbm5vdGF0aW9uLCBbXSwgZmFsc2UsIChwYXRoOiBzdHJpbmcpID0+XG5cdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xuXHRjb25zdCBpc1Zpc2liaWxpdHlEeW5hbWljID0gIWlzQ29uc3RhbnQoaXNWaXNpYmxlRXhwcmVzc2lvbikgJiYgIWlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGhpZGRlbkFubm90YXRpb24pO1xuXHRjb25zdCB0aXRsZSA9IGZhY2V0RGVmaW5pdGlvbi5MYWJlbCAhPT0gdW5kZWZpbmVkID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbi5MYWJlbCkpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBCYXNlU3ViU2VjdGlvbiA9IHtcblx0XHRpZDogc3ViU2VjdGlvbklELFxuXHRcdGtleTogZ2V0U3ViU2VjdGlvbktleShmYWNldERlZmluaXRpb24sIHN1YlNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGVFeHByZXNzaW9uKSxcblx0XHRpc1Zpc2liaWxpdHlEeW5hbWljOiBpc1Zpc2liaWxpdHlEeW5hbWljLFxuXHRcdGxldmVsOiBsZXZlbCxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkLFxuXHRcdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRFbmFibGVMYXp5TG9hZGluZygpXG5cdH07XG5cdGlmIChpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRzdWJTZWN0aW9uLnN0YXNoZWQgPSBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0c3ViU2VjdGlvbi5mbGV4U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0bGV0IHVuc3VwcG9ydGVkVGV4dCA9IFwiXCI7XG5cdGxldmVsKys7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRjb25zdCBmYWNldHMgPSBmYWNldERlZmluaXRpb24uRmFjZXRzO1xuXG5cdFx0XHQvLyBGaWx0ZXIgZm9yIGFsbCBmYWNldHMgb2YgdGhpcyBzdWJzZWN0aW9uIHRoYXQgYXJlIHJlZmVycmluZyB0byBhbiBhbm5vdGF0aW9uIGRlc2NyaWJpbmcgYSB2aXN1YWxpemF0aW9uIChlLmcuIHRhYmxlIG9yIGNoYXJ0KVxuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbkZhY2V0cyA9IGZhY2V0c1xuXHRcdFx0XHQubWFwKChmYWNldCwgaW5kZXgpID0+ICh7IGluZGV4LCBmYWNldCB9KSkgLy8gUmVtZW1iZXIgdGhlIGluZGV4IGFzc2lnbmVkIHRvIGVhY2ggZmFjZXRcblx0XHRcdFx0LmZpbHRlcigoeyBmYWNldCB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGlzUmVmZXJlbmNlRmFjZXQoZmFjZXQpICYmIGZhY2V0LlRhcmdldC4kdGFyZ2V0ICYmIHZpc3VhbGl6YXRpb25UZXJtcy5pbmNsdWRlcyhmYWNldC5UYXJnZXQuJHRhcmdldC50ZXJtKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgYWxsIHZpc3VhbGl6YXRpb24gZmFjZXRzOyBcInZpc3VhbGl6YXRpb25GYWNldHNcIiBhbmQgXCJub25WaXN1YWxpemF0aW9uRmFjZXRzXCIgYXJlIGRpc2pvaW50XG5cdFx0XHRjb25zdCBub25WaXN1YWxpemF0aW9uRmFjZXRzID0gZmFjZXRzLmZpbHRlcihcblx0XHRcdFx0KGZhY2V0KSA9PiAhdmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh2aXN1YWxpemF0aW9uKSA9PiB2aXN1YWxpemF0aW9uLmZhY2V0ID09PSBmYWNldClcblx0XHRcdCk7XG5cblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRmFjZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gQ29sbGVjdGlvbkZhY2V0cyB3aXRoIHZpc3VhbGl6YXRpb25zIG11c3QgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGFzIHRoZXkgY2Fubm90IGJlIGluY2x1ZGVkIGluIGZvcm1zXG5cdFx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IGZvcm1Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IG1peGVkQ29udGVudDogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXG5cdFx0XHRcdC8vIENyZWF0ZSBlYWNoIHZpc3VhbGl6YXRpb24gZmFjZXQgYXMgaWYgaXQgd2FzIGl0cyBvd24gc3Vic2VjdGlvbiAodmlhIHJlY3Vyc2lvbiksIGFuZCBrZWVwIHRoZWlyIHJlbGF0aXZlIG9yZGVyaW5nXG5cdFx0XHRcdGZvciAoY29uc3QgeyBmYWNldCB9IG9mIHZpc3VhbGl6YXRpb25GYWNldHMpIHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uQ29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgdHJ1ZSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobm9uVmlzdWFsaXphdGlvbkZhY2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly8gVGhpcyBzdWJzZWN0aW9uIGluY2x1ZGVzIHZpc3VhbGl6YXRpb25zIGFuZCBvdGhlciBjb250ZW50LCBzbyBpdCBpcyBhIFwiTWl4ZWRcIiBzdWJzZWN0aW9uXG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRgV2FybmluZzogQ29sbGVjdGlvbkZhY2V0ICcke2ZhY2V0RGVmaW5pdGlvbi5JRH0nIGluY2x1ZGVzIGEgY29tYmluYXRpb24gb2YgZWl0aGVyIGEgY2hhcnQgb3IgYSB0YWJsZSBhbmQgb3RoZXIgY29udGVudC4gVGhpcyBjYW4gbGVhZCB0byByZW5kZXJpbmcgaXNzdWVzLiBDb25zaWRlciBtb3ZpbmcgdGhlIGNoYXJ0IG9yIHRhYmxlIGludG8gYSBzZXBhcmF0ZSBDb2xsZWN0aW9uRmFjZXQuYFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRjb25zdCBmYWtlRm9ybUZhY2V0ID0geyAuLi5mYWNldERlZmluaXRpb24gfTtcblx0XHRcdFx0XHRmYWtlRm9ybUZhY2V0LkZhY2V0cyA9IG5vblZpc3VhbGl6YXRpb25GYWNldHM7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgam9pbmVkIGZvcm0gb2YgYWxsIGZhY2V0cyB0aGF0IGFyZSBub3QgcmVmZXJyaW5nIHRvIHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdFx0Zm9ybUNvbnRlbnQucHVzaChjcmVhdGVTdWJTZWN0aW9uKGZha2VGb3JtRmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNZXJnZSB0aGUgdmlzdWFsaXphdGlvbiBjb250ZW50IHdpdGggdGhlIGZvcm0gY29udGVudFxuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh7IGluZGV4IH0pID0+IGluZGV4ID09PSAwKSkge1xuXHRcdFx0XHRcdC8vIElmIHRoZSBmaXJzdCBmYWNldCBpcyBhIHZpc3VhbGl6YXRpb24sIGRpc3BsYXkgdGhlIHZpc3VhbGl6YXRpb25zIGZpcnN0XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHRcdG1peGVkQ29udGVudC5wdXNoKC4uLmZvcm1Db250ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGRpc3BsYXkgdGhlIGZvcm0gZmlyc3Rcblx0XHRcdFx0XHRtaXhlZENvbnRlbnQucHVzaCguLi5mb3JtQ29udGVudCk7XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgbWl4ZWRTdWJTZWN0aW9uOiBNaXhlZFN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5NaXhlZCxcblx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0Y29udGVudDogbWl4ZWRDb250ZW50XG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBtaXhlZFN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUaGlzIENvbGxlY3Rpb25GYWNldCBvbmx5IGluY2x1ZGVzIGNvbnRlbnQgdGhhdCBjYW4gYmUgcmVuZGVyZWQgaW4gYSBtZXJnZWQgZm9ybVxuXHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oXG5cdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlRXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGZhY2V0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHR7IHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIH1cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRhY3Rpb25zOiBmYWNldEFjdGlvbnMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdGNvbW1hbmRBY3Rpb25zOiBmYWNldEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gZm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uO1xuXHRcdFx0fVxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRpZiAoIWZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldCkge1xuXHRcdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBgVW5hYmxlIHRvIGZpbmQgYW5ub3RhdGlvblBhdGggJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0XHRjb25zdCBwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSwgY29udmVydGVyQ29udGV4dCwge1xuXHRcdFx0XHRcdFx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdFx0XHRcdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0ZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkOiBpc0hlYWRlclNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nID0gc3ViU2VjdGlvbi50aXRsZSA/IHN1YlNlY3Rpb24udGl0bGUgOiBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFRpdGxlID1cblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pPy5hbm5vdGF0aW9uPy50aXRsZSB8fFxuXHRcdFx0XHRcdFx0XHQocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIENoYXJ0VmlzdWFsaXphdGlvbik/LnRpdGxlO1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNQYXJ0T2ZQcmV2aWV3ID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldz8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0XHRcdGNvbnN0IHNob3dTdWJTZWN0aW9uVGl0bGUgPSBnZXRTaG93U3ViU2VjdGlvblRpdGxlKGNvbnRyb2xUaXRsZSA/PyBcIlwiLCBzdWJTZWN0aW9uVGl0bGUsIGhhc1NpbmdsZUNvbnRlbnQpO1xuXG5cdFx0XHRcdFx0XHQvLyBFaXRoZXIgY2FsY3VsYXRlIHRoZSB0aXRsZSB2aXNpYmlsaXR5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHlcblx0XHRcdFx0XHRcdC8vIEFkZGl0aW9uYWxseSB0byBjaGVja2luZyB3aGV0aGVyIGEgdGl0bGUgZXhpc3RzLFxuXHRcdFx0XHRcdFx0Ly8gd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIGZhY2V0IHRpdGxlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY29udHJvbCAoaS5lLiB2aXN1YWxpemF0aW9uKSB0aXRsZTtcblx0XHRcdFx0XHRcdC8vIHRoaXMgaXMgZG9uZSBieSBpbmNsdWRpbmcgXCJzaG93U3ViU2VjdGlvblRpdGxlXCIgaW4gdGhlIGFuZCBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSA9IGlmRWxzZShcblx0XHRcdFx0XHRcdFx0aXNWaXNpYmlsaXR5RHluYW1pYyxcblx0XHRcdFx0XHRcdFx0YW5kKGlzVmlzaWJsZUV4cHJlc3Npb24sIG5vdChlcXVhbCh0aXRsZSwgXCJ1bmRlZmluZWRcIikpLCBzaG93U3ViU2VjdGlvblRpdGxlKSxcblx0XHRcdFx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cHJlc3Npb24pICE9PSB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUgIT09IFwidW5kZWZpbmVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUgIT09IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRpc1Zpc2libGVFeHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNob3dTdWJTZWN0aW9uVGl0bGVcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbjogcHJlc2VudGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRpc1BhcnRPZlByZXZpZXcsXG5cdFx0XHRcdFx0XHRcdHNob3dTdWJTZWN0aW9uVGl0bGU6IGNvbXBpbGVFeHByZXNzaW9uKHNob3dTdWJTZWN0aW9uVGl0bGUpLCAvLyBUaGlzIGlzIHVzZWQgb24gdGhlIE9iamVjdFBhZ2VTdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSkgLy8gVGhpcyBpcyB1c2VkIHRvIGhpZGUgdGhlIFRpdGxlIGNvbnRyb2wgYWJvdmUgZGF0YSB2aXN1YWxpemF0aW9uc1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRcdFx0XHQvLyBBbGwgdGhvc2UgZWxlbWVudCBiZWxvbmcgdG8gYSBmcm9tIGZhY2V0XG5cdFx0XHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRTdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRcdGZhY2V0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdFx0eyB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyB9XG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25zOiBmYWNldEFjdGlvbnMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdFx0XHRjb21tYW5kQWN0aW9uczogZmFjZXRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybUVsZW1lbnRTdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5Ob3RlOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTm90ZXNcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBGb3IgJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybX0gRnJhZ21lbnRgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBcIkZvciBSZWZlcmVuY2UgVVJMIEZhY2V0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0Ly8gSWYgd2UgcmVhY2ggaGVyZSB3ZSBlbmRlZCB1cCB3aXRoIGFuIHVuc3VwcG9ydGVkIFN1YlNlY3Rpb24gdHlwZVxuXHRjb25zdCB1bnN1cHBvcnRlZFN1YlNlY3Rpb246IFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IHtcblx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0dGV4dDogdW5zdXBwb3J0ZWRUZXh0XG5cdH07XG5cdHJldHVybiB1bnN1cHBvcnRlZFN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdG8gaGlkZSBvciBzaG93IHRoZSBzdWJzZWN0aW9uIHRpdGxlLlxuICogQHBhcmFtIGNvbnRyb2xUaXRsZVxuICogQHBhcmFtIHN1YlNlY3Rpb25UaXRsZVxuICogQHBhcmFtIGhhc1NpbmdsZUNvbnRlbnRcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgb3IgZXhwcmVzc2lvbiBmb3Igc2hvd1N1YlNlY3Rpb25UaXRsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hvd1N1YlNlY3Rpb25UaXRsZShcblx0Y29udHJvbFRpdGxlOiBzdHJpbmcsXG5cdHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyB2aXNpYmxlIHNoYWxsIGJlIHRydWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbnRlbnQgb3IgaWYgdGhlIGNvbnRyb2wgYW5kIHN1YnNlY3Rpb24gdGl0bGUgYXJlIGRpZmZlcmVudFxuXHRyZXR1cm4gb3Iobm90KGhhc1NpbmdsZUNvbnRlbnQpLCBub3RFcXVhbChyZXNvbHZlQmluZGluZ1N0cmluZyhjb250cm9sVGl0bGUpLCByZXNvbHZlQmluZGluZ1N0cmluZyhzdWJTZWN0aW9uVGl0bGUpKSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFxuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCByZWZlcmVuY2VUYXJnZXQgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZTtcblx0bGV0IG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgZGF0YUZpZWxkQ29sbGVjdGlvbjogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdID0gW107XG5cdGxldCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXSA9IHRhcmdldFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChyZWZlcmVuY2VUYXJnZXQpIHtcblx0XHRzd2l0Y2ggKHJlZmVyZW5jZVRhcmdldC50ZXJtKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSAocmVmZXJlbmNlVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24+KHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucyBhc1xuXHRcdFx0XHRcdFx0fCBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj5cblx0XHRcdFx0XHRcdHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHQpLmFjdGlvbnM7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU3RhdHVzSW5mbzpcblx0XHRcdFx0aWYgKHJlZmVyZW5jZVRhcmdldC5xdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gcmVmZXJlbmNlVGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGFjdGlvbnMgPSBkYXRhRmllbGRDb2xsZWN0aW9uLnJlZHVjZSgoYWN0aW9uUmVkdWNlciwgZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLlJFUVVJUkVTQ09OVEVYVCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uSU5MSU5FKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLkRFVEVSTUlOSU5HKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRcdGlmIChkYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhkYXRhRmllbGQuTWFwcGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFjdGlvblJlZHVjZXIucHVzaCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdGlkOiBnZXRGb3JtSUQoZmFjZXREZWZpbml0aW9uLCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogXCJcIixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSksIHRydWUpKVxuXHRcdFx0XHRcdFx0XHRcdDogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogY29tcGlsZUV4cHJlc3Npb24oe1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5BY3Rpb24pXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRcdGNvbnN0IGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uID1cblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdFx0YWN0aW9uUmVkdWNlci5wdXNoKFxuXHRcdFx0XHRcdFx0Z2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRcdFx0XHRhY3Rpb25SZWR1Y2VyLnB1c2goe1xuXHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5NZW51LFxuXHRcdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRcdGlzQUlPcGVyYXRpb246IGlzTWVudUFJT3BlcmF0aW9uKGRhdGFGaWVsZC5BY3Rpb25zKSA9PT0gdHJ1ZSB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRtZW51OiBkYXRhRmllbGQuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24gPVxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0XHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHJldHVybiBhY3Rpb25SZWR1Y2VyO1xuXHRcdH0sIGFjdGlvbnMpO1xuXHR9XG5cblx0Ly8gbm8gb3ZlcnJpZGVzIGhlcmUsIHRoZXkgYXJlIGRvbmUgaW4gYSBsYXRlciBzdGVwIGluIGFkZEZvcm1NZW51QWN0aW9uc1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj4gfCB1bmRlZmluZWQsXG5cdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg/OiBzdHJpbmdcbik6IEFubm90YXRpb25BY3Rpb24ge1xuXHRjb25zdCBrZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24sIGRhdGFGaWVsZCksXG5cdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdGJpbmRpbmc6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggJiYgIWRhdGFGaWVsZC5JbmxpbmUgPyBgeyAncGF0aCcgOiAnJHtuYXZpZ2F0aW9uUHJvcGVydHlQYXRofSd9YCA6IHVuZGVmaW5lZCwgLy8gSW5saW5lIEFjdGlvbnMgZG9uJ3QgbmVlZCB0aGUgYmluZGluZyBhcyB0aGV5IGFyZSBpbnNpZGUgdGhlIEZvcm1cblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0cmVxdWlyZXNEaWFsb2c6IGlzQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGQpLFxuXHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uRW1waGFzaXplZCksXG5cdFx0aXNBSU9wZXJhdGlvbjogaXNBY3Rpb25BSU9wZXJhdGlvbihkYXRhRmllbGQpID09PSB0cnVlIHx8IHVuZGVmaW5lZCxcblx0XHRwcmVzczogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRmbihcblx0XHRcdFx0XCJpbnZva2VBY3Rpb25cIixcblx0XHRcdFx0W1xuXHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29udGV4dHM6IGZuKFwiZ2V0QmluZGluZ0NvbnRleHRcIiwgW10sIHBhdGhJbk1vZGVsKFwiXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IChkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0OiBcIklzb2xhdGVkXCIpIGFzIE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRtb2RlbDogZm4oXCJnZXRNb2RlbFwiLCBbXSwgcGF0aEluTW9kZWwoXCIvXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogaXNBY3Rpb25OYXZpZ2FibGUoZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24gJiYgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb25ba2V5XSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdHJlZihcIi5lZGl0Rmxvd1wiKVxuXHRcdFx0KVxuXHRcdCksXG5cdFx0ZmFjZXROYW1lOiBkYXRhRmllbGQuSW5saW5lID8gZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA6IHVuZGVmaW5lZFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2coYWN0aW9uRGVmaW5pdGlvbjogQWN0aW9uIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0aWYgKGFjdGlvbkRlZmluaXRpb24pIHtcblx0XHRjb25zdCBiQ3JpdGljYWwgPSBhY3Rpb25EZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LklzQWN0aW9uQ3JpdGljYWw7XG5cdFx0aWYgKGFjdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycy5sZW5ndGggPiAxIHx8IGJDcml0aWNhbCkge1xuXHRcdFx0cmV0dXJuIFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIk5vbmVcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyhcblx0bWFuaWZlc3RTdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RTdWJTZWN0aW9uPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4ge1xuXHRjb25zdCBzdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U3ViU2VjdGlvbnMpLmZvckVhY2goXG5cdFx0KHN1YlNlY3Rpb25LZXkpID0+XG5cdFx0XHQoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0gPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKG1hbmlmZXN0U3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0sIHN1YlNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xuXHRyZXR1cm4gc3ViU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb246IE1hbmlmZXN0U3ViU2VjdGlvbixcblx0c3ViU2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc2lkZUNvbnRlbnQ6IFNpZGVDb250ZW50RGVmIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50XG5cdFx0PyB7XG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnQudGVtcGxhdGUsXG5cdFx0XHRcdGlkOiBnZXRTaWRlQ29udGVudElEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0ZXF1YWxTcGxpdDogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LmVxdWFsU3BsaXRcblx0XHQgIH1cblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHBvc2l0aW9uID0gbWFuaWZlc3RTdWJTZWN0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0Y29uc3QgaXNWaXNpYmxlID0gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogdHJ1ZTtcblx0Y29uc3QgaXNEeW5hbWljRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0eXBlb2YgaXNWaXNpYmxlID09PSBcInN0cmluZ1wiICYmIGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgPT09IDA7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RTdWJTZWN0aW9uLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoT2JqZWN0LnZhbHVlcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykpPy5yZWR1Y2UoXG5cdFx0KHByZXZpb3VzQWN0aW9uLCBjdXJyZW50QWN0aW9uKSA9PiAoeyAuLi5wcmV2aW91c0FjdGlvbiwgW2N1cnJlbnRBY3Rpb24ua2V5XTogY3VycmVudEFjdGlvbiB9KSxcblx0XHR7fVxuXHQpO1xuXHRjb25zdCBzdWJTZWN0aW9uRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdGlkOiBtYW5pZmVzdFN1YlNlY3Rpb24uaWQgfHwgZ2V0Q3VzdG9tU3ViU2VjdGlvbklEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdGFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdGtleTogc3ViU2VjdGlvbktleSxcblx0XHR0aXRsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnRpdGxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHR2aXNpYmxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgOiBcInRydWVcIixcblx0XHRzaWRlQ29udGVudDogc2lkZUNvbnRlbnQsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvbixcblx0XHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5lbmFibGVMYXp5TG9hZGluZyA/PyBmYWxzZSxcblx0XHRjb21wb25lbnROYW1lOiBcIlwiLFxuXHRcdHNldHRpbmdzOiBcIlwiLFxuXHRcdGFwcGx5U3RhdGU6IG1hbmlmZXN0U3ViU2VjdGlvbi5hcHBseVN0YXRlLFxuXHRcdHJldHJpZXZlU3RhdGU6IG1hbmlmZXN0U3ViU2VjdGlvbi5yZXRyaWV2ZVN0YXRlXG5cdH07XG5cdGlmIChtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUpIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdFx0KHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIHVua25vd24gYXMgWE1MRnJhZ21lbnRTdWJTZWN0aW9uKS50ZW1wbGF0ZSA9IG1hbmlmZXN0U3ViU2VjdGlvbi50ZW1wbGF0ZSB8fCBtYW5pZmVzdFN1YlNlY3Rpb24ubmFtZSB8fCBcIlwiO1xuXHR9IGVsc2UgaWYgKG1hbmlmZXN0U3ViU2VjdGlvbi5lbWJlZGRlZENvbXBvbmVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLkVtYmVkZGVkQ29tcG9uZW50O1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLmNvbXBvbmVudE5hbWUgPSBtYW5pZmVzdFN1YlNlY3Rpb24uZW1iZWRkZWRDb21wb25lbnQubmFtZTtcblx0XHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50LnNldHRpbmdzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnNldHRpbmdzID0gSlNPTi5zdHJpbmdpZnkobWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50LnNldHRpbmdzKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHR9XG5cdHJldHVybiBzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgY29uZGVuc2VkIG1vZGUgY2FuIGJlIGFwcGxpZWQgb24gdGhlIHRhYmxlLlxuICogQHBhcmFtIGN1cnJlbnRGYWNldFxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgYHRydWVgIGZvciBjb21wbGlhbnQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKCkpIHtcblx0XHQvLyBJZiB0aGUgT1AgdXNlIHRoZSB0YWIgYmFzZWQgd2UgY2hlY2sgaWYgdGhlIGZhY2V0cyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBzZWN0aW9uIGFyZSBhbGwgbm9uIHZpc2libGVcblx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0aWYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCAmJiBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggPiAxKSB7XG5cdFx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0OiBGYWNldFR5cGVzLCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbi5ldmVyeShmdW5jdGlvbiAoc3ViRmFjZXQpIHtcblx0XHRpZiAoc3ViRmFjZXQgIT09IGN1cnJlbnRGYWNldCkge1xuXHRcdFx0aWYgKHN1YkZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRjb25zdCByZWZGYWNldCA9IHN1YkZhY2V0O1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldC4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHN1YkNvbGxlY3Rpb25GYWNldCA9IHN1YkZhY2V0IGFzIENvbGxlY3Rpb25GYWNldFR5cGVzO1xuXHRcdFx0XHRyZXR1cm4gc3ViQ29sbGVjdGlvbkZhY2V0LkZhY2V0cy5ldmVyeShmdW5jdGlvbiAoZmFjZXQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJSZWZGYWNldCA9IGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BK0VZQSxjQUFjLDBCQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFDSjtJQURWQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FB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
|
|
691
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdWJTZWN0aW9uVHlwZSIsIl9leHBvcnRzIiwidmlzdWFsaXphdGlvblRlcm1zIiwiY3JlYXRlU3ViU2VjdGlvbnMiLCJmYWNldENvbGxlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiaXNIZWFkZXJTZWN0aW9uIiwidXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMiLCJmYWNldHNUb0NyZWF0ZSIsInJlZHVjZSIsImZhY2V0RGVmaW5pdGlvbiIsIiRUeXBlIiwicHVzaCIsIkZhY2V0cyIsImZpbmQiLCJmYWNldFR5cGUiLCJzcGxpY2UiLCJsZW5ndGgiLCJtYXAiLCJmYWNldCIsImNyZWF0ZVN1YlNlY3Rpb24iLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRzIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0SGVhZGVyRmFjZXRzIiwiYUN1c3RvbUhlYWRlckZhY2V0cyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiY3VzdG9tSGVhZGVyRmFjZXQiLCJ0ZW1wbGF0ZUVkaXQiLCJjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb24iLCJzdWJTZWN0aW9uSUQiLCJnZXRDdXN0b21TdWJTZWN0aW9uSUQiLCJzdWJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsInR5cGUiLCJYTUxGcmFnbWVudCIsInRlbXBsYXRlIiwidmlzaWJsZSIsImxldmVsIiwic2lkZUNvbnRlbnQiLCJ1bmRlZmluZWQiLCJzdGFzaGVkIiwiZmxleFNldHRpbmdzIiwiYWN0aW9ucyIsIm9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZCIsImdldFN1YlNlY3Rpb25LZXkiLCJmYWxsYmFjayIsIklEIiwidG9TdHJpbmciLCJMYWJlbCIsImFkZEZvcm1NZW51QWN0aW9ucyIsInJldmVyc2VJbmRleCIsInN0YXJ0c1dpdGgiLCJoaWRkZW5BY3Rpb25zIiwiZ2V0Rm9ybUhpZGRlbkFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiY29tbWFuZCIsInBvc2l0aW9uIiwibWVudSIsImZvcm1BY3Rpb25zIiwiZ2V0Rm9ybUFjdGlvbnMiLCJtYW5pZmVzdEFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsImdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMiLCJtYXRjaGluZ01hbmlmZXN0QWN0aW9ucyIsImdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24iLCJvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwibWFuaWZlc3RBY3Rpb24iLCJmb3JtQWxsQWN0aW9ucyIsInByZXBhcmVNZW51QWN0aW9ucyIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zIiwiYWN0aW9uIiwiQWN0aW9uVHlwZSIsIk1lbnUiLCJkZWZhdWx0QWN0aW9uIiwiRGVmYXVsdCIsImNvbW1hbmRBY3Rpb25zIiwiZ2V0RmFjZXRBY3Rpb25zIiwiZmlsdGVyIiwic3ViRmFjZXREZWZpbml0aW9uIiwiaXNSZWZlcmVuY2VGYWNldCIsImFjdGlvblJlZHVjZXIiLCJyZWZlcmVuY2VGYWNldCIsImNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyIiwiZ2V0QnV0dG9uVHlwZSIsImVtcGhhc2l6ZWQiLCJidXR0b25UeXBlQ29uZGl0aW9uIiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkJ1dHRvblR5cGUiLCJHaG9zdCIsIlRyYW5zcGFyZW50IiwiaGFzU2luZ2xlQ29udGVudCIsImdldFN1YlNlY3Rpb25JRCIsImhpZGRlbkFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwiaXNWaXNpYmxlRXhwcmVzc2lvbiIsIm5vdCIsInBhdGgiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImdldENvbnZlcnRlZFR5cGVzIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImlzQ29uc3RhbnQiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIlVua25vd24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJ1bnN1cHBvcnRlZFRleHQiLCJmYWNldHMiLCJ2aXN1YWxpemF0aW9uRmFjZXRzIiwiaW5kZXgiLCJfcmVmIiwiVGFyZ2V0IiwiJHRhcmdldCIsImluY2x1ZGVzIiwidGVybSIsIm5vblZpc3VhbGl6YXRpb25GYWNldHMiLCJ2aXN1YWxpemF0aW9uIiwidmlzdWFsaXphdGlvbkNvbnRlbnQiLCJmb3JtQ29udGVudCIsIm1peGVkQ29udGVudCIsIkxvZyIsIndhcm5pbmciLCJmYWtlRm9ybUZhY2V0IiwiX3JlZjIiLCJtaXhlZFN1YlNlY3Rpb24iLCJNaXhlZCIsImNvbnRlbnQiLCJmYWNldEFjdGlvbnMiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwicHJlc2VudGF0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsImdldENvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW5jZSIsImRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCIsInNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwic3ViU2VjdGlvblRpdGxlIiwiY29udHJvbFRpdGxlIiwidmlzdWFsaXphdGlvbnMiLCJhbm5vdGF0aW9uIiwiaXNQYXJ0T2ZQcmV2aWV3IiwiUGFydE9mUHJldmlldyIsInZhbHVlT2YiLCJzaG93U3ViU2VjdGlvblRpdGxlIiwiZ2V0U2hvd1N1YlNlY3Rpb25UaXRsZSIsImRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlIiwiYW5kIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJmb3JtRWxlbWVudFN1YlNlY3Rpb24iLCJOb3RlcyIsInVuc3VwcG9ydGVkU3ViU2VjdGlvbiIsInRleHQiLCJvciIsIm5vdEVxdWFsIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJyZWZlcmVuY2VUYXJnZXQiLCJ0YXJnZXRWYWx1ZSIsImRhdGFGaWVsZENvbGxlY3Rpb24iLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsIkRhdGEiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwicXVhbGlmaWVyIiwiZGF0YUZpZWxkIiwiUmVxdWlyZXNDb250ZXh0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0Rm9ybUlEIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsImJ1dHRvblR5cGUiLCJFbXBoYXNpemVkIiwicHJlc3MiLCJmbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwiY3VzdG9tRGF0YSIsInNlbWFudGljT2JqZWN0IiwiZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiaXNBSU9wZXJhdGlvbiIsImlzTWVudUFJT3BlcmF0aW9uIiwiQWN0aW9ucyIsImZvcm1NYW5pZmVzdE1lbnVBY3Rpb25zQ29uZmlndXJhdGlvbiIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiQWN0aW9uVGFyZ2V0IiwiYmluZGluZyIsInJlcXVpcmVzRGlhbG9nIiwiaXNBY3Rpb25XaXRoRGlhbG9nIiwiaXNBY3Rpb25BSU9wZXJhdGlvbiIsImNvbnRleHRzIiwicGF0aEluTW9kZWwiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIm1vZGVsIiwiaXNOYXZpZ2FibGUiLCJpc0FjdGlvbk5hdmlnYWJsZSIsInJlZiIsImlzRGlhbG9nIiwiYWN0aW9uRGVmaW5pdGlvbiIsImJDcml0aWNhbCIsIkNvbW1vbiIsIklzQWN0aW9uQ3JpdGljYWwiLCJwYXJhbWV0ZXJzIiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbnMiLCJzdWJTZWN0aW9uS2V5IiwiY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbiIsIm1hbmlmZXN0U3ViU2VjdGlvbiIsImdldFNpZGVDb250ZW50SUQiLCJlcXVhbFNwbGl0IiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc1Zpc2libGUiLCJpc0R5bmFtaWNFeHByZXNzaW9uIiwiaW5kZXhPZiIsInZhbHVlcyIsInByZXZpb3VzQWN0aW9uIiwiY3VycmVudEFjdGlvbiIsInN1YlNlY3Rpb25EZWZpbml0aW9uIiwiZW5hYmxlTGF6eUxvYWRpbmciLCJjb21wb25lbnROYW1lIiwic2V0dGluZ3MiLCJhcHBseVN0YXRlIiwicmV0cmlldmVTdGF0ZSIsIm5hbWUiLCJlbWJlZGRlZENvbXBvbmVudCIsIkVtYmVkZGVkQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIlBsYWNlaG9sZGVyIiwiY3VycmVudEZhY2V0IiwiZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24iLCJtYW5pZmVzdFdyYXBwZXIiLCJ1c2VJY29uVGFiQmFyIiwiaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZXZlcnkiLCJzdWJGYWNldCIsInJlZkZhY2V0Iiwic3ViQ29sbGVjdGlvbkZhY2V0Iiwic3ViUmVmRmFjZXQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbGxlY3Rpb25GYWNldCxcblx0Q29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHRFbXBoYXNpemVkLFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGVxdWFsLFxuXHRmbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdG5vdCxcblx0bm90RXF1YWwsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVmLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QmFzZUFjdGlvbixcblx0Q29tYmluZWRBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0T3ZlcnJpZGVUeXBlQWN0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdEJ1dHRvblR5cGUsXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLFxuXHRnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMsXG5cdGlzQWN0aW9uQUlPcGVyYXRpb24sXG5cdGlzQWN0aW9uTmF2aWdhYmxlLFxuXHRpc01lbnVBSU9wZXJhdGlvbixcblx0cHJlcGFyZU1lbnVBY3Rpb25zLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQsIEZsZXhTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB7XG5cdGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQsXG5cdGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdCxcblx0Z2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uLCBNYW5pZmVzdEFjdGlvbiwgTWFuaWZlc3RTdWJTZWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgaXNBY3Rpb25XaXRoRGlhbG9nIH0gZnJvbSBcIi4uLy4uL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIENvbmZpZ3VyYWJsZVJlY29yZCwgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBnZXRDdXN0b21TdWJTZWN0aW9uSUQsIGdldEZvcm1JRCwgZ2V0U2lkZUNvbnRlbnRJRCwgZ2V0U3ViU2VjdGlvbklEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IGdldEZvcm1BY3Rpb25zLCBnZXRGb3JtSGlkZGVuQWN0aW9ucyB9IGZyb20gXCIuLi8uLi9vYmplY3RQYWdlL0Zvcm1NZW51QWN0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgeyBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1EZWZpbml0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBjcmVhdGVGb3JtRGVmaW5pdGlvbiwgaXNSZWZlcmVuY2VGYWNldCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuXG5leHBvcnQgZW51bSBTdWJTZWN0aW9uVHlwZSB7XG5cdFVua25vd24gPSBcIlVua25vd25cIiwgLy8gRGVmYXVsdCBUeXBlXG5cdEZvcm0gPSBcIkZvcm1cIixcblx0Tm90ZXMgPSBcIk5vdGVzXCIsXG5cdERhdGFWaXN1YWxpemF0aW9uID0gXCJEYXRhVmlzdWFsaXphdGlvblwiLFxuXHRYTUxGcmFnbWVudCA9IFwiWE1MRnJhZ21lbnRcIixcblx0UGxhY2Vob2xkZXIgPSBcIlBsYWNlaG9sZGVyXCIsXG5cdE1peGVkID0gXCJNaXhlZFwiLFxuXHRFbWJlZGRlZENvbXBvbmVudCA9IFwiRW1iZWRkZWRDb21wb25lbnRcIlxufVxuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiA9XG5cdHwgVW5zdXBwb3J0ZWRTdWJTZWN0aW9uXG5cdHwgRm9ybVN1YlNlY3Rpb25cblx0fCBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb25cblx0fCBDb250YWN0U3ViU2VjdGlvblxuXHR8IFhNTEZyYWdtZW50U3ViU2VjdGlvblxuXHR8IFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgTWl4ZWRTdWJTZWN0aW9uXG5cdHwgUmV1c2VDb21wb25lbnRTdWJTZWN0aW9uXG5cdHwgTm90ZVN1YlNlY3Rpb247XG5cbnR5cGUgQmFzZVN1YlNlY3Rpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xuXHR0aXRsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aXNWaXNpYmlsaXR5RHluYW1pYz86IGJvb2xlYW4gfCBcIlwiO1xuXHRmbGV4U2V0dGluZ3M/OiBGbGV4U2V0dGluZ3M7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRsZXZlbDogbnVtYmVyO1xuXHRjb250ZW50PzogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xuXHRzaWRlQ29udGVudD86IFNpZGVDb250ZW50RGVmO1xuXHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IGJvb2xlYW47XG5cdGNsYXNzPzogc3RyaW5nO1xuXHRhcHBseVN0YXRlPzogc3RyaW5nO1xuXHRyZXRyaWV2ZVN0YXRlPzogc3RyaW5nO1xufTtcblxudHlwZSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bjtcblx0dGV4dDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uO1xuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0aXNQYXJ0T2ZQcmV2aWV3PzogYm9vbGVhbjtcblx0c2hvd1N1YlNlY3Rpb25UaXRsZTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZT86IHN0cmluZyB8IGJvb2xlYW47XG5cdGRhdGFWaXN1YWxpemF0aW9uT3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufTtcblxudHlwZSBDb250YWN0U3ViU2VjdGlvbiA9IFVuc3VwcG9ydGVkU3ViU2VjdGlvbjtcbnR5cGUgTm90ZVN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuTm90ZXM7XG59O1xudHlwZSBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudDtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgUmV1c2VDb21wb25lbnRTdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkVtYmVkZGVkQ29tcG9uZW50O1xuXHRjb21wb25lbnROYW1lOiBzdHJpbmc7XG5cdHNldHRpbmdzOiBzdHJpbmc7XG59O1xuXG50eXBlIFBsYWNlaG9sZGVyRnJhZ21lbnRTdWJTZWN0aW9uID0gT21pdDxCYXNlU3ViU2VjdGlvbiwgXCJhbm5vdGF0aW9uUGF0aFwiPiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBNaXhlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuTWl4ZWQ7XG5cdGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdWJTZWN0aW9uID0gQmFzZVN1YlNlY3Rpb24gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm07XG5cdGZvcm1EZWZpbml0aW9uOiBGb3JtRGVmaW5pdGlvbjtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRpZDogc3RyaW5nO1xuXHR0aXRsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHNob3dUaXRsZT86IGJvb2xlYW47XG5cdHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuO1xuXHRhcHBseVN0YXRlPzogc3RyaW5nO1xuXHRyZXRyaWV2ZVN0YXRlPzogc3RyaW5nO1xufTtcblxudHlwZSBTaWRlQ29udGVudERlZiA9IHtcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGlkPzogc3RyaW5nO1xuXHRzaWRlQ29udGVudEZhbGxEb3duPzogc3RyaW5nO1xuXHRjb250YWluZXJRdWVyeT86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdGVxdWFsU3BsaXQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTZWN0aW9uPiAmIHtcblx0b25TZWN0aW9uTG9hZGVkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24gPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VTdWJTZWN0aW9uPjtcblxuY29uc3QgdmlzdWFsaXphdGlvblRlcm1zOiBzdHJpbmdbXSA9IFtcblx0VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0sXG5cdFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0LFxuXHRVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50LFxuXHRVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRVSUFubm90YXRpb25UZXJtcy5Ob3RlXG5dO1xuXG4vKipcbiAqIENyZWF0ZSBzdWJzZWN0aW9ucyBiYXNlZCBvbiBmYWNldCBkZWZpbml0aW9uLlxuICogQHBhcmFtIGZhY2V0Q29sbGVjdGlvbiBDb2xsZWN0aW9uIG9mIGZhY2V0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uIFRydWUgaWYgaGVhZGVyIHNlY3Rpb24gaXMgZ2VuZXJhdGVkIGluIHRoaXMgaXRlcmF0aW9uXG4gKiBAcGFyYW0gdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgSWYgdGhlIG9ubHkgZmllbGQgd2l0aGluIGEgZm9ybSBjb250YWluZXIgaXMgYSB0ZXh0LWFyZWEgZmllbGQsIHRoZSBsYWJlbCBpcyBoaWRkZW5cbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN1YnNlY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9ucyhcblx0ZmFjZXRDb2xsZWN0aW9uOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhbixcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Ly8gRmlyc3Qgd2UgZGV0ZXJtaW5lIHdoaWNoIHN1YiBzZWN0aW9uIHdlIG5lZWQgdG8gY3JlYXRlXG5cdGNvbnN0IGZhY2V0c1RvQ3JlYXRlID0gZmFjZXRDb2xsZWN0aW9uLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEZhY2V0VHlwZXNbXSwgZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdFx0Ly8gVE9ETyBJZiB0aGUgQ29sbGVjdGlvbiBGYWNldCBoYXMgYSBjaGlsZCBvZiB0eXBlIENvbGxlY3Rpb24gRmFjZXQgd2UgYnJpbmcgdGhlbSB1cCBvbmUgbGV2ZWwgKEZvcm0gKyBUYWJsZSB1c2UgY2FzZSkgP1xuXHRcdFx0XHQvLyBmaXJzdCBjYXNlIGZhY2V0IENvbGxlY3Rpb24gaXMgY29tYmluYXRpb24gb2YgY29sbGVjdGlvbiBhbmQgcmVmZXJlbmNlIGZhY2V0IG9yIG5vdCBhbGwgZmFjZXRzIGFyZSByZWZlcmVuY2UgZmFjZXRzLlxuXHRcdFx0XHRpZiAoZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maW5kKChmYWNldFR5cGUpID0+IGZhY2V0VHlwZS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSkge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnNwbGljZShmYWNldHNUb0NyZWF0ZS5sZW5ndGgsIDAsIC4uLmZhY2V0RGVmaW5pdGlvbi5GYWNldHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goZmFjZXREZWZpbml0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHRcdC8vIE5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdC8vIFRoZW4gd2UgY3JlYXRlIHRoZSBhY3R1YWwgc3Vic2VjdGlvbnNcblx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlLm1hcCgoZmFjZXQpID0+XG5cdFx0Y3JlYXRlU3ViU2VjdGlvbihcblx0XHRcdGZhY2V0LFxuXHRcdFx0ZmFjZXRzVG9DcmVhdGUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0MCxcblx0XHRcdCEoZmFjZXQgYXMgQ29sbGVjdGlvbkZhY2V0KT8uRmFjZXRzPy5sZW5ndGgsXG5cdFx0XHRpc0hlYWRlclNlY3Rpb24sXG5cdFx0XHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlc1xuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHN1YnNlY3Rpb25zIGJhc2VkIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKClcblx0KTtcblx0Y29uc3QgYUN1c3RvbUhlYWRlckZhY2V0czogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0T2JqZWN0LmtleXMoY3VzdG9tSGVhZGVyRmFjZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRhQ3VzdG9tSGVhZGVyRmFjZXRzLnB1c2goY3VzdG9tSGVhZGVyRmFjZXRzW2tleV0pO1xuXHRcdHJldHVybiBhQ3VzdG9tSGVhZGVyRmFjZXRzO1xuXHR9KTtcblx0Y29uc3QgZmFjZXRzVG9DcmVhdGUgPSBhQ3VzdG9tSGVhZGVyRmFjZXRzLnJlZHVjZSgoZmFjZXRzVG9DcmVhdGU6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldFtdLCBjdXN0b21IZWFkZXJGYWNldCkgPT4ge1xuXHRcdGlmIChjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQpIHtcblx0XHRcdGZhY2V0c1RvQ3JlYXRlLnB1c2goY3VzdG9tSGVhZGVyRmFjZXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFjZXRzVG9DcmVhdGU7XG5cdH0sIFtdKTtcblxuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKChjdXN0b21IZWFkZXJGYWNldCkgPT4gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN1YnNlY3Rpb24gYmFzZWQgb24gYSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICogQHBhcmFtIGN1c3RvbUhlYWRlckZhY2V0IEEgY3VzdG9tIGhlYWRlciBmYWNldFxuICogQHJldHVybnMgQSBkZWZpbml0aW9uIGZvciBhIHN1YnNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0OiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQpOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldEN1c3RvbVN1YlNlY3Rpb25JRChjdXN0b21IZWFkZXJGYWNldC5rZXkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSB7XG5cdFx0aWQ6IHN1YlNlY3Rpb25JRCxcblx0XHRrZXk6IGN1c3RvbUhlYWRlckZhY2V0LmtleSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXQudGl0bGUsXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQsXG5cdFx0dGVtcGxhdGU6IGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCB8fCBcIlwiLFxuXHRcdHZpc2libGU6IGN1c3RvbUhlYWRlckZhY2V0LnZpc2libGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRzdGFzaGVkOiBjdXN0b21IZWFkZXJGYWNldC5zdGFzaGVkLFxuXHRcdGZsZXhTZXR0aW5nczogY3VzdG9tSGVhZGVyRmFjZXQuZmxleFNldHRpbmdzLFxuXHRcdGFjdGlvbnM6IHt9LFxuXHRcdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogZmFsc2Vcblx0fTtcblx0cmV0dXJuIHN1YlNlY3Rpb247XG59XG5cbmNvbnN0IGdldFN1YlNlY3Rpb25LZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG59O1xuLyoqXG4gKiBBZGRzIEZvcm0gbWVudSBhY3Rpb24gdG8gYWxsIGZvcm0gYWN0aW9ucywgcmVtb3ZlcyBkdXBsaWNhdGUgYWN0aW9ucyBhbmQgaGlkZGVuIGFjdGlvbnMuXG4gKiBAcGFyYW0gYWN0aW9ucyBUaGUgYWN0aW9ucyBpbnZvbHZlZFxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBmb3IgdGhlIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBmb3JtIG1lbnUgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBhZGRGb3JtTWVudUFjdGlvbnMoXG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXSxcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IENvbWJpbmVkQWN0aW9uIHtcblx0Ly8gYW5ub3RhdGlvbiBhY3Rpb25zIHBvc3NpYmx5IGhhcyBDdXN0b21BY3Rpb25zLCB3aGljaCBhcmUgYWRkZWQgYXQgU3Vic2VjdGlvbi50cyNjcmVhdGVGb3JtQWN0aW9uUmVkdWNlclxuXHQvLyB0aG9zZSBhY3Rpb24gYXJlIGluY29ycmVjdCBhbmQgY2F1c2UgdW53YW50ZWQgcmVzdWx0cywgc28gd2UgbmVlZCB0byBjYXJlZnVsbHkgcmVtb3ZlIGluY29ycmVjdCBvbmVzIGhlcmVcblx0Zm9yIChsZXQgcmV2ZXJzZUluZGV4ID0gYWN0aW9ucy5sZW5ndGggLSAxOyByZXZlcnNlSW5kZXggPj0gMDsgcmV2ZXJzZUluZGV4LS0pIHtcblx0XHRpZiAoXG5cdFx0XHRhY3Rpb25zW3JldmVyc2VJbmRleF0uaWQ/LnN0YXJ0c1dpdGgoXCJDdXN0b21BY3Rpb246OlwiKSAmJlxuXHRcdFx0KGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5rZXkuc3RhcnRzV2l0aChcIkRhdGFGaWVsZEZvckFjdGlvbjo6XCIpIHx8XG5cdFx0XHRcdGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5rZXkuc3RhcnRzV2l0aChcIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjo6XCIpKVxuXHRcdCkge1xuXHRcdFx0YWN0aW9ucy5zcGxpY2UocmV2ZXJzZUluZGV4LCAxKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgaGlkZGVuQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0Rm9ybUhpZGRlbkFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSB8fCBbXSxcblx0XHRhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0bWVudTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHRcdH0sXG5cdFx0Zm9ybUFjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj4gPSBnZXRGb3JtQWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIDEuIEdldCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMgLT4gYWN0aW9ucyBhcmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kXG5cdFx0Ly8gMi4gR2V0IGFjdGlvbnMgZnJvbSBtYW5pZmVzdFxuXHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoZm9ybUFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaWRkZW5BY3Rpb25zKSxcblx0XHQvLyAzLiBHZXQgYWxsIGFubm90YXRpb24gbWVudSBpdGVtc1xuXHRcdGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMgPSBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFjdGlvbnMpLFxuXHRcdC8vIDQuIEZpbmQgbWFuaWZlc3QgYWN0aW9ucyB3aGljaCBvdmVycmlkZSBhbnkgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdFx0bWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMgPSBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKSxcblx0XHQvLyA1LiBHZXQgb3ZlcnJpZGRlbiBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0XHRvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0YW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyxcblx0XHRcdG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zLFxuXHRcdFx0YWN0aW9uT3ZlcndyaXRlQ29uZmlnXG5cdFx0KSBhcyBDdXN0b21BY3Rpb25bXTtcblx0Ly8gSWYgdGhlcmUgaXMgYSBtYW5pZmVzdCBhY3Rpb24gZGVmaW5lZCBmb3IgYSBuZWlnaGJvdXJpbmcgcmVmZXJlbmNlIGZhY2V0LCBpdCB3b3VsZCBub3QgYmUgcGFydCBvZiBtYW5pZmVzdCBhY3Rpb25zIGhlcmVcblx0Ly8gSW4gdGhpcyBmb3ItbG9vcCwgZW5zdXJpbmcgYSBwdXJlIG1hbmlmZXN0IGFjdGlvbiBjb21pbmcgZnJvbSBhbm90aGVyIHJlZmVyZW5jZSBmYWNldCBpcyBub3QgbG9zdFxuXHRmb3IgKGxldCByZXZlcnNlSW5kZXggPSBhY3Rpb25zLmxlbmd0aCAtIDE7IHJldmVyc2VJbmRleCA+PSAwOyByZXZlcnNlSW5kZXgtLSkge1xuXHRcdGlmIChhY3Rpb25zW3JldmVyc2VJbmRleF0uaWQ/LnN0YXJ0c1dpdGgoXCJDdXN0b21BY3Rpb246OlwiKSkge1xuXHRcdFx0Zm9yIChjb25zdCBtYW5pZmVzdEFjdGlvbiBpbiBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykge1xuXHRcdFx0XHRpZiAobWFuaWZlc3RBY3Rpb24gPT09IGFjdGlvbnNbcmV2ZXJzZUluZGV4XS5rZXkpIHtcblx0XHRcdFx0XHRhY3Rpb25zLnNwbGljZShyZXZlcnNlSW5kZXgsIDEpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIDYuIE92ZXJyaWRlIGFsbCBhY3Rpb25zXG5cdGxldCBmb3JtQWxsQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpIGFzIEN1c3RvbUFjdGlvbltdO1xuXHQvLyA3LiBSZXBsYWNlIG9yaWdpbmFsIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIG92ZXJyaWRkZW4gbWVudSBpdGVtc1xuXHRwcmVwYXJlTWVudUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMsIG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zKTtcblx0Ly8gOC4gUmVtb3ZlIGR1cGxpY2F0ZSBhY3Rpb25zIHdoaWNoIGFyZSBtZW51IGl0ZW1zXG5cdGZvcm1BbGxBY3Rpb25zID0gcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyhmb3JtQWxsQWN0aW9ucyk7XG5cdC8vIDkuIEhpZGUgbWVudXMgd2hlcmUgYWxsIG1lbnUgaXRlbXMgYXJlIGhpZGRlblxuXHRmb3JtQWxsQWN0aW9ucyA9IGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMoZm9ybUFsbEFjdGlvbnMpO1xuXHQvLyAxMC4gKE9ubHkgZm9yIHRoaXMgc3Vic2VjdGlvbiBVSSBhcmVhKSBkZWZhdWx0QWN0aW9uIG9mIGEgbWVudSBtdXN0IGJlIG9mIHR5cGUgQWN0aW9uVHlwZS5EZWZhdWx0XG5cdGZvcm1BbGxBY3Rpb25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5NZW51ICYmICEhYWN0aW9uLmRlZmF1bHRBY3Rpb24pIHtcblx0XHRcdChhY3Rpb24uZGVmYXVsdEFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLnR5cGUgPSBBY3Rpb25UeXBlLkRlZmF1bHQ7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbnM6IGZvcm1BbGxBY3Rpb25zID8/IGFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0aW9uIGZvcm0gYSBmYWNldC5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBmYWNldCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldEZhY2V0QWN0aW9ucyhmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IENvbWJpbmVkQWN0aW9uIHtcblx0bGV0IGFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IChcblx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLkZhY2V0cy5maWx0ZXIoKHN1YkZhY2V0RGVmaW5pdGlvbikgPT4gaXNSZWZlcmVuY2VGYWNldChzdWJGYWNldERlZmluaXRpb24pKSBhcyBSZWZlcmVuY2VGYWNldFR5cGVzW11cblx0XHRcdCkucmVkdWNlKFxuXHRcdFx0XHQoYWN0aW9uUmVkdWNlcjogQmFzZUFjdGlvbltdLCByZWZlcmVuY2VGYWNldCkgPT4gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoYWN0aW9uUmVkdWNlciwgcmVmZXJlbmNlRmFjZXQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRbXVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRhY3Rpb25zID0gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoW10sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBidXR0b24gdHlwZSBiYXNlZCBvbiBAVUkuRW1waGFzaXplZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIGVtcGhhc2l6ZWQgRW1waGFzaXplZCBhbm5vdGF0aW9uIHZhbHVlLlxuICogQHJldHVybnMgVGhlIGJ1dHRvbiB0eXBlIG9yIHBhdGggYmFzZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0QnV0dG9uVHlwZShlbXBoYXNpemVkOiBFbXBoYXNpemVkIHwgdW5kZWZpbmVkKTogQnV0dG9uVHlwZSB7XG5cdC8vIEVtcGhhc2l6ZWQgaXMgYSBib29sZWFuIHNvIGlmIGl0J3MgZXF1YWwgdG8gdHJ1ZSB3ZSBzaG93IHRoZSBidXR0b24gYXMgR2hvc3QsIG90aGVyd2lzZSBhcyBUcmFuc3BhcmVudFxuXHRjb25zdCBidXR0b25UeXBlQ29uZGl0aW9uID0gZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGVtcGhhc2l6ZWQpLCB0cnVlKTtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShidXR0b25UeXBlQ29uZGl0aW9uLCBCdXR0b25UeXBlLkdob3N0LCBCdXR0b25UeXBlLlRyYW5zcGFyZW50KSkgYXMgQnV0dG9uVHlwZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdWJzZWN0aW9uIGJhc2VkIG9uIEZhY2V0VHlwZXMuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gZmFjZXRzVG9DcmVhdGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbGV2ZWxcbiAqIEBwYXJhbSBoYXNTaW5nbGVDb250ZW50XG4gKiBAcGFyYW0gaXNIZWFkZXJTZWN0aW9uXG4gKiBAcGFyYW0gdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgSWYgdGhlIG9ubHkgZmllbGQgd2l0aGluIGEgZm9ybSBjb250YWluZXIgaXMgYSB0ZXh0LWFyZWEgZmllbGQsIHRoZSBsYWJlbCBpcyBoaWRkZW5cbiAqIEByZXR1cm5zIEEgc3Vic2VjdGlvbiBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJTZWN0aW9uKFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bGV2ZWw6IG51bWJlcixcblx0aGFzU2luZ2xlQ29udGVudDogYm9vbGVhbixcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhbixcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IGdldFN1YlNlY3Rpb25JRChmYWNldERlZmluaXRpb24pO1xuXHRjb25zdCBoaWRkZW5Bbm5vdGF0aW9uID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHRjb25zdCBpc1Zpc2libGVFeHByZXNzaW9uID0gbm90KFxuXHRcdGVxdWFsKFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihoaWRkZW5Bbm5vdGF0aW9uLCBbXSwgZmFsc2UsIChwYXRoOiBzdHJpbmcpID0+XG5cdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xuXHRjb25zdCBpc1Zpc2liaWxpdHlEeW5hbWljID0gIWlzQ29uc3RhbnQoaXNWaXNpYmxlRXhwcmVzc2lvbikgJiYgIWlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGhpZGRlbkFubm90YXRpb24pO1xuXHRjb25zdCB0aXRsZSA9IGZhY2V0RGVmaW5pdGlvbi5MYWJlbCAhPT0gdW5kZWZpbmVkID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbi5MYWJlbCkpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBCYXNlU3ViU2VjdGlvbiA9IHtcblx0XHRpZDogc3ViU2VjdGlvbklELFxuXHRcdGtleTogZ2V0U3ViU2VjdGlvbktleShmYWNldERlZmluaXRpb24sIHN1YlNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGVFeHByZXNzaW9uKSxcblx0XHRpc1Zpc2liaWxpdHlEeW5hbWljOiBpc1Zpc2liaWxpdHlEeW5hbWljLFxuXHRcdGxldmVsOiBsZXZlbCxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkLFxuXHRcdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRFbmFibGVMYXp5TG9hZGluZygpXG5cdH07XG5cdGlmIChpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRzdWJTZWN0aW9uLnN0YXNoZWQgPSBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0c3ViU2VjdGlvbi5mbGV4U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0bGV0IHVuc3VwcG9ydGVkVGV4dCA9IFwiXCI7XG5cdGxldmVsKys7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRjb25zdCBmYWNldHMgPSBmYWNldERlZmluaXRpb24uRmFjZXRzO1xuXG5cdFx0XHQvLyBGaWx0ZXIgZm9yIGFsbCBmYWNldHMgb2YgdGhpcyBzdWJzZWN0aW9uIHRoYXQgYXJlIHJlZmVycmluZyB0byBhbiBhbm5vdGF0aW9uIGRlc2NyaWJpbmcgYSB2aXN1YWxpemF0aW9uIChlLmcuIHRhYmxlIG9yIGNoYXJ0KVxuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbkZhY2V0cyA9IGZhY2V0c1xuXHRcdFx0XHQubWFwKChmYWNldCwgaW5kZXgpID0+ICh7IGluZGV4LCBmYWNldCB9KSkgLy8gUmVtZW1iZXIgdGhlIGluZGV4IGFzc2lnbmVkIHRvIGVhY2ggZmFjZXRcblx0XHRcdFx0LmZpbHRlcigoeyBmYWNldCB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGlzUmVmZXJlbmNlRmFjZXQoZmFjZXQpICYmIGZhY2V0LlRhcmdldC4kdGFyZ2V0ICYmIHZpc3VhbGl6YXRpb25UZXJtcy5pbmNsdWRlcyhmYWNldC5UYXJnZXQuJHRhcmdldC50ZXJtKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgYWxsIHZpc3VhbGl6YXRpb24gZmFjZXRzOyBcInZpc3VhbGl6YXRpb25GYWNldHNcIiBhbmQgXCJub25WaXN1YWxpemF0aW9uRmFjZXRzXCIgYXJlIGRpc2pvaW50XG5cdFx0XHRjb25zdCBub25WaXN1YWxpemF0aW9uRmFjZXRzID0gZmFjZXRzLmZpbHRlcihcblx0XHRcdFx0KGZhY2V0KSA9PiAhdmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh2aXN1YWxpemF0aW9uKSA9PiB2aXN1YWxpemF0aW9uLmZhY2V0ID09PSBmYWNldClcblx0XHRcdCk7XG5cblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRmFjZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gQ29sbGVjdGlvbkZhY2V0cyB3aXRoIHZpc3VhbGl6YXRpb25zIG11c3QgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGFzIHRoZXkgY2Fubm90IGJlIGluY2x1ZGVkIGluIGZvcm1zXG5cdFx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IGZvcm1Db250ZW50OiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0XHRcdGNvbnN0IG1peGVkQ29udGVudDogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXG5cdFx0XHRcdC8vIENyZWF0ZSBlYWNoIHZpc3VhbGl6YXRpb24gZmFjZXQgYXMgaWYgaXQgd2FzIGl0cyBvd24gc3Vic2VjdGlvbiAodmlhIHJlY3Vyc2lvbiksIGFuZCBrZWVwIHRoZWlyIHJlbGF0aXZlIG9yZGVyaW5nXG5cdFx0XHRcdGZvciAoY29uc3QgeyBmYWNldCB9IG9mIHZpc3VhbGl6YXRpb25GYWNldHMpIHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uQ29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgdHJ1ZSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobm9uVmlzdWFsaXphdGlvbkZhY2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly8gVGhpcyBzdWJzZWN0aW9uIGluY2x1ZGVzIHZpc3VhbGl6YXRpb25zIGFuZCBvdGhlciBjb250ZW50LCBzbyBpdCBpcyBhIFwiTWl4ZWRcIiBzdWJzZWN0aW9uXG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRgV2FybmluZzogQ29sbGVjdGlvbkZhY2V0ICcke2ZhY2V0RGVmaW5pdGlvbi5JRH0nIGluY2x1ZGVzIGEgY29tYmluYXRpb24gb2YgZWl0aGVyIGEgY2hhcnQgb3IgYSB0YWJsZSBhbmQgb3RoZXIgY29udGVudC4gVGhpcyBjYW4gbGVhZCB0byByZW5kZXJpbmcgaXNzdWVzLiBDb25zaWRlciBtb3ZpbmcgdGhlIGNoYXJ0IG9yIHRhYmxlIGludG8gYSBzZXBhcmF0ZSBDb2xsZWN0aW9uRmFjZXQuYFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRjb25zdCBmYWtlRm9ybUZhY2V0ID0geyAuLi5mYWNldERlZmluaXRpb24gfTtcblx0XHRcdFx0XHRmYWtlRm9ybUZhY2V0LkZhY2V0cyA9IG5vblZpc3VhbGl6YXRpb25GYWNldHM7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgam9pbmVkIGZvcm0gb2YgYWxsIGZhY2V0cyB0aGF0IGFyZSBub3QgcmVmZXJyaW5nIHRvIHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdFx0Zm9ybUNvbnRlbnQucHVzaChjcmVhdGVTdWJTZWN0aW9uKGZha2VGb3JtRmFjZXQsIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNZXJnZSB0aGUgdmlzdWFsaXphdGlvbiBjb250ZW50IHdpdGggdGhlIGZvcm0gY29udGVudFxuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbkZhY2V0cy5maW5kKCh7IGluZGV4IH0pID0+IGluZGV4ID09PSAwKSkge1xuXHRcdFx0XHRcdC8vIElmIHRoZSBmaXJzdCBmYWNldCBpcyBhIHZpc3VhbGl6YXRpb24sIGRpc3BsYXkgdGhlIHZpc3VhbGl6YXRpb25zIGZpcnN0XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHRcdG1peGVkQ29udGVudC5wdXNoKC4uLmZvcm1Db250ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGRpc3BsYXkgdGhlIGZvcm0gZmlyc3Rcblx0XHRcdFx0XHRtaXhlZENvbnRlbnQucHVzaCguLi5mb3JtQ29udGVudCk7XG5cdFx0XHRcdFx0bWl4ZWRDb250ZW50LnB1c2goLi4udmlzdWFsaXphdGlvbkNvbnRlbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgbWl4ZWRTdWJTZWN0aW9uOiBNaXhlZFN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5NaXhlZCxcblx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0Y29udGVudDogbWl4ZWRDb250ZW50XG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBtaXhlZFN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUaGlzIENvbGxlY3Rpb25GYWNldCBvbmx5IGluY2x1ZGVzIGNvbnRlbnQgdGhhdCBjYW4gYmUgcmVuZGVyZWQgaW4gYSBtZXJnZWQgZm9ybVxuXHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oXG5cdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oaXNWaXNpYmxlRXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGZhY2V0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHR7IHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIH1cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRhY3Rpb25zOiBmYWNldEFjdGlvbnMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdGNvbW1hbmRBY3Rpb25zOiBmYWNldEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gZm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uO1xuXHRcdFx0fVxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRpZiAoIWZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldCkge1xuXHRcdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBgVW5hYmxlIHRvIGZpbmQgYW5ub3RhdGlvblBhdGggJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldC50ZXJtKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0XHRjb25zdCBwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSwgY29udmVydGVyQ29udGV4dCwge1xuXHRcdFx0XHRcdFx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdFx0XHRcdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGZhY2V0c1RvQ3JlYXRlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0ZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkOiBpc0hlYWRlclNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nID0gc3ViU2VjdGlvbi50aXRsZSA/IHN1YlNlY3Rpb24udGl0bGUgOiBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFRpdGxlID1cblx0XHRcdFx0XHRcdFx0KHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pPy5hbm5vdGF0aW9uPy50aXRsZSB8fFxuXHRcdFx0XHRcdFx0XHQocHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIENoYXJ0VmlzdWFsaXphdGlvbik/LnRpdGxlO1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNQYXJ0T2ZQcmV2aWV3ID0gZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldz8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0XHRcdGNvbnN0IHNob3dTdWJTZWN0aW9uVGl0bGUgPSBnZXRTaG93U3ViU2VjdGlvblRpdGxlKGNvbnRyb2xUaXRsZSA/PyBcIlwiLCBzdWJTZWN0aW9uVGl0bGUsIGhhc1NpbmdsZUNvbnRlbnQpO1xuXG5cdFx0XHRcdFx0XHQvLyBFaXRoZXIgY2FsY3VsYXRlIHRoZSB0aXRsZSB2aXNpYmlsaXR5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHlcblx0XHRcdFx0XHRcdC8vIEFkZGl0aW9uYWxseSB0byBjaGVja2luZyB3aGV0aGVyIGEgdGl0bGUgZXhpc3RzLFxuXHRcdFx0XHRcdFx0Ly8gd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIGZhY2V0IHRpdGxlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY29udHJvbCAoaS5lLiB2aXN1YWxpemF0aW9uKSB0aXRsZTtcblx0XHRcdFx0XHRcdC8vIHRoaXMgaXMgZG9uZSBieSBpbmNsdWRpbmcgXCJzaG93U3ViU2VjdGlvblRpdGxlXCIgaW4gdGhlIGFuZCBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSA9IGlmRWxzZShcblx0XHRcdFx0XHRcdFx0aXNWaXNpYmlsaXR5RHluYW1pYyxcblx0XHRcdFx0XHRcdFx0YW5kKGlzVmlzaWJsZUV4cHJlc3Npb24sIG5vdChlcXVhbCh0aXRsZSwgXCJ1bmRlZmluZWRcIikpLCBzaG93U3ViU2VjdGlvblRpdGxlKSxcblx0XHRcdFx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cHJlc3Npb24pICE9PSB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUgIT09IFwidW5kZWZpbmVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUgIT09IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRpc1Zpc2libGVFeHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNob3dTdWJTZWN0aW9uVGl0bGVcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkRhdGFWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRcdHByZXNlbnRhdGlvbjogcHJlc2VudGF0aW9uLFxuXHRcdFx0XHRcdFx0XHRpc1BhcnRPZlByZXZpZXcsXG5cdFx0XHRcdFx0XHRcdHNob3dTdWJTZWN0aW9uVGl0bGU6IGNvbXBpbGVFeHByZXNzaW9uKHNob3dTdWJTZWN0aW9uVGl0bGUpLCAvLyBUaGlzIGlzIHVzZWQgb24gdGhlIE9iamVjdFBhZ2VTdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSkgLy8gVGhpcyBpcyB1c2VkIHRvIGhpZGUgdGhlIFRpdGxlIGNvbnRyb2wgYWJvdmUgZGF0YSB2aXN1YWxpemF0aW9uc1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlN0YXR1c0luZm86XG5cdFx0XHRcdFx0Y2FzZSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zLkNvbnRhY3Q6XG5cdFx0XHRcdFx0XHQvLyBBbGwgdGhvc2UgZWxlbWVudCBiZWxvbmcgdG8gYSBmcm9tIGZhY2V0XG5cdFx0XHRcdFx0XHRjb25zdCBmYWNldEFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRTdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRcdGZhY2V0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdFx0eyB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyB9XG5cdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25zOiBmYWNldEFjdGlvbnMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKSxcblx0XHRcdFx0XHRcdFx0XHRjb21tYW5kQWN0aW9uczogZmFjZXRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybUVsZW1lbnRTdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5Ob3RlOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTm90ZXNcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBGb3IgJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybX0gRnJhZ21lbnRgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBcIkZvciBSZWZlcmVuY2UgVVJMIEZhY2V0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0Ly8gSWYgd2UgcmVhY2ggaGVyZSB3ZSBlbmRlZCB1cCB3aXRoIGFuIHVuc3VwcG9ydGVkIFN1YlNlY3Rpb24gdHlwZVxuXHRjb25zdCB1bnN1cHBvcnRlZFN1YlNlY3Rpb246IFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IHtcblx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0dGV4dDogdW5zdXBwb3J0ZWRUZXh0XG5cdH07XG5cdHJldHVybiB1bnN1cHBvcnRlZFN1YlNlY3Rpb247XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdG8gaGlkZSBvciBzaG93IHRoZSBzdWJzZWN0aW9uIHRpdGxlLlxuICogQHBhcmFtIGNvbnRyb2xUaXRsZVxuICogQHBhcmFtIHN1YlNlY3Rpb25UaXRsZVxuICogQHBhcmFtIGhhc1NpbmdsZUNvbnRlbnRcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgb3IgZXhwcmVzc2lvbiBmb3Igc2hvd1N1YlNlY3Rpb25UaXRsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hvd1N1YlNlY3Rpb25UaXRsZShcblx0Y29udHJvbFRpdGxlOiBzdHJpbmcsXG5cdHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyB2aXNpYmxlIHNoYWxsIGJlIHRydWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbnRlbnQgb3IgaWYgdGhlIGNvbnRyb2wgYW5kIHN1YnNlY3Rpb24gdGl0bGUgYXJlIGRpZmZlcmVudFxuXHRyZXR1cm4gb3Iobm90KGhhc1NpbmdsZUNvbnRlbnQpLCBub3RFcXVhbChyZXNvbHZlQmluZGluZ1N0cmluZyhjb250cm9sVGl0bGUpLCByZXNvbHZlQmluZGluZ1N0cmluZyhzdWJTZWN0aW9uVGl0bGUpKSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFxuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCByZWZlcmVuY2VUYXJnZXQgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZTtcblx0bGV0IG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgZGF0YUZpZWxkQ29sbGVjdGlvbjogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdID0gW107XG5cdGxldCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXSA9IHRhcmdldFZhbHVlLnNwbGl0KFwiQFwiKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID4gMCkge1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChyZWZlcmVuY2VUYXJnZXQpIHtcblx0XHRzd2l0Y2ggKHJlZmVyZW5jZVRhcmdldC50ZXJtKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSAocmVmZXJlbmNlVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24+KHJlZmVyZW5jZVRhcmdldCkuYWN0aW9ucyBhc1xuXHRcdFx0XHRcdFx0fCBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj5cblx0XHRcdFx0XHRcdHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHQpLmFjdGlvbnM7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU3RhdHVzSW5mbzpcblx0XHRcdFx0aWYgKHJlZmVyZW5jZVRhcmdldC5xdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gcmVmZXJlbmNlVGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGFjdGlvbnMgPSBkYXRhRmllbGRDb2xsZWN0aW9uLnJlZHVjZSgoYWN0aW9uUmVkdWNlciwgZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLlJFUVVJUkVTQ09OVEVYVCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uSU5MSU5FKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLkRFVEVSTUlOSU5HKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRcdGlmIChkYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhkYXRhRmllbGQuTWFwcGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFjdGlvblJlZHVjZXIucHVzaCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdGlkOiBnZXRGb3JtSUQoZmFjZXREZWZpbml0aW9uLCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR0ZXh0OiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogXCJcIixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSksIHRydWUpKVxuXHRcdFx0XHRcdFx0XHRcdDogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogY29tcGlsZUV4cHJlc3Npb24oe1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5BY3Rpb24pXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRcdGNvbnN0IGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uID1cblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdFx0YWN0aW9uUmVkdWNlci5wdXNoKFxuXHRcdFx0XHRcdFx0Z2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRcdFx0XHRhY3Rpb25SZWR1Y2VyLnB1c2goe1xuXHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5NZW51LFxuXHRcdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRcdGlzQUlPcGVyYXRpb246IGlzTWVudUFJT3BlcmF0aW9uKGRhdGFGaWVsZC5BY3Rpb25zKSA9PT0gdHJ1ZSB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRtZW51OiBkYXRhRmllbGQuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24gPVxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uPihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0XHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRmb3JtTWFuaWZlc3RNZW51QWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHJldHVybiBhY3Rpb25SZWR1Y2VyO1xuXHRcdH0sIGFjdGlvbnMpO1xuXHR9XG5cblx0Ly8gbm8gb3ZlcnJpZGVzIGhlcmUsIHRoZXkgYXJlIGRvbmUgaW4gYSBsYXRlciBzdGVwIGluIGFkZEZvcm1NZW51QWN0aW9uc1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj4gfCB1bmRlZmluZWQsXG5cdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg/OiBzdHJpbmdcbik6IEFubm90YXRpb25BY3Rpb24ge1xuXHRjb25zdCBrZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdHJldHVybiB7XG5cdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24sIGRhdGFGaWVsZCksXG5cdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdGJpbmRpbmc6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggJiYgIWRhdGFGaWVsZC5JbmxpbmUgPyBgeyAncGF0aCcgOiAnJHtuYXZpZ2F0aW9uUHJvcGVydHlQYXRofSd9YCA6IHVuZGVmaW5lZCwgLy8gSW5saW5lIEFjdGlvbnMgZG9uJ3QgbmVlZCB0aGUgYmluZGluZyBhcyB0aGV5IGFyZSBpbnNpZGUgdGhlIEZvcm1cblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0cmVxdWlyZXNEaWFsb2c6IGlzQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGQpLFxuXHRcdGJ1dHRvblR5cGU6IGdldEJ1dHRvblR5cGUoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uRW1waGFzaXplZCksXG5cdFx0aXNBSU9wZXJhdGlvbjogaXNBY3Rpb25BSU9wZXJhdGlvbihkYXRhRmllbGQpID09PSB0cnVlIHx8IHVuZGVmaW5lZCxcblx0XHRwcmVzczogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRmbihcblx0XHRcdFx0XCJpbnZva2VBY3Rpb25cIixcblx0XHRcdFx0W1xuXHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29udGV4dHM6IGZuKFwiZ2V0QmluZGluZ0NvbnRleHRcIiwgW10sIHBhdGhJbk1vZGVsKFwiXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IChkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHQ/IFwiQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0OiBcIklzb2xhdGVkXCIpIGFzIE9wZXJhdGlvbkdyb3VwaW5nVHlwZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRtb2RlbDogZm4oXCJnZXRNb2RlbFwiLCBbXSwgcGF0aEluTW9kZWwoXCIvXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogaXNBY3Rpb25OYXZpZ2FibGUoZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24gJiYgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb25ba2V5XSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdHJlZihcIi5lZGl0Rmxvd1wiKVxuXHRcdFx0KVxuXHRcdCksXG5cdFx0ZmFjZXROYW1lOiBkYXRhRmllbGQuSW5saW5lID8gZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA6IHVuZGVmaW5lZFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2coYWN0aW9uRGVmaW5pdGlvbjogQWN0aW9uIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0aWYgKGFjdGlvbkRlZmluaXRpb24pIHtcblx0XHRjb25zdCBiQ3JpdGljYWwgPSBhY3Rpb25EZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LklzQWN0aW9uQ3JpdGljYWw7XG5cdFx0aWYgKGFjdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycy5sZW5ndGggPiAxIHx8IGJDcml0aWNhbCkge1xuXHRcdFx0cmV0dXJuIFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIk5vbmVcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyhcblx0bWFuaWZlc3RTdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RTdWJTZWN0aW9uPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4ge1xuXHRjb25zdCBzdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U3ViU2VjdGlvbnMpLmZvckVhY2goXG5cdFx0KHN1YlNlY3Rpb25LZXkpID0+XG5cdFx0XHQoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0gPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKG1hbmlmZXN0U3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0sIHN1YlNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xuXHRyZXR1cm4gc3ViU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb246IE1hbmlmZXN0U3ViU2VjdGlvbixcblx0c3ViU2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uIHtcblx0Y29uc3Qgc2lkZUNvbnRlbnQ6IFNpZGVDb250ZW50RGVmIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50XG5cdFx0PyB7XG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnQudGVtcGxhdGUsXG5cdFx0XHRcdGlkOiBnZXRTaWRlQ29udGVudElEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0ZXF1YWxTcGxpdDogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LmVxdWFsU3BsaXRcblx0XHQgIH1cblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHBvc2l0aW9uID0gbWFuaWZlc3RTdWJTZWN0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0Y29uc3QgaXNWaXNpYmxlID0gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCA/IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlIDogdHJ1ZTtcblx0Y29uc3QgaXNEeW5hbWljRXhwcmVzc2lvbiA9IGlzVmlzaWJsZSAmJiB0eXBlb2YgaXNWaXNpYmxlID09PSBcInN0cmluZ1wiICYmIGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgPT09IDA7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RTdWJTZWN0aW9uLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoT2JqZWN0LnZhbHVlcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykpPy5yZWR1Y2UoXG5cdFx0KHByZXZpb3VzQWN0aW9uLCBjdXJyZW50QWN0aW9uKSA9PiAoeyAuLi5wcmV2aW91c0FjdGlvbiwgW2N1cnJlbnRBY3Rpb24ua2V5XTogY3VycmVudEFjdGlvbiB9KSxcblx0XHR7fVxuXHQpO1xuXHRjb25zdCBzdWJTZWN0aW9uRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdGlkOiBtYW5pZmVzdFN1YlNlY3Rpb24uaWQgfHwgZ2V0Q3VzdG9tU3ViU2VjdGlvbklEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdGFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLFxuXHRcdGtleTogc3ViU2VjdGlvbktleSxcblx0XHR0aXRsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnRpdGxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHR2aXNpYmxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgOiBcInRydWVcIixcblx0XHRzaWRlQ29udGVudDogc2lkZUNvbnRlbnQsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvbixcblx0XHRvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5lbmFibGVMYXp5TG9hZGluZyA/PyBmYWxzZSxcblx0XHRjb21wb25lbnROYW1lOiBcIlwiLFxuXHRcdHNldHRpbmdzOiBcIlwiLFxuXHRcdGFwcGx5U3RhdGU6IG1hbmlmZXN0U3ViU2VjdGlvbi5hcHBseVN0YXRlLFxuXHRcdHJldHJpZXZlU3RhdGU6IG1hbmlmZXN0U3ViU2VjdGlvbi5yZXRyaWV2ZVN0YXRlXG5cdH07XG5cdGlmIChtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUpIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuWE1MRnJhZ21lbnQ7XG5cdFx0KHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIHVua25vd24gYXMgWE1MRnJhZ21lbnRTdWJTZWN0aW9uKS50ZW1wbGF0ZSA9IG1hbmlmZXN0U3ViU2VjdGlvbi50ZW1wbGF0ZSB8fCBtYW5pZmVzdFN1YlNlY3Rpb24ubmFtZSB8fCBcIlwiO1xuXHR9IGVsc2UgaWYgKG1hbmlmZXN0U3ViU2VjdGlvbi5lbWJlZGRlZENvbXBvbmVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLkVtYmVkZGVkQ29tcG9uZW50O1xuXHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLmNvbXBvbmVudE5hbWUgPSBtYW5pZmVzdFN1YlNlY3Rpb24uZW1iZWRkZWRDb21wb25lbnQubmFtZTtcblx0XHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50LnNldHRpbmdzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHN1YlNlY3Rpb25EZWZpbml0aW9uLnNldHRpbmdzID0gSlNPTi5zdHJpbmdpZnkobWFuaWZlc3RTdWJTZWN0aW9uLmVtYmVkZGVkQ29tcG9uZW50LnNldHRpbmdzKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHR9XG5cdHJldHVybiBzdWJTZWN0aW9uRGVmaW5pdGlvbiBhcyBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgY29uZGVuc2VkIG1vZGUgY2FuIGJlIGFwcGxpZWQgb24gdGhlIHRhYmxlLlxuICogQHBhcmFtIGN1cnJlbnRGYWNldFxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgYHRydWVgIGZvciBjb21wbGlhbnQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKCkpIHtcblx0XHQvLyBJZiB0aGUgT1AgdXNlIHRoZSB0YWIgYmFzZWQgd2UgY2hlY2sgaWYgdGhlIGZhY2V0cyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBzZWN0aW9uIGFyZSBhbGwgbm9uIHZpc2libGVcblx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0aWYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lmxlbmd0aCAmJiBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggPiAxKSB7XG5cdFx0XHRyZXR1cm4gaGFzTm9PdGhlclZpc2libGVUYWJsZUluVGFyZ2V0cyhjdXJyZW50RmFjZXQsIGZhY2V0c1RvQ3JlYXRlSW5TZWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0OiBGYWNldFR5cGVzLCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbjogRmFjZXRUeXBlc1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbi5ldmVyeShmdW5jdGlvbiAoc3ViRmFjZXQpIHtcblx0XHRpZiAoc3ViRmFjZXQgIT09IGN1cnJlbnRGYWNldCkge1xuXHRcdFx0aWYgKHN1YkZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRjb25zdCByZWZGYWNldCA9IHN1YkZhY2V0O1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdHJlZkZhY2V0LlRhcmdldC4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gcmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHN1YkNvbGxlY3Rpb25GYWNldCA9IHN1YkZhY2V0IGFzIENvbGxlY3Rpb25GYWNldFR5cGVzO1xuXHRcdFx0XHRyZXR1cm4gc3ViQ29sbGVjdGlvbkZhY2V0LkZhY2V0cy5ldmVyeShmdW5jdGlvbiAoZmFjZXQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJSZWZGYWNldCA9IGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0XHRzdWJSZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzdWJSZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiAhPT0gdW5kZWZpbmVkID8gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gOiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BK0VZQSxjQUFjLDBCQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFDSjtJQURW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
|
|
@@ -195,7 +195,8 @@ const visualizationTerms: string[] = [
|
|
|
195
195
|
UIAnnotationTerms.LineItem,
|
|
196
196
|
UIAnnotationTerms.Chart,
|
|
197
197
|
UIAnnotationTerms.PresentationVariant,
|
|
198
|
-
UIAnnotationTerms.SelectionPresentationVariant
|
|
198
|
+
UIAnnotationTerms.SelectionPresentationVariant,
|
|
199
|
+
UIAnnotationTerms.Note
|
|
199
200
|
];
|
|
200
201
|
|
|
201
202
|
/**
|