@kontur.candy/tools 2.210.1-cgroupv2.0 → 2.210.1-cgroupv2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/distr/Common/AsyncUtils.js +18 -0
- package/distr/Common/AsyncUtils.js.map +1 -0
- package/distr/Common/AutoValidationUtils.js +8 -0
- package/distr/Common/AutoValidationUtils.js.map +1 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +578 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/CandyApiClientContext.js +18 -0
- package/distr/Common/CandyApiClient/CandyApiClientContext.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +6 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +6 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +12 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +6 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +33 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +35 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +20 -0
- package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +89 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +42 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +9 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +6 -0
- package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +18 -0
- package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +15 -0
- package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +19 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +6 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +248 -0
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/ICandyApiClient.js +6 -0
- package/distr/Common/CandyApiClient/ICandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/IsBuffer.js +15 -0
- package/distr/Common/CandyApiClient/IsBuffer.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +6 -0
- package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +6 -0
- package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +24 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +6 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +6 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +9 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftFullId.js +6 -0
- package/distr/Common/CandyApiClient/Types/DraftFullId.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js +12 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ResolveInnerPathRequest.js +6 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ResolveInnerPathRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ResolvePathResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ResolvePathResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +17 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +13 -0
- package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +15 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +9 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Guid.js +6 -0
- package/distr/Common/CandyApiClient/Types/Guid.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js +6 -0
- package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +6 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js +6 -0
- package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +24 -0
- package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +6 -0
- package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js +12 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js +19 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js +13 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js +21 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js +19 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js +6 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js +26 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js +16 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js +16 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js +6 -0
- package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +6 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js +6 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js +6 -0
- package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +14 -0
- package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js.map +1 -0
- package/distr/Common/CollectionUtils.js +15 -0
- package/distr/Common/CollectionUtils.js.map +1 -0
- package/distr/Common/CommonConstants/SectionNames.js +11 -0
- package/distr/Common/CommonConstants/SectionNames.js.map +1 -0
- package/distr/Common/Comparers.js +63 -0
- package/distr/Common/Comparers.js.map +1 -0
- package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +22 -0
- package/distr/Common/EmotionStorybookWorkaroundViaAliases.js.map +1 -0
- package/distr/Common/EndPoints.js +16 -0
- package/distr/Common/EndPoints.js.map +1 -0
- package/distr/Common/Enums/ButtonSettingsTypeEnum.js +12 -0
- package/distr/Common/Enums/ButtonSettingsTypeEnum.js.map +1 -0
- package/distr/Common/Errors.js +44 -0
- package/distr/Common/Errors.js.map +1 -0
- package/distr/Common/ExtractGFVPath/ExtractGFVPath.js +31 -0
- package/distr/Common/ExtractGFVPath/ExtractGFVPath.js.map +1 -0
- package/distr/Common/FSPrinterClient/FSPrinterClient.js +153 -0
- package/distr/Common/FSPrinterClient/FSPrinterClient.js.map +1 -0
- package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js +19 -0
- package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js.map +1 -0
- package/distr/Common/FSPrinterClient/IFSPrinterClient.js +39 -0
- package/distr/Common/FSPrinterClient/IFSPrinterClient.js.map +1 -0
- package/distr/Common/FormActionHandlers/ContextualActionNames.js +14 -0
- package/distr/Common/FormActionHandlers/ContextualActionNames.js.map +1 -0
- package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +6 -0
- package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js.map +1 -0
- package/distr/Common/FormPathUtils.js +21 -0
- package/distr/Common/FormPathUtils.js.map +1 -0
- package/distr/Common/Funcs.js +11 -0
- package/distr/Common/Funcs.js.map +1 -0
- package/distr/Common/GFV.js +6 -0
- package/distr/Common/GFV.js.map +1 -0
- package/distr/Common/GetRngSchemaFileExtension.js +26 -0
- package/distr/Common/GetRngSchemaFileExtension.js.map +1 -0
- package/distr/Common/Hooks/UseLocalStorage.js +35 -0
- package/distr/Common/Hooks/UseLocalStorage.js.map +1 -0
- package/distr/Common/HttpClient/AuthenticationMode.js +31 -0
- package/distr/Common/HttpClient/AuthenticationMode.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +9 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +9 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/Fetch.js +6 -0
- package/distr/Common/HttpClient/FetchImplementation/Fetch.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +8 -0
- package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +36 -0
- package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js.map +1 -0
- package/distr/Common/HttpClient/HttpClient.js +313 -0
- package/distr/Common/HttpClient/HttpClient.js.map +1 -0
- package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +6 -0
- package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js.map +1 -0
- package/distr/Common/HttpClient/IHttpClient.js +6 -0
- package/distr/Common/HttpClient/IHttpClient.js.map +1 -0
- package/distr/Common/IndentString.js +16 -0
- package/distr/Common/IndentString.js.map +1 -0
- package/distr/Common/IntRangeUtils.js +32 -0
- package/distr/Common/IntRangeUtils.js.map +1 -0
- package/distr/Common/IterableUtils.js +288 -0
- package/distr/Common/IterableUtils.js.map +1 -0
- package/distr/Common/KCLangRuntimeUtils.js +266 -0
- package/distr/Common/KCLangRuntimeUtils.js.map +1 -0
- package/distr/Common/ModelPath/AbsoluteModelFieldPath.js +55 -0
- package/distr/Common/ModelPath/AbsoluteModelFieldPath.js.map +1 -0
- package/distr/Common/ModelPath/BuildIterationSequence.js +41 -0
- package/distr/Common/ModelPath/BuildIterationSequence.js.map +1 -0
- package/distr/Common/ModelPath/EachCurrentCollision.js +12 -0
- package/distr/Common/ModelPath/EachCurrentCollision.js.map +1 -0
- package/distr/Common/ModelPath/IEquatable.js +6 -0
- package/distr/Common/ModelPath/IEquatable.js.map +1 -0
- package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +23 -0
- package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js.map +1 -0
- package/distr/Common/ModelPath/Map/Map2.js +99 -0
- package/distr/Common/ModelPath/Map/Map2.js.map +1 -0
- package/distr/Common/ModelPath/Map/ModelPathMap.js +23 -0
- package/distr/Common/ModelPath/Map/ModelPathMap.js.map +1 -0
- package/distr/Common/ModelPath/ModelPath.js +476 -0
- package/distr/Common/ModelPath/ModelPath.js.map +1 -0
- package/distr/Common/ModelPath/ModelPathBuilder.js +42 -0
- package/distr/Common/ModelPath/ModelPathBuilder.js.map +1 -0
- package/distr/Common/ModelPath/ModelPathHelper.js +34 -0
- package/distr/Common/ModelPath/ModelPathHelper.js.map +1 -0
- package/distr/Common/ModelPath/PathMatcher.js +95 -0
- package/distr/Common/ModelPath/PathMatcher.js.map +1 -0
- package/distr/Common/ModelPath/PathSplitHelper.js +21 -0
- package/distr/Common/ModelPath/PathSplitHelper.js.map +1 -0
- package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +31 -0
- package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +31 -0
- package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/ModelPathSet.js +31 -0
- package/distr/Common/ModelPath/Set/ModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/Set2.js +59 -0
- package/distr/Common/ModelPath/Set/Set2.js.map +1 -0
- package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +33 -0
- package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +6 -0
- package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +11 -0
- package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +66 -0
- package/distr/Common/NidusClient/Fakes/FakeNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +108 -0
- package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/INidusClient.js +14 -0
- package/distr/Common/NidusClient/INidusClient.js.map +1 -0
- package/distr/Common/NidusClient/NidusClientContext.js +34 -0
- package/distr/Common/NidusClient/NidusClientContext.js.map +1 -0
- package/distr/Common/NidusClient/NidusClientImpl.js +55 -0
- package/distr/Common/NidusClient/NidusClientImpl.js.map +1 -0
- package/distr/Common/PathConstants.js +11 -0
- package/distr/Common/PathConstants.js.map +1 -0
- package/distr/Common/PicklistApiClient/IPicklistApiClient.js +6 -0
- package/distr/Common/PicklistApiClient/IPicklistApiClient.js.map +1 -0
- package/distr/Common/PicklistApiClient/PicklistApiClient.js +31 -0
- package/distr/Common/PicklistApiClient/PicklistApiClient.js.map +1 -0
- package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js +36 -0
- package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js.map +1 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js +53 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js.map +1 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js +37 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js.map +1 -0
- package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js +6 -0
- package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js.map +1 -0
- package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js +6 -0
- package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js.map +1 -0
- package/distr/Common/RngSchemeTypes/types.js +6 -0
- package/distr/Common/RngSchemeTypes/types.js.map +1 -0
- package/distr/Common/StringArrayKey.js +26 -0
- package/distr/Common/StringArrayKey.js.map +1 -0
- package/distr/Common/TextExtractor/TextExtractorTypes.js +6 -0
- package/distr/Common/TextExtractor/TextExtractorTypes.js.map +1 -0
- package/distr/Common/TypingUtils.js +118 -0
- package/distr/Common/TypingUtils.js.map +1 -0
- package/distr/Common/UUID.js +14 -0
- package/distr/Common/UUID.js.map +1 -0
- package/distr/Common/UseAsyncEffect.js +20 -0
- package/distr/Common/UseAsyncEffect.js.map +1 -0
- package/distr/Common/UseShowOnce.js +60 -0
- package/distr/Common/UseShowOnce.js.map +1 -0
- package/distr/Common/UseTypedSelector.js +10 -0
- package/distr/Common/UseTypedSelector.js.map +1 -0
- package/distr/Common/WellKnownDirectories.js +14 -0
- package/distr/Common/WellKnownDirectories.js.map +1 -0
- package/distr/Common/hashUtils.js +14 -0
- package/distr/Common/hashUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +77 -0
- package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +14 -0
- package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +22 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +88 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +82 -0
- package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +10 -0
- package/distr/Tools/src/BuildTasks/Engine/EngineSource.js.map +1 -0
- package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +42 -0
- package/distr/Tools/src/BuildTasks/EngineStructureUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +30 -0
- package/distr/Tools/src/BuildTasks/EngineVersionUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/FSTask.js +67 -0
- package/distr/Tools/src/BuildTasks/FSTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js +52 -0
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +44 -0
- package/distr/Tools/src/BuildTasks/Form/GenerateForm.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +37 -0
- package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +25 -0
- package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +31 -0
- package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +27 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +95 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +126 -0
- package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +174 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +121 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +45 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +52 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +49 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +19 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +64 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +84 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js.map +1 -0
- package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +174 -0
- package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ReadFormSource.js +112 -0
- package/distr/Tools/src/BuildTasks/ReadFormSource.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +107 -0
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Version.js +41 -0
- package/distr/Tools/src/BuildTasks/Version.js.map +1 -0
- package/distr/Tools/src/BuildTasks/WriteFormMeta.js +27 -0
- package/distr/Tools/src/BuildTasks/WriteFormMeta.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +28 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +169 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/ClearSourceMapForProduction.js +24 -0
- package/distr/Tools/src/CLICommands/BuildForms/ClearSourceMapForProduction.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +234 -0
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +36 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +112 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +158 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +94 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +129 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerCandyWidgetController.js +45 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerCandyWidgetController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +76 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +67 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +65 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +117 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +22 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +96 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +231 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/CandyWidgetDevServer.js +70 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/CandyWidgetDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +57 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +67 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +21 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +52 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +80 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +31 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +6 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +6 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +184 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +213 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +28 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +6 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +110 -0
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +50 -0
- package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +19 -0
- package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +30 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +6 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +163 -0
- package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +112 -0
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +34 -0
- package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +50 -0
- package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +54 -0
- package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}./320/232/320/241.candy.js.kclang +0 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.AfterMerge.xslt +11 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.BeforePreload.xslt +11 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.fufPatcher.xslt +11 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.outer.inner.json +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js +2 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/form.json +12 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/addPril1.txt +6 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/presentations.json +8 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/schemas/{gfv}.0.rng.xml +20 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/sugar/index.sugar.xml +10 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +16 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +23 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/validations.KC.kclang +0 -0
- package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +34 -0
- package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +117 -0
- package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js.map +1 -0
- package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +44 -0
- package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +73 -0
- package/distr/Tools/src/CLICommands/Localization/RunLocalization.js.map +1 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js +25 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +38 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js.map +1 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js +36 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js.map +1 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js +50 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js.map +1 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +144 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js.map +1 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +78 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js.map +1 -0
- package/distr/Tools/src/CandyCLI.js +144 -0
- package/distr/Tools/src/CandyCLI.js.map +1 -0
- package/distr/Tools/src/CheckNodeJsVersion.js +32 -0
- package/distr/Tools/src/CheckNodeJsVersion.js.map +1 -0
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +28 -0
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js.map +1 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +93 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js.map +1 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +24 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js.map +1 -0
- package/distr/Tools/src/Commons/ErrorUntyped.js +6 -0
- package/distr/Tools/src/Commons/ErrorUntyped.js.map +1 -0
- package/distr/Tools/src/Commons/EventObject.js +74 -0
- package/distr/Tools/src/Commons/EventObject.js.map +1 -0
- package/distr/Tools/src/Commons/ExecUtils.js +38 -0
- package/distr/Tools/src/Commons/ExecUtils.js.map +1 -0
- package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +21 -0
- package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js.map +1 -0
- package/distr/Tools/src/Commons/FormGlobsUtils.js +137 -0
- package/distr/Tools/src/Commons/FormGlobsUtils.js.map +1 -0
- package/distr/Tools/src/Commons/FormLocationInfo.js +6 -0
- package/distr/Tools/src/Commons/FormLocationInfo.js.map +1 -0
- package/distr/Tools/src/Commons/FsUtils.js +35 -0
- package/distr/Tools/src/Commons/FsUtils.js.map +1 -0
- package/distr/Tools/src/Commons/GetCpuLimits.js +64 -0
- package/distr/Tools/src/Commons/GetCpuLimits.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +38 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +57 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +15 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +18 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +6 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +14 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +17 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +22 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +20 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +46 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +13 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +18 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +13 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +13 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +6 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +13 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +13 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +113 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +24 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +106 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +22 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/Lock.js +24 -0
- package/distr/Tools/src/Commons/Locks/Lock.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/LockHandle.js +17 -0
- package/distr/Tools/src/Commons/Locks/LockHandle.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +31 -0
- package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/ELKLogger.js +56 -0
- package/distr/Tools/src/Commons/Logging/ELKLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/ILogger.js +25 -0
- package/distr/Tools/src/Commons/Logging/ILogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +61 -0
- package/distr/Tools/src/Commons/Logging/InMemoryLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/Logger.js +78 -0
- package/distr/Tools/src/Commons/Logging/Logger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/StaticLogger.js +37 -0
- package/distr/Tools/src/Commons/Logging/StaticLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +2 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js.map +1 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +152 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js.map +1 -0
- package/distr/Tools/src/Commons/PathPattern.js +42 -0
- package/distr/Tools/src/Commons/PathPattern.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +16 -0
- package/distr/Tools/src/Commons/TasksCore/AggregatedError.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/BuildTask.js +6 -0
- package/distr/Tools/src/Commons/TasksCore/BuildTask.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +668 -0
- package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +77 -0
- package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +20 -0
- package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +48 -0
- package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +45 -0
- package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js +25 -0
- package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/Observe.js +35 -0
- package/distr/Tools/src/Commons/TasksCore/Observe.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +29 -0
- package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TimingUtils.js +13 -0
- package/distr/Tools/src/Commons/TimingUtils.js.map +1 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +180 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js.map +1 -0
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +145 -0
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js.map +1 -0
- package/distr/Tools/src/FormWebpackConfiguration/variables.less +132 -0
- package/distr/Tools/src/GenerateReadMe.js +54 -0
- package/distr/Tools/src/GenerateReadMe.js.map +1 -0
- package/distr/Tools/src/Keys/localhost-key.pem +116 -0
- package/distr/Tools/src/Keys/localhost.pem +35 -0
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +2 -0
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +49 -0
- package/distr/Tools/src/LocalServerFrontEndDist/favicon-16x16.png +0 -0
- package/distr/Tools/src/LocalServerFrontEndDist/favicon-32x32.png +0 -0
- package/distr/Tools/src/LocalServerFrontEndDist/favicon.ico +0 -0
- package/distr/Tools/src/LocalServerFrontEndDist/index.html +1 -0
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +3 -0
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +60 -0
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -0
- package/distr/Tools/src/Options/CandyToolOptions.js +20 -0
- package/distr/Tools/src/Options/CandyToolOptions.js.map +1 -0
- package/distr/Tools/src/ReadFarmConfig.js +18 -0
- package/distr/Tools/src/ReadFarmConfig.js.map +1 -0
- package/distr/Tools/src/SelfUpdate.js +121 -0
- package/distr/Tools/src/SelfUpdate.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1722 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.LICENSE.txt +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +1076 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +3328 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +6517 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +222 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +3328 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +6517 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +222 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,1076 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
!function () {
|
|
4
|
+
"use strict";
|
|
5
|
+
|
|
6
|
+
var e = {};
|
|
7
|
+
function t(e) {
|
|
8
|
+
return t = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
9
|
+
return typeof e;
|
|
10
|
+
} : function (e) {
|
|
11
|
+
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
|
|
12
|
+
}, t(e);
|
|
13
|
+
}
|
|
14
|
+
function r(e) {
|
|
15
|
+
var r = function (e, r) {
|
|
16
|
+
if ("object" != t(e) || !e) return e;
|
|
17
|
+
var n = e[Symbol.toPrimitive];
|
|
18
|
+
if (void 0 !== n) {
|
|
19
|
+
var o = n.call(e, "string");
|
|
20
|
+
if ("object" != t(o)) return o;
|
|
21
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
22
|
+
}
|
|
23
|
+
return String(e);
|
|
24
|
+
}(e);
|
|
25
|
+
return "symbol" == t(r) ? r : r + "";
|
|
26
|
+
}
|
|
27
|
+
function n(e, t, n) {
|
|
28
|
+
return (t = r(t)) in e ? Object.defineProperty(e, t, {
|
|
29
|
+
value: n,
|
|
30
|
+
enumerable: !0,
|
|
31
|
+
configurable: !0,
|
|
32
|
+
writable: !0
|
|
33
|
+
}) : e[t] = n, e;
|
|
34
|
+
}
|
|
35
|
+
function o(e, t) {
|
|
36
|
+
(null == t || t > e.length) && (t = e.length);
|
|
37
|
+
for (var r = 0, n = Array(t); r < t; r++) n[r] = e[r];
|
|
38
|
+
return n;
|
|
39
|
+
}
|
|
40
|
+
e.g = function () {
|
|
41
|
+
if ("object" == typeof globalThis) return globalThis;
|
|
42
|
+
try {
|
|
43
|
+
return this || new Function("return this")();
|
|
44
|
+
} catch (e) {
|
|
45
|
+
if ("object" == typeof window) return window;
|
|
46
|
+
}
|
|
47
|
+
}();
|
|
48
|
+
var i = "undefined" != typeof globalThis && globalThis || "undefined" != typeof self && self || void 0 !== e.g && e.g || {},
|
|
49
|
+
a = ("URLSearchParams" in i),
|
|
50
|
+
u = "Symbol" in i && "iterator" in Symbol,
|
|
51
|
+
s = "FileReader" in i && "Blob" in i && function () {
|
|
52
|
+
try {
|
|
53
|
+
return new Blob(), !0;
|
|
54
|
+
} catch (e) {
|
|
55
|
+
return !1;
|
|
56
|
+
}
|
|
57
|
+
}(),
|
|
58
|
+
c = ("FormData" in i),
|
|
59
|
+
l = ("ArrayBuffer" in i);
|
|
60
|
+
if (l) var f = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"],
|
|
61
|
+
h = ArrayBuffer.isView || function (e) {
|
|
62
|
+
return e && f.indexOf(Object.prototype.toString.call(e)) > -1;
|
|
63
|
+
};
|
|
64
|
+
function d(e) {
|
|
65
|
+
if ("string" != typeof e && (e = String(e)), /[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e) || "" === e) throw new TypeError('Invalid character in header field name: "' + e + '"');
|
|
66
|
+
return e.toLowerCase();
|
|
67
|
+
}
|
|
68
|
+
function p(e) {
|
|
69
|
+
return "string" != typeof e && (e = String(e)), e;
|
|
70
|
+
}
|
|
71
|
+
function y(e) {
|
|
72
|
+
var t = {
|
|
73
|
+
next: function () {
|
|
74
|
+
var t = e.shift();
|
|
75
|
+
return {
|
|
76
|
+
done: void 0 === t,
|
|
77
|
+
value: t
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
return u && (t[Symbol.iterator] = function () {
|
|
82
|
+
return t;
|
|
83
|
+
}), t;
|
|
84
|
+
}
|
|
85
|
+
function m(e) {
|
|
86
|
+
this.map = {}, e instanceof m ? e.forEach(function (e, t) {
|
|
87
|
+
this.append(t, e);
|
|
88
|
+
}, this) : Array.isArray(e) ? e.forEach(function (e) {
|
|
89
|
+
if (2 != e.length) throw new TypeError("Headers constructor: expected name/value pair to be length 2, found" + e.length);
|
|
90
|
+
this.append(e[0], e[1]);
|
|
91
|
+
}, this) : e && Object.getOwnPropertyNames(e).forEach(function (t) {
|
|
92
|
+
this.append(t, e[t]);
|
|
93
|
+
}, this);
|
|
94
|
+
}
|
|
95
|
+
function v(e) {
|
|
96
|
+
if (!e._noBody) return e.bodyUsed ? Promise.reject(new TypeError("Already read")) : void (e.bodyUsed = !0);
|
|
97
|
+
}
|
|
98
|
+
function b(e) {
|
|
99
|
+
return new Promise(function (t, r) {
|
|
100
|
+
e.onload = function () {
|
|
101
|
+
t(e.result);
|
|
102
|
+
}, e.onerror = function () {
|
|
103
|
+
r(e.error);
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function w(e) {
|
|
108
|
+
var t = new FileReader(),
|
|
109
|
+
r = b(t);
|
|
110
|
+
return t.readAsArrayBuffer(e), r;
|
|
111
|
+
}
|
|
112
|
+
function g(e) {
|
|
113
|
+
if (e.slice) return e.slice(0);
|
|
114
|
+
var t = new Uint8Array(e.byteLength);
|
|
115
|
+
return t.set(new Uint8Array(e)), t.buffer;
|
|
116
|
+
}
|
|
117
|
+
function E() {
|
|
118
|
+
return this.bodyUsed = !1, this._initBody = function (e) {
|
|
119
|
+
var t;
|
|
120
|
+
this.bodyUsed = this.bodyUsed, this._bodyInit = e, e ? "string" == typeof e ? this._bodyText = e : s && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : c && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : a && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : l && s && (t = e) && DataView.prototype.isPrototypeOf(t) ? (this._bodyArrayBuffer = g(e.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : l && (ArrayBuffer.prototype.isPrototypeOf(e) || h(e)) ? this._bodyArrayBuffer = g(e) : this._bodyText = e = Object.prototype.toString.call(e) : (this._noBody = !0, this._bodyText = ""), this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : a && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
|
|
121
|
+
}, s && (this.blob = function () {
|
|
122
|
+
var e = v(this);
|
|
123
|
+
if (e) return e;
|
|
124
|
+
if (this._bodyBlob) return Promise.resolve(this._bodyBlob);
|
|
125
|
+
if (this._bodyArrayBuffer) return Promise.resolve(new Blob([this._bodyArrayBuffer]));
|
|
126
|
+
if (this._bodyFormData) throw new Error("could not read FormData body as blob");
|
|
127
|
+
return Promise.resolve(new Blob([this._bodyText]));
|
|
128
|
+
}), this.arrayBuffer = function () {
|
|
129
|
+
if (this._bodyArrayBuffer) return v(this) || (ArrayBuffer.isView(this._bodyArrayBuffer) ? Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength)) : Promise.resolve(this._bodyArrayBuffer));
|
|
130
|
+
if (s) return this.blob().then(w);
|
|
131
|
+
throw new Error("could not read as ArrayBuffer");
|
|
132
|
+
}, this.text = function () {
|
|
133
|
+
var e,
|
|
134
|
+
t,
|
|
135
|
+
r,
|
|
136
|
+
n,
|
|
137
|
+
o,
|
|
138
|
+
i = v(this);
|
|
139
|
+
if (i) return i;
|
|
140
|
+
if (this._bodyBlob) return e = this._bodyBlob, r = b(t = new FileReader()), o = (n = /charset=([A-Za-z0-9_-]+)/.exec(e.type)) ? n[1] : "utf-8", t.readAsText(e, o), r;
|
|
141
|
+
if (this._bodyArrayBuffer) return Promise.resolve(function (e) {
|
|
142
|
+
for (var t = new Uint8Array(e), r = new Array(t.length), n = 0; n < t.length; n++) r[n] = String.fromCharCode(t[n]);
|
|
143
|
+
return r.join("");
|
|
144
|
+
}(this._bodyArrayBuffer));
|
|
145
|
+
if (this._bodyFormData) throw new Error("could not read FormData body as text");
|
|
146
|
+
return Promise.resolve(this._bodyText);
|
|
147
|
+
}, c && (this.formData = function () {
|
|
148
|
+
return this.text().then(A);
|
|
149
|
+
}), this.json = function () {
|
|
150
|
+
return this.text().then(JSON.parse);
|
|
151
|
+
}, this;
|
|
152
|
+
}
|
|
153
|
+
m.prototype.append = function (e, t) {
|
|
154
|
+
e = d(e), t = p(t);
|
|
155
|
+
var r = this.map[e];
|
|
156
|
+
this.map[e] = r ? r + ", " + t : t;
|
|
157
|
+
}, m.prototype.delete = function (e) {
|
|
158
|
+
delete this.map[d(e)];
|
|
159
|
+
}, m.prototype.get = function (e) {
|
|
160
|
+
return e = d(e), this.has(e) ? this.map[e] : null;
|
|
161
|
+
}, m.prototype.has = function (e) {
|
|
162
|
+
return this.map.hasOwnProperty(d(e));
|
|
163
|
+
}, m.prototype.set = function (e, t) {
|
|
164
|
+
this.map[d(e)] = p(t);
|
|
165
|
+
}, m.prototype.forEach = function (e, t) {
|
|
166
|
+
for (var r in this.map) this.map.hasOwnProperty(r) && e.call(t, this.map[r], r, this);
|
|
167
|
+
}, m.prototype.keys = function () {
|
|
168
|
+
var e = [];
|
|
169
|
+
return this.forEach(function (t, r) {
|
|
170
|
+
e.push(r);
|
|
171
|
+
}), y(e);
|
|
172
|
+
}, m.prototype.values = function () {
|
|
173
|
+
var e = [];
|
|
174
|
+
return this.forEach(function (t) {
|
|
175
|
+
e.push(t);
|
|
176
|
+
}), y(e);
|
|
177
|
+
}, m.prototype.entries = function () {
|
|
178
|
+
var e = [];
|
|
179
|
+
return this.forEach(function (t, r) {
|
|
180
|
+
e.push([r, t]);
|
|
181
|
+
}), y(e);
|
|
182
|
+
}, u && (m.prototype[Symbol.iterator] = m.prototype.entries);
|
|
183
|
+
var O = ["CONNECT", "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT", "TRACE"];
|
|
184
|
+
function k(e, t) {
|
|
185
|
+
if (!(this instanceof k)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
|
|
186
|
+
var r,
|
|
187
|
+
n,
|
|
188
|
+
o = (t = t || {}).body;
|
|
189
|
+
if (e instanceof k) {
|
|
190
|
+
if (e.bodyUsed) throw new TypeError("Already read");
|
|
191
|
+
this.url = e.url, this.credentials = e.credentials, t.headers || (this.headers = new m(e.headers)), this.method = e.method, this.mode = e.mode, this.signal = e.signal, o || null == e._bodyInit || (o = e._bodyInit, e.bodyUsed = !0);
|
|
192
|
+
} else this.url = String(e);
|
|
193
|
+
if (this.credentials = t.credentials || this.credentials || "same-origin", !t.headers && this.headers || (this.headers = new m(t.headers)), this.method = (n = (r = t.method || this.method || "GET").toUpperCase(), O.indexOf(n) > -1 ? n : r), this.mode = t.mode || this.mode || null, this.signal = t.signal || this.signal || function () {
|
|
194
|
+
if ("AbortController" in i) return new AbortController().signal;
|
|
195
|
+
}(), this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
|
|
196
|
+
if (this._initBody(o), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== t.cache && "no-cache" !== t.cache)) {
|
|
197
|
+
var a = /([?&])_=[^&]*/;
|
|
198
|
+
a.test(this.url) ? this.url = this.url.replace(a, "$1_=" + new Date().getTime()) : this.url += (/\?/.test(this.url) ? "&" : "?") + "_=" + new Date().getTime();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function A(e) {
|
|
202
|
+
var t = new FormData();
|
|
203
|
+
return e.trim().split("&").forEach(function (e) {
|
|
204
|
+
if (e) {
|
|
205
|
+
var r = e.split("="),
|
|
206
|
+
n = r.shift().replace(/\+/g, " "),
|
|
207
|
+
o = r.join("=").replace(/\+/g, " ");
|
|
208
|
+
t.append(decodeURIComponent(n), decodeURIComponent(o));
|
|
209
|
+
}
|
|
210
|
+
}), t;
|
|
211
|
+
}
|
|
212
|
+
function j(e, t) {
|
|
213
|
+
if (!(this instanceof j)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
|
|
214
|
+
if (t || (t = {}), this.type = "default", this.status = void 0 === t.status ? 200 : t.status, this.status < 200 || this.status > 599) throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");
|
|
215
|
+
this.ok = this.status >= 200 && this.status < 300, this.statusText = void 0 === t.statusText ? "" : "" + t.statusText, this.headers = new m(t.headers), this.url = t.url || "", this._initBody(e);
|
|
216
|
+
}
|
|
217
|
+
k.prototype.clone = function () {
|
|
218
|
+
return new k(this, {
|
|
219
|
+
body: this._bodyInit
|
|
220
|
+
});
|
|
221
|
+
}, E.call(k.prototype), E.call(j.prototype), j.prototype.clone = function () {
|
|
222
|
+
return new j(this._bodyInit, {
|
|
223
|
+
status: this.status,
|
|
224
|
+
statusText: this.statusText,
|
|
225
|
+
headers: new m(this.headers),
|
|
226
|
+
url: this.url
|
|
227
|
+
});
|
|
228
|
+
}, j.error = function () {
|
|
229
|
+
var e = new j(null, {
|
|
230
|
+
status: 200,
|
|
231
|
+
statusText: ""
|
|
232
|
+
});
|
|
233
|
+
return e.ok = !1, e.status = 0, e.type = "error", e;
|
|
234
|
+
};
|
|
235
|
+
var S = [301, 302, 303, 307, 308];
|
|
236
|
+
j.redirect = function (e, t) {
|
|
237
|
+
if (-1 === S.indexOf(t)) throw new RangeError("Invalid status code");
|
|
238
|
+
return new j(null, {
|
|
239
|
+
status: t,
|
|
240
|
+
headers: {
|
|
241
|
+
location: e
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
};
|
|
245
|
+
var T = i.DOMException;
|
|
246
|
+
try {
|
|
247
|
+
new T();
|
|
248
|
+
} catch (e) {
|
|
249
|
+
(T = function (e, t) {
|
|
250
|
+
this.message = e, this.name = t;
|
|
251
|
+
var r = Error(e);
|
|
252
|
+
this.stack = r.stack;
|
|
253
|
+
}).prototype = Object.create(Error.prototype), T.prototype.constructor = T;
|
|
254
|
+
}
|
|
255
|
+
function P(e, t) {
|
|
256
|
+
return new Promise(function (r, n) {
|
|
257
|
+
var o = new k(e, t);
|
|
258
|
+
if (o.signal && o.signal.aborted) return n(new T("Aborted", "AbortError"));
|
|
259
|
+
var a = new XMLHttpRequest();
|
|
260
|
+
function u() {
|
|
261
|
+
a.abort();
|
|
262
|
+
}
|
|
263
|
+
if (a.onload = function () {
|
|
264
|
+
var e,
|
|
265
|
+
t,
|
|
266
|
+
n = {
|
|
267
|
+
statusText: a.statusText,
|
|
268
|
+
headers: (e = a.getAllResponseHeaders() || "", t = new m(), e.replace(/\r?\n[\t ]+/g, " ").split("\r").map(function (e) {
|
|
269
|
+
return 0 === e.indexOf("\n") ? e.substr(1, e.length) : e;
|
|
270
|
+
}).forEach(function (e) {
|
|
271
|
+
var r = e.split(":"),
|
|
272
|
+
n = r.shift().trim();
|
|
273
|
+
if (n) {
|
|
274
|
+
var o = r.join(":").trim();
|
|
275
|
+
try {
|
|
276
|
+
t.append(n, o);
|
|
277
|
+
} catch (e) {
|
|
278
|
+
console.warn("Response " + e.message);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}), t)
|
|
282
|
+
};
|
|
283
|
+
0 === o.url.indexOf("file://") && (a.status < 200 || a.status > 599) ? n.status = 200 : n.status = a.status, n.url = "responseURL" in a ? a.responseURL : n.headers.get("X-Request-URL");
|
|
284
|
+
var i = "response" in a ? a.response : a.responseText;
|
|
285
|
+
setTimeout(function () {
|
|
286
|
+
r(new j(i, n));
|
|
287
|
+
}, 0);
|
|
288
|
+
}, a.onerror = function () {
|
|
289
|
+
setTimeout(function () {
|
|
290
|
+
n(new TypeError("Network request failed"));
|
|
291
|
+
}, 0);
|
|
292
|
+
}, a.ontimeout = function () {
|
|
293
|
+
setTimeout(function () {
|
|
294
|
+
n(new TypeError("Network request timed out"));
|
|
295
|
+
}, 0);
|
|
296
|
+
}, a.onabort = function () {
|
|
297
|
+
setTimeout(function () {
|
|
298
|
+
n(new T("Aborted", "AbortError"));
|
|
299
|
+
}, 0);
|
|
300
|
+
}, a.open(o.method, function (e) {
|
|
301
|
+
try {
|
|
302
|
+
return "" === e && i.location.href ? i.location.href : e;
|
|
303
|
+
} catch (t) {
|
|
304
|
+
return e;
|
|
305
|
+
}
|
|
306
|
+
}(o.url), !0), "include" === o.credentials ? a.withCredentials = !0 : "omit" === o.credentials && (a.withCredentials = !1), "responseType" in a && (s ? a.responseType = "blob" : l && (a.responseType = "arraybuffer")), t && "object" == typeof t.headers && !(t.headers instanceof m || i.Headers && t.headers instanceof i.Headers)) {
|
|
307
|
+
var c = [];
|
|
308
|
+
Object.getOwnPropertyNames(t.headers).forEach(function (e) {
|
|
309
|
+
c.push(d(e)), a.setRequestHeader(e, p(t.headers[e]));
|
|
310
|
+
}), o.headers.forEach(function (e, t) {
|
|
311
|
+
-1 === c.indexOf(t) && a.setRequestHeader(t, e);
|
|
312
|
+
});
|
|
313
|
+
} else o.headers.forEach(function (e, t) {
|
|
314
|
+
a.setRequestHeader(t, e);
|
|
315
|
+
});
|
|
316
|
+
o.signal && (o.signal.addEventListener("abort", u), a.onreadystatechange = function () {
|
|
317
|
+
4 === a.readyState && o.signal.removeEventListener("abort", u);
|
|
318
|
+
}), a.send(void 0 === o._bodyInit ? null : o._bodyInit);
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
function _(e, t) {
|
|
322
|
+
if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
|
|
323
|
+
}
|
|
324
|
+
function B(e, t) {
|
|
325
|
+
for (var n = 0; n < t.length; n++) {
|
|
326
|
+
var o = t[n];
|
|
327
|
+
o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, r(o.key), o);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
function C(e, t, r) {
|
|
331
|
+
return t && B(e.prototype, t), r && B(e, r), Object.defineProperty(e, "prototype", {
|
|
332
|
+
writable: !1
|
|
333
|
+
}), e;
|
|
334
|
+
}
|
|
335
|
+
P.polyfill = !0, i.fetch || (i.fetch = P, i.Headers = m, i.Request = k, i.Response = j);
|
|
336
|
+
var R = function () {
|
|
337
|
+
return C(function e() {
|
|
338
|
+
_(this, e);
|
|
339
|
+
}, null, [{
|
|
340
|
+
key: "script",
|
|
341
|
+
value: function (e, t) {
|
|
342
|
+
var r = !1,
|
|
343
|
+
n = document.getElementsByTagName("head")[0] || document.documentElement,
|
|
344
|
+
o = document.createElement("script");
|
|
345
|
+
function i() {
|
|
346
|
+
r || o.readyState && "loaded" !== o.readyState && "complete" !== o.readyState || (r = !0, t());
|
|
347
|
+
}
|
|
348
|
+
o.onload = i, o.onreadystatechange = i, o.onerror = function () {
|
|
349
|
+
o.parentNode && o.parentNode.removeChild(o), t(new Error("Error while loading script."));
|
|
350
|
+
}, o.src = e, o.setAttribute("crossorigin", "use-credentials"), n.appendChild(o);
|
|
351
|
+
}
|
|
352
|
+
}, {
|
|
353
|
+
key: "styleSheet",
|
|
354
|
+
value: function (e, t, r) {
|
|
355
|
+
var n,
|
|
356
|
+
o = null !== (n = document.getElementsByTagName("head")[0]) && void 0 !== n ? n : document.documentElement,
|
|
357
|
+
i = document.createElement("link");
|
|
358
|
+
i.setAttribute("rel", "stylesheet"), i.setAttribute("type", "text/css"), i.addEventListener("load", function () {
|
|
359
|
+
return r(void 0);
|
|
360
|
+
}), i.addEventListener("error", function () {
|
|
361
|
+
r(t ? void 0 : new Error("Error while loading stylesheet."));
|
|
362
|
+
}), o.appendChild(i), i.setAttribute("href", e);
|
|
363
|
+
}
|
|
364
|
+
}]);
|
|
365
|
+
}();
|
|
366
|
+
function I(e) {
|
|
367
|
+
return "string" == typeof e ? "false" !== e && "true" === e : Boolean(e);
|
|
368
|
+
}
|
|
369
|
+
var D = {
|
|
370
|
+
authorized: I("{authorized}"),
|
|
371
|
+
cauldronApiUrl: "{cauldronApiUrl}",
|
|
372
|
+
isTestServer: I("{isTestServer}"),
|
|
373
|
+
renderCachingForIE8: I("{renderCachingForIE8}"),
|
|
374
|
+
normalizationOnServer: I("{normalizationOnServer}"),
|
|
375
|
+
normativeUrl: "{normativeUrl}",
|
|
376
|
+
konturDomains: "{konturDomains}"
|
|
377
|
+
};
|
|
378
|
+
function U(e, t, r, n, o, i, a) {
|
|
379
|
+
try {
|
|
380
|
+
var u = e[i](a),
|
|
381
|
+
s = u.value;
|
|
382
|
+
} catch (e) {
|
|
383
|
+
return void r(e);
|
|
384
|
+
}
|
|
385
|
+
u.done ? t(s) : Promise.resolve(s).then(n, o);
|
|
386
|
+
}
|
|
387
|
+
function x(e) {
|
|
388
|
+
return function () {
|
|
389
|
+
var t = this,
|
|
390
|
+
r = arguments;
|
|
391
|
+
return new Promise(function (n, o) {
|
|
392
|
+
var i = e.apply(t, r);
|
|
393
|
+
function a(e) {
|
|
394
|
+
U(i, n, o, a, u, "next", e);
|
|
395
|
+
}
|
|
396
|
+
function u(e) {
|
|
397
|
+
U(i, n, o, a, u, "throw", e);
|
|
398
|
+
}
|
|
399
|
+
a(void 0);
|
|
400
|
+
});
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
function F(e) {
|
|
404
|
+
return F = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (e) {
|
|
405
|
+
return e.__proto__ || Object.getPrototypeOf(e);
|
|
406
|
+
}, F(e);
|
|
407
|
+
}
|
|
408
|
+
function M(e, t) {
|
|
409
|
+
return M = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) {
|
|
410
|
+
return e.__proto__ = t, e;
|
|
411
|
+
}, M(e, t);
|
|
412
|
+
}
|
|
413
|
+
function N(e, t) {
|
|
414
|
+
if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function");
|
|
415
|
+
e.prototype = Object.create(t && t.prototype, {
|
|
416
|
+
constructor: {
|
|
417
|
+
value: e,
|
|
418
|
+
writable: !0,
|
|
419
|
+
configurable: !0
|
|
420
|
+
}
|
|
421
|
+
}), Object.defineProperty(e, "prototype", {
|
|
422
|
+
writable: !1
|
|
423
|
+
}), t && M(e, t);
|
|
424
|
+
}
|
|
425
|
+
function L() {
|
|
426
|
+
try {
|
|
427
|
+
var e = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
428
|
+
} catch (e) {}
|
|
429
|
+
return (L = function () {
|
|
430
|
+
return !!e;
|
|
431
|
+
})();
|
|
432
|
+
}
|
|
433
|
+
function H(e) {
|
|
434
|
+
var t = "function" == typeof Map ? new Map() : void 0;
|
|
435
|
+
return H = function (e) {
|
|
436
|
+
if (null === e || !function (e) {
|
|
437
|
+
try {
|
|
438
|
+
return -1 !== Function.toString.call(e).indexOf("[native code]");
|
|
439
|
+
} catch (t) {
|
|
440
|
+
return "function" == typeof e;
|
|
441
|
+
}
|
|
442
|
+
}(e)) return e;
|
|
443
|
+
if ("function" != typeof e) throw new TypeError("Super expression must either be null or a function");
|
|
444
|
+
if (void 0 !== t) {
|
|
445
|
+
if (t.has(e)) return t.get(e);
|
|
446
|
+
t.set(e, r);
|
|
447
|
+
}
|
|
448
|
+
function r() {
|
|
449
|
+
return function (e, t, r) {
|
|
450
|
+
if (L()) return Reflect.construct.apply(null, arguments);
|
|
451
|
+
var n = [null];
|
|
452
|
+
n.push.apply(n, t);
|
|
453
|
+
var o = new (e.bind.apply(e, n))();
|
|
454
|
+
return r && M(o, r.prototype), o;
|
|
455
|
+
}(e, arguments, F(this).constructor);
|
|
456
|
+
}
|
|
457
|
+
return r.prototype = Object.create(e.prototype, {
|
|
458
|
+
constructor: {
|
|
459
|
+
value: r,
|
|
460
|
+
enumerable: !1,
|
|
461
|
+
writable: !0,
|
|
462
|
+
configurable: !0
|
|
463
|
+
}
|
|
464
|
+
}), M(r, e);
|
|
465
|
+
}, H(e);
|
|
466
|
+
}
|
|
467
|
+
function z(e, r, n) {
|
|
468
|
+
return r = F(r), function (e, r) {
|
|
469
|
+
if (r && ("object" == t(r) || "function" == typeof r)) return r;
|
|
470
|
+
if (void 0 !== r) throw new TypeError("Derived constructors may only return object or undefined");
|
|
471
|
+
return function (e) {
|
|
472
|
+
if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
473
|
+
return e;
|
|
474
|
+
}(e);
|
|
475
|
+
}(e, q() ? Reflect.construct(r, n || [], F(e).constructor) : r.apply(e, n));
|
|
476
|
+
}
|
|
477
|
+
function q() {
|
|
478
|
+
try {
|
|
479
|
+
var e = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
480
|
+
} catch (e) {}
|
|
481
|
+
return (q = function () {
|
|
482
|
+
return !!e;
|
|
483
|
+
})();
|
|
484
|
+
}
|
|
485
|
+
var V = function (e) {
|
|
486
|
+
function t() {
|
|
487
|
+
return _(this, t), z(this, t, ["Operation not implemented"]);
|
|
488
|
+
}
|
|
489
|
+
return N(t, e), C(t);
|
|
490
|
+
}(function (e) {
|
|
491
|
+
function t(e) {
|
|
492
|
+
var r;
|
|
493
|
+
return _(this, t), (r = z(this, t, [e])).name = r.constructor.name, r;
|
|
494
|
+
}
|
|
495
|
+
return N(t, e), C(t);
|
|
496
|
+
}(H(Error)));
|
|
497
|
+
function Z(e, t) {
|
|
498
|
+
var r = Object.keys(e);
|
|
499
|
+
if (Object.getOwnPropertySymbols) {
|
|
500
|
+
var n = Object.getOwnPropertySymbols(e);
|
|
501
|
+
t && (n = n.filter(function (t) {
|
|
502
|
+
return Object.getOwnPropertyDescriptor(e, t).enumerable;
|
|
503
|
+
})), r.push.apply(r, n);
|
|
504
|
+
}
|
|
505
|
+
return r;
|
|
506
|
+
}
|
|
507
|
+
function G(e) {
|
|
508
|
+
for (var t = 1; t < arguments.length; t++) {
|
|
509
|
+
var r = null != arguments[t] ? arguments[t] : {};
|
|
510
|
+
t % 2 ? Z(Object(r), !0).forEach(function (t) {
|
|
511
|
+
n(e, t, r[t]);
|
|
512
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : Z(Object(r)).forEach(function (t) {
|
|
513
|
+
Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t));
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
return e;
|
|
517
|
+
}
|
|
518
|
+
function $(e, t) {
|
|
519
|
+
if (null != t) {
|
|
520
|
+
if (null == e) throw new Error("Path must be defined");
|
|
521
|
+
return ["model", "change", e, t];
|
|
522
|
+
}
|
|
523
|
+
return null != e ? ["model", "change", e] : ["model", "change"];
|
|
524
|
+
}
|
|
525
|
+
function X(e) {
|
|
526
|
+
return Object.keys(e).filter(function (t) {
|
|
527
|
+
return e[t] && Object.prototype.hasOwnProperty.call(e[t], "value");
|
|
528
|
+
}).map(function (t) {
|
|
529
|
+
var r = e[t];
|
|
530
|
+
return null == r ? {} : n({}, t, r.value);
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
function J(e) {
|
|
534
|
+
return e.reduce(function (e, t) {
|
|
535
|
+
return G(G({}, e), t);
|
|
536
|
+
}, {});
|
|
537
|
+
}
|
|
538
|
+
var W = function () {
|
|
539
|
+
return C(function e(t) {
|
|
540
|
+
_(this, e), this.form = void 0, this.form = t;
|
|
541
|
+
}, [{
|
|
542
|
+
key: "navigateByHighlanderPaths",
|
|
543
|
+
value: function (e) {
|
|
544
|
+
throw new Error("Method not implemented.");
|
|
545
|
+
}
|
|
546
|
+
}, {
|
|
547
|
+
key: "cancelSelectRelative",
|
|
548
|
+
value: function () {
|
|
549
|
+
throw new Error("Method not implemented.");
|
|
550
|
+
}
|
|
551
|
+
}, {
|
|
552
|
+
key: "getNavigationPathMapper",
|
|
553
|
+
value: function () {
|
|
554
|
+
throw new Error("Method not implemented.");
|
|
555
|
+
}
|
|
556
|
+
}, {
|
|
557
|
+
key: "batchUpdate",
|
|
558
|
+
value: function (e) {
|
|
559
|
+
throw new Error("Method not implemented.");
|
|
560
|
+
}
|
|
561
|
+
}, {
|
|
562
|
+
key: "runCheck",
|
|
563
|
+
value: function () {
|
|
564
|
+
throw new Error("Method not implemented.");
|
|
565
|
+
}
|
|
566
|
+
}, {
|
|
567
|
+
key: "setErrorLog",
|
|
568
|
+
value: function (e) {
|
|
569
|
+
throw new Error("Method not implemented.");
|
|
570
|
+
}
|
|
571
|
+
}, {
|
|
572
|
+
key: "validateChildrenByPath",
|
|
573
|
+
value: (o = x(regeneratorRuntime.mark(function e(t) {
|
|
574
|
+
return regeneratorRuntime.wrap(function (e) {
|
|
575
|
+
for (;;) switch (e.prev = e.next) {
|
|
576
|
+
case 0:
|
|
577
|
+
throw new Error("Method not implemented.");
|
|
578
|
+
case 1:
|
|
579
|
+
case "end":
|
|
580
|
+
return e.stop();
|
|
581
|
+
}
|
|
582
|
+
}, e);
|
|
583
|
+
})), function (e) {
|
|
584
|
+
return o.apply(this, arguments);
|
|
585
|
+
})
|
|
586
|
+
}, {
|
|
587
|
+
key: "__INTERNAL__importFromEmployeeService",
|
|
588
|
+
value: function () {
|
|
589
|
+
throw new Error("Method not implemented.");
|
|
590
|
+
}
|
|
591
|
+
}, {
|
|
592
|
+
key: "__INTERNAL__getSelectFunctionForDisableEmployeeInSS",
|
|
593
|
+
value: (r = x(regeneratorRuntime.mark(function e(t) {
|
|
594
|
+
return regeneratorRuntime.wrap(function (e) {
|
|
595
|
+
for (;;) switch (e.prev = e.next) {
|
|
596
|
+
case 0:
|
|
597
|
+
throw new Error("Method not implemented.");
|
|
598
|
+
case 1:
|
|
599
|
+
case "end":
|
|
600
|
+
return e.stop();
|
|
601
|
+
}
|
|
602
|
+
}, e);
|
|
603
|
+
})), function (e) {
|
|
604
|
+
return r.apply(this, arguments);
|
|
605
|
+
})
|
|
606
|
+
}, {
|
|
607
|
+
key: "getModalUnitOpenedInstance",
|
|
608
|
+
value: function (e) {
|
|
609
|
+
throw new Error("Method not implemented.");
|
|
610
|
+
}
|
|
611
|
+
}, {
|
|
612
|
+
key: "getTabsState",
|
|
613
|
+
value: function () {
|
|
614
|
+
throw new Error("Method not implemented.");
|
|
615
|
+
}
|
|
616
|
+
}, {
|
|
617
|
+
key: "navigate",
|
|
618
|
+
value: function (e) {
|
|
619
|
+
throw new Error("Method not implemented.");
|
|
620
|
+
}
|
|
621
|
+
}, {
|
|
622
|
+
key: "importEmployerDocuments",
|
|
623
|
+
value: function (e) {
|
|
624
|
+
throw new Error("Method not implemented.");
|
|
625
|
+
}
|
|
626
|
+
}, {
|
|
627
|
+
key: "importEmployees",
|
|
628
|
+
value: function (e, t) {
|
|
629
|
+
throw new Error("Method not implemented.");
|
|
630
|
+
}
|
|
631
|
+
}, {
|
|
632
|
+
key: "print",
|
|
633
|
+
value: function (e, t) {
|
|
634
|
+
throw new Error("Method not implemented.");
|
|
635
|
+
}
|
|
636
|
+
}, {
|
|
637
|
+
key: "runMassAction",
|
|
638
|
+
value: function (e, t) {
|
|
639
|
+
throw new Error("Method not implemented.");
|
|
640
|
+
}
|
|
641
|
+
}, {
|
|
642
|
+
key: "getByGId",
|
|
643
|
+
value: function (e, t) {
|
|
644
|
+
return this.form.picklistsProvider.getDigestApiPicklist(e).query(t);
|
|
645
|
+
}
|
|
646
|
+
}, {
|
|
647
|
+
key: "on",
|
|
648
|
+
value: function (e, t) {
|
|
649
|
+
this.form.eventManager.on(["form", e], t);
|
|
650
|
+
}
|
|
651
|
+
}, {
|
|
652
|
+
key: "off",
|
|
653
|
+
value: function (e, t) {
|
|
654
|
+
this.form.eventManager.off(["form", e], t);
|
|
655
|
+
}
|
|
656
|
+
}, {
|
|
657
|
+
key: "onModelChange",
|
|
658
|
+
value: function (e, t) {
|
|
659
|
+
throw Error("form.onModelChange() is not supported yet");
|
|
660
|
+
}
|
|
661
|
+
}, {
|
|
662
|
+
key: "save",
|
|
663
|
+
value: function () {
|
|
664
|
+
return this.form.changeSet.send();
|
|
665
|
+
}
|
|
666
|
+
}, {
|
|
667
|
+
key: "close",
|
|
668
|
+
value: function () {
|
|
669
|
+
return this.form.changeSet.stopAutosend(), this.form.unmount && this.form.unmount(), this.form.changeSet.send();
|
|
670
|
+
}
|
|
671
|
+
}, {
|
|
672
|
+
key: "getTourSteps",
|
|
673
|
+
value: function () {
|
|
674
|
+
return [];
|
|
675
|
+
}
|
|
676
|
+
}, {
|
|
677
|
+
key: "validate",
|
|
678
|
+
value: function () {
|
|
679
|
+
var e = Object.keys(this.form.model.getChunk(this.form.settings.formRoot));
|
|
680
|
+
return this.form.validator.validateAll(e);
|
|
681
|
+
}
|
|
682
|
+
}, {
|
|
683
|
+
key: "getAdditionalEmployeeInfo",
|
|
684
|
+
value: function (e) {
|
|
685
|
+
throw new Error("not implemented");
|
|
686
|
+
}
|
|
687
|
+
}, {
|
|
688
|
+
key: "getEmployees",
|
|
689
|
+
value: function () {
|
|
690
|
+
throw new Error("not implemented");
|
|
691
|
+
}
|
|
692
|
+
}, {
|
|
693
|
+
key: "mergeRelative",
|
|
694
|
+
value: function () {
|
|
695
|
+
throw new Error("not implemented");
|
|
696
|
+
}
|
|
697
|
+
}, {
|
|
698
|
+
key: "patchRelative",
|
|
699
|
+
value: function () {
|
|
700
|
+
throw new Error("not implemented");
|
|
701
|
+
}
|
|
702
|
+
}, {
|
|
703
|
+
key: "sendMetrics",
|
|
704
|
+
value: function (e, t) {}
|
|
705
|
+
}, {
|
|
706
|
+
key: "matchEmployee",
|
|
707
|
+
value: function (e) {
|
|
708
|
+
throw new Error("not implemented");
|
|
709
|
+
}
|
|
710
|
+
}, {
|
|
711
|
+
key: "reloadInner",
|
|
712
|
+
value: (e = x(regeneratorRuntime.mark(function e() {
|
|
713
|
+
return regeneratorRuntime.wrap(function (e) {
|
|
714
|
+
for (;;) switch (e.prev = e.next) {
|
|
715
|
+
case 0:
|
|
716
|
+
throw new Error("not implemented");
|
|
717
|
+
case 1:
|
|
718
|
+
case "end":
|
|
719
|
+
return e.stop();
|
|
720
|
+
}
|
|
721
|
+
}, e);
|
|
722
|
+
})), function () {
|
|
723
|
+
return e.apply(this, arguments);
|
|
724
|
+
})
|
|
725
|
+
}, {
|
|
726
|
+
key: "getWorkingEventsForEmployee",
|
|
727
|
+
value: function (e) {
|
|
728
|
+
throw new Error("not implemented");
|
|
729
|
+
}
|
|
730
|
+
}, {
|
|
731
|
+
key: "hasErrors",
|
|
732
|
+
value: function () {
|
|
733
|
+
var e = this.form.model.get(this.form.settings.formRoot, "errorsCount");
|
|
734
|
+
return null != e && e > 0;
|
|
735
|
+
}
|
|
736
|
+
}, {
|
|
737
|
+
key: "onErrorsCountChanged",
|
|
738
|
+
value: function (e) {
|
|
739
|
+
this.form.eventManager.on($(this.form.settings.formRoot, "errorsCount"), e);
|
|
740
|
+
}
|
|
741
|
+
}, {
|
|
742
|
+
key: "offErrorsCountChanged",
|
|
743
|
+
value: function (e) {
|
|
744
|
+
this.form.eventManager.off($(this.form.settings.formRoot, "errorsCount"), e);
|
|
745
|
+
}
|
|
746
|
+
}, {
|
|
747
|
+
key: "set",
|
|
748
|
+
value: function (e, r) {
|
|
749
|
+
if (null === e || "string" == typeof e || "object" !== t(e) || Array.isArray(e)) {
|
|
750
|
+
if ("string" != typeof e) throw new Error("form.set() parameter should be string path or object with path-value pairs");
|
|
751
|
+
this.form.model.set(e, "value", r);
|
|
752
|
+
} else {
|
|
753
|
+
var o = Object.keys(e).reduce(function (t, r) {
|
|
754
|
+
return G(n({}, r, {
|
|
755
|
+
value: e[r]
|
|
756
|
+
}), t);
|
|
757
|
+
}, {});
|
|
758
|
+
this.form.model.fill(o);
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
}, {
|
|
762
|
+
key: "get",
|
|
763
|
+
value: function (e) {
|
|
764
|
+
var t = this;
|
|
765
|
+
if (Array.isArray(e)) return J(e.map(function (e) {
|
|
766
|
+
return X(t.form.model.getChunk(e));
|
|
767
|
+
}).reduce(function (e, t) {
|
|
768
|
+
return e.concat(t);
|
|
769
|
+
}, []));
|
|
770
|
+
if ("string" == typeof e) return J(X(this.form.model.getChunk(e)));
|
|
771
|
+
if (void 0 === e) return J(X(this.form.model.getChunk(this.form.settings.formRoot)));
|
|
772
|
+
throw new Error("form.get() parameter should be string path or array of paths");
|
|
773
|
+
}
|
|
774
|
+
}, {
|
|
775
|
+
key: "getValue",
|
|
776
|
+
value: function (e) {
|
|
777
|
+
return this.form.model.get(e, "value");
|
|
778
|
+
}
|
|
779
|
+
}, {
|
|
780
|
+
key: "copySubtree",
|
|
781
|
+
value: function (e, t, r) {
|
|
782
|
+
throw new V();
|
|
783
|
+
}
|
|
784
|
+
}, {
|
|
785
|
+
key: "addInstance",
|
|
786
|
+
value: function (e) {
|
|
787
|
+
throw new V();
|
|
788
|
+
}
|
|
789
|
+
}, {
|
|
790
|
+
key: "getChildren",
|
|
791
|
+
value: function (e) {
|
|
792
|
+
throw new V();
|
|
793
|
+
}
|
|
794
|
+
}, {
|
|
795
|
+
key: "uuidGenerate",
|
|
796
|
+
value: function () {
|
|
797
|
+
throw new V();
|
|
798
|
+
}
|
|
799
|
+
}, {
|
|
800
|
+
key: "showModal",
|
|
801
|
+
value: function (e) {
|
|
802
|
+
throw new V();
|
|
803
|
+
}
|
|
804
|
+
}, {
|
|
805
|
+
key: "addSection",
|
|
806
|
+
value: function (e) {
|
|
807
|
+
throw new V();
|
|
808
|
+
}
|
|
809
|
+
}, {
|
|
810
|
+
key: "callInitSection",
|
|
811
|
+
value: function (e) {
|
|
812
|
+
throw new V();
|
|
813
|
+
}
|
|
814
|
+
}, {
|
|
815
|
+
key: "preferredInterdocumentTransfer",
|
|
816
|
+
value: function (e) {
|
|
817
|
+
throw new V();
|
|
818
|
+
}
|
|
819
|
+
}, {
|
|
820
|
+
key: "createFiasApiClient",
|
|
821
|
+
value: function (e) {
|
|
822
|
+
throw new V();
|
|
823
|
+
}
|
|
824
|
+
}, {
|
|
825
|
+
key: "openEmployeeEditor",
|
|
826
|
+
value: function (e) {
|
|
827
|
+
throw new V();
|
|
828
|
+
}
|
|
829
|
+
}, {
|
|
830
|
+
key: "removeInstance",
|
|
831
|
+
value: function (e, t) {
|
|
832
|
+
throw new V();
|
|
833
|
+
}
|
|
834
|
+
}, {
|
|
835
|
+
key: "removeInstances",
|
|
836
|
+
value: function (e, t) {
|
|
837
|
+
throw new V();
|
|
838
|
+
}
|
|
839
|
+
}, {
|
|
840
|
+
key: "focusOnControlIfExist",
|
|
841
|
+
value: function (e) {
|
|
842
|
+
throw new V();
|
|
843
|
+
}
|
|
844
|
+
}, {
|
|
845
|
+
key: "setAutoFieldsToAutoValue",
|
|
846
|
+
value: function (e) {
|
|
847
|
+
return Promise.resolve(void 0);
|
|
848
|
+
}
|
|
849
|
+
}, {
|
|
850
|
+
key: "ensureInstanceFullyLoaded",
|
|
851
|
+
value: function (e) {
|
|
852
|
+
throw new Error("Method not implemented.");
|
|
853
|
+
}
|
|
854
|
+
}, {
|
|
855
|
+
key: "customNormalize",
|
|
856
|
+
value: function (e, t) {
|
|
857
|
+
throw new V();
|
|
858
|
+
}
|
|
859
|
+
}, {
|
|
860
|
+
key: "removeInstancesByRules",
|
|
861
|
+
value: function (e) {
|
|
862
|
+
throw new V();
|
|
863
|
+
}
|
|
864
|
+
}, {
|
|
865
|
+
key: "createDnp",
|
|
866
|
+
value: function () {
|
|
867
|
+
throw new V();
|
|
868
|
+
}
|
|
869
|
+
}, {
|
|
870
|
+
key: "getSelectedInstances",
|
|
871
|
+
value: function (e, t, r) {
|
|
872
|
+
return Promise.resolve([]);
|
|
873
|
+
}
|
|
874
|
+
}]);
|
|
875
|
+
var e, r, o;
|
|
876
|
+
}();
|
|
877
|
+
function K(e, t) {
|
|
878
|
+
var r = Object.keys(e);
|
|
879
|
+
if (Object.getOwnPropertySymbols) {
|
|
880
|
+
var n = Object.getOwnPropertySymbols(e);
|
|
881
|
+
t && (n = n.filter(function (t) {
|
|
882
|
+
return Object.getOwnPropertyDescriptor(e, t).enumerable;
|
|
883
|
+
})), r.push.apply(r, n);
|
|
884
|
+
}
|
|
885
|
+
return r;
|
|
886
|
+
}
|
|
887
|
+
function Q(e) {
|
|
888
|
+
for (var t = 1; t < arguments.length; t++) {
|
|
889
|
+
var r = null != arguments[t] ? arguments[t] : {};
|
|
890
|
+
t % 2 ? K(Object(r), !0).forEach(function (t) {
|
|
891
|
+
n(e, t, r[t]);
|
|
892
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : K(Object(r)).forEach(function (t) {
|
|
893
|
+
Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t));
|
|
894
|
+
});
|
|
895
|
+
}
|
|
896
|
+
return e;
|
|
897
|
+
}
|
|
898
|
+
function Y() {}
|
|
899
|
+
function ee() {
|
|
900
|
+
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
|
|
901
|
+
r = e.g.CF.keformsUrl || "";
|
|
902
|
+
return "".concat(r, "/").concat(t).replace(/([^:])\/{2,}/g, "$1/");
|
|
903
|
+
}
|
|
904
|
+
function te(e, t) {
|
|
905
|
+
if (void 0 === t) return e;
|
|
906
|
+
for (var r = [], n = 0, o = Object.keys(t); n < o.length; n++) {
|
|
907
|
+
var i = o[n],
|
|
908
|
+
a = t[i];
|
|
909
|
+
null != a && r.push("".concat(i, "=").concat(encodeURIComponent(a)));
|
|
910
|
+
}
|
|
911
|
+
return 0 === r.length ? e : e + "?" + r.join("&");
|
|
912
|
+
}
|
|
913
|
+
function re(t) {
|
|
914
|
+
return (e.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (e) {
|
|
915
|
+
return e.replace(/\+/g, " ").split("=").map(decodeURIComponent);
|
|
916
|
+
}).find(function (e) {
|
|
917
|
+
return (r = e, n = 1, function (e) {
|
|
918
|
+
if (Array.isArray(e)) return e;
|
|
919
|
+
}(r) || function (e, t) {
|
|
920
|
+
var r = null == e ? null : "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"];
|
|
921
|
+
if (null != r) {
|
|
922
|
+
var n,
|
|
923
|
+
o,
|
|
924
|
+
i,
|
|
925
|
+
a,
|
|
926
|
+
u = [],
|
|
927
|
+
s = !0,
|
|
928
|
+
c = !1;
|
|
929
|
+
try {
|
|
930
|
+
if (i = (r = r.call(e)).next, 0 === t) {
|
|
931
|
+
if (Object(r) !== r) return;
|
|
932
|
+
s = !1;
|
|
933
|
+
} else for (; !(s = (n = i.call(r)).done) && (u.push(n.value), u.length !== t); s = !0);
|
|
934
|
+
} catch (e) {
|
|
935
|
+
c = !0, o = e;
|
|
936
|
+
} finally {
|
|
937
|
+
try {
|
|
938
|
+
if (!s && null != r.return && (a = r.return(), Object(a) !== a)) return;
|
|
939
|
+
} finally {
|
|
940
|
+
if (c) throw o;
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
return u;
|
|
944
|
+
}
|
|
945
|
+
}(r, n) || function (e, t) {
|
|
946
|
+
if (e) {
|
|
947
|
+
if ("string" == typeof e) return o(e, t);
|
|
948
|
+
var r = {}.toString.call(e).slice(8, -1);
|
|
949
|
+
return "Object" === r && e.constructor && (r = e.constructor.name), "Map" === r || "Set" === r ? Array.from(e) : "Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) ? o(e, t) : void 0;
|
|
950
|
+
}
|
|
951
|
+
}(r, n) || function () {
|
|
952
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
953
|
+
}())[0] == t;
|
|
954
|
+
var r, n;
|
|
955
|
+
}) || [])[1];
|
|
956
|
+
}
|
|
957
|
+
var ne = {
|
|
958
|
+
start: function (t, r) {
|
|
959
|
+
var n,
|
|
960
|
+
o,
|
|
961
|
+
i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : Y,
|
|
962
|
+
a = null,
|
|
963
|
+
u = r.ns,
|
|
964
|
+
s = r.draftId;
|
|
965
|
+
if (new RegExp("^(?:".concat(D.konturDomains.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-._]+"), ")$")).test(e.g.location.host) ? D.authorized ? s ? u || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
|
|
966
|
+
var c = null !== (n = r.resourceZone) && void 0 !== n ? n : re("resourceZone"),
|
|
967
|
+
l = te(ee(function (e) {
|
|
968
|
+
return "v1/ns/".concat(e.ns, "/drafts/").concat(e.draftId, "/client-draft-info");
|
|
969
|
+
}({
|
|
970
|
+
ns: u,
|
|
971
|
+
draftId: s
|
|
972
|
+
})), {
|
|
973
|
+
resourceZone: c
|
|
974
|
+
}),
|
|
975
|
+
f = {
|
|
976
|
+
method: "GET"
|
|
977
|
+
};
|
|
978
|
+
if (null == r.authentication || "browser-credentials-include" === r.authentication) f.credentials = "include";else if ("authSid" in r.authentication && null != r.authentication.authSid) {
|
|
979
|
+
var h;
|
|
980
|
+
f.credentials = "omit", f.headers = null !== (h = f.headers) && void 0 !== h ? h : {}, f.headers.Authorization = "AUTH.SID ".concat(r.authentication.authSid);
|
|
981
|
+
} else f.credentials = "omit";
|
|
982
|
+
(null !== (o = r.fetch) && void 0 !== o ? o : P)(l, f).then(function (e) {
|
|
983
|
+
return e.json();
|
|
984
|
+
}).then(function (n) {
|
|
985
|
+
var o,
|
|
986
|
+
a,
|
|
987
|
+
u,
|
|
988
|
+
s,
|
|
989
|
+
l,
|
|
990
|
+
f = n.gfv,
|
|
991
|
+
h = n.engineVersion,
|
|
992
|
+
d = Q(Q(Q({
|
|
993
|
+
authorized: D.authorized,
|
|
994
|
+
cauldronApiUrl: D.cauldronApiUrl,
|
|
995
|
+
isTestServer: D.isTestServer,
|
|
996
|
+
renderCachingForIE8: D.renderCachingForIE8,
|
|
997
|
+
normalizationOnServer: D.normalizationOnServer,
|
|
998
|
+
normativeUrl: D.normativeUrl,
|
|
999
|
+
konturDomains: D.konturDomains,
|
|
1000
|
+
showNavigationSidebar: null === (o = r.showNavigationSidebar) || void 0 === o || o,
|
|
1001
|
+
onRemoveAttachment: r.onRemoveAttachment
|
|
1002
|
+
}, r), n), {}, {
|
|
1003
|
+
gfv: f,
|
|
1004
|
+
engineVersion: h,
|
|
1005
|
+
feedbackEnabled: null !== (a = r.feedbackEnabled) && void 0 !== a ? a : n.feedbackEnabled,
|
|
1006
|
+
isDisabledCleanForm: null !== (u = r.isDisabledCleanForm) && void 0 !== u && u,
|
|
1007
|
+
isDisabledCloseButton: null !== (s = r.isDisabledCloseButton) && void 0 !== s && s,
|
|
1008
|
+
isDisabledCloseAndSaveButton: null !== (l = r.isDisabledCloseAndSaveButton) && void 0 !== l && l,
|
|
1009
|
+
resourceZone: c
|
|
1010
|
+
});
|
|
1011
|
+
!function (t, r) {
|
|
1012
|
+
var n = t.gfv,
|
|
1013
|
+
o = t.engineVersion;
|
|
1014
|
+
if (e.g.CF.entryPoint[n]) r();else {
|
|
1015
|
+
var i = o && !e.g[o],
|
|
1016
|
+
a = "true" === re("debug") ? "" : ".min",
|
|
1017
|
+
u = [],
|
|
1018
|
+
s = {
|
|
1019
|
+
resourceZone: t.resourceZone
|
|
1020
|
+
};
|
|
1021
|
+
u.push(function (e) {
|
|
1022
|
+
return R.styleSheet(ee(te("static/public/styles/".concat(n).concat(a, ".css"), s)), !0, e);
|
|
1023
|
+
}), u.push(function (e) {
|
|
1024
|
+
return R.script(ee(te("static/public/scripts/".concat(n).concat(a, ".js"), s)), e);
|
|
1025
|
+
}), i && u.push(function (e) {
|
|
1026
|
+
return R.styleSheet(ee(te("static/public/styles/candy_".concat(o).concat(a, ".css"), s)), !1, e);
|
|
1027
|
+
}, function (e) {
|
|
1028
|
+
return R.script(ee(te("static/public/scripts/candy_".concat(o).concat(a, ".js"), s)), e);
|
|
1029
|
+
}), function (e, t) {
|
|
1030
|
+
var r = 0;
|
|
1031
|
+
e.forEach(function (n) {
|
|
1032
|
+
n(function (n) {
|
|
1033
|
+
if (r !== e.length) {
|
|
1034
|
+
if (n) return r = e.length, void t(n);
|
|
1035
|
+
(r += 1) === e.length && t();
|
|
1036
|
+
}
|
|
1037
|
+
});
|
|
1038
|
+
});
|
|
1039
|
+
}(u, r);
|
|
1040
|
+
}
|
|
1041
|
+
}({
|
|
1042
|
+
gfv: d.gfv,
|
|
1043
|
+
engineVersion: d.engineVersion,
|
|
1044
|
+
resourceZone: d.resourceZone,
|
|
1045
|
+
theme: d.theme
|
|
1046
|
+
}, function (n) {
|
|
1047
|
+
if (!n && e.g.CF.entryPoint[f]) {
|
|
1048
|
+
var o = function (t) {
|
|
1049
|
+
if (null != t) return e.g[t] && e.g[t].default;
|
|
1050
|
+
}(h);
|
|
1051
|
+
!function (t, r, n) {
|
|
1052
|
+
var o;
|
|
1053
|
+
(null !== (o = e.g.CF.entryPoint[r.gfv]) && void 0 !== o ? o : function (e) {
|
|
1054
|
+
throw "string" == typeof e || null == e ? new Error(null != e ? e : "Undefined is not allowed") : e;
|
|
1055
|
+
}("Form entry point ".concat(r.gfv, " not found.")))(t, r).then(function (e) {
|
|
1056
|
+
var t = e.publicForm || function (e) {
|
|
1057
|
+
return new W(e);
|
|
1058
|
+
}(e);
|
|
1059
|
+
n(null, t);
|
|
1060
|
+
}).catch(n);
|
|
1061
|
+
}(t, Q(Q({}, d), {}, {
|
|
1062
|
+
templatesApi: r.templatesApi,
|
|
1063
|
+
renderForm: o
|
|
1064
|
+
}), i);
|
|
1065
|
+
} else i(new Error("dynamic loading is not supported for gfv ".concat(f)));
|
|
1066
|
+
});
|
|
1067
|
+
}).catch(i);
|
|
1068
|
+
}
|
|
1069
|
+
},
|
|
1070
|
+
entryPoint: {},
|
|
1071
|
+
partialRenderingForIE8: ("{partialRenderingForIE8}", !1),
|
|
1072
|
+
keformsUrl: "{keformsUrl}"
|
|
1073
|
+
};
|
|
1074
|
+
e.g.CF = ne;
|
|
1075
|
+
}();
|
|
1076
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJyIiwibiIsInRvUHJpbWl0aXZlIiwibyIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwiQXJyYXkiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwid2luZG93IiwiaSIsInNlbGYiLCJhIiwidSIsInMiLCJCbG9iIiwiYyIsImwiLCJmIiwiaCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInRvU3RyaW5nIiwiZCIsInRlc3QiLCJ0b0xvd2VyQ2FzZSIsInAiLCJ5IiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsIm0iLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ2IiwiX25vQm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImIiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJ3IiwiRmlsZVJlYWRlciIsInJlYWRBc0FycmF5QnVmZmVyIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsIkUiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsImdldCIsInR5cGUiLCJibG9iIiwicmVzb2x2ZSIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJleGVjIiwicmVhZEFzVGV4dCIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJmb3JtRGF0YSIsIkEiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwiZGVsZXRlIiwiaGFzIiwiaGFzT3duUHJvcGVydHkiLCJrZXlzIiwicHVzaCIsInZhbHVlcyIsImVudHJpZXMiLCJPIiwiayIsImJvZHkiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1ldGhvZCIsIm1vZGUiLCJzaWduYWwiLCJ0b1VwcGVyQ2FzZSIsIkFib3J0Q29udHJvbGxlciIsInJlZmVycmVyIiwiY2FjaGUiLCJyZXBsYWNlIiwiRGF0ZSIsImdldFRpbWUiLCJ0cmltIiwic3BsaXQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJqIiwic3RhdHVzIiwiUmFuZ2VFcnJvciIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiUyIsInJlZGlyZWN0IiwibG9jYXRpb24iLCJUIiwiRE9NRXhjZXB0aW9uIiwibWVzc2FnZSIsIm5hbWUiLCJzdGFjayIsImNyZWF0ZSIsIlAiLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsImNvbnNvbGUiLCJ3YXJuIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0Iiwib3BlbiIsImhyZWYiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJfIiwiQiIsImtleSIsIkMiLCJwb2x5ZmlsbCIsImZldGNoIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiUiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJkb2N1bWVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJJIiwiQm9vbGVhbiIsIkQiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwia29udHVyRG9tYWlucyIsIlUiLCJ4IiwiYXJndW1lbnRzIiwiYXBwbHkiLCJGIiwic2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsImJpbmQiLCJfX3Byb3RvX18iLCJNIiwiTiIsIkwiLCJ2YWx1ZU9mIiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJIIiwiTWFwIiwiX3dyYXBOYXRpdmVTdXBlciIsIlJlZmVyZW5jZUVycm9yIiwiViIsInoiLCIkIiwiWCIsImZpbHRlciIsIkoiLCJyZWR1Y2UiLCJHIiwiVyIsImZvcm0iLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwid3JhcCIsInByZXYiLCJzdG9wIiwicGlja2xpc3RzUHJvdmlkZXIiLCJnZXREaWdlc3RBcGlQaWNrbGlzdCIsInF1ZXJ5IiwiZXZlbnRNYW5hZ2VyIiwib24iLCJvZmYiLCJjaGFuZ2VTZXQiLCJzdG9wQXV0b3NlbmQiLCJ1bm1vdW50IiwibW9kZWwiLCJnZXRDaHVuayIsInNldHRpbmdzIiwiZm9ybVJvb3QiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZUFsbCIsImZpbGwiLCJjb25jYXQiLCJZIiwiZWUiLCJDRiIsImtlZm9ybXNVcmwiLCJ0ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlIiwic2VhcmNoIiwiZmluZCIsInJldHVybiIsImZyb20iLCJuZSIsInN0YXJ0IiwibnMiLCJkcmFmdElkIiwiUmVnRXhwIiwiaG9zdCIsInJlc291cmNlWm9uZSIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsIkF1dGhvcml6YXRpb24iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiUSIsInNob3dOYXZpZ2F0aW9uU2lkZWJhciIsIm9uUmVtb3ZlQXR0YWNobWVudCIsImZlZWRiYWNrRW5hYmxlZCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwiZW50cnlQb2ludCIsInN0eWxlU2hlZXQiLCJzY3JpcHQiLCJ0aGVtZSIsImRlZmF1bHQiLCJwdWJsaWNGb3JtIiwiY2F0Y2giLCJ0ZW1wbGF0ZXNBcGkiLCJyZW5kZXJGb3JtIiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vd3JhcE5hdGl2ZVN1cGVyLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZUZ1bmN0aW9uLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vRXJyb3JzLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybS50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0dldENsaWVudERyYWZ0SW5mb1VybC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vVHlwaW5nVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkge1xuICAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7XG4gIGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdO1xuICByZXR1cm4gbjtcbn1cbmV4cG9ydCB7IF9hcnJheUxpa2VUb0FycmF5IGFzIGRlZmF1bHQgfTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xudmFyIGcgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpIHx8XG4gIHt9XG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGcsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnICYmXG4gICAgJ0Jsb2InIGluIGcgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGcsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICBpZiAoaGVhZGVyLmxlbmd0aCAhPSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hlYWRlcnMgY29uc3RydWN0b3I6IGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQnICsgaGVhZGVyLmxlbmd0aClcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5Ll9ub0JvZHkpIHJldHVyblxuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHZhciBtYXRjaCA9IC9jaGFyc2V0PShbQS1aYS16MC05Xy1dKykvLmV4ZWMoYmxvYi50eXBlKVxuICB2YXIgZW5jb2RpbmcgPSBtYXRjaCA/IG1hdGNoWzFdIDogJ3V0Zi04J1xuICByZWFkZXIucmVhZEFzVGV4dChibG9iLCBlbmNvZGluZylcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ub0JvZHkgPSB0cnVlO1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBhcyBBcnJheUJ1ZmZlcicpXG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0NPTk5FQ1QnLCAnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUEFUQ0gnLCAnUE9TVCcsICdQVVQnLCAnVFJBQ0UnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbCB8fCAoZnVuY3Rpb24gKCkge1xuICAgIGlmICgnQWJvcnRDb250cm9sbGVyJyBpbiBnKSB7XG4gICAgICB2YXIgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIHJldHVybiBjdHJsLnNpZ25hbDtcbiAgICB9XG4gIH0oKSk7XG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1Jlc3BvbnNlICcgKyBlcnJvci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICBpZiAodGhpcy5zdGF0dXMgPCAyMDAgfHwgdGhpcy5zdGF0dXMgPiA1OTkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Jlc3BvbnNlJzogVGhlIHN0YXR1cyBwcm92aWRlZCAoMCkgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzIwMCwgNTk5XS5cIilcbiAgfVxuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAyMDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2Uub2sgPSBmYWxzZVxuICByZXNwb25zZS5zdGF0dXMgPSAwXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZy5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgY2hlY2sgaWYgc3BlY2lmaWNhbGx5IGZvciB3aGVuIGEgdXNlciBmZXRjaGVzIGEgZmlsZSBsb2NhbGx5IGZyb20gdGhlIGZpbGUgc3lzdGVtXG4gICAgICAvLyBPbmx5IGlmIHRoZSBzdGF0dXMgaXMgb3V0IG9mIGEgbm9ybWFsIHJhbmdlXG4gICAgICBpZiAocmVxdWVzdC51cmwuaW5kZXhPZignZmlsZTovLycpID09PSAwICYmICh4aHIuc3RhdHVzIDwgMjAwIHx8IHhoci5zdGF0dXMgPiA1OTkpKSB7XG4gICAgICAgIG9wdGlvbnMuc3RhdHVzID0gMjAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMgPSB4aHIuc3RhdHVzO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCB0aW1lZCBvdXQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZy5sb2NhdGlvbi5ocmVmID8gZy5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlclxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzIHx8IChnLkhlYWRlcnMgJiYgaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgZy5IZWFkZXJzKSkpIHtcbiAgICAgIHZhciBuYW1lcyA9IFtdO1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgbmFtZXMucHVzaChub3JtYWxpemVOYW1lKG5hbWUpKVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmIChuYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWcuZmV0Y2gpIHtcbiAgZy5mZXRjaCA9IGZldGNoXG4gIGcuSGVhZGVycyA9IEhlYWRlcnNcbiAgZy5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7XG4gIGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbn1cbmV4cG9ydCB7IF9jbGFzc0NhbGxDaGVjayBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikge1xuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcbiAgICB2YXIgbyA9IHJbdF07XG4gICAgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHRvUHJvcGVydHlLZXkoby5rZXkpLCBvKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcbiAgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgZTtcbn1cbmV4cG9ydCB7IF9jcmVhdGVDbGFzcyBhcyBkZWZhdWx0IH07IiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChuLCB0LCBlLCByLCBvLCBhLCBjKSB7XG4gIHRyeSB7XG4gICAgdmFyIGkgPSBuW2FdKGMpLFxuICAgICAgdSA9IGkudmFsdWU7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gdm9pZCBlKG4pO1xuICB9XG4gIGkuZG9uZSA/IHQodSkgOiBQcm9taXNlLnJlc29sdmUodSkudGhlbihyLCBvKTtcbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdCA9IHRoaXMsXG4gICAgICBlID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAociwgbykge1xuICAgICAgdmFyIGEgPSBuLmFwcGx5KHQsIGUpO1xuICAgICAgZnVuY3Rpb24gX25leHQobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgbik7XG4gICAgICB9XG4gICAgICBfbmV4dCh2b2lkIDApO1xuICAgIH0pO1xuICB9O1xufVxuZXhwb3J0IHsgX2FzeW5jVG9HZW5lcmF0b3IgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBfZ2V0UHJvdG90eXBlT2YodCk7XG59XG5leHBvcnQgeyBfZ2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0O1xuICB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfc2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiB0LFxuICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH1cbiAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlICYmIHNldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICB0cnkge1xuICAgIHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgfSBjYXRjaCAodCkge31cbiAgcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICByZXR1cm4gISF0O1xuICB9KSgpO1xufVxuZXhwb3J0IHsgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGdldFByb3RvdHlwZU9mIGZyb20gXCIuL2dldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZUZ1bmN0aW9uIGZyb20gXCIuL2lzTmF0aXZlRnVuY3Rpb24uanNcIjtcbmltcG9ydCBjb25zdHJ1Y3QgZnJvbSBcIi4vY29uc3RydWN0LmpzXCI7XG5mdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKHQpIHtcbiAgdmFyIHIgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIE1hcCA/IG5ldyBNYXAoKSA6IHZvaWQgMDtcbiAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKHQpIHtcbiAgICBpZiAobnVsbCA9PT0gdCB8fCAhaXNOYXRpdmVGdW5jdGlvbih0KSkgcmV0dXJuIHQ7XG4gICAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIGlmICh2b2lkIDAgIT09IHIpIHtcbiAgICAgIGlmIChyLmhhcyh0KSkgcmV0dXJuIHIuZ2V0KHQpO1xuICAgICAgci5zZXQodCwgV3JhcHBlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0KHQsIGFyZ3VtZW50cywgZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgfVxuICAgIH0pLCBzZXRQcm90b3R5cGVPZihXcmFwcGVyLCB0KTtcbiAgfSwgX3dyYXBOYXRpdmVTdXBlcih0KTtcbn1cbmV4cG9ydCB7IF93cmFwTmF0aXZlU3VwZXIgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKHQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gLTEgIT09IEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwodCkuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIik7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0O1xuICB9XG59XG5leHBvcnQgeyBfaXNOYXRpdmVGdW5jdGlvbiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBmcm9tIFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIjtcbmltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2NvbnN0cnVjdCh0LCBlLCByKSB7XG4gIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkgcmV0dXJuIFJlZmxlY3QuY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gW251bGxdO1xuICBvLnB1c2guYXBwbHkobywgZSk7XG4gIHZhciBwID0gbmV3ICh0LmJpbmQuYXBwbHkodCwgbykpKCk7XG4gIHJldHVybiByICYmIHNldFByb3RvdHlwZU9mKHAsIHIucHJvdG90eXBlKSwgcDtcbn1cbmV4cG9ydCB7IF9jb25zdHJ1Y3QgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxuZXhwb3J0IHsgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZXhwb3J0IHsgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBhcyBkZWZhdWx0IH07IiwiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgcHJvZ3JhbSBzdGF0ZVwiICsgKG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gXCI6IFwiICsgbWVzc2FnZSA6IFwiXCIpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihhcmd1bWVudE5hbWU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gYCR7bWVzc2FnZX0gKGFyZ3VtZW50OiAke2FyZ3VtZW50TmFtZX0pYCA6IGBJbnZhbGlkIGFyZ3VtZW50IHZhbHVlOiAke2FyZ3VtZW50TmFtZX1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwaW5nRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCB0eXBpbmdcIik7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBFbXBsb3llZSxcbiAgICBFbXBsb3llZUxpc3QsXG4gICAgR2V0RW1wbG95ZWVzV2l0aEFjdGl2ZVBlcmlvZFF1ZXJ5LFxuICAgIEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0LFxuICAgIE1hdGNoRW1wbG95ZWVSZXF1ZXN0LFxuICAgIE1hdGNoRW1wbG95ZWVSZXNwb25zZSxcbiAgICBNZXJnZVJlbGF0aXZlUmVzcG9uc2UsXG4gICAgUGF0Y2hSZWxhdGl2ZVJlc3BvbnNlLFxuICAgIFdvcmtpbmdFdmVudExpc3QsXG59IGZyb20gXCJAc2tia29udHVyL3N0YWZmLXNlbGVjdG9yLXdpZGdldFwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcIkVuZ2luZS9zcmMvRW5naW5lL0Zvcm0vTW9kZWxDaGFuZ2VFdmVudExpc3RlbmVyXCI7XG5cbmltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1BhdGgsIE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcbmltcG9ydCB7IERpZ2VzdFF1ZXJ5RmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvVHlwZXMvRGlnZXN0UXVlcnlGaWx0ZXJcIjtcbmltcG9ydCB7IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybU1vZGVsQWNjZXNzb3JcIjtcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvSU1vZGFsU3RhdGVcIjtcbmltcG9ydCB7IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcbmltcG9ydCB7XG4gICAgQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcyxcbiAgICBJbml0U2VjdGlvbkZvcm1MaWdodGJveE9wdGlvbnMsXG4gICAgUHJlZmVycmVkSW50ZXJkb2N1bWVudFRyYW5zZmVyUHJvcHMsXG59IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0luaXRTZWN0aW9uTGlnaHRib3hcIjtcbmltcG9ydCB7IE1hc3NBY3Rpb25QYXJhbWV0ZXJzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IEZpYXNBcGksIEZpYXNDbGllbnRJbml0T3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9WYWx1ZUVkaXRvcnMvRmlhcy9GaWFzSW5wdXQvRmlhc0FwaVwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9JbnN0YW5jZXNEZWxldGluZy9JbnN0YW5jZXNEZWxldGluZ1J1bGVcIjtcbmltcG9ydCB7IENvbWJpbmVGdWZSZXN1bHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0RyYWZ0QWN0aW9ucy9Db21iaW5lRnVmUmVzdWx0XCI7XG5pbXBvcnQgeyBJQ2FuZHlDb21wb25lbnRIYW5kbGUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29tcG9uZW50SGFuZGxlUmVnaXN0cnkvSUNhbmR5Q29tcG9uZW50SGFuZGxlXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uUGF0aE1hcHBlciB9IGZyb20gXCIuLi8uLi9JbmplY3RhYmxlTW9kdWxlcy9JbmplY3RhYmxlRW5naW5lTW9kdWxlc1wiO1xuaW1wb3J0IHtcbiAgICBFbXBsb3llck5vcm1hbGl6ZWRUYWcsXG4gICAgSW1wb3J0RW1wbG95ZXJEb2N1bWVudHNPcHRpb25zLFxufSBmcm9tIFwiLi4vLi4vLi4vU3RhZmZTZXJ2aWNlSW50ZWdyYXRpb24vRW1wbG95ZWVTZXJ2aWNlVHlwZXNcIjtcbmltcG9ydCB7IFRhYkluZm9zU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvTXVsdGlDb250cm9scy9UYWJzL1N0b3JlL1RhYkluZm9zU3RhdGVcIjtcbmltcG9ydCB7IE1ldHJpY3NQYXlsb2FkIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9NZXRyaWNzL01ldHJpY3NQcm92aWRlclwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmF2aWdhdGVCeUhpZ2hsYW5kZXJQYXRocyhwYXRoczogc3RyaW5nW10pOiBQcm9taXNlPElDYW5keUNvbXBvbmVudEhhbmRsZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsU2VsZWN0UmVsYXRpdmUoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYXZpZ2F0aW9uUGF0aE1hcHBlcigpOiBOYXZpZ2F0aW9uUGF0aE1hcHBlciB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBiYXRjaFVwZGF0ZSh1cGRhdGVQcm9jOiAodXBkYXRlQWNjZXNzb3I6IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvcikgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcnVuQ2hlY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRFcnJvckxvZyhlcnJvckxvZzogUGFydGlhbDxTZXJ2ZXJFcnJvckxvZz4pOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHZhbGlkYXRlQ2hpbGRyZW5CeVBhdGgocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfX0lOVEVSTkFMX19pbXBvcnRGcm9tRW1wbG95ZWVTZXJ2aWNlKCk6IFByb21pc2U8RW1wbG95ZWVbXSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX19JTlRFUk5BTF9fZ2V0U2VsZWN0RnVuY3Rpb25Gb3JEaXNhYmxlRW1wbG95ZWVJblNTKFxuICAgICAgICBwYXRoU3BlYzogc3RyaW5nXG4gICAgKTogUHJvbWlzZTwoZW1wbG95ZWU6IEVtcGxveWVlKSA9PiBib29sZWFuPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNb2RhbFVuaXRPcGVuZWRJbnN0YW5jZShwYWdlSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGFic1N0YXRlKCk6IFRhYkluZm9zU3RhdGUge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmF2aWdhdGUobmF2aWdhdGlvblBhdGg6IHN0cmluZyk6IFByb21pc2U8SUNhbmR5Q29tcG9uZW50SGFuZGxlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llckRvY3VtZW50cyhcbiAgICAgICAgb3B0aW9uczogSW1wb3J0RW1wbG95ZXJEb2N1bWVudHNPcHRpb25zXG4gICAgKTogUHJvbWlzZTxFbXBsb3llck5vcm1hbGl6ZWRUYWcgfCB1bmRlZmluZWQgfCBudWxsPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llZXMoZW1wbG95ZWVzOiBFbXBsb3llZVtdLCBvcHRpb25zPzogeyBzY2VuYXJpbz86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludChwcmludFR5cGU6IFByaW50VHlwZSwgYm9keT86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBwdWJsaWMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHRocm93IEVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0QWRkaXRpb25hbEVtcGxveWVlSW5mbyhmaWx0ZXJzOiBHZXRFbXBsb3llZXNXaXRoQWN0aXZlUGVyaW9kUXVlcnkpOiBQcm9taXNlPEVtcGxveWVlTGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVtcGxveWVlcygpOiBQcm9taXNlPEVtcGxveWVlTGlzdD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG1lcmdlUmVsYXRpdmUoKTogUHJvbWlzZTxNZXJnZVJlbGF0aXZlUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaFJlbGF0aXZlKCk6IFByb21pc2U8UGF0Y2hSZWxhdGl2ZVJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VuZE1ldHJpY3MoYWN0aW9uOiBzdHJpbmcsIHBheWxvYWQ/OiBNZXRyaWNzUGF5bG9hZCk6IHZvaWQge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEVtcGxveWVlKHF1ZXJ5OiBNYXRjaEVtcGxveWVlUmVxdWVzdCk6IFByb21pc2U8TWF0Y2hFbXBsb3llZVJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVsb2FkSW5uZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V29ya2luZ0V2ZW50c0ZvckVtcGxveWVlKGZpbHRlcnM6IEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0KTogUHJvbWlzZTxXb3JraW5nRXZlbnRMaXN0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlcnJvckNvdW50ID0gdGhpcy5mb3JtLm1vZGVsLmdldCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIik7XG4gICAgICAgIHJldHVybiBlcnJvckNvdW50ICE9IHVuZGVmaW5lZCAmJiBlcnJvckNvdW50ID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZywgdmFsdWU6IE1vZGVsVmFsdWUpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KFxuICAgICAgICBwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcgfCB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSxcbiAgICAgICAgdmFsdWU/OiBNb2RlbFZhbHVlXG4gICAgKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXRoT3JNb2RlbENodW5rICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhdGhPck1vZGVsQ2h1bmspXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJDaHVuayA9IE9iamVjdC5rZXlzKHBhdGhPck1vZGVsQ2h1bmspLnJlZHVjZTxSZWFkb25seU1vZGVsQ2h1bms+KFxuICAgICAgICAgICAgICAgIChyZXN1bHQsIHBhdGgpID0+ICh7IFtwYXRoXTogeyB2YWx1ZTogcGF0aE9yTW9kZWxDaHVua1twYXRoXSB9LCAuLi5yZXN1bHQgfSksXG4gICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5maWxsKGlubmVyQ2h1bmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuc2V0KHBhdGhPck1vZGVsQ2h1bmssIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5zZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIG9iamVjdCB3aXRoIHBhdGgtdmFsdWUgcGFpcnNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChwYXRoT3JBcnJheTogc3RyaW5nIHwgc3RyaW5nW10pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoT3JBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhcbiAgICAgICAgICAgICAgICBwYXRoT3JBcnJheVxuICAgICAgICAgICAgICAgICAgICAubWFwKHBhdGggPT4gbWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGgpKSlcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlPEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4+KChyZXN1bHQsIGFycmF5KSA9PiByZXN1bHQuY29uY2F0KGFycmF5KSwgW10pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JBcnJheSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoT3JBcnJheSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoT3JBcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLmdldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3IgYXJyYXkgb2YgcGF0aHNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKHBhdGg6IHN0cmluZyk6IE1vZGVsVmFsdWUge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5tb2RlbC5nZXQocGF0aCwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weVN1YnRyZWUoXG4gICAgICAgIHNvdXJjZUJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIHRhcmdldEJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIGRvTm90Q29weVBhdGhzPzogc3RyaW5nW11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5zdGFuY2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW4ocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1dWlkR2VuZXJhdGUoKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd01vZGFsKG9wdGlvbnM6IE1vZGFsT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTZWN0aW9uKG9wdGlvbnM6IEluaXRTZWN0aW9uRm9ybUxpZ2h0Ym94T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxsSW5pdFNlY3Rpb24ob3B0aW9uczogQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmVmZXJyZWRJbnRlcmRvY3VtZW50VHJhbnNmZXIob3B0aW9uczogUHJlZmVycmVkSW50ZXJkb2N1bWVudFRyYW5zZmVyUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG4gICAgcHVibGljIGNyZWF0ZUZpYXNBcGlDbGllbnQob3B0aW9uczogRmlhc0NsaWVudEluaXRPcHRpb25zKTogRmlhc0FwaSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5FbXBsb3llZUVkaXRvcihlbXBsb3llZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlcyhwYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNPbkNvbnRyb2xJZkV4aXN0KHBhdGg6IEJpbmRpbmdQYXRoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dG9GaWVsZHNUb0F1dG9WYWx1ZShwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5zdXJlSW5zdGFuY2VGdWxseUxvYWRlZChcbiAgICAgICAgYmluZGluZ1BhdGg6IHN0cmluZyB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIC4uLmluc3RhbmNlczogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzQnlSdWxlcyhydWxlczogSW5zdGFuY2VzRGVsZXRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG5wKCk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RlZEluc3RhbmNlcyhcbiAgICAgICAgbXVsdGlwbGljaXR5UGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICB0YWJsZVVuaXFJZDogc3RyaW5nLFxuICAgICAgICBwYXRoVG9DaGVja2VkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5pbXBvcnQgeyBBbGxJY29uTmFtZXMgfSBmcm9tIFwicmVhY3QtdWlcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGVzY3JpcHRpb24ge1xuICAgIGljb246IEFsbEljb25OYW1lcztcbiAgICB0ZXh0Pzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gICAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgICBoaW50PzogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGlkPzogc3RyaW5nO1xuICAgIHdlaWdodDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVuZGVyRm9ybVNldHRpbmdzIHtcbiAgICBnZnY6IHN0cmluZztcbiAgICBlbmdpbmVWZXJzaW9uPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlbmRlckZvcm06IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQ7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIHBhbmVsQWN0aW9ucz86IEFjdGlvbkRlc2NyaXB0aW9uW107XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG4gICAgbG9hZEVycm9yPzogdW5rbm93bjtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICAgICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogV2luZG93O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgLyogZW1wdHkgKi9cbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1cmwocmVsYXRpdmVVcmw6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnbG9iYWwuQ0Yua2Vmb3Jtc1VybCB8fCBcIlwiO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cmVsYXRpdmVVcmx9YC5yZXBsYWNlKC8oW146XSlcXC97Mix9L2csIFwiJDEvXCIpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiB1bmRlZmluZWQgfCBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICBpZiAocGFyYW1WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFydHMucHVzaChgJHtwYXJhbU5hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFydHMuam9pbihcIiZcIik7XG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZChkb21haW5zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7ZG9tYWlucy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCovZywgXCJbYS16MC05LS5fXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBwYW5lbEFjdGlvbnM/OiBBY3Rpb25EZXNjcmlwdGlvbltdO1xuICAgIGV2ZW50RW1pdHRlcj86IExheW91dEV2ZW50c1N0YXRpYztcbiAgICBlbXBsb3llcklkPzogc3RyaW5nO1xuICAgIHNob3dOYXZpZ2F0aW9uU2lkZWJhcj86IGJvb2xlYW47XG4gICAgb25SZW1vdmVBdHRhY2htZW50PzogKCkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICBrb250dXJEb21haW5zOiBjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zLFxuICAgICAgICAgICAgICAgIHNob3dOYXZpZ2F0aW9uU2lkZWJhcjogb3B0aW9ucy5zaG93TmF2aWdhdGlvblNpZGViYXIgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICBvblJlbW92ZUF0dGFjaG1lbnQ6IG9wdGlvbnMub25SZW1vdmVBdHRhY2htZW50LFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgLi4uY2xpZW50RHJhZnRJbmZvLFxuICAgICAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiBvcHRpb25zLmZlZWRiYWNrRW5hYmxlZCA/PyBjbGllbnREcmFmdEluZm8uZmVlZGJhY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbGVhbkZvcm06IG9wdGlvbnMuaXNEaXNhYmxlZENsZWFuRm9ybSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxvYWRGb3JtKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBleHRlbmRlZFNldHRpbmdzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5lbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuZXhwb3J0IHsgX3NsaWNlZFRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheUxpbWl0IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkge1xuICBpZiAocikge1xuICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShyLCBhKTtcbiAgICB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpO1xuICAgIHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IGFycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7XG4gIH1cbn1cbmV4cG9ydCB7IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVJlc3QgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4uL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnREcmFmdEluZm9VcmwoZHJhZnRJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAvLyBOT1RFINCt0YLQsCDRhNGD0L3QutGG0LjRjyDQvtCx0YrRj9Cy0LvQtdC90LAg0L7RgtC00LXQu9GM0L3Qviwg0LjQsdC+INC+0L3QsCDQstGF0L7QtNC40YIg0LIg0YHQvtGB0YLQsNCyIGNsaWVudC5qcyDQuFxuICAgIC8vINC90LUg0LTQvtC70LbQvdC+INC/0YDQvtC40YHRhdC+0LTQuNGC0Ywg0YPRgtC10LbQtdC70LXQvdC40Y8gY2xpZW50LmpzLdCwXG4gICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0SWQubnN9L2RyYWZ0cy8ke2RyYWZ0SWQuZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gO1xufVxuIiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlSXNBcnJheTxUPihpdGVtczogdW5rbm93bik6IFRbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE11c3QgYmUgYW4gYXJyYXkhYCk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcyBhcyBUW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGhhdmUgbWluaW1hbCBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTmV2ZXIobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBbmRHZXRTdHJpbmcobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Bc3luY0FjdGlvbihhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyB1bmRlZmluZWQge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyBzdHJpbmcge1xuICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eShpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0LnRyaW0oKSA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MYXN0U2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJczxUPih2YWx1ZTogVCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7RUFDQSxJQUFJQSxDQUFBLEdBQXNCLENBQUM7RUNEM0IsU0FBU0MsRUFBUUQsQ0FBQTtJQUdmLE9BQU9DLENBQUEsR0FBVSxxQkFBcUJDLE1BQUEsSUFBVSxtQkFBbUJBLE1BQUEsQ0FBT0MsUUFBQSxHQUFXLFVBQVVILENBQUE7TUFDN0YsY0FBY0EsQ0FDaEI7SUFBQSxJQUFJLFVBQVVBLENBQUE7TUFDWixPQUFPQSxDQUFBLElBQUsscUJBQXFCRSxNQUFBLElBQVVGLENBQUEsQ0FBRUksV0FBQSxLQUFnQkYsTUFBQSxJQUFVRixDQUFBLEtBQU1FLE1BQUEsQ0FBT0csU0FBQSxHQUFZLGtCQUFrQkwsQ0FDcEg7SUFBQSxHQUFHQyxDQUFBLENBQVFELENBQUEsQ0FDYjtFQUFBO0VDTkEsU0FBU00sRUFBY04sQ0FBQTtJQUNyQixJQUFJTSxDQUFBLEdDRk4sVUFBcUJOLENBQUEsRUFBR00sQ0FBQTtNQUN0QixJQUFJLFlBQVlMLENBQUEsQ0FBUUQsQ0FBQSxNQUFPQSxDQUFBLEVBQUcsT0FBT0EsQ0FBQTtNQUN6QyxJQUFJTyxDQUFBLEdBQUlQLENBQUEsQ0FBRUUsTUFBQSxDQUFPTSxXQUFBO01BQ2pCLFNBQUksTUFBV0QsQ0FBQSxFQUFHO1FBQ2hCLElBQUlFLENBQUEsR0FBSUYs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
|