@sapui5/sap.fe.core 1.121.2 → 1.123.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 +2 -2
- package/src/sap/fe/core/ActionRuntime.ts +1 -2
- package/src/sap/fe/core/CommonUtils.js +14 -171
- package/src/sap/fe/core/CommonUtils.ts +15 -221
- package/src/sap/fe/core/PageController.js +13 -1
- package/src/sap/fe/core/PageController.ts +16 -0
- package/src/sap/fe/core/TemplateComponent.js +6 -1
- package/src/sap/fe/core/TemplateComponent.ts +8 -0
- package/src/sap/fe/core/UIProvider.js +23 -0
- package/src/sap/fe/core/UIProvider.ts +38 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +97 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +120 -50
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +6 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +12 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +42 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +40 -0
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +5 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +5 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +151 -60
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +165 -68
- package/src/sap/fe/core/controllerextensions/HookSupport.js +32 -14
- package/src/sap/fe/core/controllerextensions/HookSupport.ts +35 -14
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +5 -17
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -12
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +15 -10
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +108 -287
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +117 -309
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -2
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +6 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +6 -6
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -4
- package/src/sap/fe/core/controllerextensions/Paginator.js +17 -110
- package/src/sap/fe/core/controllerextensions/Paginator.ts +13 -130
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
- package/src/sap/fe/core/controllerextensions/Recommendations.js +36 -31
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +32 -37
- package/src/sap/fe/core/controllerextensions/Share.js +7 -7
- package/src/sap/fe/core/controllerextensions/Share.ts +6 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.js +52 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -4
- package/src/sap/fe/core/controllerextensions/ViewState.js +32 -46
- package/src/sap/fe/core/controllerextensions/ViewState.ts +24 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +42 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +168 -276
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +182 -310
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +74 -52
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +95 -55
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -17
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +10 -23
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +3 -3
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +2 -2
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +225 -0
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +241 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +69 -48
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +56 -33
- package/src/sap/fe/core/controls/FormElementWrapper.js +8 -11
- package/src/sap/fe/core/controls/FormElementWrapper.ts +9 -0
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +6 -14
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +12 -23
- package/src/sap/fe/core/converters/ConverterContext.js +17 -9
- package/src/sap/fe/core/converters/ConverterContext.ts +55 -41
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +19 -5
- package/src/sap/fe/core/converters/ManifestWrapper.js +14 -4
- package/src/sap/fe/core/converters/ManifestWrapper.ts +21 -10
- package/src/sap/fe/core/converters/MetaModelConverter.js +402 -383
- package/src/sap/fe/core/converters/MetaModelConverter.ts +538 -338
- package/src/sap/fe/core/converters/TemplateConverter.js +4 -2
- package/src/sap/fe/core/converters/TemplateConverter.ts +18 -13
- package/src/sap/fe/core/converters/annotations/DataField.js +30 -28
- package/src/sap/fe/core/converters/annotations/DataField.ts +58 -35
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -4
- package/src/sap/fe/core/converters/controls/Common/Action.ts +34 -28
- package/src/sap/fe/core/converters/controls/Common/Chart.js +37 -33
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +64 -46
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +31 -15
- package/src/sap/fe/core/converters/controls/Common/Form.js +6 -4
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -11
- package/src/sap/fe/core/converters/controls/Common/Table.js +197 -101
- package/src/sap/fe/core/converters/controls/Common/Table.ts +393 -182
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +4 -5
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +38 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +41 -11
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +112 -45
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +7 -7
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +18 -12
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +5 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +19 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +64 -63
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +109 -100
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -11
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +35 -30
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +12 -9
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +6 -6
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +3 -3
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +11 -6
- package/src/sap/fe/core/converters/helpers/Key.js +2 -2
- package/src/sap/fe/core/converters/helpers/Key.ts +4 -4
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -2
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +21 -19
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +43 -31
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +16 -12
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +8 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +41 -21
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +24 -19
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +2 -1
- package/src/sap/fe/core/filter/DraftEditState.fragment.xml +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -6
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +5 -4
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -13
- package/src/sap/fe/core/formatters/FPMFormatter.ts +11 -10
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.ts +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +4 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -7
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/ValueFormatter.js +35 -6
- package/src/sap/fe/core/formatters/ValueFormatter.ts +31 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +54 -33
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +62 -41
- package/src/sap/fe/core/helpers/BindingToolkit.js +17 -3
- package/src/sap/fe/core/helpers/BindingToolkit.ts +28 -6
- package/src/sap/fe/core/helpers/ClassSupport.js +32 -13
- package/src/sap/fe/core/helpers/ClassSupport.ts +35 -15
- package/src/sap/fe/core/helpers/DeleteHelper.js +71 -61
- package/src/sap/fe/core/helpers/DeleteHelper.ts +125 -103
- package/src/sap/fe/core/helpers/DraftEditState.js +5 -3
- package/src/sap/fe/core/helpers/DraftEditState.ts +3 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +43 -46
- package/src/sap/fe/core/helpers/FPMHelper.ts +50 -56
- package/src/sap/fe/core/helpers/MetaModelFunction.js +77 -53
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +78 -57
- package/src/sap/fe/core/helpers/ModelHelper.js +10 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +12 -6
- package/src/sap/fe/core/helpers/PasteHelper.js +194 -7
- package/src/sap/fe/core/helpers/PasteHelper.ts +265 -13
- package/src/sap/fe/core/helpers/PromiseKeeper.js +66 -0
- package/src/sap/fe/core/helpers/PromiseKeeper.ts +56 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +30 -19
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +34 -22
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -2
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +26 -52
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +37 -63
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.ts +17 -14
- package/src/sap/fe/core/helpers/TypeGuards.js +27 -3
- package/src/sap/fe/core/helpers/TypeGuards.ts +37 -7
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +48 -8
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +40 -9
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +5 -2
- package/src/sap/fe/core/messagebundle_da.properties +1 -1
- package/src/sap/fe/core/messagebundle_en.properties +267 -2
- package/src/sap/fe/core/messagebundle_sl.properties +1 -1
- package/src/sap/fe/core/operationsHelper.js +2 -1
- package/src/sap/fe/core/operationsHelper.ts +1 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.js +27 -14
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +27 -14
- package/src/sap/fe/core/services/ShellServicesFactory.js +49 -12
- package/src/sap/fe/core/services/ShellServicesFactory.ts +62 -13
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +156 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +218 -100
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +3 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +6 -6
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +3 -2
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +6 -3
- package/src/sap/fe/core/templating/CommonFormatters.ts +13 -12
- package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +37 -14
- package/src/sap/fe/core/templating/DataFieldFormatters.js +12 -11
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +35 -24
- package/src/sap/fe/core/templating/DataModelPathHelper.js +22 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +61 -51
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +8 -3
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +3 -3
- package/src/sap/fe/core/templating/FieldControlHelper.ts +27 -8
- package/src/sap/fe/core/templating/FilterHelper.js +13 -10
- package/src/sap/fe/core/templating/FilterHelper.ts +80 -46
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +2 -2
- package/src/sap/fe/core/templating/PropertyFormatters.js +6 -8
- package/src/sap/fe/core/templating/PropertyFormatters.ts +11 -11
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
- package/src/sap/fe/core/templating/PropertyHelper.ts +4 -4
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +157 -13
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +182 -16
- package/src/sap/fe/core/templating/UIFormatters.js +23 -22
- package/src/sap/fe/core/templating/UIFormatters.ts +94 -66
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -2
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/EDM.ts +2 -2
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.ts +2 -2
|
@@ -17,7 +17,8 @@ import type { DefaultTypeForEdmType } from "sap/fe/core/type/EDM";
|
|
|
17
17
|
import { isTypeFilterable } from "sap/fe/core/type/EDM";
|
|
18
18
|
import type Context from "sap/ui/model/Context";
|
|
19
19
|
import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
20
|
-
import type { ExpandPathType, MetaModelEntitySetAnnotation,
|
|
20
|
+
import type { ExpandPathType, MetaModelEntitySetAnnotation, MetaModelType } from "types/metamodel_types";
|
|
21
|
+
import { getInvolvedDataModelObjects } from "../converters/MetaModelConverter";
|
|
21
22
|
|
|
22
23
|
// From FilterBar.block.ts only
|
|
23
24
|
export function getSearchRestrictions(fullPath: string, metaModel: ODataMetaModel) {
|
|
@@ -252,54 +253,53 @@ export function isPropertyFilterable(
|
|
|
252
253
|
return checkEntitySetIsFilterable(entitySetPath, metaModelContext, property, navigationContext);
|
|
253
254
|
}
|
|
254
255
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
256
|
+
/**
|
|
257
|
+
* This function processes the entity properties and returns an array of required, non-computed key and immutable fields.
|
|
258
|
+
* @param metaModel Metamodel
|
|
259
|
+
* @param path Entityset Path
|
|
260
|
+
* @param appComponent App Component
|
|
261
|
+
* @returns An array of required, non-computed key and immutable fields
|
|
262
|
+
*/
|
|
263
|
+
export function getCreatePopupFields(metaModel: ODataMetaModel, path: string, appComponent?: AppComponent): string[] {
|
|
264
|
+
const dataModel = getInvolvedDataModelObjects(metaModel.getContext(path));
|
|
258
265
|
const nonComputedVisibleKeys: string[] = [];
|
|
259
266
|
const immutableVisibleFields: string[] = [];
|
|
260
|
-
const
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
267
|
+
const visibileRequiredProperties: string[] = [];
|
|
268
|
+
//We first process the required properties
|
|
269
|
+
const requiredProperties = METAMODEL_FUNCTIONS.getRequiredPropertiesFromInsertRestrictions(path, metaModel);
|
|
270
|
+
const entityProperties = dataModel.targetEntityType.entityProperties;
|
|
271
|
+
for (const prop of entityProperties) {
|
|
272
|
+
const annotations = prop.annotations,
|
|
273
|
+
isKey = prop.isKey,
|
|
274
|
+
propName = prop.name,
|
|
275
|
+
isImmutable = annotations.Core?.Immutable?.valueOf() === true,
|
|
276
|
+
isNonComputed = !(annotations.Core?.Computed?.valueOf() === true),
|
|
277
|
+
isVisible = !(annotations.UI?.Hidden?.valueOf() === true),
|
|
278
|
+
isComputedDefaultValue = annotations.Core?.ComputedDefaultValue?.valueOf() === true,
|
|
279
|
+
isKeyComputedDefaultValueWithText =
|
|
280
|
+
isKey && prop.type === "Edm.Guid" ? isComputedDefaultValue && annotations.Common?.Text : false;
|
|
281
|
+
if ((isKeyComputedDefaultValueWithText || (isKey && prop.type !== "Edm.Guid")) && isNonComputed && isVisible) {
|
|
282
|
+
nonComputedVisibleKeys.push(propName);
|
|
283
|
+
} else if (requiredProperties.includes(propName) && isVisible && !(isKey && !nonComputedVisibleKeys.includes(propName))) {
|
|
284
|
+
visibileRequiredProperties.push(propName);
|
|
285
|
+
} else if (isImmutable && isNonComputed && isVisible) {
|
|
286
|
+
immutableVisibleFields.push(propName);
|
|
287
|
+
}
|
|
278
288
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
289
|
+
if (!isNonComputed && isComputedDefaultValue && appComponent) {
|
|
290
|
+
const diagnostics = appComponent.getDiagnostics();
|
|
291
|
+
const message = "Core.ComputedDefaultValue is ignored as Core.Computed is already set to true";
|
|
292
|
+
diagnostics.addIssue(
|
|
293
|
+
IssueCategory.Annotation,
|
|
294
|
+
IssueSeverity.Medium,
|
|
295
|
+
message,
|
|
296
|
+
IssueCategoryType,
|
|
297
|
+
IssueCategoryType.Annotations.IgnoredAnnotation
|
|
298
|
+
);
|
|
290
299
|
}
|
|
291
300
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
requiredProperties.forEach(function (property: string) {
|
|
295
|
-
const annotations = metaModelContext.getObject(`${path}/${property}@`) as Record<string, unknown> | undefined,
|
|
296
|
-
isVisible = !annotations?.["@com.sap.vocabularies.UI.v1.Hidden"];
|
|
297
|
-
if (isVisible && !nonComputedVisibleKeys.includes(property) && !immutableVisibleFields.includes(property)) {
|
|
298
|
-
nonComputedVisibleKeys.push(property);
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
return nonComputedVisibleKeys.concat(immutableVisibleFields);
|
|
301
|
+
//The order of fields will be non computed key fields, required properties and then non computed immutable fields.
|
|
302
|
+
return nonComputedVisibleKeys.concat(visibileRequiredProperties).concat(immutableVisibleFields);
|
|
303
303
|
}
|
|
304
304
|
// Internal only, exposed for tests
|
|
305
305
|
function getRequiredProperties(path: string, metaModelContext: ODataMetaModel, checkUpdateRestrictions = false) {
|
|
@@ -552,24 +552,17 @@ export function getFilterRestrictionsInfo(filterRestrictions?: MetaModelType<Fil
|
|
|
552
552
|
}
|
|
553
553
|
}
|
|
554
554
|
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
filterRestrictionsInfo.propertyInfo[propertyName] = {
|
|
559
|
-
filterable: false
|
|
560
|
-
};
|
|
561
|
-
}
|
|
562
|
-
}
|
|
555
|
+
const nonFilterableProperties = filterRestrictions.NonFilterableProperties?.map((prop) => prop.$PropertyPath) || [];
|
|
556
|
+
const filterableProperties = filterRestrictions.FilterExpressionRestrictions?.map((prop) => prop.Property?.$PropertyPath) || [];
|
|
557
|
+
getFilterableData(filterRestrictionsInfo.propertyInfo, nonFilterableProperties, filterableProperties);
|
|
563
558
|
|
|
564
559
|
if (filterRestrictions.FilterExpressionRestrictions) {
|
|
565
560
|
//TBD
|
|
566
561
|
for (i = 0; i < filterRestrictions.FilterExpressionRestrictions.length; i++) {
|
|
567
562
|
propertyName = filterRestrictions.FilterExpressionRestrictions[i].Property?.$PropertyPath;
|
|
568
563
|
if (propertyName) {
|
|
569
|
-
filterRestrictionsInfo.propertyInfo[propertyName] =
|
|
570
|
-
|
|
571
|
-
allowedExpressions: filterRestrictions.FilterExpressionRestrictions[i].AllowedExpressions as unknown as string[]
|
|
572
|
-
};
|
|
564
|
+
filterRestrictionsInfo.propertyInfo[propertyName]["allowedExpressions"] = filterRestrictions.FilterExpressionRestrictions[i]
|
|
565
|
+
.AllowedExpressions as unknown as string[];
|
|
573
566
|
}
|
|
574
567
|
}
|
|
575
568
|
}
|
|
@@ -577,6 +570,33 @@ export function getFilterRestrictionsInfo(filterRestrictions?: MetaModelType<Fil
|
|
|
577
570
|
return filterRestrictionsInfo;
|
|
578
571
|
}
|
|
579
572
|
|
|
573
|
+
/**
|
|
574
|
+
* This function will update the obj to have list of properties which can be filtered or not.
|
|
575
|
+
*
|
|
576
|
+
* @param filterDataObj
|
|
577
|
+
* @param nonFilterableProperties
|
|
578
|
+
* @param filterableProperties
|
|
579
|
+
*/
|
|
580
|
+
export function getFilterableData(
|
|
581
|
+
filterDataObj: Record<string, FilterRestrictionsPropertyInfoType>,
|
|
582
|
+
nonFilterableProperties: string[],
|
|
583
|
+
filterableProperties: (string | undefined)[]
|
|
584
|
+
): void {
|
|
585
|
+
for (let i = 0; i < nonFilterableProperties.length; i++) {
|
|
586
|
+
filterDataObj[nonFilterableProperties[i]] = {
|
|
587
|
+
filterable: false
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
for (let i = 0; i < filterableProperties.length; i++) {
|
|
591
|
+
const propName = filterableProperties[i];
|
|
592
|
+
if (propName) {
|
|
593
|
+
filterDataObj[propName] = {
|
|
594
|
+
filterable: true
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
|
|
580
600
|
// Used in ChartDelegate and ValueHelp-TableDelegate
|
|
581
601
|
/**
|
|
582
602
|
* Provides the information if the FilterExpression is a multiValue Filter Expression.
|
|
@@ -608,5 +628,6 @@ export const METAMODEL_FUNCTIONS = {
|
|
|
608
628
|
hasRestrictedPropertiesInAnnotations,
|
|
609
629
|
getRequiredPropertiesFromInsertRestrictions,
|
|
610
630
|
getNavigationRestrictions,
|
|
611
|
-
getAllCustomAggregates
|
|
631
|
+
getAllCustomAggregates,
|
|
632
|
+
getFilterableData
|
|
612
633
|
};
|
|
@@ -6,6 +6,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
|
|
9
|
+
var isNavigationProperty = TypeGuards.isNavigationProperty;
|
|
9
10
|
var isEntitySet = TypeGuards.isEntitySet;
|
|
10
11
|
var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
|
|
11
12
|
const ModelHelper = {
|
|
@@ -51,7 +52,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
|
|
|
51
52
|
const currentEntitySet = dataModelObjectPath.targetEntitySet;
|
|
52
53
|
const bIsDraftRoot = ModelHelper.isDraftRoot(currentEntitySet);
|
|
53
54
|
const bIsDraftNode = ModelHelper.isDraftNode(currentEntitySet);
|
|
54
|
-
const bIsDraftParentEntityForContainment = (_dataModelObjectPath$ = dataModelObjectPath.targetObject) !== null && _dataModelObjectPath$ !== void 0 && _dataModelObjectPath$.containsTarget && ((_dataModelObjectPath$2 = dataModelObjectPath.startingEntitySet) !== null && _dataModelObjectPath$2 !== void 0 && (_dataModelObjectPath$3 = _dataModelObjectPath$2.annotations) !== null && _dataModelObjectPath$3 !== void 0 && (_dataModelObjectPath$4 = _dataModelObjectPath$3.Common) !== null && _dataModelObjectPath$4 !== void 0 && _dataModelObjectPath$4.DraftRoot || (_dataModelObjectPath$5 = dataModelObjectPath.startingEntitySet) !== null && _dataModelObjectPath$5 !== void 0 && (_dataModelObjectPath$6 = _dataModelObjectPath$5.annotations) !== null && _dataModelObjectPath$6 !== void 0 && (_dataModelObjectPath$7 = _dataModelObjectPath$6.Common) !== null && _dataModelObjectPath$7 !== void 0 && _dataModelObjectPath$7.DraftNode) ? true : false;
|
|
55
|
+
const bIsDraftParentEntityForContainment = isNavigationProperty(dataModelObjectPath.targetObject) && (_dataModelObjectPath$ = dataModelObjectPath.targetObject) !== null && _dataModelObjectPath$ !== void 0 && _dataModelObjectPath$.containsTarget && ((_dataModelObjectPath$2 = dataModelObjectPath.startingEntitySet) !== null && _dataModelObjectPath$2 !== void 0 && (_dataModelObjectPath$3 = _dataModelObjectPath$2.annotations) !== null && _dataModelObjectPath$3 !== void 0 && (_dataModelObjectPath$4 = _dataModelObjectPath$3.Common) !== null && _dataModelObjectPath$4 !== void 0 && _dataModelObjectPath$4.DraftRoot || (_dataModelObjectPath$5 = dataModelObjectPath.startingEntitySet) !== null && _dataModelObjectPath$5 !== void 0 && (_dataModelObjectPath$6 = _dataModelObjectPath$5.annotations) !== null && _dataModelObjectPath$6 !== void 0 && (_dataModelObjectPath$7 = _dataModelObjectPath$6.Common) !== null && _dataModelObjectPath$7 !== void 0 && _dataModelObjectPath$7.DraftNode) ? true : false;
|
|
55
56
|
return bIsDraftRoot || bIsDraftNode || !currentEntitySet && bIsDraftParentEntityForContainment;
|
|
56
57
|
},
|
|
57
58
|
/**
|
|
@@ -512,7 +513,11 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
|
|
|
512
513
|
const fnBindProperty = odataModel.bindProperty.bind(odataModel);
|
|
513
514
|
odataModel.bindProperty = function (path, context, parameters) {
|
|
514
515
|
if (path.includes("@$ui5.fe.")) {
|
|
515
|
-
|
|
516
|
+
const propBinding = this._localAnnotationModel.bindProperty(path, context);
|
|
517
|
+
propBinding.updateRequired = function (model) {
|
|
518
|
+
return model && model === odataModel;
|
|
519
|
+
};
|
|
520
|
+
return propBinding;
|
|
516
521
|
}
|
|
517
522
|
return fnBindProperty(path, context, parameters);
|
|
518
523
|
};
|
|
@@ -537,7 +542,8 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
|
|
|
537
542
|
const metaModelPath = path.substring(11, path.length - 1);
|
|
538
543
|
try {
|
|
539
544
|
if (converterContext) {
|
|
540
|
-
|
|
545
|
+
var _converterContext$get;
|
|
546
|
+
text = ((_converterContext$get = converterContext.getEntityTypeAnnotation(metaModelPath).annotation) === null || _converterContext$get === void 0 ? void 0 : _converterContext$get.toString()) ?? "";
|
|
541
547
|
} else {
|
|
542
548
|
text = metaModel === null || metaModel === void 0 ? void 0 : metaModel.getObject(metaModelPath);
|
|
543
549
|
}
|
|
@@ -564,4 +570,4 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
|
|
|
564
570
|
};
|
|
565
571
|
return ModelHelper;
|
|
566
572
|
}, false);
|
|
567
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2RlbEhlbHBlciIsImRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJtZXRhTW9kZWwiLCJlbnRpdHlDb250YWluZXIiLCJnZXRPYmplY3QiLCJlbnRpdHlTZXROYW1lIiwiJGtpbmQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwicGF0aCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiY3VycmVudEVudGl0eVNldCIsInRhcmdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsImlzRHJhZnRSb290IiwiYklzRHJhZnROb2RlIiwiaXNEcmFmdE5vZGUiLCJiSXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50IiwidGFyZ2V0T2JqZWN0IiwiY29udGFpbnNUYXJnZXQiLCJzdGFydGluZ0VudGl0eVNldCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRHJhZnRSb290IiwiRHJhZnROb2RlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJtZXRhT2JqZWN0IiwidGVtcGxhdGVJbnRlcmZhY2UiLCJvTWV0YU1vZGVsIiwiY29udGV4dCIsImdldE1vZGVsIiwib0VudGl0eUNvbnRhaW5lciIsInNFbnRpdHlTZXQiLCJnZXREcmFmdFJvb3RQYXRoIiwib0NvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRSb290UGF0aCIsInNQYXRoIiwibW9kZWwiLCJmaXJzdEl0ZXJhdGlvbiIsInNJdGVyYXRpb25QYXRoIiwiUmVnRXhwIiwiZXhlYyIsInNFbnRpdHlQYXRoIiwiZ2V0TWV0YVBhdGgiLCJtRGF0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0Q29udGV4dCIsInVuZGVmaW5lZCIsImdldFBhdGgiLCJnZXRTdGlja3lSb290UGF0aCIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0VGFyZ2V0RW50aXR5U2V0Iiwic0VudGl0eVNldFBhdGgiLCJnZXRFbnRpdHlTZXRQYXRoIiwib2RhdGFNZXRhTW9kZWwiLCJlbnRpdHlTZXRQYXRoIiwic3BsaXQiLCJmaWx0ZXIiLCJmaWx0ZXJPdXROYXZQcm9wQmluZGluZyIsImpvaW4iLCJwYXRoUGFydHMiLCJsZW5ndGgiLCJpbml0aWFsUGF0aE9iamVjdCIsImdyb3dpbmdQYXRoIiwicGVuZGluZ05hdlByb3BCaW5kaW5nIiwicGF0aE9iamVjdCIsInJlZHVjZSIsInBhdGhVbmRlckNvbnN0cnVjdGlvbiIsInBhdGhQYXJ0IiwiaWR4IiwiZGVsaW1pdGVyIiwidGVtcFBhdGgiLCJuYXZQcm9wQmluZGluZ3MiLCJuYXZQcm9wQmluZGluZ1RvQ2hlY2siLCJPYmplY3QiLCJrZXlzIiwiaGFzT3duUHJvcGVydHkiLCJyZXBsYWNlIiwiZ2V0QWN0aW9uUGFyYW1ldGVySXRlbXNNb2RlbFBhdGgiLCJvUGFyYW1ldGVyIiwiJE5hbWUiLCJzUGF0aFBhcnQiLCJlbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwiLCJvSW50ZXJuYWxNb2RlbCIsImZuQmluZENvbnRleHQiLCJiaW5kQ29udGV4dCIsIm1QYXJhbWV0ZXJzIiwiYXJncyIsImFwcGx5IiwiZm5HZXRCb3VuZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzdWJBcmdzIiwib0JvdW5kQ29udGV4dCIsInNldFByb3BlcnR5IiwicHJvcGVydHlQYXRoIiwidmFsdWUiLCJwcm9wZXJ0eVBhdGhTcGxpdCIsImkiLCJlbmhhbmNlVWlKU09OTW9kZWwiLCJ1aU1vZGVsIiwibGlicmFyeSIsImZuU2V0UHJvcGVydHkiLCJFZGl0TW9kZSIsIkVkaXRhYmxlIiwiRGlzcGxheSIsImVuaGFuY2VWaWV3SlNPTk1vZGVsIiwidmlld01vZGVsIiwiZm5HZXRPYmplY3QiLCJfZ2V0T2JqZWN0IiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiYUZpbHRlckZ1bmN0aW9ucyIsImluZGV4T2YiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJvTW9kZWwiLCJnZXRSb290RW50aXR5U2V0UGF0aCIsImNvbnRleHRQYXRoIiwicm9vdEVudGl0eVNldFBhdGgiLCJhUGF0aHMiLCJnZXRBYnNvbHV0ZU1ldGFQYXRoRm9yTGlzdEJpbmRpbmciLCJvVmlldyIsInZMaXN0QmluZGluZyIsInNNZXRhUGF0aCIsInN0YXJ0c1dpdGgiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNSb290Q29udGV4dFBhdGgiLCJvQmluZGluZyIsIm9Sb290QmluZGluZyIsImdldFJvb3RCaW5kaW5nIiwic1Jvb3RCaW5kaW5nUGF0aCIsInNSZWxhdGl2ZVBhdGgiLCJlbnRpdHlTZXQiLCJnZXREcmFmdFJvb3QiLCJnZXREcmFmdE5vZGUiLCJpc1N0aWNreSIsImdldFN0aWNreVNlc3Npb24iLCJpc1VwZGF0ZUhpZGRlbiIsImVudGl0eVR5cGUiLCJpc0VudGl0eVNldCIsIlVJIiwiVXBkYXRlSGlkZGVuIiwiZ2V0RGVsZXRlSGlkZGVuIiwiRGVsZXRlSGlkZGVuIiwiZ2V0QWJzb2x1dGVQYXRoRnJvbUxpc3RCaW5kaW5nIiwibGlzdEJpbmRpbmciLCJtZXRhbW9kZWwiLCJtZXRhUGF0aCIsInJvb3RCaW5kaW5nIiwicm9vdEJpbmRpbmdQYXRoIiwicmVsYXRpdmVQYXRoIiwiZW5oYW5jZU9EYXRhTW9kZWwiLCJvZGF0YU1vZGVsIiwiZm5NZXNzYWdlIiwic2V0TWVzc2FnZXMiLCJsb2NhbEFubm90YXRpb25Nb2RlbCIsIkpTT05Nb2RlbCIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIkJpbmRpbmdNb2RlIiwiT25lV2F5IiwiYmFzZVNldFByb3BlcnR5IiwiYmFzZUdldFByb3BlcnR5IiwiZ2V0UHJvcGVydHkiLCJfcHJvcGVydHlOYW1lIiwiYW5ub3RhdGlvblR5cGUiLCJhc3luY1VwZGF0ZSIsImZ1bGxQYXRoIiwicGF0aEZyb21Sb290IiwiY2xlYXJBbm5vdGF0aW9uVHlwZSIsImFubm90YXRpb25UeXBlcyIsImRhdGFTZXQiLCJlbmRzV2l0aCIsIl9sb2NhbEFubm90YXRpb25Nb2RlbCIsImdldExvY2FsQW5ub3RhdGlvbk1vZGVsIiwibWVzc2FnZXMiLCJjbGVhbmVkRGF0YSIsImdldERhdGEiLCJzZXREYXRhIiwibWVzc2FnZVRhcmdldCIsImdldFR5cGUiLCJnZXRNZXNzYWdlIiwiZm5CaW5kUHJvcGVydHkiLCJiaW5kUHJvcGVydHkiLCJiaW5kIiwicGFyYW1ldGVycyIsImluY2x1ZGVzIiwiZm5EZXN0cm95IiwiZGVzdHJveSIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJjb252ZXJ0ZXJDb250ZXh0IiwidGV4dCIsIm1ldGFNb2RlbFBhdGgiLCJzdWJzdHJpbmciLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJ0b1N0cmluZyIsImUiLCJMb2ciLCJpbmZvIiwiZ2V0TWVzc2FnZXNQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsIk1lc3NhZ2VzIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1vZGVsSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIFRoaXMgY2xhc3MgY29udGFpbnMgaGVscGVycyB0byBiZSB1c2VkIGF0IHJ1bnRpbWUgdG8gcmV0cmlldmUgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgbW9kZWwgKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBTaW5nbGV0b24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRHJhZnROb2RlLCBEcmFmdFJvb3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBTdGlja3lTZXNzaW9uU3VwcG9ydGVkIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9TZXNzaW9uXCI7XG5pbXBvcnQgdHlwZSB7IERlbGV0ZUhpZGRlbiwgVXBkYXRlSGlkZGVuIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBCYXNlQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCBCaW5kaW5nTW9kZSBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdNb2RlXCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIENvbnRleHQsIGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcIi4uL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuXG5jb25zdCBNb2RlbEhlbHBlciA9IHtcblx0Ly8gZ2xvYmFsIHN3aXRjaCB0byBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGJ5IGEgcHJpdmF0ZSBtYW5pZmVzdCBmbGFnXG5cdC8vIHRoaXMgYWxsb3dzIGN1c3RvbWVycyB0byBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGluIGNhc2Ugd2UgcnVuIGludG8gaXNzdWVzIHdpdGggdGhlIGZpcnN0IGRlbGl2ZXJ5XG5cdC8vIHRoaXMgd2lsbCBiZSByZW1vdmVkIHdpdGggdGhlIG5leHQgUy80IHJlbGVhc2Vcblx0ZGlzYWJsZUNvbGxhYm9yYXRpb25EcmFmdDogZmFsc2UsXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2dyYW1taW5nIG1vZGVsIGlzIHN0aWNreS5cblx0ICpcblx0ICogQHBhcmFtIG1ldGFNb2RlbCBPRGF0YU1vZGVsTWV0YU1vZGVsIHRvIGNoZWNrIGZvciBzdGlja3kgZW5hYmxlZCBlbnRpdHlcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHN0aWNreSwgZWxzZSBmYWxzZVxuXHQgKi9cblx0aXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkOiBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRcdGNvbnN0IGVudGl0eUNvbnRhaW5lciA9IG1ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRcdGZvciAoY29uc3QgZW50aXR5U2V0TmFtZSBpbiBlbnRpdHlDb250YWluZXIpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0ZW50aXR5Q29udGFpbmVyW2VudGl0eVNldE5hbWVdLiRraW5kID09PSBcIkVudGl0eVNldFwiICYmXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke2VudGl0eVNldE5hbWV9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZGApXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiB0aGUgcHJvZ3JhbW1pbmcgbW9kZWwgaXMgZHJhZnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgT0RhdGFNb2RlbE1ldGFNb2RlbCBvZiB0aGUgY29udGV4dCBmb3Igd2hpY2ggZHJhZnQgc3VwcG9ydCBzaGFsbCBiZSBjaGVja2VkXG5cdCAqIEBwYXJhbSBwYXRoIFBhdGggZm9yIHdoaWNoIGRyYWZ0IHN1cHBvcnQgc2hhbGwgYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgZHJhZnQsIGVsc2UgZmFsc2Vcblx0ICovXG5cdGlzRHJhZnRTdXBwb3J0ZWQ6IGZ1bmN0aW9uIChtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBwYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChwYXRoKTtcblx0XHRjb25zdCBvYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblx0XHRyZXR1cm4gdGhpcy5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChvYmplY3RQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGRyYWZ0IGlzIHN1cHBvcnRlZCBmb3IgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcblx0ICovXG5cdGlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQ7XG5cdFx0Y29uc3QgYklzRHJhZnRSb290ID0gTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnROb2RlID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCA9XG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uY29udGFpbnNUYXJnZXQgJiZcblx0XHRcdCgoZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgfHxcblx0XHRcdFx0KGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnROb2RlKVxuXHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0OiBmYWxzZTtcblxuXHRcdHJldHVybiBiSXNEcmFmdFJvb3QgfHwgYklzRHJhZnROb2RlIHx8ICghY3VycmVudEVudGl0eVNldCAmJiBiSXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50KTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiB0aGUgc2VydmljZSwgc3VwcG9ydHMgY29sbGFib3JhdGlvbiBkcmFmdC5cblx0ICpcblx0ICogQHBhcmFtIG1ldGFPYmplY3QgTWV0YU9iamVjdCB0byBiZSB1c2VkIGZvciBkZXRlcm1pbmF0aW9uXG5cdCAqIEBwYXJhbSB0ZW1wbGF0ZUludGVyZmFjZSBBUEkgcHJvdmlkZWQgYnkgVUk1IHRlbXBsYXRpbmcgaWYgdXNlZFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIHNlcnZpY2Ugc3VwcG9ydHMgY29sbGFib3JhdGlvbiBkcmFmdCwgZWxzZSBmYWxzZVxuXHQgKi9cblx0aXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQ6IGZ1bmN0aW9uIChtZXRhT2JqZWN0OiBhbnksIHRlbXBsYXRlSW50ZXJmYWNlPzogYW55KSB7XG5cdFx0aWYgKCF0aGlzLmRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQpIHtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAodGVtcGxhdGVJbnRlcmZhY2U/LmNvbnRleHQ/LmdldE1vZGVsKCkgfHwgbWV0YU9iamVjdCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBzRW50aXR5U2V0IGluIG9FbnRpdHlDb250YWluZXIpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9FbnRpdHlDb250YWluZXJbc0VudGl0eVNldF0uJGtpbmQgPT09IFwiRW50aXR5U2V0XCIgJiZcblx0XHRcdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7c0VudGl0eVNldH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC9TaGFyZUFjdGlvbmApXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgcGF0aCBvZiB0aGUgRHJhZnRSb290IHBhdGggYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgT2RhdGFNb2RlbCBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHBhdGggb2YgdGhlIGRyYWZ0Um9vdCBlbnRpdHksIG9yIHVuZGVmaW5lZCBpZiBubyBkcmFmdFJvb3QgaXMgZm91bmRcblx0ICovXG5cdGdldERyYWZ0Um9vdFBhdGg6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZ2V0Um9vdFBhdGggPSBmdW5jdGlvbiAoc1BhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwsIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRjb25zdCBzSXRlcmF0aW9uUGF0aCA9IGZpcnN0SXRlcmF0aW9uID8gc1BhdGggOiBuZXcgUmVnRXhwKC8uKig/PVxcLykvKS5leGVjKHNQYXRoKT8uWzBdOyAvLyAqUmVnZXggdG8gZ2V0IHRoZSBhbmNlc3RvclxuXHRcdFx0aWYgKHNJdGVyYXRpb25QYXRoICYmIHNJdGVyYXRpb25QYXRoICE9PSBcIi9cIikge1xuXHRcdFx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc0l0ZXJhdGlvblBhdGgpO1xuXHRcdFx0XHRjb25zdCBtRGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQoc0VudGl0eVBhdGgpKTtcblx0XHRcdFx0aWYgKChtRGF0YU1vZGVsLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCkge1xuXHRcdFx0XHRcdHJldHVybiBzSXRlcmF0aW9uUGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZ2V0Um9vdFBhdGgoc0l0ZXJhdGlvblBhdGgsIG1vZGVsLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH07XG5cdFx0cmV0dXJuIGdldFJvb3RQYXRoKG9Db250ZXh0LmdldFBhdGgoKSwgb0NvbnRleHQuZ2V0TW9kZWwoKSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHBhdGggb2YgdGhlIFN0aWNreVJvb3QgcGF0aCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPZGF0YU1vZGVsIGNvbnRleHRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgU3RpY2t5Um9vdCBlbnRpdHksIG9yIHVuZGVmaW5lZCBpZiBubyBTdGlja3lSb290IGlzIGZvdW5kXG5cdCAqL1xuXHRnZXRTdGlja3lSb290UGF0aDogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBnZXRSb290UGF0aCA9IGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCwgZmlyc3RJdGVyYXRpb24gPSB0cnVlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRcdGNvbnN0IHNJdGVyYXRpb25QYXRoID0gZmlyc3RJdGVyYXRpb24gPyBzUGF0aCA6IG5ldyBSZWdFeHAoLy4qKD89XFwvKS8pLmV4ZWMoc1BhdGgpPy5bMF07IC8vICpSZWdleCB0byBnZXQgdGhlIGFuY2VzdG9yXG5cdFx0XHRpZiAoc0l0ZXJhdGlvblBhdGggJiYgc0l0ZXJhdGlvblBhdGggIT09IFwiL1wiKSB7XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzSXRlcmF0aW9uUGF0aCk7XG5cdFx0XHRcdGNvbnN0IG1EYXRhTW9kZWwgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWwuZ2V0Q29udGV4dChzRW50aXR5UGF0aCkpO1xuXHRcdFx0XHRpZiAoKG1EYXRhTW9kZWwudGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNJdGVyYXRpb25QYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBnZXRSb290UGF0aChzSXRlcmF0aW9uUGF0aCwgbW9kZWwsIGZhbHNlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gZ2V0Um9vdFBhdGgob0NvbnRleHQuZ2V0UGF0aCgpLCBvQ29udGV4dC5nZXRNb2RlbCgpKTtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHBhdGggdG8gdGhlIHRhcmdldCBlbnRpdHkgc2V0IHZpYSBuYXZpZ2F0aW9uIHByb3BlcnR5IGJpbmRpbmcuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgdGFyZ2V0IGVudGl0eSBzZXQgd2lsbCBiZSBkZXRlcm1pbmVkXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHBhdGggdG8gdGhlIHRhcmdldCBlbnRpdHkgc2V0XG5cdCAqL1xuXHRnZXRUYXJnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uIChvQ29udGV4dDogQmFzZUNvbnRleHQpIHtcblx0XHRjb25zdCBzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAoXG5cdFx0XHRvQ29udGV4dC5nZXRPYmplY3QoXCIka2luZFwiKSA9PT0gXCJFbnRpdHlTZXRcIiB8fFxuXHRcdFx0b0NvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgPT09IFwiQWN0aW9uXCIgfHxcblx0XHRcdG9Db250ZXh0LmdldE9iamVjdChcIjAvJGtpbmRcIikgPT09IFwiQWN0aW9uXCJcblx0XHQpIHtcblx0XHRcdHJldHVybiBzUGF0aDtcblx0XHR9XG5cdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNQYXRoKTtcblx0XHRyZXR1cm4gYC8ke29Db250ZXh0LmdldE9iamVjdChzRW50aXR5U2V0UGF0aCl9YDtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyBjb21wbGV0ZSBwYXRoIHRvIHRoZSBlbnRpdHkgc2V0IHZpYSB1c2luZyBuYXZpZ2F0aW9uIHByb3BlcnR5IGJpbmRpbmcuIE5vdGU6IFRvIGJlIHVzZWQgb25seSBhZnRlciB0aGUgbWV0YW1vZGVsIGhhcyBsb2FkZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBwYXRoIFBhdGggZm9yIHdoaWNoIGNvbXBsZXRlIGVudGl0eVNldCBwYXRoIG5lZWRzIHRvIGJlIGRldGVybWluZWQgZnJvbSBlbnRpdHlUeXBlIHBhdGhcblx0ICogQHBhcmFtIG9kYXRhTWV0YU1vZGVsIE1ldGFtb2RlbCB0byBiZSB1c2VkLihPcHRpb25hbCBpbiBub3JtYWwgc2NlbmFyaW9zLCBidXQgbmVlZGVkIGZvciBwYXJhbWV0ZXJpemVkIHNlcnZpY2Ugc2NlbmFyaW9zKVxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGNvbXBsZXRlIHBhdGggdG8gdGhlIGVudGl0eSBzZXRcblx0ICovXG5cdGdldEVudGl0eVNldFBhdGg6IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIG9kYXRhTWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWwpIHtcblx0XHRsZXQgZW50aXR5U2V0UGF0aCA9IFwiXCI7XG5cdFx0aWYgKCFvZGF0YU1ldGFNb2RlbCkge1xuXHRcdFx0Ly8gUHJldmlvdXMgaW1wbGVtZW50YXRpb24gZm9yIGdldHRpbmcgZW50aXR5U2V0UGF0aCBmcm9tIGVudGl0eVR5cGVQYXRoXG5cdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke3BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZykuam9pbihcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIil9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2FsY3VsYXRpbmcgdGhlIGVudGl0eVNldFBhdGggZnJvbSBNZXRhTW9kZWwuXG5cdFx0XHRjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRcdFx0aWYgKHBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdGNvbnN0IGluaXRpYWxQYXRoT2JqZWN0ID0ge1xuXHRcdFx0XHRcdGdyb3dpbmdQYXRoOiBcIi9cIixcblx0XHRcdFx0XHRwZW5kaW5nTmF2UHJvcEJpbmRpbmc6IFwiXCJcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCBwYXRoT2JqZWN0ID0gcGF0aFBhcnRzLnJlZHVjZSgocGF0aFVuZGVyQ29uc3RydWN0aW9uOiBhbnksIHBhdGhQYXJ0OiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGVsaW1pdGVyID0gKCEhaWR4ICYmIFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKSB8fCBcIlwiO1xuXHRcdFx0XHRcdGxldCB7IGdyb3dpbmdQYXRoLCBwZW5kaW5nTmF2UHJvcEJpbmRpbmcgfSA9IHBhdGhVbmRlckNvbnN0cnVjdGlvbjtcblx0XHRcdFx0XHRjb25zdCB0ZW1wUGF0aCA9IGdyb3dpbmdQYXRoICsgZGVsaW1pdGVyO1xuXHRcdFx0XHRcdGNvbnN0IG5hdlByb3BCaW5kaW5ncyA9IG9kYXRhTWV0YU1vZGVsLmdldE9iamVjdCh0ZW1wUGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgbmF2UHJvcEJpbmRpbmdUb0NoZWNrID0gcGVuZGluZ05hdlByb3BCaW5kaW5nID8gYCR7cGVuZGluZ05hdlByb3BCaW5kaW5nfS8ke3BhdGhQYXJ0fWAgOiBwYXRoUGFydDtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRuYXZQcm9wQmluZGluZ3MgJiZcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKG5hdlByb3BCaW5kaW5ncykubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdFx0bmF2UHJvcEJpbmRpbmdzLmhhc093blByb3BlcnR5KG5hdlByb3BCaW5kaW5nVG9DaGVjaylcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGdyb3dpbmdQYXRoID0gdGVtcFBhdGggKyBuYXZQcm9wQmluZGluZ1RvQ2hlY2sucmVwbGFjZShcIi9cIiwgXCIlMkZcIik7XG5cdFx0XHRcdFx0XHRwZW5kaW5nTmF2UHJvcEJpbmRpbmcgPSBcIlwiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRwZW5kaW5nTmF2UHJvcEJpbmRpbmcgKz0gcGVuZGluZ05hdlByb3BCaW5kaW5nID8gYC8ke3BhdGhQYXJ0fWAgOiBwYXRoUGFydDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHsgZ3Jvd2luZ1BhdGgsIHBlbmRpbmdOYXZQcm9wQmluZGluZyB9O1xuXHRcdFx0XHR9LCBpbml0aWFsUGF0aE9iamVjdCBhcyBhbnkpO1xuXG5cdFx0XHRcdGVudGl0eVNldFBhdGggPSBwYXRoT2JqZWN0Lmdyb3dpbmdQYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZW50aXR5U2V0UGF0aCA9IGAvJHtwYXRoUGFydHNbMF19YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZW50aXR5U2V0UGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgcGF0aCBmb3IgdGhlIGl0ZW1zIHByb3BlcnR5IG9mIE11bHRpVmFsdWVGaWVsZCBwYXJhbWV0ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlciBBY3Rpb24gUGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbXBsZXRlIG1vZGVsIHBhdGggZm9yIHRoZSBpdGVtcyBwcm9wZXJ0eSBvZiBNdWx0aVZhbHVlRmllbGQgcGFyYW1ldGVyc1xuXHQgKi9cblx0Z2V0QWN0aW9uUGFyYW1ldGVySXRlbXNNb2RlbFBhdGg6IGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRyZXR1cm4gb1BhcmFtZXRlciAmJiBvUGFyYW1ldGVyLiROYW1lID8gYHtwYXRoOiAnbXZmdmlldz4vJHtvUGFyYW1ldGVyLiROYW1lfSd9YCA6IHVuZGVmaW5lZDtcblx0fSxcblxuXHRmaWx0ZXJPdXROYXZQcm9wQmluZGluZzogZnVuY3Rpb24gKHNQYXRoUGFydDogYW55KSB7XG5cdFx0cmV0dXJuIHNQYXRoUGFydCAhPT0gXCJcIiAmJiBzUGF0aFBhcnQgIT09IFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIjtcblx0fSxcblxuXHQvKipcblx0ICogQWRkcyBhIHNldFByb3BlcnR5IHRvIHRoZSBjcmVhdGVkIGJpbmRpbmcgY29udGV4dHMgb2YgdGhlIGludGVybmFsIEpTT04gbW9kZWwuXG5cdCAqXG5cdCAqIEBwYXJhbSBJbnRlcm5hbCBKU09OIE1vZGVsIHdoaWNoIGlzIGVuaGFuY2VkXG5cdCAqL1xuXG5cdGVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbDogZnVuY3Rpb24gKG9JbnRlcm5hbE1vZGVsOiBhbnkpIHtcblx0XHRjb25zdCBmbkJpbmRDb250ZXh0ID0gb0ludGVybmFsTW9kZWwuYmluZENvbnRleHQ7XG5cdFx0b0ludGVybmFsTW9kZWwuYmluZENvbnRleHQgPSBmdW5jdGlvbiAoc1BhdGg6IGFueSwgb0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgLi4uYXJnczogYW55W10pIHtcblx0XHRcdG9Db250ZXh0ID0gZm5CaW5kQ29udGV4dC5hcHBseSh0aGlzLCBbc1BhdGgsIG9Db250ZXh0LCBtUGFyYW1ldGVycywgLi4uYXJnc10pO1xuXHRcdFx0Y29uc3QgZm5HZXRCb3VuZENvbnRleHQgPSBvQ29udGV4dC5nZXRCb3VuZENvbnRleHQ7XG5cblx0XHRcdG9Db250ZXh0LmdldEJvdW5kQ29udGV4dCA9IGZ1bmN0aW9uICguLi5zdWJBcmdzOiBhbnlbXSkge1xuXHRcdFx0XHRjb25zdCBvQm91bmRDb250ZXh0ID0gZm5HZXRCb3VuZENvbnRleHQuYXBwbHkodGhpcywgLi4uc3ViQXJncyk7XG5cdFx0XHRcdGlmIChvQm91bmRDb250ZXh0ICYmICFvQm91bmRDb250ZXh0LnNldFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0b0JvdW5kQ29udGV4dC5zZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmdldE9iamVjdCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaW5pdGlhbGl6ZVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkuc2V0UHJvcGVydHkodGhpcy5nZXRQYXRoKCksIHt9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aFNwbGl0ID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0XHRcdC8vIGxldCdzIGVuc3VyZSB0aGF0IHN1YiBvYmplY3RzIGFyZSBpbml0aWFsaXplZFxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0eVBhdGhTcGxpdC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuZ2V0T2JqZWN0KHByb3BlcnR5UGF0aFNwbGl0W2ldKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaW5pdGlhbGl6ZVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eSh0aGlzLmdldFBhdGgocHJvcGVydHlQYXRoU3BsaXRbaV0pLCB7fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgsIHZhbHVlLCB0aGlzKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvQm91bmRDb250ZXh0O1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiBvQ29udGV4dDtcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGhhbmRsZXIgb24gcHJvcGVydHlDaGFuZ2UuXG5cdCAqIFRoZSBwcm9wZXJ0eSBcIi9lZGl0TW9kZVwiIGlzIGNoYW5nZWQgYWNjb3JkaW5nIHRvIHByb3BlcnR5ICcvaXNFZGl0YWJsZScgd2hlbiB0aGlzIGxhc3Qgb25lIGlzIHNldFxuXHQgKiBpbiBvcmRlciB0byBiZSBjb21wbGlhbnQgd2l0aCBmb3JtZXIgdmVyc2lvbnMgd2hlcmUgYnVpbGRpbmcgYmxvY2tzIHVzZSB0aGUgcHJvcGVydHkgXCIvZWRpdE1vZGVcIlxuXHQgKlxuXHQgKiBAcGFyYW0gdWlNb2RlbCBKU09OIE1vZGVsIHdoaWNoIGlzIGVuaGFuY2VkXG5cdCAqIEBwYXJhbSBsaWJyYXJ5IENvcmUgbGlicmFyeSBvZiBTQVAgRmlvcmkgZWxlbWVudHNcblx0ICovXG5cblx0ZW5oYW5jZVVpSlNPTk1vZGVsOiBmdW5jdGlvbiAodWlNb2RlbDogSlNPTk1vZGVsLCBsaWJyYXJ5OiBhbnkpIHtcblx0XHRjb25zdCBmblNldFByb3BlcnR5ID0gdWlNb2RlbC5zZXRQcm9wZXJ0eSBhcyBhbnk7XG5cdFx0dWlNb2RlbC5zZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBhcmdzWzFdO1xuXHRcdFx0aWYgKGFyZ3NbMF0gPT09IFwiL2lzRWRpdGFibGVcIikge1xuXHRcdFx0XHR1aU1vZGVsLnNldFByb3BlcnR5KFwiL2VkaXRNb2RlXCIsIHZhbHVlID8gbGlicmFyeS5FZGl0TW9kZS5FZGl0YWJsZSA6IGxpYnJhcnkuRWRpdE1vZGUuRGlzcGxheSwgYXJnc1syXSwgYXJnc1szXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5hcHBseSh0aGlzLCBbLi4uYXJnc10pO1xuXHRcdH07XG5cdH0sXG5cblx0ZW5oYW5jZVZpZXdKU09OTW9kZWw6IGZ1bmN0aW9uICh2aWV3TW9kZWw6IEpTT05Nb2RlbCAmIHsgX2dldE9iamVjdDogRnVuY3Rpb24gfSk6IHZvaWQge1xuXHRcdGNvbnN0IGZuR2V0T2JqZWN0ID0gdmlld01vZGVsLl9nZXRPYmplY3Q7XG5cdFx0dmlld01vZGVsLl9nZXRPYmplY3QgPSBmdW5jdGlvbiAoc1BhdGg6IHN0cmluZywgb0NvbnRleHQ/OiBDb250ZXh0KTogdW5rbm93biB7XG5cdFx0XHRpZiAoc1BhdGggPT09IHVuZGVmaW5lZCB8fCBzUGF0aCA9PT0gXCJcIikge1xuXHRcdFx0XHRzUGF0aCA9IFwiL1wiO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZuR2V0T2JqZWN0LmFwcGx5KHRoaXMsIFtzUGF0aCwgb0NvbnRleHRdKTtcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB3aGV0aGVyIGZpbHRlcmluZyBvbiB0aGUgdGFibGUgaXMgY2FzZSBzZW5zaXRpdmUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBpbnN0YW5jZSBvZiB0aGUgbWV0YSBtb2RlbFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zICdmYWxzZScgaWYgRmlsdGVyRnVuY3Rpb25zIGFubm90YXRpb24gc3VwcG9ydHMgJ3RvbG93ZXInLCBlbHNlICd0cnVlJ1xuXHQgKi9cblx0aXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiBmdW5jdGlvbiAob01ldGFNb2RlbDogYW55KSB7XG5cdFx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBhRmlsdGVyRnVuY3Rpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyRnVuY3Rpb25zXCIpO1xuXHRcdC8vIEdldCBmaWx0ZXIgZnVuY3Rpb25zIGRlZmluZWQgYXQgRW50aXR5Q29udGFpbmVyIGFuZCBjaGVjayBmb3IgZXhpc3RlbmNlIG9mICd0b2xvd2VyJ1xuXHRcdHJldHVybiBhRmlsdGVyRnVuY3Rpb25zID8gYUZpbHRlckZ1bmN0aW9ucy5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTEgOiB0cnVlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgTWV0YVBhdGggZm9yIHRoZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCB0byBiZSB1c2VkXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIG1ldGFwYXRoIGZvciB0aGUgY29udGV4dC5cblx0ICovXG5cdGdldE1ldGFQYXRoRm9yQ29udGV4dDogZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBvTWV0YU1vZGVsICYmIHNQYXRoICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgTWV0YVBhdGggZm9yIHRoZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggTWV0YVBhdGggdG8gYmUgdXNlZFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSByb290IGVudGl0eSBzZXQgcGF0aC5cblx0ICovXG5cdGdldFJvb3RFbnRpdHlTZXRQYXRoOiBmdW5jdGlvbiAoY29udGV4dFBhdGg6IHN0cmluZykge1xuXHRcdGxldCByb290RW50aXR5U2V0UGF0aCA9IFwiXCI7XG5cdFx0Y29uc3QgYVBhdGhzID0gY29udGV4dFBhdGggPyBjb250ZXh0UGF0aC5zcGxpdChcIi9cIikgOiBbXTtcblx0XHRpZiAoYVBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdHJvb3RFbnRpdHlTZXRQYXRoID0gYVBhdGhzWzFdO1xuXHRcdH1cblx0XHRyZXR1cm4gcm9vdEVudGl0eVNldFBhdGg7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXQgTWV0YVBhdGggZm9yIHRoZSBsaXN0QmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIG9WaWV3IFZpZXcgb2YgdGhlIGNvbnRyb2wgdXNpbmcgbGlzdEJpbmRpbmdcblx0ICogQHBhcmFtIHZMaXN0QmluZGluZyBPRGF0YUxpc3RCaW5kaW5nIG9iamVjdCBvciB0aGUgYmluZGluZyBwYXRoIGZvciBhIHRlbXBvcmFyeSBsaXN0IGJpbmRpbmdcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgbWV0YXBhdGggZm9yIHRoZSBsaXN0YmluZGluZy5cblx0ICovXG5cdGdldEFic29sdXRlTWV0YVBhdGhGb3JMaXN0QmluZGluZzogZnVuY3Rpb24gKG9WaWV3OiBGRVZpZXcsIHZMaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyB8IHN0cmluZykge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzTWV0YVBhdGg7XG5cblx0XHRpZiAodHlwZW9mIHZMaXN0QmluZGluZyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0aWYgKHZMaXN0QmluZGluZy5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0XHQvLyBhYnNvbHV0ZSBwYXRoXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgodkxpc3RCaW5kaW5nKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHJlbGF0aXZlIHBhdGhcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3Qgc1Jvb3RDb250ZXh0UGF0aCA9IG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoYCR7c1Jvb3RDb250ZXh0UGF0aH0vJHt2TGlzdEJpbmRpbmd9YCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHdlIGFscmVhZHkgZ2V0IGEgbGlzdCBiaW5kaW5nIHVzZSB0aGlzIG9uZVxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB2TGlzdEJpbmRpbmc7XG5cdFx0XHRjb25zdCBvUm9vdEJpbmRpbmcgPSBvQmluZGluZy5nZXRSb290QmluZGluZygpO1xuXHRcdFx0aWYgKG9CaW5kaW5nID09PSBvUm9vdEJpbmRpbmcpIHtcblx0XHRcdFx0Ly8gYWJzb2x1dGUgcGF0aFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9CaW5kaW5nLmdldFBhdGgoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyByZWxhdGl2ZSBwYXRoXG5cdFx0XHRcdGNvbnN0IHNSb290QmluZGluZ1BhdGggPSBvUm9vdEJpbmRpbmchLmdldFBhdGgoKTtcblx0XHRcdFx0Y29uc3Qgc1JlbGF0aXZlUGF0aCA9IG9CaW5kaW5nLmdldFBhdGgoKTtcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChgJHtzUm9vdEJpbmRpbmdQYXRofS8ke3NSZWxhdGl2ZVBhdGh9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzTWV0YVBhdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBkcmFmdCByb290LlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIGRyYWZ0IHJvb3Rcblx0ICovXG5cdGlzRHJhZnRSb290OiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXREcmFmdFJvb3QoZW50aXR5U2V0KSAhPT0gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgZHJhZnQgbm9kZS5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBkcmFmdCBub2RlXG5cdCAqL1xuXHRpc0RyYWZ0Tm9kZTogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RHJhZnROb2RlKGVudGl0eVNldCkgIT09IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHN0aWNreSBzZXNzaW9uIHJvb3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgc3RpY2t5IHNlc3Npb24gcm9vdFxuXHQgKi9cblx0aXNTdGlja3k6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFN0aWNreVNlc3Npb24oZW50aXR5U2V0KSAhPT0gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIGVudGl0eSBpcyB1cGRhdGFibGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBFbnRpdHlUeXBlXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdXBkYXRhYmxlIGVsc2UgZmFsc2Vcblx0ICovXG5cdGlzVXBkYXRlSGlkZGVuOiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQsIGVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBVcGRhdGVIaWRkZW4gfCB1bmRlZmluZWQge1xuXHRcdGlmIChpc0VudGl0eVNldChlbnRpdHlTZXQpKSB7XG5cdFx0XHRyZXR1cm4gZW50aXR5U2V0LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW4gPz8gZW50aXR5VHlwZT8uYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbjtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBAQ29tbW9uLkRyYWZ0Um9vdCBhbm5vdGF0aW9uIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBFbnRpdHlTZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkXG5cdCAqIEByZXR1cm5zIERyYWZ0Um9vdFxuXHQgKi9cblx0Z2V0RHJhZnRSb290OiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQpOiBEcmFmdFJvb3QgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290IDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBAQ29tbW9uLkRyYWZ0Tm9kZSBhbm5vdGF0aW9uIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBFbnRpdHlTZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkXG5cdCAqIEByZXR1cm5zIERyYWZ0Um9vdFxuXHQgKi9cblx0Z2V0RHJhZnROb2RlOiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQpOiBEcmFmdE5vZGUgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnROb2RlIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgbWV0aG9kIHRvIGdldCBzdGlja3kgc2Vzc2lvbi5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgU2Vzc2lvbiBTdGlja3lTZXNzaW9uU3VwcG9ydGVkXG5cdCAqL1xuXHRnZXRTdGlja3lTZXNzaW9uOiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQpOiBTdGlja3lTZXNzaW9uU3VwcG9ydGVkIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gaXNFbnRpdHlTZXQoZW50aXR5U2V0KSA/IGVudGl0eVNldC5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB2aXNpYmlsaXR5IHN0YXRlIG9mIGRlbGV0ZSBidXR0b24uXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIEVudGl0eVR5cGVcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBkZWxldGUgYnV0dG9uIGlzIGhpZGRlblxuXHQgKi9cblx0Z2V0RGVsZXRlSGlkZGVuOiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQsIGVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBEZWxldGVIaWRkZW4gfCB1bmRlZmluZWQge1xuXHRcdGlmIChpc0VudGl0eVNldChlbnRpdHlTZXQpKSB7XG5cdFx0XHRyZXR1cm4gZW50aXR5U2V0LmFubm90YXRpb25zLlVJPy5EZWxldGVIaWRkZW4gPz8gZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbWV0YXBhdGggZm9yIHRoZSBnaXZlbiBsaXN0IGJpbmRpbmcuXG5cdCAqXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBMaXN0QmluZGluZy5cblx0ICogQHJldHVybnMgTWV0YVBhdGhcblx0ICovXG5cdGdldEFic29sdXRlUGF0aEZyb21MaXN0QmluZGluZyhsaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbWV0YW1vZGVsID0gbGlzdEJpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgbWV0YVBhdGg7XG5cdFx0Y29uc3Qgcm9vdEJpbmRpbmcgPSBsaXN0QmluZGluZy5nZXRSb290QmluZGluZygpO1xuXHRcdGlmIChsaXN0QmluZGluZyA9PT0gcm9vdEJpbmRpbmcpIHtcblx0XHRcdG1ldGFQYXRoID0gbWV0YW1vZGVsLmdldE1ldGFQYXRoKGxpc3RCaW5kaW5nLmdldFBhdGgoKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJvb3RCaW5kaW5nUGF0aCA9IHJvb3RCaW5kaW5nPy5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBsaXN0QmluZGluZy5nZXRQYXRoKCk7XG5cdFx0XHRtZXRhUGF0aCA9IG1ldGFtb2RlbC5nZXRNZXRhUGF0aChgJHtyb290QmluZGluZ1BhdGh9LyR7cmVsYXRpdmVQYXRofWApO1xuXHRcdH1cblx0XHRyZXR1cm4gbWV0YVBhdGg7XG5cdH0sXG5cblx0ZW5oYW5jZU9EYXRhTW9kZWwob2RhdGFNb2RlbDogT0RhdGFNb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IGZuTWVzc2FnZSA9IG9kYXRhTW9kZWwuc2V0TWVzc2FnZXM7XG5cdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KTtcblx0XHRsb2NhbEFubm90YXRpb25Nb2RlbC5zZXREZWZhdWx0QmluZGluZ01vZGUoQmluZGluZ01vZGUuT25lV2F5KTtcblx0XHRjb25zdCBiYXNlU2V0UHJvcGVydHkgPSBsb2NhbEFubm90YXRpb25Nb2RlbC5zZXRQcm9wZXJ0eTtcblx0XHRjb25zdCBiYXNlR2V0UHJvcGVydHkgPSBsb2NhbEFubm90YXRpb25Nb2RlbC5nZXRQcm9wZXJ0eTtcblx0XHRsb2NhbEFubm90YXRpb25Nb2RlbC5nZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwYXRoLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHVua25vd24ge1xuXHRcdFx0Y29uc3QgW19wcm9wZXJ0eU5hbWUsIGFubm90YXRpb25UeXBlXSA9IHBhdGguc3BsaXQoXCJAJHVpNS5mZS5cIik7XG5cdFx0XHRpZiAoY29udGV4dCAmJiBhbm5vdGF0aW9uVHlwZSA9PT0gXCJjb250ZXh0UGF0aFwiKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGJhc2VHZXRQcm9wZXJ0eS5hcHBseSh0aGlzLCBbcGF0aCwgY29udGV4dF0pO1xuXHRcdH07XG5cdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkgPSBmdW5jdGlvbiAocGF0aCwgdmFsdWUsIGNvbnRleHQsIGFzeW5jVXBkYXRlKTogYm9vbGVhbiB7XG5cdFx0XHRsZXQgZnVsbFBhdGggPSBwYXRoO1xuXHRcdFx0aWYgKGNvbnRleHQpIHtcblx0XHRcdFx0ZnVsbFBhdGggPSBjb250ZXh0LmdldFBhdGgocGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGhTcGxpdCA9IGZ1bGxQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdC8vIGxldCdzIGVuc3VyZSB0aGF0IHN1YiBvYmplY3RzIGFyZSBpbml0aWFsaXplZFxuXHRcdFx0bGV0IHBhdGhGcm9tUm9vdCA9IFwiXCI7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnR5UGF0aFNwbGl0Lmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRpZiAoaSA+IDApIHtcblx0XHRcdFx0XHRwYXRoRnJvbVJvb3QgKz0gXCIvXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cGF0aEZyb21Sb290ICs9IHByb3BlcnR5UGF0aFNwbGl0W2ldO1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPYmplY3QocGF0aEZyb21Sb290KSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Ly8gaW5pdGlhbGl6ZVxuXHRcdFx0XHRcdHRoaXMuc2V0UHJvcGVydHkocGF0aEZyb21Sb290LCB7fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBiYXNlU2V0UHJvcGVydHkuYXBwbHkodGhpcywgW3BhdGgsIHZhbHVlLCBjb250ZXh0LCBhc3luY1VwZGF0ZV0pO1xuXHRcdH07XG5cdFx0ZnVuY3Rpb24gY2xlYXJBbm5vdGF0aW9uVHlwZShhbm5vdGF0aW9uVHlwZXM6IHN0cmluZ1tdLCBkYXRhU2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IG9iamVjdCB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnRleHRQYXRoIGluIGRhdGFTZXQpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhU2V0W2NvbnRleHRQYXRoXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdGRhdGFTZXRbY29udGV4dFBhdGhdID0gY2xlYXJBbm5vdGF0aW9uVHlwZShhbm5vdGF0aW9uVHlwZXMsIGRhdGFTZXRbY29udGV4dFBhdGhdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblx0XHRcdFx0XHRpZiAoT2JqZWN0LmtleXMoZGF0YVNldFtjb250ZXh0UGF0aF0gYXMgb2JqZWN0KS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBkYXRhU2V0W2NvbnRleHRQYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBhbm5vdGF0aW9uVHlwZSBvZiBhbm5vdGF0aW9uVHlwZXMpIHtcblx0XHRcdFx0XHRpZiAoY29udGV4dFBhdGguZW5kc1dpdGgoYW5ub3RhdGlvblR5cGUpKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgZGF0YVNldFtjb250ZXh0UGF0aF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF0YVNldDtcblx0XHR9XG5cdFx0b2RhdGFNb2RlbC5fbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSBsb2NhbEFubm90YXRpb25Nb2RlbDtcblx0XHRvZGF0YU1vZGVsLmdldExvY2FsQW5ub3RhdGlvbk1vZGVsID0gZnVuY3Rpb24gKCk6IEpTT05Nb2RlbCB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWw7XG5cdFx0fTtcblx0XHRvZGF0YU1vZGVsLnNldE1lc3NhZ2VzID0gZnVuY3Rpb24gKG1lc3NhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBNZXNzYWdlW10+KTogdm9pZCB7XG5cdFx0XHRjb25zdCBjbGVhbmVkRGF0YSA9IGNsZWFyQW5ub3RhdGlvblR5cGUoW1wiQCR1aTUuZmUubWVzc2FnZVR5cGVcIiwgXCJAJHVpNS5mZS5tZXNzYWdlVGV4dFwiXSwgdGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0RGF0YSgpKTtcblx0XHRcdHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLnNldERhdGEoY2xlYW5lZERhdGEpO1xuXHRcdFx0Zm9yIChjb25zdCBtZXNzYWdlVGFyZ2V0IGluIG1lc3NhZ2VzKSB7XG5cdFx0XHRcdHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5KGAke21lc3NhZ2VUYXJnZXR9QCR1aTUuZmUubWVzc2FnZVR5cGVgLCBtZXNzYWdlc1ttZXNzYWdlVGFyZ2V0XVswXS5nZXRUeXBlKCkpO1xuXHRcdFx0XHR0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbC5zZXRQcm9wZXJ0eShgJHttZXNzYWdlVGFyZ2V0fUAkdWk1LmZlLm1lc3NhZ2VUZXh0YCwgbWVzc2FnZXNbbWVzc2FnZVRhcmdldF1bMF0uZ2V0TWVzc2FnZSgpKTtcblx0XHRcdH1cblx0XHRcdGZuTWVzc2FnZS5hcHBseSh0aGlzLCBbbWVzc2FnZXNdKTtcblx0XHR9O1xuXHRcdGNvbnN0IGZuQmluZFByb3BlcnR5ID0gb2RhdGFNb2RlbC5iaW5kUHJvcGVydHkuYmluZChvZGF0YU1vZGVsKTtcblx0XHRvZGF0YU1vZGVsLmJpbmRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBwYXJhbWV0ZXJzKTogT0RhdGFQcm9wZXJ0eUJpbmRpbmcge1xuXHRcdFx0aWYgKHBhdGguaW5jbHVkZXMoXCJAJHVpNS5mZS5cIikpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLmJpbmRQcm9wZXJ0eShwYXRoLCBjb250ZXh0KSBhcyB1bmtub3duIGFzIE9EYXRhUHJvcGVydHlCaW5kaW5nO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZuQmluZFByb3BlcnR5KHBhdGgsIGNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdH07XG5cdFx0Y29uc3QgZm5EZXN0cm95ID0gb2RhdGFNb2RlbC5kZXN0cm95LmJpbmQob2RhdGFNb2RlbCk7XG5cdFx0b2RhdGFNb2RlbC5kZXN0cm95ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0dGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuZGVzdHJveSgpO1xuXHRcdFx0cmV0dXJuIGZuRGVzdHJveS5hcHBseSh0aGlzKTtcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogUmVzb2x2ZXMgYSBtZXRhZGF0YSBiaW5kaW5nIHRvIGl0cyB0ZXh0LCBlaXRoZXIgdXNpbmcgdGhlIGNvbnZlcnRlckNvbnRleHQgb3IgdGhlIG1ldGFNb2RlbCBkaXJlY3RseS5cblx0ICpcblx0ICogQHBhcmFtIHBhdGhcblx0ICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcblx0ICogQHBhcmFtIG1ldGFNb2RlbFxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgdGV4dCBpZiBwb3NzaWJsZSwgZWxzZSB0aGUgaW5wdXQgdmFsdWUgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBwYXRoIHdhcyB1bmRlZmluZWRcblx0ICovXG5cdGZldGNoVGV4dEZyb21NZXRhTW9kZWwocGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0PzogQ29udmVydGVyQ29udGV4dCwgbWV0YU1vZGVsPzogTWV0YU1vZGVsKTogc3RyaW5nIHtcblx0XHRsZXQgdGV4dCA9IHBhdGggIT09IHVuZGVmaW5lZCA/IHBhdGggOiBcIlwiO1xuXHRcdGlmIChwYXRoPy5zdGFydHNXaXRoKFwie21ldGFNb2RlbD5cIikpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbFBhdGggPSBwYXRoLnN1YnN0cmluZygxMSwgcGF0aC5sZW5ndGggLSAxKTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24obWV0YU1vZGVsUGF0aCkuYW5ub3RhdGlvbi50b1N0cmluZygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRleHQgPSBtZXRhTW9kZWw/LmdldE9iamVjdChtZXRhTW9kZWxQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRMb2cuaW5mbyhgVW5hYmxlIHRvIHJldHJpZXZlIHRleHQgZnJvbSBtZXRhIG1vZGVsIHVzaW5nIHBhdGggJHttZXRhTW9kZWxQYXRofWApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGV4dDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBwYXRoIGNvcnJlc3BvbmRpbmcgdG8gc3RhdGUgbWVzc2FnZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggUGF0aCBmb3IgdGhlIGNvbnRleHQgb24gd2hpY2ggd2Ugd2hhdCB0byByZXRyZWl2ZSB0aGUgbWVzc2FnZSBwYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGgsIG9yIHVuZGVmaW5lZCBpZiBubyBNZXNzYWdlcyBhbm5vdGF0aW9uIGlzIGRlZmluZWRcblx0ICovXG5cdGdldE1lc3NhZ2VzUGF0aDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGNvbnRleHRQYXRoKTtcblx0XHRjb25zdCBvYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblxuXHRcdGNvbnN0IG1lc3NhZ2VzID0gb2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uTWVzc2FnZXM7XG5cdFx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG1lc3NhZ2VzKSA/IG1lc3NhZ2VzLnBhdGggOiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIEludGVybmFsTW9kZWxDb250ZXh0ID0geyBnZXRNb2RlbCgpOiBKU09OTW9kZWwgfSAmIEJhc2VDb250ZXh0ICYge1xuXHRcdHNldFByb3BlcnR5KHNQYXRoOiBzdHJpbmcsIHZWYWx1ZTogYW55KTogdm9pZDtcblx0fTtcblxuZXhwb3J0IGRlZmF1bHQgTW9kZWxIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7RUF3QkEsTUFBTUEsV0FBVyxHQUFHO0lBQ25CO0lBQ0E7SUFDQTtJQUNBQyx5QkFBeUIsRUFBRSxLQUFLO0lBRWhDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx3QkFBd0IsRUFBRSxVQUFVQyxTQUF5QixFQUFFO01BQzlELE1BQU1DLGVBQWUsR0FBR0QsU0FBUyxDQUFDRSxTQUFTLENBQUMsR0FBRyxDQUFDO01BQ2hELEtBQUssTUFBTUMsYUFBYSxJQUFJRixlQUFlLEVBQUU7UUFDNUMsSUFDQ0EsZUFBZSxDQUFDRSxhQUFhLENBQUMsQ0FBQ0MsS0FBSyxLQUFLLFdBQVcsSUFDcERKLFNBQVMsQ0FBQ0UsU0FBUyxDQUFFLElBQUdDLGFBQWMseURBQXdELENBQUMsRUFDOUY7VUFDRCxPQUFPLElBQUk7UUFDWjtNQUNEO01BQ0EsT0FBTyxLQUFLO0lBQ2IsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NFLGdCQUFnQixFQUFFLFVB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
|
|
573
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2RlbEhlbHBlciIsImRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJtZXRhTW9kZWwiLCJlbnRpdHlDb250YWluZXIiLCJnZXRPYmplY3QiLCJlbnRpdHlTZXROYW1lIiwiJGtpbmQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwicGF0aCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiY3VycmVudEVudGl0eVNldCIsInRhcmdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsImlzRHJhZnRSb290IiwiYklzRHJhZnROb2RlIiwiaXNEcmFmdE5vZGUiLCJiSXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50IiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0YXJnZXRPYmplY3QiLCJjb250YWluc1RhcmdldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJEcmFmdE5vZGUiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsIm1ldGFPYmplY3QiLCJ0ZW1wbGF0ZUludGVyZmFjZSIsIm9NZXRhTW9kZWwiLCJjb250ZXh0IiwiZ2V0TW9kZWwiLCJvRW50aXR5Q29udGFpbmVyIiwic0VudGl0eVNldCIsImdldERyYWZ0Um9vdFBhdGgiLCJvQ29udGV4dCIsImdldE1ldGFNb2RlbCIsImdldFJvb3RQYXRoIiwic1BhdGgiLCJtb2RlbCIsImZpcnN0SXRlcmF0aW9uIiwic0l0ZXJhdGlvblBhdGgiLCJSZWdFeHAiLCJleGVjIiwic0VudGl0eVBhdGgiLCJnZXRNZXRhUGF0aCIsIm1EYXRhTW9kZWwiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRDb250ZXh0IiwidW5kZWZpbmVkIiwiZ2V0UGF0aCIsImdldFN0aWNreVJvb3RQYXRoIiwiU2Vzc2lvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJnZXRUYXJnZXRFbnRpdHlTZXQiLCJzRW50aXR5U2V0UGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJvZGF0YU1ldGFNb2RlbCIsImVudGl0eVNldFBhdGgiLCJzcGxpdCIsImZpbHRlciIsImZpbHRlck91dE5hdlByb3BCaW5kaW5nIiwiam9pbiIsInBhdGhQYXJ0cyIsImxlbmd0aCIsImluaXRpYWxQYXRoT2JqZWN0IiwiZ3Jvd2luZ1BhdGgiLCJwZW5kaW5nTmF2UHJvcEJpbmRpbmciLCJwYXRoT2JqZWN0IiwicmVkdWNlIiwicGF0aFVuZGVyQ29uc3RydWN0aW9uIiwicGF0aFBhcnQiLCJpZHgiLCJkZWxpbWl0ZXIiLCJ0ZW1wUGF0aCIsIm5hdlByb3BCaW5kaW5ncyIsIm5hdlByb3BCaW5kaW5nVG9DaGVjayIsIk9iamVjdCIsImtleXMiLCJoYXNPd25Qcm9wZXJ0eSIsInJlcGxhY2UiLCJnZXRBY3Rpb25QYXJhbWV0ZXJJdGVtc01vZGVsUGF0aCIsIm9QYXJhbWV0ZXIiLCIkTmFtZSIsInNQYXRoUGFydCIsImVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbCIsIm9JbnRlcm5hbE1vZGVsIiwiZm5CaW5kQ29udGV4dCIsImJpbmRDb250ZXh0IiwibVBhcmFtZXRlcnMiLCJhcmdzIiwiYXBwbHkiLCJmbkdldEJvdW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInN1YkFyZ3MiLCJvQm91bmRDb250ZXh0Iiwic2V0UHJvcGVydHkiLCJwcm9wZXJ0eVBhdGgiLCJ2YWx1ZSIsInByb3BlcnR5UGF0aFNwbGl0IiwiaSIsImVuaGFuY2VVaUpTT05Nb2RlbCIsInVpTW9kZWwiLCJsaWJyYXJ5IiwiZm5TZXRQcm9wZXJ0eSIsIkVkaXRNb2RlIiwiRWRpdGFibGUiLCJEaXNwbGF5IiwiZW5oYW5jZVZpZXdKU09OTW9kZWwiLCJ2aWV3TW9kZWwiLCJmbkdldE9iamVjdCIsIl9nZXRPYmplY3QiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJhRmlsdGVyRnVuY3Rpb25zIiwiaW5kZXhPZiIsImdldE1ldGFQYXRoRm9yQ29udGV4dCIsIm9Nb2RlbCIsImdldFJvb3RFbnRpdHlTZXRQYXRoIiwiY29udGV4dFBhdGgiLCJyb290RW50aXR5U2V0UGF0aCIsImFQYXRocyIsImdldEFic29sdXRlTWV0YVBhdGhGb3JMaXN0QmluZGluZyIsIm9WaWV3Iiwidkxpc3RCaW5kaW5nIiwic01ldGFQYXRoIiwic3RhcnRzV2l0aCIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic1Jvb3RDb250ZXh0UGF0aCIsIm9CaW5kaW5nIiwib1Jvb3RCaW5kaW5nIiwiZ2V0Um9vdEJpbmRpbmciLCJzUm9vdEJpbmRpbmdQYXRoIiwic1JlbGF0aXZlUGF0aCIsImVudGl0eVNldCIsImdldERyYWZ0Um9vdCIsImdldERyYWZ0Tm9kZSIsImlzU3RpY2t5IiwiZ2V0U3RpY2t5U2Vzc2lvbiIsImlzVXBkYXRlSGlkZGVuIiwiZW50aXR5VHlwZSIsImlzRW50aXR5U2V0IiwiVUkiLCJVcGRhdGVIaWRkZW4iLCJnZXREZWxldGVIaWRkZW4iLCJEZWxldGVIaWRkZW4iLCJnZXRBYnNvbHV0ZVBhdGhGcm9tTGlzdEJpbmRpbmciLCJsaXN0QmluZGluZyIsIm1ldGFtb2RlbCIsIm1ldGFQYXRoIiwicm9vdEJpbmRpbmciLCJyb290QmluZGluZ1BhdGgiLCJyZWxhdGl2ZVBhdGgiLCJlbmhhbmNlT0RhdGFNb2RlbCIsIm9kYXRhTW9kZWwiLCJmbk1lc3NhZ2UiLCJzZXRNZXNzYWdlcyIsImxvY2FsQW5ub3RhdGlvbk1vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGVmYXVsdEJpbmRpbmdNb2RlIiwiQmluZGluZ01vZGUiLCJPbmVXYXkiLCJiYXNlU2V0UHJvcGVydHkiLCJiYXNlR2V0UHJvcGVydHkiLCJnZXRQcm9wZXJ0eSIsIl9wcm9wZXJ0eU5hbWUiLCJhbm5vdGF0aW9uVHlwZSIsImFzeW5jVXBkYXRlIiwiZnVsbFBhdGgiLCJwYXRoRnJvbVJvb3QiLCJjbGVhckFubm90YXRpb25UeXBlIiwiYW5ub3RhdGlvblR5cGVzIiwiZGF0YVNldCIsImVuZHNXaXRoIiwiX2xvY2FsQW5ub3RhdGlvbk1vZGVsIiwiZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwiLCJtZXNzYWdlcyIsImNsZWFuZWREYXRhIiwiZ2V0RGF0YSIsInNldERhdGEiLCJtZXNzYWdlVGFyZ2V0IiwiZ2V0VHlwZSIsImdldE1lc3NhZ2UiLCJmbkJpbmRQcm9wZXJ0eSIsImJpbmRQcm9wZXJ0eSIsImJpbmQiLCJwYXJhbWV0ZXJzIiwiaW5jbHVkZXMiLCJwcm9wQmluZGluZyIsInVwZGF0ZVJlcXVpcmVkIiwiZm5EZXN0cm95IiwiZGVzdHJveSIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJjb252ZXJ0ZXJDb250ZXh0IiwidGV4dCIsIm1ldGFNb2RlbFBhdGgiLCJzdWJzdHJpbmciLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJ0b1N0cmluZyIsImUiLCJMb2ciLCJpbmZvIiwiZ2V0TWVzc2FnZXNQYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsIk1lc3NhZ2VzIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1vZGVsSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIFRoaXMgY2xhc3MgY29udGFpbnMgaGVscGVycyB0byBiZSB1c2VkIGF0IHJ1bnRpbWUgdG8gcmV0cmlldmUgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgbW9kZWwgKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBTaW5nbGV0b24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRHJhZnROb2RlLCBEcmFmdFJvb3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBTdGlja3lTZXNzaW9uU3VwcG9ydGVkIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9TZXNzaW9uXCI7XG5pbXBvcnQgdHlwZSB7IERlbGV0ZUhpZGRlbiwgVXBkYXRlSGlkZGVuIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQsIGlzTmF2aWdhdGlvblByb3BlcnR5LCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgQmluZGluZ01vZGUgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nTW9kZVwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBDb250ZXh0LCBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCIuLi90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcblxuY29uc3QgTW9kZWxIZWxwZXIgPSB7XG5cdC8vIGdsb2JhbCBzd2l0Y2ggdG8gZGlzYWJsZSB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBieSBhIHByaXZhdGUgbWFuaWZlc3QgZmxhZ1xuXHQvLyB0aGlzIGFsbG93cyBjdXN0b21lcnMgdG8gZGlzYWJsZSB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBpbiBjYXNlIHdlIHJ1biBpbnRvIGlzc3VlcyB3aXRoIHRoZSBmaXJzdCBkZWxpdmVyeVxuXHQvLyB0aGlzIHdpbGwgYmUgcmVtb3ZlZCB3aXRoIHRoZSBuZXh0IFMvNCByZWxlYXNlXG5cdGRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQ6IGZhbHNlLFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwcm9ncmFtbWluZyBtb2RlbCBpcyBzdGlja3kuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgT0RhdGFNb2RlbE1ldGFNb2RlbCB0byBjaGVjayBmb3Igc3RpY2t5IGVuYWJsZWQgZW50aXR5XG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBzdGlja3ksIGVsc2UgZmFsc2Vcblx0ICovXG5cdGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0XHRjb25zdCBlbnRpdHlDb250YWluZXIgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRmb3IgKGNvbnN0IGVudGl0eVNldE5hbWUgaW4gZW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVudGl0eUNvbnRhaW5lcltlbnRpdHlTZXROYW1lXS4ka2luZCA9PT0gXCJFbnRpdHlTZXRcIiAmJlxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtlbnRpdHlTZXROYW1lfUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRgKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2dyYW1taW5nIG1vZGVsIGlzIGRyYWZ0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE9EYXRhTW9kZWxNZXRhTW9kZWwgb2YgdGhlIGNvbnRleHQgZm9yIHdoaWNoIGRyYWZ0IHN1cHBvcnQgc2hhbGwgYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGRyYWZ0LCBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc0RyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgcGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQocGF0aCk7XG5cdFx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFDb250ZXh0KTtcblx0XHRyZXR1cm4gdGhpcy5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChvYmplY3RQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGRyYWZ0IGlzIHN1cHBvcnRlZCBmb3IgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcblx0ICovXG5cdGlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQ7XG5cdFx0Y29uc3QgYklzRHJhZnRSb290ID0gTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnROb2RlID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCA9XG5cdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5jb250YWluc1RhcmdldCAmJlxuXHRcdFx0KChkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fFxuXHRcdFx0XHQoZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGUpXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IGZhbHNlO1xuXG5cdFx0cmV0dXJuIGJJc0RyYWZ0Um9vdCB8fCBiSXNEcmFmdE5vZGUgfHwgKCFjdXJyZW50RW50aXR5U2V0ICYmIGJJc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzZXJ2aWNlLCBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uIGRyYWZ0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0YU9iamVjdCBNZXRhT2JqZWN0IHRvIGJlIHVzZWQgZm9yIGRldGVybWluYXRpb25cblx0ICogQHBhcmFtIHRlbXBsYXRlSW50ZXJmYWNlIEFQSSBwcm92aWRlZCBieSBVSTUgdGVtcGxhdGluZyBpZiB1c2VkXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VydmljZSBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uIGRyYWZ0LCBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZDogZnVuY3Rpb24gKG1ldGFPYmplY3Q6IGFueSwgdGVtcGxhdGVJbnRlcmZhY2U/OiBhbnkpIHtcblx0XHRpZiAoIXRoaXMuZGlzYWJsZUNvbGxhYm9yYXRpb25EcmFmdCkge1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9ICh0ZW1wbGF0ZUludGVyZmFjZT8uY29udGV4dD8uZ2V0TW9kZWwoKSB8fCBtZXRhT2JqZWN0KSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdGNvbnN0IG9FbnRpdHlDb250YWluZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdFx0XHRmb3IgKGNvbnN0IHNFbnRpdHlTZXQgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0VudGl0eUNvbnRhaW5lcltzRW50aXR5U2V0XS4ka2luZCA9PT0gXCJFbnRpdHlTZXRcIiAmJlxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtzRW50aXR5U2V0fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L1NoYXJlQWN0aW9uYClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBwYXRoIG9mIHRoZSBEcmFmdFJvb3QgcGF0aCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPZGF0YU1vZGVsIGNvbnRleHRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgZHJhZnRSb290IGVudGl0eSwgb3IgdW5kZWZpbmVkIGlmIG5vIGRyYWZ0Um9vdCBpcyBmb3VuZFxuXHQgKi9cblx0Z2V0RHJhZnRSb290UGF0aDogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBnZXRSb290UGF0aCA9IGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCwgZmlyc3RJdGVyYXRpb24gPSB0cnVlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRcdGNvbnN0IHNJdGVyYXRpb25QYXRoID0gZmlyc3RJdGVyYXRpb24gPyBzUGF0aCA6IG5ldyBSZWdFeHAoLy4qKD89XFwvKS8pLmV4ZWMoc1BhdGgpPy5bMF07IC8vICpSZWdleCB0byBnZXQgdGhlIGFuY2VzdG9yXG5cdFx0XHRpZiAoc0l0ZXJhdGlvblBhdGggJiYgc0l0ZXJhdGlvblBhdGggIT09IFwiL1wiKSB7XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzSXRlcmF0aW9uUGF0aCk7XG5cdFx0XHRcdGNvbnN0IG1EYXRhTW9kZWwgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWwuZ2V0Q29udGV4dChzRW50aXR5UGF0aCkpO1xuXHRcdFx0XHRpZiAoKG1EYXRhTW9kZWwudGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNJdGVyYXRpb25QYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBnZXRSb290UGF0aChzSXRlcmF0aW9uUGF0aCwgbW9kZWwsIGZhbHNlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gZ2V0Um9vdFBhdGgob0NvbnRleHQuZ2V0UGF0aCgpLCBvQ29udGV4dC5nZXRNb2RlbCgpKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgcGF0aCBvZiB0aGUgU3RpY2t5Um9vdCBwYXRoIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IE9kYXRhTW9kZWwgY29udGV4dFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSBTdGlja3lSb290IGVudGl0eSwgb3IgdW5kZWZpbmVkIGlmIG5vIFN0aWNreVJvb3QgaXMgZm91bmRcblx0ICovXG5cdGdldFN0aWNreVJvb3RQYXRoOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGdldFJvb3RQYXRoID0gZnVuY3Rpb24gKHNQYXRoOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsLCBmaXJzdEl0ZXJhdGlvbiA9IHRydWUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdFx0Y29uc3Qgc0l0ZXJhdGlvblBhdGggPSBmaXJzdEl0ZXJhdGlvbiA/IHNQYXRoIDogbmV3IFJlZ0V4cCgvLiooPz1cXC8pLykuZXhlYyhzUGF0aCk/LlswXTsgLy8gKlJlZ2V4IHRvIGdldCB0aGUgYW5jZXN0b3Jcblx0XHRcdGlmIChzSXRlcmF0aW9uUGF0aCAmJiBzSXRlcmF0aW9uUGF0aCAhPT0gXCIvXCIpIHtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNJdGVyYXRpb25QYXRoKTtcblx0XHRcdFx0Y29uc3QgbURhdGFNb2RlbCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5nZXRDb250ZXh0KHNFbnRpdHlQYXRoKSk7XG5cdFx0XHRcdGlmICgobURhdGFNb2RlbC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gc0l0ZXJhdGlvblBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGdldFJvb3RQYXRoKHNJdGVyYXRpb25QYXRoLCBtb2RlbCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9O1xuXHRcdHJldHVybiBnZXRSb290UGF0aChvQ29udGV4dC5nZXRQYXRoKCksIG9Db250ZXh0LmdldE1vZGVsKCkpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgdGFyZ2V0IGVudGl0eSBzZXQgdmlhIG5hdmlnYXRpb24gcHJvcGVydHkgYmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSB0YXJnZXQgZW50aXR5IHNldCB3aWxsIGJlIGRldGVybWluZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgdGFyZ2V0IGVudGl0eSBzZXRcblx0ICovXG5cdGdldFRhcmdldEVudGl0eVNldDogZnVuY3Rpb24gKG9Db250ZXh0OiBCYXNlQ29udGV4dCkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGlmIChcblx0XHRcdG9Db250ZXh0LmdldE9iamVjdChcIiRraW5kXCIpID09PSBcIkVudGl0eVNldFwiIHx8XG5cdFx0XHRvQ29udGV4dC5nZXRPYmplY3QoXCIka2luZFwiKSA9PT0gXCJBY3Rpb25cIiB8fFxuXHRcdFx0b0NvbnRleHQuZ2V0T2JqZWN0KFwiMC8ka2luZFwiKSA9PT0gXCJBY3Rpb25cIlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH1cblx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc1BhdGgpO1xuXHRcdHJldHVybiBgLyR7b0NvbnRleHQuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoKX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGNvbXBsZXRlIHBhdGggdG8gdGhlIGVudGl0eSBzZXQgdmlhIHVzaW5nIG5hdmlnYXRpb24gcHJvcGVydHkgYmluZGluZy4gTm90ZTogVG8gYmUgdXNlZCBvbmx5IGFmdGVyIHRoZSBtZXRhbW9kZWwgaGFzIGxvYWRlZC5cblx0ICpcblx0ICogQHBhcmFtIHBhdGggUGF0aCBmb3Igd2hpY2ggY29tcGxldGUgZW50aXR5U2V0IHBhdGggbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBmcm9tIGVudGl0eVR5cGUgcGF0aFxuXHQgKiBAcGFyYW0gb2RhdGFNZXRhTW9kZWwgTWV0YW1vZGVsIHRvIGJlIHVzZWQuKE9wdGlvbmFsIGluIG5vcm1hbCBzY2VuYXJpb3MsIGJ1dCBuZWVkZWQgZm9yIHBhcmFtZXRlcml6ZWQgc2VydmljZSBzY2VuYXJpb3MpXG5cdCAqIEByZXR1cm5zIFJldHVybnMgY29tcGxldGUgcGF0aCB0byB0aGUgZW50aXR5IHNldFxuXHQgKi9cblx0Z2V0RW50aXR5U2V0UGF0aDogZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgb2RhdGFNZXRhTW9kZWw/OiBPRGF0YU1ldGFNb2RlbCkge1xuXHRcdGxldCBlbnRpdHlTZXRQYXRoID0gXCJcIjtcblx0XHRpZiAoIW9kYXRhTWV0YU1vZGVsKSB7XG5cdFx0XHQvLyBQcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBmb3IgZ2V0dGluZyBlbnRpdHlTZXRQYXRoIGZyb20gZW50aXR5VHlwZVBhdGhcblx0XHRcdGVudGl0eVNldFBhdGggPSBgLyR7cGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKS5qb2luKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKX1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDYWxjdWxhdGluZyB0aGUgZW50aXR5U2V0UGF0aCBmcm9tIE1ldGFNb2RlbC5cblx0XHRcdGNvbnN0IHBhdGhQYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZyk7XG5cdFx0XHRpZiAocGF0aFBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Y29uc3QgaW5pdGlhbFBhdGhPYmplY3QgPSB7XG5cdFx0XHRcdFx0Z3Jvd2luZ1BhdGg6IFwiL1wiLFxuXHRcdFx0XHRcdHBlbmRpbmdOYXZQcm9wQmluZGluZzogXCJcIlxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0IHBhdGhPYmplY3QgPSBwYXRoUGFydHMucmVkdWNlKChwYXRoVW5kZXJDb25zdHJ1Y3Rpb246IGFueSwgcGF0aFBhcnQ6IHN0cmluZywgaWR4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkZWxpbWl0ZXIgPSAoISFpZHggJiYgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIpIHx8IFwiXCI7XG5cdFx0XHRcdFx0bGV0IHsgZ3Jvd2luZ1BhdGgsIHBlbmRpbmdOYXZQcm9wQmluZGluZyB9ID0gcGF0aFVuZGVyQ29uc3RydWN0aW9uO1xuXHRcdFx0XHRcdGNvbnN0IHRlbXBQYXRoID0gZ3Jvd2luZ1BhdGggKyBkZWxpbWl0ZXI7XG5cdFx0XHRcdFx0Y29uc3QgbmF2UHJvcEJpbmRpbmdzID0gb2RhdGFNZXRhTW9kZWwuZ2V0T2JqZWN0KHRlbXBQYXRoKTtcblx0XHRcdFx0XHRjb25zdCBuYXZQcm9wQmluZGluZ1RvQ2hlY2sgPSBwZW5kaW5nTmF2UHJvcEJpbmRpbmcgPyBgJHtwZW5kaW5nTmF2UHJvcEJpbmRpbmd9LyR7cGF0aFBhcnR9YCA6IHBhdGhQYXJ0O1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG5hdlByb3BCaW5kaW5ncyAmJlxuXHRcdFx0XHRcdFx0T2JqZWN0LmtleXMobmF2UHJvcEJpbmRpbmdzKS5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0XHRuYXZQcm9wQmluZGluZ3MuaGFzT3duUHJvcGVydHkobmF2UHJvcEJpbmRpbmdUb0NoZWNrKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Z3Jvd2luZ1BhdGggPSB0ZW1wUGF0aCArIG5hdlByb3BCaW5kaW5nVG9DaGVjay5yZXBsYWNlKFwiL1wiLCBcIiUyRlwiKTtcblx0XHRcdFx0XHRcdHBlbmRpbmdOYXZQcm9wQmluZGluZyA9IFwiXCI7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHBlbmRpbmdOYXZQcm9wQmluZGluZyArPSBwZW5kaW5nTmF2UHJvcEJpbmRpbmcgPyBgLyR7cGF0aFBhcnR9YCA6IHBhdGhQYXJ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4geyBncm93aW5nUGF0aCwgcGVuZGluZ05hdlByb3BCaW5kaW5nIH07XG5cdFx0XHRcdH0sIGluaXRpYWxQYXRoT2JqZWN0IGFzIGFueSk7XG5cblx0XHRcdFx0ZW50aXR5U2V0UGF0aCA9IHBhdGhPYmplY3QuZ3Jvd2luZ1BhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke3BhdGhQYXJ0c1swXX1gO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBlbnRpdHlTZXRQYXRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwYXRoIGZvciB0aGUgaXRlbXMgcHJvcGVydHkgb2YgTXVsdGlWYWx1ZUZpZWxkIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvUGFyYW1ldGVyIEFjdGlvbiBQYXJhbWV0ZXJcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgY29tcGxldGUgbW9kZWwgcGF0aCBmb3IgdGhlIGl0ZW1zIHByb3BlcnR5IG9mIE11bHRpVmFsdWVGaWVsZCBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRnZXRBY3Rpb25QYXJhbWV0ZXJJdGVtc01vZGVsUGF0aDogZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IGFueSkge1xuXHRcdHJldHVybiBvUGFyYW1ldGVyICYmIG9QYXJhbWV0ZXIuJE5hbWUgPyBge3BhdGg6ICdtdmZ2aWV3Pi8ke29QYXJhbWV0ZXIuJE5hbWV9J31gIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGZpbHRlck91dE5hdlByb3BCaW5kaW5nOiBmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRyZXR1cm4gc1BhdGhQYXJ0ICE9PSBcIlwiICYmIHNQYXRoUGFydCAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgc2V0UHJvcGVydHkgdG8gdGhlIGNyZWF0ZWQgYmluZGluZyBjb250ZXh0cyBvZiB0aGUgaW50ZXJuYWwgSlNPTiBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIEludGVybmFsIEpTT04gTW9kZWwgd2hpY2ggaXMgZW5oYW5jZWRcblx0ICovXG5cblx0ZW5oYW5jZUludGVybmFsSlNPTk1vZGVsOiBmdW5jdGlvbiAob0ludGVybmFsTW9kZWw6IGFueSkge1xuXHRcdGNvbnN0IGZuQmluZENvbnRleHQgPSBvSW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dCA9IGZ1bmN0aW9uIChzUGF0aDogYW55LCBvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuXHRcdFx0b0NvbnRleHQgPSBmbkJpbmRDb250ZXh0LmFwcGx5KHRoaXMsIFtzUGF0aCwgb0NvbnRleHQsIG1QYXJhbWV0ZXJzLCAuLi5hcmdzXSk7XG5cdFx0XHRjb25zdCBmbkdldEJvdW5kQ29udGV4dCA9IG9Db250ZXh0LmdldEJvdW5kQ29udGV4dDtcblxuXHRcdFx0b0NvbnRleHQuZ2V0Qm91bmRDb250ZXh0ID0gZnVuY3Rpb24gKC4uLnN1YkFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdGNvbnN0IG9Cb3VuZENvbnRleHQgPSBmbkdldEJvdW5kQ29udGV4dC5hcHBseSh0aGlzLCAuLi5zdWJBcmdzKTtcblx0XHRcdFx0aWYgKG9Cb3VuZENvbnRleHQgJiYgIW9Cb3VuZENvbnRleHQuc2V0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRvQm91bmRDb250ZXh0LnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZ2V0T2JqZWN0KCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHQvLyBpbml0aWFsaXplXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eSh0aGlzLmdldFBhdGgoKSwge30pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoU3BsaXQgPSBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRcdFx0Ly8gbGV0J3MgZW5zdXJlIHRoYXQgc3ViIG9iamVjdHMgYXJlIGluaXRpYWxpemVkXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnR5UGF0aFNwbGl0Lmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRPYmplY3QocHJvcGVydHlQYXRoU3BsaXRbaV0pID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBpbml0aWFsaXplXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHRoaXMuZ2V0UGF0aChwcm9wZXJ0eVBhdGhTcGxpdFtpXSksIHt9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHByb3BlcnR5UGF0aCwgdmFsdWUsIHRoaXMpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9Cb3VuZENvbnRleHQ7XG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIG9Db250ZXh0O1xuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIEFkZHMgYW4gaGFuZGxlciBvbiBwcm9wZXJ0eUNoYW5nZS5cblx0ICogVGhlIHByb3BlcnR5IFwiL2VkaXRNb2RlXCIgaXMgY2hhbmdlZCBhY2NvcmRpbmcgdG8gcHJvcGVydHkgJy9pc0VkaXRhYmxlJyB3aGVuIHRoaXMgbGFzdCBvbmUgaXMgc2V0XG5cdCAqIGluIG9yZGVyIHRvIGJlIGNvbXBsaWFudCB3aXRoIGZvcm1lciB2ZXJzaW9ucyB3aGVyZSBidWlsZGluZyBibG9ja3MgdXNlIHRoZSBwcm9wZXJ0eSBcIi9lZGl0TW9kZVwiXG5cdCAqXG5cdCAqIEBwYXJhbSB1aU1vZGVsIEpTT04gTW9kZWwgd2hpY2ggaXMgZW5oYW5jZWRcblx0ICogQHBhcmFtIGxpYnJhcnkgQ29yZSBsaWJyYXJ5IG9mIFNBUCBGaW9yaSBlbGVtZW50c1xuXHQgKi9cblxuXHRlbmhhbmNlVWlKU09OTW9kZWw6IGZ1bmN0aW9uICh1aU1vZGVsOiBKU09OTW9kZWwsIGxpYnJhcnk6IGFueSkge1xuXHRcdGNvbnN0IGZuU2V0UHJvcGVydHkgPSB1aU1vZGVsLnNldFByb3BlcnR5IGFzIGFueTtcblx0XHR1aU1vZGVsLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGFyZ3NbMV07XG5cdFx0XHRpZiAoYXJnc1swXSA9PT0gXCIvaXNFZGl0YWJsZVwiKSB7XG5cdFx0XHRcdHVpTW9kZWwuc2V0UHJvcGVydHkoXCIvZWRpdE1vZGVcIiwgdmFsdWUgPyBsaWJyYXJ5LkVkaXRNb2RlLkVkaXRhYmxlIDogbGlicmFyeS5FZGl0TW9kZS5EaXNwbGF5LCBhcmdzWzJdLCBhcmdzWzNdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmblNldFByb3BlcnR5LmFwcGx5KHRoaXMsIFsuLi5hcmdzXSk7XG5cdFx0fTtcblx0fSxcblxuXHRlbmhhbmNlVmlld0pTT05Nb2RlbDogZnVuY3Rpb24gKHZpZXdNb2RlbDogSlNPTk1vZGVsICYgeyBfZ2V0T2JqZWN0OiBGdW5jdGlvbiB9KTogdm9pZCB7XG5cdFx0Y29uc3QgZm5HZXRPYmplY3QgPSB2aWV3TW9kZWwuX2dldE9iamVjdDtcblx0XHR2aWV3TW9kZWwuX2dldE9iamVjdCA9IGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nLCBvQ29udGV4dD86IENvbnRleHQpOiB1bmtub3duIHtcblx0XHRcdGlmIChzUGF0aCA9PT0gdW5kZWZpbmVkIHx8IHNQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRcdHNQYXRoID0gXCIvXCI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5HZXRPYmplY3QuYXBwbHkodGhpcywgW3NQYXRoLCBvQ29udGV4dF0pO1xuXHRcdH07XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHdoZXRoZXIgZmlsdGVyaW5nIG9uIHRoZSB0YWJsZSBpcyBjYXNlIHNlbnNpdGl2ZS5cblx0ICpcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIGluc3RhbmNlIG9mIHRoZSBtZXRhIG1vZGVsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgJ2ZhbHNlJyBpZiBGaWx0ZXJGdW5jdGlvbnMgYW5ub3RhdGlvbiBzdXBwb3J0cyAndG9sb3dlcicsIGVsc2UgJ3RydWUnXG5cdCAqL1xuXHRpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBhbnkpIHtcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IGFGaWx0ZXJGdW5jdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9AT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJGdW5jdGlvbnNcIik7XG5cdFx0Ly8gR2V0IGZpbHRlciBmdW5jdGlvbnMgZGVmaW5lZCBhdCBFbnRpdHlDb250YWluZXIgYW5kIGNoZWNrIGZvciBleGlzdGVuY2Ugb2YgJ3RvbG93ZXInXG5cdFx0cmV0dXJuIGFGaWx0ZXJGdW5jdGlvbnMgPyBhRmlsdGVyRnVuY3Rpb25zLmluZGV4T2YoXCJ0b2xvd2VyXCIpID09PSAtMSA6IHRydWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBNZXRhUGF0aCBmb3IgdGhlIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIGJlIHVzZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgbWV0YXBhdGggZm9yIHRoZSBjb250ZXh0LlxuXHQgKi9cblx0Z2V0TWV0YVBhdGhGb3JDb250ZXh0OiBmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0c1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIG9NZXRhTW9kZWwgJiYgc1BhdGggJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBNZXRhUGF0aCBmb3IgdGhlIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBNZXRhUGF0aCB0byBiZSB1c2VkXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHJvb3QgZW50aXR5IHNldCBwYXRoLlxuXHQgKi9cblx0Z2V0Um9vdEVudGl0eVNldFBhdGg6IGZ1bmN0aW9uIChjb250ZXh0UGF0aDogc3RyaW5nKSB7XG5cdFx0bGV0IHJvb3RFbnRpdHlTZXRQYXRoID0gXCJcIjtcblx0XHRjb25zdCBhUGF0aHMgPSBjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoLnNwbGl0KFwiL1wiKSA6IFtdO1xuXHRcdGlmIChhUGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0cm9vdEVudGl0eVNldFBhdGggPSBhUGF0aHNbMV07XG5cdFx0fVxuXHRcdHJldHVybiByb290RW50aXR5U2V0UGF0aDtcblx0fSxcblx0LyoqXG5cdCAqIEdldCBNZXRhUGF0aCBmb3IgdGhlIGxpc3RCaW5kaW5nLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZpZXcgVmlldyBvZiB0aGUgY29udHJvbCB1c2luZyBsaXN0QmluZGluZ1xuXHQgKiBAcGFyYW0gdkxpc3RCaW5kaW5nIE9EYXRhTGlzdEJpbmRpbmcgb2JqZWN0IG9yIHRoZSBiaW5kaW5nIHBhdGggZm9yIGEgdGVtcG9yYXJ5IGxpc3QgYmluZGluZ1xuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBtZXRhcGF0aCBmb3IgdGhlIGxpc3RiaW5kaW5nLlxuXHQgKi9cblx0Z2V0QWJzb2x1dGVNZXRhUGF0aEZvckxpc3RCaW5kaW5nOiBmdW5jdGlvbiAob1ZpZXc6IEZFVmlldywgdkxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nIHwgc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IHNNZXRhUGF0aDtcblxuXHRcdGlmICh0eXBlb2Ygdkxpc3RCaW5kaW5nID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpZiAodkxpc3RCaW5kaW5nLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRcdC8vIGFic29sdXRlIHBhdGhcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aCh2TGlzdEJpbmRpbmcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVsYXRpdmUgcGF0aFxuXHRcdFx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBzUm9vdENvbnRleHRQYXRoID0gb0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChgJHtzUm9vdENvbnRleHRQYXRofS8ke3ZMaXN0QmluZGluZ31gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gd2UgYWxyZWFkeSBnZXQgYSBsaXN0IGJpbmRpbmcgdXNlIHRoaXMgb25lXG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHZMaXN0QmluZGluZztcblx0XHRcdGNvbnN0IG9Sb290QmluZGluZyA9IG9CaW5kaW5nLmdldFJvb3RCaW5kaW5nKCk7XG5cdFx0XHRpZiAob0JpbmRpbmcgPT09IG9Sb290QmluZGluZykge1xuXHRcdFx0XHQvLyBhYnNvbHV0ZSBwYXRoXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0JpbmRpbmcuZ2V0UGF0aCgpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHJlbGF0aXZlIHBhdGhcblx0XHRcdFx0Y29uc3Qgc1Jvb3RCaW5kaW5nUGF0aCA9IG9Sb290QmluZGluZyEuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBzUmVsYXRpdmVQYXRoID0gb0JpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGAke3NSb290QmluZGluZ1BhdGh9LyR7c1JlbGF0aXZlUGF0aH1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNNZXRhUGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIGRyYWZ0IHJvb3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgZHJhZnQgcm9vdFxuXHQgKi9cblx0aXNEcmFmdFJvb3Q6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldERyYWZ0Um9vdChlbnRpdHlTZXQpICE9PSB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBkcmFmdCBub2RlLlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIGRyYWZ0IG5vZGVcblx0ICovXG5cdGlzRHJhZnROb2RlOiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXREcmFmdE5vZGUoZW50aXR5U2V0KSAhPT0gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgc3RpY2t5IHNlc3Npb24gcm9vdC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBzdGlja3kgc2Vzc2lvbiByb290XG5cdCAqL1xuXHRpc1N0aWNreTogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U3RpY2t5U2Vzc2lvbihlbnRpdHlTZXQpICE9PSB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgZW50aXR5IGlzIHVwZGF0YWJsZSBvciBub3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIEVudGl0eVR5cGVcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB1cGRhdGFibGUgZWxzZSBmYWxzZVxuXHQgKi9cblx0aXNVcGRhdGVIaWRkZW46IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCwgZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IFVwZGF0ZUhpZGRlbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGlzRW50aXR5U2V0KGVudGl0eVNldCkpIHtcblx0XHRcdHJldHVybiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbiA/PyBlbnRpdHlUeXBlPy5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIEdldHMgdGhlIEBDb21tb24uRHJhZnRSb290IGFubm90YXRpb24gaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEVudGl0eVNldC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgRHJhZnRSb290XG5cdCAqL1xuXHRnZXREcmFmdFJvb3Q6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCk6IERyYWZ0Um9vdCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIEBDb21tb24uRHJhZnROb2RlIGFubm90YXRpb24gaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEVudGl0eVNldC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgRHJhZnRSb290XG5cdCAqL1xuXHRnZXREcmFmdE5vZGU6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCk6IERyYWZ0Tm9kZSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdE5vZGUgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEhlbHBlciBtZXRob2QgdG8gZ2V0IHN0aWNreSBzZXNzaW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcmV0dXJucyBTZXNzaW9uIFN0aWNreVNlc3Npb25TdXBwb3J0ZWRcblx0ICovXG5cdGdldFN0aWNreVNlc3Npb246IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCk6IFN0aWNreVNlc3Npb25TdXBwb3J0ZWQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgZGVsZXRlIGJ1dHRvbi5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgRW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGRlbGV0ZSBidXR0b24gaXMgaGlkZGVuXG5cdCAqL1xuXHRnZXREZWxldGVIaWRkZW46IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCwgZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IERlbGV0ZUhpZGRlbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGlzRW50aXR5U2V0KGVudGl0eVNldCkpIHtcblx0XHRcdHJldHVybiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlbiA/PyBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5EZWxldGVIaWRkZW47XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBtZXRhcGF0aCBmb3IgdGhlIGdpdmVuIGxpc3QgYmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIExpc3RCaW5kaW5nLlxuXHQgKiBAcmV0dXJucyBNZXRhUGF0aFxuXHQgKi9cblx0Z2V0QWJzb2x1dGVQYXRoRnJvbUxpc3RCaW5kaW5nKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBtZXRhbW9kZWwgPSBsaXN0QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBtZXRhUGF0aDtcblx0XHRjb25zdCByb290QmluZGluZyA9IGxpc3RCaW5kaW5nLmdldFJvb3RCaW5kaW5nKCk7XG5cdFx0aWYgKGxpc3RCaW5kaW5nID09PSByb290QmluZGluZykge1xuXHRcdFx0bWV0YVBhdGggPSBtZXRhbW9kZWwuZ2V0TWV0YVBhdGgobGlzdEJpbmRpbmcuZ2V0UGF0aCgpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgcm9vdEJpbmRpbmdQYXRoID0gcm9vdEJpbmRpbmc/LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGxpc3RCaW5kaW5nLmdldFBhdGgoKTtcblx0XHRcdG1ldGFQYXRoID0gbWV0YW1vZGVsLmdldE1ldGFQYXRoKGAke3Jvb3RCaW5kaW5nUGF0aH0vJHtyZWxhdGl2ZVBhdGh9YCk7XG5cdFx0fVxuXHRcdHJldHVybiBtZXRhUGF0aDtcblx0fSxcblxuXHRlbmhhbmNlT0RhdGFNb2RlbChvZGF0YU1vZGVsOiBPRGF0YU1vZGVsKTogdm9pZCB7XG5cdFx0Y29uc3QgZm5NZXNzYWdlID0gb2RhdGFNb2RlbC5zZXRNZXNzYWdlcztcblx0XHRjb25zdCBsb2NhbEFubm90YXRpb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pO1xuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldERlZmF1bHRCaW5kaW5nTW9kZShCaW5kaW5nTW9kZS5PbmVXYXkpO1xuXHRcdGNvbnN0IGJhc2VTZXRQcm9wZXJ0eSA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5O1xuXHRcdGNvbnN0IGJhc2VHZXRQcm9wZXJ0eSA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldFByb3BlcnR5O1xuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldFByb3BlcnR5ID0gZnVuY3Rpb24gKHBhdGgsIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdW5rbm93biB7XG5cdFx0XHRjb25zdCBbX3Byb3BlcnR5TmFtZSwgYW5ub3RhdGlvblR5cGVdID0gcGF0aC5zcGxpdChcIkAkdWk1LmZlLlwiKTtcblx0XHRcdGlmIChjb250ZXh0ICYmIGFubm90YXRpb25UeXBlID09PSBcImNvbnRleHRQYXRoXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gYmFzZUdldFByb3BlcnR5LmFwcGx5KHRoaXMsIFtwYXRoLCBjb250ZXh0XSk7XG5cdFx0fTtcblx0XHRsb2NhbEFubm90YXRpb25Nb2RlbC5zZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwYXRoLCB2YWx1ZSwgY29udGV4dCwgYXN5bmNVcGRhdGUpOiBib29sZWFuIHtcblx0XHRcdGxldCBmdWxsUGF0aCA9IHBhdGg7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHRmdWxsUGF0aCA9IGNvbnRleHQuZ2V0UGF0aChwYXRoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aFNwbGl0ID0gZnVsbFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Ly8gbGV0J3MgZW5zdXJlIHRoYXQgc3ViIG9iamVjdHMgYXJlIGluaXRpYWxpemVkXG5cdFx0XHRsZXQgcGF0aEZyb21Sb290ID0gXCJcIjtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVydHlQYXRoU3BsaXQubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHRcdHBhdGhGcm9tUm9vdCArPSBcIi9cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYXRoRnJvbVJvb3QgKz0gcHJvcGVydHlQYXRoU3BsaXRbaV07XG5cdFx0XHRcdGlmICh0aGlzLmdldE9iamVjdChwYXRoRnJvbVJvb3QpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBpbml0aWFsaXplXG5cdFx0XHRcdFx0dGhpcy5zZXRQcm9wZXJ0eShwYXRoRnJvbVJvb3QsIHt9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGJhc2VTZXRQcm9wZXJ0eS5hcHBseSh0aGlzLCBbcGF0aCwgdmFsdWUsIGNvbnRleHQsIGFzeW5jVXBkYXRlXSk7XG5cdFx0fTtcblx0XHRmdW5jdGlvbiBjbGVhckFubm90YXRpb25UeXBlKGFubm90YXRpb25UeXBlczogc3RyaW5nW10sIGRhdGFTZXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogb2JqZWN0IHtcblx0XHRcdGZvciAoY29uc3QgY29udGV4dFBhdGggaW4gZGF0YVNldCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGRhdGFTZXRbY29udGV4dFBhdGhdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0ZGF0YVNldFtjb250ZXh0UGF0aF0gPSBjbGVhckFubm90YXRpb25UeXBlKGFubm90YXRpb25UeXBlcywgZGF0YVNldFtjb250ZXh0UGF0aF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXHRcdFx0XHRcdGlmIChPYmplY3Qua2V5cyhkYXRhU2V0W2NvbnRleHRQYXRoXSBhcyBvYmplY3QpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGRhdGFTZXRbY29udGV4dFBhdGhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGNvbnN0IGFubm90YXRpb25UeXBlIG9mIGFubm90YXRpb25UeXBlcykge1xuXHRcdFx0XHRcdGlmIChjb250ZXh0UGF0aC5lbmRzV2l0aChhbm5vdGF0aW9uVHlwZSkpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBkYXRhU2V0W2NvbnRleHRQYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBkYXRhU2V0O1xuXHRcdH1cblx0XHRvZGF0YU1vZGVsLl9sb2NhbEFubm90YXRpb25Nb2RlbCA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsO1xuXHRcdG9kYXRhTW9kZWwuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwgPSBmdW5jdGlvbiAoKTogSlNPTk1vZGVsIHtcblx0XHRcdHJldHVybiB0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbDtcblx0XHR9O1xuXHRcdG9kYXRhTW9kZWwuc2V0TWVzc2FnZXMgPSBmdW5jdGlvbiAobWVzc2FnZXM6IFJlY29yZDxzdHJpbmcsIE1lc3NhZ2VbXT4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IGNsZWFuZWREYXRhID0gY2xlYXJBbm5vdGF0aW9uVHlwZShbXCJAJHVpNS5mZS5tZXNzYWdlVHlwZVwiLCBcIkAkdWk1LmZlLm1lc3NhZ2VUZXh0XCJdLCB0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbC5nZXREYXRhKCkpO1xuXHRcdFx0dGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0RGF0YShjbGVhbmVkRGF0YSk7XG5cdFx0XHRmb3IgKGNvbnN0IG1lc3NhZ2VUYXJnZXQgaW4gbWVzc2FnZXMpIHtcblx0XHRcdFx0dGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoYCR7bWVzc2FnZVRhcmdldH1AJHVpNS5mZS5tZXNzYWdlVHlwZWAsIG1lc3NhZ2VzW21lc3NhZ2VUYXJnZXRdWzBdLmdldFR5cGUoKSk7XG5cdFx0XHRcdHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5KGAke21lc3NhZ2VUYXJnZXR9QCR1aTUuZmUubWVzc2FnZVRleHRgLCBtZXNzYWdlc1ttZXNzYWdlVGFyZ2V0XVswXS5nZXRNZXNzYWdlKCkpO1xuXHRcdFx0fVxuXHRcdFx0Zm5NZXNzYWdlLmFwcGx5KHRoaXMsIFttZXNzYWdlc10pO1xuXHRcdH07XG5cdFx0Y29uc3QgZm5CaW5kUHJvcGVydHkgPSBvZGF0YU1vZGVsLmJpbmRQcm9wZXJ0eS5iaW5kKG9kYXRhTW9kZWwpO1xuXHRcdG9kYXRhTW9kZWwuYmluZFByb3BlcnR5ID0gZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgY29udGV4dDogT0RhdGFWNENvbnRleHQsIHBhcmFtZXRlcnMpOiBPRGF0YVByb3BlcnR5QmluZGluZyB7XG5cdFx0XHRpZiAocGF0aC5pbmNsdWRlcyhcIkAkdWk1LmZlLlwiKSkge1xuXHRcdFx0XHRjb25zdCBwcm9wQmluZGluZyA9IHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLmJpbmRQcm9wZXJ0eShwYXRoLCBjb250ZXh0KSBhcyB1bmtub3duIGFzIE9EYXRhUHJvcGVydHlCaW5kaW5nO1xuXHRcdFx0XHRwcm9wQmluZGluZy51cGRhdGVSZXF1aXJlZCA9IGZ1bmN0aW9uIChtb2RlbDogb2JqZWN0KTogYm9vbGVhbiB7XG5cdFx0XHRcdFx0cmV0dXJuIG1vZGVsICYmIG1vZGVsID09PSBvZGF0YU1vZGVsO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gcHJvcEJpbmRpbmc7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5CaW5kUHJvcGVydHkocGF0aCwgY29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0fTtcblx0XHRjb25zdCBmbkRlc3Ryb3kgPSBvZGF0YU1vZGVsLmRlc3Ryb3kuYmluZChvZGF0YU1vZGVsKTtcblx0XHRvZGF0YU1vZGVsLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHR0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gZm5EZXN0cm95LmFwcGx5KHRoaXMpO1xuXHRcdH07XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXNvbHZlcyBhIG1ldGFkYXRhIGJpbmRpbmcgdG8gaXRzIHRleHQsIGVpdGhlciB1c2luZyB0aGUgY29udmVydGVyQ29udGV4dCBvciB0aGUgbWV0YU1vZGVsIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcGFyYW0gcGF0aFxuXHQgKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCB0ZXh0IGlmIHBvc3NpYmxlLCBlbHNlIHRoZSBpbnB1dCB2YWx1ZSBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIHBhdGggd2FzIHVuZGVmaW5lZFxuXHQgKi9cblx0ZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQ/OiBDb252ZXJ0ZXJDb250ZXh0PHVua25vd24+LCBtZXRhTW9kZWw/OiBNZXRhTW9kZWwpOiBzdHJpbmcge1xuXHRcdGxldCB0ZXh0ID0gcGF0aCAhPT0gdW5kZWZpbmVkID8gcGF0aCA6IFwiXCI7XG5cdFx0aWYgKHBhdGg/LnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsUGF0aCA9IHBhdGguc3Vic3RyaW5nKDExLCBwYXRoLmxlbmd0aCAtIDEpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQpIHtcblx0XHRcdFx0XHR0ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihtZXRhTW9kZWxQYXRoKS5hbm5vdGF0aW9uPy50b1N0cmluZygpID8/IFwiXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGV4dCA9IG1ldGFNb2RlbD8uZ2V0T2JqZWN0KG1ldGFNb2RlbFBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdExvZy5pbmZvKGBVbmFibGUgdG8gcmV0cmlldmUgdGV4dCBmcm9tIG1ldGEgbW9kZWwgdXNpbmcgcGF0aCAke21ldGFNb2RlbFBhdGh9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0ZXh0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmV0cmlldmUgdGhlIHByb3BlcnR5IHBhdGggY29ycmVzcG9uZGluZyB0byBzdGF0ZSBtZXNzYWdlcy5cblx0ICpcblx0ICogQHBhcmFtIG1ldGFNb2RlbCBUaGUgbWV0YW1vZGVsXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBQYXRoIGZvciB0aGUgY29udGV4dCBvbiB3aGljaCB3ZSB3aGF0IHRvIHJldHJlaXZlIHRoZSBtZXNzYWdlIHBhdGhcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCwgb3IgdW5kZWZpbmVkIGlmIG5vIE1lc3NhZ2VzIGFubm90YXRpb24gaXMgZGVmaW5lZFxuXHQgKi9cblx0Z2V0TWVzc2FnZXNQYXRoOiBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgY29udGV4dFBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoY29udGV4dFBhdGgpO1xuXHRcdGNvbnN0IG9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBvYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5NZXNzYWdlcztcblx0XHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24obWVzc2FnZXMpID8gbWVzc2FnZXMucGF0aCA6IHVuZGVmaW5lZDtcblx0fVxufTtcblxuZXhwb3J0IHR5cGUgSW50ZXJuYWxNb2RlbENvbnRleHQgPSB7IGdldE1vZGVsKCk6IEpTT05Nb2RlbCB9ICYgQmFzZUNvbnRleHQgJiB7XG5cdFx0c2V0UHJvcGVydHkoc1BhdGg6IHN0cmluZywgdlZhbHVlOiBhbnkpOiB2b2lkO1xuXHR9O1xuXG5leHBvcnQgZGVmYXVsdCBNb2RlbEhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6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
|
|
@@ -6,12 +6,13 @@ import type { DeleteHidden, UpdateHidden } from "@sap-ux/vocabularies-types/voca
|
|
|
6
6
|
import type { FEView } from "sap/fe/core/BaseController";
|
|
7
7
|
import * as MetaModelConverter from "sap/fe/core/converters/MetaModelConverter";
|
|
8
8
|
import { getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
|
|
9
|
-
import { isEntitySet, isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
|
|
9
|
+
import { isEntitySet, isNavigationProperty, isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
|
|
10
10
|
import type Message from "sap/ui/core/message/Message";
|
|
11
11
|
import type BaseContext from "sap/ui/model/Context";
|
|
12
12
|
|
|
13
13
|
import Log from "sap/base/Log";
|
|
14
14
|
import type ConverterContext from "sap/fe/core/converters/ConverterContext";
|
|
15
|
+
import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
|
|
15
16
|
import BindingMode from "sap/ui/model/BindingMode";
|
|
16
17
|
import type MetaModel from "sap/ui/model/MetaModel";
|
|
17
18
|
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
@@ -56,7 +57,7 @@ const ModelHelper = {
|
|
|
56
57
|
*/
|
|
57
58
|
isDraftSupported: function (metaModel: ODataMetaModel, path: string) {
|
|
58
59
|
const metaContext = metaModel.getMetaContext(path);
|
|
59
|
-
const objectPath = getInvolvedDataModelObjects(metaContext);
|
|
60
|
+
const objectPath = getInvolvedDataModelObjects<PageContextPathTarget>(metaContext);
|
|
60
61
|
return this.isObjectPathDraftSupported(objectPath);
|
|
61
62
|
},
|
|
62
63
|
|
|
@@ -66,11 +67,12 @@ const ModelHelper = {
|
|
|
66
67
|
* @param dataModelObjectPath
|
|
67
68
|
* @returns `true` if it is supported
|
|
68
69
|
*/
|
|
69
|
-
isObjectPathDraftSupported: function (dataModelObjectPath: DataModelObjectPath): boolean {
|
|
70
|
+
isObjectPathDraftSupported: function (dataModelObjectPath: DataModelObjectPath<unknown>): boolean {
|
|
70
71
|
const currentEntitySet = dataModelObjectPath.targetEntitySet as EntitySet;
|
|
71
72
|
const bIsDraftRoot = ModelHelper.isDraftRoot(currentEntitySet);
|
|
72
73
|
const bIsDraftNode = ModelHelper.isDraftNode(currentEntitySet);
|
|
73
74
|
const bIsDraftParentEntityForContainment =
|
|
75
|
+
isNavigationProperty(dataModelObjectPath.targetObject) &&
|
|
74
76
|
dataModelObjectPath.targetObject?.containsTarget &&
|
|
75
77
|
((dataModelObjectPath.startingEntitySet as EntitySet)?.annotations?.Common?.DraftRoot ||
|
|
76
78
|
(dataModelObjectPath.startingEntitySet as EntitySet)?.annotations?.Common?.DraftNode)
|
|
@@ -546,7 +548,11 @@ const ModelHelper = {
|
|
|
546
548
|
const fnBindProperty = odataModel.bindProperty.bind(odataModel);
|
|
547
549
|
odataModel.bindProperty = function (path: string, context: ODataV4Context, parameters): ODataPropertyBinding {
|
|
548
550
|
if (path.includes("@$ui5.fe.")) {
|
|
549
|
-
|
|
551
|
+
const propBinding = this._localAnnotationModel.bindProperty(path, context) as unknown as ODataPropertyBinding;
|
|
552
|
+
propBinding.updateRequired = function (model: object): boolean {
|
|
553
|
+
return model && model === odataModel;
|
|
554
|
+
};
|
|
555
|
+
return propBinding;
|
|
550
556
|
}
|
|
551
557
|
return fnBindProperty(path, context, parameters);
|
|
552
558
|
};
|
|
@@ -565,13 +571,13 @@ const ModelHelper = {
|
|
|
565
571
|
*
|
|
566
572
|
* @returns The resolved text if possible, else the input value or an empty string if the path was undefined
|
|
567
573
|
*/
|
|
568
|
-
fetchTextFromMetaModel(path: string | undefined, converterContext?: ConverterContext
|
|
574
|
+
fetchTextFromMetaModel(path: string | undefined, converterContext?: ConverterContext<unknown>, metaModel?: MetaModel): string {
|
|
569
575
|
let text = path !== undefined ? path : "";
|
|
570
576
|
if (path?.startsWith("{metaModel>")) {
|
|
571
577
|
const metaModelPath = path.substring(11, path.length - 1);
|
|
572
578
|
try {
|
|
573
579
|
if (converterContext) {
|
|
574
|
-
text = converterContext.getEntityTypeAnnotation(metaModelPath).annotation
|
|
580
|
+
text = converterContext.getEntityTypeAnnotation(metaModelPath).annotation?.toString() ?? "";
|
|
575
581
|
} else {
|
|
576
582
|
text = metaModel?.getObject(metaModelPath);
|
|
577
583
|
}
|