@cartanova/qgrid-cli 2.4.8 → 2.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +18 -11
- package/README.md +18 -11
- package/bundle/.env +0 -0
- package/bundle/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.140.0/helpers/esm}/decorate.js +2 -2
- package/bundle/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.140.0/helpers/esm}/decorateMetadata.js +2 -2
- package/bundle/dist/_virtual/_rolldown/runtime.js +2 -3
- package/bundle/dist/application/monit/log-buffer.js +3 -2
- package/bundle/dist/application/monit/monit.frame.js +5 -6
- package/bundle/dist/application/monit/monit.types.js +1 -2
- package/bundle/dist/application/qgrid/conv-routing.js +1 -2
- package/bundle/dist/application/qgrid/oauth.js +1 -2
- package/bundle/dist/application/qgrid/qgrid-image-generation.js +1 -2
- package/bundle/dist/application/qgrid/qgrid-response-format.js +1 -2
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +76 -47
- package/bundle/dist/application/qgrid/qgrid.dispatcher.js +1 -2
- package/bundle/dist/application/qgrid/qgrid.frame.js +73 -97
- package/bundle/dist/application/qgrid/qgrid.types.js +11 -10
- package/bundle/dist/application/qgrid/token-subscriber.js +3 -2
- package/bundle/dist/application/qgrid/token-trigger-setup.js +1 -2
- package/bundle/dist/application/qgrid/tool-emulation.js +1 -2
- package/bundle/dist/application/queries.generated.js +1 -2
- package/bundle/dist/application/request-log/request-log.model.js +116 -47
- package/bundle/dist/application/request-log/request-log.types.js +1 -2
- package/bundle/dist/application/request-log-step/request-log-step.model.js +3 -4
- package/bundle/dist/application/request-log-step/request-log-step.types.js +1 -2
- package/bundle/dist/application/sonamu.generated.js +14 -15
- package/bundle/dist/application/sonamu.generated.sso.js +1 -2
- package/bundle/dist/application/token/token.model.js +3 -4
- package/bundle/dist/application/token/token.types.js +1 -2
- package/bundle/dist/codex-protocol/AbsolutePathBuf.js +0 -1
- package/bundle/dist/codex-protocol/AgentPath.js +0 -1
- package/bundle/dist/codex-protocol/ApplyPatchApprovalParams.js +0 -1
- package/bundle/dist/codex-protocol/ApplyPatchApprovalResponse.js +0 -1
- package/bundle/dist/codex-protocol/AuthMode.js +0 -1
- package/bundle/dist/codex-protocol/ClientInfo.js +0 -1
- package/bundle/dist/codex-protocol/ClientNotification.js +0 -1
- package/bundle/dist/codex-protocol/ClientRequest.js +0 -1
- package/bundle/dist/codex-protocol/CollaborationMode.js +0 -1
- package/bundle/dist/codex-protocol/ContentItem.js +0 -1
- package/bundle/dist/codex-protocol/ConversationGitInfo.js +0 -1
- package/bundle/dist/codex-protocol/ConversationSummary.js +0 -1
- package/bundle/dist/codex-protocol/ExecCommandApprovalParams.js +0 -1
- package/bundle/dist/codex-protocol/ExecCommandApprovalResponse.js +0 -1
- package/bundle/dist/codex-protocol/ExecPolicyAmendment.js +0 -1
- package/bundle/dist/codex-protocol/FileChange.js +0 -1
- package/bundle/dist/codex-protocol/ForcedLoginMethod.js +0 -1
- package/bundle/dist/codex-protocol/FunctionCallOutputBody.js +0 -1
- package/bundle/dist/codex-protocol/FunctionCallOutputContentItem.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchMatchType.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchParams.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchResponse.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchResult.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchSessionCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/GetAuthStatusParams.js +0 -1
- package/bundle/dist/codex-protocol/GetAuthStatusResponse.js +0 -1
- package/bundle/dist/codex-protocol/GetConversationSummaryParams.js +0 -1
- package/bundle/dist/codex-protocol/GetConversationSummaryResponse.js +0 -1
- package/bundle/dist/codex-protocol/GitDiffToRemoteParams.js +0 -1
- package/bundle/dist/codex-protocol/GitDiffToRemoteResponse.js +0 -1
- package/bundle/dist/codex-protocol/GitSha.js +0 -1
- package/bundle/dist/codex-protocol/ImageDetail.js +0 -1
- package/bundle/dist/codex-protocol/InitializeCapabilities.js +0 -1
- package/bundle/dist/codex-protocol/InitializeParams.js +0 -1
- package/bundle/dist/codex-protocol/InitializeResponse.js +0 -1
- package/bundle/dist/codex-protocol/InputModality.js +0 -1
- package/bundle/dist/codex-protocol/InternalSessionSource.js +0 -1
- package/bundle/dist/codex-protocol/LocalShellAction.js +0 -1
- package/bundle/dist/codex-protocol/LocalShellExecAction.js +0 -1
- package/bundle/dist/codex-protocol/LocalShellStatus.js +0 -1
- package/bundle/dist/codex-protocol/MessagePhase.js +0 -1
- package/bundle/dist/codex-protocol/ModeKind.js +0 -1
- package/bundle/dist/codex-protocol/NetworkPolicyAmendment.js +0 -1
- package/bundle/dist/codex-protocol/NetworkPolicyRuleAction.js +0 -1
- package/bundle/dist/codex-protocol/ParsedCommand.js +0 -1
- package/bundle/dist/codex-protocol/Personality.js +0 -1
- package/bundle/dist/codex-protocol/PlanType.js +0 -1
- package/bundle/dist/codex-protocol/RealtimeConversationVersion.js +0 -1
- package/bundle/dist/codex-protocol/RealtimeOutputModality.js +0 -1
- package/bundle/dist/codex-protocol/RealtimeVoice.js +0 -1
- package/bundle/dist/codex-protocol/RealtimeVoicesList.js +0 -1
- package/bundle/dist/codex-protocol/ReasoningEffort.js +0 -1
- package/bundle/dist/codex-protocol/ReasoningItemContent.js +0 -1
- package/bundle/dist/codex-protocol/ReasoningItemReasoningSummary.js +0 -1
- package/bundle/dist/codex-protocol/ReasoningSummary.js +0 -1
- package/bundle/dist/codex-protocol/RequestId.js +0 -1
- package/bundle/dist/codex-protocol/Resource.js +0 -1
- package/bundle/dist/codex-protocol/ResourceContent.js +0 -1
- package/bundle/dist/codex-protocol/ResourceTemplate.js +0 -1
- package/bundle/dist/codex-protocol/ResponseItem.js +0 -1
- package/bundle/dist/codex-protocol/ReviewDecision.js +0 -1
- package/bundle/dist/codex-protocol/ServerNotification.js +0 -1
- package/bundle/dist/codex-protocol/ServerRequest.js +0 -1
- package/bundle/dist/codex-protocol/SessionSource.js +0 -1
- package/bundle/dist/codex-protocol/Settings.js +0 -1
- package/bundle/dist/codex-protocol/SubAgentSource.js +0 -1
- package/bundle/dist/codex-protocol/ThreadId.js +0 -1
- package/bundle/dist/codex-protocol/ThreadMemoryMode.js +0 -1
- package/bundle/dist/codex-protocol/Tool.js +0 -1
- package/bundle/dist/codex-protocol/Verbosity.js +0 -1
- package/bundle/dist/codex-protocol/WebSearchAction.js +0 -1
- package/bundle/dist/codex-protocol/WebSearchContextSize.js +0 -1
- package/bundle/dist/codex-protocol/WebSearchLocation.js +0 -1
- package/bundle/dist/codex-protocol/WebSearchMode.js +0 -1
- package/bundle/dist/codex-protocol/WebSearchToolConfig.js +0 -1
- package/bundle/dist/codex-protocol/index.js +0 -1
- package/bundle/dist/codex-protocol/serde_json/JsonValue.js +0 -1
- package/bundle/dist/codex-protocol/v2/Account.js +0 -1
- package/bundle/dist/codex-protocol/v2/AccountLoginCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/AccountRateLimitsUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/AccountUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ActivePermissionProfile.js +0 -1
- package/bundle/dist/codex-protocol/v2/ActivePermissionProfileModification.js +0 -1
- package/bundle/dist/codex-protocol/v2/AddCreditsNudgeCreditType.js +0 -1
- package/bundle/dist/codex-protocol/v2/AddCreditsNudgeEmailStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/AdditionalFileSystemPermissions.js +0 -1
- package/bundle/dist/codex-protocol/v2/AdditionalNetworkPermissions.js +0 -1
- package/bundle/dist/codex-protocol/v2/AdditionalPermissionProfile.js +0 -1
- package/bundle/dist/codex-protocol/v2/AgentMessageDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/AnalyticsConfig.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppBranding.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppListUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppMetadata.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppReview.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppScreenshot.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppSummary.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppToolApproval.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppToolsConfig.js +0 -1
- package/bundle/dist/codex-protocol/v2/ApprovalsReviewer.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppsConfig.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppsDefaultConfig.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppsListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppsListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/AskForApproval.js +0 -1
- package/bundle/dist/codex-protocol/v2/AutoReviewDecisionSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/ByteRange.js +0 -1
- package/bundle/dist/codex-protocol/v2/CancelLoginAccountParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CancelLoginAccountResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CancelLoginAccountStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshReason.js +0 -1
- package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CodexErrorInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/CollabAgentState.js +0 -1
- package/bundle/dist/codex-protocol/v2/CollabAgentStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/CollabAgentTool.js +0 -1
- package/bundle/dist/codex-protocol/v2/CollabAgentToolCallStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/CollaborationModeMask.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandAction.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecOutputDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecOutputStream.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecResizeParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecResizeResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecTerminalSize.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecTerminateParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecTerminateResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecWriteParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecWriteResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionApprovalDecision.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionOutputDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/Config.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigBatchWriteParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigEdit.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigLayer.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigLayerMetadata.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigLayerSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigRequirements.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigRequirementsReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigValueWriteParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigWarningNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigWriteResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfiguredHookHandler.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfiguredHookMatcherGroup.js +0 -1
- package/bundle/dist/codex-protocol/v2/ContextCompactedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/CreditsSnapshot.js +0 -1
- package/bundle/dist/codex-protocol/v2/DeprecationNoticeNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/DynamicToolCallOutputContentItem.js +0 -1
- package/bundle/dist/codex-protocol/v2/DynamicToolCallParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/DynamicToolCallResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/DynamicToolCallStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/DynamicToolSpec.js +0 -1
- package/bundle/dist/codex-protocol/v2/ErrorNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExecPolicyAmendment.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeature.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeatureStage.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItem.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItemType.js +0 -1
- package/bundle/dist/codex-protocol/v2/FeedbackUploadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FeedbackUploadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileChangeApprovalDecision.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileChangeOutputDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileChangePatchUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileSystemAccessMode.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileSystemPath.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileSystemSandboxEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileSystemSpecialPath.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileUpdateChange.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsChangedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsCopyParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsCopyResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsCreateDirectoryParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsCreateDirectoryResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsGetMetadataParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsGetMetadataResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsReadDirectoryEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsReadDirectoryParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsReadDirectoryResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsReadFileParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsReadFileResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsRemoveParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsRemoveResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsUnwatchParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsUnwatchResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsWatchParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsWatchResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsWriteFileParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsWriteFileResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/GetAccountParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/GetAccountRateLimitsResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/GetAccountResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/GitInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/GrantedPermissionProfile.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianApprovalReview.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewAction.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianCommandSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianRiskLevel.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianUserAuthorization.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianWarningNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookErrorInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookEventName.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookExecutionMode.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookHandlerType.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookMetadata.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookOutputEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookOutputEntryKind.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookPromptFragment.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookRunStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookRunSummary.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookScope.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookTrustStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/HooksListEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/HooksListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/HooksListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ItemCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ItemStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ListMcpServerStatusParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ListMcpServerStatusResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/LoginAccountParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/LoginAccountResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/LogoutAccountResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ManagedHooksRequirements.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceAddParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceAddResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceInterface.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceLoadErrorInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceRemoveParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceRemoveResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeErrorInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpAuthStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationArrayType.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationBooleanSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationBooleanType.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationConstOption.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationNumberSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationNumberType.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationObjectType.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationPrimitiveSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationStringFormat.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationStringSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationStringType.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationTitledEnumItems.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationUntitledEnumItems.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpResourceReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpResourceReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerElicitationAction.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerOauthLoginCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerOauthLoginParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerOauthLoginResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerRefreshResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerStartupState.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerStatusDetail.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerStatusUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerToolCallParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerToolCallResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpToolCallError.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpToolCallProgressNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpToolCallResult.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpToolCallStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/MemoryCitation.js +0 -1
- package/bundle/dist/codex-protocol/v2/MemoryCitationEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/MergeStrategy.js +0 -1
- package/bundle/dist/codex-protocol/v2/MigrationDetails.js +0 -1
- package/bundle/dist/codex-protocol/v2/Model.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelAvailabilityNux.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelRerouteReason.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelReroutedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelServiceTier.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelUpgradeInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelVerification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelVerificationNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkAccess.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkApprovalContext.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkApprovalProtocol.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkDomainPermission.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkPolicyAmendment.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkPolicyRuleAction.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkRequirements.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkUnixSocketPermission.js +0 -1
- package/bundle/dist/codex-protocol/v2/NonSteerableTurnKind.js +0 -1
- package/bundle/dist/codex-protocol/v2/OverriddenMetadata.js +0 -1
- package/bundle/dist/codex-protocol/v2/PatchApplyStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/PatchChangeKind.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionGrantScope.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionProfile.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionProfileFileSystemPermissions.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionProfileModificationParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionProfileNetworkPermissions.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionProfileSelectionParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PlanDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginAuthPolicy.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginAvailability.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginDetail.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginHookSummary.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginInstallParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginInstallPolicy.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginInstallResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginInterface.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginListMarketplaceKind.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginMarketplaceEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareContext.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareDeleteParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareDeleteResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareDiscoverability.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareListItem.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSharePrincipal.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSharePrincipalType.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareSaveParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareSaveResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareTarget.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareUpdateDiscoverability.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSkillReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSkillReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSummary.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginUninstallParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginUninstallResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginsMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/ProcessExitedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ProcessOutputDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ProcessOutputStream.js +0 -1
- package/bundle/dist/codex-protocol/v2/ProcessTerminalSize.js +0 -1
- package/bundle/dist/codex-protocol/v2/ProfileV2.js +0 -1
- package/bundle/dist/codex-protocol/v2/RateLimitReachedType.js +0 -1
- package/bundle/dist/codex-protocol/v2/RateLimitSnapshot.js +0 -1
- package/bundle/dist/codex-protocol/v2/RateLimitWindow.js +0 -1
- package/bundle/dist/codex-protocol/v2/RawResponseItemCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReasoningEffortOption.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReasoningSummaryPartAddedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReasoningTextDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/RemoteControlConnectionStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/RemoteControlStatusChangedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/RequestPermissionProfile.js +0 -1
- package/bundle/dist/codex-protocol/v2/ResidencyRequirement.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReviewDelivery.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReviewStartParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReviewStartResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReviewTarget.js +0 -1
- package/bundle/dist/codex-protocol/v2/SandboxMode.js +0 -1
- package/bundle/dist/codex-protocol/v2/SandboxPolicy.js +0 -1
- package/bundle/dist/codex-protocol/v2/SandboxWorkspaceWrite.js +0 -1
- package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ServerRequestResolvedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/SessionMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/SessionSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillDependencies.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillErrorInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillInterface.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillMetadata.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillScope.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillSummary.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillToolDependency.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsChangedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsConfigWriteParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsConfigWriteResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsListEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/SortDirection.js +0 -1
- package/bundle/dist/codex-protocol/v2/SubagentMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/TerminalInteractionNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/TextElement.js +0 -1
- package/bundle/dist/codex-protocol/v2/TextPosition.js +0 -1
- package/bundle/dist/codex-protocol/v2/TextRange.js +0 -1
- package/bundle/dist/codex-protocol/v2/Thread.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadActiveFlag.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadArchiveParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadArchiveResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadArchivedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadClosedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadCompactStartParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadCompactStartResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadForkParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadForkResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadGoal.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadGoalClearedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadGoalStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadGoalUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadInjectItemsParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadInjectItemsResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadItem.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadLoadedListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadLoadedListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadNameUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeAudioChunk.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeClosedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeErrorNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeItemAddedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeSdpNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartTransport.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadResumeParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadResumeResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRollbackParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRollbackResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadSetNameParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadSetNameResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadShellCommandParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadShellCommandResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadSortKey.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadSourceKind.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStartParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStartResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStartSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStatusChangedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadTokenUsage.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnarchiveParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnarchiveResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnarchivedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/TokenUsageBreakdown.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolRequestUserInputAnswer.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolRequestUserInputOption.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolRequestUserInputParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolRequestUserInputQuestion.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolRequestUserInputResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolsV2.js +0 -1
- package/bundle/dist/codex-protocol/v2/Turn.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnDiffUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnEnvironmentParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnError.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnInterruptParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnInterruptResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnItemsView.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnPlanStep.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnPlanStepStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnPlanUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnStartParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnStartResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnSteerParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnSteerResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/UserInput.js +0 -1
- package/bundle/dist/codex-protocol/v2/WarningNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/WebSearchAction.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxReadiness.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxReadinessResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupMode.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsWorldWritableWarningNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/WriteStatus.js +0 -1
- package/bundle/dist/i18n/en.js +1 -2
- package/bundle/dist/i18n/ko.js +1 -2
- package/bundle/dist/i18n/sd.generated.js +54 -21
- package/bundle/dist/index.js +1 -2
- package/bundle/dist/migrations/20260410171405_create__request_logs.js +1 -2
- package/bundle/dist/migrations/20260410171406_create__tokens.js +1 -2
- package/bundle/dist/migrations/20260411120624_alter_tokens_alter2.js +1 -2
- package/bundle/dist/migrations/20260415113716_alter_tokens_add_ord.js +1 -2
- package/bundle/dist/migrations/20260415134649_alter_request_logs_alter1.js +1 -2
- package/bundle/dist/migrations/20260421223627_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260423180818_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260423182017_alter_request_logs_add2_drop1_alter1.js +1 -2
- package/bundle/dist/migrations/20260423183613_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260518145411_alter_tokens_add2_drop4_alter1.js +1 -2
- package/bundle/dist/migrations/20260520112853_alter_request_logs_add3_alter1.js +1 -2
- package/bundle/dist/migrations/20260520124755_alter_request_logs_drop1_alter1.js +1 -2
- package/bundle/dist/migrations/20260520130420_create__request_log_steps.js +1 -2
- package/bundle/dist/migrations/20260520134908_alter_request_logs_add2_alter8.js +1 -2
- package/bundle/dist/migrations/20260520134909_alter_request_log_steps_add1_alter3.js +1 -2
- package/bundle/dist/migrations/20260520141449_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260521134025_alter_request_log_steps_alter1.js +1 -2
- package/bundle/dist/migrations/20260521134026_alter_request_log_steps_foreigns.js +1 -2
- package/bundle/dist/migrations/20260522181721_alter_request_log_steps_add2_alter1.js +1 -2
- package/bundle/dist/migrations/20260630223950_alter_tokens_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260701105327_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260701105328_alter_request_log_steps_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260705140614_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260706120000_alter_request_logs_add_image_cost.js +1 -2
- package/bundle/dist/migrations/20260710090000_alter_tokens_add_weight.js +1 -2
- package/bundle/dist/migrations/20260718180824_alter_request_logs_add5_alter1.js +1 -2
- package/bundle/dist/migrations/20260718180825_alter_request_log_steps_add7_alter1.js +1 -2
- package/bundle/dist/migrations/20260722174410_alter_request_logs_alter3.js +17 -0
- package/bundle/dist/migrations/20260722174411_alter_request_log_steps_alter3.js +17 -0
- package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +255 -4
- package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.10/node_modules/@vitest/expect/dist/index.js +1507 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.10/node_modules/@vitest/pretty-format/dist/index.js +887 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/chunk-artifact.js +2756 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/index.js +8 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/utils.js +8 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.10/node_modules/@vitest/snapshot/dist/index.js +922 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.10/node_modules/@vitest/spy/dist/index.js +386 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +121 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/constants.js +51 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/diff.js +1317 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/display.js +561 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/error.js +40 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/helpers.js +272 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/offset.js +27 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/serialize.js +77 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/source-map.js +381 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/timers.js +51 -0
- package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +103 -3
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +1 -1
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +1 -1
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +1 -1
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +1 -1
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +1 -1
- package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +2 -3
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +4 -4
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +2 -2
- package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +18 -7
- package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +18 -3
- package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_2519c2e8d8013fcbc7b443879bc9da6d/node_modules/vite/dist/node/module-runner.js +1265 -0
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +6 -3
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +8 -8
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +5 -5
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +3 -3
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +46 -0
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +66 -6
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +3044 -0
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +19 -4
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/index.js +28 -0
- package/bundle/dist/server-bootstrap.js +1 -2
- package/bundle/dist/sonamu.config.js +11 -27
- package/bundle/dist/startup-migrations.js +1 -2
- package/bundle/dist/testing/fixture.js +1 -2
- package/bundle/dist/testing/global.js +6 -7
- package/bundle/dist/testing/setup-mocks.js +3 -4
- package/bundle/dist/testing/test-database-name.js +5 -8
- package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +8 -8
- package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +1 -2
- package/bundle/dist/utils/providers/anthropic/anthropic-quota.js +1 -2
- package/bundle/dist/utils/providers/anthropic/claude-session.js +5 -7
- package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +1 -2
- package/bundle/dist/utils/providers/common/credentials.js +1 -2
- package/bundle/dist/utils/providers/common/model-cost.js +3 -3
- package/bundle/dist/utils/providers/common/provider-dispatcher.js +0 -1
- package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +1 -2
- package/bundle/dist/utils/providers/common/strictifier.js +2 -2
- package/bundle/dist/utils/providers/common/token-picker.js +1 -2
- package/bundle/dist/utils/providers/common/ttft.js +1 -2
- package/bundle/dist/utils/providers/openai/codex-rpc.js +4 -2
- package/bundle/dist/utils/providers/openai/codex-worker.js +2 -2
- package/bundle/dist/utils/providers/openai/openai-constants.js +1 -2
- package/bundle/dist/utils/providers/openai/openai-dispatcher.js +103 -40
- package/bundle/dist/utils/providers/openai/openai-quota.js +1 -2
- package/bundle/dist/utils/providers/openai/openai-refresh.js +1 -2
- package/bundle/dist/utils/subset-loaders.js +1 -2
- package/bundle/src/application/monit/monit.frame.test.ts +2 -2
- package/bundle/src/application/monit/monit.frame.ts +2 -2
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +242 -8
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +97 -57
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +400 -96
- package/bundle/src/application/qgrid/qgrid.frame.ts +85 -123
- package/bundle/src/application/qgrid/qgrid.types.ts +35 -27
- package/bundle/src/application/request-log/request-log.entity.json +2 -2
- package/bundle/src/application/request-log/request-log.model.test.ts +325 -21
- package/bundle/src/application/request-log/request-log.model.ts +233 -125
- package/bundle/src/application/request-log-step/request-log-step.entity.json +2 -2
- package/bundle/src/application/sonamu.generated.http +2 -2
- package/bundle/src/application/sonamu.generated.ts +13 -13
- package/bundle/src/i18n/sd.generated.ts +83 -14
- package/bundle/src/migrations/20260722174410_alter_request_logs_alter3.ts +19 -0
- package/bundle/src/migrations/20260722174411_alter_request_log_steps_alter3.ts +19 -0
- package/bundle/src/sonamu.config.ts +5 -23
- package/bundle/src/testing/global.ts +5 -5
- package/bundle/src/testing/test-database-name.test.ts +5 -5
- package/bundle/src/testing/test-database-name.ts +9 -8
- package/bundle/src/utils/providers/anthropic/anthropic-constants.test.ts +10 -6
- package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +9 -5
- package/bundle/src/utils/providers/anthropic/claude-session.test.ts +18 -3
- package/bundle/src/utils/providers/anthropic/claude-session.ts +4 -4
- package/bundle/src/utils/providers/common/model-cost.test.ts +1 -0
- package/bundle/src/utils/providers/common/model-cost.ts +1 -0
- package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +440 -0
- package/bundle/src/utils/providers/openai/openai-dispatcher.ts +143 -45
- package/bundle/web-dist/client/assets/{index-CmuPjbCl.js → index-ioEghlNo.js} +3 -3
- package/bundle/web-dist/client/assets/logs-TGA3XE4C.js +1 -0
- package/bundle/web-dist/client/assets/{monit-B5Edhvy-.js → monit-DLynJGca.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-UPWScORY.js → routes-DugjmKS_.js} +1 -1
- package/bundle/web-dist/client/assets/{sd.generated-DYuKzBY6.js → sd.generated-DbBC73_z.js} +1 -1
- package/bundle/web-dist/client/assets/{services.generated-D_SkWOo-.js → services.generated-BWyAypSh.js} +1 -1
- package/bundle/web-dist/client/assets/{show-pRp-eZIK.js → show-DSswR7Cy.js} +2 -2
- package/bundle/web-dist/client/assets/{tokens-DJlttxCM.js → tokens-C5djVO__.js} +1 -1
- package/bundle/web-dist/client/assets/{use-update-token-mutation-CpFGLWUl.js → use-update-token-mutation-DeDBiZiM.js} +1 -1
- package/bundle/web-dist/client/index.html +2 -2
- package/bundle/web-dist/server/assets/{lazyRouteComponent-Cu6IkL8A.js → lazyRouteComponent-BCJr868T.js} +1 -1
- package/bundle/web-dist/server/assets/{logs-Dx2knN2T.js → logs-33YNafdW.js} +32 -11
- package/bundle/web-dist/server/assets/{monit-DU6PLatf.js → monit--9mVsjNU.js} +2 -2
- package/bundle/web-dist/server/assets/{routes-CTco1oJZ.js → routes-BK3Xh1UB.js} +3 -3
- package/bundle/web-dist/server/assets/{sd.generated-qzuRe35X.js → sd.generated-C3gcvRcU.js} +1 -0
- package/bundle/web-dist/server/assets/{services.generated-C8q1M41a.js → services.generated-B2_Auwvk.js} +1 -1
- package/bundle/web-dist/server/assets/{show-B3q8_GDh.js → show-Dxxxe608.js} +15 -9
- package/bundle/web-dist/server/assets/{tokens-Bvjn15h9.js → tokens-BWPVvdfi.js} +3 -3
- package/bundle/web-dist/server/assets/{use-update-token-mutation-BlZo6swF.js → use-update-token-mutation-CNBgTysy.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +23 -23
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +18 -12
- package/package.json +6 -6
- package/skills/qgrid/SKILL.md +4 -0
- package/skills/qgrid/references/ai-sdk-provider-contract.md +28 -2
- package/skills/qgrid/references/anthropic-claude-code-runtime.md +5 -4
- package/skills/qgrid/references/cli-env-and-server-boot.md +20 -8
- package/skills/qgrid/references/decision-rationale.md +4 -0
- package/skills/qgrid/references/docs-workflow.md +10 -0
- package/skills/qgrid/references/openai-codex-runtime.md +11 -3
- package/skills/qgrid/references/provider-runtime-differences.md +3 -3
- package/skills/qgrid/references/request-log-run-lifecycle.md +46 -28
- package/skills/qgrid/references/sonamu-api-web-flow.md +4 -0
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +6 -0
- package/skills/qgrid/references/tool-calling-and-multiturn.md +8 -7
- package/skills/qgrid/references/verification-and-debugging.md +1 -1
- package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.2/node_modules/@vitest/expect/dist/index.js +0 -1484
- package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.2/node_modules/@vitest/pretty-format/dist/index.js +0 -887
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/chunk-artifact.js +0 -2746
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/index.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/utils.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.2/node_modules/@vitest/snapshot/dist/index.js +0 -662
- package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.2/node_modules/@vitest/spy/dist/index.js +0 -386
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +0 -82
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/constants.js +0 -48
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/diff.js +0 -1307
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/display.js +0 -558
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/error.js +0 -33
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/helpers.js +0 -226
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/offset.js +0 -27
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/serialize.js +0 -77
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/source-map.js +0 -374
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/timers.js +0 -37
- package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.9.2_@emnapi_runtime@1.9.2_@types_node@25.0.7_esbuild@0.27.4_jiti@2.6.1_sass@1.98.0_tsx@4.21.0/node_modules/vite/dist/node/module-runner.js +0 -426
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496/node_modules/vitest/dist/chunks/index.DOa3dzoN.js +0 -16
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496/node_modules/vitest/dist/chunks/test.p_J6dB8a.js +0 -2910
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496/node_modules/vitest/dist/index.js +0 -28
- package/bundle/web-dist/client/assets/logs-cXOsDli3.js +0 -1
|
@@ -0,0 +1,887 @@
|
|
|
1
|
+
import y from "../../../../../tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js";
|
|
2
|
+
//#region ../../node_modules/.pnpm/@vitest+pretty-format@4.1.10/node_modules/@vitest/pretty-format/dist/index.js
|
|
3
|
+
function _mergeNamespaces(n, m) {
|
|
4
|
+
m.forEach(function(e) {
|
|
5
|
+
e && typeof e !== "string" && !Array.isArray(e) && Object.keys(e).forEach(function(k) {
|
|
6
|
+
if (k !== "default" && !(k in n)) {
|
|
7
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
8
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function() {
|
|
11
|
+
return e[k];
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
return Object.freeze(n);
|
|
18
|
+
}
|
|
19
|
+
function getKeysOfEnumerableProperties(object, compareKeys) {
|
|
20
|
+
const rawKeys = Object.keys(object);
|
|
21
|
+
const keys = compareKeys === null ? rawKeys : rawKeys.sort(compareKeys);
|
|
22
|
+
if (Object.getOwnPropertySymbols) {
|
|
23
|
+
for (const symbol of Object.getOwnPropertySymbols(object)) if (Object.getOwnPropertyDescriptor(object, symbol).enumerable) keys.push(symbol);
|
|
24
|
+
}
|
|
25
|
+
return keys;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Return entries (for example, of a map)
|
|
29
|
+
* with spacing, indentation, and comma
|
|
30
|
+
* without surrounding punctuation (for example, braces)
|
|
31
|
+
*/
|
|
32
|
+
function printIteratorEntries(iterator, config, indentation, depth, refs, printer, separator = ": ") {
|
|
33
|
+
let result = "";
|
|
34
|
+
let width = 0;
|
|
35
|
+
let current = iterator.next();
|
|
36
|
+
if (!current.done) {
|
|
37
|
+
result += config.spacingOuter;
|
|
38
|
+
const indentationNext = indentation + config.indent;
|
|
39
|
+
while (!current.done) {
|
|
40
|
+
result += indentationNext;
|
|
41
|
+
if (width++ === config.maxWidth) {
|
|
42
|
+
result += "…";
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
const name = printer(current.value[0], config, indentationNext, depth, refs);
|
|
46
|
+
const value = printer(current.value[1], config, indentationNext, depth, refs);
|
|
47
|
+
result += name + separator + value;
|
|
48
|
+
current = iterator.next();
|
|
49
|
+
if (!current.done) result += `,${config.spacingInner}`;
|
|
50
|
+
else if (!config.min) result += ",";
|
|
51
|
+
}
|
|
52
|
+
result += config.spacingOuter + indentation;
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Return values (for example, of a set)
|
|
58
|
+
* with spacing, indentation, and comma
|
|
59
|
+
* without surrounding punctuation (braces or brackets)
|
|
60
|
+
*/
|
|
61
|
+
function printIteratorValues(iterator, config, indentation, depth, refs, printer) {
|
|
62
|
+
let result = "";
|
|
63
|
+
let width = 0;
|
|
64
|
+
let current = iterator.next();
|
|
65
|
+
if (!current.done) {
|
|
66
|
+
result += config.spacingOuter;
|
|
67
|
+
const indentationNext = indentation + config.indent;
|
|
68
|
+
while (!current.done) {
|
|
69
|
+
result += indentationNext;
|
|
70
|
+
if (width++ === config.maxWidth) {
|
|
71
|
+
result += "…";
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
result += printer(current.value, config, indentationNext, depth, refs);
|
|
75
|
+
current = iterator.next();
|
|
76
|
+
if (!current.done) result += `,${config.spacingInner}`;
|
|
77
|
+
else if (!config.min) result += ",";
|
|
78
|
+
}
|
|
79
|
+
result += config.spacingOuter + indentation;
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Return items (for example, of an array)
|
|
85
|
+
* with spacing, indentation, and comma
|
|
86
|
+
* without surrounding punctuation (for example, brackets)
|
|
87
|
+
*/
|
|
88
|
+
function printListItems(list, config, indentation, depth, refs, printer) {
|
|
89
|
+
let result = "";
|
|
90
|
+
list = list instanceof ArrayBuffer ? new DataView(list) : list;
|
|
91
|
+
const isDataView = (l) => l instanceof DataView;
|
|
92
|
+
const length = isDataView(list) ? list.byteLength : list.length;
|
|
93
|
+
if (length > 0) {
|
|
94
|
+
result += config.spacingOuter;
|
|
95
|
+
const indentationNext = indentation + config.indent;
|
|
96
|
+
for (let i = 0; i < length; i++) {
|
|
97
|
+
result += indentationNext;
|
|
98
|
+
if (i === config.maxWidth) {
|
|
99
|
+
result += "…";
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
if (isDataView(list) || i in list) result += printer(isDataView(list) ? list.getInt8(i) : list[i], config, indentationNext, depth, refs);
|
|
103
|
+
if (i < length - 1) result += `,${config.spacingInner}`;
|
|
104
|
+
else if (!config.min) result += ",";
|
|
105
|
+
}
|
|
106
|
+
result += config.spacingOuter + indentation;
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Return properties of an object
|
|
112
|
+
* with spacing, indentation, and comma
|
|
113
|
+
* without surrounding punctuation (for example, braces)
|
|
114
|
+
*/
|
|
115
|
+
function printObjectProperties(val, config, indentation, depth, refs, printer) {
|
|
116
|
+
let result = "";
|
|
117
|
+
const keys = getKeysOfEnumerableProperties(val, config.compareKeys);
|
|
118
|
+
if (keys.length > 0) {
|
|
119
|
+
result += config.spacingOuter;
|
|
120
|
+
const indentationNext = indentation + config.indent;
|
|
121
|
+
for (let i = 0; i < keys.length; i++) {
|
|
122
|
+
const key = keys[i];
|
|
123
|
+
const name = printer(key, config, indentationNext, depth, refs);
|
|
124
|
+
const value = printer(val[key], config, indentationNext, depth, refs);
|
|
125
|
+
result += `${indentationNext + name}: ${value}`;
|
|
126
|
+
if (i < keys.length - 1) result += `,${config.spacingInner}`;
|
|
127
|
+
else if (!config.min) result += ",";
|
|
128
|
+
}
|
|
129
|
+
result += config.spacingOuter + indentation;
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
const asymmetricMatcher = typeof Symbol === "function" && Symbol.for ? Symbol.for("jest.asymmetricMatcher") : 1267621;
|
|
134
|
+
const SPACE$2 = " ";
|
|
135
|
+
const serialize$5 = (val, config, indentation, depth, refs, printer) => {
|
|
136
|
+
const stringedValue = val.toString();
|
|
137
|
+
if (stringedValue === "ArrayContaining" || stringedValue === "ArrayNotContaining") {
|
|
138
|
+
if (++depth > config.maxDepth) return `[${stringedValue}]`;
|
|
139
|
+
return `${stringedValue + SPACE$2}[${printListItems(val.sample, config, indentation, depth, refs, printer)}]`;
|
|
140
|
+
}
|
|
141
|
+
if (stringedValue === "ObjectContaining" || stringedValue === "ObjectNotContaining") {
|
|
142
|
+
if (++depth > config.maxDepth) return `[${stringedValue}]`;
|
|
143
|
+
return `${stringedValue + SPACE$2}{${printObjectProperties(val.sample, config, indentation, depth, refs, printer)}}`;
|
|
144
|
+
}
|
|
145
|
+
if (stringedValue === "StringMatching" || stringedValue === "StringNotMatching") return stringedValue + SPACE$2 + printer(val.sample, config, indentation, depth, refs);
|
|
146
|
+
if (stringedValue === "StringContaining" || stringedValue === "StringNotContaining") return stringedValue + SPACE$2 + printer(val.sample, config, indentation, depth, refs);
|
|
147
|
+
if (typeof val.toAsymmetricMatcher !== "function") throw new TypeError(`Asymmetric matcher ${val.constructor.name} does not implement toAsymmetricMatcher()`);
|
|
148
|
+
return val.toAsymmetricMatcher();
|
|
149
|
+
};
|
|
150
|
+
const test$5 = (val) => val && val.$$typeof === asymmetricMatcher;
|
|
151
|
+
const plugin$5 = {
|
|
152
|
+
serialize: serialize$5,
|
|
153
|
+
test: test$5
|
|
154
|
+
};
|
|
155
|
+
const SPACE$1 = " ";
|
|
156
|
+
const OBJECT_NAMES = /* @__PURE__ */ new Set(["DOMStringMap", "NamedNodeMap"]);
|
|
157
|
+
const ARRAY_REGEXP = /^(?:HTML\w*Collection|NodeList)$/;
|
|
158
|
+
function testName(name) {
|
|
159
|
+
return OBJECT_NAMES.has(name) || ARRAY_REGEXP.test(name);
|
|
160
|
+
}
|
|
161
|
+
const test$4 = (val) => val && val.constructor && !!val.constructor.name && testName(val.constructor.name);
|
|
162
|
+
function isNamedNodeMap(collection) {
|
|
163
|
+
return collection.constructor.name === "NamedNodeMap";
|
|
164
|
+
}
|
|
165
|
+
const serialize$4 = (collection, config, indentation, depth, refs, printer) => {
|
|
166
|
+
const name = collection.constructor.name;
|
|
167
|
+
if (++depth > config.maxDepth) return `[${name}]`;
|
|
168
|
+
return (config.min ? "" : name + SPACE$1) + (OBJECT_NAMES.has(name) ? `{${printObjectProperties(isNamedNodeMap(collection) ? [...collection].reduce((props, attribute) => {
|
|
169
|
+
props[attribute.name] = attribute.value;
|
|
170
|
+
return props;
|
|
171
|
+
}, {}) : { ...collection }, config, indentation, depth, refs, printer)}}` : `[${printListItems([...collection], config, indentation, depth, refs, printer)}]`);
|
|
172
|
+
};
|
|
173
|
+
const plugin$4 = {
|
|
174
|
+
serialize: serialize$4,
|
|
175
|
+
test: test$4
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
179
|
+
*
|
|
180
|
+
* This source code is licensed under the MIT license found in the
|
|
181
|
+
* LICENSE file in the root directory of this source tree.
|
|
182
|
+
*/
|
|
183
|
+
function escapeHTML(str) {
|
|
184
|
+
return str.replaceAll("<", "<").replaceAll(">", ">");
|
|
185
|
+
}
|
|
186
|
+
function printProps(keys, props, config, indentation, depth, refs, printer) {
|
|
187
|
+
const indentationNext = indentation + config.indent;
|
|
188
|
+
const colors = config.colors;
|
|
189
|
+
return keys.map((key) => {
|
|
190
|
+
const value = props[key];
|
|
191
|
+
if (typeof value === "string" && value[0] === "_" && value.startsWith("__vitest_") && value.match(/__vitest_\d+__/)) return "";
|
|
192
|
+
let printed = printer(value, config, indentationNext, depth, refs);
|
|
193
|
+
if (typeof value !== "string") {
|
|
194
|
+
if (printed.includes("\n")) printed = config.spacingOuter + indentationNext + printed + config.spacingOuter + indentation;
|
|
195
|
+
printed = `{${printed}}`;
|
|
196
|
+
}
|
|
197
|
+
return `${config.spacingInner + indentation + colors.prop.open + key + colors.prop.close}=${colors.value.open}${printed}${colors.value.close}`;
|
|
198
|
+
}).join("");
|
|
199
|
+
}
|
|
200
|
+
function printChildren(children, config, indentation, depth, refs, printer) {
|
|
201
|
+
return children.map((child) => config.spacingOuter + indentation + (typeof child === "string" ? printText(child, config) : printer(child, config, indentation, depth, refs))).join("");
|
|
202
|
+
}
|
|
203
|
+
function printShadowRoot(children, config, indentation, depth, refs, printer) {
|
|
204
|
+
if (config.printShadowRoot === false) return "";
|
|
205
|
+
return [`${config.spacingOuter + indentation}#shadow-root`, printChildren(children, config, indentation + config.indent, depth, refs, printer)].join("");
|
|
206
|
+
}
|
|
207
|
+
function printText(text, config) {
|
|
208
|
+
const contentColor = config.colors.content;
|
|
209
|
+
return contentColor.open + escapeHTML(text) + contentColor.close;
|
|
210
|
+
}
|
|
211
|
+
function printComment(comment, config) {
|
|
212
|
+
const commentColor = config.colors.comment;
|
|
213
|
+
return `${commentColor.open}<!--${escapeHTML(comment)}-->${commentColor.close}`;
|
|
214
|
+
}
|
|
215
|
+
function printElement(type, printedProps, printedChildren, config, indentation) {
|
|
216
|
+
const tagColor = config.colors.tag;
|
|
217
|
+
return `${tagColor.open}<${type}${printedProps && tagColor.close + printedProps + config.spacingOuter + indentation + tagColor.open}${printedChildren ? `>${tagColor.close}${printedChildren}${config.spacingOuter}${indentation}${tagColor.open}</${type}` : `${printedProps && !config.min ? "" : " "}/`}>${tagColor.close}`;
|
|
218
|
+
}
|
|
219
|
+
function printElementAsLeaf(type, config) {
|
|
220
|
+
const tagColor = config.colors.tag;
|
|
221
|
+
return `${tagColor.open}<${type}${tagColor.close} …${tagColor.open} />${tagColor.close}`;
|
|
222
|
+
}
|
|
223
|
+
const ELEMENT_NODE = 1;
|
|
224
|
+
const TEXT_NODE = 3;
|
|
225
|
+
const COMMENT_NODE = 8;
|
|
226
|
+
const FRAGMENT_NODE = 11;
|
|
227
|
+
const ELEMENT_REGEXP = /^(?:(?:HTML|SVG)\w*)?Element$/;
|
|
228
|
+
function testHasAttribute(val) {
|
|
229
|
+
try {
|
|
230
|
+
return typeof val.hasAttribute === "function" && val.hasAttribute("is");
|
|
231
|
+
} catch {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function testNode(val) {
|
|
236
|
+
const constructorName = val.constructor.name;
|
|
237
|
+
const { nodeType, tagName } = val;
|
|
238
|
+
const isCustomElement = typeof tagName === "string" && tagName.includes("-") || testHasAttribute(val);
|
|
239
|
+
return nodeType === ELEMENT_NODE && (ELEMENT_REGEXP.test(constructorName) || isCustomElement) || nodeType === TEXT_NODE && constructorName === "Text" || nodeType === COMMENT_NODE && constructorName === "Comment" || nodeType === FRAGMENT_NODE && constructorName === "DocumentFragment";
|
|
240
|
+
}
|
|
241
|
+
const test$3 = (val) => val?.constructor?.name && testNode(val);
|
|
242
|
+
function nodeIsText(node) {
|
|
243
|
+
return node.nodeType === TEXT_NODE;
|
|
244
|
+
}
|
|
245
|
+
function nodeIsComment(node) {
|
|
246
|
+
return node.nodeType === COMMENT_NODE;
|
|
247
|
+
}
|
|
248
|
+
function nodeIsFragment(node) {
|
|
249
|
+
return node.nodeType === FRAGMENT_NODE;
|
|
250
|
+
}
|
|
251
|
+
function filterChildren(children, filterNode) {
|
|
252
|
+
let filtered = children.filter((node) => {
|
|
253
|
+
if (node.nodeType === TEXT_NODE) return (node.data || "").trim().length > 0;
|
|
254
|
+
return true;
|
|
255
|
+
});
|
|
256
|
+
if (filterNode) filtered = filtered.filter(filterNode);
|
|
257
|
+
return filtered;
|
|
258
|
+
}
|
|
259
|
+
function serializeDOM(node, config, indentation, depth, refs, printer, filterNode) {
|
|
260
|
+
if (nodeIsText(node)) return printText(node.data, config);
|
|
261
|
+
if (nodeIsComment(node)) return printComment(node.data, config);
|
|
262
|
+
const type = nodeIsFragment(node) ? "DocumentFragment" : node.tagName.toLowerCase();
|
|
263
|
+
if (++depth > config.maxDepth) return printElementAsLeaf(type, config);
|
|
264
|
+
const children = Array.prototype.slice.call(node.childNodes || node.children);
|
|
265
|
+
const shadowChildren = nodeIsFragment(node) || !node.shadowRoot ? [] : Array.prototype.slice.call(node.shadowRoot.children);
|
|
266
|
+
const resolvedChildren = filterNode ? filterChildren(children, filterNode) : children;
|
|
267
|
+
const resolvedShadowChildren = filterNode ? filterChildren(shadowChildren, filterNode) : shadowChildren;
|
|
268
|
+
return printElement(type, printProps(nodeIsFragment(node) ? [] : Array.from(node.attributes, (attr) => attr.name).sort(), nodeIsFragment(node) ? {} : [...node.attributes].reduce((props, attribute) => {
|
|
269
|
+
props[attribute.name] = attribute.value;
|
|
270
|
+
return props;
|
|
271
|
+
}, {}), config, indentation + config.indent, depth, refs, printer), (resolvedShadowChildren.length > 0 ? printShadowRoot(resolvedShadowChildren, config, indentation + config.indent, depth, refs, printer) : "") + printChildren(resolvedChildren, config, indentation + config.indent, depth, refs, printer), config, indentation);
|
|
272
|
+
}
|
|
273
|
+
const serialize$3 = (node, config, indentation, depth, refs, printer) => serializeDOM(node, config, indentation, depth, refs, printer);
|
|
274
|
+
function createDOMElementFilter(filterNode) {
|
|
275
|
+
return {
|
|
276
|
+
test: test$3,
|
|
277
|
+
serialize: (node, config, indentation, depth, refs, printer) => serializeDOM(node, config, indentation, depth, refs, printer, filterNode)
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
const plugin$3 = {
|
|
281
|
+
serialize: serialize$3,
|
|
282
|
+
test: test$3
|
|
283
|
+
};
|
|
284
|
+
const IS_ITERABLE_SENTINEL = "@@__IMMUTABLE_ITERABLE__@@";
|
|
285
|
+
const IS_LIST_SENTINEL = "@@__IMMUTABLE_LIST__@@";
|
|
286
|
+
const IS_KEYED_SENTINEL = "@@__IMMUTABLE_KEYED__@@";
|
|
287
|
+
const IS_MAP_SENTINEL = "@@__IMMUTABLE_MAP__@@";
|
|
288
|
+
const IS_ORDERED_SENTINEL = "@@__IMMUTABLE_ORDERED__@@";
|
|
289
|
+
const IS_RECORD_SENTINEL = "@@__IMMUTABLE_RECORD__@@";
|
|
290
|
+
const IS_SEQ_SENTINEL = "@@__IMMUTABLE_SEQ__@@";
|
|
291
|
+
const IS_SET_SENTINEL = "@@__IMMUTABLE_SET__@@";
|
|
292
|
+
const IS_STACK_SENTINEL = "@@__IMMUTABLE_STACK__@@";
|
|
293
|
+
const getImmutableName = (name) => `Immutable.${name}`;
|
|
294
|
+
const printAsLeaf = (name) => `[${name}]`;
|
|
295
|
+
const SPACE = " ";
|
|
296
|
+
const LAZY = "…";
|
|
297
|
+
function printImmutableEntries(val, config, indentation, depth, refs, printer, type) {
|
|
298
|
+
return ++depth > config.maxDepth ? printAsLeaf(getImmutableName(type)) : `${getImmutableName(type) + SPACE}{${printIteratorEntries(val.entries(), config, indentation, depth, refs, printer)}}`;
|
|
299
|
+
}
|
|
300
|
+
function getRecordEntries(val) {
|
|
301
|
+
let i = 0;
|
|
302
|
+
return { next() {
|
|
303
|
+
if (i < val._keys.length) {
|
|
304
|
+
const key = val._keys[i++];
|
|
305
|
+
return {
|
|
306
|
+
done: false,
|
|
307
|
+
value: [key, val.get(key)]
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
return {
|
|
311
|
+
done: true,
|
|
312
|
+
value: void 0
|
|
313
|
+
};
|
|
314
|
+
} };
|
|
315
|
+
}
|
|
316
|
+
function printImmutableRecord(val, config, indentation, depth, refs, printer) {
|
|
317
|
+
const name = getImmutableName(val._name || "Record");
|
|
318
|
+
return ++depth > config.maxDepth ? printAsLeaf(name) : `${name + SPACE}{${printIteratorEntries(getRecordEntries(val), config, indentation, depth, refs, printer)}}`;
|
|
319
|
+
}
|
|
320
|
+
function printImmutableSeq(val, config, indentation, depth, refs, printer) {
|
|
321
|
+
const name = getImmutableName("Seq");
|
|
322
|
+
if (++depth > config.maxDepth) return printAsLeaf(name);
|
|
323
|
+
if (val[IS_KEYED_SENTINEL]) return `${name + SPACE}{${val._iter || val._object ? printIteratorEntries(val.entries(), config, indentation, depth, refs, printer) : LAZY}}`;
|
|
324
|
+
return `${name + SPACE}[${val._iter || val._array || val._collection || val._iterable ? printIteratorValues(val.values(), config, indentation, depth, refs, printer) : LAZY}]`;
|
|
325
|
+
}
|
|
326
|
+
function printImmutableValues(val, config, indentation, depth, refs, printer, type) {
|
|
327
|
+
return ++depth > config.maxDepth ? printAsLeaf(getImmutableName(type)) : `${getImmutableName(type) + SPACE}[${printIteratorValues(val.values(), config, indentation, depth, refs, printer)}]`;
|
|
328
|
+
}
|
|
329
|
+
const serialize$2 = (val, config, indentation, depth, refs, printer) => {
|
|
330
|
+
if (val[IS_MAP_SENTINEL]) return printImmutableEntries(val, config, indentation, depth, refs, printer, val[IS_ORDERED_SENTINEL] ? "OrderedMap" : "Map");
|
|
331
|
+
if (val[IS_LIST_SENTINEL]) return printImmutableValues(val, config, indentation, depth, refs, printer, "List");
|
|
332
|
+
if (val[IS_SET_SENTINEL]) return printImmutableValues(val, config, indentation, depth, refs, printer, val[IS_ORDERED_SENTINEL] ? "OrderedSet" : "Set");
|
|
333
|
+
if (val[IS_STACK_SENTINEL]) return printImmutableValues(val, config, indentation, depth, refs, printer, "Stack");
|
|
334
|
+
if (val[IS_SEQ_SENTINEL]) return printImmutableSeq(val, config, indentation, depth, refs, printer);
|
|
335
|
+
return printImmutableRecord(val, config, indentation, depth, refs, printer);
|
|
336
|
+
};
|
|
337
|
+
const test$2 = (val) => val && (val[IS_ITERABLE_SENTINEL] === true || val[IS_RECORD_SENTINEL] === true);
|
|
338
|
+
const plugin$2 = {
|
|
339
|
+
serialize: serialize$2,
|
|
340
|
+
test: test$2
|
|
341
|
+
};
|
|
342
|
+
function getDefaultExportFromCjs(x) {
|
|
343
|
+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
|
|
344
|
+
}
|
|
345
|
+
var reactIs$1 = { exports: {} };
|
|
346
|
+
var reactIs_production = {};
|
|
347
|
+
/**
|
|
348
|
+
* @license React
|
|
349
|
+
* react-is.production.js
|
|
350
|
+
*
|
|
351
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
352
|
+
*
|
|
353
|
+
* This source code is licensed under the MIT license found in the
|
|
354
|
+
* LICENSE file in the root directory of this source tree.
|
|
355
|
+
*/
|
|
356
|
+
var hasRequiredReactIs_production;
|
|
357
|
+
function requireReactIs_production() {
|
|
358
|
+
if (hasRequiredReactIs_production) return reactIs_production;
|
|
359
|
+
hasRequiredReactIs_production = 1;
|
|
360
|
+
var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler"), REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
|
|
361
|
+
function typeOf(object) {
|
|
362
|
+
if ("object" === typeof object && null !== object) {
|
|
363
|
+
var $$typeof = object.$$typeof;
|
|
364
|
+
switch ($$typeof) {
|
|
365
|
+
case REACT_ELEMENT_TYPE: switch (object = object.type, object) {
|
|
366
|
+
case REACT_FRAGMENT_TYPE:
|
|
367
|
+
case REACT_PROFILER_TYPE:
|
|
368
|
+
case REACT_STRICT_MODE_TYPE:
|
|
369
|
+
case REACT_SUSPENSE_TYPE:
|
|
370
|
+
case REACT_SUSPENSE_LIST_TYPE:
|
|
371
|
+
case REACT_VIEW_TRANSITION_TYPE: return object;
|
|
372
|
+
default: switch (object = object && object.$$typeof, object) {
|
|
373
|
+
case REACT_CONTEXT_TYPE:
|
|
374
|
+
case REACT_FORWARD_REF_TYPE:
|
|
375
|
+
case REACT_LAZY_TYPE:
|
|
376
|
+
case REACT_MEMO_TYPE: return object;
|
|
377
|
+
case REACT_CONSUMER_TYPE: return object;
|
|
378
|
+
default: return $$typeof;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
case REACT_PORTAL_TYPE: return $$typeof;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
reactIs_production.ContextConsumer = REACT_CONSUMER_TYPE;
|
|
386
|
+
reactIs_production.ContextProvider = REACT_CONTEXT_TYPE;
|
|
387
|
+
reactIs_production.Element = REACT_ELEMENT_TYPE;
|
|
388
|
+
reactIs_production.ForwardRef = REACT_FORWARD_REF_TYPE;
|
|
389
|
+
reactIs_production.Fragment = REACT_FRAGMENT_TYPE;
|
|
390
|
+
reactIs_production.Lazy = REACT_LAZY_TYPE;
|
|
391
|
+
reactIs_production.Memo = REACT_MEMO_TYPE;
|
|
392
|
+
reactIs_production.Portal = REACT_PORTAL_TYPE;
|
|
393
|
+
reactIs_production.Profiler = REACT_PROFILER_TYPE;
|
|
394
|
+
reactIs_production.StrictMode = REACT_STRICT_MODE_TYPE;
|
|
395
|
+
reactIs_production.Suspense = REACT_SUSPENSE_TYPE;
|
|
396
|
+
reactIs_production.SuspenseList = REACT_SUSPENSE_LIST_TYPE;
|
|
397
|
+
reactIs_production.isContextConsumer = function(object) {
|
|
398
|
+
return typeOf(object) === REACT_CONSUMER_TYPE;
|
|
399
|
+
};
|
|
400
|
+
reactIs_production.isContextProvider = function(object) {
|
|
401
|
+
return typeOf(object) === REACT_CONTEXT_TYPE;
|
|
402
|
+
};
|
|
403
|
+
reactIs_production.isElement = function(object) {
|
|
404
|
+
return "object" === typeof object && null !== object && object.$$typeof === REACT_ELEMENT_TYPE;
|
|
405
|
+
};
|
|
406
|
+
reactIs_production.isForwardRef = function(object) {
|
|
407
|
+
return typeOf(object) === REACT_FORWARD_REF_TYPE;
|
|
408
|
+
};
|
|
409
|
+
reactIs_production.isFragment = function(object) {
|
|
410
|
+
return typeOf(object) === REACT_FRAGMENT_TYPE;
|
|
411
|
+
};
|
|
412
|
+
reactIs_production.isLazy = function(object) {
|
|
413
|
+
return typeOf(object) === REACT_LAZY_TYPE;
|
|
414
|
+
};
|
|
415
|
+
reactIs_production.isMemo = function(object) {
|
|
416
|
+
return typeOf(object) === REACT_MEMO_TYPE;
|
|
417
|
+
};
|
|
418
|
+
reactIs_production.isPortal = function(object) {
|
|
419
|
+
return typeOf(object) === REACT_PORTAL_TYPE;
|
|
420
|
+
};
|
|
421
|
+
reactIs_production.isProfiler = function(object) {
|
|
422
|
+
return typeOf(object) === REACT_PROFILER_TYPE;
|
|
423
|
+
};
|
|
424
|
+
reactIs_production.isStrictMode = function(object) {
|
|
425
|
+
return typeOf(object) === REACT_STRICT_MODE_TYPE;
|
|
426
|
+
};
|
|
427
|
+
reactIs_production.isSuspense = function(object) {
|
|
428
|
+
return typeOf(object) === REACT_SUSPENSE_TYPE;
|
|
429
|
+
};
|
|
430
|
+
reactIs_production.isSuspenseList = function(object) {
|
|
431
|
+
return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;
|
|
432
|
+
};
|
|
433
|
+
reactIs_production.isValidElementType = function(type) {
|
|
434
|
+
return "string" === typeof type || "function" === typeof type || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || "object" === typeof type && null !== type && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE || void 0 !== type.getModuleId) ? true : false;
|
|
435
|
+
};
|
|
436
|
+
reactIs_production.typeOf = typeOf;
|
|
437
|
+
return reactIs_production;
|
|
438
|
+
}
|
|
439
|
+
var hasRequiredReactIs$1;
|
|
440
|
+
function requireReactIs$1() {
|
|
441
|
+
if (hasRequiredReactIs$1) return reactIs$1.exports;
|
|
442
|
+
hasRequiredReactIs$1 = 1;
|
|
443
|
+
reactIs$1.exports = requireReactIs_production();
|
|
444
|
+
return reactIs$1.exports;
|
|
445
|
+
}
|
|
446
|
+
var reactIsExports$1 = requireReactIs$1();
|
|
447
|
+
var ReactIs19 = /*#__PURE__*/ _mergeNamespaces({
|
|
448
|
+
__proto__: null,
|
|
449
|
+
default: /* @__PURE__ */ getDefaultExportFromCjs(reactIsExports$1)
|
|
450
|
+
}, [reactIsExports$1]);
|
|
451
|
+
var reactIs = { exports: {} };
|
|
452
|
+
var reactIs_production_min = {};
|
|
453
|
+
/**
|
|
454
|
+
* @license React
|
|
455
|
+
* react-is.production.min.js
|
|
456
|
+
*
|
|
457
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
458
|
+
*
|
|
459
|
+
* This source code is licensed under the MIT license found in the
|
|
460
|
+
* LICENSE file in the root directory of this source tree.
|
|
461
|
+
*/
|
|
462
|
+
var hasRequiredReactIs_production_min;
|
|
463
|
+
function requireReactIs_production_min() {
|
|
464
|
+
if (hasRequiredReactIs_production_min) return reactIs_production_min;
|
|
465
|
+
hasRequiredReactIs_production_min = 1;
|
|
466
|
+
var b = Symbol.for("react.element"), c = Symbol.for("react.portal"), d = Symbol.for("react.fragment"), e = Symbol.for("react.strict_mode"), f = Symbol.for("react.profiler"), g = Symbol.for("react.provider"), h = Symbol.for("react.context"), k = Symbol.for("react.server_context"), l = Symbol.for("react.forward_ref"), m = Symbol.for("react.suspense"), n = Symbol.for("react.suspense_list"), p = Symbol.for("react.memo"), q = Symbol.for("react.lazy"), t = Symbol.for("react.offscreen"), u = Symbol.for("react.module.reference");
|
|
467
|
+
function v(a) {
|
|
468
|
+
if ("object" === typeof a && null !== a) {
|
|
469
|
+
var r = a.$$typeof;
|
|
470
|
+
switch (r) {
|
|
471
|
+
case b: switch (a = a.type, a) {
|
|
472
|
+
case d:
|
|
473
|
+
case f:
|
|
474
|
+
case e:
|
|
475
|
+
case m:
|
|
476
|
+
case n: return a;
|
|
477
|
+
default: switch (a = a && a.$$typeof, a) {
|
|
478
|
+
case k:
|
|
479
|
+
case h:
|
|
480
|
+
case l:
|
|
481
|
+
case q:
|
|
482
|
+
case p:
|
|
483
|
+
case g: return a;
|
|
484
|
+
default: return r;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
case c: return r;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
reactIs_production_min.ContextConsumer = h;
|
|
492
|
+
reactIs_production_min.ContextProvider = g;
|
|
493
|
+
reactIs_production_min.Element = b;
|
|
494
|
+
reactIs_production_min.ForwardRef = l;
|
|
495
|
+
reactIs_production_min.Fragment = d;
|
|
496
|
+
reactIs_production_min.Lazy = q;
|
|
497
|
+
reactIs_production_min.Memo = p;
|
|
498
|
+
reactIs_production_min.Portal = c;
|
|
499
|
+
reactIs_production_min.Profiler = f;
|
|
500
|
+
reactIs_production_min.StrictMode = e;
|
|
501
|
+
reactIs_production_min.Suspense = m;
|
|
502
|
+
reactIs_production_min.SuspenseList = n;
|
|
503
|
+
reactIs_production_min.isAsyncMode = function() {
|
|
504
|
+
return false;
|
|
505
|
+
};
|
|
506
|
+
reactIs_production_min.isConcurrentMode = function() {
|
|
507
|
+
return false;
|
|
508
|
+
};
|
|
509
|
+
reactIs_production_min.isContextConsumer = function(a) {
|
|
510
|
+
return v(a) === h;
|
|
511
|
+
};
|
|
512
|
+
reactIs_production_min.isContextProvider = function(a) {
|
|
513
|
+
return v(a) === g;
|
|
514
|
+
};
|
|
515
|
+
reactIs_production_min.isElement = function(a) {
|
|
516
|
+
return "object" === typeof a && null !== a && a.$$typeof === b;
|
|
517
|
+
};
|
|
518
|
+
reactIs_production_min.isForwardRef = function(a) {
|
|
519
|
+
return v(a) === l;
|
|
520
|
+
};
|
|
521
|
+
reactIs_production_min.isFragment = function(a) {
|
|
522
|
+
return v(a) === d;
|
|
523
|
+
};
|
|
524
|
+
reactIs_production_min.isLazy = function(a) {
|
|
525
|
+
return v(a) === q;
|
|
526
|
+
};
|
|
527
|
+
reactIs_production_min.isMemo = function(a) {
|
|
528
|
+
return v(a) === p;
|
|
529
|
+
};
|
|
530
|
+
reactIs_production_min.isPortal = function(a) {
|
|
531
|
+
return v(a) === c;
|
|
532
|
+
};
|
|
533
|
+
reactIs_production_min.isProfiler = function(a) {
|
|
534
|
+
return v(a) === f;
|
|
535
|
+
};
|
|
536
|
+
reactIs_production_min.isStrictMode = function(a) {
|
|
537
|
+
return v(a) === e;
|
|
538
|
+
};
|
|
539
|
+
reactIs_production_min.isSuspense = function(a) {
|
|
540
|
+
return v(a) === m;
|
|
541
|
+
};
|
|
542
|
+
reactIs_production_min.isSuspenseList = function(a) {
|
|
543
|
+
return v(a) === n;
|
|
544
|
+
};
|
|
545
|
+
reactIs_production_min.isValidElementType = function(a) {
|
|
546
|
+
return "string" === typeof a || "function" === typeof a || a === d || a === f || a === e || a === m || a === n || a === t || "object" === typeof a && null !== a && (a.$$typeof === q || a.$$typeof === p || a.$$typeof === g || a.$$typeof === h || a.$$typeof === l || a.$$typeof === u || void 0 !== a.getModuleId) ? true : false;
|
|
547
|
+
};
|
|
548
|
+
reactIs_production_min.typeOf = v;
|
|
549
|
+
return reactIs_production_min;
|
|
550
|
+
}
|
|
551
|
+
var hasRequiredReactIs;
|
|
552
|
+
function requireReactIs() {
|
|
553
|
+
if (hasRequiredReactIs) return reactIs.exports;
|
|
554
|
+
hasRequiredReactIs = 1;
|
|
555
|
+
reactIs.exports = requireReactIs_production_min();
|
|
556
|
+
return reactIs.exports;
|
|
557
|
+
}
|
|
558
|
+
var reactIsExports = requireReactIs();
|
|
559
|
+
var ReactIs18 = /*#__PURE__*/ _mergeNamespaces({
|
|
560
|
+
__proto__: null,
|
|
561
|
+
default: /* @__PURE__ */ getDefaultExportFromCjs(reactIsExports)
|
|
562
|
+
}, [reactIsExports]);
|
|
563
|
+
const ReactIs = Object.fromEntries([
|
|
564
|
+
"isAsyncMode",
|
|
565
|
+
"isConcurrentMode",
|
|
566
|
+
"isContextConsumer",
|
|
567
|
+
"isContextProvider",
|
|
568
|
+
"isElement",
|
|
569
|
+
"isForwardRef",
|
|
570
|
+
"isFragment",
|
|
571
|
+
"isLazy",
|
|
572
|
+
"isMemo",
|
|
573
|
+
"isPortal",
|
|
574
|
+
"isProfiler",
|
|
575
|
+
"isStrictMode",
|
|
576
|
+
"isSuspense",
|
|
577
|
+
"isSuspenseList",
|
|
578
|
+
"isValidElementType"
|
|
579
|
+
].map((m) => [m, (v) => ReactIs18[m](v) || ReactIs19[m](v)]));
|
|
580
|
+
function getChildren(arg, children = []) {
|
|
581
|
+
if (Array.isArray(arg)) for (const item of arg) getChildren(item, children);
|
|
582
|
+
else if (arg != null && arg !== false && arg !== "") children.push(arg);
|
|
583
|
+
return children;
|
|
584
|
+
}
|
|
585
|
+
function getType(element) {
|
|
586
|
+
const type = element.type;
|
|
587
|
+
if (typeof type === "string") return type;
|
|
588
|
+
if (typeof type === "function") return type.displayName || type.name || "Unknown";
|
|
589
|
+
if (ReactIs.isFragment(element)) return "React.Fragment";
|
|
590
|
+
if (ReactIs.isSuspense(element)) return "React.Suspense";
|
|
591
|
+
if (typeof type === "object" && type !== null) {
|
|
592
|
+
if (ReactIs.isContextProvider(element)) return "Context.Provider";
|
|
593
|
+
if (ReactIs.isContextConsumer(element)) return "Context.Consumer";
|
|
594
|
+
if (ReactIs.isForwardRef(element)) {
|
|
595
|
+
if (type.displayName) return type.displayName;
|
|
596
|
+
const functionName = type.render.displayName || type.render.name || "";
|
|
597
|
+
return functionName === "" ? "ForwardRef" : `ForwardRef(${functionName})`;
|
|
598
|
+
}
|
|
599
|
+
if (ReactIs.isMemo(element)) {
|
|
600
|
+
const functionName = type.displayName || type.type.displayName || type.type.name || "";
|
|
601
|
+
return functionName === "" ? "Memo" : `Memo(${functionName})`;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
return "UNDEFINED";
|
|
605
|
+
}
|
|
606
|
+
function getPropKeys$1(element) {
|
|
607
|
+
const { props } = element;
|
|
608
|
+
return Object.keys(props).filter((key) => key !== "children" && props[key] !== void 0).sort();
|
|
609
|
+
}
|
|
610
|
+
const serialize$1 = (element, config, indentation, depth, refs, printer) => ++depth > config.maxDepth ? printElementAsLeaf(getType(element), config) : printElement(getType(element), printProps(getPropKeys$1(element), element.props, config, indentation + config.indent, depth, refs, printer), printChildren(getChildren(element.props.children), config, indentation + config.indent, depth, refs, printer), config, indentation);
|
|
611
|
+
const test$1 = (val) => val != null && ReactIs.isElement(val);
|
|
612
|
+
const plugin$1 = {
|
|
613
|
+
serialize: serialize$1,
|
|
614
|
+
test: test$1
|
|
615
|
+
};
|
|
616
|
+
const testSymbol = typeof Symbol === "function" && Symbol.for ? Symbol.for("react.test.json") : 245830487;
|
|
617
|
+
function getPropKeys(object) {
|
|
618
|
+
const { props } = object;
|
|
619
|
+
return props ? Object.keys(props).filter((key) => props[key] !== void 0).sort() : [];
|
|
620
|
+
}
|
|
621
|
+
const serialize = (object, config, indentation, depth, refs, printer) => ++depth > config.maxDepth ? printElementAsLeaf(object.type, config) : printElement(object.type, object.props ? printProps(getPropKeys(object), object.props, config, indentation + config.indent, depth, refs, printer) : "", object.children ? printChildren(object.children, config, indentation + config.indent, depth, refs, printer) : "", config, indentation);
|
|
622
|
+
const test = (val) => val && val.$$typeof === testSymbol;
|
|
623
|
+
const plugin = {
|
|
624
|
+
serialize,
|
|
625
|
+
test
|
|
626
|
+
};
|
|
627
|
+
const toString = Object.prototype.toString;
|
|
628
|
+
const toISOString = Date.prototype.toISOString;
|
|
629
|
+
const errorToString = Error.prototype.toString;
|
|
630
|
+
const regExpToString = RegExp.prototype.toString;
|
|
631
|
+
/**
|
|
632
|
+
* Explicitly comparing typeof constructor to function avoids undefined as name
|
|
633
|
+
* when mock identity-obj-proxy returns the key as the value for any key.
|
|
634
|
+
*/
|
|
635
|
+
function getConstructorName(val) {
|
|
636
|
+
return typeof val.constructor === "function" && val.constructor.name || "Object";
|
|
637
|
+
}
|
|
638
|
+
/** Is val is equal to global window object? Works even if it does not exist :) */
|
|
639
|
+
function isWindow(val) {
|
|
640
|
+
return typeof window !== "undefined" && val === window;
|
|
641
|
+
}
|
|
642
|
+
const SYMBOL_REGEXP = /^Symbol\((.*)\)(.*)$/;
|
|
643
|
+
const NEWLINE_REGEXP = /\n/g;
|
|
644
|
+
var PrettyFormatPluginError = class extends Error {
|
|
645
|
+
constructor(message, stack) {
|
|
646
|
+
super(message);
|
|
647
|
+
this.stack = stack;
|
|
648
|
+
this.name = this.constructor.name;
|
|
649
|
+
}
|
|
650
|
+
};
|
|
651
|
+
function isToStringedArrayType(toStringed) {
|
|
652
|
+
return toStringed === "[object Array]" || toStringed === "[object ArrayBuffer]" || toStringed === "[object DataView]" || toStringed === "[object Float32Array]" || toStringed === "[object Float64Array]" || toStringed === "[object Int8Array]" || toStringed === "[object Int16Array]" || toStringed === "[object Int32Array]" || toStringed === "[object Uint8Array]" || toStringed === "[object Uint8ClampedArray]" || toStringed === "[object Uint16Array]" || toStringed === "[object Uint32Array]";
|
|
653
|
+
}
|
|
654
|
+
function printNumber(val) {
|
|
655
|
+
return Object.is(val, -0) ? "-0" : String(val);
|
|
656
|
+
}
|
|
657
|
+
function printBigInt(val) {
|
|
658
|
+
return String(`${val}n`);
|
|
659
|
+
}
|
|
660
|
+
function printFunction(val, printFunctionName) {
|
|
661
|
+
if (!printFunctionName) return "[Function]";
|
|
662
|
+
return `[Function ${val.name || "anonymous"}]`;
|
|
663
|
+
}
|
|
664
|
+
function printSymbol(val) {
|
|
665
|
+
return String(val).replace(SYMBOL_REGEXP, "Symbol($1)");
|
|
666
|
+
}
|
|
667
|
+
function printError(val) {
|
|
668
|
+
return `[${errorToString.call(val)}]`;
|
|
669
|
+
}
|
|
670
|
+
/**
|
|
671
|
+
* The first port of call for printing an object, handles most of the
|
|
672
|
+
* data-types in JS.
|
|
673
|
+
*/
|
|
674
|
+
function printBasicValue(val, printFunctionName, escapeRegex, escapeString) {
|
|
675
|
+
if (val === true || val === false) return `${val}`;
|
|
676
|
+
if (val === void 0) return "undefined";
|
|
677
|
+
if (val === null) return "null";
|
|
678
|
+
const typeOf = typeof val;
|
|
679
|
+
if (typeOf === "number") return printNumber(val);
|
|
680
|
+
if (typeOf === "bigint") return printBigInt(val);
|
|
681
|
+
if (typeOf === "string") {
|
|
682
|
+
if (escapeString) return `"${val.replaceAll(/"|\\/g, "\\$&")}"`;
|
|
683
|
+
return `"${val}"`;
|
|
684
|
+
}
|
|
685
|
+
if (typeOf === "function") return printFunction(val, printFunctionName);
|
|
686
|
+
if (typeOf === "symbol") return printSymbol(val);
|
|
687
|
+
const toStringed = toString.call(val);
|
|
688
|
+
if (toStringed === "[object WeakMap]") return "WeakMap {}";
|
|
689
|
+
if (toStringed === "[object WeakSet]") return "WeakSet {}";
|
|
690
|
+
if (toStringed === "[object Function]" || toStringed === "[object GeneratorFunction]") return printFunction(val, printFunctionName);
|
|
691
|
+
if (toStringed === "[object Symbol]") return printSymbol(val);
|
|
692
|
+
if (toStringed === "[object Date]") return Number.isNaN(+val) ? "Date { NaN }" : toISOString.call(val);
|
|
693
|
+
if (toStringed === "[object Error]") return printError(val);
|
|
694
|
+
if (toStringed === "[object RegExp]") {
|
|
695
|
+
if (escapeRegex) return regExpToString.call(val).replaceAll(/[$()*+.?[\\\]^{|}]/g, "\\$&");
|
|
696
|
+
return regExpToString.call(val);
|
|
697
|
+
}
|
|
698
|
+
if (val instanceof Error) return printError(val);
|
|
699
|
+
return null;
|
|
700
|
+
}
|
|
701
|
+
/**
|
|
702
|
+
* Handles more complex objects ( such as objects with circular references.
|
|
703
|
+
* maps and sets etc )
|
|
704
|
+
*/
|
|
705
|
+
function printComplexValue(val, config, indentation, depth, refs, hasCalledToJSON) {
|
|
706
|
+
if (refs.includes(val)) return "[Circular]";
|
|
707
|
+
refs = [...refs];
|
|
708
|
+
refs.push(val);
|
|
709
|
+
const hitMaxDepth = ++depth > config.maxDepth;
|
|
710
|
+
const min = config.min;
|
|
711
|
+
if (config.callToJSON && !hitMaxDepth && val.toJSON && typeof val.toJSON === "function" && !hasCalledToJSON) return printer(val.toJSON(), config, indentation, depth, refs, true);
|
|
712
|
+
const toStringed = toString.call(val);
|
|
713
|
+
if (toStringed === "[object Arguments]") return hitMaxDepth ? "[Arguments]" : `${min ? "" : "Arguments "}[${printListItems(val, config, indentation, depth, refs, printer)}]`;
|
|
714
|
+
if (isToStringedArrayType(toStringed)) return hitMaxDepth ? `[${val.constructor.name}]` : `${min ? "" : !config.printBasicPrototype && val.constructor.name === "Array" ? "" : `${val.constructor.name} `}[${printListItems(val, config, indentation, depth, refs, printer)}]`;
|
|
715
|
+
if (toStringed === "[object Map]") return hitMaxDepth ? "[Map]" : `Map {${printIteratorEntries(val.entries(), config, indentation, depth, refs, printer, " => ")}}`;
|
|
716
|
+
if (toStringed === "[object Set]") return hitMaxDepth ? "[Set]" : `Set {${printIteratorValues(val.values(), config, indentation, depth, refs, printer)}}`;
|
|
717
|
+
return hitMaxDepth || isWindow(val) ? `[${getConstructorName(val)}]` : `${min ? "" : !config.printBasicPrototype && getConstructorName(val) === "Object" ? "" : `${getConstructorName(val)} `}{${printObjectProperties(val, config, indentation, depth, refs, printer)}}`;
|
|
718
|
+
}
|
|
719
|
+
const ErrorPlugin = {
|
|
720
|
+
test: (val) => val && val instanceof Error,
|
|
721
|
+
serialize(val, config, indentation, depth, refs, printer) {
|
|
722
|
+
if (refs.includes(val)) return "[Circular]";
|
|
723
|
+
refs = [...refs, val];
|
|
724
|
+
const hitMaxDepth = ++depth > config.maxDepth;
|
|
725
|
+
const { message, cause, ...rest } = val;
|
|
726
|
+
const entries = {
|
|
727
|
+
message,
|
|
728
|
+
...typeof cause !== "undefined" ? { cause } : {},
|
|
729
|
+
...val instanceof AggregateError ? { errors: val.errors } : {},
|
|
730
|
+
...rest
|
|
731
|
+
};
|
|
732
|
+
const name = val.name !== "Error" ? val.name : getConstructorName(val);
|
|
733
|
+
return hitMaxDepth ? `[${name}]` : `${name} {${printIteratorEntries(Object.entries(entries).values(), config, indentation, depth, refs, printer)}}`;
|
|
734
|
+
}
|
|
735
|
+
};
|
|
736
|
+
function isNewPlugin(plugin) {
|
|
737
|
+
return plugin.serialize != null;
|
|
738
|
+
}
|
|
739
|
+
function printPlugin(plugin, val, config, indentation, depth, refs) {
|
|
740
|
+
let printed;
|
|
741
|
+
try {
|
|
742
|
+
printed = isNewPlugin(plugin) ? plugin.serialize(val, config, indentation, depth, refs, printer) : plugin.print(val, (valChild) => printer(valChild, config, indentation, depth, refs), (str) => {
|
|
743
|
+
const indentationNext = indentation + config.indent;
|
|
744
|
+
return indentationNext + str.replaceAll(NEWLINE_REGEXP, `\n${indentationNext}`);
|
|
745
|
+
}, {
|
|
746
|
+
edgeSpacing: config.spacingOuter,
|
|
747
|
+
min: config.min,
|
|
748
|
+
spacing: config.spacingInner
|
|
749
|
+
}, config.colors);
|
|
750
|
+
} catch (error) {
|
|
751
|
+
throw new PrettyFormatPluginError(error.message, error.stack);
|
|
752
|
+
}
|
|
753
|
+
if (typeof printed !== "string") throw new TypeError(`pretty-format: Plugin must return type "string" but instead returned "${typeof printed}".`);
|
|
754
|
+
return printed;
|
|
755
|
+
}
|
|
756
|
+
function findPlugin(plugins, val) {
|
|
757
|
+
for (const plugin of plugins) try {
|
|
758
|
+
if (plugin.test(val)) return plugin;
|
|
759
|
+
} catch (error) {
|
|
760
|
+
throw new PrettyFormatPluginError(error.message, error.stack);
|
|
761
|
+
}
|
|
762
|
+
return null;
|
|
763
|
+
}
|
|
764
|
+
function printer(val, config, indentation, depth, refs, hasCalledToJSON) {
|
|
765
|
+
let result;
|
|
766
|
+
const plugin = findPlugin(config.plugins, val);
|
|
767
|
+
if (plugin !== null) result = printPlugin(plugin, val, config, indentation, depth, refs);
|
|
768
|
+
else {
|
|
769
|
+
const basicResult = printBasicValue(val, config.printFunctionName, config.escapeRegex, config.escapeString);
|
|
770
|
+
if (basicResult !== null) result = basicResult;
|
|
771
|
+
else result = printComplexValue(val, config, indentation, depth, refs, hasCalledToJSON);
|
|
772
|
+
}
|
|
773
|
+
config._outputLengthPerDepth[depth] ??= 0;
|
|
774
|
+
config._outputLengthPerDepth[depth] += result.length;
|
|
775
|
+
if (config._outputLengthPerDepth[depth] > config.maxOutputLength) config.maxDepth = 0;
|
|
776
|
+
return result;
|
|
777
|
+
}
|
|
778
|
+
const DEFAULT_THEME = {
|
|
779
|
+
comment: "gray",
|
|
780
|
+
content: "reset",
|
|
781
|
+
prop: "yellow",
|
|
782
|
+
tag: "cyan",
|
|
783
|
+
value: "green"
|
|
784
|
+
};
|
|
785
|
+
const DEFAULT_THEME_KEYS = Object.keys(DEFAULT_THEME);
|
|
786
|
+
const DEFAULT_OPTIONS = {
|
|
787
|
+
callToJSON: true,
|
|
788
|
+
compareKeys: void 0,
|
|
789
|
+
escapeRegex: false,
|
|
790
|
+
escapeString: true,
|
|
791
|
+
highlight: false,
|
|
792
|
+
indent: 2,
|
|
793
|
+
maxDepth: Number.POSITIVE_INFINITY,
|
|
794
|
+
maxOutputLength: 1e6,
|
|
795
|
+
maxWidth: Number.POSITIVE_INFINITY,
|
|
796
|
+
min: false,
|
|
797
|
+
plugins: [],
|
|
798
|
+
printBasicPrototype: true,
|
|
799
|
+
printFunctionName: true,
|
|
800
|
+
printShadowRoot: true,
|
|
801
|
+
theme: DEFAULT_THEME
|
|
802
|
+
};
|
|
803
|
+
function validateOptions(options) {
|
|
804
|
+
for (const key of Object.keys(options)) if (!Object.hasOwn(DEFAULT_OPTIONS, key)) throw new Error(`pretty-format: Unknown option "${key}".`);
|
|
805
|
+
if (options.min && options.indent !== void 0 && options.indent !== 0) throw new Error("pretty-format: Options \"min\" and \"indent\" cannot be used together.");
|
|
806
|
+
}
|
|
807
|
+
function getColorsHighlight() {
|
|
808
|
+
return DEFAULT_THEME_KEYS.reduce((colors, key) => {
|
|
809
|
+
const value = DEFAULT_THEME[key];
|
|
810
|
+
const color = value && y[value];
|
|
811
|
+
if (color && typeof color.close === "string" && typeof color.open === "string") colors[key] = color;
|
|
812
|
+
else throw new Error(`pretty-format: Option "theme" has a key "${key}" whose value "${value}" is undefined in ansi-styles.`);
|
|
813
|
+
return colors;
|
|
814
|
+
}, Object.create(null));
|
|
815
|
+
}
|
|
816
|
+
function getColorsEmpty() {
|
|
817
|
+
return DEFAULT_THEME_KEYS.reduce((colors, key) => {
|
|
818
|
+
colors[key] = {
|
|
819
|
+
close: "",
|
|
820
|
+
open: ""
|
|
821
|
+
};
|
|
822
|
+
return colors;
|
|
823
|
+
}, Object.create(null));
|
|
824
|
+
}
|
|
825
|
+
function getPrintFunctionName(options) {
|
|
826
|
+
return options?.printFunctionName ?? DEFAULT_OPTIONS.printFunctionName;
|
|
827
|
+
}
|
|
828
|
+
function getEscapeRegex(options) {
|
|
829
|
+
return options?.escapeRegex ?? DEFAULT_OPTIONS.escapeRegex;
|
|
830
|
+
}
|
|
831
|
+
function getEscapeString(options) {
|
|
832
|
+
return options?.escapeString ?? DEFAULT_OPTIONS.escapeString;
|
|
833
|
+
}
|
|
834
|
+
function getConfig(options) {
|
|
835
|
+
return {
|
|
836
|
+
callToJSON: options?.callToJSON ?? DEFAULT_OPTIONS.callToJSON,
|
|
837
|
+
colors: options?.highlight ? getColorsHighlight() : getColorsEmpty(),
|
|
838
|
+
compareKeys: typeof options?.compareKeys === "function" || options?.compareKeys === null ? options.compareKeys : DEFAULT_OPTIONS.compareKeys,
|
|
839
|
+
escapeRegex: getEscapeRegex(options),
|
|
840
|
+
escapeString: getEscapeString(options),
|
|
841
|
+
indent: options?.min ? "" : createIndent(options?.indent ?? DEFAULT_OPTIONS.indent),
|
|
842
|
+
maxDepth: options?.maxDepth ?? DEFAULT_OPTIONS.maxDepth,
|
|
843
|
+
maxWidth: options?.maxWidth ?? DEFAULT_OPTIONS.maxWidth,
|
|
844
|
+
min: options?.min ?? DEFAULT_OPTIONS.min,
|
|
845
|
+
plugins: options?.plugins ?? DEFAULT_OPTIONS.plugins,
|
|
846
|
+
printBasicPrototype: options?.printBasicPrototype ?? true,
|
|
847
|
+
printFunctionName: getPrintFunctionName(options),
|
|
848
|
+
printShadowRoot: options?.printShadowRoot ?? true,
|
|
849
|
+
spacingInner: options?.min ? " " : "\n",
|
|
850
|
+
spacingOuter: options?.min ? "" : "\n",
|
|
851
|
+
maxOutputLength: options?.maxOutputLength ?? DEFAULT_OPTIONS.maxOutputLength,
|
|
852
|
+
_outputLengthPerDepth: []
|
|
853
|
+
};
|
|
854
|
+
}
|
|
855
|
+
function createIndent(indent) {
|
|
856
|
+
return Array.from({ length: indent + 1 }).join(" ");
|
|
857
|
+
}
|
|
858
|
+
/**
|
|
859
|
+
* Returns a presentation string of your `val` object
|
|
860
|
+
* @param val any potential JavaScript object
|
|
861
|
+
* @param options Custom settings
|
|
862
|
+
*/
|
|
863
|
+
function format(val, options) {
|
|
864
|
+
if (options) {
|
|
865
|
+
validateOptions(options);
|
|
866
|
+
if (options.plugins) {
|
|
867
|
+
const plugin = findPlugin(options.plugins, val);
|
|
868
|
+
if (plugin !== null) return printPlugin(plugin, val, getConfig(options), "", 0, []);
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
const basicResult = printBasicValue(val, getPrintFunctionName(options), getEscapeRegex(options), getEscapeString(options));
|
|
872
|
+
if (basicResult !== null) return basicResult;
|
|
873
|
+
return printComplexValue(val, getConfig(options), "", 0, []);
|
|
874
|
+
}
|
|
875
|
+
const plugins = {
|
|
876
|
+
AsymmetricMatcher: plugin$5,
|
|
877
|
+
DOMCollection: plugin$4,
|
|
878
|
+
DOMElement: plugin$3,
|
|
879
|
+
Immutable: plugin$2,
|
|
880
|
+
ReactElement: plugin$1,
|
|
881
|
+
ReactTestComponent: plugin,
|
|
882
|
+
Error: ErrorPlugin
|
|
883
|
+
};
|
|
884
|
+
//#endregion
|
|
885
|
+
export { DEFAULT_OPTIONS, createDOMElementFilter, format, plugins };
|
|
886
|
+
|
|
887
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJzdHlsZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHZpdGVzdCtwcmV0dHktZm9ybWF0QDQuMS4xMC9ub2RlX21vZHVsZXMvQHZpdGVzdC9wcmV0dHktZm9ybWF0L2Rpc3QvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlcyBmcm9tICd0aW55cmFpbmJvdyc7XG5cbmZ1bmN0aW9uIF9tZXJnZU5hbWVzcGFjZXMobiwgbSkge1xuICBtLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICBlICYmIHR5cGVvZiBlICE9PSAnc3RyaW5nJyAmJiAhQXJyYXkuaXNBcnJheShlKSAmJiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICBpZiAoayAhPT0gJ2RlZmF1bHQnICYmICEoayBpbiBuKSkge1xuICAgICAgICB2YXIgZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgayk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCBrLCBkLmdldCA/IGQgOiB7XG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVba107IH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShuKTtcbn1cblxuZnVuY3Rpb24gZ2V0S2V5c09mRW51bWVyYWJsZVByb3BlcnRpZXMob2JqZWN0LCBjb21wYXJlS2V5cykge1xuXHRjb25zdCByYXdLZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblx0Y29uc3Qga2V5cyA9IGNvbXBhcmVLZXlzID09PSBudWxsID8gcmF3S2V5cyA6IHJhd0tleXMuc29ydChjb21wYXJlS2V5cyk7XG5cdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0Zm9yIChjb25zdCBzeW1ib2wgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpKSB7XG5cdFx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bWJvbCkuZW51bWVyYWJsZSkge1xuXHRcdFx0XHRrZXlzLnB1c2goc3ltYm9sKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGtleXM7XG59XG4vKipcbiogUmV0dXJuIGVudHJpZXMgKGZvciBleGFtcGxlLCBvZiBhIG1hcClcbiogd2l0aCBzcGFjaW5nLCBpbmRlbnRhdGlvbiwgYW5kIGNvbW1hXG4qIHdpdGhvdXQgc3Vycm91bmRpbmcgcHVuY3R1YXRpb24gKGZvciBleGFtcGxlLCBicmFjZXMpXG4qL1xuZnVuY3Rpb24gcHJpbnRJdGVyYXRvckVudHJpZXMoaXRlcmF0b3IsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyLCBzZXBhcmF0b3IgPSBcIjogXCIpIHtcblx0bGV0IHJlc3VsdCA9IFwiXCI7XG5cdGxldCB3aWR0aCA9IDA7XG5cdGxldCBjdXJyZW50ID0gaXRlcmF0b3IubmV4dCgpO1xuXHRpZiAoIWN1cnJlbnQuZG9uZSkge1xuXHRcdHJlc3VsdCArPSBjb25maWcuc3BhY2luZ091dGVyO1xuXHRcdGNvbnN0IGluZGVudGF0aW9uTmV4dCA9IGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudDtcblx0XHR3aGlsZSAoIWN1cnJlbnQuZG9uZSkge1xuXHRcdFx0cmVzdWx0ICs9IGluZGVudGF0aW9uTmV4dDtcblx0XHRcdGlmICh3aWR0aCsrID09PSBjb25maWcubWF4V2lkdGgpIHtcblx0XHRcdFx0cmVzdWx0ICs9IFwi4oCmXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbmFtZSA9IHByaW50ZXIoY3VycmVudC52YWx1ZVswXSwgY29uZmlnLCBpbmRlbnRhdGlvbk5leHQsIGRlcHRoLCByZWZzKTtcblx0XHRcdGNvbnN0IHZhbHVlID0gcHJpbnRlcihjdXJyZW50LnZhbHVlWzFdLCBjb25maWcsIGluZGVudGF0aW9uTmV4dCwgZGVwdGgsIHJlZnMpO1xuXHRcdFx0cmVzdWx0ICs9IG5hbWUgKyBzZXBhcmF0b3IgKyB2YWx1ZTtcblx0XHRcdGN1cnJlbnQgPSBpdGVyYXRvci5uZXh0KCk7XG5cdFx0XHRpZiAoIWN1cnJlbnQuZG9uZSkge1xuXHRcdFx0XHRyZXN1bHQgKz0gYCwke2NvbmZpZy5zcGFjaW5nSW5uZXJ9YDtcblx0XHRcdH0gZWxzZSBpZiAoIWNvbmZpZy5taW4pIHtcblx0XHRcdFx0cmVzdWx0ICs9IFwiLFwiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlciArIGluZGVudGF0aW9uO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG4vKipcbiogUmV0dXJuIHZhbHVlcyAoZm9yIGV4YW1wbGUsIG9mIGEgc2V0KVxuKiB3aXRoIHNwYWNpbmcsIGluZGVudGF0aW9uLCBhbmQgY29tbWFcbiogd2l0aG91dCBzdXJyb3VuZGluZyBwdW5jdHVhdGlvbiAoYnJhY2VzIG9yIGJyYWNrZXRzKVxuKi9cbmZ1bmN0aW9uIHByaW50SXRlcmF0b3JWYWx1ZXMoaXRlcmF0b3IsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSB7XG5cdGxldCByZXN1bHQgPSBcIlwiO1xuXHRsZXQgd2lkdGggPSAwO1xuXHRsZXQgY3VycmVudCA9IGl0ZXJhdG9yLm5leHQoKTtcblx0aWYgKCFjdXJyZW50LmRvbmUpIHtcblx0XHRyZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlcjtcblx0XHRjb25zdCBpbmRlbnRhdGlvbk5leHQgPSBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQ7XG5cdFx0d2hpbGUgKCFjdXJyZW50LmRvbmUpIHtcblx0XHRcdHJlc3VsdCArPSBpbmRlbnRhdGlvbk5leHQ7XG5cdFx0XHRpZiAod2lkdGgrKyA9PT0gY29uZmlnLm1heFdpZHRoKSB7XG5cdFx0XHRcdHJlc3VsdCArPSBcIuKAplwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHJlc3VsdCArPSBwcmludGVyKGN1cnJlbnQudmFsdWUsIGNvbmZpZywgaW5kZW50YXRpb25OZXh0LCBkZXB0aCwgcmVmcyk7XG5cdFx0XHRjdXJyZW50ID0gaXRlcmF0b3IubmV4dCgpO1xuXHRcdFx0aWYgKCFjdXJyZW50LmRvbmUpIHtcblx0XHRcdFx0cmVzdWx0ICs9IGAsJHtjb25maWcuc3BhY2luZ0lubmVyfWA7XG5cdFx0XHR9IGVsc2UgaWYgKCFjb25maWcubWluKSB7XG5cdFx0XHRcdHJlc3VsdCArPSBcIixcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXIgKyBpbmRlbnRhdGlvbjtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4qIFJldHVybiBpdGVtcyAoZm9yIGV4YW1wbGUsIG9mIGFuIGFycmF5KVxuKiB3aXRoIHNwYWNpbmcsIGluZGVudGF0aW9uLCBhbmQgY29tbWFcbiogd2l0aG91dCBzdXJyb3VuZGluZyBwdW5jdHVhdGlvbiAoZm9yIGV4YW1wbGUsIGJyYWNrZXRzKVxuKi9cbmZ1bmN0aW9uIHByaW50TGlzdEl0ZW1zKGxpc3QsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSB7XG5cdGxldCByZXN1bHQgPSBcIlwiO1xuXHRsaXN0ID0gbGlzdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IERhdGFWaWV3KGxpc3QpIDogbGlzdDtcblx0Y29uc3QgaXNEYXRhVmlldyA9IChsKSA9PiBsIGluc3RhbmNlb2YgRGF0YVZpZXc7XG5cdGNvbnN0IGxlbmd0aCA9IGlzRGF0YVZpZXcobGlzdCkgPyBsaXN0LmJ5dGVMZW5ndGggOiBsaXN0Lmxlbmd0aDtcblx0aWYgKGxlbmd0aCA+IDApIHtcblx0XHRyZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlcjtcblx0XHRjb25zdCBpbmRlbnRhdGlvbk5leHQgPSBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQ7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0cmVzdWx0ICs9IGluZGVudGF0aW9uTmV4dDtcblx0XHRcdGlmIChpID09PSBjb25maWcubWF4V2lkdGgpIHtcblx0XHRcdFx0cmVzdWx0ICs9IFwi4oCmXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzRGF0YVZpZXcobGlzdCkgfHwgaSBpbiBsaXN0KSB7XG5cdFx0XHRcdHJlc3VsdCArPSBwcmludGVyKGlzRGF0YVZpZXcobGlzdCkgPyBsaXN0LmdldEludDgoaSkgOiBsaXN0W2ldLCBjb25maWcsIGluZGVudGF0aW9uTmV4dCwgZGVwdGgsIHJlZnMpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGkgPCBsZW5ndGggLSAxKSB7XG5cdFx0XHRcdHJlc3VsdCArPSBgLCR7Y29uZmlnLnNwYWNpbmdJbm5lcn1gO1xuXHRcdFx0fSBlbHNlIGlmICghY29uZmlnLm1pbikge1xuXHRcdFx0XHRyZXN1bHQgKz0gXCIsXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc3VsdCArPSBjb25maWcuc3BhY2luZ091dGVyICsgaW5kZW50YXRpb247XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuKiBSZXR1cm4gcHJvcGVydGllcyBvZiBhbiBvYmplY3Rcbiogd2l0aCBzcGFjaW5nLCBpbmRlbnRhdGlvbiwgYW5kIGNvbW1hXG4qIHdpdGhvdXQgc3Vycm91bmRpbmcgcHVuY3R1YXRpb24gKGZvciBleGFtcGxlLCBicmFjZXMpXG4qL1xuZnVuY3Rpb24gcHJpbnRPYmplY3RQcm9wZXJ0aWVzKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpIHtcblx0bGV0IHJlc3VsdCA9IFwiXCI7XG5cdGNvbnN0IGtleXMgPSBnZXRLZXlzT2ZFbnVtZXJhYmxlUHJvcGVydGllcyh2YWwsIGNvbmZpZy5jb21wYXJlS2V5cyk7XG5cdGlmIChrZXlzLmxlbmd0aCA+IDApIHtcblx0XHRyZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlcjtcblx0XHRjb25zdCBpbmRlbnRhdGlvbk5leHQgPSBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQ7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2ldO1xuXHRcdFx0Y29uc3QgbmFtZSA9IHByaW50ZXIoa2V5LCBjb25maWcsIGluZGVudGF0aW9uTmV4dCwgZGVwdGgsIHJlZnMpO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBwcmludGVyKHZhbFtrZXldLCBjb25maWcsIGluZGVudGF0aW9uTmV4dCwgZGVwdGgsIHJlZnMpO1xuXHRcdFx0cmVzdWx0ICs9IGAke2luZGVudGF0aW9uTmV4dCArIG5hbWV9OiAke3ZhbHVlfWA7XG5cdFx0XHRpZiAoaSA8IGtleXMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRyZXN1bHQgKz0gYCwke2NvbmZpZy5zcGFjaW5nSW5uZXJ9YDtcblx0XHRcdH0gZWxzZSBpZiAoIWNvbmZpZy5taW4pIHtcblx0XHRcdFx0cmVzdWx0ICs9IFwiLFwiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlciArIGluZGVudGF0aW9uO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IGFzeW1tZXRyaWNNYXRjaGVyID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5mb3IgPyBTeW1ib2wuZm9yKFwiamVzdC5hc3ltbWV0cmljTWF0Y2hlclwiKSA6IDEyNjc2MjE7XG5jb25zdCBTUEFDRSQyID0gXCIgXCI7XG5jb25zdCBzZXJpYWxpemUkNSA9ICh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA9PiB7XG5cdGNvbnN0IHN0cmluZ2VkVmFsdWUgPSB2YWwudG9TdHJpbmcoKTtcblx0aWYgKHN0cmluZ2VkVmFsdWUgPT09IFwiQXJyYXlDb250YWluaW5nXCIgfHwgc3RyaW5nZWRWYWx1ZSA9PT0gXCJBcnJheU5vdENvbnRhaW5pbmdcIikge1xuXHRcdGlmICgrK2RlcHRoID4gY29uZmlnLm1heERlcHRoKSB7XG5cdFx0XHRyZXR1cm4gYFske3N0cmluZ2VkVmFsdWV9XWA7XG5cdFx0fVxuXHRcdHJldHVybiBgJHtzdHJpbmdlZFZhbHVlICsgU1BBQ0UkMn1bJHtwcmludExpc3RJdGVtcyh2YWwuc2FtcGxlLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcil9XWA7XG5cdH1cblx0aWYgKHN0cmluZ2VkVmFsdWUgPT09IFwiT2JqZWN0Q29udGFpbmluZ1wiIHx8IHN0cmluZ2VkVmFsdWUgPT09IFwiT2JqZWN0Tm90Q29udGFpbmluZ1wiKSB7XG5cdFx0aWYgKCsrZGVwdGggPiBjb25maWcubWF4RGVwdGgpIHtcblx0XHRcdHJldHVybiBgWyR7c3RyaW5nZWRWYWx1ZX1dYDtcblx0XHR9XG5cdFx0cmV0dXJuIGAke3N0cmluZ2VkVmFsdWUgKyBTUEFDRSQyfXske3ByaW50T2JqZWN0UHJvcGVydGllcyh2YWwuc2FtcGxlLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcil9fWA7XG5cdH1cblx0aWYgKHN0cmluZ2VkVmFsdWUgPT09IFwiU3RyaW5nTWF0Y2hpbmdcIiB8fCBzdHJpbmdlZFZhbHVlID09PSBcIlN0cmluZ05vdE1hdGNoaW5nXCIpIHtcblx0XHRyZXR1cm4gc3RyaW5nZWRWYWx1ZSArIFNQQUNFJDIgKyBwcmludGVyKHZhbC5zYW1wbGUsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzKTtcblx0fVxuXHRpZiAoc3RyaW5nZWRWYWx1ZSA9PT0gXCJTdHJpbmdDb250YWluaW5nXCIgfHwgc3RyaW5nZWRWYWx1ZSA9PT0gXCJTdHJpbmdOb3RDb250YWluaW5nXCIpIHtcblx0XHRyZXR1cm4gc3RyaW5nZWRWYWx1ZSArIFNQQUNFJDIgKyBwcmludGVyKHZhbC5zYW1wbGUsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzKTtcblx0fVxuXHRpZiAodHlwZW9mIHZhbC50b0FzeW1tZXRyaWNNYXRjaGVyICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBBc3ltbWV0cmljIG1hdGNoZXIgJHt2YWwuY29uc3RydWN0b3IubmFtZX0gZG9lcyBub3QgaW1wbGVtZW50IHRvQXN5bW1ldHJpY01hdGNoZXIoKWApO1xuXHR9XG5cdHJldHVybiB2YWwudG9Bc3ltbWV0cmljTWF0Y2hlcigpO1xufTtcbmNvbnN0IHRlc3QkNSA9ICh2YWwpID0+IHZhbCAmJiB2YWwuJCR0eXBlb2YgPT09IGFzeW1tZXRyaWNNYXRjaGVyO1xuY29uc3QgcGx1Z2luJDUgPSB7XG5cdHNlcmlhbGl6ZTogc2VyaWFsaXplJDUsXG5cdHRlc3Q6IHRlc3QkNVxufTtcblxuY29uc3QgU1BBQ0UkMSA9IFwiIFwiO1xuY29uc3QgT0JKRUNUX05BTUVTID0gbmV3IFNldChbXCJET01TdHJpbmdNYXBcIiwgXCJOYW1lZE5vZGVNYXBcIl0pO1xuY29uc3QgQVJSQVlfUkVHRVhQID0gL14oPzpIVE1MXFx3KkNvbGxlY3Rpb258Tm9kZUxpc3QpJC87XG5mdW5jdGlvbiB0ZXN0TmFtZShuYW1lKSB7XG5cdHJldHVybiBPQkpFQ1RfTkFNRVMuaGFzKG5hbWUpIHx8IEFSUkFZX1JFR0VYUC50ZXN0KG5hbWUpO1xufVxuY29uc3QgdGVzdCQ0ID0gKHZhbCkgPT4gdmFsICYmIHZhbC5jb25zdHJ1Y3RvciAmJiAhIXZhbC5jb25zdHJ1Y3Rvci5uYW1lICYmIHRlc3ROYW1lKHZhbC5jb25zdHJ1Y3Rvci5uYW1lKTtcbmZ1bmN0aW9uIGlzTmFtZWROb2RlTWFwKGNvbGxlY3Rpb24pIHtcblx0cmV0dXJuIGNvbGxlY3Rpb24uY29uc3RydWN0b3IubmFtZSA9PT0gXCJOYW1lZE5vZGVNYXBcIjtcbn1cbmNvbnN0IHNlcmlhbGl6ZSQ0ID0gKGNvbGxlY3Rpb24sIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA9PiB7XG5cdGNvbnN0IG5hbWUgPSBjb2xsZWN0aW9uLmNvbnN0cnVjdG9yLm5hbWU7XG5cdGlmICgrK2RlcHRoID4gY29uZmlnLm1heERlcHRoKSB7XG5cdFx0cmV0dXJuIGBbJHtuYW1lfV1gO1xuXHR9XG5cdHJldHVybiAoY29uZmlnLm1pbiA/IFwiXCIgOiBuYW1lICsgU1BBQ0UkMSkgKyAoT0JKRUNUX05BTUVTLmhhcyhuYW1lKSA/IGB7JHtwcmludE9iamVjdFByb3BlcnRpZXMoaXNOYW1lZE5vZGVNYXAoY29sbGVjdGlvbikgPyBbLi4uY29sbGVjdGlvbl0ucmVkdWNlKChwcm9wcywgYXR0cmlidXRlKSA9PiB7XG5cdFx0cHJvcHNbYXR0cmlidXRlLm5hbWVdID0gYXR0cmlidXRlLnZhbHVlO1xuXHRcdHJldHVybiBwcm9wcztcblx0fSwge30pIDogeyAuLi5jb2xsZWN0aW9uIH0sIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKX19YCA6IGBbJHtwcmludExpc3RJdGVtcyhbLi4uY29sbGVjdGlvbl0sIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKX1dYCk7XG59O1xuY29uc3QgcGx1Z2luJDQgPSB7XG5cdHNlcmlhbGl6ZTogc2VyaWFsaXplJDQsXG5cdHRlc3Q6IHRlc3QkNFxufTtcblxuLyoqXG4qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4qXG4qIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4qL1xuZnVuY3Rpb24gZXNjYXBlSFRNTChzdHIpIHtcblx0cmV0dXJuIHN0ci5yZXBsYWNlQWxsKFwiPFwiLCBcIiZsdDtcIikucmVwbGFjZUFsbChcIj5cIiwgXCImZ3Q7XCIpO1xufVxuXG4vLyBSZXR1cm4gZW1wdHkgc3RyaW5nIGlmIGtleXMgaXMgZW1wdHkuXG5mdW5jdGlvbiBwcmludFByb3BzKGtleXMsIHByb3BzLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikge1xuXHRjb25zdCBpbmRlbnRhdGlvbk5leHQgPSBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQ7XG5cdGNvbnN0IGNvbG9ycyA9IGNvbmZpZy5jb2xvcnM7XG5cdHJldHVybiBrZXlzLm1hcCgoa2V5KSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBwcm9wc1trZXldO1xuXHRcdC8vIGhpZGRlbiBpbmplY3RlZCB2YWx1ZSB0aGF0IHNob3VsZCBub3QgYmUgcHJpbnRlZFxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWVbMF0gPT09IFwiX1wiICYmIHZhbHVlLnN0YXJ0c1dpdGgoXCJfX3ZpdGVzdF9cIikgJiYgdmFsdWUubWF0Y2goL19fdml0ZXN0X1xcZCtfXy8pKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdFx0bGV0IHByaW50ZWQgPSBwcmludGVyKHZhbHVlLCBjb25maWcsIGluZGVudGF0aW9uTmV4dCwgZGVwdGgsIHJlZnMpO1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGlmIChwcmludGVkLmluY2x1ZGVzKFwiXFxuXCIpKSB7XG5cdFx0XHRcdHByaW50ZWQgPSBjb25maWcuc3BhY2luZ091dGVyICsgaW5kZW50YXRpb25OZXh0ICsgcHJpbnRlZCArIGNvbmZpZy5zcGFjaW5nT3V0ZXIgKyBpbmRlbnRhdGlvbjtcblx0XHRcdH1cblx0XHRcdHByaW50ZWQgPSBgeyR7cHJpbnRlZH19YDtcblx0XHR9XG5cdFx0cmV0dXJuIGAke2NvbmZpZy5zcGFjaW5nSW5uZXIgKyBpbmRlbnRhdGlvbiArIGNvbG9ycy5wcm9wLm9wZW4gKyBrZXkgKyBjb2xvcnMucHJvcC5jbG9zZX09JHtjb2xvcnMudmFsdWUub3Blbn0ke3ByaW50ZWR9JHtjb2xvcnMudmFsdWUuY2xvc2V9YDtcblx0fSkuam9pbihcIlwiKTtcbn1cbi8vIFJldHVybiBlbXB0eSBzdHJpbmcgaWYgY2hpbGRyZW4gaXMgZW1wdHkuXG5mdW5jdGlvbiBwcmludENoaWxkcmVuKGNoaWxkcmVuLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikge1xuXHRyZXR1cm4gY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gY29uZmlnLnNwYWNpbmdPdXRlciArIGluZGVudGF0aW9uICsgKHR5cGVvZiBjaGlsZCA9PT0gXCJzdHJpbmdcIiA/IHByaW50VGV4dChjaGlsZCwgY29uZmlnKSA6IHByaW50ZXIoY2hpbGQsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzKSkpLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiBwcmludFNoYWRvd1Jvb3QoY2hpbGRyZW4sIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSB7XG5cdGlmIChjb25maWcucHJpbnRTaGFkb3dSb290ID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHJldHVybiBbYCR7Y29uZmlnLnNwYWNpbmdPdXRlciArIGluZGVudGF0aW9ufSNzaGFkb3ctcm9vdGAsIHByaW50Q2hpbGRyZW4oY2hpbGRyZW4sIGNvbmZpZywgaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50LCBkZXB0aCwgcmVmcywgcHJpbnRlcildLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiBwcmludFRleHQodGV4dCwgY29uZmlnKSB7XG5cdGNvbnN0IGNvbnRlbnRDb2xvciA9IGNvbmZpZy5jb2xvcnMuY29udGVudDtcblx0cmV0dXJuIGNvbnRlbnRDb2xvci5vcGVuICsgZXNjYXBlSFRNTCh0ZXh0KSArIGNvbnRlbnRDb2xvci5jbG9zZTtcbn1cbmZ1bmN0aW9uIHByaW50Q29tbWVudChjb21tZW50LCBjb25maWcpIHtcblx0Y29uc3QgY29tbWVudENvbG9yID0gY29uZmlnLmNvbG9ycy5jb21tZW50O1xuXHRyZXR1cm4gYCR7Y29tbWVudENvbG9yLm9wZW59PCEtLSR7ZXNjYXBlSFRNTChjb21tZW50KX0tLT4ke2NvbW1lbnRDb2xvci5jbG9zZX1gO1xufVxuLy8gU2VwYXJhdGUgdGhlIGZ1bmN0aW9ucyB0byBmb3JtYXQgcHJvcHMsIGNoaWxkcmVuLCBhbmQgZWxlbWVudCxcbi8vIHNvIGEgcGx1Z2luIGNvdWxkIG92ZXJyaWRlIGEgcGFydGljdWxhciBmdW5jdGlvbiwgaWYgbmVlZGVkLlxuLy8gVG9vIGJhZCwgc28gc2FkOiB0aGUgdHJhZGl0aW9uYWwgKGJ1dCB1bm5lY2Vzc2FyeSkgc3BhY2Vcbi8vIGluIGEgc2VsZi1jbG9zaW5nIHRhZ0NvbG9yIHJlcXVpcmVzIGEgc2Vjb25kIHRlc3Qgb2YgcHJpbnRlZFByb3BzLlxuZnVuY3Rpb24gcHJpbnRFbGVtZW50KHR5cGUsIHByaW50ZWRQcm9wcywgcHJpbnRlZENoaWxkcmVuLCBjb25maWcsIGluZGVudGF0aW9uKSB7XG5cdGNvbnN0IHRhZ0NvbG9yID0gY29uZmlnLmNvbG9ycy50YWc7XG5cdHJldHVybiBgJHt0YWdDb2xvci5vcGVufTwke3R5cGV9JHtwcmludGVkUHJvcHMgJiYgdGFnQ29sb3IuY2xvc2UgKyBwcmludGVkUHJvcHMgKyBjb25maWcuc3BhY2luZ091dGVyICsgaW5kZW50YXRpb24gKyB0YWdDb2xvci5vcGVufSR7cHJpbnRlZENoaWxkcmVuID8gYD4ke3RhZ0NvbG9yLmNsb3NlfSR7cHJpbnRlZENoaWxkcmVufSR7Y29uZmlnLnNwYWNpbmdPdXRlcn0ke2luZGVudGF0aW9ufSR7dGFnQ29sb3Iub3Blbn08LyR7dHlwZX1gIDogYCR7cHJpbnRlZFByb3BzICYmICFjb25maWcubWluID8gXCJcIiA6IFwiIFwifS9gfT4ke3RhZ0NvbG9yLmNsb3NlfWA7XG59XG5mdW5jdGlvbiBwcmludEVsZW1lbnRBc0xlYWYodHlwZSwgY29uZmlnKSB7XG5cdGNvbnN0IHRhZ0NvbG9yID0gY29uZmlnLmNvbG9ycy50YWc7XG5cdHJldHVybiBgJHt0YWdDb2xvci5vcGVufTwke3R5cGV9JHt0YWdDb2xvci5jbG9zZX0g4oCmJHt0YWdDb2xvci5vcGVufSAvPiR7dGFnQ29sb3IuY2xvc2V9YDtcbn1cblxuY29uc3QgRUxFTUVOVF9OT0RFID0gMTtcbmNvbnN0IFRFWFRfTk9ERSA9IDM7XG5jb25zdCBDT01NRU5UX05PREUgPSA4O1xuY29uc3QgRlJBR01FTlRfTk9ERSA9IDExO1xuY29uc3QgRUxFTUVOVF9SRUdFWFAgPSAvXig/Oig/OkhUTUx8U1ZHKVxcdyopP0VsZW1lbnQkLztcbmZ1bmN0aW9uIHRlc3RIYXNBdHRyaWJ1dGUodmFsKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHR5cGVvZiB2YWwuaGFzQXR0cmlidXRlID09PSBcImZ1bmN0aW9uXCIgJiYgdmFsLmhhc0F0dHJpYnV0ZShcImlzXCIpO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbmZ1bmN0aW9uIHRlc3ROb2RlKHZhbCkge1xuXHRjb25zdCBjb25zdHJ1Y3Rvck5hbWUgPSB2YWwuY29uc3RydWN0b3IubmFtZTtcblx0Y29uc3QgeyBub2RlVHlwZSwgdGFnTmFtZSB9ID0gdmFsO1xuXHRjb25zdCBpc0N1c3RvbUVsZW1lbnQgPSB0eXBlb2YgdGFnTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiB0YWdOYW1lLmluY2x1ZGVzKFwiLVwiKSB8fCB0ZXN0SGFzQXR0cmlidXRlKHZhbCk7XG5cdHJldHVybiBub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIChFTEVNRU5UX1JFR0VYUC50ZXN0KGNvbnN0cnVjdG9yTmFtZSkgfHwgaXNDdXN0b21FbGVtZW50KSB8fCBub2RlVHlwZSA9PT0gVEVYVF9OT0RFICYmIGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJUZXh0XCIgfHwgbm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBjb25zdHJ1Y3Rvck5hbWUgPT09IFwiQ29tbWVudFwiIHx8IG5vZGVUeXBlID09PSBGUkFHTUVOVF9OT0RFICYmIGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJEb2N1bWVudEZyYWdtZW50XCI7XG59XG5jb25zdCB0ZXN0JDMgPSAodmFsKSA9PiB2YWw/LmNvbnN0cnVjdG9yPy5uYW1lICYmIHRlc3ROb2RlKHZhbCk7XG5mdW5jdGlvbiBub2RlSXNUZXh0KG5vZGUpIHtcblx0cmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERTtcbn1cbmZ1bmN0aW9uIG5vZGVJc0NvbW1lbnQobm9kZSkge1xuXHRyZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFO1xufVxuZnVuY3Rpb24gbm9kZUlzRnJhZ21lbnQobm9kZSkge1xuXHRyZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gRlJBR01FTlRfTk9ERTtcbn1cbmZ1bmN0aW9uIGZpbHRlckNoaWxkcmVuKGNoaWxkcmVuLCBmaWx0ZXJOb2RlKSB7XG5cdC8vIEZpbHRlciBvdXQgdGV4dCBub2RlcyB0aGF0IG9ubHkgY29udGFpbiB3aGl0ZXNwYWNlIHRvIHByZXZlbnQgZW1wdHkgbGluZXNcblx0Ly8gVGhpcyBpcyBkb25lIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIGZpbHRlck5vZGUgaXMgcHJvdmlkZWRcblx0bGV0IGZpbHRlcmVkID0gY2hpbGRyZW4uZmlsdGVyKChub2RlKSA9PiB7XG5cdFx0Ly8gRmlsdGVyIG91dCB0ZXh0IG5vZGVzIHRoYXQgYXJlIG9ubHkgd2hpdGVzcGFjZVxuXHRcdGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcblx0XHRcdGNvbnN0IHRleHQgPSBub2RlLmRhdGEgfHwgXCJcIjtcblx0XHRcdC8vIEtlZXAgdGV4dCBub2RlcyB0aGF0IGhhdmUgbm9uLXdoaXRlc3BhY2UgY29udGVudFxuXHRcdFx0cmV0dXJuIHRleHQudHJpbSgpLmxlbmd0aCA+IDA7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9KTtcblx0Ly8gQXBwbHkgYWRkaXRpb25hbCB1c2VyLXByb3ZpZGVkIGZpbHRlciBpZiBzcGVjaWZpZWRcblx0aWYgKGZpbHRlck5vZGUpIHtcblx0XHRmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcihmaWx0ZXJOb2RlKTtcblx0fVxuXHRyZXR1cm4gZmlsdGVyZWQ7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVET00obm9kZSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIsIGZpbHRlck5vZGUpIHtcblx0aWYgKG5vZGVJc1RleHQobm9kZSkpIHtcblx0XHRyZXR1cm4gcHJpbnRUZXh0KG5vZGUuZGF0YSwgY29uZmlnKTtcblx0fVxuXHRpZiAobm9kZUlzQ29tbWVudChub2RlKSkge1xuXHRcdHJldHVybiBwcmludENvbW1lbnQobm9kZS5kYXRhLCBjb25maWcpO1xuXHR9XG5cdGNvbnN0IHR5cGUgPSBub2RlSXNGcmFnbWVudChub2RlKSA/IFwiRG9jdW1lbnRGcmFnbWVudFwiIDogbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdGlmICgrK2RlcHRoID4gY29uZmlnLm1heERlcHRoKSB7XG5cdFx0cmV0dXJuIHByaW50RWxlbWVudEFzTGVhZih0eXBlLCBjb25maWcpO1xuXHR9XG5cdGNvbnN0IGNoaWxkcmVuID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobm9kZS5jaGlsZE5vZGVzIHx8IG5vZGUuY2hpbGRyZW4pO1xuXHRjb25zdCBzaGFkb3dDaGlsZHJlbiA9IG5vZGVJc0ZyYWdtZW50KG5vZGUpIHx8ICFub2RlLnNoYWRvd1Jvb3QgPyBbXSA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5vZGUuc2hhZG93Um9vdC5jaGlsZHJlbik7XG5cdGNvbnN0IHJlc29sdmVkQ2hpbGRyZW4gPSBmaWx0ZXJOb2RlID8gZmlsdGVyQ2hpbGRyZW4oY2hpbGRyZW4sIGZpbHRlck5vZGUpIDogY2hpbGRyZW47XG5cdGNvbnN0IHJlc29sdmVkU2hhZG93Q2hpbGRyZW4gPSBmaWx0ZXJOb2RlID8gZmlsdGVyQ2hpbGRyZW4oc2hhZG93Q2hpbGRyZW4sIGZpbHRlck5vZGUpIDogc2hhZG93Q2hpbGRyZW47XG5cdHJldHVybiBwcmludEVsZW1lbnQodHlwZSwgcHJpbnRQcm9wcyhub2RlSXNGcmFnbWVudChub2RlKSA/IFtdIDogQXJyYXkuZnJvbShub2RlLmF0dHJpYnV0ZXMsIChhdHRyKSA9PiBhdHRyLm5hbWUpLnNvcnQoKSwgbm9kZUlzRnJhZ21lbnQobm9kZSkgPyB7fSA6IFsuLi5ub2RlLmF0dHJpYnV0ZXNdLnJlZHVjZSgocHJvcHMsIGF0dHJpYnV0ZSkgPT4ge1xuXHRcdHByb3BzW2F0dHJpYnV0ZS5uYW1lXSA9IGF0dHJpYnV0ZS52YWx1ZTtcblx0XHRyZXR1cm4gcHJvcHM7XG5cdH0sIHt9KSwgY29uZmlnLCBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQsIGRlcHRoLCByZWZzLCBwcmludGVyKSwgKHJlc29sdmVkU2hhZG93Q2hpbGRyZW4ubGVuZ3RoID4gMCA/IHByaW50U2hhZG93Um9vdChyZXNvbHZlZFNoYWRvd0NoaWxkcmVuLCBjb25maWcsIGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudCwgZGVwdGgsIHJlZnMsIHByaW50ZXIpIDogXCJcIikgKyBwcmludENoaWxkcmVuKHJlc29sdmVkQ2hpbGRyZW4sIGNvbmZpZywgaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50LCBkZXB0aCwgcmVmcywgcHJpbnRlciksIGNvbmZpZywgaW5kZW50YXRpb24pO1xufVxuY29uc3Qgc2VyaWFsaXplJDMgPSAobm9kZSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHNlcmlhbGl6ZURPTShub2RlLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcik7XG5mdW5jdGlvbiBjcmVhdGVET01FbGVtZW50RmlsdGVyKGZpbHRlck5vZGUpIHtcblx0cmV0dXJuIHtcblx0XHR0ZXN0OiB0ZXN0JDMsXG5cdFx0c2VyaWFsaXplOiAobm9kZSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHNlcmlhbGl6ZURPTShub2RlLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlciwgZmlsdGVyTm9kZSlcblx0fTtcbn1cbmNvbnN0IHBsdWdpbiQzID0ge1xuXHRzZXJpYWxpemU6IHNlcmlhbGl6ZSQzLFxuXHR0ZXN0OiB0ZXN0JDNcbn07XG5cbi8vIFNFTlRJTkVMIGNvbnN0YW50cyBhcmUgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svaW1tdXRhYmxlLWpzXG5jb25zdCBJU19JVEVSQUJMRV9TRU5USU5FTCA9IFwiQEBfX0lNTVVUQUJMRV9JVEVSQUJMRV9fQEBcIjtcbmNvbnN0IElTX0xJU1RfU0VOVElORUwgPSBcIkBAX19JTU1VVEFCTEVfTElTVF9fQEBcIjtcbmNvbnN0IElTX0tFWUVEX1NFTlRJTkVMID0gXCJAQF9fSU1NVVRBQkxFX0tFWUVEX19AQFwiO1xuY29uc3QgSVNfTUFQX1NFTlRJTkVMID0gXCJAQF9fSU1NVVRBQkxFX01BUF9fQEBcIjtcbmNvbnN0IElTX09SREVSRURfU0VOVElORUwgPSBcIkBAX19JTU1VVEFCTEVfT1JERVJFRF9fQEBcIjtcbmNvbnN0IElTX1JFQ09SRF9TRU5USU5FTCA9IFwiQEBfX0lNTVVUQUJMRV9SRUNPUkRfX0BAXCI7XG5jb25zdCBJU19TRVFfU0VOVElORUwgPSBcIkBAX19JTU1VVEFCTEVfU0VRX19AQFwiO1xuY29uc3QgSVNfU0VUX1NFTlRJTkVMID0gXCJAQF9fSU1NVVRBQkxFX1NFVF9fQEBcIjtcbmNvbnN0IElTX1NUQUNLX1NFTlRJTkVMID0gXCJAQF9fSU1NVVRBQkxFX1NUQUNLX19AQFwiO1xuY29uc3QgZ2V0SW1tdXRhYmxlTmFtZSA9IChuYW1lKSA9PiBgSW1tdXRhYmxlLiR7bmFtZX1gO1xuY29uc3QgcHJpbnRBc0xlYWYgPSAobmFtZSkgPT4gYFske25hbWV9XWA7XG5jb25zdCBTUEFDRSA9IFwiIFwiO1xuY29uc3QgTEFaWSA9IFwi4oCmXCI7XG5mdW5jdGlvbiBwcmludEltbXV0YWJsZUVudHJpZXModmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlciwgdHlwZSkge1xuXHRyZXR1cm4gKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aCA/IHByaW50QXNMZWFmKGdldEltbXV0YWJsZU5hbWUodHlwZSkpIDogYCR7Z2V0SW1tdXRhYmxlTmFtZSh0eXBlKSArIFNQQUNFfXske3ByaW50SXRlcmF0b3JFbnRyaWVzKHZhbC5lbnRyaWVzKCksIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKX19YDtcbn1cbi8vIFJlY29yZCBoYXMgYW4gZW50cmllcyBtZXRob2QgYmVjYXVzZSBpdCBpcyBhIGNvbGxlY3Rpb24gaW4gaW1tdXRhYmxlIHYzLlxuLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIGZvciBJbW11dGFibGUgUmVjb3JkIGZyb20gdmVyc2lvbiB2MyBvciB2NC5cbmZ1bmN0aW9uIGdldFJlY29yZEVudHJpZXModmFsKSB7XG5cdGxldCBpID0gMDtcblx0cmV0dXJuIHsgbmV4dCgpIHtcblx0XHRpZiAoaSA8IHZhbC5fa2V5cy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGtleSA9IHZhbC5fa2V5c1tpKytdO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZG9uZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiBba2V5LCB2YWwuZ2V0KGtleSldXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZG9uZTogdHJ1ZSxcblx0XHRcdHZhbHVlOiB1bmRlZmluZWRcblx0XHR9O1xuXHR9IH07XG59XG5mdW5jdGlvbiBwcmludEltbXV0YWJsZVJlY29yZCh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSB7XG5cdC8vIF9uYW1lIHByb3BlcnR5IGlzIGRlZmluZWQgb25seSBmb3IgYW4gSW1tdXRhYmxlIFJlY29yZCBpbnN0YW5jZVxuXHQvLyB3aGljaCB3YXMgY29uc3RydWN0ZWQgd2l0aCBhIHNlY29uZCBvcHRpb25hbCBkZXNjcmlwdGl2ZSBuYW1lIGFyZ1xuXHRjb25zdCBuYW1lID0gZ2V0SW1tdXRhYmxlTmFtZSh2YWwuX25hbWUgfHwgXCJSZWNvcmRcIik7XG5cdHJldHVybiArK2RlcHRoID4gY29uZmlnLm1heERlcHRoID8gcHJpbnRBc0xlYWYobmFtZSkgOiBgJHtuYW1lICsgU1BBQ0V9eyR7cHJpbnRJdGVyYXRvckVudHJpZXMoZ2V0UmVjb3JkRW50cmllcyh2YWwpLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcil9fWA7XG59XG5mdW5jdGlvbiBwcmludEltbXV0YWJsZVNlcSh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSB7XG5cdGNvbnN0IG5hbWUgPSBnZXRJbW11dGFibGVOYW1lKFwiU2VxXCIpO1xuXHRpZiAoKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aCkge1xuXHRcdHJldHVybiBwcmludEFzTGVhZihuYW1lKTtcblx0fVxuXHRpZiAodmFsW0lTX0tFWUVEX1NFTlRJTkVMXSkge1xuXHRcdHJldHVybiBgJHtuYW1lICsgU1BBQ0V9eyR7dmFsLl9pdGVyIHx8IHZhbC5fb2JqZWN0ID8gcHJpbnRJdGVyYXRvckVudHJpZXModmFsLmVudHJpZXMoKSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpIDogTEFaWX19YDtcblx0fVxuXHRyZXR1cm4gYCR7bmFtZSArIFNQQUNFfVske3ZhbC5faXRlciB8fCB2YWwuX2FycmF5IHx8IHZhbC5fY29sbGVjdGlvbiB8fCB2YWwuX2l0ZXJhYmxlID8gcHJpbnRJdGVyYXRvclZhbHVlcyh2YWwudmFsdWVzKCksIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA6IExBWll9XWA7XG59XG5mdW5jdGlvbiBwcmludEltbXV0YWJsZVZhbHVlcyh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyLCB0eXBlKSB7XG5cdHJldHVybiArK2RlcHRoID4gY29uZmlnLm1heERlcHRoID8gcHJpbnRBc0xlYWYoZ2V0SW1tdXRhYmxlTmFtZSh0eXBlKSkgOiBgJHtnZXRJbW11dGFibGVOYW1lKHR5cGUpICsgU1BBQ0V9WyR7cHJpbnRJdGVyYXRvclZhbHVlcyh2YWwudmFsdWVzKCksIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKX1dYDtcbn1cbmNvbnN0IHNlcmlhbGl6ZSQyID0gKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcblx0aWYgKHZhbFtJU19NQVBfU0VOVElORUxdKSB7XG5cdFx0cmV0dXJuIHByaW50SW1tdXRhYmxlRW50cmllcyh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyLCB2YWxbSVNfT1JERVJFRF9TRU5USU5FTF0gPyBcIk9yZGVyZWRNYXBcIiA6IFwiTWFwXCIpO1xuXHR9XG5cdGlmICh2YWxbSVNfTElTVF9TRU5USU5FTF0pIHtcblx0XHRyZXR1cm4gcHJpbnRJbW11dGFibGVWYWx1ZXModmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlciwgXCJMaXN0XCIpO1xuXHR9XG5cdGlmICh2YWxbSVNfU0VUX1NFTlRJTkVMXSkge1xuXHRcdHJldHVybiBwcmludEltbXV0YWJsZVZhbHVlcyh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyLCB2YWxbSVNfT1JERVJFRF9TRU5USU5FTF0gPyBcIk9yZGVyZWRTZXRcIiA6IFwiU2V0XCIpO1xuXHR9XG5cdGlmICh2YWxbSVNfU1RBQ0tfU0VOVElORUxdKSB7XG5cdFx0cmV0dXJuIHByaW50SW1tdXRhYmxlVmFsdWVzKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIsIFwiU3RhY2tcIik7XG5cdH1cblx0aWYgKHZhbFtJU19TRVFfU0VOVElORUxdKSB7XG5cdFx0cmV0dXJuIHByaW50SW1tdXRhYmxlU2VxKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpO1xuXHR9XG5cdC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggaW1tdXRhYmxlIHYzIGFuZCB2NCwgbGV0IHJlY29yZCBiZSB0aGUgZGVmYXVsdC5cblx0cmV0dXJuIHByaW50SW1tdXRhYmxlUmVjb3JkKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpO1xufTtcbi8vIEV4cGxpY2l0bHkgY29tcGFyaW5nIHNlbnRpbmVsIHByb3BlcnRpZXMgdG8gdHJ1ZSBhdm9pZHMgZmFsc2UgcG9zaXRpdmVcbi8vIHdoZW4gbW9jayBpZGVudGl0eS1vYmotcHJveHkgcmV0dXJucyB0aGUga2V5IGFzIHRoZSB2YWx1ZSBmb3IgYW55IGtleS5cbmNvbnN0IHRlc3QkMiA9ICh2YWwpID0+IHZhbCAmJiAodmFsW0lTX0lURVJBQkxFX1NFTlRJTkVMXSA9PT0gdHJ1ZSB8fCB2YWxbSVNfUkVDT1JEX1NFTlRJTkVMXSA9PT0gdHJ1ZSk7XG5jb25zdCBwbHVnaW4kMiA9IHtcblx0c2VyaWFsaXplOiBzZXJpYWxpemUkMixcblx0dGVzdDogdGVzdCQyXG59O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyh4KSB7XG5cdHJldHVybiB4ICYmIHguX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgXCJkZWZhdWx0XCIpID8geFtcImRlZmF1bHRcIl0gOiB4O1xufVxuXG52YXIgcmVhY3RJcyQxID0ge2V4cG9ydHM6IHt9fTtcblxudmFyIHJlYWN0SXNfcHJvZHVjdGlvbiA9IHt9O1xuXG4vKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgaGFzUmVxdWlyZWRSZWFjdElzX3Byb2R1Y3Rpb247XG5cbmZ1bmN0aW9uIHJlcXVpcmVSZWFjdElzX3Byb2R1Y3Rpb24gKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRSZWFjdElzX3Byb2R1Y3Rpb24pIHJldHVybiByZWFjdElzX3Byb2R1Y3Rpb247XG5cdGhhc1JlcXVpcmVkUmVhY3RJc19wcm9kdWN0aW9uID0gMTtcblx0dmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxcblx0ICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG5cdCAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcblx0ICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuXHQgIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksXG5cdCAgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcblx0ICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcblx0ICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuXHQgIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG5cdCAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksXG5cdCAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG5cdCAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG5cdCAgUkVBQ1RfVklFV19UUkFOU0lUSU9OX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Qudmlld190cmFuc2l0aW9uXCIpLFxuXHQgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKTtcblx0ZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuXHQgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2Ygb2JqZWN0ICYmIG51bGwgIT09IG9iamVjdCkge1xuXHQgICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXHQgICAgc3dpdGNoICgkJHR5cGVvZikge1xuXHQgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcblx0ICAgICAgICBzd2l0Y2ggKCgob2JqZWN0ID0gb2JqZWN0LnR5cGUpLCBvYmplY3QpKSB7XG5cdCAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG5cdCAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG5cdCAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG5cdCAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG5cdCAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcblx0ICAgICAgICAgIGNhc2UgUkVBQ1RfVklFV19UUkFOU0lUSU9OX1RZUEU6XG5cdCAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG5cdCAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICBzd2l0Y2ggKCgob2JqZWN0ID0gb2JqZWN0ICYmIG9iamVjdC4kJHR5cGVvZiksIG9iamVjdCkpIHtcblx0ICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcblx0ICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG5cdCAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG5cdCAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuXHQgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG5cdCAgICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcblx0ICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG5cdCAgICB9XG5cdCAgfVxuXHR9XG5cdHJlYWN0SXNfcHJvZHVjdGlvbi5Db250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05TVU1FUl9UWVBFO1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcblx0cmVhY3RJc19wcm9kdWN0aW9uLkZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcblx0cmVhY3RJc19wcm9kdWN0aW9uLk1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG5cdHJlYWN0SXNfcHJvZHVjdGlvbi5Qb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcblx0cmVhY3RJc19wcm9kdWN0aW9uLlByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcblx0cmVhY3RJc19wcm9kdWN0aW9uLlN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uU3VzcGVuc2VMaXN0ID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uaXNDb250ZXh0Q29uc3VtZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05TVU1FUl9UWVBFO1xuXHR9O1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uaXNDb250ZXh0UHJvdmlkZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG5cdH07XG5cdHJlYWN0SXNfcHJvZHVjdGlvbi5pc0VsZW1lbnQgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgcmV0dXJuIChcblx0ICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvYmplY3QgJiZcblx0ICAgIG51bGwgIT09IG9iamVjdCAmJlxuXHQgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcblx0ICApO1xuXHR9O1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uaXNGb3J3YXJkUmVmID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHQgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcblx0fTtcblx0cmVhY3RJc19wcm9kdWN0aW9uLmlzRnJhZ21lbnQgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuXHR9O1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uaXNMYXp5ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHQgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xuXHR9O1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uaXNNZW1vID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHQgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xuXHR9O1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uaXNQb3J0YWwgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcblx0fTtcblx0cmVhY3RJc19wcm9kdWN0aW9uLmlzUHJvZmlsZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuXHR9O1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uaXNTdHJpY3RNb2RlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHQgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcblx0fTtcblx0cmVhY3RJc19wcm9kdWN0aW9uLmlzU3VzcGVuc2UgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuXHR9O1xuXHRyZWFjdElzX3Byb2R1Y3Rpb24uaXNTdXNwZW5zZUxpc3QgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG5cdH07XG5cdHJlYWN0SXNfcHJvZHVjdGlvbi5pc1ZhbGlkRWxlbWVudFR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuXHQgIHJldHVybiBcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSB8fFxuXHQgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSB8fFxuXHQgICAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fFxuXHQgICAgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fFxuXHQgICAgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fFxuXHQgICAgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fFxuXHQgICAgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8XG5cdCAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUgJiZcblx0ICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuXHQgICAgICAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8XG5cdCAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8XG5cdCAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8XG5cdCAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSB8fFxuXHQgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHxcblx0ICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFIHx8XG5cdCAgICAgICAgdm9pZCAwICE9PSB0eXBlLmdldE1vZHVsZUlkKSlcblx0ICAgID8gdHJ1ZVxuXHQgICAgOiBmYWxzZTtcblx0fTtcblx0cmVhY3RJc19wcm9kdWN0aW9uLnR5cGVPZiA9IHR5cGVPZjtcblx0cmV0dXJuIHJlYWN0SXNfcHJvZHVjdGlvbjtcbn1cblxudmFyIGhhc1JlcXVpcmVkUmVhY3RJcyQxO1xuXG5mdW5jdGlvbiByZXF1aXJlUmVhY3RJcyQxICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkUmVhY3RJcyQxKSByZXR1cm4gcmVhY3RJcyQxLmV4cG9ydHM7XG5cdGhhc1JlcXVpcmVkUmVhY3RJcyQxID0gMTtcblxuXHR7XG5cdCAgcmVhY3RJcyQxLmV4cG9ydHMgPSByZXF1aXJlUmVhY3RJc19wcm9kdWN0aW9uKCk7XG5cdH1cblx0cmV0dXJuIHJlYWN0SXMkMS5leHBvcnRzO1xufVxuXG52YXIgcmVhY3RJc0V4cG9ydHMkMSA9IHJlcXVpcmVSZWFjdElzJDEoKTtcbnZhciBpbmRleCQxID0gLypAX19QVVJFX18qL2dldERlZmF1bHRFeHBvcnRGcm9tQ2pzKHJlYWN0SXNFeHBvcnRzJDEpO1xuXG52YXIgUmVhY3RJczE5ID0gLyojX19QVVJFX18qL19tZXJnZU5hbWVzcGFjZXMoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGRlZmF1bHQ6IGluZGV4JDFcbn0sIFtyZWFjdElzRXhwb3J0cyQxXSk7XG5cbnZhciByZWFjdElzID0ge2V4cG9ydHM6IHt9fTtcblxudmFyIHJlYWN0SXNfcHJvZHVjdGlvbl9taW4gPSB7fTtcblxuLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgaGFzUmVxdWlyZWRSZWFjdElzX3Byb2R1Y3Rpb25fbWluO1xuXG5mdW5jdGlvbiByZXF1aXJlUmVhY3RJc19wcm9kdWN0aW9uX21pbiAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZFJlYWN0SXNfcHJvZHVjdGlvbl9taW4pIHJldHVybiByZWFjdElzX3Byb2R1Y3Rpb25fbWluO1xuXHRoYXNSZXF1aXJlZFJlYWN0SXNfcHJvZHVjdGlvbl9taW4gPSAxO1xudmFyIGI9U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksYz1TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLGQ9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLGU9U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLGY9U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLGc9U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpLGg9U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksaz1TeW1ib2wuZm9yKFwicmVhY3Quc2VydmVyX2NvbnRleHRcIiksbD1TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksbT1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksbj1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxwPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLHE9U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksdD1TeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpLHU7dT1TeW1ib2wuZm9yKFwicmVhY3QubW9kdWxlLnJlZmVyZW5jZVwiKTtcblx0ZnVuY3Rpb24gdihhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgcj1hLiQkdHlwZW9mO3N3aXRjaChyKXtjYXNlIGI6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgZDpjYXNlIGY6Y2FzZSBlOmNhc2UgbTpjYXNlIG46cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIGg6Y2FzZSBsOmNhc2UgcTpjYXNlIHA6Y2FzZSBnOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuIHJ9fWNhc2UgYzpyZXR1cm4gcn19fXJlYWN0SXNfcHJvZHVjdGlvbl9taW4uQ29udGV4dENvbnN1bWVyPWg7cmVhY3RJc19wcm9kdWN0aW9uX21pbi5Db250ZXh0UHJvdmlkZXI9ZztyZWFjdElzX3Byb2R1Y3Rpb25fbWluLkVsZW1lbnQ9YjtyZWFjdElzX3Byb2R1Y3Rpb25fbWluLkZvcndhcmRSZWY9bDtyZWFjdElzX3Byb2R1Y3Rpb25fbWluLkZyYWdtZW50PWQ7cmVhY3RJc19wcm9kdWN0aW9uX21pbi5MYXp5PXE7cmVhY3RJc19wcm9kdWN0aW9uX21pbi5NZW1vPXA7cmVhY3RJc19wcm9kdWN0aW9uX21pbi5Qb3J0YWw9YztyZWFjdElzX3Byb2R1Y3Rpb25fbWluLlByb2ZpbGVyPWY7cmVhY3RJc19wcm9kdWN0aW9uX21pbi5TdHJpY3RNb2RlPWU7cmVhY3RJc19wcm9kdWN0aW9uX21pbi5TdXNwZW5zZT1tO1xuXHRyZWFjdElzX3Byb2R1Y3Rpb25fbWluLlN1c3BlbnNlTGlzdD1uO3JlYWN0SXNfcHJvZHVjdGlvbl9taW4uaXNBc3luY01vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gIGZhbHNlfTtyZWFjdElzX3Byb2R1Y3Rpb25fbWluLmlzQ29uY3VycmVudE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gIGZhbHNlfTtyZWFjdElzX3Byb2R1Y3Rpb25fbWluLmlzQ29udGV4dENvbnN1bWVyPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09aH07cmVhY3RJc19wcm9kdWN0aW9uX21pbi5pc0NvbnRleHRQcm92aWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWd9O3JlYWN0SXNfcHJvZHVjdGlvbl9taW4uaXNFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Yn07cmVhY3RJc19wcm9kdWN0aW9uX21pbi5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1sfTtyZWFjdElzX3Byb2R1Y3Rpb25fbWluLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1kfTtyZWFjdElzX3Byb2R1Y3Rpb25fbWluLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PXF9O3JlYWN0SXNfcHJvZHVjdGlvbl9taW4uaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09cH07XG5cdHJlYWN0SXNfcHJvZHVjdGlvbl9taW4uaXNQb3J0YWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1jfTtyZWFjdElzX3Byb2R1Y3Rpb25fbWluLmlzUHJvZmlsZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1mfTtyZWFjdElzX3Byb2R1Y3Rpb25fbWluLmlzU3RyaWN0TW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWV9O3JlYWN0SXNfcHJvZHVjdGlvbl9taW4uaXNTdXNwZW5zZT1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PW19O3JlYWN0SXNfcHJvZHVjdGlvbl9taW4uaXNTdXNwZW5zZUxpc3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1ufTtcblx0cmVhY3RJc19wcm9kdWN0aW9uX21pbi5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuIFwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1kfHxhPT09Znx8YT09PWV8fGE9PT1tfHxhPT09bnx8YT09PXR8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09cXx8YS4kJHR5cGVvZj09PXB8fGEuJCR0eXBlb2Y9PT1nfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWx8fGEuJCR0eXBlb2Y9PT11fHx2b2lkIDAhPT1hLmdldE1vZHVsZUlkKT90cnVlOmZhbHNlfTtyZWFjdElzX3Byb2R1Y3Rpb25fbWluLnR5cGVPZj12O1xuXHRyZXR1cm4gcmVhY3RJc19wcm9kdWN0aW9uX21pbjtcbn1cblxudmFyIGhhc1JlcXVpcmVkUmVhY3RJcztcblxuZnVuY3Rpb24gcmVxdWlyZVJlYWN0SXMgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRSZWFjdElzKSByZXR1cm4gcmVhY3RJcy5leHBvcnRzO1xuXHRoYXNSZXF1aXJlZFJlYWN0SXMgPSAxO1xuXG5cdHtcblx0ICByZWFjdElzLmV4cG9ydHMgPSByZXF1aXJlUmVhY3RJc19wcm9kdWN0aW9uX21pbigpO1xuXHR9XG5cdHJldHVybiByZWFjdElzLmV4cG9ydHM7XG59XG5cbnZhciByZWFjdElzRXhwb3J0cyA9IHJlcXVpcmVSZWFjdElzKCk7XG52YXIgaW5kZXggPSAvKkBfX1BVUkVfXyovZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMocmVhY3RJc0V4cG9ydHMpO1xuXG52YXIgUmVhY3RJczE4ID0gLyojX19QVVJFX18qL19tZXJnZU5hbWVzcGFjZXMoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGRlZmF1bHQ6IGluZGV4XG59LCBbcmVhY3RJc0V4cG9ydHNdKTtcblxuY29uc3QgcmVhY3RJc01ldGhvZHMgPSBbXG5cdFwiaXNBc3luY01vZGVcIixcblx0XCJpc0NvbmN1cnJlbnRNb2RlXCIsXG5cdFwiaXNDb250ZXh0Q29uc3VtZXJcIixcblx0XCJpc0NvbnRleHRQcm92aWRlclwiLFxuXHRcImlzRWxlbWVudFwiLFxuXHRcImlzRm9yd2FyZFJlZlwiLFxuXHRcImlzRnJhZ21lbnRcIixcblx0XCJpc0xhenlcIixcblx0XCJpc01lbW9cIixcblx0XCJpc1BvcnRhbFwiLFxuXHRcImlzUHJvZmlsZXJcIixcblx0XCJpc1N0cmljdE1vZGVcIixcblx0XCJpc1N1c3BlbnNlXCIsXG5cdFwiaXNTdXNwZW5zZUxpc3RcIixcblx0XCJpc1ZhbGlkRWxlbWVudFR5cGVcIlxuXTtcbmNvbnN0IFJlYWN0SXMgPSBPYmplY3QuZnJvbUVudHJpZXMocmVhY3RJc01ldGhvZHMubWFwKChtKSA9PiBbbSwgKHYpID0+IFJlYWN0SXMxOFttXSh2KSB8fCBSZWFjdElzMTlbbV0odildKSk7XG4vLyBHaXZlbiBlbGVtZW50LnByb3BzLmNoaWxkcmVuLCBvciBzdWJ0cmVlIGR1cmluZyByZWN1cnNpdmUgdHJhdmVyc2FsLFxuLy8gcmV0dXJuIGZsYXR0ZW5lZCBhcnJheSBvZiBjaGlsZHJlbi5cbmZ1bmN0aW9uIGdldENoaWxkcmVuKGFyZywgY2hpbGRyZW4gPSBbXSkge1xuXHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFyZykge1xuXHRcdFx0Z2V0Q2hpbGRyZW4oaXRlbSwgY2hpbGRyZW4pO1xuXHRcdH1cblx0fSBlbHNlIGlmIChhcmcgIT0gbnVsbCAmJiBhcmcgIT09IGZhbHNlICYmIGFyZyAhPT0gXCJcIikge1xuXHRcdGNoaWxkcmVuLnB1c2goYXJnKTtcblx0fVxuXHRyZXR1cm4gY2hpbGRyZW47XG59XG5mdW5jdGlvbiBnZXRUeXBlKGVsZW1lbnQpIHtcblx0Y29uc3QgdHlwZSA9IGVsZW1lbnQudHlwZTtcblx0aWYgKHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIHR5cGU7XG5cdH1cblx0aWYgKHR5cGVvZiB0eXBlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRyZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgXCJVbmtub3duXCI7XG5cdH1cblx0aWYgKFJlYWN0SXMuaXNGcmFnbWVudChlbGVtZW50KSkge1xuXHRcdHJldHVybiBcIlJlYWN0LkZyYWdtZW50XCI7XG5cdH1cblx0aWYgKFJlYWN0SXMuaXNTdXNwZW5zZShlbGVtZW50KSkge1xuXHRcdHJldHVybiBcIlJlYWN0LlN1c3BlbnNlXCI7XG5cdH1cblx0aWYgKHR5cGVvZiB0eXBlID09PSBcIm9iamVjdFwiICYmIHR5cGUgIT09IG51bGwpIHtcblx0XHRpZiAoUmVhY3RJcy5pc0NvbnRleHRQcm92aWRlcihlbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuIFwiQ29udGV4dC5Qcm92aWRlclwiO1xuXHRcdH1cblx0XHRpZiAoUmVhY3RJcy5pc0NvbnRleHRDb25zdW1lcihlbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuIFwiQ29udGV4dC5Db25zdW1lclwiO1xuXHRcdH1cblx0XHRpZiAoUmVhY3RJcy5pc0ZvcndhcmRSZWYoZWxlbWVudCkpIHtcblx0XHRcdGlmICh0eXBlLmRpc3BsYXlOYW1lKSB7XG5cdFx0XHRcdHJldHVybiB0eXBlLmRpc3BsYXlOYW1lO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZnVuY3Rpb25OYW1lID0gdHlwZS5yZW5kZXIuZGlzcGxheU5hbWUgfHwgdHlwZS5yZW5kZXIubmFtZSB8fCBcIlwiO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uTmFtZSA9PT0gXCJcIiA/IFwiRm9yd2FyZFJlZlwiIDogYEZvcndhcmRSZWYoJHtmdW5jdGlvbk5hbWV9KWA7XG5cdFx0fVxuXHRcdGlmIChSZWFjdElzLmlzTWVtbyhlbGVtZW50KSkge1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25OYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLnR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS50eXBlLm5hbWUgfHwgXCJcIjtcblx0XHRcdHJldHVybiBmdW5jdGlvbk5hbWUgPT09IFwiXCIgPyBcIk1lbW9cIiA6IGBNZW1vKCR7ZnVuY3Rpb25OYW1lfSlgO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gXCJVTkRFRklORURcIjtcbn1cbmZ1bmN0aW9uIGdldFByb3BLZXlzJDEoZWxlbWVudCkge1xuXHRjb25zdCB7IHByb3BzIH0gPSBlbGVtZW50O1xuXHRyZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IFwiY2hpbGRyZW5cIiAmJiBwcm9wc1trZXldICE9PSB1bmRlZmluZWQpLnNvcnQoKTtcbn1cbmNvbnN0IHNlcmlhbGl6ZSQxID0gKGVsZW1lbnQsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA9PiArK2RlcHRoID4gY29uZmlnLm1heERlcHRoID8gcHJpbnRFbGVtZW50QXNMZWFmKGdldFR5cGUoZWxlbWVudCksIGNvbmZpZykgOiBwcmludEVsZW1lbnQoZ2V0VHlwZShlbGVtZW50KSwgcHJpbnRQcm9wcyhnZXRQcm9wS2V5cyQxKGVsZW1lbnQpLCBlbGVtZW50LnByb3BzLCBjb25maWcsIGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudCwgZGVwdGgsIHJlZnMsIHByaW50ZXIpLCBwcmludENoaWxkcmVuKGdldENoaWxkcmVuKGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pLCBjb25maWcsIGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudCwgZGVwdGgsIHJlZnMsIHByaW50ZXIpLCBjb25maWcsIGluZGVudGF0aW9uKTtcbmNvbnN0IHRlc3QkMSA9ICh2YWwpID0+IHZhbCAhPSBudWxsICYmIFJlYWN0SXMuaXNFbGVtZW50KHZhbCk7XG5jb25zdCBwbHVnaW4kMSA9IHtcblx0c2VyaWFsaXplOiBzZXJpYWxpemUkMSxcblx0dGVzdDogdGVzdCQxXG59O1xuXG5jb25zdCB0ZXN0U3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5mb3IgPyBTeW1ib2wuZm9yKFwicmVhY3QudGVzdC5qc29uXCIpIDogMjQ1ODMwNDg3O1xuZnVuY3Rpb24gZ2V0UHJvcEtleXMob2JqZWN0KSB7XG5cdGNvbnN0IHsgcHJvcHMgfSA9IG9iamVjdDtcblx0cmV0dXJuIHByb3BzID8gT2JqZWN0LmtleXMocHJvcHMpLmZpbHRlcigoa2V5KSA9PiBwcm9wc1trZXldICE9PSB1bmRlZmluZWQpLnNvcnQoKSA6IFtdO1xufVxuY29uc3Qgc2VyaWFsaXplID0gKG9iamVjdCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+ICsrZGVwdGggPiBjb25maWcubWF4RGVwdGggPyBwcmludEVsZW1lbnRBc0xlYWYob2JqZWN0LnR5cGUsIGNvbmZpZykgOiBwcmludEVsZW1lbnQob2JqZWN0LnR5cGUsIG9iamVjdC5wcm9wcyA/IHByaW50UHJvcHMoZ2V0UHJvcEtleXMob2JqZWN0KSwgb2JqZWN0LnByb3BzLCBjb25maWcsIGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudCwgZGVwdGgsIHJlZnMsIHByaW50ZXIpIDogXCJcIiwgb2JqZWN0LmNoaWxkcmVuID8gcHJpbnRDaGlsZHJlbihvYmplY3QuY2hpbGRyZW4sIGNvbmZpZywgaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50LCBkZXB0aCwgcmVmcywgcHJpbnRlcikgOiBcIlwiLCBjb25maWcsIGluZGVudGF0aW9uKTtcbmNvbnN0IHRlc3QgPSAodmFsKSA9PiB2YWwgJiYgdmFsLiQkdHlwZW9mID09PSB0ZXN0U3ltYm9sO1xuY29uc3QgcGx1Z2luID0ge1xuXHRzZXJpYWxpemUsXG5cdHRlc3Rcbn07XG5cbmNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmNvbnN0IHRvSVNPU3RyaW5nID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5jb25zdCBlcnJvclRvU3RyaW5nID0gRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nO1xuY29uc3QgcmVnRXhwVG9TdHJpbmcgPSBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4qIEV4cGxpY2l0bHkgY29tcGFyaW5nIHR5cGVvZiBjb25zdHJ1Y3RvciB0byBmdW5jdGlvbiBhdm9pZHMgdW5kZWZpbmVkIGFzIG5hbWVcbiogd2hlbiBtb2NrIGlkZW50aXR5LW9iai1wcm94eSByZXR1cm5zIHRoZSBrZXkgYXMgdGhlIHZhbHVlIGZvciBhbnkga2V5LlxuKi9cbmZ1bmN0aW9uIGdldENvbnN0cnVjdG9yTmFtZSh2YWwpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWwuY29uc3RydWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiB2YWwuY29uc3RydWN0b3IubmFtZSB8fCBcIk9iamVjdFwiO1xufVxuLyoqIElzIHZhbCBpcyBlcXVhbCB0byBnbG9iYWwgd2luZG93IG9iamVjdD8gV29ya3MgZXZlbiBpZiBpdCBkb2VzIG5vdCBleGlzdCA6KSAqL1xuZnVuY3Rpb24gaXNXaW5kb3codmFsKSB7XG5cdHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbCA9PT0gd2luZG93O1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5jb25zdCBTWU1CT0xfUkVHRVhQID0gL15TeW1ib2xcXCgoLiopXFwpKC4qKSQvO1xuY29uc3QgTkVXTElORV9SRUdFWFAgPSAvXFxuL2c7XG5jbGFzcyBQcmV0dHlGb3JtYXRQbHVnaW5FcnJvciBleHRlbmRzIEVycm9yIHtcblx0Y29uc3RydWN0b3IobWVzc2FnZSwgc3RhY2spIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLnN0YWNrID0gc3RhY2s7XG5cdFx0dGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuXHR9XG59XG5mdW5jdGlvbiBpc1RvU3RyaW5nZWRBcnJheVR5cGUodG9TdHJpbmdlZCkge1xuXHRyZXR1cm4gdG9TdHJpbmdlZCA9PT0gXCJbb2JqZWN0IEFycmF5XVwiIHx8IHRvU3RyaW5nZWQgPT09IFwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIiB8fCB0b1N0cmluZ2VkID09PSBcIltvYmplY3QgRGF0YVZpZXddXCIgfHwgdG9TdHJpbmdlZCA9PT0gXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIiB8fCB0b1N0cmluZ2VkID09PSBcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiIHx8IHRvU3RyaW5nZWQgPT09IFwiW29iamVjdCBJbnQ4QXJyYXldXCIgfHwgdG9TdHJpbmdlZCA9PT0gXCJbb2JqZWN0IEludDE2QXJyYXldXCIgfHwgdG9TdHJpbmdlZCA9PT0gXCJbb2JqZWN0IEludDMyQXJyYXldXCIgfHwgdG9TdHJpbmdlZCA9PT0gXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCIgfHwgdG9TdHJpbmdlZCA9PT0gXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiIHx8IHRvU3RyaW5nZWQgPT09IFwiW29iamVjdCBVaW50MTZBcnJheV1cIiB8fCB0b1N0cmluZ2VkID09PSBcIltvYmplY3QgVWludDMyQXJyYXldXCI7XG59XG5mdW5jdGlvbiBwcmludE51bWJlcih2YWwpIHtcblx0cmV0dXJuIE9iamVjdC5pcyh2YWwsIC0wKSA/IFwiLTBcIiA6IFN0cmluZyh2YWwpO1xufVxuZnVuY3Rpb24gcHJpbnRCaWdJbnQodmFsKSB7XG5cdHJldHVybiBTdHJpbmcoYCR7dmFsfW5gKTtcbn1cbmZ1bmN0aW9uIHByaW50RnVuY3Rpb24odmFsLCBwcmludEZ1bmN0aW9uTmFtZSkge1xuXHRpZiAoIXByaW50RnVuY3Rpb25OYW1lKSB7XG5cdFx0cmV0dXJuIFwiW0Z1bmN0aW9uXVwiO1xuXHR9XG5cdHJldHVybiBgW0Z1bmN0aW9uICR7dmFsLm5hbWUgfHwgXCJhbm9ueW1vdXNcIn1dYDtcbn1cbmZ1bmN0aW9uIHByaW50U3ltYm9sKHZhbCkge1xuXHRyZXR1cm4gU3RyaW5nKHZhbCkucmVwbGFjZShTWU1CT0xfUkVHRVhQLCBcIlN5bWJvbCgkMSlcIik7XG59XG5mdW5jdGlvbiBwcmludEVycm9yKHZhbCkge1xuXHRyZXR1cm4gYFske2Vycm9yVG9TdHJpbmcuY2FsbCh2YWwpfV1gO1xufVxuLyoqXG4qIFRoZSBmaXJzdCBwb3J0IG9mIGNhbGwgZm9yIHByaW50aW5nIGFuIG9iamVjdCwgaGFuZGxlcyBtb3N0IG9mIHRoZVxuKiBkYXRhLXR5cGVzIGluIEpTLlxuKi9cbmZ1bmN0aW9uIHByaW50QmFzaWNWYWx1ZSh2YWwsIHByaW50RnVuY3Rpb25OYW1lLCBlc2NhcGVSZWdleCwgZXNjYXBlU3RyaW5nKSB7XG5cdGlmICh2YWwgPT09IHRydWUgfHwgdmFsID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBgJHt2YWx9YDtcblx0fVxuXHRpZiAodmFsID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gXCJ1bmRlZmluZWRcIjtcblx0fVxuXHRpZiAodmFsID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIFwibnVsbFwiO1xuXHR9XG5cdGNvbnN0IHR5cGVPZiA9IHR5cGVvZiB2YWw7XG5cdGlmICh0eXBlT2YgPT09IFwibnVtYmVyXCIpIHtcblx0XHRyZXR1cm4gcHJpbnROdW1iZXIodmFsKTtcblx0fVxuXHRpZiAodHlwZU9mID09PSBcImJpZ2ludFwiKSB7XG5cdFx0cmV0dXJuIHByaW50QmlnSW50KHZhbCk7XG5cdH1cblx0aWYgKHR5cGVPZiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGlmIChlc2NhcGVTdHJpbmcpIHtcblx0XHRcdHJldHVybiBgXCIke3ZhbC5yZXBsYWNlQWxsKC9cInxcXFxcL2csIFwiXFxcXCQmXCIpfVwiYDtcblx0XHR9XG5cdFx0cmV0dXJuIGBcIiR7dmFsfVwiYDtcblx0fVxuXHRpZiAodHlwZU9mID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRyZXR1cm4gcHJpbnRGdW5jdGlvbih2YWwsIHByaW50RnVuY3Rpb25OYW1lKTtcblx0fVxuXHRpZiAodHlwZU9mID09PSBcInN5bWJvbFwiKSB7XG5cdFx0cmV0dXJuIHByaW50U3ltYm9sKHZhbCk7XG5cdH1cblx0Y29uc3QgdG9TdHJpbmdlZCA9IHRvU3RyaW5nLmNhbGwodmFsKTtcblx0aWYgKHRvU3RyaW5nZWQgPT09IFwiW29iamVjdCBXZWFrTWFwXVwiKSB7XG5cdFx0cmV0dXJuIFwiV2Vha01hcCB7fVwiO1xuXHR9XG5cdGlmICh0b1N0cmluZ2VkID09PSBcIltvYmplY3QgV2Vha1NldF1cIikge1xuXHRcdHJldHVybiBcIldlYWtTZXQge31cIjtcblx0fVxuXHRpZiAodG9TdHJpbmdlZCA9PT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiIHx8IHRvU3RyaW5nZWQgPT09IFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIikge1xuXHRcdHJldHVybiBwcmludEZ1bmN0aW9uKHZhbCwgcHJpbnRGdW5jdGlvbk5hbWUpO1xuXHR9XG5cdGlmICh0b1N0cmluZ2VkID09PSBcIltvYmplY3QgU3ltYm9sXVwiKSB7XG5cdFx0cmV0dXJuIHByaW50U3ltYm9sKHZhbCk7XG5cdH1cblx0aWYgKHRvU3RyaW5nZWQgPT09IFwiW29iamVjdCBEYXRlXVwiKSB7XG5cdFx0cmV0dXJuIE51bWJlci5pc05hTigrdmFsKSA/IFwiRGF0ZSB7IE5hTiB9XCIgOiB0b0lTT1N0cmluZy5jYWxsKHZhbCk7XG5cdH1cblx0aWYgKHRvU3RyaW5nZWQgPT09IFwiW29iamVjdCBFcnJvcl1cIikge1xuXHRcdHJldHVybiBwcmludEVycm9yKHZhbCk7XG5cdH1cblx0aWYgKHRvU3RyaW5nZWQgPT09IFwiW29iamVjdCBSZWdFeHBdXCIpIHtcblx0XHRpZiAoZXNjYXBlUmVnZXgpIHtcblx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JlZ0V4cC5lc2NhcGUvYmxvYi9tYWluL3BvbHlmaWxsLmpzXG5cdFx0XHRyZXR1cm4gcmVnRXhwVG9TdHJpbmcuY2FsbCh2YWwpLnJlcGxhY2VBbGwoL1skKCkqKy4/W1xcXFxcXF1ee3x9XS9nLCBcIlxcXFwkJlwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlZ0V4cFRvU3RyaW5nLmNhbGwodmFsKTtcblx0fVxuXHRpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRyZXR1cm4gcHJpbnRFcnJvcih2YWwpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufVxuLyoqXG4qIEhhbmRsZXMgbW9yZSBjb21wbGV4IG9iamVjdHMgKCBzdWNoIGFzIG9iamVjdHMgd2l0aCBjaXJjdWxhciByZWZlcmVuY2VzLlxuKiBtYXBzIGFuZCBzZXRzIGV0YyApXG4qL1xuZnVuY3Rpb24gcHJpbnRDb21wbGV4VmFsdWUodmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgaGFzQ2FsbGVkVG9KU09OKSB7XG5cdGlmIChyZWZzLmluY2x1ZGVzKHZhbCkpIHtcblx0XHRyZXR1cm4gXCJbQ2lyY3VsYXJdXCI7XG5cdH1cblx0cmVmcyA9IFsuLi5yZWZzXTtcblx0cmVmcy5wdXNoKHZhbCk7XG5cdGNvbnN0IGhpdE1heERlcHRoID0gKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aDtcblx0Y29uc3QgbWluID0gY29uZmlnLm1pbjtcblx0aWYgKGNvbmZpZy5jYWxsVG9KU09OICYmICFoaXRNYXhEZXB0aCAmJiB2YWwudG9KU09OICYmIHR5cGVvZiB2YWwudG9KU09OID09PSBcImZ1bmN0aW9uXCIgJiYgIWhhc0NhbGxlZFRvSlNPTikge1xuXHRcdHJldHVybiBwcmludGVyKHZhbC50b0pTT04oKSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHRydWUpO1xuXHR9XG5cdGNvbnN0IHRvU3RyaW5nZWQgPSB0b1N0cmluZy5jYWxsKHZhbCk7XG5cdGlmICh0b1N0cmluZ2VkID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSB7XG5cdFx0cmV0dXJuIGhpdE1heERlcHRoID8gXCJbQXJndW1lbnRzXVwiIDogYCR7bWluID8gXCJcIiA6IFwiQXJndW1lbnRzIFwifVske3ByaW50TGlzdEl0ZW1zKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpfV1gO1xuXHR9XG5cdGlmIChpc1RvU3RyaW5nZWRBcnJheVR5cGUodG9TdHJpbmdlZCkpIHtcblx0XHRyZXR1cm4gaGl0TWF4RGVwdGggPyBgWyR7dmFsLmNvbnN0cnVjdG9yLm5hbWV9XWAgOiBgJHttaW4gPyBcIlwiIDogIWNvbmZpZy5wcmludEJhc2ljUHJvdG90eXBlICYmIHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIkFycmF5XCIgPyBcIlwiIDogYCR7dmFsLmNvbnN0cnVjdG9yLm5hbWV9IGB9WyR7cHJpbnRMaXN0SXRlbXModmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcil9XWA7XG5cdH1cblx0aWYgKHRvU3RyaW5nZWQgPT09IFwiW29iamVjdCBNYXBdXCIpIHtcblx0XHRyZXR1cm4gaGl0TWF4RGVwdGggPyBcIltNYXBdXCIgOiBgTWFwIHske3ByaW50SXRlcmF0b3JFbnRyaWVzKHZhbC5lbnRyaWVzKCksIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyLCBcIiA9PiBcIil9fWA7XG5cdH1cblx0aWYgKHRvU3RyaW5nZWQgPT09IFwiW29iamVjdCBTZXRdXCIpIHtcblx0XHRyZXR1cm4gaGl0TWF4RGVwdGggPyBcIltTZXRdXCIgOiBgU2V0IHske3ByaW50SXRlcmF0b3JWYWx1ZXModmFsLnZhbHVlcygpLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcil9fWA7XG5cdH1cblx0Ly8gQXZvaWQgZmFpbHVyZSB0byBzZXJpYWxpemUgZ2xvYmFsIHdpbmRvdyBvYmplY3QgaW4ganNkb20gdGVzdCBlbnZpcm9ubWVudC5cblx0Ly8gRm9yIGV4YW1wbGUsIG5vdCBldmVuIHJlbGV2YW50IGlmIHdpbmRvdyBpcyBwcm9wIG9mIFJlYWN0IGVsZW1lbnQuXG5cdHJldHVybiBoaXRNYXhEZXB0aCB8fCBpc1dpbmRvdyh2YWwpID8gYFske2dldENvbnN0cnVjdG9yTmFtZSh2YWwpfV1gIDogYCR7bWluID8gXCJcIiA6ICFjb25maWcucHJpbnRCYXNpY1Byb3RvdHlwZSAmJiBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsKSA9PT0gXCJPYmplY3RcIiA/IFwiXCIgOiBgJHtnZXRDb25zdHJ1Y3Rvck5hbWUodmFsKX0gYH17JHtwcmludE9iamVjdFByb3BlcnRpZXModmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcil9fWA7XG59XG5jb25zdCBFcnJvclBsdWdpbiA9IHtcblx0dGVzdDogKHZhbCkgPT4gdmFsICYmIHZhbCBpbnN0YW5jZW9mIEVycm9yLFxuXHRzZXJpYWxpemUodmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikge1xuXHRcdGlmIChyZWZzLmluY2x1ZGVzKHZhbCkpIHtcblx0XHRcdHJldHVybiBcIltDaXJjdWxhcl1cIjtcblx0XHR9XG5cdFx0cmVmcyA9IFsuLi5yZWZzLCB2YWxdO1xuXHRcdGNvbnN0IGhpdE1heERlcHRoID0gKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aDtcblx0XHRjb25zdCB7IG1lc3NhZ2UsIGNhdXNlLCAuLi5yZXN0IH0gPSB2YWw7XG5cdFx0Y29uc3QgZW50cmllcyA9IHtcblx0XHRcdG1lc3NhZ2UsXG5cdFx0XHQuLi50eXBlb2YgY2F1c2UgIT09IFwidW5kZWZpbmVkXCIgPyB7IGNhdXNlIH0gOiB7fSxcblx0XHRcdC4uLnZhbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZUVycm9yID8geyBlcnJvcnM6IHZhbC5lcnJvcnMgfSA6IHt9LFxuXHRcdFx0Li4ucmVzdFxuXHRcdH07XG5cdFx0Y29uc3QgbmFtZSA9IHZhbC5uYW1lICE9PSBcIkVycm9yXCIgPyB2YWwubmFtZSA6IGdldENvbnN0cnVjdG9yTmFtZSh2YWwpO1xuXHRcdHJldHVybiBoaXRNYXhEZXB0aCA/IGBbJHtuYW1lfV1gIDogYCR7bmFtZX0geyR7cHJpbnRJdGVyYXRvckVudHJpZXMoT2JqZWN0LmVudHJpZXMoZW50cmllcykudmFsdWVzKCksIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKX19YDtcblx0fVxufTtcbmZ1bmN0aW9uIGlzTmV3UGx1Z2luKHBsdWdpbikge1xuXHRyZXR1cm4gcGx1Z2luLnNlcmlhbGl6ZSAhPSBudWxsO1xufVxuZnVuY3Rpb24gcHJpbnRQbHVnaW4ocGx1Z2luLCB2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzKSB7XG5cdGxldCBwcmludGVkO1xuXHR0cnkge1xuXHRcdHByaW50ZWQgPSBpc05ld1BsdWdpbihwbHVnaW4pID8gcGx1Z2luLnNlcmlhbGl6ZSh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA6IHBsdWdpbi5wcmludCh2YWwsICh2YWxDaGlsZCkgPT4gcHJpbnRlcih2YWxDaGlsZCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMpLCAoc3RyKSA9PiB7XG5cdFx0XHRjb25zdCBpbmRlbnRhdGlvbk5leHQgPSBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQ7XG5cdFx0XHRyZXR1cm4gaW5kZW50YXRpb25OZXh0ICsgc3RyLnJlcGxhY2VBbGwoTkVXTElORV9SRUdFWFAsIGBcXG4ke2luZGVudGF0aW9uTmV4dH1gKTtcblx0XHR9LCB7XG5cdFx0XHRlZGdlU3BhY2luZzogY29uZmlnLnNwYWNpbmdPdXRlcixcblx0XHRcdG1pbjogY29uZmlnLm1pbixcblx0XHRcdHNwYWNpbmc6IGNvbmZpZy5zcGFjaW5nSW5uZXJcblx0XHR9LCBjb25maWcuY29sb3JzKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHR0aHJvdyBuZXcgUHJldHR5Rm9ybWF0UGx1Z2luRXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2spO1xuXHR9XG5cdGlmICh0eXBlb2YgcHJpbnRlZCAhPT0gXCJzdHJpbmdcIikge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHByZXR0eS1mb3JtYXQ6IFBsdWdpbiBtdXN0IHJldHVybiB0eXBlIFwic3RyaW5nXCIgYnV0IGluc3RlYWQgcmV0dXJuZWQgXCIke3R5cGVvZiBwcmludGVkfVwiLmApO1xuXHR9XG5cdHJldHVybiBwcmludGVkO1xufVxuZnVuY3Rpb24gZmluZFBsdWdpbihwbHVnaW5zLCB2YWwpIHtcblx0Zm9yIChjb25zdCBwbHVnaW4gb2YgcGx1Z2lucykge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAocGx1Z2luLnRlc3QodmFsKSkge1xuXHRcdFx0XHRyZXR1cm4gcGx1Z2luO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgUHJldHR5Rm9ybWF0UGx1Z2luRXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2spO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHByaW50ZXIodmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgaGFzQ2FsbGVkVG9KU09OKSB7XG5cdGxldCByZXN1bHQ7XG5cdGNvbnN0IHBsdWdpbiA9IGZpbmRQbHVnaW4oY29uZmlnLnBsdWdpbnMsIHZhbCk7XG5cdGlmIChwbHVnaW4gIT09IG51bGwpIHtcblx0XHRyZXN1bHQgPSBwcmludFBsdWdpbihwbHVnaW4sIHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGJhc2ljUmVzdWx0ID0gcHJpbnRCYXNpY1ZhbHVlKHZhbCwgY29uZmlnLnByaW50RnVuY3Rpb25OYW1lLCBjb25maWcuZXNjYXBlUmVnZXgsIGNvbmZpZy5lc2NhcGVTdHJpbmcpO1xuXHRcdGlmIChiYXNpY1Jlc3VsdCAhPT0gbnVsbCkge1xuXHRcdFx0cmVzdWx0ID0gYmFzaWNSZXN1bHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9IHByaW50Q29tcGxleFZhbHVlKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIGhhc0NhbGxlZFRvSlNPTik7XG5cdFx0fVxuXHR9XG5cdC8vIFBlci1kZXB0aCBvdXRwdXQgYnVkZ2V0IChpbnNwaXJlZCBieSBOb2RlJ3MgdXRpbC5pbnNwZWN0KS5cblx0Ly8gRWFjaCBkZXB0aCBsZXZlbCB0cmFja3Mgb3V0cHV0IGluZGVwZW5kZW50bHksIHNvIG5lc3RlZCByZXN1bHRzXG5cdC8vIGRvbid0IGluZmxhdGUgYSBzaW5nbGUgY291bnRlciAod2hpY2ggd291bGQgdW5kZXJjb3VudCBieSB+TnggZm9yXG5cdC8vIE4gbGV2ZWxzIG9mIG5lc3RpbmcpLiBOb2RlcyBhdCB0aGUgc2FtZSBkZXB0aCBwcm9kdWNlIGRpc2pvaW50IHNwYW5zXG5cdC8vIGluIHRoZSBvdXRwdXQgc3RyaW5nLCBzbyBlYWNoIGJ1Y2tldCBhY2N1cmF0ZWx5IHJlZmxlY3RzIG91dHB1dCBhdFxuXHQvLyB0aGF0IGxldmVsLiBUb3RhbCBvdXRwdXQgaXMgYm91bmRlZCBieSBtYXhEZXB0aCDDlyBtYXhPdXRwdXRMZW5ndGguXG5cdGNvbmZpZy5fb3V0cHV0TGVuZ3RoUGVyRGVwdGhbZGVwdGhdID8/PSAwO1xuXHRjb25maWcuX291dHB1dExlbmd0aFBlckRlcHRoW2RlcHRoXSArPSByZXN1bHQubGVuZ3RoO1xuXHRpZiAoY29uZmlnLl9vdXRwdXRMZW5ndGhQZXJEZXB0aFtkZXB0aF0gPiBjb25maWcubWF4T3V0cHV0TGVuZ3RoKSB7XG5cdFx0Y29uZmlnLm1heERlcHRoID0gMDtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuY29uc3QgREVGQVVMVF9USEVNRSA9IHtcblx0Y29tbWVudDogXCJncmF5XCIsXG5cdGNvbnRlbnQ6IFwicmVzZXRcIixcblx0cHJvcDogXCJ5ZWxsb3dcIixcblx0dGFnOiBcImN5YW5cIixcblx0dmFsdWU6IFwiZ3JlZW5cIlxufTtcbmNvbnN0IERFRkFVTFRfVEhFTUVfS0VZUyA9IE9iamVjdC5rZXlzKERFRkFVTFRfVEhFTUUpO1xuY29uc3QgREVGQVVMVF9PUFRJT05TID0ge1xuXHRjYWxsVG9KU09OOiB0cnVlLFxuXHRjb21wYXJlS2V5czogdW5kZWZpbmVkLFxuXHRlc2NhcGVSZWdleDogZmFsc2UsXG5cdGVzY2FwZVN0cmluZzogdHJ1ZSxcblx0aGlnaGxpZ2h0OiBmYWxzZSxcblx0aW5kZW50OiAyLFxuXHRtYXhEZXB0aDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuXHRtYXhPdXRwdXRMZW5ndGg6IDFlNixcblx0bWF4V2lkdGg6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcblx0bWluOiBmYWxzZSxcblx0cGx1Z2luczogW10sXG5cdHByaW50QmFzaWNQcm90b3R5cGU6IHRydWUsXG5cdHByaW50RnVuY3Rpb25OYW1lOiB0cnVlLFxuXHRwcmludFNoYWRvd1Jvb3Q6IHRydWUsXG5cdHRoZW1lOiBERUZBVUxUX1RIRU1FXG59O1xuZnVuY3Rpb24gdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpIHtcblx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob3B0aW9ucykpIHtcblx0XHRpZiAoIU9iamVjdC5oYXNPd24oREVGQVVMVF9PUFRJT05TLCBrZXkpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHByZXR0eS1mb3JtYXQ6IFVua25vd24gb3B0aW9uIFwiJHtrZXl9XCIuYCk7XG5cdFx0fVxuXHR9XG5cdGlmIChvcHRpb25zLm1pbiAmJiBvcHRpb25zLmluZGVudCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuaW5kZW50ICE9PSAwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwicHJldHR5LWZvcm1hdDogT3B0aW9ucyBcXFwibWluXFxcIiBhbmQgXFxcImluZGVudFxcXCIgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuXCIpO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRDb2xvcnNIaWdobGlnaHQoKSB7XG5cdHJldHVybiBERUZBVUxUX1RIRU1FX0tFWVMucmVkdWNlKChjb2xvcnMsIGtleSkgPT4ge1xuXHRcdGNvbnN0IHZhbHVlID0gREVGQVVMVF9USEVNRVtrZXldO1xuXHRcdGNvbnN0IGNvbG9yID0gdmFsdWUgJiYgc3R5bGVzW3ZhbHVlXTtcblx0XHRpZiAoY29sb3IgJiYgdHlwZW9mIGNvbG9yLmNsb3NlID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiBjb2xvci5vcGVuID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRjb2xvcnNba2V5XSA9IGNvbG9yO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHByZXR0eS1mb3JtYXQ6IE9wdGlvbiBcInRoZW1lXCIgaGFzIGEga2V5IFwiJHtrZXl9XCIgd2hvc2UgdmFsdWUgXCIke3ZhbHVlfVwiIGlzIHVuZGVmaW5lZCBpbiBhbnNpLXN0eWxlcy5gKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbG9ycztcblx0fSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG59XG5mdW5jdGlvbiBnZXRDb2xvcnNFbXB0eSgpIHtcblx0cmV0dXJuIERFRkFVTFRfVEhFTUVfS0VZUy5yZWR1Y2UoKGNvbG9ycywga2V5KSA9PiB7XG5cdFx0Y29sb3JzW2tleV0gPSB7XG5cdFx0XHRjbG9zZTogXCJcIixcblx0XHRcdG9wZW46IFwiXCJcblx0XHR9O1xuXHRcdHJldHVybiBjb2xvcnM7XG5cdH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xufVxuZnVuY3Rpb24gZ2V0UHJpbnRGdW5jdGlvbk5hbWUob3B0aW9ucykge1xuXHRyZXR1cm4gb3B0aW9ucz8ucHJpbnRGdW5jdGlvbk5hbWUgPz8gREVGQVVMVF9PUFRJT05TLnByaW50RnVuY3Rpb25OYW1lO1xufVxuZnVuY3Rpb24gZ2V0RXNjYXBlUmVnZXgob3B0aW9ucykge1xuXHRyZXR1cm4gb3B0aW9ucz8uZXNjYXBlUmVnZXggPz8gREVGQVVMVF9PUFRJT05TLmVzY2FwZVJlZ2V4O1xufVxuZnVuY3Rpb24gZ2V0RXNjYXBlU3RyaW5nKG9wdGlvbnMpIHtcblx0cmV0dXJuIG9wdGlvbnM/LmVzY2FwZVN0cmluZyA/PyBERUZBVUxUX09QVElPTlMuZXNjYXBlU3RyaW5nO1xufVxuZnVuY3Rpb24gZ2V0Q29uZmlnKG9wdGlvbnMpIHtcblx0cmV0dXJuIHtcblx0XHRjYWxsVG9KU09OOiBvcHRpb25zPy5jYWxsVG9KU09OID8/IERFRkFVTFRfT1BUSU9OUy5jYWxsVG9KU09OLFxuXHRcdGNvbG9yczogb3B0aW9ucz8uaGlnaGxpZ2h0ID8gZ2V0Q29sb3JzSGlnaGxpZ2h0KCkgOiBnZXRDb2xvcnNFbXB0eSgpLFxuXHRcdGNvbXBhcmVLZXlzOiB0eXBlb2Ygb3B0aW9ucz8uY29tcGFyZUtleXMgPT09IFwiZnVuY3Rpb25cIiB8fCBvcHRpb25zPy5jb21wYXJlS2V5cyA9PT0gbnVsbCA/IG9wdGlvbnMuY29tcGFyZUtleXMgOiBERUZBVUxUX09QVElPTlMuY29tcGFyZUtleXMsXG5cdFx0ZXNjYXBlUmVnZXg6IGdldEVzY2FwZVJlZ2V4KG9wdGlvbnMpLFxuXHRcdGVzY2FwZVN0cmluZzogZ2V0RXNjYXBlU3RyaW5nKG9wdGlvbnMpLFxuXHRcdGluZGVudDogb3B0aW9ucz8ubWluID8gXCJcIiA6IGNyZWF0ZUluZGVudChvcHRpb25zPy5pbmRlbnQgPz8gREVGQVVMVF9PUFRJT05TLmluZGVudCksXG5cdFx0bWF4RGVwdGg6IG9wdGlvbnM/Lm1heERlcHRoID8/IERFRkFVTFRfT1BUSU9OUy5tYXhEZXB0aCxcblx0XHRtYXhXaWR0aDogb3B0aW9ucz8ubWF4V2lkdGggPz8gREVGQVVMVF9PUFRJT05TLm1heFdpZHRoLFxuXHRcdG1pbjogb3B0aW9ucz8ubWluID8/IERFRkFVTFRfT1BUSU9OUy5taW4sXG5cdFx0cGx1Z2luczogb3B0aW9ucz8ucGx1Z2lucyA/PyBERUZBVUxUX09QVElPTlMucGx1Z2lucyxcblx0XHRwcmludEJhc2ljUHJvdG90eXBlOiBvcHRpb25zPy5wcmludEJhc2ljUHJvdG90eXBlID8/IHRydWUsXG5cdFx0cHJpbnRGdW5jdGlvbk5hbWU6IGdldFByaW50RnVuY3Rpb25OYW1lKG9wdGlvbnMpLFxuXHRcdHByaW50U2hhZG93Um9vdDogb3B0aW9ucz8ucHJpbnRTaGFkb3dSb290ID8/IHRydWUsXG5cdFx0c3BhY2luZ0lubmVyOiBvcHRpb25zPy5taW4gPyBcIiBcIiA6IFwiXFxuXCIsXG5cdFx0c3BhY2luZ091dGVyOiBvcHRpb25zPy5taW4gPyBcIlwiIDogXCJcXG5cIixcblx0XHRtYXhPdXRwdXRMZW5ndGg6IG9wdGlvbnM/Lm1heE91dHB1dExlbmd0aCA/PyBERUZBVUxUX09QVElPTlMubWF4T3V0cHV0TGVuZ3RoLFxuXHRcdF9vdXRwdXRMZW5ndGhQZXJEZXB0aDogW11cblx0fTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUluZGVudChpbmRlbnQpIHtcblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGluZGVudCArIDEgfSkuam9pbihcIiBcIik7XG59XG4vKipcbiogUmV0dXJucyBhIHByZXNlbnRhdGlvbiBzdHJpbmcgb2YgeW91ciBgdmFsYCBvYmplY3RcbiogQHBhcmFtIHZhbCBhbnkgcG90ZW50aWFsIEphdmFTY3JpcHQgb2JqZWN0XG4qIEBwYXJhbSBvcHRpb25zIEN1c3RvbSBzZXR0aW5nc1xuKi9cbmZ1bmN0aW9uIGZvcm1hdCh2YWwsIG9wdGlvbnMpIHtcblx0aWYgKG9wdGlvbnMpIHtcblx0XHR2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cdFx0aWYgKG9wdGlvbnMucGx1Z2lucykge1xuXHRcdFx0Y29uc3QgcGx1Z2luID0gZmluZFBsdWdpbihvcHRpb25zLnBsdWdpbnMsIHZhbCk7XG5cdFx0XHRpZiAocGx1Z2luICE9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBwcmludFBsdWdpbihwbHVnaW4sIHZhbCwgZ2V0Q29uZmlnKG9wdGlvbnMpLCBcIlwiLCAwLCBbXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGJhc2ljUmVzdWx0ID0gcHJpbnRCYXNpY1ZhbHVlKHZhbCwgZ2V0UHJpbnRGdW5jdGlvbk5hbWUob3B0aW9ucyksIGdldEVzY2FwZVJlZ2V4KG9wdGlvbnMpLCBnZXRFc2NhcGVTdHJpbmcob3B0aW9ucykpO1xuXHRpZiAoYmFzaWNSZXN1bHQgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gYmFzaWNSZXN1bHQ7XG5cdH1cblx0cmV0dXJuIHByaW50Q29tcGxleFZhbHVlKHZhbCwgZ2V0Q29uZmlnKG9wdGlvbnMpLCBcIlwiLCAwLCBbXSk7XG59XG5jb25zdCBwbHVnaW5zID0ge1xuXHRBc3ltbWV0cmljTWF0Y2hlcjogcGx1Z2luJDUsXG5cdERPTUNvbGxlY3Rpb246IHBsdWdpbiQ0LFxuXHRET01FbGVtZW50OiBwbHVnaW4kMyxcblx0SW1tdXRhYmxlOiBwbHVnaW4kMixcblx0UmVhY3RFbGVtZW50OiBwbHVnaW4kMSxcblx0UmVhY3RUZXN0Q29tcG9uZW50OiBwbHVnaW4sXG5cdEVycm9yOiBFcnJvclBsdWdpblxufTtcblxuZXhwb3J0IHsgREVGQVVMVF9PUFRJT05TLCBjcmVhdGVET01FbGVtZW50RmlsdGVyLCBmb3JtYXQsIHBsdWdpbnMgfTtcbiJdLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiOztBQUVBLFNBQVMsaUJBQWlCLEdBQUcsR0FBRztDQUM5QixFQUFFLFFB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
|